From 5a9b906e8a470b4ebbcd465d424206bd9cff8d80 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Thu, 30 Oct 2025 17:08:01 -0700 Subject: [PATCH 01/30] chore(clerk-js): Remove key column in API keys component --- .../src/ui/components/ApiKeys/ApiKeys.tsx | 41 ++++++++++++++++++- .../ui/components/ApiKeys/ApiKeysTable.tsx | 8 ++-- 2 files changed, 44 insertions(+), 5 deletions(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 37b25301659..e28560150c9 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -7,6 +7,7 @@ import useSWRMutation from 'swr/mutation'; import { useProtect } from '@/ui/common'; import { useApiKeysContext, withCoreUserGuard } from '@/ui/contexts'; import { + Alert, Box, Button, Col, @@ -15,13 +16,15 @@ import { Flow, Icon, localizationKeys, + Text, useLocalizations, } from '@/ui/customizables'; import { Action } from '@/ui/elements/Action'; +import { ClipboardInput } from '@/ui/elements/ClipboardInput'; import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; import { InputWithIcon } from '@/ui/elements/InputWithIcon'; import { Pagination } from '@/ui/elements/Pagination'; -import { MagnifyingGlass } from '@/ui/icons'; +import { InformationCircle, MagnifyingGlass } from '@/ui/icons'; import { mqu } from '@/ui/styledSystem'; import { isOrganizationId } from '@/utils'; @@ -69,6 +72,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); const [selectedApiKeyName, setSelectedApiKeyName] = useState(''); + const [showCopyAlert, setShowCopyAlert] = useState(true); const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { try { @@ -78,6 +82,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr }); closeCardFn(); card.setError(undefined); + setShowCopyAlert(true); } catch (err: any) { if (isClerkAPIResponseError(err)) { if (err.status === 409) { @@ -148,6 +153,40 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr + + {showCopyAlert ? ( + ({ + flexDirection: 'column', + alignItems: 'stretch', + gap: t.space.$4, + backgroundColor: t.colors.$successAlpha50, + borderColor: t.colors.$successAlpha300, + })} + > + + ({ flexShrink: 0, marginTop: t.space.$1 })} + /> + + Make sure to copy your API key now. You won't be able to see it again. + + + + + ) : null} Name Last used - Key + {/* Key */} {canManageAPIKeys && Actions} {isLoading ? ( - + - + {/* - + */} {canManageAPIKeys && ( Date: Thu, 30 Oct 2025 17:09:45 -0700 Subject: [PATCH 02/30] chore: update callout text --- packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index e28560150c9..d370dd40039 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -177,7 +177,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr variant='body' sx={{ flex: 1 }} > - Make sure to copy your API key now. You won't be able to see it again. + Save your API Key now. For security reasons, we won't allow you to view it again later. Date: Fri, 31 Oct 2025 12:50:46 -0700 Subject: [PATCH 03/30] chore: Improve Alert component --- .../src/core/modules/apiKeys/index.ts | 44 +++++------ .../clerk-js/src/core/resources/APIKey.ts | 2 + .../src/ui/components/ApiKeys/ApiKeys.tsx | 76 +++++++++++-------- .../src/ui/elements/ClipboardInput.tsx | 13 +++- packages/shared/src/types/apiKeys.ts | 1 + packages/shared/src/types/json.ts | 1 + 6 files changed, 79 insertions(+), 58 deletions(-) diff --git a/packages/clerk-js/src/core/modules/apiKeys/index.ts b/packages/clerk-js/src/core/modules/apiKeys/index.ts index fcf2b20497e..e49706b5619 100644 --- a/packages/clerk-js/src/core/modules/apiKeys/index.ts +++ b/packages/clerk-js/src/core/modules/apiKeys/index.ts @@ -69,35 +69,31 @@ export class APIKeys implements APIKeysNamespace { } async create(params: CreateAPIKeyParams): Promise { - const json = ( - await BaseResource._fetch({ - ...(await this.getBaseFapiProxyOptions()), - path: '/api_keys', - method: 'POST', - body: JSON.stringify({ - type: params.type ?? 'api_key', - name: params.name, - subject: params.subject ?? BaseResource.clerk.organization?.id ?? BaseResource.clerk.user?.id ?? '', - description: params.description, - seconds_until_expiration: params.secondsUntilExpiration, - }), - }) - )?.response as ApiKeyJSON; + const json = (await BaseResource._fetch({ + ...(await this.getBaseFapiProxyOptions()), + path: '/api_keys', + method: 'POST', + body: JSON.stringify({ + type: params.type ?? 'api_key', + name: params.name, + subject: params.subject ?? BaseResource.clerk.organization?.id ?? BaseResource.clerk.user?.id ?? '', + description: params.description, + seconds_until_expiration: params.secondsUntilExpiration, + }), + })) as unknown as ApiKeyJSON; return new APIKey(json); } async revoke(params: RevokeAPIKeyParams): Promise { - const json = ( - await BaseResource._fetch({ - ...(await this.getBaseFapiProxyOptions()), - method: 'POST', - path: `/api_keys/${params.apiKeyID}/revoke`, - body: JSON.stringify({ - revocation_reason: params.revocationReason, - }), - }) - )?.response as ApiKeyJSON; + const json = (await BaseResource._fetch({ + ...(await this.getBaseFapiProxyOptions()), + method: 'POST', + path: `/api_keys/${params.apiKeyID}/revoke`, + body: JSON.stringify({ + revocation_reason: params.revocationReason, + }), + })) as unknown as ApiKeyJSON; return new APIKey(json); } diff --git a/packages/clerk-js/src/core/resources/APIKey.ts b/packages/clerk-js/src/core/resources/APIKey.ts index 240708b6710..509e07cf56d 100644 --- a/packages/clerk-js/src/core/resources/APIKey.ts +++ b/packages/clerk-js/src/core/resources/APIKey.ts @@ -18,6 +18,7 @@ export class APIKey extends BaseResource implements APIKeyResource { expiration!: Date | null; createdBy!: string | null; description!: string | null; + secret?: string; lastUsedAt!: Date | null; createdAt!: Date; updatedAt!: Date; @@ -44,6 +45,7 @@ export class APIKey extends BaseResource implements APIKeyResource { this.expiration = data.expiration ? unixEpochToDate(data.expiration) : null; this.createdBy = data.created_by; this.description = data.description; + this.secret = data.secret; this.lastUsedAt = data.last_used_at ? unixEpochToDate(data.last_used_at) : null; this.updatedAt = unixEpochToDate(data.updated_at); this.createdAt = unixEpochToDate(data.created_at); diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 8b5c6d9b731..019143521bc 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -8,6 +8,7 @@ import { useProtect } from '@/ui/common'; import { useApiKeysContext, withCoreUserGuard } from '@/ui/contexts'; import { Alert, + AlertIcon, Box, Button, Col, @@ -24,7 +25,7 @@ import { ClipboardInput } from '@/ui/elements/ClipboardInput'; import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; import { InputWithIcon } from '@/ui/elements/InputWithIcon'; import { Pagination } from '@/ui/elements/Pagination'; -import { InformationCircle, MagnifyingGlass } from '@/ui/icons'; +import { Check, ClipboardOutline, MagnifyingGlass } from '@/ui/icons'; import { mqu } from '@/ui/styledSystem'; import { isOrganizationId } from '@/utils'; @@ -64,22 +65,25 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr cacheKey, } = useApiKeys({ subject, perPage, enabled: isOrg ? canReadAPIKeys : true }); const card = useCardState(); - const { trigger: createApiKey, isMutating } = useSWRMutation(cacheKey, (_, { arg }: { arg: CreateAPIKeyParams }) => - clerk.apiKeys.create(arg), - ); - const { t } = useLocalizations(); const clerk = useClerk(); + const { + data: createdApiKey, + trigger: createApiKey, + isMutating, + } = useSWRMutation(cacheKey, (_, { arg }: { arg: CreateAPIKeyParams }) => clerk.apiKeys.create(arg)); + const { t } = useLocalizations(); const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); const [selectedApiKeyName, setSelectedApiKeyName] = useState(''); - const [showCopyAlert, setShowCopyAlert] = useState(true); + const [showCopyAlert, setShowCopyAlert] = useState(false); const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { try { - await createApiKey({ + const result = await createApiKey({ ...params, subject, }); + console.log('result', result); closeCardFn(); card.setError(undefined); setShowCopyAlert(true); @@ -156,35 +160,45 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr {showCopyAlert ? ( ({ - flexDirection: 'column', - alignItems: 'stretch', - gap: t.space.$4, - backgroundColor: t.colors.$successAlpha50, - borderColor: t.colors.$successAlpha300, - })} > - - ({ flexShrink: 0, marginTop: t.space.$1 })} + + + - Save your API Key now. For security reasons, we won't allow you to view it again later. - - - + colorScheme='secondary' + localizationKey={`For security reasons, we won't allow you to view it again later.`} + sx={{ textAlign: 'left' }} + /> + + ) : null} ) => { - const { id, value, ...rest } = props; +type ClipboardInputProps = PropsOfComponent & { + copyIcon?: ComponentType; + copiedIcon?: ComponentType; +}; + +export const ClipboardInput = (props: ClipboardInputProps) => { + const { id, value, copyIcon = Clipboard, copiedIcon = TickShield, ...rest } = props; const { onCopy, hasCopied } = useClipboard(value as string); return ( @@ -32,7 +39,7 @@ export const ClipboardInput = (props: PropsOfComponent) => { > diff --git a/packages/shared/src/types/apiKeys.ts b/packages/shared/src/types/apiKeys.ts index 7074a7c3571..736f2f5590c 100644 --- a/packages/shared/src/types/apiKeys.ts +++ b/packages/shared/src/types/apiKeys.ts @@ -14,6 +14,7 @@ export interface APIKeyResource extends ClerkResource { expiration: Date | null; createdBy: string | null; description: string | null; + secret?: string; lastUsedAt: Date | null; createdAt: Date; updatedAt: Date; diff --git a/packages/shared/src/types/json.ts b/packages/shared/src/types/json.ts index eb55bb77909..1c005f4e68c 100644 --- a/packages/shared/src/types/json.ts +++ b/packages/shared/src/types/json.ts @@ -854,6 +854,7 @@ export interface ApiKeyJSON extends ClerkResourceJSON { expiration: number | null; created_by: string | null; description: string | null; + secret?: string; last_used_at: number | null; created_at: number; updated_at: number; From 48d78961ee2c361c510f6557c3d7f4c0c651f3ac Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 31 Oct 2025 12:52:06 -0700 Subject: [PATCH 04/30] remove console log --- packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 019143521bc..9fb0fe9bd58 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -79,11 +79,10 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { try { - const result = await createApiKey({ + await createApiKey({ ...params, subject, }); - console.log('result', result); closeCardFn(); card.setError(undefined); setShowCopyAlert(true); From 817b8b512f2fb5ca98743b2a6f59c160c4658d8f Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 31 Oct 2025 16:54:28 -0700 Subject: [PATCH 05/30] chore: remove unused methods --- .../backend/src/api/endpoints/APIKeysApi.ts | 9 -- .../src/core/modules/apiKeys/index.ts | 14 --- .../ui/components/ApiKeys/ApiKeysTable.tsx | 104 +----------------- packages/shared/src/types/apiKeys.ts | 6 - 4 files changed, 1 insertion(+), 132 deletions(-) diff --git a/packages/backend/src/api/endpoints/APIKeysApi.ts b/packages/backend/src/api/endpoints/APIKeysApi.ts index cc78e803299..ab5af630aa7 100644 --- a/packages/backend/src/api/endpoints/APIKeysApi.ts +++ b/packages/backend/src/api/endpoints/APIKeysApi.ts @@ -79,15 +79,6 @@ export class APIKeysAPI extends AbstractAPI { }); } - async getSecret(apiKeyId: string) { - this.requireId(apiKeyId); - - return this.request<{ secret: string }>({ - method: 'GET', - path: joinPaths(basePath, apiKeyId, 'secret'), - }); - } - async verifySecret(secret: string) { return this.request({ method: 'POST', diff --git a/packages/clerk-js/src/core/modules/apiKeys/index.ts b/packages/clerk-js/src/core/modules/apiKeys/index.ts index e49706b5619..e7634766689 100644 --- a/packages/clerk-js/src/core/modules/apiKeys/index.ts +++ b/packages/clerk-js/src/core/modules/apiKeys/index.ts @@ -54,20 +54,6 @@ export class APIKeys implements APIKeysNamespace { }); } - async getSecret(id: string): Promise { - return BaseResource.clerk - .getFapiClient() - .request<{ secret: string }>({ - ...(await this.getBaseFapiProxyOptions()), - method: 'GET', - path: `/api_keys/${id}/secret`, - }) - .then(res => { - const { secret } = res.payload as unknown as { secret: string }; - return secret; - }); - } - async create(params: CreateAPIKeyParams): Promise { const json = (await BaseResource._fetch({ ...(await this.getBaseFapiProxyOptions()), diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeysTable.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeysTable.tsx index cdaf30832d9..47233776e29 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeysTable.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeysTable.tsx @@ -1,15 +1,9 @@ -import { useClerk } from '@clerk/shared/react'; import type { APIKeyResource } from '@clerk/shared/types'; -import { useEffect, useState } from 'react'; -import useSWR from 'swr'; import { Box, - Button, descriptors, Flex, - Icon, - Input, localizationKeys, Spinner, Table, @@ -22,90 +16,9 @@ import { } from '@/ui/customizables'; import type { ElementDescriptor } from '@/ui/customizables/elementDescriptors'; import { ThreeDotsMenu } from '@/ui/elements/ThreeDotsMenu'; -import { useClipboard } from '@/ui/hooks'; -import { Check, ClipboardOutline, Eye, EyeSlash } from '@/ui/icons'; -import { common, mqu } from '@/ui/styledSystem'; +import { mqu } from '@/ui/styledSystem'; import { timeAgo } from '@/ui/utils/timeAgo'; -const useApiKeySecret = ({ apiKeyID, enabled }: { apiKeyID: string; enabled: boolean }) => { - const clerk = useClerk(); - - return useSWR(enabled ? ['api-key-secret', apiKeyID] : null, () => clerk.apiKeys.getSecret(apiKeyID)); -}; - -const CopySecretButton = ({ apiKeyID }: { apiKeyID: string }) => { - const [enabled, setEnabled] = useState(false); - const { data: apiKeySecret } = useApiKeySecret({ apiKeyID, enabled }); - const { onCopy, hasCopied } = useClipboard(apiKeySecret ?? ''); - - useEffect(() => { - if (enabled && apiKeySecret) { - onCopy(); - setEnabled(false); - } - }, [enabled, apiKeySecret, onCopy]); - - return ( - - ); -}; - -const SecretInputWithToggle = ({ apiKeyID }: { apiKeyID: string }) => { - const [revealed, setRevealed] = useState(false); - const { data: apiKeySecret } = useApiKeySecret({ apiKeyID, enabled: revealed }); - - return ( - - ({ - paddingInlineEnd: t.sizes.$12, - })} - /> - - - ); -}; - export const ApiKeysTable = ({ rows, isLoading, @@ -129,7 +42,6 @@ export const ApiKeysTable = ({ Name Last used - {/* Key */} {canManageAPIKeys && Actions} @@ -185,20 +97,6 @@ export const ApiKeysTable = ({ - {/* - - - - - */} {canManageAPIKeys && ( ; - /** - * @experimental This API is in early access and may change in future releases. - * - * Retrieves the secret for a given API key ID. - */ - getSecret(id: string): Promise; /** * @experimental This API is in early access and may change in future releases. * From 35016e788064f469c2ab5c07041c432edf4e47ac Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 31 Oct 2025 17:55:33 -0700 Subject: [PATCH 06/30] chore: add locales --- .../src/ui/components/ApiKeys/ApiKeys.tsx | 112 +++++---- packages/localizations/src/ar-SA.ts | 4 + packages/localizations/src/be-BY.ts | 4 + packages/localizations/src/bg-BG.ts | 4 + packages/localizations/src/bn-IN.ts | 4 + packages/localizations/src/ca-ES.ts | 4 + packages/localizations/src/cs-CZ.ts | 4 + packages/localizations/src/da-DK.ts | 4 + packages/localizations/src/de-DE.ts | 4 + packages/localizations/src/el-GR.ts | 4 + packages/localizations/src/en-GB.ts | 4 + packages/localizations/src/en-US.ts | 4 + packages/localizations/src/es-CR.ts | 4 + packages/localizations/src/es-ES.ts | 4 + packages/localizations/src/es-MX.ts | 4 + packages/localizations/src/es-UY.ts | 4 + packages/localizations/src/fa-IR.ts | 4 + packages/localizations/src/fi-FI.ts | 4 + packages/localizations/src/fr-FR.ts | 4 + packages/localizations/src/he-IL.ts | 4 + packages/localizations/src/hi-IN.ts | 4 + packages/localizations/src/hr-HR.ts | 4 + packages/localizations/src/hu-HU.ts | 4 + packages/localizations/src/id-ID.ts | 4 + packages/localizations/src/is-IS.ts | 4 + packages/localizations/src/it-IT.ts | 4 + packages/localizations/src/ja-JP.ts | 4 + packages/localizations/src/kk-KZ.ts | 4 + packages/localizations/src/ko-KR.ts | 4 + packages/localizations/src/mn-MN.ts | 4 + packages/localizations/src/ms-MY.ts | 4 + packages/localizations/src/nb-NO.ts | 4 + packages/localizations/src/nl-BE.ts | 4 + packages/localizations/src/nl-NL.ts | 4 + packages/localizations/src/pl-PL.ts | 4 + packages/localizations/src/pt-BR.ts | 4 + packages/localizations/src/pt-PT.ts | 4 + packages/localizations/src/ro-RO.ts | 4 + packages/localizations/src/ru-RU.ts | 4 + packages/localizations/src/sk-SK.ts | 4 + packages/localizations/src/sr-RS.ts | 4 + packages/localizations/src/sv-SE.ts | 4 + packages/localizations/src/ta-IN.ts | 4 + packages/localizations/src/te-IN.ts | 4 + packages/localizations/src/th-TH.ts | 4 + packages/localizations/src/tr-TR.ts | 4 + packages/localizations/src/uk-UA.ts | 4 + packages/localizations/src/vi-VN.ts | 4 + packages/localizations/src/zh-CN.ts | 4 + packages/localizations/src/zh-TW.ts | 4 + packages/shared/src/types/clerk.ts | 222 +++++++++++++----- packages/shared/src/types/localization.ts | 6 + 52 files changed, 424 insertions(+), 112 deletions(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 9fb0fe9bd58..a0df358d2fb 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -40,6 +40,57 @@ type APIKeysPageProps = { revokeModalRoot?: React.MutableRefObject; }; +type SaveApiKeyAlertProps = { + apiKeyName: string; + apiKeySecret: string; +}; + +const SaveApiKeyAlert = ({ apiKeyName, apiKeySecret }: SaveApiKeyAlertProps) => { + return ( + + + + + + + + + ); +}; + const RevokeAPIKeyConfirmationModal = lazy(() => import(/* webpackChunkName: "revoke-api-key-modal"*/ './RevokeAPIKeyConfirmationModal').then(module => ({ default: module.RevokeAPIKeyConfirmationModal, @@ -66,25 +117,29 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr } = useApiKeys({ subject, perPage, enabled: isOrg ? canReadAPIKeys : true }); const card = useCardState(); const clerk = useClerk(); - const { - data: createdApiKey, - trigger: createApiKey, - isMutating, - } = useSWRMutation(cacheKey, (_, { arg }: { arg: CreateAPIKeyParams }) => clerk.apiKeys.create(arg)); + const { trigger: createApiKey, isMutating } = useSWRMutation(cacheKey, (_key, { arg }: { arg: CreateAPIKeyParams }) => + clerk.apiKeys.create(arg), + ); const { t } = useLocalizations(); const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); const [selectedApiKeyName, setSelectedApiKeyName] = useState(''); const [showCopyAlert, setShowCopyAlert] = useState(false); + const [apiKeySecret, setApiKeySecret] = useState(''); + const [createdApiKeyName, setCreatedApiKeyName] = useState(''); const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { try { - await createApiKey({ + const createdApiKey = await createApiKey({ ...params, subject, }); closeCardFn(); card.setError(undefined); + + // The secret is only available in the create response + setCreatedApiKeyName(params.name); + setApiKeySecret(createdApiKey.secret ?? ''); setShowCopyAlert(true); } catch (err: any) { if (isClerkAPIResponseError(err)) { @@ -158,47 +213,10 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr {showCopyAlert ? ( - - - - - - - - + ) : null} void; @@ -268,7 +270,8 @@ export interface Clerk { /** * Opens the Clerk Checkout component in a drawer. - * @param props Optional checkout configuration parameters. + * + * @param props - Optional checkout configuration parameters. */ __internal_openCheckout: (props?: __internal_CheckoutProps) => void; @@ -279,7 +282,8 @@ export interface Clerk { /** * Opens the Clerk PlanDetails drawer component in a drawer. - * @param props `plan` or `planId` parameters are required. + * + * @param props - `plan` or `planId` parameters are required. */ __internal_openPlanDetails: (props: __internal_PlanDetailsProps) => void; @@ -290,7 +294,8 @@ export interface Clerk { /** * Opens the Clerk SubscriptionDetails drawer component in a drawer. - * @param props Optional configuration parameters. + * + * @param props - Optional configuration parameters. */ __internal_openSubscriptionDetails: (props?: __internal_SubscriptionDetailsProps) => void; @@ -301,7 +306,8 @@ export interface Clerk { /** * Opens the Clerk UserVerification component in a modal. - * @param props Optional user verification configuration parameters. + * + * @param props - Optional user verification configuration parameters. */ __internal_openReverification: (props?: __internal_UserVerificationModalProps) => void; @@ -312,7 +318,8 @@ export interface Clerk { /** * Opens the Google One Tap component. - * @param props Optional props that will be passed to the GoogleOneTap component. + * + * @param props - Optional props that will be passed to the GoogleOneTap component. */ openGoogleOneTap: (props?: GoogleOneTapProps) => void; @@ -324,7 +331,8 @@ export interface Clerk { /** * Opens the Clerk SignUp component in a modal. - * @param props Optional props that will be passed to the SignUp component. + * + * @param props - Optional props that will be passed to the SignUp component. */ openSignUp: (props?: SignUpModalProps) => void; @@ -335,7 +343,8 @@ export interface Clerk { /** * Opens the Clerk UserProfile modal. - * @param props Optional props that will be passed to the UserProfile component. + * + * @param props - Optional props that will be passed to the UserProfile component. */ openUserProfile: (props?: UserProfileModalProps) => void; @@ -346,7 +355,8 @@ export interface Clerk { /** * Opens the Clerk OrganizationProfile modal. - * @param props Optional props that will be passed to the OrganizationProfile component. + * + * @param props - Optional props that will be passed to the OrganizationProfile component. */ openOrganizationProfile: (props?: OrganizationProfileModalProps) => void; @@ -357,7 +367,8 @@ export interface Clerk { /** * Opens the Clerk CreateOrganization modal. - * @param props Optional props that will be passed to the CreateOrganization component. + * + * @param props - Optional props that will be passed to the CreateOrganization component. */ openCreateOrganization: (props?: CreateOrganizationModalProps) => void; @@ -368,7 +379,8 @@ export interface Clerk { /** * Opens the Clerk Waitlist modal. - * @param props Optional props that will be passed to the Waitlist component. + * + * @param props - Optional props that will be passed to the Waitlist component. */ openWaitlist: (props?: WaitlistModalProps) => void; @@ -379,8 +391,9 @@ export interface Clerk { /** * Mounts a sign in flow component at the target element. - * @param targetNode Target node to mount the SignIn component. - * @param signInProps sign in configuration parameters. + * + * @param targetNode - Target node to mount the SignIn component. + * @param signInProps - sign in configuration parameters. */ mountSignIn: (targetNode: HTMLDivElement, signInProps?: SignInProps) => void; @@ -388,15 +401,15 @@ export interface Clerk { * Unmount a sign in flow component from the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the SignIn component from. + * @param targetNode - Target node to unmount the SignIn component from. */ unmountSignIn: (targetNode: HTMLDivElement) => void; /** * Mounts a sign up flow component at the target element. * - * @param targetNode Target node to mount the SignUp component. - * @param signUpProps sign up configuration parameters. + * @param targetNode - Target node to mount the SignUp component. + * @param signUpProps - sign up configuration parameters. */ mountSignUp: (targetNode: HTMLDivElement, signUpProps?: SignUpProps) => void; @@ -404,14 +417,14 @@ export interface Clerk { * Unmount a sign up flow component from the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the SignUp component from. + * @param targetNode - Target node to unmount the SignUp component from. */ unmountSignUp: (targetNode: HTMLDivElement) => void; /** * Mount a user avatar component at the target element. * - * @param targetNode Target node to mount the UserAvatar component. + * @param targetNode - Target node to mount the UserAvatar component. */ mountUserAvatar: (targetNode: HTMLDivElement, userAvatarProps?: UserAvatarProps) => void; @@ -419,15 +432,15 @@ export interface Clerk { * Unmount a user avatar component at the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the UserAvatar component from. + * @param targetNode - Target node to unmount the UserAvatar component from. */ unmountUserAvatar: (targetNode: HTMLDivElement) => void; /** * Mount a user button component at the target element. * - * @param targetNode Target node to mount the UserButton component. - * @param userButtonProps User button configuration parameters. + * @param targetNode - Target node to mount the UserButton component. + * @param userButtonProps - User button configuration parameters. */ mountUserButton: (targetNode: HTMLDivElement, userButtonProps?: UserButtonProps) => void; @@ -435,15 +448,15 @@ export interface Clerk { * Unmount a user button component at the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the UserButton component from. + * @param targetNode - Target node to unmount the UserButton component from. */ unmountUserButton: (targetNode: HTMLDivElement) => void; /** * Mount a user profile component at the target element. * - * @param targetNode Target to mount the UserProfile component. - * @param userProfileProps User profile configuration parameters. + * @param targetNode - Target to mount the UserProfile component. + * @param userProfileProps - User profile configuration parameters. */ mountUserProfile: (targetNode: HTMLDivElement, userProfileProps?: UserProfileProps) => void; @@ -451,46 +464,52 @@ export interface Clerk { * Unmount a user profile component at the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the UserProfile component from. + * @param targetNode - Target node to unmount the UserProfile component from. */ unmountUserProfile: (targetNode: HTMLDivElement) => void; /** * Mount an organization profile component at the target element. - * @param targetNode Target to mount the OrganizationProfile component. - * @param props Configuration parameters. + * + * @param targetNode - Target to mount the OrganizationProfile component. + * @param props - Configuration parameters. */ mountOrganizationProfile: (targetNode: HTMLDivElement, props?: OrganizationProfileProps) => void; /** * Unmount the organization profile component from the target node. - * @param targetNode Target node to unmount the OrganizationProfile component from. + * + * @param targetNode - Target node to unmount the OrganizationProfile component from. */ unmountOrganizationProfile: (targetNode: HTMLDivElement) => void; /** * Mount a CreateOrganization component at the target element. - * @param targetNode Target to mount the CreateOrganization component. - * @param props Configuration parameters. + * + * @param targetNode - Target to mount the CreateOrganization component. + * @param props - Configuration parameters. */ mountCreateOrganization: (targetNode: HTMLDivElement, props?: CreateOrganizationProps) => void; /** * Unmount the CreateOrganization component from the target node. - * @param targetNode Target node to unmount the CreateOrganization component from. + * + * @param targetNode - Target node to unmount the CreateOrganization component from. */ unmountCreateOrganization: (targetNode: HTMLDivElement) => void; /** * Mount an organization switcher component at the target element. - * @param targetNode Target to mount the OrganizationSwitcher component. - * @param props Configuration parameters. + * + * @param targetNode - Target to mount the OrganizationSwitcher component. + * @param props - Configuration parameters. */ mountOrganizationSwitcher: (targetNode: HTMLDivElement, props?: OrganizationSwitcherProps) => void; /** * Unmount the organization profile component from the target node.* - * @param targetNode Target node to unmount the OrganizationSwitcher component from. + * + * @param targetNode - Target node to unmount the OrganizationSwitcher component from. */ unmountOrganizationSwitcher: (targetNode: HTMLDivElement) => void; @@ -499,40 +518,46 @@ export interface Clerk { * It can be used when `mountOrganizationSwitcher({ asStandalone: true})`, to avoid unwanted loading states. * * @experimental This experimental API is subject to change. - * @param props Optional user verification configuration parameters. + * + * @param props - Optional user verification configuration parameters. */ __experimental_prefetchOrganizationSwitcher: () => void; /** * Mount an organization list component at the target element. - * @param targetNode Target to mount the OrganizationList component. - * @param props Configuration parameters. + * + * @param targetNode - Target to mount the OrganizationList component. + * @param props - Configuration parameters. */ mountOrganizationList: (targetNode: HTMLDivElement, props?: OrganizationListProps) => void; /** * Unmount the organization list component from the target node.* - * @param targetNode Target node to unmount the OrganizationList component from. + * + * @param targetNode - Target node to unmount the OrganizationList component from. */ unmountOrganizationList: (targetNode: HTMLDivElement) => void; /** * Mount a waitlist at the target element. - * @param targetNode Target to mount the Waitlist component. - * @param props Configuration parameters. + * + * @param targetNode - Target to mount the Waitlist component. + * @param props - Configuration parameters. */ mountWaitlist: (targetNode: HTMLDivElement, props?: WaitlistProps) => void; /** * Unmount the Waitlist component from the target node. - * @param targetNode Target node to unmount the Waitlist component from. + * + * @param targetNode - Target node to unmount the Waitlist component from. */ unmountWaitlist: (targetNode: HTMLDivElement) => void; /** * Mounts a pricing table component at the target element. - * @param targetNode Target node to mount the PricingTable component. - * @param props configuration parameters. + * + * @param targetNode - Target node to mount the PricingTable component. + * @param props - configuration parameters. */ mountPricingTable: (targetNode: HTMLDivElement, props?: PricingTableProps) => void; @@ -540,7 +565,7 @@ export interface Clerk { * Unmount a pricing table component from the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the PricingTable component from. + * @param targetNode - Target node to unmount the PricingTable component from. */ unmountPricingTable: (targetNode: HTMLDivElement) => void; @@ -548,9 +573,11 @@ export interface Clerk { * This API is in early access and may change in future releases. * * Mount a api keys component at the target element. + * * @experimental - * @param targetNode Target to mount the APIKeys component. - * @param props Configuration parameters. + * + * @param targetNode - Target to mount the APIKeys component. + * @param props - Configuration parameters. */ mountApiKeys: (targetNode: HTMLDivElement, props?: APIKeysProps) => void; @@ -559,28 +586,33 @@ export interface Clerk { * * Unmount a api keys component from the target element. * If there is no component mounted at the target node, results in a noop. + * * @experimental - * @param targetNode Target node to unmount the ApiKeys component from. + * + * @param targetNode - Target node to unmount the ApiKeys component from. */ unmountApiKeys: (targetNode: HTMLDivElement) => void; /** * Mounts a OAuth consent component at the target element. - * @param targetNode Target node to mount the OAuth consent component. - * @param oauthConsentProps OAuth consent configuration parameters. + * + * @param targetNode - Target node to mount the OAuth consent component. + * @param oauthConsentProps - OAuth consent configuration parameters. */ __internal_mountOAuthConsent: (targetNode: HTMLDivElement, oauthConsentProps?: __internal_OAuthConsentProps) => void; /** * Unmounts a OAuth consent component from the target element. - * @param targetNode Target node to unmount the OAuth consent component from. + * + * @param targetNode - Target node to unmount the OAuth consent component from. */ __internal_unmountOAuthConsent: (targetNode: HTMLDivElement) => void; /** * Mounts a TaskChooseOrganization component at the target element. - * @param targetNode Target node to mount the TaskChooseOrganization component. - * @param props configuration parameters. + * + * @param targetNode - Target node to mount the TaskChooseOrganization component. + * @param props - configuration parameters. */ mountTaskChooseOrganization: (targetNode: HTMLDivElement, props?: TaskChooseOrganizationProps) => void; @@ -588,7 +620,7 @@ export interface Clerk { * Unmount a TaskChooseOrganization component from the target element. * If there is no component mounted at the target node, results in a noop. * - * @param targetNode Target node to unmount the TaskChooseOrganization component from. + * @param targetNode - Target node to unmount the TaskChooseOrganization component from. */ unmountTaskChooseOrganization: (targetNode: HTMLDivElement) => void; @@ -607,13 +639,14 @@ export interface Clerk { * When there is no active session, user and session will both be null. * When a session is loading, user and session will be undefined. * - * @param callback Callback function receiving the most updated Clerk resources after a change. + * @param callback - Callback function receiving the most updated Clerk resources after a change. * @returns - Unsubscribe callback */ addListener: (callback: ListenerCallback) => UnsubscribeCallback; /** * Registers an event handler for a specific Clerk event. + * * @param event - The event name to subscribe to * @param handler - The callback function to execute when the event is dispatched * @param opt - Optional configuration object @@ -623,6 +656,7 @@ export interface Clerk { /** * Removes an event handler for a specific Clerk event. + * * @param event - The event name to unsubscribe from * @param handler - The callback function to remove */ @@ -631,6 +665,7 @@ export interface Clerk { /** * Registers an internal listener that triggers a callback each time `Clerk.navigate` is called. * Its purpose is to notify modal UI components when a navigation event occurs, allowing them to close if necessary. + * * @internal */ __internal_addNavigationListener: (callback: () => void) => UnsubscribeCallback; @@ -651,21 +686,21 @@ export interface Clerk { /** * Decorates the provided url with the auth token for development instances. * - * @param {string} to + * @param to */ buildUrlWithAuth(to: string): string; /** * Returns the configured url where `` is mounted or a custom sign-in page is rendered. * - * @param opts A {@link RedirectOptions} object + * @param opts - A {@link RedirectOptions} object */ buildSignInUrl(opts?: RedirectOptions): string; /** * Returns the configured url where `` is mounted or a custom sign-up page is rendered. * - * @param opts A {@link RedirectOptions} object + * @param opts - A {@link RedirectOptions} object */ buildSignUpUrl(opts?: RedirectOptions): string; @@ -723,21 +758,21 @@ export interface Clerk { * * Redirects to the provided url after decorating it with the auth token for development instances. * - * @param {string} to + * @param to */ redirectWithAuth(to: string): Promise; /** * Redirects to the configured URL where `` is mounted. * - * @param opts A {@link RedirectOptions} object + * @param opts - A {@link RedirectOptions} object */ redirectToSignIn(opts?: SignInRedirectOptions): Promise; /** * Redirects to the configured URL where `` is mounted. * - * @param opts A {@link RedirectOptions} object + * @param opts - A {@link RedirectOptions} object */ redirectToSignUp(opts?: SignUpRedirectOptions): Promise; @@ -779,7 +814,7 @@ export interface Clerk { /** * Redirects to the configured URL where tasks are mounted. * - * @param opts A {@link RedirectOptions} object + * @param opts - A {@link RedirectOptions} object */ redirectToTasks(opts?: TasksRedirectOptions): Promise; @@ -862,6 +897,7 @@ export interface Clerk { /** * This is an optional function. * This function is used to load cached Client and Environment resources if Clerk fails to load them from the Frontend API. + * * @internal */ __internal_getCachedResources: @@ -870,6 +906,7 @@ export interface Clerk { /** * This function is used to reload the initial resources (Environment/Client) from the Frontend API. + * * @internal */ __internal_reloadInitialResources: () => Promise; @@ -882,6 +919,7 @@ export interface Clerk { /** * API Keys Object + * * @experimental * This API is in early access and may change in future releases. */ @@ -889,6 +927,7 @@ export interface Clerk { /** * Checkout API + * * @experimental * This API is in early access and may change in future releases. */ @@ -1052,6 +1091,7 @@ export type ClerkOptions = ClerkOptionsNavigation & debug?: boolean; /** * If false, the sampling rates provided per telemetry event will be ignored and all events will be sent. + * * @default true */ perEventSampling?: boolean; @@ -1072,6 +1112,7 @@ export type ClerkOptions = ClerkOptionsNavigation & { /** * Persist the Clerk client to match the user's device with a client. + * * @default true */ persistClient: boolean; @@ -1086,12 +1127,14 @@ export type ClerkOptions = ClerkOptionsNavigation & /** * The URL a developer should be redirected to in order to claim an instance created in Keyless mode. + * * @internal */ __internal_keyless_claimKeylessApplicationUrl?: string; /** * After a developer has claimed their instance created by Keyless mode, they can use this URL to find their instance's keys + * * @internal */ __internal_keyless_copyInstanceKeysUrl?: string; @@ -1099,6 +1142,7 @@ export type ClerkOptions = ClerkOptionsNavigation & /** * Pass a function that will trigger the unmounting of the Keyless Prompt. * It should cause the values of `__internal_claimKeylessApplicationUrl` and `__internal_copyInstanceKeysUrl` to become undefined. + * * @internal */ __internal_keyless_dismissPrompt?: (() => Promise) | null; @@ -1108,6 +1152,7 @@ export type ClerkOptions = ClerkOptionsNavigation & * session tasks need to be completed. * * When `undefined`, it uses Clerk's default task flow URLs. + * * @default undefined */ taskUrls?: Record; @@ -1213,6 +1258,7 @@ export type SignUpRedirectOptions = RedirectOptions & /** * The parameters for the `setActive()` method. + * * @interface */ export type SetActiveParams = { @@ -1276,12 +1322,14 @@ export type SignInProps = RoutingOptions & { * Full URL or path to navigate to after successful sign in. * This value has precedence over other redirect props, environment variables or search params. * Use this prop to override the redirect URL when needed. + * * @default undefined */ forceRedirectUrl?: string | null; /** * Full URL or path to navigate to after successful sign in. * This value is used when no other redirect props, environment variables or search params are present. + * * @default undefined */ fallbackRedirectUrl?: string | null; @@ -1340,6 +1388,7 @@ export interface TransferableOption { /** * Indicates whether or not sign in attempts are transferable to the sign up flow. * When set to false, prevents opaque sign ups when a user attempts to sign in via OAuth with an email that doesn't exist. + * * @default true */ transferable?: boolean; @@ -1361,6 +1410,7 @@ export type __internal_UserVerificationProps = RoutingOptions & { /** * Defines the steps of the verification flow. * When `multiFactor` is used, the user will be prompt for a first factor flow followed by a second factor flow. + * * @default `'secondFactor'` */ level?: SessionVerificationLevel; @@ -1401,12 +1451,14 @@ type GoogleOneTapRedirectUrlProps = SignInForceRedirectUrl & SignUpForceRedirect export type GoogleOneTapProps = GoogleOneTapRedirectUrlProps & { /** * Whether to cancel the Google One Tap request if a user clicks outside the prompt. + * * @default true */ cancelOnTapOutside?: boolean; /** * Enables upgraded One Tap UX on ITP browsers. * Turning this options off, would hide any One Tap UI in such browsers. + * * @default true */ itpSupport?: boolean; @@ -1414,6 +1466,7 @@ export type GoogleOneTapProps = GoogleOneTapRedirectUrlProps & { * FedCM enables more private sign-in flows without requiring the use of third-party cookies. * The browser controls user settings, displays user prompts, and only contacts an Identity Provider such as Google after explicit user consent is given. * Backwards compatible with browsers that still support third-party cookies. + * * @default true */ fedCmSupport?: boolean; @@ -1425,12 +1478,14 @@ export type SignUpProps = RoutingOptions & { * Full URL or path to navigate to after successful sign up. * This value has precedence over other redirect props, environment variables or search params. * Use this prop to override the redirect URL when needed. + * * @default undefined */ forceRedirectUrl?: string | null; /** * Full URL or path to navigate to after successful sign up. * This value is used when no other redirect props, environment variables or search params are present. + * * @default undefined */ fallbackRedirectUrl?: string | null; @@ -1496,15 +1551,18 @@ export type UserProfileProps = RoutingOptions & { customPages?: CustomPage[]; /** * Specify on which page the user profile modal will open. + * * @example __experimental_startPath: '/members' + * * @experimental - **/ + */ __experimental_startPath?: string; /** * Specify options for the underlying component. * e.g. + * * @experimental - **/ + */ apiKeysProps?: APIKeysProps; }; @@ -1513,6 +1571,7 @@ export type UserProfileModalProps = WithoutRouting; export type OrganizationProfileProps = RoutingOptions & { /** * Full URL or path to navigate to after the user leaves the currently active organization. + * * @default undefined */ afterLeaveOrganizationUrl?: string; @@ -1528,15 +1587,18 @@ export type OrganizationProfileProps = RoutingOptions & { customPages?: CustomPage[]; /** * Specify on which page the organization profile modal will open. + * * @example __experimental_startPath: '/organization-members' + * * @experimental - **/ + */ __experimental_startPath?: string; /** * Specify options for the underlying component. * e.g. + * * @experimental - **/ + */ apiKeysProps?: APIKeysProps; }; @@ -1545,6 +1607,7 @@ export type OrganizationProfileModalProps = WithoutRouting>; /** * Hides the screen for sending invitations after an organization is created. + * * @default undefined When left undefined Clerk will automatically hide the screen if * the number of max allowed members is equal to 1 */ @@ -1598,18 +1662,21 @@ export type UserButtonProps = UserButtonProfileMode & { * Enables developers to implement a custom dialog. * * @default undefined + * * @experimental This API is experimental and may change at any moment. */ __experimental_asStandalone?: boolean | ((opened: boolean) => void); /** * Full URL or path to navigate to after sign out is complete + * * @deprecated Configure `afterSignOutUrl` as a global configuration, either in `` or in `await Clerk.load()`. */ afterSignOutUrl?: string; /** * Full URL or path to navigate to after signing out the current user is complete. * This option applies to multi-session applications. + * * @deprecated Configure `afterMultiSessionSingleSignOutUrl` as a global configuration, either in `` or in `await Clerk.load()`. */ afterMultiSessionSingleSignOutUrl?: string; @@ -1673,6 +1740,7 @@ export type OrganizationSwitcherProps = CreateOrganizationMode & * Enables developers to implement a custom dialog. * * @default undefined + * * @experimental This API is experimental and may change at any moment. */ __experimental_asStandalone?: boolean | ((opened: boolean) => void); @@ -1682,17 +1750,21 @@ export type OrganizationSwitcherProps = CreateOrganizationMode & * This option controls whether OrganizationSwitcher will include the user's personal account * in the organization list. Setting this to `false` will hide the personal account entry, * and users will only be able to switch between organizations. + * * @default true */ hidePersonal?: boolean; /** * Full URL or path to navigate to after a successful organization switch. + * * @default undefined + * * @deprecated Use `afterSelectOrganizationUrl` or `afterSelectPersonalUrl`. */ afterSwitchOrganizationUrl?: string; /** * Full URL or path to navigate to after creating a new organization. + * * @default undefined */ afterCreateOrganizationUrl?: @@ -1701,6 +1773,7 @@ export type OrganizationSwitcherProps = CreateOrganizationMode & /** * Full URL or path to navigate to after a successful organization selection. * Accepts a function that returns URL or path + * * @default undefined` */ afterSelectOrganizationUrl?: @@ -1709,16 +1782,19 @@ export type OrganizationSwitcherProps = CreateOrganizationMode & /** * Full URL or path to navigate to after a successful selection of personal workspace. * Accepts a function that returns URL or path + * * @default undefined */ afterSelectPersonalUrl?: ((user: UserResource) => string) | LooseExtractedParams>; /** * Full URL or path to navigate to after the user leaves the currently active organization. + * * @default undefined */ afterLeaveOrganizationUrl?: string; /** * Hides the screen for sending invitations after an organization is created. + * * @default undefined When left undefined Clerk will automatically hide the screen if * the number of max allowed members is equal to 1 */ @@ -1745,6 +1821,7 @@ export type OrganizationSwitcherProps = CreateOrganizationMode & export type OrganizationListProps = { /** * Full URL or path to navigate to after creating a new organization. + * * @default undefined */ afterCreateOrganizationUrl?: @@ -1753,6 +1830,7 @@ export type OrganizationListProps = { /** * Full URL or path to navigate to after a successful organization selection. * Accepts a function that returns URL or path + * * @default undefined` */ afterSelectOrganizationUrl?: @@ -1766,6 +1844,7 @@ export type OrganizationListProps = { appearance?: OrganizationListTheme; /** * Hides the screen for sending invitations after an organization is created. + * * @default undefined When left undefined Clerk will automatically hide the screen if * the number of max allowed members is equal to 1 */ @@ -1775,12 +1854,14 @@ export type OrganizationListProps = { * This option controls whether OrganizationList will include the user's personal account * in the organization list. Setting this to `false` will hide the personal account entry, * and users will only be able to switch between organizations. + * * @default true */ hidePersonal?: boolean; /** * Full URL or path to navigate to after a successful selection of personal workspace. * Accepts a function that returns URL or path + * * @default undefined` */ afterSelectPersonalUrl?: ((user: UserResource) => string) | LooseExtractedParams>; @@ -1814,16 +1895,19 @@ export type WaitlistModalProps = WaitlistProps; type PricingTableDefaultProps = { /** * The position of the CTA button. + * * @default 'bottom' */ ctaPosition?: 'top' | 'bottom'; /** * Whether to collapse features on the pricing table. + * * @default false */ collapseFeatures?: boolean; /** * Full URL or path to navigate to after checkout is complete and the user clicks the "Continue" button. + * * @default undefined */ newSubscriptionRedirectUrl?: string; @@ -1833,6 +1917,7 @@ type PricingTableBaseProps = { /** * The subscriber type to display plans for. * If `organization`, show plans for the active organization; otherwise for the user. + * * @default 'user' */ for?: ForPayerType; @@ -1857,11 +1942,13 @@ export type APIKeysProps = { /** * The type of API key to filter by. * Currently, only 'api_key' is supported. + * * @default 'api_key' */ type?: 'api_key'; /** * The number of API keys to show per page. + * * @default 5 */ perPage?: number; @@ -1873,6 +1960,7 @@ export type APIKeysProps = { appearance?: APIKeysTheme; /** * Whether to show the description field in the API key creation form. + * * @default false */ showDescription?: boolean; @@ -1908,6 +1996,7 @@ export type __internal_CheckoutProps = { portalRoot?: PortalRoot; /** * Full URL or path to navigate to after checkout is complete and the user clicks the "Continue" button. + * * @default undefined */ newSubscriptionRedirectUrl?: string; @@ -1930,6 +2019,7 @@ export type __experimental_CheckoutButtonProps = { }; /** * Full URL or path to navigate to after checkout is complete and the user clicks the "Continue" button. + * * @default undefined */ newSubscriptionRedirectUrl?: string; @@ -1988,6 +2078,7 @@ export type __internal_SubscriptionDetailsProps = { /** * The subscriber type to display the subscription details for. * If `organization` is provided, the subscription details will be displayed for the active organization. + * * @default 'user' */ for?: ForPayerType; @@ -2004,6 +2095,7 @@ export type __experimental_SubscriptionDetailsButtonProps = { /** * The subscriber type to display the subscription details for. * If `organization` is provided, the subscription details will be displayed for the active organization. + * * @default 'user' */ for?: ForPayerType; diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 2bf928a129a..c8ed17d6dae 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -3,6 +3,7 @@ import type { CamelToSnake, DeepPartial } from './utils'; /** * @internal + * * @example * type PageTitle = LocalizationValue<'name', 'greeting'>; * // ?^ @@ -69,6 +70,7 @@ export type __internal_LocalizationResource = { maintenanceMode: LocalizationValue; /** * Add role keys and their localized values, e.g. `roles: { 'org:teacher': 'Teacher'}`. + * * @experimental */ roles: { @@ -1236,6 +1238,10 @@ export type __internal_LocalizationResource = { createdAndExpirationStatus__expiresOn: LocalizationValue<'createdDate' | 'expiresDate'>; formFieldCaption__expiration__never: LocalizationValue; formFieldCaption__expiration__expiresOn: LocalizationValue<'date'>; + saveAlert: { + title: LocalizationValue<'name'>; + subtitle: LocalizationValue; + }; }; taskChooseOrganization: { title: LocalizationValue; From b4a8f1c1686b763524a73a4f8b1eb8d8520446b1 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Fri, 31 Oct 2025 20:19:22 -0700 Subject: [PATCH 07/30] chore: use existing created api key data for alert --- .../src/ui/components/ApiKeys/ApiKeys.tsx | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index a0df358d2fb..a02353afd50 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -117,29 +117,25 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr } = useApiKeys({ subject, perPage, enabled: isOrg ? canReadAPIKeys : true }); const card = useCardState(); const clerk = useClerk(); - const { trigger: createApiKey, isMutating } = useSWRMutation(cacheKey, (_key, { arg }: { arg: CreateAPIKeyParams }) => - clerk.apiKeys.create(arg), - ); + const { + data: createdApiKey, + trigger: createApiKey, + isMutating, + } = useSWRMutation(cacheKey, (_key, { arg }: { arg: CreateAPIKeyParams }) => clerk.apiKeys.create(arg)); const { t } = useLocalizations(); const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); const [selectedApiKeyName, setSelectedApiKeyName] = useState(''); const [showCopyAlert, setShowCopyAlert] = useState(false); - const [apiKeySecret, setApiKeySecret] = useState(''); - const [createdApiKeyName, setCreatedApiKeyName] = useState(''); const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { try { - const createdApiKey = await createApiKey({ + await createApiKey({ ...params, subject, }); closeCardFn(); card.setError(undefined); - - // The secret is only available in the create response - setCreatedApiKeyName(params.name); - setApiKeySecret(createdApiKey.secret ?? ''); setShowCopyAlert(true); } catch (err: any) { if (isClerkAPIResponseError(err)) { @@ -214,8 +210,8 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr {showCopyAlert ? ( ) : null} Date: Sun, 2 Nov 2025 08:08:07 -0800 Subject: [PATCH 08/30] test: remove obsolete tests and test alert with copy secret --- .../tests/machine-auth/component.test.ts | 68 ++++--------------- .../src/ui/components/ApiKeys/ApiKeys.tsx | 60 +--------------- .../ui/components/ApiKeys/CopyApiKeyAlert.tsx | 54 +++++++++++++++ packages/localizations/src/ar-SA.ts | 8 +-- packages/localizations/src/be-BY.ts | 8 +-- packages/localizations/src/bg-BG.ts | 8 +-- packages/localizations/src/bn-IN.ts | 8 +-- packages/localizations/src/ca-ES.ts | 8 +-- packages/localizations/src/cs-CZ.ts | 8 +-- packages/localizations/src/da-DK.ts | 8 +-- packages/localizations/src/de-DE.ts | 8 +-- packages/localizations/src/el-GR.ts | 8 +-- packages/localizations/src/en-GB.ts | 8 +-- packages/localizations/src/en-US.ts | 8 +-- packages/localizations/src/es-CR.ts | 8 +-- packages/localizations/src/es-ES.ts | 8 +-- packages/localizations/src/es-MX.ts | 8 +-- packages/localizations/src/es-UY.ts | 8 +-- packages/localizations/src/fa-IR.ts | 8 +-- packages/localizations/src/fi-FI.ts | 8 +-- packages/localizations/src/fr-FR.ts | 8 +-- packages/localizations/src/he-IL.ts | 8 +-- packages/localizations/src/hi-IN.ts | 8 +-- packages/localizations/src/hr-HR.ts | 8 +-- packages/localizations/src/hu-HU.ts | 8 +-- packages/localizations/src/id-ID.ts | 8 +-- packages/localizations/src/is-IS.ts | 8 +-- packages/localizations/src/it-IT.ts | 8 +-- packages/localizations/src/ja-JP.ts | 8 +-- packages/localizations/src/kk-KZ.ts | 8 +-- packages/localizations/src/ko-KR.ts | 8 +-- packages/localizations/src/mn-MN.ts | 8 +-- packages/localizations/src/ms-MY.ts | 8 +-- packages/localizations/src/nb-NO.ts | 8 +-- packages/localizations/src/nl-BE.ts | 8 +-- packages/localizations/src/nl-NL.ts | 8 +-- packages/localizations/src/pl-PL.ts | 8 +-- packages/localizations/src/pt-BR.ts | 8 +-- packages/localizations/src/pt-PT.ts | 8 +-- packages/localizations/src/ro-RO.ts | 8 +-- packages/localizations/src/ru-RU.ts | 8 +-- packages/localizations/src/sk-SK.ts | 8 +-- packages/localizations/src/sr-RS.ts | 8 +-- packages/localizations/src/sv-SE.ts | 8 +-- packages/localizations/src/ta-IN.ts | 8 +-- packages/localizations/src/te-IN.ts | 8 +-- packages/localizations/src/th-TH.ts | 8 +-- packages/localizations/src/tr-TR.ts | 8 +-- packages/localizations/src/uk-UA.ts | 8 +-- packages/localizations/src/vi-VN.ts | 8 +-- packages/localizations/src/zh-CN.ts | 8 +-- packages/localizations/src/zh-TW.ts | 8 +-- packages/shared/src/types/localization.ts | 2 +- 53 files changed, 269 insertions(+), 307 deletions(-) create mode 100644 packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx diff --git a/integration/tests/machine-auth/component.test.ts b/integration/tests/machine-auth/component.test.ts index 86c49d08548..a86f5d1c728 100644 --- a/integration/tests/machine-auth/component.test.ts +++ b/integration/tests/machine-auth/component.test.ts @@ -97,7 +97,7 @@ testAgainstRunningApps({ await expect(table.locator('.cl-tableRow', { hasText: apiKeyName })).toHaveCount(0); }); - test('can copy api key secret', async ({ page, context }) => { + test('can copy api key secret after creation', async ({ page, context }) => { const u = createTestUtils({ app, page, context }); await u.po.signIn.goTo(); await u.po.signIn.waitForMounted(); @@ -109,71 +109,33 @@ testAgainstRunningApps({ const apiKeyName = `${fakeAdmin.firstName}-${Date.now()}`; + // Wait for create API response to get the secret + const createResponsePromise = page.waitForResponse( + response => response.url().includes('/api_keys') && response.request().method() === 'POST', + ); + // Create API key await u.po.apiKeys.clickAddButton(); await u.po.apiKeys.waitForFormOpened(); await u.po.apiKeys.typeName(apiKeyName); await u.po.apiKeys.selectExpiration('1d'); await u.po.apiKeys.clickSaveButton(); - await u.po.apiKeys.waitForFormClosed(); - const responsePromise = page.waitForResponse( - response => response.url().includes('/secret') && response.request().method() === 'GET', - ); + // Get the secret from the create response + const createResponse = await createResponsePromise; + const apiKeyData = await createResponse.json(); + const secret = apiKeyData.secret; - // Copy API key - const table = u.page.locator('.cl-apiKeysTable'); - const row = table.locator('.cl-tableRow', { hasText: apiKeyName }); - await row.waitFor({ state: 'attached' }); - await row.locator('.cl-apiKeysCopyButton').click(); + // Wait for the alert to appear with the copy input and copy API key + const copyButton = page.locator('.cl-formFieldInputCopyToClipboardButton'); + await copyButton.waitFor({ state: 'attached' }); + await copyButton.click(); // Read clipboard contents - const data = await (await responsePromise).json(); await context.grantPermissions(['clipboard-read']); const clipboardText = await page.evaluate('navigator.clipboard.readText()'); await context.clearPermissions(); - expect(clipboardText).toBe(data.secret); - }); - - test('can toggle api key secret visibility', async ({ page, context }) => { - const u = createTestUtils({ app, page, context }); - await u.po.signIn.goTo(); - await u.po.signIn.waitForMounted(); - await u.po.signIn.signInWithEmailAndInstantPassword({ email: fakeAdmin.email, password: fakeAdmin.password }); - await u.po.expect.toBeSignedIn(); - - await u.po.page.goToRelative('/api-keys'); - await u.po.apiKeys.waitForMounted(); - - const apiKeyName = `${fakeAdmin.firstName}-${Date.now()}`; - - // Create API key - await u.po.apiKeys.clickAddButton(); - await u.po.apiKeys.waitForFormOpened(); - await u.po.apiKeys.typeName(apiKeyName); - await u.po.apiKeys.selectExpiration('1d'); - await u.po.apiKeys.clickSaveButton(); - await u.po.apiKeys.waitForFormClosed(); - - const responsePromise = page.waitForResponse( - response => response.url().includes('/secret') && response.request().method() === 'GET', - ); - - // Toggle API key secret visibility - const table = u.page.locator('.cl-apiKeysTable'); - const row = table.locator('.cl-tableRow', { hasText: apiKeyName }); - await row.waitFor({ state: 'attached' }); - await expect(row.locator('input')).toHaveAttribute('type', 'password'); - await row.locator('.cl-apiKeysRevealButton').click(); - - // Verify if secret matches the input value - const data = await (await responsePromise).json(); - await expect(row.locator('input')).toHaveAttribute('type', 'text'); - await expect(row.locator('input')).toHaveValue(data.secret); - - // Toggle visibility off - await row.locator('.cl-apiKeysRevealButton').click(); - await expect(row.locator('input')).toHaveAttribute('type', 'password'); + expect(clipboardText).toBe(secret); }); test('component does not render for orgs when user does not have permissions', async ({ page, context }) => { diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index a02353afd50..16c3afb5eb8 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -7,8 +7,6 @@ import useSWRMutation from 'swr/mutation'; import { useProtect } from '@/ui/common'; import { useApiKeysContext, withCoreUserGuard } from '@/ui/contexts'; import { - Alert, - AlertIcon, Box, Button, Col, @@ -17,19 +15,18 @@ import { Flow, Icon, localizationKeys, - Text, useLocalizations, } from '@/ui/customizables'; import { Action } from '@/ui/elements/Action'; -import { ClipboardInput } from '@/ui/elements/ClipboardInput'; import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; import { InputWithIcon } from '@/ui/elements/InputWithIcon'; import { Pagination } from '@/ui/elements/Pagination'; -import { Check, ClipboardOutline, MagnifyingGlass } from '@/ui/icons'; +import { MagnifyingGlass } from '@/ui/icons'; import { mqu } from '@/ui/styledSystem'; import { isOrganizationId } from '@/utils'; import { ApiKeysTable } from './ApiKeysTable'; +import { CopyApiKeyAlert } from './CopyApiKeyAlert'; import type { OnCreateParams } from './CreateApiKeyForm'; import { CreateApiKeyForm } from './CreateApiKeyForm'; import { useApiKeys } from './useApiKeys'; @@ -40,57 +37,6 @@ type APIKeysPageProps = { revokeModalRoot?: React.MutableRefObject; }; -type SaveApiKeyAlertProps = { - apiKeyName: string; - apiKeySecret: string; -}; - -const SaveApiKeyAlert = ({ apiKeyName, apiKeySecret }: SaveApiKeyAlertProps) => { - return ( - - - - - - - - - ); -}; - const RevokeAPIKeyConfirmationModal = lazy(() => import(/* webpackChunkName: "revoke-api-key-modal"*/ './RevokeAPIKeyConfirmationModal').then(module => ({ default: module.RevokeAPIKeyConfirmationModal, @@ -209,7 +155,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr {showCopyAlert ? ( - diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx new file mode 100644 index 00000000000..1d994e1d90d --- /dev/null +++ b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx @@ -0,0 +1,54 @@ +import { Alert, AlertIcon, Col, descriptors, localizationKeys, Text } from '@/ui/customizables'; +import { ClipboardInput } from '@/ui/elements/ClipboardInput'; +import { Check, ClipboardOutline } from '@/ui/icons'; + +type CopyApiKeyAlertProps = { + apiKeyName: string; + apiKeySecret: string; +}; + +export const CopyApiKeyAlert = ({ apiKeyName, apiKeySecret }: CopyApiKeyAlertProps) => { + return ( + + + + + + + + + ); +}; diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index 0630ed6c071..9d36f08d01a 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -17,6 +17,10 @@ export const arSA: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const arSA: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'الرجوع', badge__activePlan: undefined, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index e6db4a7e50d..7f3e035a5f9 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -17,6 +17,10 @@ export const beBY: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const beBY: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Назад', badge__activePlan: undefined, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 1c829baa8b3..a8edd00c4f8 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -17,6 +17,10 @@ export const bgBG: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const bgBG: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Назад', badge__activePlan: undefined, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 0401d3bb6f7..c43ddd8019c 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -17,6 +17,10 @@ export const bnIN: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const bnIN: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'পিছনে', badge__activePlan: undefined, diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index bdc4b55ec85..4bdbd896727 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -17,6 +17,10 @@ export const caES: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const caES: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Enrere', badge__activePlan: undefined, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index fe7c9241116..1eb1c501daf 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -17,6 +17,10 @@ export const csCZ: LocalizationResource = { apiKeys: { action__add: 'Přidat nový klíč', action__search: 'Vyhledat klíče', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Vytvořeno {{ createdDate | shortDate('cs-CZ') }} • Platí do {{ expiresDate | longDate('cs-CZ') }}", createdAndExpirationStatus__never: "Vytvořeno {{ createdDate | shortDate('cs-CZ') }} • Nikdy nevyprší", @@ -47,10 +51,6 @@ export const csCZ: LocalizationResource = { formHint: 'Jste si jisti, že chcete smazat tento tajný klíč?', formTitle: 'Zrušit tajný klíč "{{apiKeyName}}"?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Zpět', badge__activePlan: 'Aktivní', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index f6af5968bb0..6889e7b8c31 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -17,6 +17,10 @@ export const daDK: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const daDK: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Tilbage', badge__activePlan: undefined, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 28fc1b0b5ea..34e12fff1fd 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -17,6 +17,10 @@ export const deDE: LocalizationResource = { apiKeys: { action__add: 'Neuen API-Key hinzufügen', action__search: 'Suche', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Erstellt {{ createdDate | shortDate('de-DE') }} • Läuft ab {{ expiresDate | longDate('de-DE') }}", createdAndExpirationStatus__never: "Erstellt {{ createdDate | shortDate('de-DE') }} • Läuft nie ab", @@ -47,10 +51,6 @@ export const deDE: LocalizationResource = { formHint: 'Sind Sie sicher, dass Sie diesen API-Key löschen wollen?', formTitle: 'API-Key "{{apiKeyName}}" widerrufen?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Zurück', badge__activePlan: 'Aktiv', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index e85487b9233..f1851221eda 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -17,6 +17,10 @@ export const elGR: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const elGR: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Πίσω', badge__activePlan: undefined, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index b81af3a6ce9..e2efb33c415 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -17,6 +17,10 @@ export const enGB: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const enGB: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Back', badge__activePlan: undefined, diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 1509618d171..93de1c870c1 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -5,6 +5,10 @@ export const enUS: LocalizationResource = { apiKeys: { action__add: 'Add new key', action__search: 'Search keys', + copyAlert: { + subtitle: "For security reasons, we won't allow you to view it again later.", + title: 'Copy your "{{name}}" API Key now', + }, createdAndExpirationStatus__expiresOn: "Created {{ createdDate | shortDate('en-US') }} • Expires {{ expiresDate | longDate('en-US') }}", createdAndExpirationStatus__never: "Created {{ createdDate | shortDate('en-US') }} • Never expires", @@ -35,10 +39,6 @@ export const enUS: LocalizationResource = { formHint: 'Are you sure you want to delete this Secret key?', formTitle: 'Revoke "{{apiKeyName}}" secret key?', }, - saveAlert: { - subtitle: "For security reasons, we won't allow you to view it again later.", - title: 'Save your "{{name}}" API Key now', - }, }, backButton: 'Back', badge__activePlan: 'Active', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 7f0a49eaadc..1fd25ba7e48 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -17,6 +17,10 @@ export const esCR: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const esCR: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Atrás', badge__activePlan: undefined, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 29b956d2e40..3c5f861eda1 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -17,6 +17,10 @@ export const esES: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const esES: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Atrás', badge__activePlan: undefined, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 6c5b04e120f..63a1439e044 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -17,6 +17,10 @@ export const esMX: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const esMX: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Atrás', badge__activePlan: undefined, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index b229dc0dc2e..b07aed6aa9d 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -17,6 +17,10 @@ export const esUY: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const esUY: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Atrás', badge__activePlan: undefined, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 2368c2915c5..b3646dde947 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -17,6 +17,10 @@ export const faIR: LocalizationResource = { apiKeys: { action__add: 'افزودن کلید جدید', action__search: 'جستجوی کلیدها', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "ایجاد شده {{ createdDate | shortDate('en-US') }} • منقضی می‌شود {{ expiresDate | longDate('en-US') }}", createdAndExpirationStatus__never: "ایجاد شده {{ createdDate | shortDate('en-US') }} • هرگز منقضی نمی‌شود", @@ -47,10 +51,6 @@ export const faIR: LocalizationResource = { formHint: 'آیا مطمئن هستید که می‌خواهید این کلید محرمانه را حذف کنید؟', formTitle: 'کلید محرمانه "{{apiKeyName}}" لغو شود؟', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'بازگشت', badge__activePlan: 'فعال', diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index e54ad7ec430..411571a2dbe 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -17,6 +17,10 @@ export const fiFI: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const fiFI: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Takaisin', badge__activePlan: undefined, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index c278f7bab97..55c8b3388d2 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -17,6 +17,10 @@ export const frFR: LocalizationResource = { apiKeys: { action__add: 'Ajouter une nouvelle clé', action__search: 'Rechercher des clés', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Créée le {{ createdDate | shortDate('fr-FR') }} • Expire le {{ expiresDate | longDate('fr-FR') }}", createdAndExpirationStatus__never: "Créée le {{ createdDate | shortDate('fr-FR') }} • N’expire jamais", @@ -47,10 +51,6 @@ export const frFR: LocalizationResource = { formHint: 'Êtes-vous sûr de vouloir supprimer cette clé secrète ?', formTitle: 'Révoquer la clé secrète « {{apiKeyName}} » ?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Retour', badge__activePlan: 'Actif', diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 99cdb1d3cd2..15c42720037 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -17,6 +17,10 @@ export const heIL: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const heIL: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'חזור', badge__activePlan: undefined, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 98688d0f770..46a283b5e43 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -17,6 +17,10 @@ export const hiIN: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const hiIN: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'वापस', badge__activePlan: undefined, diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index b651b3a74ec..199d1a2fa06 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -17,6 +17,10 @@ export const hrHR: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const hrHR: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Natrag', badge__activePlan: undefined, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 3dc520f7d3d..3fdc822c0d7 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -17,6 +17,10 @@ export const huHU: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const huHU: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Vissza', badge__activePlan: undefined, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index d741f92096c..84717c288cb 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -17,6 +17,10 @@ export const idID: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const idID: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Kembali', badge__activePlan: undefined, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index f7ed2e0fda8..e570e38671b 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -17,6 +17,10 @@ export const isIS: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const isIS: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Til baka', badge__activePlan: undefined, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index d7c38ec91fd..78c7835bbe2 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -17,6 +17,10 @@ export const itIT: LocalizationResource = { apiKeys: { action__add: 'Aggiungi nuova chiave', action__search: 'Cerca chiavi', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Creata {{ createdDate | shortDate('it-IT') }} • Scadenza {{ expiresDate | longDate('it-IT') }}", createdAndExpirationStatus__never: "Creata {{ createdDate | shortDate('it-IT') }} • Nessuna scadenza", @@ -47,10 +51,6 @@ export const itIT: LocalizationResource = { formHint: 'Sei sicuro di voler eliminare questa Chiave Segreta?', formTitle: 'Revoca "{{apiKeyName}}" chiave segreta?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Indietro', badge__activePlan: 'Attivo', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 6af4171f6f3..42eee4cc1a0 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -17,6 +17,10 @@ export const jaJP: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const jaJP: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: '戻る', badge__activePlan: undefined, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index ef795e1a6a6..94430c9739b 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -17,6 +17,10 @@ export const kkKZ: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const kkKZ: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Артқа', badge__activePlan: undefined, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 1ddcc4588ac..44f1bef2b17 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -17,6 +17,10 @@ export const koKR: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const koKR: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: '돌아가기', badge__activePlan: undefined, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index c43ade8bc5b..1b5d94a398c 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -17,6 +17,10 @@ export const mnMN: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const mnMN: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Буцах', badge__activePlan: undefined, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index d072bad4c6a..3c86aecb21b 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -17,6 +17,10 @@ export const msMY: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const msMY: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Kembali', badge__activePlan: undefined, diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 390d3877911..0e003f6ee95 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -17,6 +17,10 @@ export const nbNO: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const nbNO: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Tilbake', badge__activePlan: undefined, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index c08c515118e..dd4729ee7d8 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -17,6 +17,10 @@ export const nlBE: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const nlBE: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Terug', badge__activePlan: undefined, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 220edad388e..3e8fbdaa95b 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -17,6 +17,10 @@ export const nlNL: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const nlNL: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Terug', badge__activePlan: undefined, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 0ec570b7139..64da69b278f 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -17,6 +17,10 @@ export const plPL: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const plPL: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Powrót', badge__activePlan: undefined, diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 12726938cc3..6aadfd88685 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -17,6 +17,10 @@ export const ptBR: LocalizationResource = { apiKeys: { action__add: 'Adicionar nova chave', action__search: 'Pesquisar chaves', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Criada {{ createdDate | shortDate('pt-BR') }} • Expira {{ expiresDate | longDate('pt-BR') }}", createdAndExpirationStatus__never: "Criada {{ createdDate | shortDate('pt-BR') }} • Nunca expira", @@ -47,10 +51,6 @@ export const ptBR: LocalizationResource = { formHint: 'Tem certeza de que deseja excluir esta chave de API?', formTitle: 'Revogar chave de API "{{apiKeyName}}"?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Voltar', badge__activePlan: 'Ativo', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 166527fc1f0..15aacc06f9c 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -17,6 +17,10 @@ export const ptPT: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const ptPT: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Voltar', badge__activePlan: undefined, diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index a61f70f67e5..5a664bfa964 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -17,6 +17,10 @@ export const roRO: LocalizationResource = { apiKeys: { action__add: 'Adaugă cheie nouă', action__search: 'Caută chei', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Creată {{ createdDate | shortDate('ro-RO') }} • Expiră {{ expiresDate | longDate('ro-RO') }}", createdAndExpirationStatus__never: "Creată {{ createdDate | shortDate('ro-RO') }} • Nu expiră niciodată", @@ -47,10 +51,6 @@ export const roRO: LocalizationResource = { formHint: 'Sigur vrei să ștergi această cheie Secret?', formTitle: 'Revoci cheia secretă „{{apiKeyName}}”?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Înapoi', badge__activePlan: 'Activ', diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 6eebb814839..2997de86f29 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -17,6 +17,10 @@ export const ruRU: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const ruRU: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Назад', badge__activePlan: undefined, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index edd61686f0a..eec87d3ddeb 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -17,6 +17,10 @@ export const skSK: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const skSK: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Späť', badge__activePlan: undefined, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index c91875c974e..f68db427ca5 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -17,6 +17,10 @@ export const srRS: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const srRS: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Nazad', badge__activePlan: undefined, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index fdd8b9a8954..8c7d47ecef3 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -17,6 +17,10 @@ export const svSE: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const svSE: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Tillbaka', badge__activePlan: undefined, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index da581d80c12..07a06677b36 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -17,6 +17,10 @@ export const taIN: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const taIN: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'பின்செல்', badge__activePlan: undefined, diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 3561a622442..cbd0e76cc5f 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -17,6 +17,10 @@ export const teIN: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const teIN: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'వెనుకకు', badge__activePlan: undefined, diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 0255394aa3c..07b017b92e9 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -17,6 +17,10 @@ export const thTH: LocalizationResource = { apiKeys: { action__add: 'เพิ่มคีย์ใหม่', action__search: 'ค้นหาคีย์', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "สร้างเมื่อ {{ createdDate | shortDate('th-TH') }} • หมดอายุ {{ expiresDate | longDate('th-TH') }}", createdAndExpirationStatus__never: "สร้างเมื่อ {{ createdDate | shortDate('th-TH') }} • ไม่มีวันหมดอายุ", @@ -47,10 +51,6 @@ export const thTH: LocalizationResource = { formHint: 'คุณแน่ใจหรือไม่ว่าต้องการลบคีย์ลับนี้?', formTitle: 'เพิกถอนคีย์ลับ "{{apiKeyName}}"?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'ย้อนกลับ', badge__activePlan: 'ใช้งานอยู่', diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index e3452f97769..631fffa6c32 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -17,6 +17,10 @@ export const trTR: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const trTR: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Geri', badge__activePlan: undefined, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 8496b21e899..28a8fe039a2 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -17,6 +17,10 @@ export const ukUA: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const ukUA: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Назад', badge__activePlan: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 85b0c33e02f..c4f668a321d 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -17,6 +17,10 @@ export const viVN: LocalizationResource = { apiKeys: { action__add: 'Thêm khoá mới', action__search: 'Tìm kiếm khoá', + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: "Tạo {{ createdDate | shortDate('vi-VN') }} • Hết hạn {{ expiresDate | longDate('vi-VN') }}", createdAndExpirationStatus__never: "Tạo {{ createdDate | shortDate('vi-VN') }} • Không hết hạn", @@ -47,10 +51,6 @@ export const viVN: LocalizationResource = { formHint: 'Bạn có chắc chắn muốn xóa khoá này không?', formTitle: 'Hủy khoá "{{apiKeyName}}" không?', }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: 'Quay lại', badge__activePlan: 'Đang hoạt động', diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index ba5cc342447..42014611b9e 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -17,6 +17,10 @@ export const zhCN: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const zhCN: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: '返回', badge__activePlan: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 79c1bf0a2b7..b58031fbaf9 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -17,6 +17,10 @@ export const zhTW: LocalizationResource = { apiKeys: { action__add: undefined, action__search: undefined, + copyAlert: { + subtitle: undefined, + title: undefined, + }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, detailsTitle__emptyRow: undefined, @@ -46,10 +50,6 @@ export const zhTW: LocalizationResource = { formHint: undefined, formTitle: undefined, }, - saveAlert: { - subtitle: undefined, - title: undefined, - }, }, backButton: '返回', badge__activePlan: undefined, diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index c8ed17d6dae..0e2c6af465d 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1238,7 +1238,7 @@ export type __internal_LocalizationResource = { createdAndExpirationStatus__expiresOn: LocalizationValue<'createdDate' | 'expiresDate'>; formFieldCaption__expiration__never: LocalizationValue; formFieldCaption__expiration__expiresOn: LocalizationValue<'date'>; - saveAlert: { + copyAlert: { title: LocalizationValue<'name'>; subtitle: LocalizationValue; }; From c68a03b3a1320e6ff5fb3582c473cb3080d0d365 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Sun, 2 Nov 2025 08:13:43 -0800 Subject: [PATCH 09/30] chore: add changeset for clerk-js --- .changeset/heavy-books-protect.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/heavy-books-protect.md diff --git a/.changeset/heavy-books-protect.md b/.changeset/heavy-books-protect.md new file mode 100644 index 00000000000..b476b248f28 --- /dev/null +++ b/.changeset/heavy-books-protect.md @@ -0,0 +1,5 @@ +--- +"@clerk/clerk-js": minor +--- + +Replaced the persistent key column in the API keys table with a one-time alert that displays the secret immediately after creation. From 996c579ff672139def39b29b4d6801ff518cda41 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Sun, 2 Nov 2025 08:15:00 -0800 Subject: [PATCH 10/30] chore: add changeset for localizations --- .changeset/chilly-boxes-warn.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/chilly-boxes-warn.md diff --git a/.changeset/chilly-boxes-warn.md b/.changeset/chilly-boxes-warn.md new file mode 100644 index 00000000000..242b94442b7 --- /dev/null +++ b/.changeset/chilly-boxes-warn.md @@ -0,0 +1,5 @@ +--- +"@clerk/localizations": minor +--- + +Added localization entry for the API key alert component. From 51e5a684d7eb65d98c26d3738d1d610b568556e4 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Sun, 2 Nov 2025 08:17:21 -0800 Subject: [PATCH 11/30] chore: add changeset for backend --- .changeset/tiny-hounds-pretend.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tiny-hounds-pretend.md diff --git a/.changeset/tiny-hounds-pretend.md b/.changeset/tiny-hounds-pretend.md new file mode 100644 index 00000000000..46f258af8c0 --- /dev/null +++ b/.changeset/tiny-hounds-pretend.md @@ -0,0 +1,5 @@ +--- +"@clerk/backend": minor +--- + +Removed the `getSecretKey()` method of the experimental API keys from the Backend SDK client. API key secret keys can only be retrieved after creation. From 4fb8000c7ec7b13732992e7b0dd699a8c94d9c3c Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Sun, 2 Nov 2025 08:26:35 -0800 Subject: [PATCH 12/30] test: fix secret --- integration/testUtils/usersService.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/integration/testUtils/usersService.ts b/integration/testUtils/usersService.ts index 7ad4b6f67b1..a95114a6fb7 100644 --- a/integration/testUtils/usersService.ts +++ b/integration/testUtils/usersService.ts @@ -204,11 +204,9 @@ export const createUserService = (clerkClient: ClerkClient) => { secondsUntilExpiration: TWENTY_MINUTES, }); - const { secret } = await clerkClient.apiKeys.getSecret(apiKey.id); - return { apiKey, - secret, + secret: apiKey.secret ?? '', revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }), } satisfies FakeAPIKey; }, From 5ec60e9f21075096845e335901e34e014ad1017f Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Mon, 3 Nov 2025 05:37:31 -0800 Subject: [PATCH 13/30] chore: dedupe --- pnpm-lock.yaml | 195 ++++++++++++++++++++++--------------------------- 1 file changed, 88 insertions(+), 107 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 26e820d6d51..46bf97a8127 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -800,7 +800,7 @@ importers: devDependencies: nuxt: specifier: ^4.1.2 - version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.7.2)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.31.0(jiti@2.6.1))(idb-keyval@6.2.1)(ioredis@5.7.0)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.45)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vite@7.1.5(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(vue-tsc@2.2.12(typescript@5.8.3))(yaml@2.8.1) + version: 4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.7.2)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.31.0(jiti@2.6.1))(idb-keyval@6.2.1)(ioredis@5.7.0)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vite@7.1.5(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(vue-tsc@2.2.12(typescript@5.8.3))(yaml@2.8.1) typescript: specifier: catalog:repo version: 5.8.3 @@ -3771,15 +3771,19 @@ packages: cpu: [x64] os: [win32] + '@oxc-project/runtime@0.71.0': + resolution: {integrity: sha512-QwoF5WUXIGFQ+hSxWEib4U/aeLoiDN9JlP18MnBgx9LLPRDfn1iICtcow7Jgey6HLH4XFceWXQD5WBJ39dyJcw==} + engines: {node: '>=6.9.0'} + + '@oxc-project/types@0.71.0': + resolution: {integrity: sha512-5CwQ4MI+P4MQbjLWXgNurA+igGwu/opNetIE13LBs9+V93R64MLvDKOOLZIXSzEfovU3Zef3q3GjPnMTgJTn2w==} + '@oxc-project/types@0.87.0': resolution: {integrity: sha512-ipZFWVGE9fADBVXXWJWY/cxpysc41Gt5upKDeb32F6WMgFyO7XETUMVq8UuREKCih+Km5E6p2VhEvf6Fuhey6g==} '@oxc-project/types@0.94.0': resolution: {integrity: sha512-+UgQT/4o59cZfH6Cp7G0hwmqEQ0wE+AdIwhikdwnhWI9Dp8CgSY081+Q3O67/wq3VJu8mgUEB93J9EHHn70fOw==} - '@oxc-project/types@0.95.0': - resolution: {integrity: sha512-vACy7vhpMPhjEJhULNxrdR0D943TkA/MigMpJCHmBHvMXxRStRi/dPtTlfQ3uDwWSzRpT8z+7ImjZVf8JWBocQ==} - '@oxc-transform/binding-android-arm64@0.87.0': resolution: {integrity: sha512-B7W6J8T9cS054LUGLfYkYz8bz5+t+4yPftZ67Bn6MJ03okMLnbbEfm1bID1tqcP5tJwMurTILVy/dQfDYDcMgQ==} engines: {node: '>=14.0.0'} @@ -4248,21 +4252,14 @@ packages: cpu: [arm64] os: [android] - '@rolldown/binding-android-arm64@1.0.0-beta.45': - resolution: {integrity: sha512-bfgKYhFiXJALeA/riil908+2vlyWGdwa7Ju5S+JgWZYdR4jtiPOGdM6WLfso1dojCh+4ZWeiTwPeV9IKQEX+4g==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [android] - '@rolldown/binding-darwin-arm64@1.0.0-beta.43': resolution: {integrity: sha512-kuVWnZsE4vEjMF/10SbSUyzucIW2zmdsqFghYMqy+fsjXnRHg0luTU6qWF8IqJf4Cbpm9NEZRnjIEPpAbdiSNQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-arm64@1.0.0-beta.45': - resolution: {integrity: sha512-xjCv4CRVsSnnIxTuyH1RDJl5OEQ1c9JYOwfDAHddjJDxCw46ZX9q80+xq7Eok7KC4bRSZudMJllkvOKv0T9SeA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-darwin-arm64@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-Mp0/gqiPdepHjjVm7e0yL1acWvI0rJVVFQEADSezvAjon9sjQ7CEg9JnXICD4B1YrPmN9qV/e7cQZCp87tTV4w==} cpu: [arm64] os: [darwin] @@ -4272,9 +4269,8 @@ packages: cpu: [x64] os: [darwin] - '@rolldown/binding-darwin-x64@1.0.0-beta.45': - resolution: {integrity: sha512-ddcO9TD3D/CLUa/l8GO8LHzBOaZqWg5ClMy3jICoxwCuoz47h9dtqPsIeTiB6yR501LQTeDsjA4lIFd7u3Ljfw==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-darwin-x64@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-40re4rMNrsi57oavRzIOpRGmg3QRlW6Ea8Q3znaqgOuJuKVrrm2bIQInTfkZJG7a4/5YMX7T951d0+toGLTdCA==} cpu: [x64] os: [darwin] @@ -4284,9 +4280,8 @@ packages: cpu: [x64] os: [freebsd] - '@rolldown/binding-freebsd-x64@1.0.0-beta.45': - resolution: {integrity: sha512-MBTWdrzW9w+UMYDUvnEuh0pQvLENkl2Sis15fHTfHVW7ClbGuez+RWopZudIDEGkpZXdeI4CkRXk+vdIIebrmg==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-freebsd-x64@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-8BDM939bbMariZupiHp3OmP5N+LXPT4mULA0hZjDaq970PCxv4krZOSMG+HkWUUwmuQROtV+/00xw39EO0P+8g==} cpu: [x64] os: [freebsd] @@ -4296,9 +4291,8 @@ packages: cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.45': - resolution: {integrity: sha512-4YgoCFiki1HR6oSg+GxxfzfnVCesQxLF1LEnw9uXS/MpBmuog0EOO2rYfy69rWP4tFZL9IWp6KEfGZLrZ7aUog==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-sntsPaPgrECpBB/+2xrQzVUt0r493TMPI+4kWRMhvMsmrxOqH1Ep5lM0Wua/ZdbfZNwm1aVa5pcESQfNfM4Fhw==} cpu: [arm] os: [linux] @@ -4309,9 +4303,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.45': - resolution: {integrity: sha512-LE1gjAwQRrbCOorJJ7LFr10s5vqYf5a00V5Ea9wXcT2+56n5YosJkcp8eQ12FxRBv2YX8dsdQJb+ZTtYJwb6XQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-5clBW/I+er9F2uM1OFjJFWX86y7Lcy0M+NqsN4s3o07W+8467Zk8oQa4B45vdaXoNUF/yqIAgKkA/OEdQDxZqA==} cpu: [arm64] os: [linux] libc: [glibc] @@ -4323,9 +4316,8 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.45': - resolution: {integrity: sha512-tdy8ThO/fPp40B81v0YK3QC+KODOmzJzSUOO37DinQxzlTJ026gqUSOM8tzlVixRbQJltgVDCTYF8HNPRErQTA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-wv+rnAfQDk9p/CheX8/Kmqk2o1WaFa4xhWI9gOyDMk/ljvOX0u0ubeM8nI1Qfox7Tnh71eV5AjzSePXUhFOyOg==} cpu: [arm64] os: [linux] libc: [musl] @@ -4337,9 +4329,8 @@ packages: os: [linux] libc: [glibc] - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.45': - resolution: {integrity: sha512-lS082ROBWdmOyVY/0YB3JmsiClaWoxvC+dA8/rbhyB9VLkvVEaihLEOr4CYmrMse151C4+S6hCw6oa1iewox7g==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-gxD0/xhU4Py47IH3bKZbWtvB99tMkUPGPJFRfSc5UB9Osoje0l0j1PPbxpUtXIELurYCqwLBKXIMTQGifox1BQ==} cpu: [x64] os: [linux] libc: [glibc] @@ -4351,9 +4342,8 @@ packages: os: [linux] libc: [musl] - '@rolldown/binding-linux-x64-musl@1.0.0-beta.45': - resolution: {integrity: sha512-Hi73aYY0cBkr1/SvNQqH8Cd+rSV6S9RB5izCv0ySBcRnd/Wfn5plguUoGYwBnhHgFbh6cPw9m2dUVBR6BG1gxA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-linux-x64-musl@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-HotuVe3XUjDwqqEMbm3o3IRkP9gdm8raY/btd/6KE3JGLF/cv4+3ff1l6nOhAZI8wulWDPEXPtE7v+HQEaTXnA==} cpu: [x64] os: [linux] libc: [musl] @@ -4364,20 +4354,14 @@ packages: cpu: [arm64] os: [openharmony] - '@rolldown/binding-openharmony-arm64@1.0.0-beta.45': - resolution: {integrity: sha512-fljEqbO7RHHogNDxYtTzr+GNjlfOx21RUyGmF+NrkebZ8emYYiIqzPxsaMZuRx0rgZmVmliOzEp86/CQFDKhJQ==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [arm64] - os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.43': resolution: {integrity: sha512-3M+2DmorXvDuAIGYQ9Z93Oy1G9ETkejLwdXXb1uRTgKN9pMcu7N+KG2zDrJwqyxeeLIFE22AZGtSJm3PJbNu9Q==} engines: {node: '>=14.0.0'} cpu: [wasm32] - '@rolldown/binding-wasm32-wasi@1.0.0-beta.45': - resolution: {integrity: sha512-ZJDB7lkuZE9XUnWQSYrBObZxczut+8FZ5pdanm8nNS1DAo8zsrPuvGwn+U3fwU98WaiFsNrA4XHngesCGr8tEQ==} - engines: {node: '>=14.0.0'} + '@rolldown/binding-wasm32-wasi@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-8Cx+ucbd8n2dIr21FqBh6rUvTVL0uTgEtKR7l+MUZ5BgY4dFh1e4mPVX8oqmoYwOxBiXrsD2JIOCz4AyKLKxWA==} + engines: {node: '>=14.21.3'} cpu: [wasm32] '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43': @@ -4386,9 +4370,8 @@ packages: cpu: [arm64] os: [win32] - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.45': - resolution: {integrity: sha512-zyzAjItHPUmxg6Z8SyRhLdXlJn3/D9KL5b9mObUrBHhWS/GwRH4665xCiFqeuktAhhWutqfc+rOV2LjK4VYQGQ==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-Vhq5vikrVDxAa75fxsyqj0c0Y/uti/TwshXI71Xb8IeUQJOBnmLUsn5dgYf5ljpYYkNa0z9BPAvUDIDMmyDi+w==} cpu: [arm64] os: [win32] @@ -4398,9 +4381,8 @@ packages: cpu: [ia32] os: [win32] - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.45': - resolution: {integrity: sha512-wODcGzlfxqS6D7BR0srkJk3drPwXYLu7jPHN27ce2c4PUnVVmJnp9mJzUQGT4LpmHmmVdMZ+P6hKvyTGBzc1CA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-lN7RIg9Iugn08zP2aZN9y/MIdG8iOOCE93M1UrFlrxMTqPf8X+fDzmR/OKhTSd1A2pYNipZHjyTcb5H8kyQSow==} cpu: [ia32] os: [win32] @@ -4410,9 +4392,8 @@ packages: cpu: [x64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.45': - resolution: {integrity: sha512-wiU40G1nQo9rtfvF9jLbl79lUgjfaD/LTyUEw2Wg/gdF5OhjzpKMVugZQngO+RNdwYaNj+Fs+kWBWfp4VXPMHA==} - engines: {node: ^20.19.0 || >=22.12.0} + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-7/7cLIn48Y+EpQ4CePvf8reFl63F15yPUlg4ZAhl+RXJIfydkdak1WD8Ir3AwAO+bJBXzrfNL+XQbxm0mcQZmw==} cpu: [x64] os: [win32] @@ -4428,6 +4409,9 @@ packages: '@rolldown/pluginutils@1.0.0-beta.45': resolution: {integrity: sha512-Le9ulGCrD8ggInzWw/k2J8QcbPz7eGIOWqfJ2L+1R0Opm7n6J37s2hiDWlh6LJN0Lk9L5sUzMvRHKW7UxBZsQA==} + '@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5': + resolution: {integrity: sha512-8sExkWRK+zVybw3+2/kBkYBFeLnEUWz1fT7BLHplpzmtqkOfTbAQ9gkt4pzwGIIZmg4Qn5US5ACjUBenrhezwQ==} + '@rollup/plugin-alias@5.1.1': resolution: {integrity: sha512-PR9zDb+rOzkRb2VD+EuKB7UC41vU5DIwZ5qqCpk0KJudcWAyi8rvYOhS7+L5aZCspw1stTViLgN5v6FF1p5cgQ==} engines: {node: '>=14.0.0'} @@ -12950,9 +12934,8 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rolldown@1.0.0-beta.45: - resolution: {integrity: sha512-iMmuD72XXLf26Tqrv1cryNYLX6NNPLhZ3AmNkSf8+xda0H+yijjGJ+wVT9UdBUHOpKzq9RjKtQKRCWoEKQQBZQ==} - engines: {node: ^20.19.0 || >=22.12.0} + rolldown@1.0.0-beta.9-commit.d91dfb5: + resolution: {integrity: sha512-FHkj6gGEiEgmAXQchglofvUUdwj2Oiw603Rs+zgFAnn9Cb7T7z3fiaEc0DbN3ja4wYkW6sF2rzMEtC1V4BGx/g==} hasBin: true rollup-plugin-visualizer@6.0.3: @@ -18796,7 +18779,7 @@ snapshots: transitivePeerDependencies: - magicast - '@nuxt/vite-builder@4.1.2(@types/node@24.7.2)(eslint@9.31.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.45)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vue-tsc@2.2.12(typescript@5.8.3))(vue@3.5.21(typescript@5.8.3))(yaml@2.8.1)': + '@nuxt/vite-builder@4.1.2(@types/node@24.7.2)(eslint@9.31.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vue-tsc@2.2.12(typescript@5.8.3))(vue@3.5.21(typescript@5.8.3))(yaml@2.8.1)': dependencies: '@nuxt/kit': 4.1.2(magicast@0.3.5) '@rollup/plugin-replace': 6.0.2(rollup@4.52.4) @@ -18819,7 +18802,7 @@ snapshots: pathe: 2.0.3 pkg-types: 2.3.0 postcss: 8.5.6 - rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.45)(rollup@4.52.4) + rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4) std-env: 3.9.0 ufo: 1.6.1 unenv: 2.0.0-rc.21 @@ -19042,12 +19025,14 @@ snapshots: '@oxc-parser/binding-win32-x64-msvc@0.87.0': optional: true + '@oxc-project/runtime@0.71.0': {} + + '@oxc-project/types@0.71.0': {} + '@oxc-project/types@0.87.0': {} '@oxc-project/types@0.94.0': {} - '@oxc-project/types@0.95.0': {} - '@oxc-transform/binding-android-arm64@0.87.0': optional: true @@ -19655,89 +19640,83 @@ snapshots: '@rolldown/binding-android-arm64@1.0.0-beta.43': optional: true - '@rolldown/binding-android-arm64@1.0.0-beta.45': - optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.43': optional: true - '@rolldown/binding-darwin-arm64@1.0.0-beta.45': + '@rolldown/binding-darwin-arm64@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-darwin-x64@1.0.0-beta.43': optional: true - '@rolldown/binding-darwin-x64@1.0.0-beta.45': + '@rolldown/binding-darwin-x64@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-freebsd-x64@1.0.0-beta.43': optional: true - '@rolldown/binding-freebsd-x64@1.0.0-beta.45': + '@rolldown/binding-freebsd-x64@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.43': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.45': + '@rolldown/binding-linux-arm-gnueabihf@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.43': optional: true - '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.45': + '@rolldown/binding-linux-arm64-gnu@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-linux-arm64-musl@1.0.0-beta.43': optional: true - '@rolldown/binding-linux-arm64-musl@1.0.0-beta.45': + '@rolldown/binding-linux-arm64-musl@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-linux-x64-gnu@1.0.0-beta.43': optional: true - '@rolldown/binding-linux-x64-gnu@1.0.0-beta.45': + '@rolldown/binding-linux-x64-gnu@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-linux-x64-musl@1.0.0-beta.43': optional: true - '@rolldown/binding-linux-x64-musl@1.0.0-beta.45': + '@rolldown/binding-linux-x64-musl@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-openharmony-arm64@1.0.0-beta.43': optional: true - '@rolldown/binding-openharmony-arm64@1.0.0-beta.45': - optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.43': dependencies: '@napi-rs/wasm-runtime': 1.0.7 optional: true - '@rolldown/binding-wasm32-wasi@1.0.0-beta.45': + '@rolldown/binding-wasm32-wasi@1.0.0-beta.9-commit.d91dfb5': dependencies: - '@napi-rs/wasm-runtime': 1.0.7 + '@napi-rs/wasm-runtime': 0.2.12 optional: true '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.43': optional: true - '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.45': + '@rolldown/binding-win32-arm64-msvc@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.43': optional: true - '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.45': + '@rolldown/binding-win32-ia32-msvc@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/binding-win32-x64-msvc@1.0.0-beta.43': optional: true - '@rolldown/binding-win32-x64-msvc@1.0.0-beta.45': + '@rolldown/binding-win32-x64-msvc@1.0.0-beta.9-commit.d91dfb5': optional: true '@rolldown/pluginutils@1.0.0-beta.11': {} @@ -19748,6 +19727,8 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.45': {} + '@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5': {} + '@rollup/plugin-alias@5.1.1(rollup@4.52.4)': optionalDependencies: rollup: 4.52.4 @@ -28327,7 +28308,7 @@ snapshots: nice-try@1.0.5: {} - nitropack@2.12.6(@netlify/blobs@9.1.2)(idb-keyval@6.2.1)(rolldown@1.0.0-beta.45): + nitropack@2.12.6(@netlify/blobs@9.1.2)(idb-keyval@6.2.1)(rolldown@1.0.0-beta.9-commit.d91dfb5): dependencies: '@cloudflare/kv-asset-handler': 0.4.0 '@rollup/plugin-alias': 5.1.1(rollup@4.52.4) @@ -28380,7 +28361,7 @@ snapshots: pretty-bytes: 7.0.1 radix3: 1.1.2 rollup: 4.52.4 - rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.45)(rollup@4.52.4) + rollup-plugin-visualizer: 6.0.3(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4) scule: 1.3.0 semver: 7.7.3 serve-placeholder: 2.0.2 @@ -28587,7 +28568,7 @@ snapshots: nullthrows@1.1.1: {} - nuxt@4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.7.2)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.31.0(jiti@2.6.1))(idb-keyval@6.2.1)(ioredis@5.7.0)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.45)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vite@7.1.5(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(vue-tsc@2.2.12(typescript@5.8.3))(yaml@2.8.1): + nuxt@4.1.2(@netlify/blobs@9.1.2)(@parcel/watcher@2.5.1)(@types/node@24.7.2)(@vue/compiler-sfc@3.5.21)(db0@0.3.2)(eslint@9.31.0(jiti@2.6.1))(idb-keyval@6.2.1)(ioredis@5.7.0)(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vite@7.1.5(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))(vue-tsc@2.2.12(typescript@5.8.3))(yaml@2.8.1): dependencies: '@nuxt/cli': 3.28.0(magicast@0.3.5) '@nuxt/devalue': 2.0.2 @@ -28595,7 +28576,7 @@ snapshots: '@nuxt/kit': 4.1.2(magicast@0.3.5) '@nuxt/schema': 4.1.2 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) - '@nuxt/vite-builder': 4.1.2(@types/node@24.7.2)(eslint@9.31.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.45)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vue-tsc@2.2.12(typescript@5.8.3))(vue@3.5.21(typescript@5.8.3))(yaml@2.8.1) + '@nuxt/vite-builder': 4.1.2(@types/node@24.7.2)(eslint@9.31.0(jiti@2.6.1))(lightningcss@1.30.2)(magicast@0.3.5)(optionator@0.9.4)(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(vue-tsc@2.2.12(typescript@5.8.3))(vue@3.5.21(typescript@5.8.3))(yaml@2.8.1) '@unhead/vue': 2.0.14(vue@3.5.21(typescript@5.8.3)) '@vue/shared': 3.5.22 c12: 3.3.0(magicast@0.3.5) @@ -28622,7 +28603,7 @@ snapshots: mlly: 1.8.0 mocked-exports: 0.1.1 nanotar: 0.2.0 - nitropack: 2.12.6(@netlify/blobs@9.1.2)(idb-keyval@6.2.1)(rolldown@1.0.0-beta.45) + nitropack: 2.12.6(@netlify/blobs@9.1.2)(idb-keyval@6.2.1)(rolldown@1.0.0-beta.9-commit.d91dfb5) nypm: 0.6.1 ofetch: 1.4.1 ohash: 2.0.11 @@ -30228,7 +30209,7 @@ snapshots: glob: 11.0.0 package-json-from-dist: 1.0.0 - rolldown-plugin-dts@0.16.12(rolldown@1.0.0-beta.45)(typescript@5.8.3): + rolldown-plugin-dts@0.16.12(rolldown@1.0.0-beta.9-commit.d91dfb5)(typescript@5.8.3): dependencies: '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 @@ -30239,7 +30220,7 @@ snapshots: dts-resolver: 2.1.2 get-tsconfig: 4.13.0 magic-string: 0.30.19 - rolldown: 1.0.0-beta.45 + rolldown: 1.0.0-beta.9-commit.d91dfb5 optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -30267,34 +30248,34 @@ snapshots: '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.43 '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.43 - rolldown@1.0.0-beta.45: + rolldown@1.0.0-beta.9-commit.d91dfb5: dependencies: - '@oxc-project/types': 0.95.0 - '@rolldown/pluginutils': 1.0.0-beta.45 + '@oxc-project/runtime': 0.71.0 + '@oxc-project/types': 0.71.0 + '@rolldown/pluginutils': 1.0.0-beta.9-commit.d91dfb5 + ansis: 4.2.0 optionalDependencies: - '@rolldown/binding-android-arm64': 1.0.0-beta.45 - '@rolldown/binding-darwin-arm64': 1.0.0-beta.45 - '@rolldown/binding-darwin-x64': 1.0.0-beta.45 - '@rolldown/binding-freebsd-x64': 1.0.0-beta.45 - '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.45 - '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.45 - '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.45 - '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.45 - '@rolldown/binding-linux-x64-musl': 1.0.0-beta.45 - '@rolldown/binding-openharmony-arm64': 1.0.0-beta.45 - '@rolldown/binding-wasm32-wasi': 1.0.0-beta.45 - '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.45 - '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.45 - '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.45 - - rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.45)(rollup@4.52.4): + '@rolldown/binding-darwin-arm64': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-darwin-x64': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-freebsd-x64': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-linux-arm64-gnu': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-linux-arm64-musl': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-linux-x64-gnu': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-linux-x64-musl': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-wasm32-wasi': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-win32-arm64-msvc': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-win32-ia32-msvc': 1.0.0-beta.9-commit.d91dfb5 + '@rolldown/binding-win32-x64-msvc': 1.0.0-beta.9-commit.d91dfb5 + + rollup-plugin-visualizer@6.0.3(rolldown@1.0.0-beta.9-commit.d91dfb5)(rollup@4.52.4): dependencies: open: 8.4.2 picomatch: 4.0.3 source-map: 0.7.6 yargs: 17.7.2 optionalDependencies: - rolldown: 1.0.0-beta.45 + rolldown: 1.0.0-beta.9-commit.d91dfb5 rollup: 4.52.4 rollup@4.52.4: @@ -31533,8 +31514,8 @@ snapshots: diff: 8.0.2 empathic: 2.0.0 hookable: 5.5.3 - rolldown: 1.0.0-beta.45 - rolldown-plugin-dts: 0.16.12(rolldown@1.0.0-beta.45)(typescript@5.8.3) + rolldown: 1.0.0-beta.9-commit.d91dfb5 + rolldown-plugin-dts: 0.16.12(rolldown@1.0.0-beta.9-commit.d91dfb5)(typescript@5.8.3) semver: 7.7.3 tinyexec: 1.0.1 tinyglobby: 0.2.15 From 03a3651b0b46a96c71399738891a87e75456991f Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Mon, 3 Nov 2025 09:22:18 -0800 Subject: [PATCH 14/30] chore(clerk-js): Switch to modal approach in API keys copying (#7134) --- .../tests/machine-auth/component.test.ts | 19 +++- .../src/ui/components/ApiKeys/ApiKeys.tsx | 25 +++-- .../ui/components/ApiKeys/CopyApiKeyAlert.tsx | 54 ----------- .../ui/components/ApiKeys/CopyApiKeyModal.tsx | 97 +++++++++++++++++++ .../ApiKeys/RevokeAPIKeyConfirmationModal.tsx | 21 +--- .../src/ui/components/ApiKeys/utils.ts | 29 ++++++ .../ui/customizables/elementDescriptors.ts | 3 + .../src/ui/elements/ClipboardInput.tsx | 4 +- packages/clerk-js/src/ui/elements/Form.tsx | 1 + packages/localizations/src/ar-SA.ts | 8 +- packages/localizations/src/be-BY.ts | 8 +- packages/localizations/src/bg-BG.ts | 8 +- packages/localizations/src/bn-IN.ts | 8 +- packages/localizations/src/ca-ES.ts | 8 +- packages/localizations/src/cs-CZ.ts | 8 +- packages/localizations/src/da-DK.ts | 8 +- packages/localizations/src/de-DE.ts | 8 +- packages/localizations/src/el-GR.ts | 8 +- packages/localizations/src/en-GB.ts | 8 +- packages/localizations/src/en-US.ts | 8 +- packages/localizations/src/es-CR.ts | 8 +- packages/localizations/src/es-ES.ts | 8 +- packages/localizations/src/es-MX.ts | 8 +- packages/localizations/src/es-UY.ts | 8 +- packages/localizations/src/fa-IR.ts | 8 +- packages/localizations/src/fi-FI.ts | 8 +- packages/localizations/src/fr-FR.ts | 8 +- packages/localizations/src/he-IL.ts | 8 +- packages/localizations/src/hi-IN.ts | 8 +- packages/localizations/src/hr-HR.ts | 8 +- packages/localizations/src/hu-HU.ts | 8 +- packages/localizations/src/id-ID.ts | 8 +- packages/localizations/src/is-IS.ts | 8 +- packages/localizations/src/it-IT.ts | 8 +- packages/localizations/src/ja-JP.ts | 8 +- packages/localizations/src/kk-KZ.ts | 8 +- packages/localizations/src/ko-KR.ts | 8 +- packages/localizations/src/mn-MN.ts | 8 +- packages/localizations/src/ms-MY.ts | 8 +- packages/localizations/src/nb-NO.ts | 8 +- packages/localizations/src/nl-BE.ts | 8 +- packages/localizations/src/nl-NL.ts | 8 +- packages/localizations/src/pl-PL.ts | 8 +- packages/localizations/src/pt-BR.ts | 8 +- packages/localizations/src/pt-PT.ts | 8 +- packages/localizations/src/ro-RO.ts | 8 +- packages/localizations/src/ru-RU.ts | 8 +- packages/localizations/src/sk-SK.ts | 8 +- packages/localizations/src/sr-RS.ts | 8 +- packages/localizations/src/sv-SE.ts | 8 +- packages/localizations/src/ta-IN.ts | 8 +- packages/localizations/src/te-IN.ts | 8 +- packages/localizations/src/th-TH.ts | 8 +- packages/localizations/src/tr-TR.ts | 8 +- packages/localizations/src/uk-UA.ts | 8 +- packages/localizations/src/vi-VN.ts | 8 +- packages/localizations/src/zh-CN.ts | 8 +- packages/localizations/src/zh-TW.ts | 8 +- packages/shared/src/types/appearance.ts | 3 + packages/shared/src/types/localization.ts | 8 +- 60 files changed, 418 insertions(+), 238 deletions(-) delete mode 100644 packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx create mode 100644 packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx create mode 100644 packages/clerk-js/src/ui/components/ApiKeys/utils.ts diff --git a/integration/tests/machine-auth/component.test.ts b/integration/tests/machine-auth/component.test.ts index a86f5d1c728..f0df76200e5 100644 --- a/integration/tests/machine-auth/component.test.ts +++ b/integration/tests/machine-auth/component.test.ts @@ -126,13 +126,22 @@ testAgainstRunningApps({ const apiKeyData = await createResponse.json(); const secret = apiKeyData.secret; - // Wait for the alert to appear with the copy input and copy API key - const copyButton = page.locator('.cl-formFieldInputCopyToClipboardButton'); - await copyButton.waitFor({ state: 'attached' }); - await copyButton.click(); + // Wait for the copy modal to appear + const copyModal = page.locator('.cl-apiKeysCopyModal'); + await copyModal.waitFor({ state: 'attached' }); - // Read clipboard contents + // Grant clipboard permissions before clicking the button await context.grantPermissions(['clipboard-read']); + + // Click "Copy & Close" button which will copy the secret and close the modal + const copyAndCloseButton = copyModal.locator('.cl-apiKeysCopyModalSubmitButton'); + await copyAndCloseButton.waitFor({ state: 'attached' }); + await copyAndCloseButton.click(); + + // Wait for modal to close + await copyModal.waitFor({ state: 'detached' }); + + // Read clipboard contents to verify the secret was copied const clipboardText = await page.evaluate('navigator.clipboard.readText()'); await context.clearPermissions(); expect(clipboardText).toBe(secret); diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 16c3afb5eb8..10e8061f9bf 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -26,7 +26,6 @@ import { mqu } from '@/ui/styledSystem'; import { isOrganizationId } from '@/utils'; import { ApiKeysTable } from './ApiKeysTable'; -import { CopyApiKeyAlert } from './CopyApiKeyAlert'; import type { OnCreateParams } from './CreateApiKeyForm'; import { CreateApiKeyForm } from './CreateApiKeyForm'; import { useApiKeys } from './useApiKeys'; @@ -43,6 +42,12 @@ const RevokeAPIKeyConfirmationModal = lazy(() => })), ); +const CopyApiKeyModal = lazy(() => + import(/* webpackChunkName: "copy-api-key-modal"*/ './CopyApiKeyModal').then(module => ({ + default: module.CopyApiKeyModal, + })), +); + export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPageProps) => { const isOrg = isOrganizationId(subject); const canReadAPIKeys = useProtect({ permission: 'org:sys_api_keys:read' }); @@ -72,7 +77,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); const [selectedApiKeyName, setSelectedApiKeyName] = useState(''); - const [showCopyAlert, setShowCopyAlert] = useState(false); + const [isCopyModalOpen, setIsCopyModalOpen] = useState(false); const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { try { @@ -82,7 +87,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr }); closeCardFn(); card.setError(undefined); - setShowCopyAlert(true); + setIsCopyModalOpen(true); } catch (err: any) { if (isClerkAPIResponseError(err)) { if (err.status === 409) { @@ -154,12 +159,6 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr - {showCopyAlert ? ( - - ) : null} + setIsCopyModalOpen(true)} + onClose={() => setIsCopyModalOpen(false)} + apiKeyName={createdApiKey?.name ?? ''} + apiKeySecret={createdApiKey?.secret ?? ''} + modalRoot={revokeModalRoot} + /> ); }; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx deleted file mode 100644 index 1d994e1d90d..00000000000 --- a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyAlert.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { Alert, AlertIcon, Col, descriptors, localizationKeys, Text } from '@/ui/customizables'; -import { ClipboardInput } from '@/ui/elements/ClipboardInput'; -import { Check, ClipboardOutline } from '@/ui/icons'; - -type CopyApiKeyAlertProps = { - apiKeyName: string; - apiKeySecret: string; -}; - -export const CopyApiKeyAlert = ({ apiKeyName, apiKeySecret }: CopyApiKeyAlertProps) => { - return ( - - - - - - - - - ); -}; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx new file mode 100644 index 00000000000..bdf65b3b5da --- /dev/null +++ b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx @@ -0,0 +1,97 @@ +import { descriptors } from '@/ui/customizables'; +import { Card } from '@/ui/elements/Card'; +import { ClipboardInput } from '@/ui/elements/ClipboardInput'; +import { Form } from '@/ui/elements/Form'; +import { FormButtons } from '@/ui/elements/FormButtons'; +import { FormContainer } from '@/ui/elements/FormContainer'; +import { Modal } from '@/ui/elements/Modal'; +import { useClipboard } from '@/ui/hooks'; +import { Check, ClipboardOutline } from '@/ui/icons'; +import { localizationKeys } from '@/ui/localization'; +import { useFormControl } from '@/ui/utils/useFormControl'; + +import { getApiKeyModalContainerStyles } from './utils'; + +type CopyApiKeyModalProps = { + isOpen: boolean; + onOpen: () => void; + onClose: () => void; + apiKeyName: string; + apiKeySecret: string; + modalRoot?: React.MutableRefObject; +}; + +export const CopyApiKeyModal = ({ + isOpen, + onOpen, + onClose, + apiKeyName, + apiKeySecret, + modalRoot, +}: CopyApiKeyModalProps) => { + const apiKeyField = useFormControl('name', apiKeySecret, { + type: 'text', + label: localizationKeys('formFieldLabel__apiKey'), + isRequired: false, + }); + + const { onCopy } = useClipboard(apiKeySecret); + + const handleSubmit = () => { + onCopy(); + onClose(); + }; + + if (!isOpen) { + return null; + } + + return ( + + + ({ + textAlign: 'left', + padding: `${t.sizes.$4} ${t.sizes.$5} ${t.sizes.$4} ${t.sizes.$6}`, + })} + > + + + + + + + + + + + + + + ); +}; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx index c8881c9b18c..517553abbce 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx @@ -10,6 +10,8 @@ import { Modal } from '@/ui/elements/Modal'; import { localizationKeys, useLocalizations } from '@/ui/localization'; import { useFormControl } from '@/ui/utils/useFormControl'; +import { getApiKeyModalContainerStyles } from './utils'; + type RevokeAPIKeyConfirmationModalProps = { subject: string; isOpen: boolean; @@ -70,24 +72,7 @@ export const RevokeAPIKeyConfirmationModal = ({ handleClose={handleClose} canCloseModal={false} portalRoot={modalRoot} - containerSx={[ - { alignItems: 'center' }, - modalRoot - ? t => ({ - position: 'absolute', - right: 0, - bottom: 0, - backgroundColor: 'inherit', - backdropFilter: `blur(${t.sizes.$2})`, - display: 'flex', - justifyContent: 'center', - minHeight: '100%', - height: '100%', - width: '100%', - borderRadius: t.radii.$lg, - }) - : {}, - ]} + containerSx={getApiKeyModalContainerStyles(modalRoot)} > , +): ThemableCssProp => { + return [ + { alignItems: 'center' }, + modalRoot + ? t => ({ + position: 'absolute', + right: 0, + bottom: 0, + backgroundColor: 'inherit', + backdropFilter: `blur(${t.sizes.$2})`, + display: 'flex', + justifyContent: 'center', + minHeight: '100%', + height: '100%', + width: '100%', + borderRadius: t.radii.$lg, + }) + : {}, + ]; +}; diff --git a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts index 30535333dc0..8f9ba0bfcf7 100644 --- a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts +++ b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts @@ -495,6 +495,9 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([ 'apiKeysRevokeModal', 'apiKeysRevokeModalInput', 'apiKeysRevokeModalSubmitButton', + 'apiKeysCopyModal', + 'apiKeysCopyModalInput', + 'apiKeysCopyModalSubmitButton', 'subscriptionDetailsCard', 'subscriptionDetailsCardHeader', diff --git a/packages/clerk-js/src/ui/elements/ClipboardInput.tsx b/packages/clerk-js/src/ui/elements/ClipboardInput.tsx index 82dc028b630..0a622a814cb 100644 --- a/packages/clerk-js/src/ui/elements/ClipboardInput.tsx +++ b/packages/clerk-js/src/ui/elements/ClipboardInput.tsx @@ -11,14 +11,14 @@ type ClipboardInputProps = PropsOfComponent & { }; export const ClipboardInput = (props: ClipboardInputProps) => { - const { id, value, copyIcon = Clipboard, copiedIcon = TickShield, ...rest } = props; + const { id, value, copyIcon = Clipboard, copiedIcon = TickShield, sx, ...rest } = props; const { onCopy, hasCopied } = useClipboard(value as string); return ( ; formFieldCaption__expiration__never: LocalizationValue; formFieldCaption__expiration__expiresOn: LocalizationValue<'date'>; - copyAlert: { - title: LocalizationValue<'name'>; - subtitle: LocalizationValue; + copySecret: { + formTitle: LocalizationValue<'name'>; + formHint: LocalizationValue; + formButtonPrimary__copyAndClose: LocalizationValue; }; }; taskChooseOrganization: { From 17bbb9865475ae687e9bdd18239e9f4c9f291c0b Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Mon, 3 Nov 2025 09:27:30 -0800 Subject: [PATCH 15/30] chore: update changesets --- .changeset/chilly-boxes-warn.md | 2 +- .changeset/heavy-books-protect.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/chilly-boxes-warn.md b/.changeset/chilly-boxes-warn.md index 242b94442b7..f49d965e127 100644 --- a/.changeset/chilly-boxes-warn.md +++ b/.changeset/chilly-boxes-warn.md @@ -2,4 +2,4 @@ "@clerk/localizations": minor --- -Added localization entry for the API key alert component. +Added localization entry for the API key copy modal component. diff --git a/.changeset/heavy-books-protect.md b/.changeset/heavy-books-protect.md index b476b248f28..30f230680ac 100644 --- a/.changeset/heavy-books-protect.md +++ b/.changeset/heavy-books-protect.md @@ -2,4 +2,4 @@ "@clerk/clerk-js": minor --- -Replaced the persistent key column in the API keys table with a one-time alert that displays the secret immediately after creation. +Replaced the persistent key column in the API keys table with a one-time modal that displays the secret immediately after creation. From d6fa9bcbc15dce536d6db81e4c7fb6006f6debb8 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Mon, 3 Nov 2025 09:38:34 -0800 Subject: [PATCH 16/30] chore: dedupe --- pnpm-lock.yaml | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46bf97a8127..087df7cfb9d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -4406,9 +4406,6 @@ packages: '@rolldown/pluginutils@1.0.0-beta.43': resolution: {integrity: sha512-5Uxg7fQUCmfhax7FJke2+8B6cqgeUJUD9o2uXIKXhD+mG0mL6NObmVoi9wXEU1tY89mZKgAYA6fTbftx3q2ZPQ==} - '@rolldown/pluginutils@1.0.0-beta.45': - resolution: {integrity: sha512-Le9ulGCrD8ggInzWw/k2J8QcbPz7eGIOWqfJ2L+1R0Opm7n6J37s2hiDWlh6LJN0Lk9L5sUzMvRHKW7UxBZsQA==} - '@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5': resolution: {integrity: sha512-8sExkWRK+zVybw3+2/kBkYBFeLnEUWz1fT7BLHplpzmtqkOfTbAQ9gkt4pzwGIIZmg4Qn5US5ACjUBenrhezwQ==} @@ -19725,8 +19722,6 @@ snapshots: '@rolldown/pluginutils@1.0.0-beta.43': {} - '@rolldown/pluginutils@1.0.0-beta.45': {} - '@rolldown/pluginutils@1.0.0-beta.9-commit.d91dfb5': {} '@rollup/plugin-alias@5.1.1(rollup@4.52.4)': @@ -21287,7 +21282,7 @@ snapshots: '@babel/core': 7.28.4 '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.28.4) '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4) - '@rolldown/pluginutils': 1.0.0-beta.45 + '@rolldown/pluginutils': 1.0.0-beta.9-commit.d91dfb5 '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.4) vite: 7.1.5(@types/node@24.7.2)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) vue: 3.5.21(typescript@5.8.3) From 9209f763ba1f3eda93b4bd1553d12ebe1f226818 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Mon, 3 Nov 2025 10:31:40 -0800 Subject: [PATCH 17/30] chore: create reusable modal --- .../src/ui/components/ApiKeys/ApiKeyModal.tsx | 44 +++++++++++++++++++ .../ui/components/ApiKeys/CopyApiKeyModal.tsx | 10 ++--- .../ApiKeys/RevokeAPIKeyConfirmationModal.tsx | 10 ++--- .../src/ui/components/ApiKeys/utils.ts | 29 ------------ 4 files changed, 52 insertions(+), 41 deletions(-) create mode 100644 packages/clerk-js/src/ui/components/ApiKeys/ApiKeyModal.tsx delete mode 100644 packages/clerk-js/src/ui/components/ApiKeys/utils.ts diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeyModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeyModal.tsx new file mode 100644 index 00000000000..02584622844 --- /dev/null +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeyModal.tsx @@ -0,0 +1,44 @@ +import React from 'react'; + +import { Modal } from '@/ui/elements/Modal'; +import type { ThemableCssProp } from '@/ui/styledSystem'; + +type ApiKeyModalProps = React.ComponentProps & { + modalRoot?: React.MutableRefObject; +}; + +/** + * Container styles for modals rendered within a custom portal root (e.g., UserProfile or OrganizationProfile). + * When a modalRoot is provided, the modal is scoped to that container rather than the document root, + * requiring different positioning (absolute instead of fixed) and backdrop styling. + */ +const getScopedPortalContainerStyles = (modalRoot?: React.MutableRefObject): ThemableCssProp => { + return [ + { alignItems: 'center' }, + modalRoot + ? t => ({ + position: 'absolute', + right: 0, + bottom: 0, + backgroundColor: 'inherit', + backdropFilter: `blur(${t.sizes.$2})`, + display: 'flex', + justifyContent: 'center', + minHeight: '100%', + height: '100%', + width: '100%', + borderRadius: t.radii.$lg, + }) + : {}, + ]; +}; + +export const ApiKeyModal = ({ modalRoot, containerSx, ...modalProps }: ApiKeyModalProps) => { + return ( + + ); +}; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx index bdf65b3b5da..f0342172e02 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx @@ -4,13 +4,12 @@ import { ClipboardInput } from '@/ui/elements/ClipboardInput'; import { Form } from '@/ui/elements/Form'; import { FormButtons } from '@/ui/elements/FormButtons'; import { FormContainer } from '@/ui/elements/FormContainer'; -import { Modal } from '@/ui/elements/Modal'; import { useClipboard } from '@/ui/hooks'; import { Check, ClipboardOutline } from '@/ui/icons'; import { localizationKeys } from '@/ui/localization'; import { useFormControl } from '@/ui/utils/useFormControl'; -import { getApiKeyModalContainerStyles } from './utils'; +import { ApiKeyModal } from './ApiKeyModal'; type CopyApiKeyModalProps = { isOpen: boolean; @@ -47,12 +46,11 @@ export const CopyApiKeyModal = ({ } return ( - - + ); }; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx index 517553abbce..747b96b6003 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/RevokeAPIKeyConfirmationModal.tsx @@ -6,11 +6,10 @@ import { Card } from '@/ui/elements/Card'; import { Form } from '@/ui/elements/Form'; import { FormButtons } from '@/ui/elements/FormButtons'; import { FormContainer } from '@/ui/elements/FormContainer'; -import { Modal } from '@/ui/elements/Modal'; import { localizationKeys, useLocalizations } from '@/ui/localization'; import { useFormControl } from '@/ui/utils/useFormControl'; -import { getApiKeyModalContainerStyles } from './utils'; +import { ApiKeyModal } from './ApiKeyModal'; type RevokeAPIKeyConfirmationModalProps = { subject: string; @@ -67,12 +66,11 @@ export const RevokeAPIKeyConfirmationModal = ({ } return ( - - + ); }; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/utils.ts b/packages/clerk-js/src/ui/components/ApiKeys/utils.ts deleted file mode 100644 index 9f04a676735..00000000000 --- a/packages/clerk-js/src/ui/components/ApiKeys/utils.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { ThemableCssProp } from '@/ui/styledSystem'; - -/** - * Shared container styles for API key modals when used with a custom modal root. - * These styles handle the modal positioning and backdrop when the modal is rendered - * within a custom container (e.g., within UserProfile or OrganizationProfile). - */ -export const getApiKeyModalContainerStyles = ( - modalRoot?: React.MutableRefObject, -): ThemableCssProp => { - return [ - { alignItems: 'center' }, - modalRoot - ? t => ({ - position: 'absolute', - right: 0, - bottom: 0, - backgroundColor: 'inherit', - backdropFilter: `blur(${t.sizes.$2})`, - display: 'flex', - justifyContent: 'center', - minHeight: '100%', - height: '100%', - width: '100%', - borderRadius: t.radii.$lg, - }) - : {}, - ]; -}; From a0838b18b1312638beb59ea7585acc4ed0eec954 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Mon, 3 Nov 2025 12:18:25 -0800 Subject: [PATCH 18/30] chore: add jsdoc to secret property --- packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx | 2 ++ packages/shared/src/types/json.ts | 3 +++ 2 files changed, 5 insertions(+) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 10e8061f9bf..ed5a064a7ce 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -175,6 +175,8 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr rowInfo={{ allRowsCount: itemCount, startingRow, endingRow }} /> )} + + {/* Modals */} Date: Mon, 3 Nov 2025 18:30:27 -0800 Subject: [PATCH 19/30] chore: hide create form after modal closes --- .../src/ui/components/ApiKeys/ApiKeys.tsx | 20 +++++++++---------- .../ui/components/ApiKeys/CopyApiKeyModal.tsx | 3 +++ .../components/ApiKeys/CreateApiKeyForm.tsx | 15 ++++++-------- 3 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index ed5a064a7ce..5cd1477ba3e 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -79,13 +79,12 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr const [selectedApiKeyName, setSelectedApiKeyName] = useState(''); const [isCopyModalOpen, setIsCopyModalOpen] = useState(false); - const handleCreateApiKey = async (params: OnCreateParams, closeCardFn: () => void) => { + const handleCreateApiKey = async (params: OnCreateParams) => { try { await createApiKey({ ...params, subject, }); - closeCardFn(); card.setError(undefined); setIsCopyModalOpen(true); } catch (err: any) { @@ -157,6 +156,15 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr + + setIsCopyModalOpen(true)} + onClose={() => setIsCopyModalOpen(false)} + apiKeyName={createdApiKey?.name ?? ''} + apiKeySecret={createdApiKey?.secret ?? ''} + modalRoot={revokeModalRoot} + /> - setIsCopyModalOpen(true)} - onClose={() => setIsCopyModalOpen(false)} - apiKeyName={createdApiKey?.name ?? ''} - apiKeySecret={createdApiKey?.secret ?? ''} - modalRoot={revokeModalRoot} - /> ); }; diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx index f0342172e02..cdcdc217a61 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx @@ -1,4 +1,5 @@ import { descriptors } from '@/ui/customizables'; +import { useActionContext } from '@/ui/elements/Action/ActionRoot'; import { Card } from '@/ui/elements/Card'; import { ClipboardInput } from '@/ui/elements/ClipboardInput'; import { Form } from '@/ui/elements/Form'; @@ -35,10 +36,12 @@ export const CopyApiKeyModal = ({ }); const { onCopy } = useClipboard(apiKeySecret); + const { close: closeActionCard } = useActionContext(); const handleSubmit = () => { onCopy(); onClose(); + closeActionCard(); }; if (!isOpen) { diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CreateApiKeyForm.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CreateApiKeyForm.tsx index 6bfa96623bf..4d87be4c2d1 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/CreateApiKeyForm.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/CreateApiKeyForm.tsx @@ -27,7 +27,7 @@ export type OnCreateParams = { }; interface CreateApiKeyFormProps { - onCreate: (params: OnCreateParams, closeCardFn: () => void) => void; + onCreate: (params: OnCreateParams) => void; isSubmitting: boolean; } @@ -164,14 +164,11 @@ export const CreateApiKeyForm: React.FC = ({ onCreate, is const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); - onCreate( - { - name: nameField.value, - description: descriptionField.value || undefined, - secondsUntilExpiration: getTimeLeftInSeconds(selectedExpiration?.value), - }, - closeCardFn, - ); + onCreate({ + name: nameField.value, + description: descriptionField.value || undefined, + secondsUntilExpiration: getTimeLeftInSeconds(selectedExpiration?.value), + }); }; return ( From 4aeab7b4a6b1fc6349b3bdfcd83904038308fb3d Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Tue, 4 Nov 2025 07:08:01 -0800 Subject: [PATCH 20/30] chore: add small delay before hiding create form --- .../clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx index cdcdc217a61..f0e3bce48e1 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx @@ -41,7 +41,9 @@ export const CopyApiKeyModal = ({ const handleSubmit = () => { onCopy(); onClose(); - closeActionCard(); + setTimeout(() => { + closeActionCard(); + }, 100); }; if (!isOpen) { From b0d32514f3d260d8ee9dddbcfedd7b1414659290 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Tue, 4 Nov 2025 13:56:10 -0800 Subject: [PATCH 21/30] chore: update element IDs --- .../clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx | 3 ++- packages/shared/src/types/elementIds.ts | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx index f0e3bce48e1..b0c29882532 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/CopyApiKeyModal.tsx @@ -29,7 +29,7 @@ export const CopyApiKeyModal = ({ apiKeySecret, modalRoot, }: CopyApiKeyModalProps) => { - const apiKeyField = useFormControl('name', apiKeySecret, { + const apiKeyField = useFormControl('apiKeySecret', apiKeySecret, { type: 'text', label: localizationKeys('formFieldLabel__apiKey'), isRequired: false, @@ -77,6 +77,7 @@ export const CopyApiKeyModal = ({ sx={{ flex: 1 }} > + {/* TODO: Use unified Input + Appended icon button component */} Date: Tue, 4 Nov 2025 13:58:10 -0800 Subject: [PATCH 22/30] chore: revert backend change --- .changeset/tiny-hounds-pretend.md | 5 ----- packages/backend/src/api/endpoints/APIKeysApi.ts | 9 +++++++++ 2 files changed, 9 insertions(+), 5 deletions(-) delete mode 100644 .changeset/tiny-hounds-pretend.md diff --git a/.changeset/tiny-hounds-pretend.md b/.changeset/tiny-hounds-pretend.md deleted file mode 100644 index 46f258af8c0..00000000000 --- a/.changeset/tiny-hounds-pretend.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@clerk/backend": minor ---- - -Removed the `getSecretKey()` method of the experimental API keys from the Backend SDK client. API key secret keys can only be retrieved after creation. diff --git a/packages/backend/src/api/endpoints/APIKeysApi.ts b/packages/backend/src/api/endpoints/APIKeysApi.ts index ab5af630aa7..cc78e803299 100644 --- a/packages/backend/src/api/endpoints/APIKeysApi.ts +++ b/packages/backend/src/api/endpoints/APIKeysApi.ts @@ -79,6 +79,15 @@ export class APIKeysAPI extends AbstractAPI { }); } + async getSecret(apiKeyId: string) { + this.requireId(apiKeyId); + + return this.request<{ secret: string }>({ + method: 'GET', + path: joinPaths(basePath, apiKeyId, 'secret'), + }); + } + async verifySecret(secret: string) { return this.request({ method: 'POST', From 6fceef46bf64e5d8af84aa0e94005f11e4cf8364 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Tue, 4 Nov 2025 16:53:30 -0800 Subject: [PATCH 23/30] chore: fix tests --- .../tests/machine-auth/component.test.ts | 45 ++++++++++--------- .../unstable/page-objects/apiKeys.ts | 9 ++++ 2 files changed, 33 insertions(+), 21 deletions(-) diff --git a/integration/tests/machine-auth/component.test.ts b/integration/tests/machine-auth/component.test.ts index f0df76200e5..8b7cab040ab 100644 --- a/integration/tests/machine-auth/component.test.ts +++ b/integration/tests/machine-auth/component.test.ts @@ -43,6 +43,10 @@ testAgainstRunningApps({ await u.po.apiKeys.selectExpiration('1d'); await u.po.apiKeys.clickSaveButton(); + // Close copy modal + await u.po.apiKeys.waitForCopyModalOpened(); + await u.po.apiKeys.clickCopyAndCloseButton(); + await u.po.apiKeys.waitForCopyModalClosed(); await u.po.apiKeys.waitForFormClosed(); // Create API key 2 @@ -52,8 +56,14 @@ testAgainstRunningApps({ await u.po.apiKeys.selectExpiration('7d'); await u.po.apiKeys.clickSaveButton(); + // Wait and close copy modal + await u.po.apiKeys.waitForCopyModalOpened(); + await u.po.apiKeys.clickCopyAndCloseButton(); + await u.po.apiKeys.waitForCopyModalClosed(); + await u.po.apiKeys.waitForFormClosed(); + // Check if both API keys are created - await expect(u.page.locator('.cl-apiKeysTable .cl-tableRow')).toHaveCount(2); + await expect(u.page.locator('.cl-apiKeysTable .cl-tableBody .cl-tableRow')).toHaveCount(2); }); test('can revoke api keys', async ({ page, context }) => { @@ -74,6 +84,11 @@ testAgainstRunningApps({ await u.po.apiKeys.typeName(apiKeyName); await u.po.apiKeys.selectExpiration('1d'); await u.po.apiKeys.clickSaveButton(); + + // Wait and close copy modal + await u.po.apiKeys.waitForCopyModalOpened(); + await u.po.apiKeys.clickCopyAndCloseButton(); + await u.po.apiKeys.waitForCopyModalClosed(); await u.po.apiKeys.waitForFormClosed(); // Retrieve API key @@ -109,39 +124,27 @@ testAgainstRunningApps({ const apiKeyName = `${fakeAdmin.firstName}-${Date.now()}`; - // Wait for create API response to get the secret + // Create API key and capture the secret from the response const createResponsePromise = page.waitForResponse( response => response.url().includes('/api_keys') && response.request().method() === 'POST', ); - - // Create API key await u.po.apiKeys.clickAddButton(); await u.po.apiKeys.waitForFormOpened(); await u.po.apiKeys.typeName(apiKeyName); await u.po.apiKeys.selectExpiration('1d'); await u.po.apiKeys.clickSaveButton(); - // Get the secret from the create response const createResponse = await createResponsePromise; - const apiKeyData = await createResponse.json(); - const secret = apiKeyData.secret; + const secret = (await createResponse.json()).secret; - // Wait for the copy modal to appear - const copyModal = page.locator('.cl-apiKeysCopyModal'); - await copyModal.waitFor({ state: 'attached' }); - - // Grant clipboard permissions before clicking the button + // Copy secret via modal and verify clipboard contents + // Wait and close copy modal + await u.po.apiKeys.waitForCopyModalOpened(); await context.grantPermissions(['clipboard-read']); + await u.po.apiKeys.clickCopyAndCloseButton(); + await u.po.apiKeys.waitForCopyModalClosed(); + await u.po.apiKeys.waitForFormClosed(); - // Click "Copy & Close" button which will copy the secret and close the modal - const copyAndCloseButton = copyModal.locator('.cl-apiKeysCopyModalSubmitButton'); - await copyAndCloseButton.waitFor({ state: 'attached' }); - await copyAndCloseButton.click(); - - // Wait for modal to close - await copyModal.waitFor({ state: 'detached' }); - - // Read clipboard contents to verify the secret was copied const clipboardText = await page.evaluate('navigator.clipboard.readText()'); await context.clearPermissions(); expect(clipboardText).toBe(secret); diff --git a/packages/testing/src/playwright/unstable/page-objects/apiKeys.ts b/packages/testing/src/playwright/unstable/page-objects/apiKeys.ts index 75793c26970..589c2a2f80f 100644 --- a/packages/testing/src/playwright/unstable/page-objects/apiKeys.ts +++ b/packages/testing/src/playwright/unstable/page-objects/apiKeys.ts @@ -35,6 +35,15 @@ export const createAPIKeysComponentPageObject = (testArgs: { page: EnhancedPage waitForRevokeModalClosed: () => { return page.waitForSelector('.cl-apiKeysRevokeModal', { state: 'detached' }); }, + waitForCopyModalOpened: () => { + return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'attached' }); + }, + waitForCopyModalClosed: () => { + return page.waitForSelector('.cl-apiKeysCopyModal', { state: 'detached' }); + }, + clickCopyAndCloseButton: () => { + return page.locator('.cl-apiKeysCopyModal .cl-apiKeysCopyModalSubmitButton').click(); + }, typeName: (value: string) => { return page.getByLabel(/Secret key name/i).fill(value); }, From 9b3047926fd7b4052676c14defb94581dd07a901 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 5 Nov 2025 10:56:35 -0800 Subject: [PATCH 24/30] chore(clerk-js): Add missing locales for copy secret modal (#7160) --- packages/localizations/src/ar-SA.ts | 6 +++--- packages/localizations/src/be-BY.ts | 6 +++--- packages/localizations/src/bg-BG.ts | 6 +++--- packages/localizations/src/bn-IN.ts | 6 +++--- packages/localizations/src/ca-ES.ts | 6 +++--- packages/localizations/src/cs-CZ.ts | 6 +++--- packages/localizations/src/da-DK.ts | 6 +++--- packages/localizations/src/de-DE.ts | 6 +++--- packages/localizations/src/el-GR.ts | 6 +++--- packages/localizations/src/en-GB.ts | 6 +++--- packages/localizations/src/es-CR.ts | 6 +++--- packages/localizations/src/es-ES.ts | 6 +++--- packages/localizations/src/es-MX.ts | 6 +++--- packages/localizations/src/es-UY.ts | 6 +++--- packages/localizations/src/fa-IR.ts | 6 +++--- packages/localizations/src/fi-FI.ts | 6 +++--- packages/localizations/src/fr-FR.ts | 6 +++--- packages/localizations/src/he-IL.ts | 6 +++--- packages/localizations/src/hi-IN.ts | 6 +++--- packages/localizations/src/hr-HR.ts | 6 +++--- packages/localizations/src/hu-HU.ts | 6 +++--- packages/localizations/src/id-ID.ts | 6 +++--- packages/localizations/src/is-IS.ts | 6 +++--- packages/localizations/src/it-IT.ts | 6 +++--- packages/localizations/src/ja-JP.ts | 6 +++--- packages/localizations/src/kk-KZ.ts | 6 +++--- packages/localizations/src/ko-KR.ts | 6 +++--- packages/localizations/src/mn-MN.ts | 6 +++--- packages/localizations/src/ms-MY.ts | 6 +++--- packages/localizations/src/nb-NO.ts | 6 +++--- packages/localizations/src/nl-BE.ts | 6 +++--- packages/localizations/src/nl-NL.ts | 6 +++--- packages/localizations/src/pl-PL.ts | 6 +++--- packages/localizations/src/pt-BR.ts | 6 +++--- packages/localizations/src/pt-PT.ts | 6 +++--- packages/localizations/src/ro-RO.ts | 6 +++--- packages/localizations/src/ru-RU.ts | 6 +++--- packages/localizations/src/sk-SK.ts | 6 +++--- packages/localizations/src/sr-RS.ts | 6 +++--- packages/localizations/src/sv-SE.ts | 6 +++--- packages/localizations/src/ta-IN.ts | 6 +++--- packages/localizations/src/te-IN.ts | 6 +++--- packages/localizations/src/th-TH.ts | 6 +++--- packages/localizations/src/tr-TR.ts | 6 +++--- packages/localizations/src/uk-UA.ts | 6 +++--- packages/localizations/src/vi-VN.ts | 6 +++--- packages/localizations/src/zh-CN.ts | 6 +++--- packages/localizations/src/zh-TW.ts | 6 +++--- 48 files changed, 144 insertions(+), 144 deletions(-) diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index ddfce8c95d6..eb6b945dd94 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -18,9 +18,9 @@ export const arSA: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'نسخ وإغلاق', + formHint: 'لأسباب أمنية، لن نسمح لك بعرضه مرة أخرى لاحقاً.', + formTitle: 'انسخ مفتاح API الخاص بك "{{name}}" الآن', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 362dfe06a8b..37910279781 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -18,9 +18,9 @@ export const beBY: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Скапіраваць і закрыць', + formHint: 'З мэтаў бяспекі мы не дазволім вам праглядзець яго пазней.', + formTitle: 'Скапіруйце ваш API-ключ "{{name}}" зараз', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 2d5341cdd49..2bbbd3eac4f 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -18,9 +18,9 @@ export const bgBG: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Копирай и затвори', + formHint: 'От съображения за сигурност няма да можем да ви позволим да го видите отново по-късно.', + formTitle: 'Копирайте вашия API ключ "{{name}}" сега', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 003397ec730..59ec3d10644 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -18,9 +18,9 @@ export const bnIN: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'কপি করুন এবং বন্ধ করুন', + formHint: 'নিরাপত্তার কারণে, আমরা আপনাকে পরে এটি আবার দেখতে অনুমতি দেব না।', + formTitle: 'এখনই আপনার "{{name}}" API কী কপি করুন', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 2a985277566..034fc687214 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -18,9 +18,9 @@ export const caES: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar i tancar', + formHint: 'Per raons de seguretat, no podràs veure-ho de nou més tard.', + formTitle: 'Copia la teva clau API "{{name}}" ara', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index dcf4258baa2..255e23e8af4 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -18,9 +18,9 @@ export const csCZ: LocalizationResource = { action__add: 'Přidat nový klíč', action__search: 'Vyhledat klíče', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopírovat a zavřít', + formHint: 'Z bezpečnostních důvodů vám to později nebudeme moci znovu zobrazit.', + formTitle: 'Zkopírujte nyní svůj API klíč "{{name}}"', }, createdAndExpirationStatus__expiresOn: "Vytvořeno {{ createdDate | shortDate('cs-CZ') }} • Platí do {{ expiresDate | longDate('cs-CZ') }}", diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 4a2f387a1f9..cd5d7f55d5d 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -18,9 +18,9 @@ export const daDK: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopiér og luk', + formHint: 'Af sikkerhedsmæssige årsager kan vi ikke tillade dig at se det igen senere.', + formTitle: 'Kopiér din API-nøgle "{{name}}" nu', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 6741b64d8fa..234cb0d8639 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -18,9 +18,9 @@ export const deDE: LocalizationResource = { action__add: 'Neuen API-Key hinzufügen', action__search: 'Suche', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopieren und schließen', + formHint: 'Aus Sicherheitsgründen können Sie es später nicht mehr einsehen.', + formTitle: 'Kopieren Sie jetzt Ihren API-Key "{{name}}"', }, createdAndExpirationStatus__expiresOn: "Erstellt {{ createdDate | shortDate('de-DE') }} • Läuft ab {{ expiresDate | longDate('de-DE') }}", diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 13436776e84..d749c750d14 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -18,9 +18,9 @@ export const elGR: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Αντιγραφή και κλείσιμο', + formHint: 'Για λόγους ασφαλείας, δεν θα σας επιτρέψουμε να το δείτε ξανά αργότερα.', + formTitle: 'Αντιγράψτε το κλειδί API "{{name}}" σας τώρα', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index f1693be414c..4da484df03b 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -18,9 +18,9 @@ export const enGB: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copy & Close', + formHint: "For security reasons, we won't allow you to view it again later.", + formTitle: 'Copy your "{{name}}" API Key now', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 1dcda6457e8..f036276133e 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -18,9 +18,9 @@ export const esCR: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar y cerrar', + formHint: 'Por razones de seguridad, no podrás verlo de nuevo más tarde.', + formTitle: 'Copia tu clave API "{{name}}" ahora', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 0d9dbc2cfeb..2331bfba974 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -18,9 +18,9 @@ export const esES: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar y cerrar', + formHint: 'Por razones de seguridad, no podrás verlo de nuevo más tarde.', + formTitle: 'Copia tu clave API "{{name}}" ahora', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index ec281e2f94a..e4eab47d802 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -18,9 +18,9 @@ export const esMX: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar y cerrar', + formHint: 'Por razones de seguridad, no podrás verlo de nuevo más tarde.', + formTitle: 'Copia tu clave API "{{name}}" ahora', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 6c3bfdb1e18..4cd14c8fa63 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -18,9 +18,9 @@ export const esUY: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar y cerrar', + formHint: 'Por razones de seguridad, no podrás verlo de nuevo más tarde.', + formTitle: 'Copia tu clave API "{{name}}" ahora', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 2dd36bb91d5..563722ba6e8 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -18,9 +18,9 @@ export const faIR: LocalizationResource = { action__add: 'افزودن کلید جدید', action__search: 'جستجوی کلیدها', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'کپی و بستن', + formHint: 'به دلایل امنیتی، ما بعداً به شما اجازه مشاهده دوباره آن را نخواهیم داد.', + formTitle: 'اکنون کلید API "{{name}}" خود را کپی کنید', }, createdAndExpirationStatus__expiresOn: "ایجاد شده {{ createdDate | shortDate('en-US') }} • منقضی می‌شود {{ expiresDate | longDate('en-US') }}", diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index cce8aa8f034..55337be3487 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -18,9 +18,9 @@ export const fiFI: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopioi ja sulje', + formHint: 'Tietoturussyistä emme voi sallia sen tarkastelua myöhemmin.', + formTitle: 'Kopioi API-avaimesi "{{name}}" nyt', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 811abeac018..992f0b41eaa 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -18,9 +18,9 @@ export const frFR: LocalizationResource = { action__add: 'Ajouter une nouvelle clé', action__search: 'Rechercher des clés', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copier et fermer', + formHint: 'Pour des raisons de sécurité, nous ne vous permettrons pas de le consulter à nouveau plus tard.', + formTitle: 'Copiez votre clé API "{{name}}" maintenant', }, createdAndExpirationStatus__expiresOn: "Créée le {{ createdDate | shortDate('fr-FR') }} • Expire le {{ expiresDate | longDate('fr-FR') }}", diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 03aa2f4ac0c..563e58138f7 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -18,9 +18,9 @@ export const heIL: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'העתק וסגור', + formHint: 'מסיבות אבטחה, לא נוכל לאפשר לך לצפות בזה שוב מאוחר יותר.', + formTitle: 'העתק את מפתח ה-API "{{name}}" שלך כעת', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index e13be29a787..216baa3a7ab 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -18,9 +18,9 @@ export const hiIN: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'कॉपी करें और बंद करें', + formHint: 'सुरक्षा कारणों से, हम आपको बाद में इसे फिर से देखने की अनुमति नहीं देंगे।', + formTitle: 'अभी अपना "{{name}}" API कुंजी कॉपी करें', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 6b53fa0be66..e0977e3340c 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -18,9 +18,9 @@ export const hrHR: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopiraj i zatvori', + formHint: 'Iz sigurnosnih razloga, nećemo vam dopustiti da ga ponovo pogledate kasnije.', + formTitle: 'Kopirajte svoj API ključ "{{name}}" sada', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 31f6865e92e..8319e0fb309 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -18,9 +18,9 @@ export const huHU: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Másolás és bezárás', + formHint: 'Biztonsági okokból később nem fogjuk tudni újra megengedni, hogy megtekinthesse.', + formTitle: 'Másolja le az "{{name}}" API kulcsot most', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 5d81cf2d6d0..7bbbaa5dbea 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -18,9 +18,9 @@ export const idID: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Salin & Tutup', + formHint: 'Untuk alasan keamanan, kami tidak akan mengizinkan Anda untuk melihatnya lagi nanti.', + formTitle: 'Salin kunci API "{{name}}" Anda sekarang', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index 624459cdf52..0a9663d58e9 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -18,9 +18,9 @@ export const isIS: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Afrita og loka', + formHint: 'Af öryggisástæðum munum við ekki leyfa þér að skoða það aftur síðar.', + formTitle: 'Afritaðu API-lykilinn "{{name}}" þinn núna', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 164694d4693..2ae69ee4e92 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -18,9 +18,9 @@ export const itIT: LocalizationResource = { action__add: 'Aggiungi nuova chiave', action__search: 'Cerca chiavi', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copia e chiudi', + formHint: 'Per motivi di sicurezza, non ti permetteremo di visualizzarlo di nuovo in seguito.', + formTitle: 'Copia la tua chiave API "{{name}}" ora', }, createdAndExpirationStatus__expiresOn: "Creata {{ createdDate | shortDate('it-IT') }} • Scadenza {{ expiresDate | longDate('it-IT') }}", diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 2349e4e06f0..758e0e67e9e 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -18,9 +18,9 @@ export const jaJP: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'コピーして閉じる', + formHint: 'セキュリティ上の理由により、後で再度表示することはできません。', + formTitle: '「{{name}}」APIキーを今すぐコピー', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 2626d1c0f56..458f2695c9e 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -18,9 +18,9 @@ export const kkKZ: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Көшіру және жабу', + formHint: 'Қауіпсіздік себептерімен, біз сізге кейінірек оны қайта көруге рұқсат бере алмаймыз.', + formTitle: 'API кілтіңізді "{{name}}" қазір көшіріңіз', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index f2570074ced..1bbd958f01d 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -18,9 +18,9 @@ export const koKR: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: '복사하고 닫기', + formHint: '보안상의 이유로 나중에 다시 볼 수 없습니다.', + formTitle: '지금 "{{name}}" API 키를 복사하세요', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 7cd2430bedf..ddcf6325067 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -18,9 +18,9 @@ export const mnMN: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Хуулах ба хаах', + formHint: 'Аюулгүй байдлын шалтгаанаар бид танд дараа нь үүнийг дахин харах боломж олгохгүй.', + formTitle: 'Одоо "{{name}}" API түлхүүрээ хуулаарай', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index ff825f68c67..3a240c062cd 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -18,9 +18,9 @@ export const msMY: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Salin & Tutup', + formHint: 'Atas sebab keselamatan, kami tidak akan membenarkan anda melihatnya semula kemudian.', + formTitle: 'Salin kunci API "{{name}}" anda sekarang', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 92da1fd5ec5..471d8dd0652 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -18,9 +18,9 @@ export const nbNO: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopier og lukk', + formHint: 'Av sikkerhetshensyn kan vi ikke tillate deg å se det igjen senere.', + formTitle: 'Kopier API-nøkkelen "{{name}}" din nå', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 1fe853a6d6f..cf4f38dc518 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -18,9 +18,9 @@ export const nlBE: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopiëren en sluiten', + formHint: 'Om veiligheidsredenen kunnen we u later niet meer toestaan om het te bekijken.', + formTitle: 'Kopieer nu uw API-sleutel "{{name}}"', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 6afcabc5b7a..ffe76ac15f0 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -18,9 +18,9 @@ export const nlNL: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopiëren en sluiten', + formHint: 'Om veiligheidsredenen kunnen we u later niet meer toestaan om het te bekijken.', + formTitle: 'Kopieer nu uw API-sleutel "{{name}}"', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 8e2d5c7f2cb..09d0f123615 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -18,9 +18,9 @@ export const plPL: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopiuj i zamknij', + formHint: 'Ze względów bezpieczeństwa nie będziemy mogli wyświetlić tego ponownie później.', + formTitle: 'Skopiuj teraz swój klucz API "{{name}}"', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 7eb391e3651..64858750508 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -18,9 +18,9 @@ export const ptBR: LocalizationResource = { action__add: 'Adicionar nova chave', action__search: 'Pesquisar chaves', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar e fechar', + formHint: 'Por razões de segurança, não permitiremos que você visualize novamente mais tarde.', + formTitle: 'Copie sua chave API "{{name}}" agora', }, createdAndExpirationStatus__expiresOn: "Criada {{ createdDate | shortDate('pt-BR') }} • Expira {{ expiresDate | longDate('pt-BR') }}", diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 88ac4a21dce..28e836afd41 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -18,9 +18,9 @@ export const ptPT: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiar e fechar', + formHint: 'Por razões de segurança, não permitiremos que visualize novamente mais tarde.', + formTitle: 'Copie a sua chave API "{{name}}" agora', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index d03b52c582c..8fb9560a2b1 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -18,9 +18,9 @@ export const roRO: LocalizationResource = { action__add: 'Adaugă cheie nouă', action__search: 'Caută chei', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Copiază și închide', + formHint: 'Din motive de securitate, nu vă vom permite să îl vizualizați din nou mai târziu.', + formTitle: 'Copiați acum cheia API "{{name}}"', }, createdAndExpirationStatus__expiresOn: "Creată {{ createdDate | shortDate('ro-RO') }} • Expiră {{ expiresDate | longDate('ro-RO') }}", diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index dd7cf02fa80..90bf6175043 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -18,9 +18,9 @@ export const ruRU: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Копировать и закрыть', + formHint: 'По соображениям безопасности мы не позволим вам просмотреть его позже.', + formTitle: 'Скопируйте ваш API-ключ "{{name}}" сейчас', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 1ec05da0145..7b0e8c2deaf 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -18,9 +18,9 @@ export const skSK: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopírovať a zavrieť', + formHint: 'Z bezpečnostných dôvodov vám to neskôr nebudeme môcť znova zobraziť.', + formTitle: 'Skopírujte teraz svoj API kľúč "{{name}}"', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 23a5b63b107..56cffe44284 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -18,9 +18,9 @@ export const srRS: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Копирај и затвори', + formHint: 'Из безбедносних разлога, нећемо вам дозволити да га поново погледате касније.', + formTitle: 'Копирајте свој API кључ "{{name}}" сада', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 8c4ddeb8854..44c1f3b8f7e 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -18,9 +18,9 @@ export const svSE: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopiera och stäng', + formHint: 'Av säkerhetsskäl kommer vi inte att tillåta dig att se det igen senare.', + formTitle: 'Kopiera din API-nyckel "{{name}}" nu', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index e1239846b6b..edaa5d7129b 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -18,9 +18,9 @@ export const taIN: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'நகலெடுத்து மூடு', + formHint: 'பாதுகாப்பு காரணங்களுக்காக, நாங்கள் பின்னர் அதை மீண்டும் பார்க்க அனுமதிக்க மாட்டோம்.', + formTitle: 'இப்போது உங்கள் "{{name}}" API விசையை நகலெடுக்கவும்', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 2df972bd463..945aba47e49 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -18,9 +18,9 @@ export const teIN: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'కాపీ చేసి మూసివేయి', + formHint: 'భద్రత కారణాల కోసం, మేము మీకు తర్వాత దాన్ని మళ్లీ చూడడానికి అనుమతించము.', + formTitle: 'ఇప్పుడే మీ "{{name}}" API కీని కాపీ చేయండి', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 8ae2fadeb49..69dfaf28ebf 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -18,9 +18,9 @@ export const thTH: LocalizationResource = { action__add: 'เพิ่มคีย์ใหม่', action__search: 'ค้นหาคีย์', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'คัดลอกและปิด', + formHint: 'ด้วยเหตุผลด้านความปลอดภัย เราจะไม่อนุญาตให้คุณดูอีกครั้งในภายหลัง', + formTitle: 'คัดลอกคีย์ API "{{name}}" ของคุณตอนนี้', }, createdAndExpirationStatus__expiresOn: "สร้างเมื่อ {{ createdDate | shortDate('th-TH') }} • หมดอายุ {{ expiresDate | longDate('th-TH') }}", diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index f3e6633983f..50039036f11 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -18,9 +18,9 @@ export const trTR: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Kopyala ve kapat', + formHint: 'Güvenlik nedenleriyle, daha sonra tekrar görüntülemenize izin vermeyeceğiz.', + formTitle: '"{{name}}" API anahtarınızı şimdi kopyalayın', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index cf0ad8c38c6..6993301971c 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -18,9 +18,9 @@ export const ukUA: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Копіювати та закрити', + formHint: 'З міркувань безпеки ми не дозволимо вам переглянути його пізніше.', + formTitle: 'Скопіюйте ваш API-ключ "{{name}}" зараз', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 1bb314ac13e..8fa2ca03f42 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -18,9 +18,9 @@ export const viVN: LocalizationResource = { action__add: 'Thêm khoá mới', action__search: 'Tìm kiếm khoá', copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: 'Sao chép và đóng', + formHint: 'Vì lý do bảo mật, chúng tôi sẽ không cho phép bạn xem lại sau này.', + formTitle: 'Sao chép khóa API "{{name}}" của bạn ngay bây giờ', }, createdAndExpirationStatus__expiresOn: "Tạo {{ createdDate | shortDate('vi-VN') }} • Hết hạn {{ expiresDate | longDate('vi-VN') }}", diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 3d2cd2ec7f5..9e34808db01 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -18,9 +18,9 @@ export const zhCN: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: '复制并关闭', + formHint: '出于安全原因,我们不会允许您稍后再次查看。', + formTitle: '立即复制您的"{{name}}" API密钥', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index d33538ac930..0a8fa6cd236 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -18,9 +18,9 @@ export const zhTW: LocalizationResource = { action__add: undefined, action__search: undefined, copySecret: { - formButtonPrimary__copyAndClose: undefined, - formHint: undefined, - formTitle: undefined, + formButtonPrimary__copyAndClose: '複製並關閉', + formHint: '基於安全理由,我們不會允許您稍後再次查看。', + formTitle: '立即複製您的"{{name}}" API 金鑰', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, From f352921cebf6d2a8f475edeab853ed74906a1882 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 5 Nov 2025 11:07:22 -0800 Subject: [PATCH 25/30] Update packages/localizations/src/nl-NL.ts Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/localizations/src/nl-NL.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index ffe76ac15f0..92512b7b7c9 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -19,8 +19,8 @@ export const nlNL: LocalizationResource = { action__search: undefined, copySecret: { formButtonPrimary__copyAndClose: 'Kopiëren en sluiten', - formHint: 'Om veiligheidsredenen kunnen we u later niet meer toestaan om het te bekijken.', - formTitle: 'Kopieer nu uw API-sleutel "{{name}}"', + formHint: 'Om veiligheidsredenen kunnen we je dit later niet meer laten zien.', + formTitle: 'Kopieer nu je API-sleutel "{{name}}"', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, From f2238282b8af8d0ac7b26d48e5460337bba86f8e Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 5 Nov 2025 11:06:10 -0800 Subject: [PATCH 26/30] chore: Add missing formFieldLabel__apiKey translations --- packages/localizations/src/ar-SA.ts | 8 ++++---- packages/localizations/src/be-BY.ts | 8 ++++---- packages/localizations/src/bg-BG.ts | 8 ++++---- packages/localizations/src/bn-IN.ts | 8 ++++---- packages/localizations/src/ca-ES.ts | 8 ++++---- packages/localizations/src/cs-CZ.ts | 2 +- packages/localizations/src/da-DK.ts | 8 ++++---- packages/localizations/src/de-DE.ts | 2 +- packages/localizations/src/el-GR.ts | 8 ++++---- packages/localizations/src/en-GB.ts | 8 ++++---- packages/localizations/src/es-CR.ts | 8 ++++---- packages/localizations/src/es-ES.ts | 8 ++++---- packages/localizations/src/es-MX.ts | 8 ++++---- packages/localizations/src/es-UY.ts | 8 ++++---- packages/localizations/src/fa-IR.ts | 2 +- packages/localizations/src/fi-FI.ts | 8 ++++---- packages/localizations/src/fr-FR.ts | 2 +- packages/localizations/src/he-IL.ts | 8 ++++---- packages/localizations/src/hi-IN.ts | 8 ++++---- packages/localizations/src/hr-HR.ts | 8 ++++---- packages/localizations/src/hu-HU.ts | 8 ++++---- packages/localizations/src/id-ID.ts | 8 ++++---- packages/localizations/src/is-IS.ts | 8 ++++---- packages/localizations/src/it-IT.ts | 2 +- packages/localizations/src/ja-JP.ts | 8 ++++---- packages/localizations/src/kk-KZ.ts | 8 ++++---- packages/localizations/src/ko-KR.ts | 8 ++++---- packages/localizations/src/mn-MN.ts | 8 ++++---- packages/localizations/src/ms-MY.ts | 8 ++++---- packages/localizations/src/nb-NO.ts | 8 ++++---- packages/localizations/src/nl-BE.ts | 8 ++++---- packages/localizations/src/nl-NL.ts | 8 ++++---- packages/localizations/src/pl-PL.ts | 8 ++++---- packages/localizations/src/pt-BR.ts | 2 +- packages/localizations/src/pt-PT.ts | 8 ++++---- packages/localizations/src/ro-RO.ts | 2 +- packages/localizations/src/ru-RU.ts | 8 ++++---- packages/localizations/src/sk-SK.ts | 8 ++++---- packages/localizations/src/sr-RS.ts | 8 ++++---- packages/localizations/src/sv-SE.ts | 8 ++++---- packages/localizations/src/ta-IN.ts | 8 ++++---- packages/localizations/src/te-IN.ts | 8 ++++---- packages/localizations/src/th-TH.ts | 2 +- packages/localizations/src/tr-TR.ts | 8 ++++---- packages/localizations/src/uk-UA.ts | 8 ++++---- packages/localizations/src/vi-VN.ts | 2 +- packages/localizations/src/zh-CN.ts | 8 ++++---- packages/localizations/src/zh-TW.ts | 8 ++++---- 48 files changed, 165 insertions(+), 165 deletions(-) diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index eb6b945dd94..9e1b4cd3943 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -226,10 +226,10 @@ export const arSA: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'مفتاح API', + formFieldLabel__apiKeyDescription: 'الوصف', + formFieldLabel__apiKeyExpiration: 'الانتهاء', + formFieldLabel__apiKeyName: 'اسم المفتاح السري', formFieldLabel__automaticInvitations: 'تمكين الدعوة الأوتماتكية لهذا النطاق', formFieldLabel__backupCode: 'الرمز الأحتياطي', formFieldLabel__confirmDeletion: 'تأكيد', diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 37910279781..cc8ab71e568 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -227,10 +227,10 @@ export const beBY: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Увядзіце ваш нумар тэлефона', formFieldInputPlaceholder__username: 'Увядзіце імя карыстальніка', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-ключ', + formFieldLabel__apiKeyDescription: 'Апісанне', + formFieldLabel__apiKeyExpiration: 'Тэрмін дзеяння', + formFieldLabel__apiKeyName: 'Назва сакрэтнага ключа', formFieldLabel__automaticInvitations: 'Уключыць аўтаматычныя запрашэнні для гэтага дамена', formFieldLabel__backupCode: 'Код аднаўлення', formFieldLabel__confirmDeletion: 'Пацверджанне', diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 2bbbd3eac4f..15e87bd38d9 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -226,10 +226,10 @@ export const bgBG: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: '+359 123 456 789', formFieldInputPlaceholder__username: 'Име на потребител', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API ключ', + formFieldLabel__apiKeyDescription: 'Описание', + formFieldLabel__apiKeyExpiration: 'Изтичане', + formFieldLabel__apiKeyName: 'Име на таен ключ', formFieldLabel__automaticInvitations: 'Включи автоматични покани за този домейн', formFieldLabel__backupCode: 'Резервен код', formFieldLabel__confirmDeletion: 'Потвърждение', diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 59ec3d10644..637d945bb4c 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -225,10 +225,10 @@ export const bnIN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'আপনার ফোন নম্বর লিখুন', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API কী', + formFieldLabel__apiKeyDescription: 'বিবরণ', + formFieldLabel__apiKeyExpiration: 'মেয়াদ শেষ', + formFieldLabel__apiKeyName: 'গোপন কী-এর নাম', formFieldLabel__automaticInvitations: 'এই ডোমেনের জন্য স্বয়ংক্রিয় আমন্ত্রণ সক্ষম করুন', formFieldLabel__backupCode: 'ব্যাকআপ কোড', formFieldLabel__confirmDeletion: 'নিশ্চিতকরণ', diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 034fc687214..db8700ad350 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -226,10 +226,10 @@ export const caES: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Número de telèfon', formFieldInputPlaceholder__username: "Nom d'usuari", formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Clau API', + formFieldLabel__apiKeyDescription: 'Descripció', + formFieldLabel__apiKeyExpiration: 'Expiració', + formFieldLabel__apiKeyName: 'Nom de clau secreta', formFieldLabel__automaticInvitations: 'Activa invitacions automàtiques per a aquest domini', formFieldLabel__backupCode: 'Codi de seguretat', formFieldLabel__confirmDeletion: 'Confirmació', diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 255e23e8af4..6a268e55f1c 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -230,7 +230,7 @@ export const csCZ: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Zadejte své telefonní číslo', formFieldInputPlaceholder__username: 'Zadejte své uživatelské jméno', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'API klíč', formFieldLabel__apiKeyDescription: 'Popis', formFieldLabel__apiKeyExpiration: 'Platnost', formFieldLabel__apiKeyName: 'Název tajného klíče', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index cd5d7f55d5d..83cd43db3c3 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -226,10 +226,10 @@ export const daDK: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Indtast telefonnummer', formFieldInputPlaceholder__username: 'Indtast brugernavn', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-nøgle', + formFieldLabel__apiKeyDescription: 'Beskrivelse', + formFieldLabel__apiKeyExpiration: 'Udløb', + formFieldLabel__apiKeyName: 'Navn på hemmelig nøgle', formFieldLabel__automaticInvitations: 'Aktiver automatiske invitationer for dette domæne', formFieldLabel__backupCode: 'Sikkerhedskode', formFieldLabel__confirmDeletion: 'Bekræftelse', diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 234cb0d8639..3fc1bb7f9fd 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -233,7 +233,7 @@ export const deDE: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Telefonnummer eingeben', formFieldInputPlaceholder__username: 'Benutzername eingeben', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'API-Key', formFieldLabel__apiKeyDescription: 'Beschreibung', formFieldLabel__apiKeyExpiration: 'Ablaufdatum', formFieldLabel__apiKeyName: 'Name', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index d749c750d14..24869480df2 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -226,10 +226,10 @@ export const elGR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Εισάγετε τον αριθμό τηλεφώνου σας', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Κλειδί API', + formFieldLabel__apiKeyDescription: 'Περιγραφή', + formFieldLabel__apiKeyExpiration: 'Λήξη', + formFieldLabel__apiKeyName: 'Όνομα μυστικού κλειδιού', formFieldLabel__automaticInvitations: 'Ενεργοποίηση αυτόματων προσκλήσεων για αυτόν τον τομέα', formFieldLabel__backupCode: 'Αντίγραφο ασφαλείας κωδικού', formFieldLabel__confirmDeletion: 'Επιβεβαίωση', diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index 4da484df03b..3377e37438b 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -225,10 +225,10 @@ export const enGB: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Enter your phone number', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API key', + formFieldLabel__apiKeyDescription: 'Description', + formFieldLabel__apiKeyExpiration: 'Expiration', + formFieldLabel__apiKeyName: 'Secret key name', formFieldLabel__automaticInvitations: 'Enable automatic invitations for this domain', formFieldLabel__backupCode: 'Backup code', formFieldLabel__confirmDeletion: 'Confirmation', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index f036276133e..9f500dcb26f 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -227,10 +227,10 @@ export const esCR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Ingresa tu número de teléfono', formFieldInputPlaceholder__username: 'Ingresa tu nombre de usuario', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Clave API', + formFieldLabel__apiKeyDescription: 'Descripción', + formFieldLabel__apiKeyExpiration: 'Expiración', + formFieldLabel__apiKeyName: 'Nombre de clave secreta', formFieldLabel__automaticInvitations: 'Activar invitaciones automáticas para este dominio', formFieldLabel__backupCode: 'Código de respaldo', formFieldLabel__confirmDeletion: 'Confirmación', diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index 2331bfba974..e455a13a303 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -226,10 +226,10 @@ export const esES: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Ingrese su número telefónico', formFieldInputPlaceholder__username: 'Ingrese su nombre de usuario', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Clave API', + formFieldLabel__apiKeyDescription: 'Descripción', + formFieldLabel__apiKeyExpiration: 'Expiración', + formFieldLabel__apiKeyName: 'Nombre de clave secreta', formFieldLabel__automaticInvitations: 'Activar invitaciones automáticas para este dominio', formFieldLabel__backupCode: 'Código de respaldo', formFieldLabel__confirmDeletion: 'Confirmación', diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index e4eab47d802..6d29cd79713 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -228,10 +228,10 @@ export const esMX: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Ingresa tu número de teléfono', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Clave API', + formFieldLabel__apiKeyDescription: 'Descripción', + formFieldLabel__apiKeyExpiration: 'Expiración', + formFieldLabel__apiKeyName: 'Nombre de clave secreta', formFieldLabel__automaticInvitations: 'Activar invitaciones automaticas para este dominio', formFieldLabel__backupCode: 'Código de respaldo', formFieldLabel__confirmDeletion: 'Confirmación', diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 4cd14c8fa63..f447bc390f9 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -227,10 +227,10 @@ export const esUY: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Ingresá tu número de teléfono', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Clave API', + formFieldLabel__apiKeyDescription: 'Descripción', + formFieldLabel__apiKeyExpiration: 'Expiración', + formFieldLabel__apiKeyName: 'Nombre de clave secreta', formFieldLabel__automaticInvitations: 'Habilitar invitaciones automáticas para este dominio', formFieldLabel__backupCode: 'Código de respaldo', formFieldLabel__confirmDeletion: 'Confirmación', diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 563722ba6e8..addbab2c5e4 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -231,7 +231,7 @@ export const faIR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'شماره تلفن خود را وارد کنید', formFieldInputPlaceholder__username: 'نام کاربری خود را وارد کنید', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'کلید API', formFieldLabel__apiKeyDescription: 'توضیحات کلید API', formFieldLabel__apiKeyExpiration: 'انقضای کلید API', formFieldLabel__apiKeyName: 'نام کلید API', diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 55337be3487..4d34ba41185 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -226,10 +226,10 @@ export const fiFI: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-avain', + formFieldLabel__apiKeyDescription: 'Kuvaus', + formFieldLabel__apiKeyExpiration: 'Vanheneminen', + formFieldLabel__apiKeyName: 'Salaisen avaimen nimi', formFieldLabel__automaticInvitations: 'Ota automaattiset kutsut käyttöön tälle verkkotunnukselle', formFieldLabel__backupCode: 'Varakoodi', formFieldLabel__confirmDeletion: 'Vahvistus', diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 992f0b41eaa..0df731bc3df 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -234,7 +234,7 @@ export const frFR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Numéro de téléphone', formFieldInputPlaceholder__username: "Nom d'utilisateur", formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'Clé API', formFieldLabel__apiKeyDescription: 'Description', formFieldLabel__apiKeyExpiration: 'Expiration', formFieldLabel__apiKeyName: 'Nom de la clé secrète', diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 563e58138f7..dafb8126166 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -225,10 +225,10 @@ export const heIL: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'מפתח API', + formFieldLabel__apiKeyDescription: 'תיאור', + formFieldLabel__apiKeyExpiration: 'תאריך תפוגה', + formFieldLabel__apiKeyName: 'שם מפתח סודי', formFieldLabel__automaticInvitations: 'הפעל הזמנות אוטומטיות לדומיין הזה', formFieldLabel__backupCode: 'קוד גיבוי', formFieldLabel__confirmDeletion: 'אישור', diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 216baa3a7ab..1a787b13bca 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -225,10 +225,10 @@ export const hiIN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'अपना फोन नंबर दर्ज करें', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API कुंजी', + formFieldLabel__apiKeyDescription: 'विवरण', + formFieldLabel__apiKeyExpiration: 'समाप्ति', + formFieldLabel__apiKeyName: 'गुप्त कुंजी का नाम', formFieldLabel__automaticInvitations: 'इस डोमेन के लिए स्वचालित आमंत्रण सक्षम करें', formFieldLabel__backupCode: 'बैकअप कोड', formFieldLabel__confirmDeletion: 'पुष्टिकरण', diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index e0977e3340c..811e0422f89 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -225,10 +225,10 @@ export const hrHR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API ključ', + formFieldLabel__apiKeyDescription: 'Opis', + formFieldLabel__apiKeyExpiration: 'Istječe', + formFieldLabel__apiKeyName: 'Naziv tajnog ključa', formFieldLabel__automaticInvitations: 'Omogući automatske pozivnice za ovu domenu', formFieldLabel__backupCode: 'Rezervni kod', formFieldLabel__confirmDeletion: 'Potvrda', diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 8319e0fb309..72d9eb6d2c3 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -225,10 +225,10 @@ export const huHU: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API kulcs', + formFieldLabel__apiKeyDescription: 'Leírás', + formFieldLabel__apiKeyExpiration: 'Lejárat', + formFieldLabel__apiKeyName: 'Titkos kulcs neve', formFieldLabel__automaticInvitations: 'Automatikus meghívások engedélyezése ezen a domainen', formFieldLabel__backupCode: 'Tartalék kód', formFieldLabel__confirmDeletion: 'Megerősítés', diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 7bbbaa5dbea..f7385405e8c 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -225,10 +225,10 @@ export const idID: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Kunci API', + formFieldLabel__apiKeyDescription: 'Deskripsi', + formFieldLabel__apiKeyExpiration: 'Kedaluwarsa', + formFieldLabel__apiKeyName: 'Nama kunci rahasia', formFieldLabel__automaticInvitations: 'Aktifkan undangan otomatis untuk domain ini', formFieldLabel__backupCode: 'Kode cadangan', formFieldLabel__confirmDeletion: 'Konfirmasi', diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index 0a9663d58e9..21c00ae8aac 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -226,10 +226,10 @@ export const isIS: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-lykill', + formFieldLabel__apiKeyDescription: 'Lýsing', + formFieldLabel__apiKeyExpiration: 'Rennur út', + formFieldLabel__apiKeyName: 'Nafn leynilykils', formFieldLabel__automaticInvitations: 'Virkja sjálfvirk boð fyrir þetta lén', formFieldLabel__backupCode: 'Öryggiskóði', formFieldLabel__confirmDeletion: 'Staðfesting', diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 2ae69ee4e92..7a3f61443f3 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -233,7 +233,7 @@ export const itIT: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Inserisci il numero di telefono', formFieldInputPlaceholder__username: 'Inserisci il nome utente', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'Chiave API', formFieldLabel__apiKeyDescription: 'Descrizione', formFieldLabel__apiKeyExpiration: 'Scadenza', formFieldLabel__apiKeyName: 'Nome chiave segreta', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 758e0e67e9e..db9b483f6c3 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -226,10 +226,10 @@ export const jaJP: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: '電話番号', formFieldInputPlaceholder__username: 'ユーザー名', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'APIキー', + formFieldLabel__apiKeyDescription: '説明', + formFieldLabel__apiKeyExpiration: '有効期限', + formFieldLabel__apiKeyName: 'シークレットキー名', formFieldLabel__automaticInvitations: 'このドメインの自動招待を有効にする', formFieldLabel__backupCode: 'バックアップコード', formFieldLabel__confirmDeletion: '削除の確認', diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 458f2695c9e..3458b8d4628 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -225,10 +225,10 @@ export const kkKZ: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Телефон нөмірін енгізіңіз', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API кілті', + formFieldLabel__apiKeyDescription: 'Сипаттама', + formFieldLabel__apiKeyExpiration: 'Мерзімі', + formFieldLabel__apiKeyName: 'Құпия кілт атауы', formFieldLabel__automaticInvitations: 'Бұл доменге автошақыруларды қосу', formFieldLabel__backupCode: 'Сақтық коды', formFieldLabel__confirmDeletion: 'Растау', diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 1bbd958f01d..b53de7d00bc 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -226,10 +226,10 @@ export const koKR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API 키', + formFieldLabel__apiKeyDescription: '설명', + formFieldLabel__apiKeyExpiration: '만료', + formFieldLabel__apiKeyName: '시크릿 키 이름', formFieldLabel__automaticInvitations: 'Enable automatic invitations for this domain', formFieldLabel__backupCode: '백업 코드', formFieldLabel__confirmDeletion: '확인', diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index ddcf6325067..2ae553d4076 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -226,10 +226,10 @@ export const mnMN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Утасны дугаар', formFieldInputPlaceholder__username: 'Хэрэглэгчийн нэр', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API түлхүүр', + formFieldLabel__apiKeyDescription: 'Тодорхойлолт', + formFieldLabel__apiKeyExpiration: 'Хугацаа дуусах', + formFieldLabel__apiKeyName: 'Нууц түлхүүрийн нэр', formFieldLabel__automaticInvitations: 'Энэ домэйны автомат урилгыг идэвхжүүлэх', formFieldLabel__backupCode: 'Нөөц код', formFieldLabel__confirmDeletion: 'Баталгаажуулалт', diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 3a240c062cd..91adc302084 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -225,10 +225,10 @@ export const msMY: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Masukkan nombor telefon anda', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Kunci API', + formFieldLabel__apiKeyDescription: 'Penerangan', + formFieldLabel__apiKeyExpiration: 'Tamat tempoh', + formFieldLabel__apiKeyName: 'Nama kunci rahsia', formFieldLabel__automaticInvitations: 'Aktifkan jemputan automatik untuk domain ini', formFieldLabel__backupCode: 'Kod sandaran', formFieldLabel__confirmDeletion: 'Pengesahan', diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 471d8dd0652..d05ec32c55c 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -226,10 +226,10 @@ export const nbNO: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-nøkkel', + formFieldLabel__apiKeyDescription: 'Beskrivelse', + formFieldLabel__apiKeyExpiration: 'Utløper', + formFieldLabel__apiKeyName: 'Navn på hemmelig nøkkel', formFieldLabel__automaticInvitations: 'Skru på automatiske invitasjoner for dette domenet', formFieldLabel__backupCode: 'Sikkerhetskode', formFieldLabel__confirmDeletion: 'Bekreftelse', diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index cf4f38dc518..a59b891cdd0 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -225,10 +225,10 @@ export const nlBE: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Telefoonnummer', formFieldInputPlaceholder__username: 'Gebruikersnaam', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-sleutel', + formFieldLabel__apiKeyDescription: 'Beschrijving', + formFieldLabel__apiKeyExpiration: 'Vervaldatum', + formFieldLabel__apiKeyName: 'Naam geheime sleutel', formFieldLabel__automaticInvitations: 'Automatische uitnodigingen inschakelen voor dit domein', formFieldLabel__backupCode: 'Backupcode', formFieldLabel__confirmDeletion: 'Bevestiging', diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 92512b7b7c9..2e8a62b2704 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -225,10 +225,10 @@ export const nlNL: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Telefoonnummer', formFieldInputPlaceholder__username: 'Gebruikersnaam', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-sleutel', + formFieldLabel__apiKeyDescription: 'Beschrijving', + formFieldLabel__apiKeyExpiration: 'Vervaldatum', + formFieldLabel__apiKeyName: 'Naam geheime sleutel', formFieldLabel__automaticInvitations: 'Automatische uitnodigingen inschakelen voor dit domein', formFieldLabel__backupCode: 'Backupcode', formFieldLabel__confirmDeletion: 'Bevestiging', diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 09d0f123615..b00d3a4dbda 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -226,10 +226,10 @@ export const plPL: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Wprowadź numer telefonu', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Klucz API', + formFieldLabel__apiKeyDescription: 'Opis', + formFieldLabel__apiKeyExpiration: 'Wygaśnięcie', + formFieldLabel__apiKeyName: 'Nazwa klucza tajnego', formFieldLabel__automaticInvitations: 'Włącz automatyczne zaproszenia dla tej domeny', formFieldLabel__backupCode: 'Kod zapasowy', formFieldLabel__confirmDeletion: 'Potwierdzenie', diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 64858750508..7b25151ad2f 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -232,7 +232,7 @@ export const ptBR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Digite seu número de telefone', formFieldInputPlaceholder__username: 'Digite seu nome de usuário', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'Chave API', formFieldLabel__apiKeyDescription: 'Descrição', formFieldLabel__apiKeyExpiration: 'Expiração', formFieldLabel__apiKeyName: 'Nome da chave de API', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 28e836afd41..0e4b8386151 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -225,10 +225,10 @@ export const ptPT: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Insira o seu número de telefone', formFieldInputPlaceholder__username: 'Insira o seu nome de utilizador', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'Chave API', + formFieldLabel__apiKeyDescription: 'Descrição', + formFieldLabel__apiKeyExpiration: 'Expiração', + formFieldLabel__apiKeyName: 'Nome da chave secreta', formFieldLabel__automaticInvitations: 'Ativar convites automáticos para este domínio', formFieldLabel__backupCode: 'Código de backup', formFieldLabel__confirmDeletion: 'Confirmar exclusão', diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 8fb9560a2b1..08967f2ad6a 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -232,7 +232,7 @@ export const roRO: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Introdu numărul de telefon', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'Cheie API', formFieldLabel__apiKeyDescription: 'Descriere', formFieldLabel__apiKeyExpiration: 'Expirare', formFieldLabel__apiKeyName: 'Numele cheii secrete', diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 90bf6175043..20ce4e6effc 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -228,10 +228,10 @@ export const ruRU: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Введите ваш номер телефона', formFieldInputPlaceholder__username: 'Имя пользователя', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-ключ', + formFieldLabel__apiKeyDescription: 'Описание', + formFieldLabel__apiKeyExpiration: 'Срок действия', + formFieldLabel__apiKeyName: 'Название секретного ключа', formFieldLabel__automaticInvitations: 'Включить автоматические приглашения для этого домена', formFieldLabel__backupCode: 'Код восстановления', formFieldLabel__confirmDeletion: 'Подтверждение', diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 7b0e8c2deaf..f1faea27eb4 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -226,10 +226,10 @@ export const skSK: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Zadajte telefónne číslo', formFieldInputPlaceholder__username: 'Zadajte užívateľské meno', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API kľúč', + formFieldLabel__apiKeyDescription: 'Popis', + formFieldLabel__apiKeyExpiration: 'Expirácia', + formFieldLabel__apiKeyName: 'Názov tajného kľúča', formFieldLabel__automaticInvitations: 'Povoliť automatické pozvánky pre túto doménu', formFieldLabel__backupCode: 'Záložný kód', formFieldLabel__confirmDeletion: 'Potvrdenie', diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 56cffe44284..8f40df02d86 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -225,10 +225,10 @@ export const srRS: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API кључ', + formFieldLabel__apiKeyDescription: 'Опис', + formFieldLabel__apiKeyExpiration: 'Истиче', + formFieldLabel__apiKeyName: 'Назив тајног кључа', formFieldLabel__automaticInvitations: 'Omogući automatske pozivnice za ovaj domen', formFieldLabel__backupCode: 'Rezervni kod', formFieldLabel__confirmDeletion: 'Potvrda', diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 44c1f3b8f7e..e9517663fc4 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -226,10 +226,10 @@ export const svSE: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Ange ditt telefonnummer', formFieldInputPlaceholder__username: 'Ange ditt användarnamn', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-nyckel', + formFieldLabel__apiKeyDescription: 'Beskrivning', + formFieldLabel__apiKeyExpiration: 'Förfaller', + formFieldLabel__apiKeyName: 'Namn på hemlig nyckel', formFieldLabel__automaticInvitations: 'Aktivera automatiska inbjudningar för denna domän', formFieldLabel__backupCode: 'Reserv-kod', formFieldLabel__confirmDeletion: 'Radera konto', diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index edaa5d7129b..304bd423310 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -226,10 +226,10 @@ export const taIN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'உங்கள் தொலைபேசி எண்ணை உள்ளிடவும்', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API விசை', + formFieldLabel__apiKeyDescription: 'விளக்கம்', + formFieldLabel__apiKeyExpiration: 'காலாவதி', + formFieldLabel__apiKeyName: 'இரகசிய விசையின் பெயர்', formFieldLabel__automaticInvitations: 'இந்த டொமைனுக்கு தானியங்கி அழைப்புகளை இயக்கவும்', formFieldLabel__backupCode: 'காப்புக் குறியீடு', formFieldLabel__confirmDeletion: 'உறுதிப்படுத்தல்', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 945aba47e49..14475d65fc5 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -225,10 +225,10 @@ export const teIN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'మీ ఫోన్ నంబర్‌ను నమోదు చేయండి', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API కీ', + formFieldLabel__apiKeyDescription: 'వివరణ', + formFieldLabel__apiKeyExpiration: 'కాలం ముగిసింది', + formFieldLabel__apiKeyName: 'రహస్య కీ పేరు', formFieldLabel__automaticInvitations: 'ఈ డొమైన్ కోసం స్వయంచాలక ఆహ్వానాలను ప్రారంభించండి', formFieldLabel__backupCode: 'బ్యాకప్ కోడ్', formFieldLabel__confirmDeletion: 'నిర్ధారణ', diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 69dfaf28ebf..5cd5d751050 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -229,7 +229,7 @@ export const thTH: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'ใส่หมายเลขโทรศัพท์ของคุณ', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'คีย์ API', formFieldLabel__apiKeyDescription: 'คำอธิบาย', formFieldLabel__apiKeyExpiration: 'วันหมดอายุ', formFieldLabel__apiKeyName: 'ชื่อคีย์ลับ', diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 50039036f11..314181291d9 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -225,10 +225,10 @@ export const trTR: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Telefon numaranızı girin', formFieldInputPlaceholder__username: 'Kullanıcı adınızı girin', formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API anahtarı', + formFieldLabel__apiKeyDescription: 'Açıklama', + formFieldLabel__apiKeyExpiration: 'Son kullanma', + formFieldLabel__apiKeyName: 'Gizli anahtar adı', formFieldLabel__automaticInvitations: 'Bu alan adı için otomatik davetleri etkinleştir', formFieldLabel__backupCode: 'Yedekleme kodu', formFieldLabel__confirmDeletion: 'Onayla', diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 6993301971c..890cdb10fef 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -226,10 +226,10 @@ export const ukUA: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API-ключ', + formFieldLabel__apiKeyDescription: 'Опис', + formFieldLabel__apiKeyExpiration: 'Термін дії', + formFieldLabel__apiKeyName: 'Назва секретного ключа', formFieldLabel__automaticInvitations: 'Enable automatic invitations for this domain', formFieldLabel__backupCode: 'Код відновлення', formFieldLabel__confirmDeletion: 'Підтвердження', diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 8fa2ca03f42..ac5d9e45b39 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -230,7 +230,7 @@ export const viVN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: 'Nhập số điện thoại của bạn', formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, + formFieldLabel__apiKey: 'Khóa API', formFieldLabel__apiKeyDescription: 'Mô tả', formFieldLabel__apiKeyExpiration: 'Hết hạn', formFieldLabel__apiKeyName: 'Tên khoá bí mật', diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 9e34808db01..9387cbb8720 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -225,10 +225,10 @@ export const zhCN: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API密钥', + formFieldLabel__apiKeyDescription: '描述', + formFieldLabel__apiKeyExpiration: '过期时间', + formFieldLabel__apiKeyName: '密钥名称', formFieldLabel__automaticInvitations: '为此域名启用自动邀请', formFieldLabel__backupCode: '备用代码', formFieldLabel__confirmDeletion: '确认', diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 0a8fa6cd236..cfec540d560 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -225,10 +225,10 @@ export const zhTW: LocalizationResource = { formFieldInputPlaceholder__phoneNumber: undefined, formFieldInputPlaceholder__username: undefined, formFieldInput__emailAddress_format: undefined, - formFieldLabel__apiKey: undefined, - formFieldLabel__apiKeyDescription: undefined, - formFieldLabel__apiKeyExpiration: undefined, - formFieldLabel__apiKeyName: undefined, + formFieldLabel__apiKey: 'API 金鑰', + formFieldLabel__apiKeyDescription: '描述', + formFieldLabel__apiKeyExpiration: '過期時間', + formFieldLabel__apiKeyName: '金鑰名稱', formFieldLabel__automaticInvitations: '為此網域啟用自動邀請', formFieldLabel__backupCode: '備用碼', formFieldLabel__confirmDeletion: '確定', From f7f454956a3a5e26cd8f87a3c9b7ea9aedb31de7 Mon Sep 17 00:00:00 2001 From: wobsoriano Date: Wed, 5 Nov 2025 11:10:56 -0800 Subject: [PATCH 27/30] chore: apply mutation suggestions --- .../clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx index 5cd1477ba3e..f494f573b3f 100644 --- a/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx +++ b/packages/clerk-js/src/ui/components/ApiKeys/ApiKeys.tsx @@ -2,6 +2,7 @@ import { isClerkAPIResponseError } from '@clerk/shared/error'; import { useClerk, useOrganization, useUser } from '@clerk/shared/react'; import type { CreateAPIKeyParams } from '@clerk/shared/types'; import { lazy, useState } from 'react'; +import { useSWRConfig } from 'swr'; import useSWRMutation from 'swr/mutation'; import { useProtect } from '@/ui/common'; @@ -72,7 +73,14 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr data: createdApiKey, trigger: createApiKey, isMutating, - } = useSWRMutation(cacheKey, (_key, { arg }: { arg: CreateAPIKeyParams }) => clerk.apiKeys.create(arg)); + } = useSWRMutation( + { + ...cacheKey, + action: 'create', + }, + (_key, { arg }: { arg: CreateAPIKeyParams }) => clerk.apiKeys.create(arg), + ); + const { mutate: mutateApiKeys } = useSWRConfig(); const { t } = useLocalizations(); const [isRevokeModalOpen, setIsRevokeModalOpen] = useState(false); const [selectedApiKeyId, setSelectedApiKeyId] = useState(''); @@ -85,6 +93,7 @@ export const APIKeysPage = ({ subject, perPage, revokeModalRoot }: APIKeysPagePr ...params, subject, }); + void mutateApiKeys(cacheKey); card.setError(undefined); setIsCopyModalOpen(true); } catch (err: any) { From e8992ae203641dc7abdeee10f6c5ae3a14c6843a Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 5 Nov 2025 11:22:59 -0800 Subject: [PATCH 28/30] Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/localizations/src/fi-FI.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 4d34ba41185..86a66029bb5 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -19,7 +19,7 @@ export const fiFI: LocalizationResource = { action__search: undefined, copySecret: { formButtonPrimary__copyAndClose: 'Kopioi ja sulje', - formHint: 'Tietoturussyistä emme voi sallia sen tarkastelua myöhemmin.', + formHint: 'Tietoturvasyistä emme voi sallia sen tarkastelua myöhemmin.', formTitle: 'Kopioi API-avaimesi "{{name}}" nyt', }, createdAndExpirationStatus__expiresOn: undefined, From 6537f6ec27aac7f5df9b5adeb7b8c8a1bec07ae0 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 5 Nov 2025 11:23:25 -0800 Subject: [PATCH 29/30] Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/localizations/src/hu-HU.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 72d9eb6d2c3..0ec3a2053fd 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -19,8 +19,8 @@ export const huHU: LocalizationResource = { action__search: undefined, copySecret: { formButtonPrimary__copyAndClose: 'Másolás és bezárás', - formHint: 'Biztonsági okokból később nem fogjuk tudni újra megengedni, hogy megtekinthesse.', - formTitle: 'Másolja le az "{{name}}" API kulcsot most', + formHint: 'Biztonsági okokból később nem fogjuk tudni újra megengedni, hogy megtekintsd.', + formTitle: 'Másold le az "{{name}}" API kulcsot most', }, createdAndExpirationStatus__expiresOn: undefined, createdAndExpirationStatus__never: undefined, From 020398fef8acdfac0352f88e88c2ee44a74e5940 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 5 Nov 2025 11:23:41 -0800 Subject: [PATCH 30/30] Apply suggestion from @coderabbitai[bot] Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- packages/localizations/src/hu-HU.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 0ec3a2053fd..fb10f068752 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -228,7 +228,7 @@ export const huHU: LocalizationResource = { formFieldLabel__apiKey: 'API kulcs', formFieldLabel__apiKeyDescription: 'Leírás', formFieldLabel__apiKeyExpiration: 'Lejárat', - formFieldLabel__apiKeyName: 'Titkos kulcs neve', + formFieldLabel__apiKeyName: 'API kulcs neve', formFieldLabel__automaticInvitations: 'Automatikus meghívások engedélyezése ezen a domainen', formFieldLabel__backupCode: 'Tartalék kód', formFieldLabel__confirmDeletion: 'Megerősítés',