From aba6a65bd5be91c9205c5bbe26bcc47ed99fb483 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Tue, 9 Dec 2025 12:58:48 +0200 Subject: [PATCH 01/52] chore(ci): configure release/core-2 branch for production releases (#7404) --- .github/workflows/ci.yml | 4 +- .github/workflows/nightly-checks.yml | 102 -------------------------- .github/workflows/preview.retheme.yml | 67 ----------------- .github/workflows/release-canary.yml | 82 --------------------- .github/workflows/release.yml | 16 ++-- 5 files changed, 10 insertions(+), 261 deletions(-) delete mode 100644 .github/workflows/nightly-checks.yml delete mode 100644 .github/workflows/preview.retheme.yml delete mode 100644 .github/workflows/release-canary.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61953716e78..54bd7368245 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,9 +4,7 @@ on: merge_group: pull_request: branches: - - main - - release/v4 - - vincent-and-the-doctor + - release/core-2 permissions: contents: read diff --git a/.github/workflows/nightly-checks.yml b/.github/workflows/nightly-checks.yml deleted file mode 100644 index b8edac5a23a..00000000000 --- a/.github/workflows/nightly-checks.yml +++ /dev/null @@ -1,102 +0,0 @@ -name: Nightly upstream tests -on: - workflow_dispatch: - schedule: - - cron: '0 7 * * *' - -jobs: - integration-tests: - name: Integration Tests - runs-on: ${{ vars.RUNNER_NORMAL || 'ubuntu-latest' }} - timeout-minutes: ${{ vars.TIMEOUT_MINUTES_EXTENDED && fromJSON(vars.TIMEOUT_MINUTES_EXTENDED) || 30 }} - - strategy: - matrix: - test-name: ['nextjs'] - - steps: - - name: Checkout Repo - uses: actions/checkout@v4 - with: - fetch-depth: 0 - show-progress: false - - - name: Setup - id: config - uses: ./.github/actions/init - with: - turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} - turbo-team: ${{ vars.TURBO_TEAM }} - turbo-token: ${{ secrets.TURBO_TOKEN }} - playwright-enabled: true - - - name: Verdaccio - uses: ./.github/actions/verdaccio - with: - publish-cmd: | - if [ "$(npm config get registry)" = "https://registry.npmjs.org/" ]; then echo 'Error: Using default registry' && exit 1; else pnpm turbo build $TURBO_ARGS --only && pnpm changeset publish --no-git-tag; fi - - - name: Install @clerk/backend in /integration - working-directory: ./integration - run: pnpm init && pnpm add @clerk/backend - - - name: Install @clerk/clerk-js in os temp - working-directory: ${{runner.temp}} - run: mkdir clerk-js && cd clerk-js && pnpm init && pnpm add @clerk/clerk-js - - - name: Run Integration Tests - id: integration_tests - continue-on-error: true - run: | - # Capture the output and exit code - OUTPUT_FILE="${{runner.temp}}/test-output.log" - # Only run Typedoc tests for one matrix version - if [ "${{ matrix.test-name }}" == "nextjs" ]; then - E2E_DEBUG=1 E2E_APP_ID=quickstart.next.appRouter pnpm test:integration:base --grep @quickstart 2>&1 | tee "$OUTPUT_FILE" - else - E2E_DEBUG=1 pnpm turbo test:integration:${{ matrix.test-name }} $TURBO_ARGS --only 2>&1 | tee "$OUTPUT_FILE" - fi - echo "exit_code=${PIPESTATUS[0]}" >> $GITHUB_OUTPUT - env: - E2E_APP_CLERK_JS_DIR: ${{runner.temp}} - E2E_CLERK_VERSION: 'latest' - E2E_NEXTJS_VERSION: 'canary' - E2E_NPM_FORCE: 'true' - E2E_REACT_DOM_VERSION: '19.1.0' - E2E_REACT_VERSION: '19.1.0' - INTEGRATION_INSTANCE_KEYS: ${{ secrets.INTEGRATION_INSTANCE_KEYS }} - MAILSAC_API_KEY: ${{ secrets.MAILSAC_API_KEY }} - - # Upload test artifacts if tests failed - - name: Upload Test Artifacts - if: steps.integration_tests.outputs.exit_code != '0' - uses: actions/upload-artifact@v4 - with: - name: test-artifacts-${{ matrix.test-name }} - path: | - ${{runner.temp}}/test-output.log - integration/test-results/ - integration/.next/ - ${{runner.temp}}/clerk-js/node_modules/ - retention-days: 7 - - - name: Report Status - if: always() - uses: ravsamhq/notify-slack-action@v1 - with: - status: ${{ steps.integration_tests.outputs.exit_code == '0' && 'success' || 'failure' }} - notify_when: 'failure' - notification_title: 'Integration Test Failure - ${{ matrix.test-name }}' - message_format: | - *Job:* ${{ github.workflow }} (${{ matrix.test-name }}) - *Status:* ${{ steps.integration_tests.outputs.exit_code == '0' && 'Success' || 'Failed' }} - *Commit:* ${{ github.sha }} - *PR:* ${{ github.event.pull_request.html_url }} - *Artifacts:* ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_SDK_E2E_ALERTS_WEBHOOK_URL }} - - # Fail the workflow if tests failed - - name: Check Test Status - if: steps.integration_tests.outputs.exit_code != '0' - run: exit 1 diff --git a/.github/workflows/preview.retheme.yml b/.github/workflows/preview.retheme.yml deleted file mode 100644 index bd54bb93071..00000000000 --- a/.github/workflows/preview.retheme.yml +++ /dev/null @@ -1,67 +0,0 @@ -name: Deploy Retheme Preview -run-name: Deploy Retheme Preview - -env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_CLERK_PROD_ORG_ID }} - VERCEL_PROJECT_ID: ${{ secrets.VERCEL_JS_RETHEME_PROJECT_ID }} - -on: - push: - branches: - - main - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }}-${{ github.actor }} - cancel-in-progress: true - -jobs: - preview: - runs-on: ${{ vars.RUNNER_NORMAL || 'ubuntu-latest' }} - timeout-minutes: ${{ vars.TIMEOUT_MINUTES_NORMAL && fromJSON(vars.TIMEOUT_MINUTES_NORMAL) || 10 }} - permissions: - contents: write - pull-requests: write - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Setup - id: config - uses: ./.github/actions/init - with: - turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} - turbo-team: ${{ vars.TURBO_TEAM }} - turbo-token: ${{ secrets.TURBO_TOKEN }} - registry-url: 'https://registry.npmjs.org' - - - name: Build packages - run: pnpm turbo build $TURBO_ARGS - - - name: Install site in isolation - run: node scripts/install-site-in-isolation.mjs playground/nextjs - - - name: Install Vercel CLI - run: pnpm add -g vercel@latest - - - name: Pull Vercel environment information - run: | - cd $FULL_TMP_FOLDER - vercel pull --yes --environment=production --token=${{ secrets.VERCEL_CLERK_COOKIE_TOKEN }} - - - name: Copy clerk-js/dist into public/clerk-js of test site - run: | - cp -r $GITHUB_WORKSPACE/packages/clerk-js/dist $FULL_TMP_FOLDER/public/clerk-js - - - name: Build with Vercel - run: | - cd $FULL_TMP_FOLDER - vercel build --yes --prod - env: - NEXT_PUBLIC_CLERK_JS_URL: /clerk-js/clerk.browser.js - - - name: Deploy to Vercel (prebuilt) - id: vercel-deploy - run: | - cd $FULL_TMP_FOLDER - vercel deploy --prebuilt --token=${{ secrets.VERCEL_CLERK_COOKIE_TOKEN }} --no-wait --prod > deployment_url.txt - echo "url=$(cat deployment_url.txt)" >> $GITHUB_OUTPUT diff --git a/.github/workflows/release-canary.yml b/.github/workflows/release-canary.yml deleted file mode 100644 index d62475ce52b..00000000000 --- a/.github/workflows/release-canary.yml +++ /dev/null @@ -1,82 +0,0 @@ -name: Canary release -run-name: Canary release from ${{ github.ref_name }} - -on: - push: - branches: - - main - -concurrency: - group: ${{ github.workflow }}-${{ github.ref }} - cancel-in-progress: true - -jobs: - canary-release: - if: ${{ github.repository == 'clerk/javascript' }} - runs-on: ${{ vars.RUNNER_NORMAL || 'ubuntu-latest' }} - timeout-minutes: ${{ vars.TIMEOUT_MINUTES_NORMAL && fromJSON(vars.TIMEOUT_MINUTES_NORMAL) || 10 }} - env: - TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }} - TURBO_TEAM: ${{ vars.TURBO_TEAM }} - TURBO_CACHE: remote:rw - permissions: - contents: read - id-token: write - steps: - - name: Checkout repo - uses: actions/checkout@v4 - - - name: Setup - id: config - uses: ./.github/actions/init - with: - turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} - turbo-team: ${{ vars.TURBO_TEAM }} - turbo-token: ${{ secrets.TURBO_TOKEN }} - playwright-enabled: true # Must be present to enable caching on branched workflows - registry-url: "https://registry.npmjs.org" - - - name: Version packages for canary - id: version-packages - run: pnpm version-packages:canary | tail -1 >> "$GITHUB_OUTPUT" - - - name: Build release - if: steps.version-packages.outputs.success == '1' - run: pnpm turbo build $TURBO_ARGS - - - name: Canary release - if: steps.version-packages.outputs.success == '1' - run: pnpm release:canary - env: - NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} - NPM_CONFIG_PROVENANCE: true - - - name: Trigger workflows on related repos - uses: actions/github-script@v7 - with: - result-encoding: string - retries: 3 - retry-exempt-status-codes: 400,401 - github-token: ${{ secrets.CLERK_COOKIE_PAT }} - script: | - const clerkjsVersion = require('./packages/clerk-js/package.json').version; - const nextjsVersion = require('./packages/nextjs/package.json').version; - - github.rest.actions.createWorkflowDispatch({ - owner: 'clerk', - repo: 'sdk-infra-workers', - workflow_id: 'update-pkg-versions.yml', - ref: 'main', - inputs: { clerkjsVersion: clerkjsVersion } - }) - - if (nextjsVersion.includes('canary')) { - console.log('clerk/nextjs changed, will notify clerk/accounts'); - github.rest.actions.createWorkflowDispatch({ - owner: 'clerk', - repo: 'accounts', - workflow_id: 'release-staging.yml', - ref: 'main', - inputs: { version: nextjsVersion } - }) - } diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 8bb4c2020e7..043c9b36cbe 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,8 +4,7 @@ run-name: Release on: push: branches: - - main - - release/v4 + - release/core-2 concurrency: group: ${{ github.workflow }}-${{ github.ref }} @@ -43,10 +42,10 @@ jobs: id: config uses: ./.github/actions/init with: - turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} - turbo-team: ${{ vars.TURBO_TEAM }} - turbo-token: ${{ secrets.TURBO_TOKEN }} playwright-enabled: true # Must be present to enable caching on branched workflows + # turbo-signature: ${{ secrets.TURBO_REMOTE_CACHE_SIGNATURE_KEY }} + # turbo-team: ${{ vars.TURBO_TEAM }} + # turbo-token: ${{ secrets.TURBO_TOKEN }} - name: Build release run: pnpm turbo build $TURBO_ARGS --force @@ -55,8 +54,8 @@ jobs: id: changesets uses: changesets/action@v1 with: - commit: "ci(repo): Version packages" - title: "ci(repo): Version packages" + commit: "ci(repo): Version packages (Core 2)" + title: "ci(repo): Version packages (Core 2)" publish: pnpm release # Workaround for https://github.com/changesets/changesets/issues/421 version: pnpm version-packages @@ -139,6 +138,9 @@ jobs: - name: Checkout Repo uses: actions/checkout@v4 with: + fetch-depth: 1 + fetch-tags: false + filter: "blob:none" show-progress: false - name: Cache node_modules (Node v${{ matrix.version }}) From 038e09572e61b1b04af976180eed3e4083f49d56 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Tue, 9 Dec 2025 13:10:09 +0200 Subject: [PATCH 02/52] ci(repo): update base branch references for release/core-2 (#7410) --- .changeset/config.json | 2 +- .github/workflows/ci.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.changeset/config.json b/.changeset/config.json index ace011cb04b..bce23d1858d 100644 --- a/.changeset/config.json +++ b/.changeset/config.json @@ -10,7 +10,7 @@ "fixed": [], "linked": [], "access": "public", - "baseBranch": "origin/main", + "baseBranch": "origin/release/core-2", "updateInternalDependencies": "patch", "snapshot": { "useCalculatedVersion": true, diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54bd7368245..ad05f9acdc3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -80,7 +80,7 @@ jobs: echo 'Skipping'; exit 0; else - pnpm changeset status --since=origin/main; + pnpm changeset status --since=origin/release/core-2; fi build-packages: From 7852956414e9b33fd644bb1bed3ce7c5c6d3bdae Mon Sep 17 00:00:00 2001 From: Vaggelis Yfantis Date: Tue, 9 Dec 2025 13:15:44 +0200 Subject: [PATCH 03/52] fix(tests): Update password compromise message in sign-in reset password tests (#7407) --- .changeset/old-socks-mate.md | 2 ++ .../tests/session-tasks-sign-in-reset-password.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 2 deletions(-) create mode 100644 .changeset/old-socks-mate.md diff --git a/.changeset/old-socks-mate.md b/.changeset/old-socks-mate.md new file mode 100644 index 00000000000..a845151cc84 --- /dev/null +++ b/.changeset/old-socks-mate.md @@ -0,0 +1,2 @@ +--- +--- diff --git a/integration/tests/session-tasks-sign-in-reset-password.test.ts b/integration/tests/session-tasks-sign-in-reset-password.test.ts index cf82347cf09..ac303f19473 100644 --- a/integration/tests/session-tasks-sign-in-reset-password.test.ts +++ b/integration/tests/session-tasks-sign-in-reset-password.test.ts @@ -30,7 +30,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword await expect( u.page.getByText( - "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + 'Your password may be compromised. To protect your account, please continue with an alternative sign-in method. You will be required to reset your password after signing in.', ), ).toBeVisible(); await u.po.signIn.getAltMethodsEmailCodeButton().click(); @@ -83,7 +83,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword await expect( u.page.getByText( - "Your password appears to have been compromised or it's no longer trusted and cannot be used. Please use another method to continue.", + 'Your password may be compromised. To protect your account, please continue with an alternative sign-in method. You will be required to reset your password after signing in.', ), ).toBeVisible(); await u.po.signIn.getAltMethodsEmailCodeButton().click(); From 8c4ce9cca75e31e58e86d0b73a74185d0ae5f6e5 Mon Sep 17 00:00:00 2001 From: Nikos Douvlis Date: Tue, 9 Dec 2025 17:29:34 +0200 Subject: [PATCH 04/52] chore(ci): rename workflow to indicate Core 2 version --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 043c9b36cbe..ae9d68fce0a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,5 +1,5 @@ -name: Release -run-name: Release +name: Release (Core 2) +run-name: Release (Core 2) on: push: From e448757cd3d24a509a3a312e3a376c235fba32a1 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Tue, 9 Dec 2025 11:53:43 -0800 Subject: [PATCH 05/52] chore(backend): Add API keys get, delete and update methods (#7400) --- .changeset/early-clouds-shake.md | 18 + integration/testUtils/usersService.ts | 5 +- .../tests/machine-auth/api-keys.test.ts | 2 +- .../src/api/__tests__/APIKeysApi.test.ts | 393 ++++++++++++++++++ .../backend/src/api/endpoints/APIKeysApi.ts | 53 ++- 5 files changed, 466 insertions(+), 5 deletions(-) create mode 100644 .changeset/early-clouds-shake.md create mode 100644 packages/backend/src/api/__tests__/APIKeysApi.test.ts diff --git a/.changeset/early-clouds-shake.md b/.changeset/early-clouds-shake.md new file mode 100644 index 00000000000..2321ff80cea --- /dev/null +++ b/.changeset/early-clouds-shake.md @@ -0,0 +1,18 @@ +--- +"@clerk/backend": minor +--- + +Added API keys `get`, `delete` and `update` methods. + +Usage: + +```ts +await clerkClient.apiKeys.get('api_key_id') + +await clerkClient.apiKeys.update({ + apiKeyId: 'api_key_id', + scopes: ['scope1', 'scope2'] +}) + +await clerkClient.apiKeys.delete('api_key_id') +``` diff --git a/integration/testUtils/usersService.ts b/integration/testUtils/usersService.ts index 52814990c92..2e7b184af45 100644 --- a/integration/testUtils/usersService.ts +++ b/integration/testUtils/usersService.ts @@ -62,7 +62,7 @@ export type FakeOrganization = { export type FakeAPIKey = { apiKey: APIKey; secret: string; - revoke: () => Promise; + revoke: (reason?: string | null) => Promise; }; export type UserService = { @@ -208,7 +208,8 @@ export const createUserService = (clerkClient: ClerkClient) => { return { apiKey, secret: apiKey.secret ?? '', - revoke: () => clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: 'For testing purposes' }), + revoke: (reason?: string | null) => + clerkClient.apiKeys.revoke({ apiKeyId: apiKey.id, revocationReason: reason }), } satisfies FakeAPIKey; }, passwordCompromised: async (userId: string) => { diff --git a/integration/tests/machine-auth/api-keys.test.ts b/integration/tests/machine-auth/api-keys.test.ts index 88697e43b08..73912c550e5 100644 --- a/integration/tests/machine-auth/api-keys.test.ts +++ b/integration/tests/machine-auth/api-keys.test.ts @@ -65,7 +65,7 @@ test.describe('Next.js API key auth within clerkMiddleware() @machine', () => { }); test.afterAll(async () => { - await fakeAPIKey.revoke(); + await fakeAPIKey.revoke('Testing purposes within clerkMiddleware()'); await fakeUser.deleteIfExists(); await app.teardown(); }); diff --git a/packages/backend/src/api/__tests__/APIKeysApi.test.ts b/packages/backend/src/api/__tests__/APIKeysApi.test.ts new file mode 100644 index 00000000000..4e57891b709 --- /dev/null +++ b/packages/backend/src/api/__tests__/APIKeysApi.test.ts @@ -0,0 +1,393 @@ +import { http, HttpResponse } from 'msw'; +import { describe, expect, it } from 'vitest'; + +import { server, validateHeaders } from '../../mock-server'; +import { createBackendApiClient } from '../factory'; + +describe('APIKeys', () => { + const apiKeyId = 'ak_xxxxx'; + const subject = 'user_xxxxx'; + const apiKeySecret = 'ak_secret_xxxxx'; + + const mockAPIKey = { + object: 'api_key', + id: apiKeyId, + type: 'secret_key', + name: 'Test API Key', + subject: subject, + scopes: ['scope1', 'scope2'], + claims: { foo: 'bar' }, + revoked: false, + revocation_reason: null, + expired: false, + expiration: null, + created_by: 'user_xxxxx', + description: 'Test description', + last_used_at: null, + created_at: 1753743316590, + updated_at: 1753743316590, + }; + + describe('list', () => { + it('retrieves a list of API keys with query parameters', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + const mockPaginatedResponse = { + data: [mockAPIKey], + total_count: 1, + }; + + server.use( + http.get( + 'https://api.clerk.test/api_keys', + validateHeaders(({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + return HttpResponse.json(mockPaginatedResponse); + }), + ), + ); + + const response = await apiClient.apiKeys.list({ + subject, + includeInvalid: true, + limit: 10, + offset: 0, + }); + + expect(response.data).toHaveLength(1); + expect(response.data[0].id).toBe(apiKeyId); + expect(response.data[0].name).toBe('Test API Key'); + expect(response.totalCount).toBe(1); + }); + }); + + describe('create', () => { + it('creates an API key with all parameters', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + const mockCreatedAPIKey = { + ...mockAPIKey, + secret: apiKeySecret, + }; + + server.use( + http.post( + 'https://api.clerk.test/api_keys', + validateHeaders(async ({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + const body = (await request.json()) as Record; + expect(body.name).toBe('New API Key'); + expect(body.subject).toBe(subject); + expect(body.description).toBe('New description'); + expect(body.scopes).toEqual(['scope1', 'scope2']); + expect(body.claims).toEqual({ foo: 'bar' }); + expect(body.seconds_until_expiration).toBe(3600); + return HttpResponse.json(mockCreatedAPIKey); + }), + ), + ); + + const response = await apiClient.apiKeys.create({ + name: 'New API Key', + subject, + description: 'New description', + scopes: ['scope1', 'scope2'], + claims: { foo: 'bar' }, + secondsUntilExpiration: 3600, + }); + + expect(response.id).toBe(apiKeyId); + expect(response.name).toBe('Test API Key'); + expect(response.subject).toBe(subject); + expect(response.scopes).toEqual(['scope1', 'scope2']); + expect(response.claims).toEqual({ foo: 'bar' }); + }); + + it('creates an API key with minimal parameters', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + const mockCreatedAPIKey = { + ...mockAPIKey, + name: 'Minimal API Key', + secret: apiKeySecret, + }; + + server.use( + http.post( + 'https://api.clerk.test/api_keys', + validateHeaders(async ({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + const body = (await request.json()) as Record; + expect(body.name).toBe('Minimal API Key'); + expect(body.subject).toBe(subject); + return HttpResponse.json(mockCreatedAPIKey); + }), + ), + ); + + const response = await apiClient.apiKeys.create({ + name: 'Minimal API Key', + subject, + }); + + expect(response.id).toBe(apiKeyId); + expect(response.name).toBe('Minimal API Key'); + }); + }); + + describe('get', () => { + it('retrieves an API key by ID', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + server.use( + http.get( + `https://api.clerk.test/api_keys/${apiKeyId}`, + validateHeaders(({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + return HttpResponse.json(mockAPIKey); + }), + ), + ); + + const response = await apiClient.apiKeys.get(apiKeyId); + + expect(response.id).toBe(apiKeyId); + expect(response.name).toBe('Test API Key'); + expect(response.subject).toBe(subject); + expect(response.scopes).toEqual(['scope1', 'scope2']); + expect(response.claims).toEqual({ foo: 'bar' }); + expect(response.revoked).toBe(false); + }); + + it('throws error when API key ID is missing', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + await expect(apiClient.apiKeys.get('')).rejects.toThrow('A valid resource ID is required.'); + }); + }); + + describe('update', () => { + it('updates an API key with optional fields', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + const updatedClaims = { foo: 'bar', baz: 'qux' }; + const expirationTimestamp = 1753746916590; + const updatedMockAPIKey = { + ...mockAPIKey, + description: 'Updated description', + scopes: ['scope1', 'scope2', 'scope3'], + claims: updatedClaims, + expiration: expirationTimestamp, + updated_at: 1753746916590, + }; + + server.use( + http.patch( + `https://api.clerk.test/api_keys/${apiKeyId}`, + validateHeaders(({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + return HttpResponse.json(updatedMockAPIKey); + }), + ), + ); + + const response = await apiClient.apiKeys.update({ + apiKeyId, + subject, + description: 'Updated description', + scopes: ['scope1', 'scope2', 'scope3'], + claims: updatedClaims, + secondsUntilExpiration: 3600, + }); + + expect(response.id).toBe(apiKeyId); + expect(response.description).toBe('Updated description'); + expect(response.scopes).toEqual(['scope1', 'scope2', 'scope3']); + expect(response.claims).toEqual(updatedClaims); + expect(response.expiration).toBe(expirationTimestamp); + expect(response.updatedAt).toBe(1753746916590); + }); + + it('throws error when API key ID is missing', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + await expect( + apiClient.apiKeys.update({ + apiKeyId: '', + subject, + }), + ).rejects.toThrow('A valid resource ID is required.'); + }); + }); + + describe('delete', () => { + const mockDeletedObject = { + object: 'api_key', + id: apiKeyId, + deleted: true, + }; + + it('deletes an API key by ID', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + server.use( + http.delete( + `https://api.clerk.test/api_keys/${apiKeyId}`, + validateHeaders(({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + return HttpResponse.json(mockDeletedObject); + }), + ), + ); + + const response = await apiClient.apiKeys.delete(apiKeyId); + + expect(response.id).toBe(apiKeyId); + expect(response.deleted).toBe(true); + expect(response.object).toBe('api_key'); + }); + + it('throws error when API key ID is missing', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + await expect(apiClient.apiKeys.delete('')).rejects.toThrow('A valid resource ID is required.'); + }); + }); + + describe('revoke', () => { + const mockRevokedAPIKey = { + ...mockAPIKey, + revoked: true, + revocation_reason: 'revoked by test', + }; + + it('revokes an API key with revocation reason', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + server.use( + http.post( + `https://api.clerk.test/api_keys/${apiKeyId}/revoke`, + validateHeaders(async ({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + const body = (await request.json()) as Record; + expect(body.revocation_reason).toBe('revoked by test'); + return HttpResponse.json(mockRevokedAPIKey); + }), + ), + ); + + const response = await apiClient.apiKeys.revoke({ + apiKeyId, + revocationReason: 'revoked by test', + }); + + expect(response.revoked).toBe(true); + expect(response.revocationReason).toBe('revoked by test'); + expect(response.id).toBe(apiKeyId); + }); + + it('revokes an API key without revocation reason', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + const mockRevokedAPIKeyNoReason = { + ...mockAPIKey, + revoked: true, + revocation_reason: null, + }; + + server.use( + http.post( + `https://api.clerk.test/api_keys/${apiKeyId}/revoke`, + validateHeaders(async ({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + const body = (await request.json()) as Record; + expect(body.revocation_reason).toBeNull(); + return HttpResponse.json(mockRevokedAPIKeyNoReason); + }), + ), + ); + + const response = await apiClient.apiKeys.revoke({ + apiKeyId, + }); + + expect(response.revoked).toBe(true); + expect(response.revocationReason).toBeNull(); + }); + + it('throws error when API key ID is missing', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + await expect( + apiClient.apiKeys.revoke({ + apiKeyId: '', + }), + ).rejects.toThrow('A valid resource ID is required.'); + }); + }); + + describe('verify', () => { + it('verifies an API key secret', async () => { + const apiClient = createBackendApiClient({ + apiUrl: 'https://api.clerk.test', + secretKey: 'sk_xxxxx', + }); + + server.use( + http.post( + 'https://api.clerk.test/api_keys/verify', + validateHeaders(async ({ request }) => { + expect(request.headers.get('Authorization')).toBe('Bearer sk_xxxxx'); + const body = (await request.json()) as Record; + expect(body.secret).toBe(apiKeySecret); + return HttpResponse.json(mockAPIKey); + }), + ), + ); + + const response = await apiClient.apiKeys.verify(apiKeySecret); + + expect(response.id).toBe(apiKeyId); + expect(response.name).toBe('Test API Key'); + expect(response.subject).toBe(subject); + expect(response.scopes).toEqual(['scope1', 'scope2']); + expect(response.claims).toEqual({ foo: 'bar' }); + }); + }); +}); diff --git a/packages/backend/src/api/endpoints/APIKeysApi.ts b/packages/backend/src/api/endpoints/APIKeysApi.ts index e12316db915..fce1e3da030 100644 --- a/packages/backend/src/api/endpoints/APIKeysApi.ts +++ b/packages/backend/src/api/endpoints/APIKeysApi.ts @@ -4,6 +4,7 @@ import type { PaginatedResourceResponse } from '../../api/resources/Deserializer import { joinPaths } from '../../util/path'; import { deprecated } from '../../util/shared'; import type { APIKey } from '../resources/APIKey'; +import type { DeletedObject } from '../resources/DeletedObject'; import { AbstractAPI } from './AbstractApi'; const basePath = '/api_keys'; @@ -51,6 +52,24 @@ type RevokeAPIKeyParams = { revocationReason?: string | null; }; +type UpdateAPIKeyParams = { + /** + * API key ID + */ + apiKeyId: string; + /** + * The user or Organization ID to associate the API key with + */ + subject: string; + /** + * API key description + */ + description?: string | null; + claims?: Record | null; + scopes?: string[]; + secondsUntilExpiration?: number | null; +}; + export class APIKeysAPI extends AbstractAPI { async list(queryParams: GetAPIKeyListParams) { return this.request>({ @@ -68,15 +87,45 @@ export class APIKeysAPI extends AbstractAPI { }); } - async revoke(params: RevokeAPIKeyParams) { + async get(apiKeyId: string) { + this.requireId(apiKeyId); + + return this.request({ + method: 'GET', + path: joinPaths(basePath, apiKeyId), + }); + } + + async update(params: UpdateAPIKeyParams) { const { apiKeyId, ...bodyParams } = params; this.requireId(apiKeyId); + return this.request({ + method: 'PATCH', + path: joinPaths(basePath, apiKeyId), + bodyParams, + }); + } + + async delete(apiKeyId: string) { + this.requireId(apiKeyId); + + return this.request({ + method: 'DELETE', + path: joinPaths(basePath, apiKeyId), + }); + } + + async revoke(params: RevokeAPIKeyParams) { + const { apiKeyId, revocationReason = null } = params; + + this.requireId(apiKeyId); + return this.request({ method: 'POST', path: joinPaths(basePath, apiKeyId, 'revoke'), - bodyParams, + bodyParams: { revocationReason }, }); } From 893d3e4c4ca1f4f7c9ee13961319ea9423628de9 Mon Sep 17 00:00:00 2001 From: Kamil Homernik <31961734+kamil-homer@users.noreply.github.com> Date: Wed, 10 Dec 2025 02:01:06 +0100 Subject: [PATCH 06/52] Fix(localization): add missing translations in Polish (#7390) Co-authored-by: Robert Soriano --- .changeset/whole-bikes-dig.md | 5 +++ packages/localizations/src/pl-PL.ts | 56 ++++++++++++++--------------- 2 files changed, 33 insertions(+), 28 deletions(-) create mode 100644 .changeset/whole-bikes-dig.md diff --git a/.changeset/whole-bikes-dig.md b/.changeset/whole-bikes-dig.md new file mode 100644 index 00000000000..488a51da02b --- /dev/null +++ b/.changeset/whole-bikes-dig.md @@ -0,0 +1,5 @@ +--- +"@clerk/localizations": patch +--- + +Added translations for Polish in UI elements for Organizations diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 5037147e910..f481f854808 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -264,19 +264,19 @@ export const plPL: LocalizationResource = { membershipRole__basicMember: 'Użytkownik', membershipRole__guestMember: 'Gość', organizationList: { - action__createOrganization: 'Stwórz organizację', + action__createOrganization: 'Utwórz organizację', action__invitationAccept: 'Dołącz', action__suggestionsAccept: 'Poproś o dołączenie', - createOrganization: 'Stwórz organizację', + createOrganization: 'Utwórz organizację', invitationAcceptedLabel: 'Dołączono', - subtitle: 'to continue to {{applicationName}}', - suggestionsAcceptedLabel: 'Pending approval', + subtitle: 'aby przejść do {{applicationName}}', + suggestionsAcceptedLabel: 'Prośby o dołączenie', title: 'Wybierz konto', titleWithoutPersonal: 'Wybierz organizację', }, organizationProfile: { apiKeysPage: { - title: undefined, + title: 'Klucze API', }, badge__automaticInvitation: 'Automatyczne zaproszenia', badge__automaticSuggestion: 'Automatyczne sugestie', @@ -495,12 +495,12 @@ export const plPL: LocalizationResource = { }, }, organizationSwitcher: { - action__closeOrganizationSwitcher: undefined, + action__closeOrganizationSwitcher: 'Zamknij', action__createOrganization: 'Utwórz organizację', action__invitationAccept: 'Dołącz', action__manageOrganization: 'Zarządzaj organizacją', - action__openOrganizationSwitcher: undefined, - action__suggestionsAccept: 'Prośba o dołączenie', + action__openOrganizationSwitcher: 'Otwórz', + action__suggestionsAccept: 'Poproś o dołączenie', notSelected: 'Nie wybrano organizacji', personalWorkspace: 'Przestrzeń osobista', suggestionsAcceptedLabel: 'Oczekiwanie na zatwierdzenie', @@ -850,36 +850,36 @@ export const plPL: LocalizationResource = { socialButtonsBlockButtonManyInView: '{{provider|titleize}}', taskChooseOrganization: { chooseOrganization: { - action__createOrganization: undefined, - action__invitationAccept: undefined, - action__suggestionsAccept: undefined, - subtitle: undefined, - suggestionsAcceptedLabel: undefined, - title: undefined, + action__createOrganization: 'Utwórz organizację', + action__invitationAccept: 'Dołącz', + action__suggestionsAccept: 'Poproś o dołączenie', + subtitle: 'Dołącz do istniejącej organizacji lub utwórz nową', + suggestionsAcceptedLabel: 'Oczekiwanie na dołączenie', + title: 'Wybierz organizację', }, createOrganization: { - formButtonReset: undefined, - formButtonSubmit: undefined, - formFieldInputPlaceholder__name: undefined, - formFieldInputPlaceholder__slug: undefined, - formFieldLabel__name: undefined, - formFieldLabel__slug: undefined, - subtitle: undefined, - title: undefined, + formButtonReset: 'Anuluj', + formButtonSubmit: 'Kontynuuj', + formFieldInputPlaceholder__name: 'Moja Organizacja', + formFieldInputPlaceholder__slug: 'moja-organizacja', + formFieldLabel__name: 'Nazwa', + formFieldLabel__slug: 'Slug', + subtitle: 'Wprowadź szczegóły swojej organizacji', + title: 'Utwórz swoją organizację', }, signOut: { - actionLink: undefined, - actionText: undefined, + actionLink: 'Wyloguj', + actionText: 'Zalogowano jako {{identifier}}', }, }, taskResetPassword: { - formButtonPrimary: undefined, + formButtonPrimary: 'Zresetuj hasło', signOut: { - actionLink: undefined, - actionText: undefined, + actionLink: 'Wyloguj', + actionText: 'Zalogowano jako {{identifier}}', }, + title: 'Zresetuj hasło', subtitle: undefined, - title: undefined, }, unstable__errors: { already_a_member_in_organization: '{{email}} jest już członkiem organizacji.', From 3d9e063129dae124f67771cefa94d3f0bdaae6dc Mon Sep 17 00:00:00 2001 From: Clerk Cookie <136073014+clerk-cookie@users.noreply.github.com> Date: Wed, 10 Dec 2025 03:08:42 -0600 Subject: [PATCH 07/52] ci(repo): Version packages (Core 2) (#7416) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> --- .changeset/early-clouds-shake.md | 18 ------------------ .changeset/old-socks-mate.md | 2 -- .changeset/whole-bikes-dig.md | 5 ----- packages/agent-toolkit/CHANGELOG.md | 7 +++++++ packages/agent-toolkit/package.json | 2 +- packages/astro/CHANGELOG.md | 7 +++++++ packages/astro/package.json | 2 +- packages/backend/CHANGELOG.md | 19 +++++++++++++++++++ packages/backend/package.json | 2 +- packages/chrome-extension/CHANGELOG.md | 8 ++++++++ packages/chrome-extension/package.json | 2 +- packages/clerk-js/CHANGELOG.md | 7 +++++++ packages/clerk-js/package.json | 2 +- packages/expo/CHANGELOG.md | 8 ++++++++ packages/expo/package.json | 2 +- packages/express/CHANGELOG.md | 7 +++++++ packages/express/package.json | 2 +- packages/fastify/CHANGELOG.md | 7 +++++++ packages/fastify/package.json | 2 +- packages/localizations/CHANGELOG.md | 6 ++++++ packages/localizations/package.json | 2 +- packages/nextjs/CHANGELOG.md | 8 ++++++++ packages/nextjs/package.json | 2 +- packages/nuxt/CHANGELOG.md | 7 +++++++ packages/nuxt/package.json | 2 +- packages/react-router/CHANGELOG.md | 8 ++++++++ packages/react-router/package.json | 2 +- packages/remix/CHANGELOG.md | 8 ++++++++ packages/remix/package.json | 2 +- packages/tanstack-react-start/CHANGELOG.md | 8 ++++++++ packages/tanstack-react-start/package.json | 2 +- packages/testing/CHANGELOG.md | 7 +++++++ packages/testing/package.json | 2 +- 33 files changed, 137 insertions(+), 40 deletions(-) delete mode 100644 .changeset/early-clouds-shake.md delete mode 100644 .changeset/old-socks-mate.md delete mode 100644 .changeset/whole-bikes-dig.md diff --git a/.changeset/early-clouds-shake.md b/.changeset/early-clouds-shake.md deleted file mode 100644 index 2321ff80cea..00000000000 --- a/.changeset/early-clouds-shake.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -"@clerk/backend": minor ---- - -Added API keys `get`, `delete` and `update` methods. - -Usage: - -```ts -await clerkClient.apiKeys.get('api_key_id') - -await clerkClient.apiKeys.update({ - apiKeyId: 'api_key_id', - scopes: ['scope1', 'scope2'] -}) - -await clerkClient.apiKeys.delete('api_key_id') -``` diff --git a/.changeset/old-socks-mate.md b/.changeset/old-socks-mate.md deleted file mode 100644 index a845151cc84..00000000000 --- a/.changeset/old-socks-mate.md +++ /dev/null @@ -1,2 +0,0 @@ ---- ---- diff --git a/.changeset/whole-bikes-dig.md b/.changeset/whole-bikes-dig.md deleted file mode 100644 index 488a51da02b..00000000000 --- a/.changeset/whole-bikes-dig.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@clerk/localizations": patch ---- - -Added translations for Polish in UI elements for Organizations diff --git a/packages/agent-toolkit/CHANGELOG.md b/packages/agent-toolkit/CHANGELOG.md index 55e6ff9f4c6..a3cfb6edf80 100644 --- a/packages/agent-toolkit/CHANGELOG.md +++ b/packages/agent-toolkit/CHANGELOG.md @@ -1,5 +1,12 @@ # @clerk/agent-toolkit +## 0.2.9 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + ## 0.2.8 ### Patch Changes diff --git a/packages/agent-toolkit/package.json b/packages/agent-toolkit/package.json index 2a5ff9188ec..3214906a70f 100644 --- a/packages/agent-toolkit/package.json +++ b/packages/agent-toolkit/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/agent-toolkit", - "version": "0.2.8", + "version": "0.2.9", "description": "Clerk Toolkit for AI Agents", "homepage": "https://clerk.com/", "bugs": { diff --git a/packages/astro/CHANGELOG.md b/packages/astro/CHANGELOG.md index 7d312d740ca..412b655f8b3 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -1,5 +1,12 @@ # @clerk/astro +## 2.16.7 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + ## 2.16.6 ### Patch Changes diff --git a/packages/astro/package.json b/packages/astro/package.json index 094ad371e7e..5ec3495ab60 100644 --- a/packages/astro/package.json +++ b/packages/astro/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/astro", - "version": "2.16.6", + "version": "2.16.7", "description": "Clerk SDK for Astro", "keywords": [ "auth", diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 7366e973a40..6612a23cd4d 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,24 @@ # Change Log +## 2.27.0 + +### Minor Changes + +- Added API keys `get`, `delete` and `update` methods. ([#7400](https://github.com/clerk/javascript/pull/7400)) by [@wobsoriano](https://github.com/wobsoriano) + + Usage: + + ```ts + await clerkClient.apiKeys.get('api_key_id'); + + await clerkClient.apiKeys.update({ + apiKeyId: 'api_key_id', + scopes: ['scope1', 'scope2'], + }); + + await clerkClient.apiKeys.delete('api_key_id'); + ``` + ## 2.26.0 ### Minor Changes diff --git a/packages/backend/package.json b/packages/backend/package.json index 48d1eb8489d..ac28c5fc5c4 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/backend", - "version": "2.26.0", + "version": "2.27.0", "description": "Clerk Backend SDK - REST Client for Backend API & JWT verification utilities", "homepage": "https://clerk.com/", "bugs": { diff --git a/packages/chrome-extension/CHANGELOG.md b/packages/chrome-extension/CHANGELOG.md index d397efd58aa..82c8e9865d7 100644 --- a/packages/chrome-extension/CHANGELOG.md +++ b/packages/chrome-extension/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 2.8.11 + +### Patch Changes + +- Updated dependencies []: + - @clerk/clerk-js@5.114.1 + - @clerk/clerk-react@5.58.1 + ## 2.8.10 ### Patch Changes diff --git a/packages/chrome-extension/package.json b/packages/chrome-extension/package.json index 4b75c451924..df2f68e0d10 100644 --- a/packages/chrome-extension/package.json +++ b/packages/chrome-extension/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/chrome-extension", - "version": "2.8.10", + "version": "2.8.11", "description": "Clerk SDK for Chrome extensions", "keywords": [ "auth", diff --git a/packages/clerk-js/CHANGELOG.md b/packages/clerk-js/CHANGELOG.md index 7e04118dd29..4bca6735f23 100644 --- a/packages/clerk-js/CHANGELOG.md +++ b/packages/clerk-js/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 5.114.1 + +### Patch Changes + +- Updated dependencies [[`893d3e4`](https://github.com/clerk/javascript/commit/893d3e4c4ca1f4f7c9ee13961319ea9423628de9)]: + - @clerk/localizations@3.30.1 + ## 5.114.0 ### Minor Changes diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 2d46da3cc89..183768878ec 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-js", - "version": "5.114.0", + "version": "5.114.1", "description": "Clerk JS library", "keywords": [ "clerk", diff --git a/packages/expo/CHANGELOG.md b/packages/expo/CHANGELOG.md index 6222317dedd..ac8b417a5bf 100644 --- a/packages/expo/CHANGELOG.md +++ b/packages/expo/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 2.19.11 + +### Patch Changes + +- Updated dependencies []: + - @clerk/clerk-js@5.114.1 + - @clerk/clerk-react@5.58.1 + ## 2.19.10 ### Patch Changes diff --git a/packages/expo/package.json b/packages/expo/package.json index 44ec6b09d9c..ea95ce2d576 100644 --- a/packages/expo/package.json +++ b/packages/expo/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-expo", - "version": "2.19.10", + "version": "2.19.11", "description": "Clerk React Native/Expo library", "keywords": [ "react", diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md index 710ae126bf2..23b45eee9f6 100644 --- a/packages/express/CHANGELOG.md +++ b/packages/express/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 1.7.57 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + ## 1.7.56 ### Patch Changes diff --git a/packages/express/package.json b/packages/express/package.json index 9de82c69819..c52453680f4 100644 --- a/packages/express/package.json +++ b/packages/express/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/express", - "version": "1.7.56", + "version": "1.7.57", "description": "Clerk server SDK for usage with Express", "keywords": [ "clerk", diff --git a/packages/fastify/CHANGELOG.md b/packages/fastify/CHANGELOG.md index d54e24f4ee4..bc9eaabfcbe 100644 --- a/packages/fastify/CHANGELOG.md +++ b/packages/fastify/CHANGELOG.md @@ -1,5 +1,12 @@ # Change Log +## 2.6.9 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + ## 2.6.8 ### Patch Changes diff --git a/packages/fastify/package.json b/packages/fastify/package.json index 4a7eef8eebd..f8304a2fd9c 100644 --- a/packages/fastify/package.json +++ b/packages/fastify/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/fastify", - "version": "2.6.8", + "version": "2.6.9", "description": "Clerk SDK for Fastify", "keywords": [ "auth", diff --git a/packages/localizations/CHANGELOG.md b/packages/localizations/CHANGELOG.md index 08ee8953b88..110befa6f90 100644 --- a/packages/localizations/CHANGELOG.md +++ b/packages/localizations/CHANGELOG.md @@ -1,5 +1,11 @@ # Change Log +## 3.30.1 + +### Patch Changes + +- Added translations for Polish in UI elements for Organizations ([#7390](https://github.com/clerk/javascript/pull/7390)) by [@kamil-homer](https://github.com/kamil-homer) + ## 3.30.0 ### Minor Changes diff --git a/packages/localizations/package.json b/packages/localizations/package.json index 3f3daa791b0..51831dbe54a 100644 --- a/packages/localizations/package.json +++ b/packages/localizations/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/localizations", - "version": "3.30.0", + "version": "3.30.1", "description": "Localizations for the Clerk components", "keywords": [ "react", diff --git a/packages/nextjs/CHANGELOG.md b/packages/nextjs/CHANGELOG.md index 5f9169532b8..c704054d7ae 100644 --- a/packages/nextjs/CHANGELOG.md +++ b/packages/nextjs/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 6.36.2 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + - @clerk/clerk-react@5.58.1 + ## 6.36.1 ### Patch Changes diff --git a/packages/nextjs/package.json b/packages/nextjs/package.json index 5ac702de8f6..89f5ede4d26 100644 --- a/packages/nextjs/package.json +++ b/packages/nextjs/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/nextjs", - "version": "6.36.1", + "version": "6.36.2", "description": "Clerk SDK for NextJS", "keywords": [ "clerk", diff --git a/packages/nuxt/CHANGELOG.md b/packages/nuxt/CHANGELOG.md index e78f93807b7..6e0667887c8 100644 --- a/packages/nuxt/CHANGELOG.md +++ b/packages/nuxt/CHANGELOG.md @@ -1,5 +1,12 @@ # @clerk/nuxt +## 1.13.7 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + ## 1.13.6 ### Patch Changes diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index 0a582dc48c2..b3198b60b3f 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/nuxt", - "version": "1.13.6", + "version": "1.13.7", "description": "Clerk SDK for Nuxt", "keywords": [ "clerk", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 48256a9caa5..e05776e4949 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 2.3.4 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + - @clerk/clerk-react@5.58.1 + ## 2.3.3 ### Patch Changes diff --git a/packages/react-router/package.json b/packages/react-router/package.json index 145d6d50406..e18955f082f 100644 --- a/packages/react-router/package.json +++ b/packages/react-router/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/react-router", - "version": "2.3.3", + "version": "2.3.4", "description": "Clerk SDK for React Router", "keywords": [ "clerk", diff --git a/packages/remix/CHANGELOG.md b/packages/remix/CHANGELOG.md index 0c650bf3a1b..b06f53a74bb 100644 --- a/packages/remix/CHANGELOG.md +++ b/packages/remix/CHANGELOG.md @@ -1,5 +1,13 @@ # Change Log +## 4.13.24 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + - @clerk/clerk-react@5.58.1 + ## 4.13.23 ### Patch Changes diff --git a/packages/remix/package.json b/packages/remix/package.json index 92c8745176b..7b1b7621871 100644 --- a/packages/remix/package.json +++ b/packages/remix/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/remix", - "version": "4.13.23", + "version": "4.13.24", "description": "Clerk SDK for Remix", "keywords": [ "clerk", diff --git a/packages/tanstack-react-start/CHANGELOG.md b/packages/tanstack-react-start/CHANGELOG.md index c78e3942862..dc9fa445243 100644 --- a/packages/tanstack-react-start/CHANGELOG.md +++ b/packages/tanstack-react-start/CHANGELOG.md @@ -1,5 +1,13 @@ # @clerk/tanstack-react-start +## 0.27.9 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + - @clerk/clerk-react@5.58.1 + ## 0.27.8 ### Patch Changes diff --git a/packages/tanstack-react-start/package.json b/packages/tanstack-react-start/package.json index f6ad2b00038..4c13607d1f4 100644 --- a/packages/tanstack-react-start/package.json +++ b/packages/tanstack-react-start/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/tanstack-react-start", - "version": "0.27.8", + "version": "0.27.9", "description": "Clerk SDK for TanStack React Start", "keywords": [ "clerk", diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md index 37dc8f0e32f..5ed27cf1a7b 100644 --- a/packages/testing/CHANGELOG.md +++ b/packages/testing/CHANGELOG.md @@ -1,5 +1,12 @@ # @clerk/testing +## 1.13.23 + +### Patch Changes + +- Updated dependencies [[`e448757`](https://github.com/clerk/javascript/commit/e448757cd3d24a509a3a312e3a376c235fba32a1)]: + - @clerk/backend@2.27.0 + ## 1.13.22 ### Patch Changes diff --git a/packages/testing/package.json b/packages/testing/package.json index ca024cc1545..eca5c4a5555 100644 --- a/packages/testing/package.json +++ b/packages/testing/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/testing", - "version": "1.13.22", + "version": "1.13.23", "description": "Utilities to help you create E2E test suites for apps using Clerk", "keywords": [ "auth", From f626046c589956022b1e1ac70382c986822f4733 Mon Sep 17 00:00:00 2001 From: Kenton Duprey Date: Wed, 10 Dec 2025 12:16:52 -0500 Subject: [PATCH 08/52] feat(clerk-js,clerk-react,shared,types): Add sign in with Solana feature support (#7293) Signed-off-by: Kenton Duprey Co-authored-by: Dylan Staley <88163+dstaley@users.noreply.github.com> --- .changeset/legal-jokes-beg.md | 9 + packages/clerk-js/bundle-check.mjs | 4 +- packages/clerk-js/bundlewatch.config.json | 18 +- packages/clerk-js/package.json | 4 + packages/clerk-js/rspack.config.js | 30 +- packages/clerk-js/src/core/clerk.ts | 27 +- .../clerk-js/src/core/resources/SignIn.ts | 49 +- .../clerk-js/src/core/resources/SignUp.ts | 40 +- .../src/ui/common/WalletInitialIcon.tsx | 43 + .../SignInFactorOneSolanaWalletsCard.tsx | 94 ++ .../components/SignIn/SignInSocialButtons.tsx | 4 + .../src/ui/components/SignIn/index.tsx | 4 + .../components/SignUp/SignUpSocialButtons.tsx | 4 + .../SignUp/SignUpStartSolanaWalletsCard.tsx | 75 + .../src/ui/components/SignUp/index.tsx | 4 + .../ui/customizables/elementDescriptors.ts | 11 + .../ui/elements/Web3SolanaWalletButtons.tsx | 280 ++++ .../src/ui/elements/contexts/index.tsx | 3 +- .../src/ui/utils/web3CallbackErrorHandler.ts | 4 +- ...oviders.ts => injectedWeb3EthProviders.ts} | 20 +- .../src/utils/injectedWeb3SolanaProviders.ts | 66 + packages/clerk-js/src/utils/web3.ts | 94 +- .../hooks/use-third-party-provider.hook.ts | 4 + packages/localizations/src/ar-SA.ts | 15 + packages/localizations/src/be-BY.ts | 15 + packages/localizations/src/bg-BG.ts | 15 + packages/localizations/src/bn-IN.ts | 15 + packages/localizations/src/ca-ES.ts | 15 + packages/localizations/src/cs-CZ.ts | 15 + packages/localizations/src/da-DK.ts | 15 + packages/localizations/src/de-DE.ts | 15 + packages/localizations/src/el-GR.ts | 15 + packages/localizations/src/en-GB.ts | 15 + packages/localizations/src/en-US.ts | 17 + packages/localizations/src/es-CR.ts | 15 + packages/localizations/src/es-ES.ts | 15 + packages/localizations/src/es-MX.ts | 15 + packages/localizations/src/es-UY.ts | 15 + packages/localizations/src/fa-IR.ts | 15 + packages/localizations/src/fi-FI.ts | 15 + packages/localizations/src/fr-FR.ts | 15 + packages/localizations/src/he-IL.ts | 15 + packages/localizations/src/hi-IN.ts | 15 + packages/localizations/src/hr-HR.ts | 15 + packages/localizations/src/hu-HU.ts | 15 + packages/localizations/src/id-ID.ts | 15 + packages/localizations/src/is-IS.ts | 15 + packages/localizations/src/it-IT.ts | 15 + packages/localizations/src/ja-JP.ts | 15 + packages/localizations/src/kk-KZ.ts | 15 + packages/localizations/src/ko-KR.ts | 15 + packages/localizations/src/mn-MN.ts | 15 + packages/localizations/src/ms-MY.ts | 15 + packages/localizations/src/nb-NO.ts | 15 + packages/localizations/src/nl-BE.ts | 15 + packages/localizations/src/nl-NL.ts | 15 + packages/localizations/src/pl-PL.ts | 15 + packages/localizations/src/pt-BR.ts | 15 + packages/localizations/src/pt-PT.ts | 15 + packages/localizations/src/ro-RO.ts | 15 + packages/localizations/src/ru-RU.ts | 15 + packages/localizations/src/sk-SK.ts | 15 + packages/localizations/src/sr-RS.ts | 15 + packages/localizations/src/sv-SE.ts | 15 + packages/localizations/src/ta-IN.ts | 15 + packages/localizations/src/te-IN.ts | 15 + packages/localizations/src/th-TH.ts | 15 + packages/localizations/src/tr-TR.ts | 15 + packages/localizations/src/uk-UA.ts | 15 + packages/localizations/src/vi-VN.ts | 15 + packages/localizations/src/zh-CN.ts | 15 + packages/localizations/src/zh-TW.ts | 15 + packages/react/src/isomorphicClerk.ts | 10 + packages/shared/src/types/appearance.ts | 11 + packages/shared/src/types/clerk.ts | 15 + packages/shared/src/types/factors.ts | 1 + packages/shared/src/types/localization.ts | 16 + packages/shared/src/types/signIn.ts | 3 + packages/shared/src/types/signInCommon.ts | 4 + packages/shared/src/types/signInFuture.ts | 9 + packages/shared/src/types/signUp.ts | 2 + packages/shared/src/types/signUpCommon.ts | 5 + packages/shared/src/types/web3.ts | 9 +- packages/shared/src/types/web3Wallet.ts | 4 +- packages/shared/src/web3.ts | 5 + pnpm-lock.yaml | 1249 +++++++++++++---- 86 files changed, 2630 insertions(+), 341 deletions(-) create mode 100644 .changeset/legal-jokes-beg.md create mode 100644 packages/clerk-js/src/ui/common/WalletInitialIcon.tsx create mode 100644 packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx create mode 100644 packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx create mode 100644 packages/clerk-js/src/ui/elements/Web3SolanaWalletButtons.tsx rename packages/clerk-js/src/utils/{injectedWeb3Providers.ts => injectedWeb3EthProviders.ts} (76%) create mode 100644 packages/clerk-js/src/utils/injectedWeb3SolanaProviders.ts diff --git a/.changeset/legal-jokes-beg.md b/.changeset/legal-jokes-beg.md new file mode 100644 index 00000000000..981ea036ecc --- /dev/null +++ b/.changeset/legal-jokes-beg.md @@ -0,0 +1,9 @@ +--- +'@clerk/localizations': minor +'@clerk/clerk-js': minor +'@clerk/elements': minor +'@clerk/shared': minor +'@clerk/clerk-react': minor +--- + +Add support for Sign in with Solana. diff --git a/packages/clerk-js/bundle-check.mjs b/packages/clerk-js/bundle-check.mjs index b3058837813..ee31203690a 100644 --- a/packages/clerk-js/bundle-check.mjs +++ b/packages/clerk-js/bundle-check.mjs @@ -5,7 +5,7 @@ import path from 'node:path'; import { pipeline } from 'node:stream'; import zlib from 'node:zlib'; -import { chromium } from 'playwright'; +import { chromium } from '@playwright/test'; /** * This script generates a CLI report detailing the gzipped size of JavaScript resources loaded by `clerk-js` for a @@ -212,7 +212,7 @@ function report(url, responses) { /** * Loads the given `url` in `browser`, capturing all HTTP requests that occur. - * @param {import('playwright').Browser} browser + * @param {import('@playwright/test').Browser} browser * @param {string} url */ async function getResponseSizes(browser, url) { diff --git a/packages/clerk-js/bundlewatch.config.json b/packages/clerk-js/bundlewatch.config.json index 3425146261d..f1ff076fd5b 100644 --- a/packages/clerk-js/bundlewatch.config.json +++ b/packages/clerk-js/bundlewatch.config.json @@ -1,12 +1,12 @@ { "files": [ - { "path": "./dist/clerk.js", "maxSize": "840KB" }, - { "path": "./dist/clerk.browser.js", "maxSize": "83KB" }, - { "path": "./dist/clerk.legacy.browser.js", "maxSize": "127KB" }, - { "path": "./dist/clerk.headless*.js", "maxSize": "65KB" }, - { "path": "./dist/ui-common*.js", "maxSize": "119KB" }, - { "path": "./dist/ui-common*.legacy.*.js", "maxSize": "122KB" }, - { "path": "./dist/vendors*.js", "maxSize": "47KB" }, + { "path": "./dist/clerk.js", "maxSize": "922.1KB" }, + { "path": "./dist/clerk.browser.js", "maxSize": "87KB" }, + { "path": "./dist/clerk.legacy.browser.js", "maxSize": "129KB" }, + { "path": "./dist/clerk.headless*.js", "maxSize": "66KB" }, + { "path": "./dist/ui-common*.js", "maxSize": "119.1KB" }, + { "path": "./dist/ui-common*.legacy.*.js", "maxSize": "123KB" }, + { "path": "./dist/vendors*.js", "maxSize": "50KB" }, { "path": "./dist/coinbase*.js", "maxSize": "38KB" }, { "path": "./dist/stripe-vendors*.js", "maxSize": "1KB" }, { "path": "./dist/createorganization*.js", "maxSize": "5KB" }, @@ -15,11 +15,11 @@ { "path": "./dist/organizationswitcher*.js", "maxSize": "5KB" }, { "path": "./dist/organizationlist*.js", "maxSize": "5.5KB" }, { "path": "./dist/signin*.js", "maxSize": "18KB" }, - { "path": "./dist/signup*.js", "maxSize": "9.5KB" }, + { "path": "./dist/signup*.js", "maxSize": "11KB" }, { "path": "./dist/userbutton*.js", "maxSize": "5KB" }, { "path": "./dist/userprofile*.js", "maxSize": "16KB" }, { "path": "./dist/userverification*.js", "maxSize": "5KB" }, - { "path": "./dist/onetap*.js", "maxSize": "1KB" }, + { "path": "./dist/onetap*.js", "maxSize": "3KB" }, { "path": "./dist/waitlist*.js", "maxSize": "1.5KB" }, { "path": "./dist/keylessPrompt*.js", "maxSize": "6.5KB" }, { "path": "./dist/enableOrganizationsPrompt*.js", "maxSize": "6.5KB" }, diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 183768878ec..07a34f016e0 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -68,9 +68,13 @@ "@floating-ui/react": "0.27.12", "@floating-ui/react-dom": "^2.1.3", "@formkit/auto-animate": "^0.8.2", + "@solana/wallet-adapter-base": "0.9.27", + "@solana/wallet-adapter-react": "0.15.39", + "@solana/wallet-standard": "1.1.4", "@stripe/stripe-js": "5.6.0", "@swc/helpers": "^0.5.17", "@tanstack/query-core": "5.87.4", + "@wallet-standard/core": "1.1.1", "@zxcvbn-ts/core": "3.0.4", "@zxcvbn-ts/language-common": "3.0.4", "alien-signals": "2.0.6", diff --git a/packages/clerk-js/rspack.config.js b/packages/clerk-js/rspack.config.js index 9b082397aa8..ff22955e6f7 100644 --- a/packages/clerk-js/rspack.config.js +++ b/packages/clerk-js/rspack.config.js @@ -126,17 +126,41 @@ const common = ({ mode, variant, disableRHC = false }) => { signUp: { minChunks: 1, name: 'signup', - test: module => !!(module.resource && module.resource.includes('/ui/components/SignUp')), + test: module => + !!( + module instanceof rspack.NormalModule && + module.resource && + module.resource.includes('/ui/components/SignUp') + ), }, common: { minChunks: 1, name: 'ui-common', priority: -20, - test: module => !!(module.resource && !module.resource.includes('/ui/components')), + test: module => + !!( + module instanceof rspack.NormalModule && + module.resource && + !module.resource.includes('/ui/components') && + !module.resource.includes('node_modules') + ), }, defaultVendors: { minChunks: 1, - test: /[\\/]node_modules[\\/]/, + test: module => { + if (!(module instanceof rspack.NormalModule) || !module.resource) { + return false; + } + // Exclude Solana packages and their known transitive dependencies + if ( + /[\\/]node_modules[\\/](@solana|@solana-mobile|@wallet-standard|bn\.js|borsh|buffer|superstruct|bs58|jayson|rpc-websockets|qrcode)[\\/]/.test( + module.resource, + ) + ) { + return false; + } + return /[\\/]node_modules[\\/]/.test(module.resource); + }, name: 'vendors', priority: -10, }, diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 66c90865c04..081f50af569 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -37,6 +37,7 @@ import type { AuthenticateWithGoogleOneTapParams, AuthenticateWithMetamaskParams, AuthenticateWithOKXWalletParams, + AuthenticateWithSolanaParams, BillingNamespace, Clerk as ClerkInterface, ClerkAPIError, @@ -51,7 +52,7 @@ import type { EnvironmentJSON, EnvironmentJSONSnapshot, EnvironmentResource, - GenerateSignatureParams, + GenerateSignature, GoogleOneTapProps, HandleEmailLinkVerificationParams, HandleOAuthCallbackParams, @@ -120,6 +121,7 @@ import { generateSignatureWithCoinbaseWallet, generateSignatureWithMetamask, generateSignatureWithOKXWallet, + generateSignatureWithSolana, getClerkQueryParam, getWeb3Identifier, hasExternalAccountSignUpError, @@ -2380,6 +2382,13 @@ export class Clerk implements ClerkInterface { }); }; + public authenticateWithSolana = async (props: AuthenticateWithSolanaParams): Promise => { + await this.authenticateWithWeb3({ + ...props, + strategy: 'web3_solana_signature', + }); + }; + public authenticateWithWeb3 = async ({ redirectUrl, signUpContinueUrl, @@ -2388,6 +2397,7 @@ export class Clerk implements ClerkInterface { strategy, legalAccepted, secondFactorUrl, + walletName, }: ClerkAuthenticateWithWeb3Params): Promise => { if (!this.client || !this.environment) { return; @@ -2396,8 +2406,8 @@ export class Clerk implements ClerkInterface { const { displayConfig } = this.environment; const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - const identifier = await getWeb3Identifier({ provider }); - let generateSignature: (params: GenerateSignatureParams) => Promise; + const identifier = await getWeb3Identifier({ provider, walletName }); + let generateSignature: GenerateSignature; switch (provider) { case 'metamask': generateSignature = generateSignatureWithMetamask; @@ -2408,6 +2418,15 @@ export class Clerk implements ClerkInterface { case 'coinbase_wallet': generateSignature = generateSignatureWithCoinbaseWallet; break; + case 'solana': + if (!walletName) { + throw new ClerkRuntimeError('Wallet name is required for Solana authentication.', { + code: 'web3_solana_wallet_name_required', + }); + } + // Solana requires walletName; bind it into the helper + generateSignature = params => generateSignatureWithSolana({ ...params, walletName }); + break; default: generateSignature = generateSignatureWithOKXWallet; break; @@ -2437,6 +2456,7 @@ export class Clerk implements ClerkInterface { identifier, generateSignature, strategy, + walletName, }); } catch (err) { if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { @@ -2446,6 +2466,7 @@ export class Clerk implements ClerkInterface { unsafeMetadata, strategy, legalAccepted, + walletName, }); if ( diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 73f43de78e6..9074b69ed93 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -15,6 +15,7 @@ import type { EmailLinkConfig, EmailLinkFactor, EnterpriseSSOConfig, + GenerateSignature, PassKeyConfig, PasskeyFactor, PhoneCodeConfig, @@ -25,6 +26,7 @@ import type { ResetPasswordParams, ResetPasswordPhoneCodeFactorConfig, SamlConfig, + SignInAuthenticateWithSolanaParams, SignInCreateParams, SignInFirstFactor, SignInFutureBackupCodeVerifyParams, @@ -69,12 +71,14 @@ import { generateSignatureWithCoinbaseWallet, generateSignatureWithMetamask, generateSignatureWithOKXWallet, + generateSignatureWithSolana, getBaseIdentifier, getBrowserLocale, getClerkQueryParam, getCoinbaseWalletIdentifier, getMetamaskIdentifier, getOKXWalletIdentifier, + getSolanaIdentifier, windowNavigate, } from '../../utils'; import { @@ -212,6 +216,7 @@ export class SignIn extends BaseResource implements SignInResource { case 'web3_base_signature': case 'web3_coinbase_wallet_signature': case 'web3_okx_wallet_signature': + case 'web3_solana_signature': config = { web3WalletId: params.web3WalletId } as Web3SignatureConfig; break; case 'reset_password_phone_code': @@ -379,13 +384,17 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithWeb3 = async (params: AuthenticateWithWeb3Params): Promise => { - const { identifier, generateSignature, strategy = 'web3_metamask_signature' } = params || {}; + const { identifier, generateSignature, strategy = 'web3_metamask_signature', walletName } = params || {}; const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; if (!(typeof generateSignature === 'function')) { clerkMissingOptionError('generateSignature'); } + if (provider === 'solana' && !walletName) { + clerkMissingOptionError('walletName'); + } + await this.create({ identifier }); const web3FirstFactor = this.supportedFirstFactors?.find(f => f.strategy === strategy) as Web3SignatureFactor; @@ -403,7 +412,7 @@ export class SignIn extends BaseResource implements SignInResource { let signature: string; try { - signature = await generateSignature({ identifier, nonce: message, provider }); + signature = await generateSignature({ identifier, nonce: message, walletName, provider }); } catch (err) { // There is a chance that as a user when you try to setup and use the Coinbase Wallet with an existing // Passkey in order to authenticate, the initial generate signature request to be rejected. For this @@ -412,7 +421,7 @@ export class SignIn extends BaseResource implements SignInResource { // error code 4001 means the user rejected the request // Reference: https://docs.cdp.coinbase.com/wallet-sdk/docs/errors if (provider === 'coinbase_wallet' && err.code === 4001) { - signature = await generateSignature({ identifier, nonce: message, provider }); + signature = await generateSignature({ identifier, nonce: message, provider, walletName }); } else { throw err; } @@ -460,6 +469,16 @@ export class SignIn extends BaseResource implements SignInResource { }); }; + public authenticateWithSolana = async (params: SignInAuthenticateWithSolanaParams): Promise => { + const identifier = await getSolanaIdentifier(params.walletName); + return this.authenticateWithWeb3({ + identifier, + generateSignature: p => generateSignatureWithSolana({ ...p, walletName: params.walletName }), + strategy: 'web3_solana_signature', + walletName: params.walletName, + }); + }; + public authenticateWithPasskey = async (params?: AuthenticateWithPasskeyParams): Promise => { const { flow } = params || {}; @@ -972,7 +991,7 @@ class SignInFuture implements SignInFutureResource { return runAsyncResourceTask(this.#resource, async () => { let identifier; - let generateSignature; + let generateSignature: GenerateSignature; switch (provider) { case 'metamask': identifier = await getMetamaskIdentifier(); @@ -990,6 +1009,15 @@ class SignInFuture implements SignInFutureResource { identifier = await getOKXWalletIdentifier(); generateSignature = generateSignatureWithOKXWallet; break; + case 'solana': + if (!params.walletName) { + throw new ClerkRuntimeError('Wallet name is required for Solana authentication.', { + code: 'web3_solana_wallet_name_required', + }); + } + identifier = await getSolanaIdentifier(params.walletName); + generateSignature = p => generateSignatureWithSolana({ ...p, walletName: params.walletName as string }); + break; default: throw new Error(`Unsupported Web3 provider: ${provider}`); } @@ -1015,7 +1043,12 @@ class SignInFuture implements SignInFutureResource { let signature: string; try { - signature = await generateSignature({ identifier, nonce: message }); + signature = await generateSignature({ + identifier, + nonce: message, + walletName: params?.walletName, + provider, + }); } catch (err) { // There is a chance that as a user when you try to setup and use the Coinbase Wallet with an existing // Passkey in order to authenticate, the initial generate signature request to be rejected. For this @@ -1024,7 +1057,11 @@ class SignInFuture implements SignInFutureResource { // error code 4001 means the user rejected the request // Reference: https://docs.cdp.coinbase.com/wallet-sdk/docs/errors if (provider === 'coinbase_wallet' && err.code === 4001) { - signature = await generateSignature({ identifier, nonce: message }); + signature = await generateSignature({ + identifier, + nonce: message, + provider, + }); } else { throw err; } diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index f234ded2ddd..0d9a3ba57b6 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -14,6 +14,7 @@ import type { PreparePhoneNumberVerificationParams, PrepareVerificationParams, PrepareWeb3WalletVerificationParams, + SignUpAuthenticateWithSolanaParams, SignUpAuthenticateWithWeb3Params, SignUpCreateParams, SignUpEnterpriseConnectionJSON, @@ -47,12 +48,14 @@ import { generateSignatureWithCoinbaseWallet, generateSignatureWithMetamask, generateSignatureWithOKXWallet, + generateSignatureWithSolana, getBaseIdentifier, getBrowserLocale, getClerkQueryParam, getCoinbaseWalletIdentifier, getMetamaskIdentifier, getOKXWalletIdentifier, + getSolanaIdentifier, windowNavigate, } from '../../utils'; import { @@ -278,6 +281,7 @@ export class SignUp extends BaseResource implements SignUpResource { unsafeMetadata, strategy = 'web3_metamask_signature', legalAccepted, + walletName, } = params || {}; const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; @@ -297,7 +301,7 @@ export class SignUp extends BaseResource implements SignUpResource { let signature: string; try { - signature = await generateSignature({ identifier, nonce: message, provider }); + signature = await generateSignature({ identifier, nonce: message, provider, walletName }); } catch (err) { // There is a chance that as a first time visitor when you try to setup and use the // Coinbase Wallet from scratch in order to authenticate, the initial generate @@ -316,11 +320,7 @@ export class SignUp extends BaseResource implements SignUpResource { return this.attemptWeb3WalletVerification({ signature, strategy }); }; - public authenticateWithMetamask = async ( - params?: SignUpAuthenticateWithWeb3Params & { - legalAccepted?: boolean; - }, - ): Promise => { + public authenticateWithMetamask = async (params?: SignUpAuthenticateWithWeb3Params): Promise => { const identifier = await getMetamaskIdentifier(); return this.authenticateWithWeb3({ identifier, @@ -332,9 +332,7 @@ export class SignUp extends BaseResource implements SignUpResource { }; public authenticateWithCoinbaseWallet = async ( - params?: SignUpAuthenticateWithWeb3Params & { - legalAccepted?: boolean; - }, + params?: SignUpAuthenticateWithWeb3Params, ): Promise => { const identifier = await getCoinbaseWalletIdentifier(); return this.authenticateWithWeb3({ @@ -346,11 +344,7 @@ export class SignUp extends BaseResource implements SignUpResource { }); }; - public authenticateWithBase = async ( - params?: SignUpAuthenticateWithWeb3Params & { - legalAccepted?: boolean; - }, - ): Promise => { + public authenticateWithBase = async (params?: SignUpAuthenticateWithWeb3Params): Promise => { const identifier = await getBaseIdentifier(); return this.authenticateWithWeb3({ identifier, @@ -361,11 +355,7 @@ export class SignUp extends BaseResource implements SignUpResource { }); }; - public authenticateWithOKXWallet = async ( - params?: SignUpAuthenticateWithWeb3Params & { - legalAccepted?: boolean; - }, - ): Promise => { + public authenticateWithOKXWallet = async (params?: SignUpAuthenticateWithWeb3Params): Promise => { const identifier = await getOKXWalletIdentifier(); return this.authenticateWithWeb3({ identifier, @@ -376,6 +366,18 @@ export class SignUp extends BaseResource implements SignUpResource { }); }; + public authenticateWithSolana = async (params: SignUpAuthenticateWithSolanaParams): Promise => { + const identifier = await getSolanaIdentifier(params.walletName); + return this.authenticateWithWeb3({ + identifier, + generateSignature: p => generateSignatureWithSolana({ ...p, walletName: params.walletName }), + unsafeMetadata: params?.unsafeMetadata, + strategy: 'web3_solana_signature', + legalAccepted: params?.legalAccepted, + walletName: params.walletName, + }); + }; + private authenticateWithRedirectOrPopup = async ( params: AuthenticateWithRedirectParams & { unsafeMetadata?: SignUpUnsafeMetadata; diff --git a/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx b/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx new file mode 100644 index 00000000000..362a9f64312 --- /dev/null +++ b/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx @@ -0,0 +1,43 @@ +import { Box, descriptors, Text } from '../customizables'; +import type { PropsOfComponent } from '../styledSystem'; +import { common } from '../styledSystem'; + +type WalletInitialIconProps = PropsOfComponent & { + value: string; + /** + * The wallet provider name + */ + id: string; +}; + +export const WalletInitialIcon = (props: WalletInitialIconProps) => { + const { value, id, ...rest } = props; + + return ( + ({ + ...common.centeredFlex('inline-flex'), + width: t.space.$4, + height: t.space.$4, + borderRadius: t.radii.$sm, + color: t.colors.$colorPrimaryForeground, + backgroundColor: t.colors.$primary500, + })} + {...rest} + > + + {value[0].toUpperCase()} + + + ); +}; diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx new file mode 100644 index 00000000000..321ac4ee56d --- /dev/null +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx @@ -0,0 +1,94 @@ +import { useClerk } from '@clerk/shared/react'; +import { lazy, Suspense } from 'react'; + +import { withRedirectToAfterSignIn, withRedirectToSignInTask } from '@/ui/common/withRedirect'; +import { descriptors, Flex, Flow, localizationKeys, Spinner } from '@/ui/customizables'; +import { BackLink } from '@/ui/elements/BackLink'; +import { Card } from '@/ui/elements/Card'; +import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; +import { Header } from '@/ui/elements/Header'; +import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler'; + +const Web3WalletButtons = lazy(() => + import(/* webpackChunkName: "web3-wallet-buttons" */ '@/ui/elements/Web3SolanaWalletButtons').then(m => ({ + default: m.Web3SolanaWalletButtons, + })), +); + +import { useSignInContext } from '../../contexts'; +import { useRouter } from '../../router'; + +const SignInFactorOneSolanaWalletsCardInner = () => { + const clerk = useClerk(); + const card = useCardState(); + const router = useRouter(); + const ctx = useSignInContext(); + + const onBackLinkClick = () => { + void router.navigate('../'); + }; + + return ( + + + + + + + + {card.error} + + ({ + height: '100%', + minHeight: t.sizes.$32, + })} + > + + + } + > + { + return clerk + .authenticateWithWeb3({ + customNavigate: router.navigate, + redirectUrl: ctx.afterSignInUrl || '/', + secondFactorUrl: 'factor-two', + signUpContinueUrl: ctx.isCombinedFlow ? '../create/continue' : ctx.signUpContinueUrl, + strategy: 'web3_solana_signature', + walletName, + }) + .catch(err => web3CallbackErrorHandler(err, card.setError)); + }} + /> + + + + + + + + + ); +}; + +export const SignInFactorOneSolanaWalletsCard = withRedirectToSignInTask( + withRedirectToAfterSignIn(withCardStateProvider(SignInFactorOneSolanaWalletsCardInner)), +); diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx index 5a03b610c4e..15ceae5c035 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInSocialButtons.tsx @@ -80,6 +80,10 @@ export const SignInSocialButtons = React.memo((props: SignInSocialButtonsProps) .catch(err => handleError(err)); }} web3Callback={strategy => { + if (strategy === 'web3_solana_signature') { + return navigate(`choose-wallet?strategy=${strategy}`); + } + return clerk .authenticateWithWeb3({ customNavigate: navigate, diff --git a/packages/clerk-js/src/ui/components/SignIn/index.tsx b/packages/clerk-js/src/ui/components/SignIn/index.tsx index 7cdea9e8d30..62c3abe2d13 100644 --- a/packages/clerk-js/src/ui/components/SignIn/index.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/index.tsx @@ -3,6 +3,7 @@ import type { SignInModalProps, SignInProps } from '@clerk/shared/types'; import React from 'react'; import { SignInEmailLinkFlowComplete, SignUpEmailLinkFlowComplete } from '@/ui/common/EmailLinkCompleteFlowCard'; +import { SignInFactorOneSolanaWalletsCard } from '@/ui/components/SignIn/SignInFactorOneSolanaWalletsCard'; import { SignInContext, SignUpContext, @@ -77,6 +78,9 @@ function SignInRoutes(): JSX.Element { + + + handleError(err, [], card.setError)); }} web3Callback={strategy => { + if (strategy === 'web3_solana_signature') { + return navigate(`choose-wallet?strategy=${strategy}`); + } + return clerk .authenticateWithWeb3({ customNavigate: navigate, diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx new file mode 100644 index 00000000000..6968e59052a --- /dev/null +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx @@ -0,0 +1,75 @@ +import { useClerk } from '@clerk/shared/react'; +import { lazy, Suspense } from 'react'; + +import { withRedirectToAfterSignUp, withRedirectToSignUpTask } from '@/ui/common/withRedirect'; +import { descriptors, Flex, Flow, localizationKeys } from '@/ui/customizables'; +import { BackLink } from '@/ui/elements/BackLink'; +import { Card } from '@/ui/elements/Card'; +import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; +import { Header } from '@/ui/elements/Header'; +import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler'; + +const Web3WalletButtons = lazy(() => + import(/* webpackChunkName: "web3-wallet-buttons" */ '@/ui/elements/Web3SolanaWalletButtons').then(m => ({ + default: m.Web3SolanaWalletButtons, + })), +); + +import { useSignUpContext } from '../../contexts'; +import { useRouter } from '../../router'; + +const SignUpStartSolanaWalletsCardInner = () => { + const clerk = useClerk(); + const card = useCardState(); + const router = useRouter(); + const ctx = useSignUpContext(); + + const onBackLinkClick = () => { + void router.navigate('../'); + }; + + return ( + + + + + + + + {card.error} + + + { + return clerk + .authenticateWithWeb3({ + customNavigate: router.navigate, + redirectUrl: ctx.afterSignUpUrl || '/', + signUpContinueUrl: '../continue', + strategy: 'web3_solana_signature', + unsafeMetadata: ctx.unsafeMetadata, + walletName, + }) + .catch(err => web3CallbackErrorHandler(err, card.setError)); + }} + /> + + + + + + + + ); +}; + +export const SignUpStartSolanaWalletsCard = withRedirectToSignUpTask( + withRedirectToAfterSignUp(withCardStateProvider(SignUpStartSolanaWalletsCardInner)), +); diff --git a/packages/clerk-js/src/ui/components/SignUp/index.tsx b/packages/clerk-js/src/ui/components/SignUp/index.tsx index 3ba8a39b6be..eae05b32e1c 100644 --- a/packages/clerk-js/src/ui/components/SignUp/index.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/index.tsx @@ -2,6 +2,7 @@ import { useClerk } from '@clerk/shared/react'; import type { SignUpModalProps, SignUpProps } from '@clerk/shared/types'; import React from 'react'; +import { SignUpStartSolanaWalletsCard } from '@/ui/components/SignUp/SignUpStartSolanaWalletsCard'; import { usePreloadTasks } from '@/ui/hooks/usePreloadTasks'; import { SessionTasks as LazySessionTasks } from '../../../ui/lazyModules/components'; @@ -86,6 +87,9 @@ function SignUpRoutes(): JSX.Element { + + + diff --git a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts index 9d0dfae51dc..f302c79941b 100644 --- a/packages/clerk-js/src/ui/customizables/elementDescriptors.ts +++ b/packages/clerk-js/src/ui/customizables/elementDescriptors.ts @@ -515,6 +515,17 @@ export const APPEARANCE_KEYS = containsAllElementsConfigKeys([ 'enterpriseConnectionsRoot', 'enterpriseConnectionButton', 'enterpriseConnectionButtonText', + + 'web3WalletButtonsRoot', + 'web3WalletButtons', + 'web3WalletButtonsIconButton', + 'web3WalletButtonsBlockButton', + 'web3WalletButtonsBlockButtonText', + 'web3WalletButtonsWalletIcon', + 'web3WalletButtonsWalletInitialIcon', + + 'walletIcon', + 'walletInitialIcon', ] as const).map(camelize) as (keyof ElementsConfig)[]; type TargettableClassname = `${typeof CLASS_PREFIX}${K}`; diff --git a/packages/clerk-js/src/ui/elements/Web3SolanaWalletButtons.tsx b/packages/clerk-js/src/ui/elements/Web3SolanaWalletButtons.tsx new file mode 100644 index 00000000000..4ca1f61e226 --- /dev/null +++ b/packages/clerk-js/src/ui/elements/Web3SolanaWalletButtons.tsx @@ -0,0 +1,280 @@ +import { WalletReadyState } from '@solana/wallet-adapter-base'; +import { ConnectionProvider, useWallet, WalletProvider } from '@solana/wallet-adapter-react'; +import { MAINNET_ENDPOINT } from '@solana/wallet-standard'; +import type { Ref } from 'react'; +import React, { forwardRef, isValidElement, useMemo } from 'react'; + +import { WalletInitialIcon } from '@/ui/common/WalletInitialIcon'; +import { + Button, + descriptors, + Flex, + Grid, + Icon, + Image, + localizationKeys, + SimpleButton, + Spinner, + Text, + useLocalizations, +} from '@/ui/customizables'; +import { Card } from '@/ui/elements/Card'; +import { useCardState } from '@/ui/elements/contexts'; +import { LinkRenderer } from '@/ui/elements/LinkRenderer'; +import { distributeStrategiesIntoRows } from '@/ui/elements/utils'; +import { mqu, type PropsOfComponent } from '@/ui/styledSystem'; +import { sleep } from '@/ui/utils/sleep'; + +type Web3WalletButtonsProps = { + web3AuthCallback: ({ walletName }: { walletName: string }) => Promise; +}; + +const SOCIAL_BUTTON_BLOCK_THRESHOLD = 2; +const SOCIAL_BUTTON_PRE_TEXT_THRESHOLD = 1; +const MAX_STRATEGIES_PER_ROW = 5; + +const Web3SolanaWalletButtonsInner = ({ web3AuthCallback }: Web3WalletButtonsProps) => { + const card = useCardState(); + const { wallets } = useWallet(); + const { t } = useLocalizations(); + + // Filter to only show installed wallets + const installedWallets = React.useMemo( + () => + wallets + .filter(w => { + return w.readyState === WalletReadyState.Installed; + }) + .map(wallet => { + return { + name: wallet.adapter.name, + icon: wallet.adapter.icon, + }; + }), + [wallets], + ); + + const startWeb3AuthFlow = (walletName: string) => async () => { + card.setLoading(walletName); + try { + await web3AuthCallback({ walletName }); + } catch { + await sleep(1000); + } finally { + card.setIdle(); + } + }; + + const { strategyRows } = distributeStrategiesIntoRows(installedWallets, MAX_STRATEGIES_PER_ROW, undefined); + const strategyRowOneLength = strategyRows.at(0)?.length ?? 0; + const shouldForceSingleColumnOnMobile = installedWallets.length === 2; + const ButtonElement = installedWallets.length <= SOCIAL_BUTTON_BLOCK_THRESHOLD ? WalletButtonBlock : WalletButtonIcon; + + if (installedWallets.length === 0) { + return ( + + ({ + textDecoration: 'underline', + textUnderlineOffset: t.space.$1, + color: 'inherit', + })} + /> + + ); + } + + return ( + + {strategyRows.map((row, rowIndex) => ( + { + return r.name; + }) + .join('-')} + elementDescriptor={descriptors.web3WalletButtons} + gap={2} + sx={t => ({ + justifyContent: 'center', + [mqu.sm]: { + // Force single-column on mobile when 2 strategies are present (without last auth) to prevent + // label overflow. When last auth is present, only 1 strategy remains here, so overflow isn't a concern. + gridTemplateColumns: shouldForceSingleColumnOnMobile ? 'repeat(1, minmax(0, 1fr))' : undefined, + }, + gridTemplateColumns: + wallets.length < 1 + ? `repeat(1, minmax(0, 1fr))` + : `repeat(${row.length}, ${ + rowIndex === 0 + ? `minmax(0, 1fr)` + : // Calculate the width of each button based on the width of the buttons within the first row. + // t.sizes.$2 is used here to represent the gap defined on the Grid component. + `minmax(0, calc((100% - (${strategyRowOneLength} - 1) * ${t.sizes.$2}) / ${strategyRowOneLength}))` + })`, + })} + > + {row.map(w => { + const shouldShowPreText = installedWallets.length === SOCIAL_BUTTON_PRE_TEXT_THRESHOLD; + const label = shouldShowPreText + ? localizationKeys('web3WalletButtons.continue', { walletName: w.name }) + : w.name; + + const imageOrInitial = w.icon ? ( + {t(localizationKeys('web3WalletButtons.connect', ({ width: theme.sizes.$4, height: 'auto', maxWidth: '100%' })} + /> + ) : ( + + ); + + return ( + + ); + })} + + ))} + + ); +}; + +type WalletButtonProps = PropsOfComponent & { + icon: React.ReactElement; + id: string; + label: string; +}; + +const WalletButtonIcon = forwardRef((props: WalletButtonProps, ref: Ref | null): JSX.Element => { + const { icon, label, id, ...rest } = props; + + return ( + + ); +}); + +const WalletButtonBlock = forwardRef((props: WalletButtonProps, ref: Ref | null): JSX.Element => { + const { id, icon, isLoading, label, ...rest } = props; + const isIconElement = isValidElement(icon); + + return ( + [ + { + gap: theme.space.$4, + position: 'relative', + justifyContent: 'flex-start', + }, + props.sx, + ]} + > + + {(isLoading || icon) && ( + ({ flex: `0 0 ${theme.space.$4}` })} + > + {isLoading ? ( + + ) : !isIconElement && icon ? ( + ({ + color: theme.colors.$neutralAlpha600, + width: theme.sizes.$4, + position: 'absolute', + }), + ]} + /> + ) : ( + icon + )} + + )} + + {label} + + + + ); +}); + +export const Web3SolanaWalletButtons = (props: Web3WalletButtonsProps) => { + const network = MAINNET_ENDPOINT; + const wallets = useMemo(() => [], [network]); + return ( + + { + console.error(err); + }} + > + + + + ); +}; diff --git a/packages/clerk-js/src/ui/elements/contexts/index.tsx b/packages/clerk-js/src/ui/elements/contexts/index.tsx index 6f660525375..1a719083777 100644 --- a/packages/clerk-js/src/ui/elements/contexts/index.tsx +++ b/packages/clerk-js/src/ui/elements/contexts/index.tsx @@ -128,7 +128,8 @@ export type FlowMetadata = { | 'complete' | 'accountSwitcher' | 'chooseOrganization' - | 'enterpriseConnections'; + | 'enterpriseConnections' + | 'chooseWallet'; }; const [FlowMetadataCtx, useFlowMetadata] = createContextAndHook('FlowMetadata'); diff --git a/packages/clerk-js/src/ui/utils/web3CallbackErrorHandler.ts b/packages/clerk-js/src/ui/utils/web3CallbackErrorHandler.ts index 62fd98dcfe8..985b73f2861 100644 --- a/packages/clerk-js/src/ui/utils/web3CallbackErrorHandler.ts +++ b/packages/clerk-js/src/ui/utils/web3CallbackErrorHandler.ts @@ -10,8 +10,8 @@ type Web3CallbackErrorHandler = { export const web3CallbackErrorHandler: Web3CallbackErrorHandler = (err, setError) => { if ( isClerkAPIResponseError(err) && - err.errors[0].meta?.paramName === 'identifier' && - err.errors[0].code === 'form_param_nil' + err.errors?.[0]?.meta?.paramName === 'identifier' && + err.errors?.[0]?.code === 'form_param_nil' ) { const error = new ClerkRuntimeError('A Web3 Wallet extension cannot be found. Please install one to continue.', { code: 'web3_missing_identifier', diff --git a/packages/clerk-js/src/utils/injectedWeb3Providers.ts b/packages/clerk-js/src/utils/injectedWeb3EthProviders.ts similarity index 76% rename from packages/clerk-js/src/utils/injectedWeb3Providers.ts rename to packages/clerk-js/src/utils/injectedWeb3EthProviders.ts index 7b6c6557e8e..bd8ad799874 100644 --- a/packages/clerk-js/src/utils/injectedWeb3Providers.ts +++ b/packages/clerk-js/src/utils/injectedWeb3EthProviders.ts @@ -27,15 +27,15 @@ interface EIP6963ProviderDetail { } type EIP6963AnnounceProviderEvent = CustomEvent; -type InjectedWeb3Provider = MetamaskWeb3Provider | OKXWalletWeb3Provider; +type InjectedWeb3EthProvider = MetamaskWeb3Provider | OKXWalletWeb3Provider; -class InjectedWeb3Providers { +class InjectedWeb3EthProviders { #providers: EIP6963ProviderDetail[] = []; - #providerIdMap: Record = { + #providerIdMap: Record = { metamask: 'MetaMask', okx_wallet: 'OKX Wallet', } as const; - static #instance: InjectedWeb3Providers | null = null; + static #instance: InjectedWeb3EthProviders | null = null; private constructor() { if (typeof window === 'undefined') { @@ -45,14 +45,14 @@ class InjectedWeb3Providers { window.dispatchEvent(new Event('eip6963:requestProvider')); } - public static getInstance(): InjectedWeb3Providers { - if (!InjectedWeb3Providers.#instance) { - InjectedWeb3Providers.#instance = new InjectedWeb3Providers(); + public static getInstance(): InjectedWeb3EthProviders { + if (!InjectedWeb3EthProviders.#instance) { + InjectedWeb3EthProviders.#instance = new InjectedWeb3EthProviders(); } - return InjectedWeb3Providers.#instance; + return InjectedWeb3EthProviders.#instance; } - get = (provider: InjectedWeb3Provider) => { + get = (provider: InjectedWeb3EthProvider) => { const ethProvider = this.#providers.find(p => p.info.name === this.#providerIdMap[provider])?.provider; if (ethProvider !== undefined) { return ethProvider; @@ -72,4 +72,4 @@ class InjectedWeb3Providers { }; } -export const getInjectedWeb3Providers = () => InjectedWeb3Providers.getInstance(); +export const getInjectedWeb3EthProviders = () => InjectedWeb3EthProviders.getInstance(); diff --git a/packages/clerk-js/src/utils/injectedWeb3SolanaProviders.ts b/packages/clerk-js/src/utils/injectedWeb3SolanaProviders.ts new file mode 100644 index 00000000000..c2514cd78ac --- /dev/null +++ b/packages/clerk-js/src/utils/injectedWeb3SolanaProviders.ts @@ -0,0 +1,66 @@ +import type { SolanaWalletAdapterWallet } from '@solana/wallet-standard'; +import type { Wallet } from '@wallet-standard/core'; + +//https://eips.ethereum.org/EIPS/eip-4361 + +class InjectedWeb3SolanaProviders { + #wallets: readonly Wallet[] | undefined = undefined; + static #instance: InjectedWeb3SolanaProviders | null = null; + + private constructor() {} + + async #initialize() { + const wallets = await import('@wallet-standard/core').then(mod => mod.getWallets()); + this.#wallets = wallets.get(); + + wallets.on('register', () => { + this.#wallets = wallets.get(); + }); + wallets.on('unregister', () => { + this.#wallets = wallets.get(); + }); + } + + #isSolanaWallet(wallet: Wallet): wallet is SolanaWalletAdapterWallet { + return wallet.chains?.some(chain => chain.startsWith('solana:')) ?? false; + } + + #hasSignMessage(wallet: Wallet): boolean { + return 'solana:signMessage' in wallet.features; + } + + public static getInstance(): InjectedWeb3SolanaProviders { + if (!InjectedWeb3SolanaProviders.#instance) { + InjectedWeb3SolanaProviders.#instance = new InjectedWeb3SolanaProviders(); + } + return InjectedWeb3SolanaProviders.#instance; + } + + get = async (walletName: string): Promise => { + await this.#initialize(); + const wallet = (this.#wallets || []).find( + w => w.name === walletName && this.#isSolanaWallet(w) && this.#hasSignMessage(w), + ); + if (wallet && this.#isSolanaWallet(wallet)) { + return wallet; + } + + if (typeof window === 'undefined') { + return undefined; + } + // In case we weren't able to find the requested provider, fallback to the + // global injected provider instead, if any, to allow the user to continue + // the flow rather than blocking it + const fallbackProvider = (window as any).solana; + if ( + fallbackProvider && + typeof fallbackProvider.connect === 'function' && + typeof fallbackProvider.signMessage === 'function' + ) { + return fallbackProvider as SolanaWalletAdapterWallet; + } + return undefined; + }; +} + +export const getInjectedWeb3SolanaProviders = () => InjectedWeb3SolanaProviders.getInstance(); diff --git a/packages/clerk-js/src/utils/web3.ts b/packages/clerk-js/src/utils/web3.ts index fc494876f78..9e2664cdc6f 100644 --- a/packages/clerk-js/src/utils/web3.ts +++ b/packages/clerk-js/src/utils/web3.ts @@ -1,50 +1,88 @@ -import type { Web3Provider } from '@clerk/shared/types'; +import { ClerkRuntimeError } from '@clerk/shared/error'; +import type { GenerateSignature, Web3Provider } from '@clerk/shared/types'; +import type { SolanaWalletAdapterWallet } from '@solana/wallet-standard'; import { clerkUnsupportedEnvironmentWarning } from '@/core/errors'; +import { errorThrower } from '@/utils/errorThrower'; +import { getInjectedWeb3SolanaProviders } from '@/utils/injectedWeb3SolanaProviders'; import { toHex } from './hex'; -import { getInjectedWeb3Providers } from './injectedWeb3Providers'; +import { getInjectedWeb3EthProviders } from './injectedWeb3EthProviders'; type GetWeb3IdentifierParams = { provider: Web3Provider; + walletName?: string; }; +// '@solana/wallet-standard' +const StandardConnect = `standard:connect`; +const SolanaSignMessage = `solana:signMessage`; + export async function getWeb3Identifier(params: GetWeb3IdentifierParams): Promise { - const { provider } = params; - const ethereum = await getEthereumProvider(provider); + const { provider, walletName } = params; + const walletProvider = await getWeb3Wallet(provider, walletName); // TODO - core-3: Improve error handling for the case when the provider is not found - if (!ethereum) { + if (!walletProvider) { // If a plugin for the requested provider is not found, // the flow will fail as it has been the expected behavior so far. return ''; } - const identifiers = await ethereum.request({ method: 'eth_requestAccounts' }); + if (provider === 'solana') { + const identifiers = await walletProvider.features[StandardConnect].connect(); + return (identifiers && identifiers.accounts[0].address) || ''; + } + + // Ethereum providers + const identifiers = await walletProvider.request({ method: 'eth_requestAccounts' }); // @ts-ignore -- Provider SDKs may return unknown shape; use first address if present return (identifiers && identifiers[0]) || ''; } -type GenerateWeb3SignatureParams = GenerateSignatureParams & { - provider: Web3Provider; -}; - -export async function generateWeb3Signature(params: GenerateWeb3SignatureParams): Promise { - const { identifier, nonce, provider } = params; - const ethereum = await getEthereumProvider(provider); +export const generateWeb3Signature: GenerateSignature = async (params): Promise => { + const { identifier, nonce, provider, walletName = '' } = params; + const wallet = await getWeb3Wallet(provider, walletName); // TODO - core-3: Improve error handling for the case when the provider is not found - if (!ethereum) { + if (!wallet) { // If a plugin for the requested provider is not found, // the flow will fail as it has been the expected behavior so far. return ''; } - return await ethereum.request({ + if (provider === 'solana') { + try { + const solanaWallet = wallet as SolanaWalletAdapterWallet; + const walletAccount = solanaWallet.accounts.find(a => a.address === identifier); + if (!walletAccount) { + console.warn(`Wallet account with address ${identifier} not found`); + return ''; + } + const signedMessages = await solanaWallet.features[SolanaSignMessage]?.signMessage({ + account: walletAccount, + message: new TextEncoder().encode(nonce), + }); + // Convert signature Uint8Array to base64 string + return signedMessages?.[0]?.signature ? btoa(String.fromCharCode(...signedMessages[0].signature)) : ''; + } catch (err) { + if (err instanceof Error && err.message.includes('User rejected the request.')) { + throw new ClerkRuntimeError('Web3 signature request was rejected by the user.', { + code: 'web3_signature_request_rejected', + }); + } + throw new ClerkRuntimeError('An error occurred while generating the Solana signature.', { + code: 'web3_solana_signature_generation_failed', + cause: err, + }); + } + } + + return await wallet.request({ method: 'personal_sign', params: [`0x${toHex(nonce)}`, identifier], }); -} +}; export async function getMetamaskIdentifier(): Promise { return await getWeb3Identifier({ provider: 'metamask' }); @@ -62,11 +100,19 @@ export async function getBaseIdentifier(): Promise { return await getWeb3Identifier({ provider: 'base' }); } +export async function getSolanaIdentifier(walletName: string): Promise { + return await getWeb3Identifier({ provider: 'solana', walletName }); +} + type GenerateSignatureParams = { identifier: string; nonce: string; }; +type GenerateSolanaSignatureParams = GenerateSignatureParams & { + walletName: string; +}; + export async function generateSignatureWithMetamask(params: GenerateSignatureParams): Promise { return await generateWeb3Signature({ ...params, provider: 'metamask' }); } @@ -83,7 +129,11 @@ export async function generateSignatureWithBase(params: GenerateSignatureParams) return await generateWeb3Signature({ ...params, provider: 'base' }); } -async function getEthereumProvider(provider: Web3Provider) { +export async function generateSignatureWithSolana(params: GenerateSolanaSignatureParams): Promise { + return await generateWeb3Signature({ ...params, provider: 'solana' }); +} + +async function getWeb3Wallet(provider: Web3Provider, walletName?: string) { if (provider === 'coinbase_wallet') { if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); @@ -120,5 +170,13 @@ async function getEthereumProvider(provider: Web3Provider) { } } - return getInjectedWeb3Providers().get(provider); + if (provider === 'solana') { + if (!walletName || walletName.length === 0) { + errorThrower.throw('Wallet name must be provided to get Solana wallet provider'); + return; + } + return await getInjectedWeb3SolanaProviders().get(walletName); + } + + return getInjectedWeb3EthProviders().get(provider); } diff --git a/packages/elements/src/react/hooks/use-third-party-provider.hook.ts b/packages/elements/src/react/hooks/use-third-party-provider.hook.ts index 226243625a6..ed144305b93 100644 --- a/packages/elements/src/react/hooks/use-third-party-provider.hook.ts +++ b/packages/elements/src/react/hooks/use-third-party-provider.hook.ts @@ -97,6 +97,10 @@ export const useThirdPartyProvider = < return ref.send({ type: 'AUTHENTICATE.WEB3', strategy: 'web3_okx_wallet_signature' }); } + if (provider === 'solana') { + return ref.send({ type: 'AUTHENTICATE.WEB3', strategy: 'web3_solana_signature' }); + } + return ref.send({ type: 'AUTHENTICATE.OAUTH', strategy: `oauth_${provider}` }); }, [provider, isProviderEnabled, isSaml, isEnterpriseSSO, ref], diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index b53225be7bc..716eb160e89 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -747,6 +747,10 @@ export const arSA: LocalizationResource = { subtitle: 'للمتابعة، يرجى إدخال رمز التحقق الذي تم إنشاؤه بواسطة تطبيق المصادقة الخاص بك', title: 'نظام التحقق بخطوتين', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'إدخل كلمة المرور', signUp: { @@ -837,6 +841,10 @@ export const arSA: LocalizationResource = { title: 'أنشاء حساب جديد', titleCombined: 'أنشاء حساب جديد', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'للمتابعة مع {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -937,6 +945,8 @@ export const arSA: LocalizationResource = { phone_number_exists: 'هذا الرقم مأخوذ الرجاء أختيار رقم آخر', session_exists: 'لقد قمت بتسجيل الدخول بالفعل', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'كلمة مرورك سليمة من الأفضل ان تكون اقوى. الرجاء أضافة حروف أكثر', goodPassword: 'كلمة مرورك طابقت جميع المتطلبات الازمة', @@ -1336,4 +1346,9 @@ export const arSA: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 46615db43f9..f90b0172dc2 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -753,6 +753,10 @@ export const beBY: LocalizationResource = { subtitle: 'Увядзіце код, атрыманы з вашага TOTP-генератара.', title: 'Двухфактарная верыфікацыя', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: undefined, signUp: { @@ -845,6 +849,10 @@ export const beBY: LocalizationResource = { title: 'Стварыце Ваш акаўнт', titleCombined: 'Стварыце Ваш акаўнт', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Працягнуць з дапамогай {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -947,6 +955,8 @@ export const beBY: LocalizationResource = { phone_number_exists: 'Гэты нумар тэлефона ўжо заняты. Калі ласка, паспрабуйце іншы.', session_exists: 'Вы ўжо ўвайшлі.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Ваш пароль падыходзіць, але мог бы быць надзейнейшым. Паспрабуйце дадаць больш сімвалаў.', goodPassword: 'Добрая праца. Гэта выдатны пароль.', @@ -1354,4 +1364,9 @@ export const beBY: LocalizationResource = { title: 'Вы ў чакальным спісе', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 45fdeecc376..b666678c4fa 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -750,6 +750,10 @@ export const bgBG: LocalizationResource = { 'За да продължите, моля въведете кода за потвърждение, генериран от вашето приложение за удостоверяване', title: 'Двустепенна верификация', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Въведете вашата парола', signUp: { @@ -841,6 +845,10 @@ export const bgBG: LocalizationResource = { title: 'Създайте своя акаунт', titleCombined: 'Създайте своя акаунт', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Продължи с {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -940,6 +948,8 @@ export const bgBG: LocalizationResource = { phone_number_exists: 'Този телефонен номер е зает. Моля, опитайте с друг.', session_exists: 'Вече сте влезнали.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Вашата парола работи, но може да бъде по-сигурна. Опитайте да добавите повече символи.', goodPassword: 'Вашата парола отговаря на всички необходими изисквания.', @@ -1345,4 +1355,9 @@ export const bgBG: LocalizationResource = { title: 'Waitlist successful', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 6f081b51975..c67cdb07c5f 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -753,6 +753,10 @@ export const bnIN: LocalizationResource = { subtitle: 'চালিয়ে যেতে, আপনার অথেনটিকেটর অ্যাপ দ্বারা উৎপন্ন যাচাইকরণ কোড লিখুন', title: 'দুই-ধাপ যাচাইকরণ', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'আপনার পাসওয়ার্ড লিখুন', signUp: { @@ -845,6 +849,10 @@ export const bnIN: LocalizationResource = { title: 'আপনার অ্যাকাউন্ট তৈরি করুন', titleCombined: 'আপনার অ্যাকাউন্ট তৈরি করুন', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}} দিয়ে চালিয়ে যান', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -950,6 +958,8 @@ export const bnIN: LocalizationResource = { phone_number_exists: 'এই ফোন নম্বর ব্যবহৃত হয়েছে। দয়া করে অন্য একটি ব্যবহার করুন।', session_exists: undefined, web3_missing_identifier: 'একটি Web3 ওয়ালেট এক্সটেনশন পাওয়া যায়নি। চালিয়ে যেতে দয়া করে একটি ইনস্টল করুন।', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'আপনার পাসওয়ার্ড কাজ করে, কিন্তু আরও শক্তিশালী হতে পারে। আরও অক্ষর যোগ করার চেষ্টা করুন।', goodPassword: 'আপনার পাসওয়ার্ড সমস্ত প্রয়োজনীয় শর্ত পূরণ করে।', @@ -1355,4 +1365,9 @@ export const bnIN: LocalizationResource = { title: 'ওয়েটলিস্টে যোগ দেওয়ার জন্য ধন্যবাদ!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 6795c763418..7a35168bfa9 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -750,6 +750,10 @@ export const caES: LocalizationResource = { subtitle: "Per continuar, introdueix el codi de verificació generat per la teva aplicació d'autenticació", title: 'Verificació de dos passos', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Introdueix la teva contrasenya', signUp: { @@ -840,6 +844,10 @@ export const caES: LocalizationResource = { title: 'Crea el teu compte', titleCombined: 'Crea el teu compte', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continua amb {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -942,6 +950,8 @@ export const caES: LocalizationResource = { phone_number_exists: "Aquest número de telèfon ja està en ús. Si us plau, prova'n un altre.", session_exists: 'Ja estàs connectat.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'La teva contrasenya funciona, però podria ser més forta. Prova afegint més caràcters.', goodPassword: 'La teva contrasenya compleix tots els requisits necessaris.', @@ -1351,4 +1361,9 @@ export const caES: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 347288d015a..b8b569c95ca 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -757,6 +757,10 @@ export const csCZ: LocalizationResource = { subtitle: 'Pro pokračování zadejte ověřovací kód vygenerovaný vaší aplikací pro ověřování', title: 'Dvoufázové ověření', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Zadejte své heslo', signUp: { @@ -851,6 +855,10 @@ export const csCZ: LocalizationResource = { title: 'Vytvořte si účet', titleCombined: 'Vytvořte si účet', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Pokračovat s {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -952,6 +960,8 @@ export const csCZ: LocalizationResource = { phone_number_exists: 'Toto telefonní číslo se používá. Zkuste prosím jiný.', session_exists: 'Jste již přihlášen.', web3_missing_identifier: 'Rozšíření peněženky Web3 nebylo nalezeno. Pro pokračování prosím nainstalujte jednu.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Vaše heslo funguje, ale mohlo by být silnější. Zkuste přidat více znaků.', goodPassword: 'Vaše heslo splňuje všechny potřebné požadavky.', @@ -1358,4 +1368,9 @@ export const csCZ: LocalizationResource = { title: 'Děkujeme za připojení k čekací listině!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 39e7d41de54..8a60c8f062c 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -748,6 +748,10 @@ export const daDK: LocalizationResource = { subtitle: undefined, title: 'Totrinsbekræftelse', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Indtast din adgangskode', signUp: { @@ -838,6 +842,10 @@ export const daDK: LocalizationResource = { title: 'Opret din konto', titleCombined: 'Opret din konto', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Forsæt med {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -938,6 +946,8 @@ export const daDK: LocalizationResource = { phone_number_exists: 'Dette telefonnummer er allerede taget. Prøv et andet.', session_exists: 'Du er allerede logget ind.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Din adgangskode virker, men kunne være stærkere. Prøv at tilføje flere tegn.', goodPassword: 'Din adgangskode opfylder alle nødvendige krav.', @@ -1342,4 +1352,9 @@ export const daDK: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 1bbdec3e5e2..17679603d2e 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -764,6 +764,10 @@ export const deDE: LocalizationResource = { 'Um fortzufahren, geben Sie bitte den Verifizierungscode ein, der von Ihrer Authenticator-App generiert wurde.', title: 'Bestätigung in zwei Schritten', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Geben Sie Ihr Passwort ein', signUp: { @@ -855,6 +859,10 @@ export const deDE: LocalizationResource = { title: 'Erstellen Sie Ihr Konto', titleCombined: 'Erstellen Sie Ihr Konto', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Weiter mit {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -968,6 +976,8 @@ export const deDE: LocalizationResource = { session_exists: 'Sie sind bereits angemeldet.', web3_missing_identifier: 'Eine Web3 Wallet-Erweiterung wurde nicht gefunden. Bitte installieren Sie eine, um fortzufahren.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Ihr Passwort funktioniert, könnte aber besser sein. Versuchen Sie, mehr Zeichen hinzuzufügen.', goodPassword: 'Ihr Passwort erfüllt alle notwendigen Anforderungen.', @@ -1379,4 +1389,9 @@ export const deDE: LocalizationResource = { title: 'Erfolgreich auf die Warteliste gesetzt', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 7cf247ee85e..ddb4276807e 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -751,6 +751,10 @@ export const elGR: LocalizationResource = { subtitle: undefined, title: 'Aυθεντικοποίηση δύο βημάτων', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Εισαγωγή κωδικού πρόσβασης', signUp: { @@ -842,6 +846,10 @@ export const elGR: LocalizationResource = { title: 'Δημιουργήστε τον λογαριασμό σας', titleCombined: 'Δημιουργήστε τον λογαριασμό σας', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Συνέχεια με {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -944,6 +952,8 @@ export const elGR: LocalizationResource = { phone_number_exists: 'Αυτός ο αριθμός τηλεφώνου χρησιμοποιείται ήδη. Δοκιμάστε έναν άλλο.', session_exists: 'Έχετε ήδη συνδεθεί.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Ο κωδικός πρόσβασής σας είναι αρκετός, αλλά θα μπορούσε να είναι πιο ισχυρός. Δοκιμάστε να προσθέσετε περισσότερους χαρακτήρες.', @@ -1354,4 +1364,9 @@ export const elGR: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index b3dd9f7131e..166c4df9ff7 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -750,6 +750,10 @@ export const enGB: LocalizationResource = { subtitle: 'To continue, please enter the verification code generated by your authenticator app', title: 'Two-step verification', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Enter your password', signUp: { @@ -842,6 +846,10 @@ export const enGB: LocalizationResource = { title: 'Create your account', titleCombined: 'Create your account', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continue with {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -946,6 +954,8 @@ export const enGB: LocalizationResource = { phone_number_exists: 'This phone number is taken. Please try another.', session_exists: "You're already signed in.", web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Your password works, but could be stronger. Try adding more characters.', goodPassword: 'Your password meets all the necessary requirements.', @@ -1350,4 +1360,9 @@ export const enGB: LocalizationResource = { title: 'Thanks for joining the waitlist!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 4473eaf6733..f1107e8617d 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -747,6 +747,10 @@ export const enUS: LocalizationResource = { subtitle: 'To continue, please enter the verification code generated by your authenticator app', title: 'Two-step verification', }, + web3Solana: { + subtitle: 'Select a wallet below to sign in', + title: 'Sign in with Solana', + }, }, signInEnterPasswordTitle: 'Enter your password', signUp: { @@ -839,6 +843,10 @@ export const enUS: LocalizationResource = { title: 'Create your account', titleCombined: 'Create your account', }, + web3Solana: { + subtitle: 'Select a wallet below to sign up', + title: 'Sign up with Solana', + }, }, socialButtonsBlockButton: 'Continue with {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -941,6 +949,9 @@ export const enUS: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'A Web3 Wallet extension cannot be found. Please install one to continue.', + web3_signature_request_rejected: 'You have rejected the signature request. Please try again to continue.', + web3_solana_signature_generation_failed: + 'An error occurred while generating the signature. Please try again to continue.', zxcvbn: { couldBeStronger: 'Your password works, but could be stronger. Try adding more characters.', goodPassword: 'Your password meets all the necessary requirements.', @@ -1346,4 +1357,10 @@ export const enUS: LocalizationResource = { title: 'Thanks for joining the waitlist!', }, }, + web3WalletButtons: { + connect: 'Connect with {{walletName}}', + continue: 'Continue with {{walletName}}', + noneAvailable: + 'No Solana Web3 wallets detected. Please install a Web3 supported {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 5b8e09767da..2a70709d379 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -755,6 +755,10 @@ export const esCR: LocalizationResource = { subtitle: 'Para continuar, por favor introduce el código generado por tu aplicación de autenticación', title: 'Verificación de dos pasos', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Ingresa tu contraseña', signUp: { @@ -847,6 +851,10 @@ export const esCR: LocalizationResource = { title: 'Crea tu cuenta', titleCombined: 'Crea tu cuenta', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -951,6 +959,8 @@ export const esCR: LocalizationResource = { phone_number_exists: 'Este número de telefónico ya está en uso.', session_exists: undefined, web3_missing_identifier: 'No se puede encontrar la extension de la billetera Web3. Instala una para continuar', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Tu contraseña funciona, pero puede ser más segura. Prueba añadiendo más caracteres.', goodPassword: 'Tu contraseña cumple con todos los requisitos necesarios.', @@ -1358,4 +1368,9 @@ export const esCR: LocalizationResource = { title: '¡Gracias por unirte a la lista de espera!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index c03a7b3702f..a5101b19e86 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -750,6 +750,10 @@ export const esES: LocalizationResource = { subtitle: 'Introduce el código que te enviamos a tu dispositivo', title: 'Verificación de dos pasos', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Ingresa tu contraseña', signUp: { @@ -841,6 +845,10 @@ export const esES: LocalizationResource = { title: 'Crea tu cuenta', titleCombined: 'Crea tu cuenta', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -945,6 +953,8 @@ export const esES: LocalizationResource = { phone_number_exists: 'Este número de teléfono ya está en uso. Por favor, inténtelo con otro.', session_exists: 'Ya has iniciado sesión', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: undefined, goodPassword: undefined, @@ -1352,4 +1362,9 @@ export const esES: LocalizationResource = { title: '¡Te has unido a la lista de espera!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 2d675787ae1..74368afe63b 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -756,6 +756,10 @@ export const esMX: LocalizationResource = { subtitle: 'Para continuar, por favor introduce el código generado por tu aplicación de autenticación', title: 'Verificación de dos pasos', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Ingresa tu contraseña', signUp: { @@ -848,6 +852,10 @@ export const esMX: LocalizationResource = { title: 'Crea tu cuenta', titleCombined: 'Crea tu cuenta', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -952,6 +960,8 @@ export const esMX: LocalizationResource = { phone_number_exists: 'Este número de telefónico ya está en uso.', session_exists: 'Ya has iniciado sesión', web3_missing_identifier: 'No se puede encontrar la extension de la billetera Web3. Instala una para continuar', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Tu contraseña funciona, pero puede ser más segura. Prueba añadiendo más caracteres.', goodPassword: 'Tu contraseña cumple con todos los requisitos necesarios.', @@ -1359,4 +1369,9 @@ export const esMX: LocalizationResource = { title: '¡Gracias por unirte a la lista de espera!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 4608a3b4838..a800464fb03 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -753,6 +753,10 @@ export const esUY: LocalizationResource = { subtitle: 'Para continuar, ingresá el código generado por tu aplicación autenticadora', title: 'Verificación en dos pasos', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Ingresá tu contraseña', signUp: { @@ -847,6 +851,10 @@ export const esUY: LocalizationResource = { title: 'Creá tu cuenta', titleCombined: 'Creá tu cuenta', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -953,6 +961,8 @@ export const esUY: LocalizationResource = { phone_number_exists: 'Este número de teléfono ya está en uso. Por favor, probá con otro.', session_exists: 'Ya has iniciado sesión', web3_missing_identifier: 'No se encontró una extensión de cartera Web3. Por favor, instalá una para continuar.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Tu contraseña funciona, pero podría ser más fuerte. Intentá agregar más caracteres.', goodPassword: 'Tu contraseña cumple con todos los requisitos necesarios.', @@ -1358,4 +1368,9 @@ export const esUY: LocalizationResource = { title: '¡Gracias por unirte a la lista de espera!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 5bc5a22764a..d02d5a149dc 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -758,6 +758,10 @@ export const faIR: LocalizationResource = { subtitle: 'برای ادامه، لطفاً کد تأیید تولید شده توسط برنامه تأیید هویت خود را وارد کنید', title: 'تأیید دو مرحله‌ای', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'رمز عبور خود را وارد کنید', signUp: { @@ -851,6 +855,10 @@ export const faIR: LocalizationResource = { title: 'حساب کاربری خود را ایجاد کنید', titleCombined: 'حساب کاربری خود را ایجاد کنید', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'ادامه با {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -950,6 +958,8 @@ export const faIR: LocalizationResource = { phone_number_exists: 'این شماره تلفن قبلاً استفاده شده است.', session_exists: 'جلسه از قبل وجود دارد.', web3_missing_identifier: 'افزونه‌ی کیف پول وب۳ پیدا نشد. برای ادامه، لطفاً یکی نصب کنید.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'رمز عبور شما کار می‌کند، اما می‌توانست قوی‌تر باشد. سعی کنید کاراکترهای بیشتری اضافه کنید.', goodPassword: 'رمز عبور شما تمام شرایط لازم را برآورده می‌کند.', @@ -1354,4 +1364,9 @@ export const faIR: LocalizationResource = { title: 'ممنون که به لیست انتظار پیوستید!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index b79f1a1af10..02123dab25e 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -750,6 +750,10 @@ export const fiFI: LocalizationResource = { subtitle: 'Syötä todennuskoodi autentikointisovelluksestasi', title: 'Kaksivaiheinen todennus', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Syötä salasanasi', signUp: { @@ -841,6 +845,10 @@ export const fiFI: LocalizationResource = { title: 'Luo tili', titleCombined: 'Luo tili', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Jatka palvelun {{provider|titleize}} avulla', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -941,6 +949,8 @@ export const fiFI: LocalizationResource = { phone_number_exists: 'Tämä puhelinnumero on jo käytössä. Kokeile toista.', session_exists: 'Olet jo kirjautunut sisään.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Salasanasi toimii, mutta se voisi olla vahvempi. Kokeile lisätä erikoismerkkejä tai numeroita.', goodPassword: 'Salasanasi täyttää kaikki tarvittavat vaatimukset.', @@ -1347,4 +1357,9 @@ export const fiFI: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index cb9f6fa9afc..a19d796c46b 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -764,6 +764,10 @@ export const frFR: LocalizationResource = { subtitle: "Entrez le code de l'application d'authentification.", title: 'Vérification en deux étapes', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Tapez votre mot de passe', signUp: { @@ -856,6 +860,10 @@ export const frFR: LocalizationResource = { title: 'Créez votre compte', titleCombined: 'Créez votre compte', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuer avec {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -961,6 +969,8 @@ export const frFR: LocalizationResource = { phone_number_exists: 'Ce numéro de téléphone est déjà utilisé. Veuillez essayer un autre.', session_exists: 'Vous êtes déjà connecté.', web3_missing_identifier: 'Aucune extension de portefeuille Web3 trouvée. Veuillez en installer une pour continuer.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: "Votre mot de passe fonctionne mais pourrait être plus sûr. Essayez d'ajouter des caractères.", goodPassword: "Bien joué. C'est un excellent mot de passe.", @@ -1369,4 +1379,9 @@ export const frFR: LocalizationResource = { title: 'Inscription réussie', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 8f4417e263a..fd5cc00e23d 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -741,6 +741,10 @@ export const heIL: LocalizationResource = { subtitle: 'להמשך, אנא הכנס את קוד האימות שנוצר על ידי אפליקציית האימות שלך', title: 'אימות שני שלבים', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'הזן את הסיסמה שלך', signUp: { @@ -831,6 +835,10 @@ export const heIL: LocalizationResource = { title: 'צור את החשבון שלך', titleCombined: 'צור את החשבון שלך', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'המשך עם {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -930,6 +938,8 @@ export const heIL: LocalizationResource = { phone_number_exists: 'מספר הטלפון הזה כבר בשימוש. אנא נסה מספר אחר.', session_exists: 'אתה כבר מחובר לחשבון.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'הסיסמה שלך תקפה, אך יכולה להיות חזקה יותר. נסה להוסיף יותר תווים.', goodPassword: 'עבודה טובה. זו סיסמה מצוינת.', @@ -1323,4 +1333,9 @@ export const heIL: LocalizationResource = { title: 'תודה שהצטרפת לרשימת ההמתנה!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 20c676fd0f1..6d9fa386d9e 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -752,6 +752,10 @@ export const hiIN: LocalizationResource = { subtitle: 'जारी रखने के लिए, कृपया अपने प्रमाणकर्ता ऐप द्वारा जनरेट किए गए कोड को दर्ज करें', title: 'दो-चरण सत्यापन', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'अपना पासवर्ड दर्ज करें', signUp: { @@ -845,6 +849,10 @@ export const hiIN: LocalizationResource = { title: 'अपना खाता बनाएं', titleCombined: 'अपना खाता बनाएं', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}} के साथ जारी रखें', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -951,6 +959,8 @@ export const hiIN: LocalizationResource = { phone_number_exists: 'यह फोन नंबर पहले से लिया गया है। कृपया दूसरा प्रयास करें।', session_exists: undefined, web3_missing_identifier: 'Web3 वॉलेट एक्सटेंशन नहीं मिल सका। जारी रखने के लिए कृपया एक इंस्टॉल करें।', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'आपका पासवर्ड काम करता है, लेकिन मजबूत हो सकता है। अधिक अक्षर जोड़ने का प्रयास करें।', goodPassword: 'आपका पासवर्ड सभी आवश्यक आवश्यकताओं को पूरा करता है।', @@ -1355,4 +1365,9 @@ export const hiIN: LocalizationResource = { title: 'प्रतीक्षा सूची में शामिल होने के लिए धन्यवाद!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 7f200827522..379f95a1b2a 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -750,6 +750,10 @@ export const hrHR: LocalizationResource = { subtitle: 'Za nastavak, unesite verifikacijski kod generiran vašom aplikacijom za autentifikaciju', title: 'Dvostupanjska verifikacija', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Unesite svoju lozinku', signUp: { @@ -842,6 +846,10 @@ export const hrHR: LocalizationResource = { title: 'Kreirajte svoj račun', titleCombined: 'Kreirajte svoj račun', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Nastavite s {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -947,6 +955,8 @@ export const hrHR: LocalizationResource = { phone_number_exists: 'Ovaj telefonski broj je zauzet. Molimo pokušajte s drugim.', session_exists: 'Već ste prijavljeni.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Vaša lozinka funkcionira, ali mogla bi biti jača. Pokušajte dodati više znakova.', goodPassword: 'Vaša lozinka zadovoljava sve potrebne zahtjeve.', @@ -1350,4 +1360,9 @@ export const hrHR: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 4639bc50d0f..1111a42c293 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -749,6 +749,10 @@ export const huHU: LocalizationResource = { subtitle: 'A folytatáshoz, kérlek írd be a visszaigazoló kódot, amit a hitelesítő app készített.', title: 'Két lépécsős azonosítás', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Írd be a jelszavad', signUp: { @@ -839,6 +843,10 @@ export const huHU: LocalizationResource = { title: 'Fiók létrehozása', titleCombined: 'Fiók létrehozása', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Folytatás {{provider|titleize}} segítségével', socialButtonsBlockButtonManyInView: undefined, @@ -941,6 +949,8 @@ export const huHU: LocalizationResource = { phone_number_exists: 'Ez a telefonszám már foglalt. Kérlek próbálj meg egy másikat.', session_exists: 'Már be vagy jelentkezve.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'A jelszavad, jó, de lehetne erősebb. Adj hozzá több karaktert.', goodPassword: 'A jelszavad megfelel az elvárásoknak.', @@ -1347,4 +1357,9 @@ export const huHU: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 51fe316c300..a26544203db 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -752,6 +752,10 @@ export const idID: LocalizationResource = { subtitle: 'Untuk melanjutkan, masukkan kode verifikasi yang dihasilkan oleh aplikasi autentikator Anda', title: 'Verifikasi dua langkah', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Masukkan kata sandi Anda', signUp: { @@ -846,6 +850,10 @@ export const idID: LocalizationResource = { title: 'Buat akun Anda', titleCombined: 'Buat akun Anda', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Lanjutkan dengan {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -950,6 +958,8 @@ export const idID: LocalizationResource = { phone_number_exists: 'Nomor telepon ini sudah digunakan. Silakan coba yang lain.', session_exists: 'Anda sudah masuk.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Kata sandi Anda berfungsi, tapi bisa lebih kuat. Coba tambahkan lebih banyak karakter.', goodPassword: 'Kata sandi Anda memenuhi semua persyaratan yang diperlukan.', @@ -1344,4 +1354,9 @@ export const idID: LocalizationResource = { title: 'Terima kasih telah bergabung dengan daftar tunggu!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index e3057b8cd80..7b40b3afd33 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -751,6 +751,10 @@ export const isIS: LocalizationResource = { subtitle: 'Til að halda áfram, vinsamlegast sláðu inn staðfestingarkóðann sem auðkennisforritið þitt bjó til', title: 'Tveggja þrepa auðkenning', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Sláðu inn lykilorðið þitt', signUp: { @@ -842,6 +846,10 @@ export const isIS: LocalizationResource = { title: 'Stofna reikning', titleCombined: 'Stofna reikning', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Halda áfram með {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -945,6 +953,8 @@ export const isIS: LocalizationResource = { phone_number_exists: 'Þetta símanúmer er þegar í notkun. Vinsamlegast reyndu annað.', session_exists: 'Þú ert nú þegar innskráður.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Lykilorðið þitt virkar, en gæti verið sterkara. Reyndu að bæta við fleiri stöfum.', goodPassword: 'Lykilorðið þitt uppfyllir allar nauðsynlegar kröfur.', @@ -1351,4 +1361,9 @@ export const isIS: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 972d54a68e9..496afb2fa24 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -756,6 +756,10 @@ export const itIT: LocalizationResource = { subtitle: 'Inserisci il codice di verifica dalla tua app di autenticazione.', title: 'Verifica in due passaggi', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Inserisci la tua password', signUp: { @@ -848,6 +852,10 @@ export const itIT: LocalizationResource = { title: 'Crea il tuo account', titleCombined: 'Crea il tuo account', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continua con {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -949,6 +957,8 @@ export const itIT: LocalizationResource = { phone_number_exists: 'Questo numero di telefono è già in uso. Per favore, prova con un altro.', session_exists: 'Sei già loggato.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: undefined, goodPassword: undefined, @@ -1356,4 +1366,9 @@ export const itIT: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 32056235b1e..4456bf56493 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -759,6 +759,10 @@ export const jaJP: LocalizationResource = { subtitle: '続行するには、認証アプリで生成された検証コードを入力してください', title: '二段階認証', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'パスワードを入力してください', signUp: { @@ -852,6 +856,10 @@ export const jaJP: LocalizationResource = { title: 'アカウントを作成', titleCombined: 'アカウントを作成', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}}で続ける', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -954,6 +962,8 @@ export const jaJP: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'Web3ウォレット拡張機能が見つかりません。続行するにはインストールしてください。', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'パスワードは有効ですが、もう少し強化できます。文字を追加してみてください。', goodPassword: 'パスワードはすべての要件を満たしています。', @@ -1355,4 +1365,9 @@ export const jaJP: LocalizationResource = { title: '待機リストへの参加ありがとうございます!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index a6fafe75c28..dfe8e8ea0cf 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -741,6 +741,10 @@ export const kkKZ: LocalizationResource = { subtitle: 'Аутентификатор қолданбасындағы кодты енгізіңіз', title: 'Екі қадамды растау', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Құпия сөзді енгізіңіз', signUp: { @@ -832,6 +836,10 @@ export const kkKZ: LocalizationResource = { title: 'Есептік жазбаны құру', titleCombined: 'Есептік жазбаны құру', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}} арқылы жалғастыру', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -930,6 +938,8 @@ export const kkKZ: LocalizationResource = { phone_number_exists: 'Бұл телефон нөмірі тіркелген. Басқасын қолданыңыз.', session_exists: undefined, web3_missing_identifier: 'Web3 Wallet кеңейтуі табылмады. Орнатыңыз.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Құпия сөз әлсіз. Таңбалар санын көбейтіңіз.', goodPassword: 'Құпия сөз талаптарға сай.', @@ -1323,4 +1333,9 @@ export const kkKZ: LocalizationResource = { title: 'Күту тізіміне қосылғаныңыз үшін рақмет!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 56bce5252fc..3ec094af7ab 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -743,6 +743,10 @@ export const koKR: LocalizationResource = { subtitle: '계속하려면 인증 앱에서 생성된 인증 코드를 입력하세요', title: '2단계 인증', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: '비밀번호를 입력하세요', signUp: { @@ -833,6 +837,10 @@ export const koKR: LocalizationResource = { title: '계정 만들기', titleCombined: '계정 만들기', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}}로 계속하기', socialButtonsBlockButtonManyInView: undefined, @@ -933,6 +941,8 @@ export const koKR: LocalizationResource = { phone_number_exists: '이 전화번호는 이미 사용중입니다. 다른 번호를 시도해 주세요.', session_exists: '이미 로그인 중입니다.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: '비밀번호는 작동하지만 더 강력할 수 있습니다. 문자를 더 추가해 보세요.', goodPassword: '수고하셨습니다. 훌륭한 비밀번호입니다.', @@ -1329,4 +1339,9 @@ export const koKR: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index f3226c8d8cd..4b5d2eaa854 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -750,6 +750,10 @@ export const mnMN: LocalizationResource = { subtitle: 'Үргэлжлүүлэхийн тулд authenticator апп-аар үүсгэсэн баталгаажуулах кодыг оруулна уу', title: 'Two-step баталгаажуулалт', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Нууц үгээ оруулна уу', signUp: { @@ -840,6 +844,10 @@ export const mnMN: LocalizationResource = { title: 'Бүртгэл үүсгэх', titleCombined: 'Бүртгэл үүсгэх', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}}-р үргэлжлүүлэх', socialButtonsBlockButtonManyInView: undefined, @@ -941,6 +949,8 @@ export const mnMN: LocalizationResource = { phone_number_exists: 'Энэ утасны дугаарыг авсан. Өөр оролдоно уу.', session_exists: 'Та аль хэдийн нэвтэрсэн байна.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Таны нууц үг ажилладаг, гэхдээ илүү хүчтэй байж болно. Илүү олон тэмдэгт нэмж үзээрэй.', goodPassword: 'Таны нууц үг шаардлагатай бүх шаардлагыг хангаж байна.', @@ -1345,4 +1355,9 @@ export const mnMN: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 76f884c09d2..c500c3301e6 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -754,6 +754,10 @@ export const msMY: LocalizationResource = { subtitle: 'Untuk meneruskan, sila masukkan kod pengesahan yang dijana oleh aplikasi pengesah anda', title: 'Pengesahan dua langkah', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Masukkan kata laluan anda', signUp: { @@ -848,6 +852,10 @@ export const msMY: LocalizationResource = { title: 'Cipta akaun anda', titleCombined: 'Cipta akaun anda', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Teruskan dengan {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -956,6 +964,8 @@ export const msMY: LocalizationResource = { phone_number_exists: 'Nombor telefon ini telah diambil. Sila cuba yang lain.', session_exists: undefined, web3_missing_identifier: 'Sambungan Dompet Web3 tidak dapat dijumpai. Sila pasang satu untuk meneruskan.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Kata laluan anda berfungsi, tetapi boleh lebih kuat. Cuba tambah lebih banyak aksara.', goodPassword: 'Kata laluan anda memenuhi semua keperluan yang diperlukan.', @@ -1363,4 +1373,9 @@ export const msMY: LocalizationResource = { title: 'Terima kasih kerana menyertai senarai menunggu!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 21fd1a962a2..0901ed53c5c 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -749,6 +749,10 @@ export const nbNO: LocalizationResource = { subtitle: undefined, title: 'To-trinns verifisering', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Skriv inn passordet ditt', signUp: { @@ -839,6 +843,10 @@ export const nbNO: LocalizationResource = { title: 'Opprett kontoen din', titleCombined: 'Opprett kontoen din', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Fortsett med {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -940,6 +948,8 @@ export const nbNO: LocalizationResource = { phone_number_exists: 'Dette telefonnummeret er allerede i bruk. Vennligst bruk et annet telefonnummer.', session_exists: 'Du er allerede logget inn.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Passordet ditt fungerer, men det kan være sterkere. Prøv å legge til flere tegn.', goodPassword: 'Godt jobbet. Dette er et utmerket passord.', @@ -1344,4 +1354,9 @@ export const nbNO: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 5167e3eddda..83b9f5331ec 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -749,6 +749,10 @@ export const nlBE: LocalizationResource = { subtitle: '', title: 'Tweestapsverificatie', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Vul je wachtwoord in', signUp: { @@ -840,6 +844,10 @@ export const nlBE: LocalizationResource = { title: 'Maak je account aan', titleCombined: 'Maak je account aan', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Ga verder met {{provider|titleize}}', socialButtonsBlockButtonManyInView: 'Ga verder met {{provider|titleize}}', @@ -940,6 +948,8 @@ export const nlBE: LocalizationResource = { phone_number_exists: 'Dit telefoonnummer is al in gebruik. Probeer een ander nummer.', session_exists: 'Je bent al ingelogd.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Je wachtwoord werkt, maar kan sterker zijn. Probeer meer tekens toe te voegen.', goodPassword: 'Je wachtwoord voldoet aan alle vereisten.', @@ -1342,4 +1352,9 @@ export const nlBE: LocalizationResource = { title: 'Succes!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index d438ebb6895..8c0eed02f11 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -749,6 +749,10 @@ export const nlNL: LocalizationResource = { subtitle: '', title: 'Tweestapsverificatie', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Vul je wachtwoord in', signUp: { @@ -840,6 +844,10 @@ export const nlNL: LocalizationResource = { title: 'Maak je account aan', titleCombined: 'Maak je account aan', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Ga verder met {{provider|titleize}}', socialButtonsBlockButtonManyInView: 'Ga verder met {{provider|titleize}}', @@ -940,6 +948,8 @@ export const nlNL: LocalizationResource = { phone_number_exists: 'Dit telefoonnummer is al in gebruik. Probeer een ander nummer.', session_exists: 'Je bent al ingelogd.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Je wachtwoord werkt, maar kan sterker zijn. Probeer meer tekens toe te voegen.', goodPassword: 'Je wachtwoord voldoet aan alle vereisten.', @@ -1342,4 +1352,9 @@ export const nlNL: LocalizationResource = { title: 'Succes!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index f481f854808..8bee446184a 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -751,6 +751,10 @@ export const plPL: LocalizationResource = { subtitle: 'Aby kontynuować, wprowadź kod weryfikacyjny wygenerowany przez aplikację uwierzytelniającą', title: 'Weryfikacja dwustopniowa', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Wprowadź swoje hasło', signUp: { @@ -845,6 +849,10 @@ export const plPL: LocalizationResource = { title: 'Utwórz swoje konto', titleCombined: 'Utwórz swoje konto', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Kontynuuj z {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -949,6 +957,8 @@ export const plPL: LocalizationResource = { phone_number_exists: 'Numer telefonu jest już zajęty. Proszę spróbować innego.', session_exists: 'Jesteś już zalogowany.', web3_missing_identifier: 'Nie można znaleźć rozszerzenia Web3 Wallet. Zainstaluj je, aby kontynuować.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Twoje hasło jest odpowiednie, ale mogłoby być silniejsze. Spróbuj dodać więcej znaków.', goodPassword: 'Twoje hasło jest wystarczająco silne.', @@ -1354,4 +1364,9 @@ export const plPL: LocalizationResource = { title: 'Dziękujemy za dołączenie do listy oczekujących!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 7a4d328d672..9680da375d1 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -758,6 +758,10 @@ export const ptBR: LocalizationResource = { subtitle: 'Para continuar, insira o código gerado pelo seu aplicativo autenticador.', title: 'Verificação em duas etapas', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Insira sua senha', signUp: { @@ -852,6 +856,10 @@ export const ptBR: LocalizationResource = { title: 'Criar sua conta', titleCombined: 'Criar sua conta', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuar com {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -957,6 +965,8 @@ export const ptBR: LocalizationResource = { session_exists: 'Você já está conectado.', web3_missing_identifier: 'Uma extensão de carteira Web3 não pode ser encontrada. Por favor, instale uma para continuar.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Sua senha funciona, mas poderia ser mais forte. Tente adicionar mais caracteres.', goodPassword: 'Sua senha atende a todos os requisitos necessários.', @@ -1364,4 +1374,9 @@ export const ptBR: LocalizationResource = { title: 'Obrigado por entrar na lista de espera!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index c298945fe45..22411c395cb 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -747,6 +747,10 @@ export const ptPT: LocalizationResource = { subtitle: 'Insira o código de verificação enviado para o seu dispositivo.', title: 'Verificação de duas etapas', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Insira a sua palavra-passe', signUp: { @@ -838,6 +842,10 @@ export const ptPT: LocalizationResource = { title: 'Criar a sua conta', titleCombined: 'Criar a sua conta', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuar com {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -941,6 +949,8 @@ export const ptPT: LocalizationResource = { phone_number_exists: 'Este número de telemóvel já está em uso. Por favor, tente outro.', session_exists: 'Já está conectado.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'A sua palavra-passe funciona, mas poderia ser mais forte. Tente adicionar mais caracteres.', goodPassword: 'A sua palavra-passe atende a todos os requisitos necessários.', @@ -1344,4 +1354,9 @@ export const ptPT: LocalizationResource = { title: 'Inscrição bem-sucedida na lista de espera', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index b489430bf35..52d8dc4ee1e 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -760,6 +760,10 @@ export const roRO: LocalizationResource = { subtitle: 'Pentru a continua, introdu codul generat de aplicația ta de autentificare', title: 'Verificare în doi pași', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Introdu parola', signUp: { @@ -853,6 +857,10 @@ export const roRO: LocalizationResource = { title: 'Creează-ți contul', titleCombined: 'Creează-ți contul', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Continuă cu {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -958,6 +966,8 @@ export const roRO: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'Nu am găsit o extensie pentru portofel Web3. Te rugăm instalează una pentru a continua.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Parola ta funcționează, dar ar putea fi mai puternică. Încearcă să adaugi mai multe caractere.', goodPassword: 'Parola ta îndeplinește toate cerințele necesare.', @@ -1361,4 +1371,9 @@ export const roRO: LocalizationResource = { title: 'Mulțumim pentru înscriere!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index cf3f2ea89e6..145cb75f0bc 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -758,6 +758,10 @@ export const ruRU: LocalizationResource = { subtitle: 'Чтобы продолжить, пожалуйста, введите код проверки, сгенерированный вашим приложением аутентификации.', title: 'Двухфакторная верификация', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Введите Ваш пароль', signUp: { @@ -852,6 +856,10 @@ export const ruRU: LocalizationResource = { title: 'Создайте Вашу учетную запись', titleCombined: 'Создайте Вашу учетную запись', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Продолжить с помощью {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -957,6 +965,8 @@ export const ruRU: LocalizationResource = { phone_number_exists: 'Этот номер телефона уже занят. Пожалуйста, попробуйте другой.', session_exists: 'Вы уже вошли в систему.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Ваш пароль подходит, но мог бы быть надежнее. Попробуйте добавить больше символов.', goodPassword: 'Хорошая работа. Это отличный пароль.', @@ -1366,4 +1376,9 @@ export const ruRU: LocalizationResource = { title: 'Спасибо за присоединение к списку ожидания!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 7b946da46ce..99d43462908 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -751,6 +751,10 @@ export const skSK: LocalizationResource = { subtitle: 'Pre pokračovanie zadajte overovací kód z vašej autentifikačnej aplikácie', title: 'Dvojfaktorové overenie', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Zadajte svoje heslo', signUp: { @@ -845,6 +849,10 @@ export const skSK: LocalizationResource = { title: 'Vytvorte si účet', titleCombined: 'Vytvorte si účet', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Pokračovať s {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -948,6 +956,8 @@ export const skSK: LocalizationResource = { phone_number_exists: 'Toto telefónne číslo je už obsadené. Skúste prosím iné.', session_exists: 'Jste už přihlášen.', web3_missing_identifier: 'Rozšírenie Web3 Peňaženky nebolo nájdené. Je potrebné ho nainštalovať.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Vaše heslo funguje, ale mohlo by byť silnejšie. Skúste pridať viac znakov.', goodPassword: 'Dobrá práca. Toto je vynikajúce heslo.', @@ -1351,4 +1361,9 @@ export const skSK: LocalizationResource = { title: 'Ďakujeme, že ste sa pridali na waitlist!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index efb367e7ab7..6d3ceb2e37c 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -748,6 +748,10 @@ export const srRS: LocalizationResource = { subtitle: 'Da nastaviš, molimo unesi verifikacioni kod generisan tvojom aplikacijom za autentifikaciju', title: 'Dvostepena verifikacija', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Unesi svoju lozinku', signUp: { @@ -838,6 +842,10 @@ export const srRS: LocalizationResource = { title: 'Kreiraj svoj nalog', titleCombined: 'Kreiraj svoj nalog', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Nastavi sa {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -940,6 +948,8 @@ export const srRS: LocalizationResource = { phone_number_exists: 'Ovaj telefonski broj je zauzet. Molimo pokušaj sa drugim.', session_exists: 'Već ste prijavljeni.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Tvoja lozinka funkcioniše, ali može biti jača. Pokušaj dodati više karaktera.', goodPassword: 'Tvoja lozinka ispunjava sve potrebne zahteve.', @@ -1343,4 +1353,9 @@ export const srRS: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 9f98e702798..0a1d90128b0 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -751,6 +751,10 @@ export const svSE: LocalizationResource = { subtitle: 'För att fortsätta, vänligen ange verifieringskoden som genereras av din autentiseringsapp', title: 'Tvåstegsverifiering', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Ange ditt lösenord', signUp: { @@ -843,6 +847,10 @@ export const svSE: LocalizationResource = { title: 'Skapa ditt konto', titleCombined: 'Skapa ditt konto', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Fortsätt med {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -943,6 +951,8 @@ export const svSE: LocalizationResource = { phone_number_exists: 'Detta telefonnummer är taget. Vänligen prova ett annat.', session_exists: 'Du är redan inloggad.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Ditt lösenord fungerar, men kunde vara starkare. Försök lägga till fler tecken.', goodPassword: 'Ditt lösenord uppfyller alla nödvändiga krav.', @@ -1346,4 +1356,9 @@ export const svSE: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index aee6114fa90..637d25d71fe 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -754,6 +754,10 @@ export const taIN: LocalizationResource = { subtitle: 'தொடர, உங்கள் அங்கீகாரி பயன்பாட்டால் உருவாக்கப்பட்ட சரிபார்ப்புக் குறியீட்டை உள்ளிடவும்', title: 'இரண்டு-படி சரிபார்ப்பு', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'உங்கள் கடவுச்சொல்லை உள்ளிடவும்', signUp: { @@ -847,6 +851,10 @@ export const taIN: LocalizationResource = { title: 'உங்கள் கணக்கை உருவாக்கவும்', titleCombined: 'உங்கள் கணக்கை உருவாக்கவும்', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}} மூலம் தொடரவும்', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -955,6 +963,8 @@ export const taIN: LocalizationResource = { phone_number_exists: 'இந்த தொலைபேசி எண் எடுக்கப்பட்டுள்ளது. வேறொன்றை முயற்சிக்கவும்.', session_exists: undefined, web3_missing_identifier: 'Web3 வாலட் நீட்டிப்பு காணப்படவில்லை. தொடர ஒன்றை நிறுவவும்.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'உங்கள் கடவுச்சொல் செயல்படுகிறது, ஆனால் மேலும் வலுவாக இருக்கலாம். மேலும் எழுத்துகளைச் சேர்க்க முயற்சிக்கவும்.', @@ -1361,4 +1371,9 @@ export const taIN: LocalizationResource = { title: 'காத்திருப்பில் சேர்ந்ததற்கு நன்றி!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 4b90e7270ec..bb88625c7bc 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -754,6 +754,10 @@ export const teIN: LocalizationResource = { subtitle: 'కొనసాగించడానికి, దయచేసి మీ ప్రమాణీకరణ యాప్ ద్వారా రూపొందించిన ధృవీకరణ కోడ్‌ను నమోదు చేయండి', title: 'రెండు-దశల ధృవీకరణ', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'మీ పాస్‌వర్డ్‌ను నమోదు చేయండి', signUp: { @@ -847,6 +851,10 @@ export const teIN: LocalizationResource = { title: 'మీ ఖాతాను సృష్టించండి', titleCombined: 'మీ ఖాతాను సృష్టించండి', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}}తో కొనసాగించండి', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -951,6 +959,8 @@ export const teIN: LocalizationResource = { phone_number_exists: 'ఈ ఫోన్ నంబర్ తీసుకోబడింది. దయచేసి మరొకదాన్ని ప్రయత్నించండి.', session_exists: undefined, web3_missing_identifier: 'Web3 వాలెట్ పొడిగింపు కనుగొనబడలేదు. కొనసాగించడానికి దయచేసి ఒకదాన్ని ఇన్‌స్టాల్ చేయండి.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'మీ పాస్‌వర్డ్ పనిచేస్తుంది, కానీ మరింత బలంగా ఉండవచ్చు. మరిన్ని అక్షరాలను జోడించడానికి ప్రయత్నించండి.', @@ -1357,4 +1367,9 @@ export const teIN: LocalizationResource = { title: 'వెయిట్‌లిస్ట్‌లో చేరినందుకు ధన్యవాదాలు!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 5cdf69204b3..70ef99a6783 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -750,6 +750,10 @@ export const thTH: LocalizationResource = { subtitle: 'เพื่อดำเนินการต่อ โปรดใส่รหัสยืนยันที่สร้างโดยแอป Authenticator ของคุณ', title: 'การยืนยันตัวตนสองขั้นตอน', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'ใส่รหัสผ่านของคุณ', signUp: { @@ -841,6 +845,10 @@ export const thTH: LocalizationResource = { title: 'สร้างบัญชีของคุณ', titleCombined: 'สร้างบัญชีของคุณ', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'ดำเนินการต่อด้วย {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -941,6 +949,8 @@ export const thTH: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'ไม่พบส่วนขยาย Web3 Wallet โปรดติดตั้งเพื่อดำเนินการต่อ', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'รหัสผ่านของคุณใช้ได้ แต่อาจแข็งแกร่งกว่านี้ ลองเพิ่มตัวอักษรเพิ่มเติม', goodPassword: 'รหัสผ่านของคุณตรงตามข้อกำหนดที่จำเป็นทั้งหมด', @@ -1339,4 +1349,9 @@ export const thTH: LocalizationResource = { title: 'ขอบคุณที่เข้าร่วม Waitlist!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 333b2e3fadf..f5f44384d9b 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -750,6 +750,10 @@ export const trTR: LocalizationResource = { subtitle: 'Devam etmek için lütfen kimlik doğrulayıcı uygulamanız tarafından oluşturulan doğrulama kodunu girin', title: 'İki aşamalı doğrulama', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Şifrenizi girin', signUp: { @@ -841,6 +845,10 @@ export const trTR: LocalizationResource = { title: 'Hesap oluştur', titleCombined: 'Hesap oluştur', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '{{provider|titleize}} ile giriş yapın', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -944,6 +952,8 @@ export const trTR: LocalizationResource = { phone_number_exists: 'Bu telefon numarası zaten kullanılıyor. Lütfen başka bir numara deneyin.', session_exists: 'Zaten giriş yapmışsınız.', web3_missing_identifier: 'Web3 için tanımlayıcı eksik.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Şifreniz kriterleri karşılıyor; fakat birkaç karakter daha ekleyerek daha güçlü bir şifre oluşturabilirsiniz.', @@ -1348,4 +1358,9 @@ export const trTR: LocalizationResource = { title: 'Bekleme Listesine Katıldınız', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 2518da7ce4e..83b57c4d337 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -747,6 +747,10 @@ export const ukUA: LocalizationResource = { subtitle: undefined, title: 'Двоетапна перевірка', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Введіть Ваш пароль', signUp: { @@ -837,6 +841,10 @@ export const ukUA: LocalizationResource = { title: 'Створіть Ваш акаунт', titleCombined: 'Створіть Ваш акаунт', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Продовжити за допомогою {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -938,6 +946,8 @@ export const ukUA: LocalizationResource = { phone_number_exists: 'Цей номер телефону вже використовується. Спробуйте інший.', session_exists: 'Ви вже увійшли в систему.', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Ваш пароль підходить, але міг би бути надійнішим. Спробуйте додати більше символів.', goodPassword: 'Хороша робота. Це відмінний пароль.', @@ -1342,4 +1352,9 @@ export const ukUA: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 3e8d8fc2317..fc5773c2f35 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -756,6 +756,10 @@ export const viVN: LocalizationResource = { subtitle: 'Để tiếp tục, vui lòng nhập mã xác minh được tạo bởi ứng dụng xác thực của bạn', title: 'Xác thực hai bước', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: 'Nhập mật khẩu', signUp: { @@ -848,6 +852,10 @@ export const viVN: LocalizationResource = { title: 'Tạo tài khoản của bạn', titleCombined: 'Tạo tài khoản của bạn', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: 'Tiếp tục với {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -947,6 +955,8 @@ export const viVN: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'Không tìm thấy phần mở rộng Web3 Wallet. Vui lòng cài đặt một phần mở rộng để tiếp tục.', + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: 'Mật khẩu của bạn hoạt động, nhưng có thể mạnh hơn. Hãy thử thêm nhiều ký tự.', goodPassword: 'Mật khẩu của bạn đáp ứng tất cả các yêu cầu cần thiết.', @@ -1353,4 +1363,9 @@ export const viVN: LocalizationResource = { title: 'Cảm ơn bạn đã tham gia danh sách chờ!', }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 5f5223af7d1..7089f5fdf76 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -737,6 +737,10 @@ export const zhCN: LocalizationResource = { subtitle: '请继续输入由您的身份验证应用生成的验证码。', title: '两步验证', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: '输入您的密码', signUp: { @@ -827,6 +831,10 @@ export const zhCN: LocalizationResource = { title: '创建您的账户', titleCombined: '创建您的账户', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '使用 {{provider|titleize}} 登录', socialButtonsBlockButtonManyInView: undefined, @@ -924,6 +932,8 @@ export const zhCN: LocalizationResource = { phone_number_exists: '该电话号码已被使用,请尝试其他号码。', session_exists: '您已登录。', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: '您的密码可以用,但可以更强。试着添加更多字符。', goodPassword: '做得好。这是一个优秀的密码。', @@ -1313,4 +1323,9 @@ export const zhCN: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 4e6fb98a8de..a35b145f296 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -737,6 +737,10 @@ export const zhTW: LocalizationResource = { subtitle: undefined, title: '兩步驟驗證', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, signInEnterPasswordTitle: '輸入您的密碼', signUp: { @@ -828,6 +832,10 @@ export const zhTW: LocalizationResource = { title: '建立您的帳戶', titleCombined: '建立您的帳戶', }, + web3Solana: { + subtitle: undefined, + title: undefined, + }, }, socialButtonsBlockButton: '以 {{provider|titleize}} 帳戶登入', socialButtonsBlockButtonManyInView: undefined, @@ -924,6 +932,8 @@ export const zhTW: LocalizationResource = { phone_number_exists: '此電話號碼已被使用,請嘗試其他號碼。', session_exists: '您已經登錄。', web3_missing_identifier: undefined, + web3_signature_request_rejected: undefined, + web3_solana_signature_generation_failed: undefined, zxcvbn: { couldBeStronger: '您的密碼強度尚可,但可以更安全。請嘗試增加長度或複雜度。', goodPassword: '密碼強度良好。', @@ -1311,4 +1321,9 @@ export const zhTW: LocalizationResource = { title: undefined, }, }, + web3WalletButtons: { + connect: undefined, + continue: undefined, + noneAvailable: undefined, + }, } as const; diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 73806a4883c..961a3acc47b 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -18,6 +18,7 @@ import type { AuthenticateWithGoogleOneTapParams, AuthenticateWithMetamaskParams, AuthenticateWithOKXWalletParams, + AuthenticateWithSolanaParams, BillingNamespace, Clerk, ClerkAuthenticateWithWeb3Params, @@ -1453,6 +1454,15 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { } }; + authenticateWithSolana = async (params: AuthenticateWithSolanaParams) => { + const callback = () => this.clerkjs?.authenticateWithSolana(params); + if (this.clerkjs && this.loaded) { + return callback() as Promise; + } else { + this.premountMethodCalls.set('authenticateWithSolana', callback); + } + }; + authenticateWithWeb3 = async (params: ClerkAuthenticateWithWeb3Params) => { const callback = () => this.clerkjs?.authenticateWithWeb3(params); if (this.clerkjs && this.loaded) { diff --git a/packages/shared/src/types/appearance.ts b/packages/shared/src/types/appearance.ts index 809aae80217..739ecd36fe7 100644 --- a/packages/shared/src/types/appearance.ts +++ b/packages/shared/src/types/appearance.ts @@ -650,6 +650,17 @@ export type ElementsConfig = { enterpriseConnectionsRoot: WithOptions; enterpriseConnectionButton: WithOptions; enterpriseConnectionButtonText: WithOptions; + + web3WalletButtonsRoot: WithOptions; + web3WalletButtons: WithOptions; + web3WalletButtonsIconButton: WithOptions; + web3WalletButtonsBlockButton: WithOptions; + web3WalletButtonsBlockButtonText: WithOptions; + web3WalletButtonsWalletIcon: WithOptions; + web3WalletButtonsWalletInitialIcon: WithOptions; + + walletIcon: WithOptions; + walletInitialIcon: WithOptions; }; export type Elements = { diff --git a/packages/shared/src/types/clerk.ts b/packages/shared/src/types/clerk.ts index 5972230705f..91aac9c86c4 100644 --- a/packages/shared/src/types/clerk.ts +++ b/packages/shared/src/types/clerk.ts @@ -903,6 +903,11 @@ export interface Clerk { */ authenticateWithBase: (params?: AuthenticateWithBaseParams) => Promise; + /** + * Authenticates user using their Solana supported Web3 wallet browser extension + */ + authenticateWithSolana: (params: AuthenticateWithSolanaParams) => Promise; + /** * Authenticates user using their Web3 Wallet browser extension */ @@ -2300,6 +2305,7 @@ export interface ClerkAuthenticateWithWeb3Params { strategy: Web3Strategy; legalAccepted?: boolean; secondFactorUrl?: string; + walletName?: string; } export type JoinWaitlistParams = { @@ -2343,6 +2349,15 @@ export interface AuthenticateWithBaseParams { legalAccepted?: boolean; } +export interface AuthenticateWithSolanaParams { + customNavigate?: (to: string) => Promise; + redirectUrl?: string; + signUpContinueUrl?: string; + unsafeMetadata?: SignUpUnsafeMetadata; + legalAccepted?: boolean; + walletName: string; +} + export interface LoadedClerk extends Clerk { client: ClientResource; } diff --git a/packages/shared/src/types/factors.ts b/packages/shared/src/types/factors.ts index 9dff219ff14..f244a16f34b 100644 --- a/packages/shared/src/types/factors.ts +++ b/packages/shared/src/types/factors.ts @@ -43,6 +43,7 @@ export type Web3SignatureFactor = { strategy: Web3Strategy; web3WalletId: string; primary?: boolean; + walletName?: string; }; export type PasswordFactor = { diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index d8e4a644653..a5d3ab96a6d 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -369,6 +369,11 @@ export type __internal_LocalizationResource = { title: LocalizationValue; subtitle: LocalizationValue; }; + web3Solana: { + title: LocalizationValue; + subtitle: LocalizationValue; + noAvailableWallets: LocalizationValue; + }; }; signIn: { start: { @@ -547,6 +552,10 @@ export type __internal_LocalizationResource = { title: LocalizationValue; subtitle: LocalizationValue; }; + web3Solana: { + title: LocalizationValue; + subtitle: LocalizationValue; + }; }; reverification: { password: { @@ -1300,6 +1309,11 @@ export type __internal_LocalizationResource = { }; formButtonPrimary: LocalizationValue; }; + web3WalletButtons: { + connect: LocalizationValue<'walletName'>; + continue: LocalizationValue<'walletName'>; + noneAvailable: LocalizationValue<'solanaWalletsLink'>; + }; }; type WithParamName = T & @@ -1320,6 +1334,8 @@ type UnstableErrors = WithParamName<{ passkey_registration_cancelled: LocalizationValue; passkey_already_exists: LocalizationValue; web3_missing_identifier: LocalizationValue; + web3_solana_signature_generation_failed: LocalizationValue; + web3_signature_request_rejected: LocalizationValue; form_password_pwned: LocalizationValue; form_password_pwned__sign_in: LocalizationValue; form_new_password_matches_current: LocalizationValue; diff --git a/packages/shared/src/types/signIn.ts b/packages/shared/src/types/signIn.ts index e37018e15c3..031cf9e76eb 100644 --- a/packages/shared/src/types/signIn.ts +++ b/packages/shared/src/types/signIn.ts @@ -16,6 +16,7 @@ import type { PrepareFirstFactorParams, PrepareSecondFactorParams, ResetPasswordParams, + SignInAuthenticateWithSolanaParams, SignInCreateParams, SignInFirstFactor, SignInIdentifier, @@ -76,6 +77,8 @@ export interface SignInResource extends ClerkResource { authenticateWithBase: () => Promise; + authenticateWithSolana: (params: SignInAuthenticateWithSolanaParams) => Promise; + authenticateWithPasskey: (params?: AuthenticateWithPasskeyParams) => Promise; createEmailLinkFlow: () => CreateEmailLinkFlowReturn; diff --git a/packages/shared/src/types/signInCommon.ts b/packages/shared/src/types/signInCommon.ts index de07635a6d3..ccc5675915f 100644 --- a/packages/shared/src/types/signInCommon.ts +++ b/packages/shared/src/types/signInCommon.ts @@ -197,3 +197,7 @@ export type SignInStrategy = | OAuthStrategy | SamlStrategy | EnterpriseSSOStrategy; + +export interface SignInAuthenticateWithSolanaParams { + walletName: string; +} diff --git a/packages/shared/src/types/signInFuture.ts b/packages/shared/src/types/signInFuture.ts index 66c52a4a8b3..554b77dc54d 100644 --- a/packages/shared/src/types/signInFuture.ts +++ b/packages/shared/src/types/signInFuture.ts @@ -4,6 +4,7 @@ import type { PhoneCodeChannel } from './phoneCodeChannel'; import type { SignInFirstFactor, SignInSecondFactor, SignInStatus, UserData } from './signInCommon'; import type { OAuthStrategy, PasskeyStrategy, Web3Strategy } from './strategies'; import type { VerificationResource } from './verification'; +import type { Web3Provider } from './web3'; export interface SignInFutureCreateParams { /** @@ -244,6 +245,14 @@ export interface SignInFutureWeb3Params { * The verification strategy to validate the user's sign-in request. */ strategy: Web3Strategy; + /** + * The Web3 wallet provider to use for the sign-in. + */ + provider: Web3Provider; + /** + * The name of the wallet to use for Solana sign-ins. Required when `provider` is set to `'solana'`. + */ + walletName?: string; } export interface SignInFuturePasskeyParams { diff --git a/packages/shared/src/types/signUp.ts b/packages/shared/src/types/signUp.ts index 8cfcc7debce..38da8659e9b 100644 --- a/packages/shared/src/types/signUp.ts +++ b/packages/shared/src/types/signUp.ts @@ -6,6 +6,7 @@ import type { ClerkResource } from './resource'; import type { AttemptVerificationParams, PrepareVerificationParams, + SignUpAuthenticateWithSolanaParams, SignUpAuthenticateWithWeb3Params, SignUpCreateParams, SignUpField, @@ -107,6 +108,7 @@ export interface SignUpResource extends ClerkResource { authenticateWithCoinbaseWallet: (params?: SignUpAuthenticateWithWeb3Params) => Promise; authenticateWithOKXWallet: (params?: SignUpAuthenticateWithWeb3Params) => Promise; authenticateWithBase: (params?: SignUpAuthenticateWithWeb3Params) => Promise; + authenticateWithSolana: (params: SignUpAuthenticateWithSolanaParams) => Promise; __internal_toSnapshot: () => SignUpJSONSnapshot; /** diff --git a/packages/shared/src/types/signUpCommon.ts b/packages/shared/src/types/signUpCommon.ts index a40504a0c2a..4aa1b6918c6 100644 --- a/packages/shared/src/types/signUpCommon.ts +++ b/packages/shared/src/types/signUpCommon.ts @@ -115,6 +115,11 @@ export type SignUpAuthenticateWithMetamaskParams = SignUpAuthenticateWithWeb3Par export type SignUpAuthenticateWithWeb3Params = { unsafeMetadata?: SignUpUnsafeMetadata; + legalAccepted?: boolean; +}; + +export type SignUpAuthenticateWithSolanaParams = SignUpAuthenticateWithWeb3Params & { + walletName: string; }; export interface SignUpVerificationsResource { diff --git a/packages/shared/src/types/web3.ts b/packages/shared/src/types/web3.ts index 78e82f3fb76..450c8533946 100644 --- a/packages/shared/src/types/web3.ts +++ b/packages/shared/src/types/web3.ts @@ -10,5 +10,12 @@ export type MetamaskWeb3Provider = 'metamask'; export type CoinbaseWalletWeb3Provider = 'coinbase_wallet'; export type OKXWalletWeb3Provider = 'okx_wallet'; export type BaseWeb3Provider = 'base'; +export type SolanaWeb3Provider = 'solana'; -export type Web3Provider = MetamaskWeb3Provider | BaseWeb3Provider | CoinbaseWalletWeb3Provider | OKXWalletWeb3Provider; +export type Web3Provider = EthereumWeb3Provider | SolanaWeb3Provider; + +export type EthereumWeb3Provider = + | MetamaskWeb3Provider + | BaseWeb3Provider + | CoinbaseWalletWeb3Provider + | OKXWalletWeb3Provider; diff --git a/packages/shared/src/types/web3Wallet.ts b/packages/shared/src/types/web3Wallet.ts index 62dec1eb68d..0658cd87744 100644 --- a/packages/shared/src/types/web3Wallet.ts +++ b/packages/shared/src/types/web3Wallet.ts @@ -31,10 +31,12 @@ export interface AuthenticateWithWeb3Params { identifier: string; generateSignature: GenerateSignature; strategy?: Web3Strategy; + walletName?: string; } export interface GenerateSignatureParams { identifier: string; nonce: string; - provider?: Web3Provider; + provider: Web3Provider; + walletName?: string; } diff --git a/packages/shared/src/web3.ts b/packages/shared/src/web3.ts index 25392eece24..d630edf5f88 100644 --- a/packages/shared/src/web3.ts +++ b/packages/shared/src/web3.ts @@ -21,4 +21,9 @@ export const WEB3_PROVIDERS: Web3ProviderData[] = [ strategy: 'web3_okx_wallet_signature', name: 'OKX Wallet', }, + { + provider: 'solana', + strategy: 'web3_solana_signature', + name: 'Solana', + }, ]; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c5c14c87f7..1828d41b6ec 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,7 +93,7 @@ importers: version: 10.1.0 '@testing-library/jest-dom': specifier: ^6.4.6 - version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.18.12)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.8.3)))(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) + version: 6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.18.12)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.8.3)))(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) '@testing-library/react': specifier: ^16.0.0 version: 16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -120,7 +120,7 @@ importers: version: 4.5.2(vite@7.1.5(@types/node@22.18.12)(jiti@2.6.1)(lightningcss@1.30.2)(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) '@vitest/coverage-v8': specifier: 3.2.4 - version: 3.2.4(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) + version: 3.2.4(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) chalk: specifier: 4.1.2 version: 4.1.2 @@ -219,7 +219,7 @@ importers: version: 0.8.0(jest@29.7.0(@types/node@22.18.12)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.8.3))) jest-environment-jsdom: specifier: ^29.3.1 - version: 29.7.0 + version: 29.7.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) json5: specifier: 2.2.3 version: 2.2.3 @@ -297,7 +297,7 @@ importers: version: 6.1.6(typanion@3.14.0) vitest: specifier: 3.2.4 - version: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) + version: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) yalc: specifier: 1.0.0-pre.53 version: 1.0.0-pre.53 @@ -390,7 +390,7 @@ importers: version: 9.0.2 vitest-environment-miniflare: specifier: 2.14.4 - version: 2.14.4(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) + version: 2.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)) packages/chrome-extension: dependencies: @@ -427,7 +427,7 @@ importers: dependencies: '@base-org/account': specifier: 2.0.1 - version: 2.0.1(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@18.3.1))(zod@3.25.76) + version: 2.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76) '@clerk/localizations': specifier: workspace:^ version: link:../localizations @@ -452,6 +452,15 @@ importers: '@formkit/auto-animate': specifier: ^0.8.2 version: 0.8.2 + '@solana/wallet-adapter-base': + specifier: 0.9.27 + version: 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-adapter-react': + specifier: 0.15.39 + version: 0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3) + '@solana/wallet-standard': + specifier: 1.1.4 + version: 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1) '@stripe/stripe-js': specifier: 5.6.0 version: 5.6.0 @@ -461,6 +470,9 @@ importers: '@tanstack/query-core': specifier: 5.87.4 version: 5.87.4 + '@wallet-standard/core': + specifier: 1.1.1 + version: 1.1.1 '@zxcvbn-ts/core': specifier: 3.0.4 version: 3.0.4 @@ -506,10 +518,10 @@ importers: version: link:../testing '@rsdoctor/rspack-plugin': specifier: ^0.4.13 - version: 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + version: 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rspack/cli': specifier: ^1.4.11 - version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + version: 1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rspack/core': specifier: ^1.4.11 version: 1.4.11(@swc/helpers@0.5.17) @@ -533,7 +545,7 @@ importers: version: 0.4.1 jsdom: specifier: 26.1.0 - version: 26.1.0 + version: 26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) minimatch: specifier: ^10.0.3 version: 10.0.3 @@ -603,7 +615,7 @@ importers: devDependencies: '@statelyai/inspect': specifier: ^0.4.0 - version: 0.4.0(ws@8.18.3)(xstate@5.20.2) + version: 0.4.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(xstate@5.20.2) concurrently: specifier: ^9.2.1 version: 9.2.1 @@ -636,7 +648,7 @@ importers: version: 18.3.1(react@18.3.1) react-native-url-polyfill: specifier: 2.0.0 - version: 2.0.0(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) + version: 2.0.0(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) tslib: specifier: catalog:repo version: 2.8.1 @@ -649,25 +661,25 @@ importers: version: 1.0.2 expo-apple-authentication: specifier: ^7.2.4 - version: 7.2.4(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) + version: 7.2.4(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) expo-auth-session: specifier: ^5.4.0 - version: 5.4.0(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + version: 5.4.0(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) expo-crypto: specifier: ^15.0.7 - version: 15.0.7(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + version: 15.0.7(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) expo-local-authentication: specifier: ^13.8.0 - version: 13.8.0(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + version: 13.8.0(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) expo-secure-store: specifier: ^12.8.1 - version: 12.8.1(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + version: 12.8.1(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) expo-web-browser: specifier: ^12.8.2 - version: 12.8.2(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + version: 12.8.2(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) react-native: specifier: ^0.81.4 - version: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + version: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) packages/expo-passkeys: dependencies: @@ -679,11 +691,11 @@ importers: version: 18.3.1 react-native: specifier: '*' - version: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + version: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) devDependencies: expo: specifier: ~52.0.47 - version: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + version: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) packages/express: dependencies: @@ -801,7 +813,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.43)(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)(bufferutil@4.0.9)(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.43)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(utf-8-validate@5.0.10)(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 @@ -1033,10 +1045,10 @@ importers: dependencies: '@inkjs/ui': specifier: ^2.0.0 - version: 2.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1)) + version: 2.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) '@jescalan/ink-markdown': specifier: ^2.0.0 - version: 2.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1))(react@18.3.1) + version: 2.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) ejs: specifier: 3.1.10 version: 3.1.10 @@ -1054,16 +1066,16 @@ importers: version: 0.1.2 ink: specifier: ^5.0.1 - version: 5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1) + version: 5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) ink-big-text: specifier: ^2.0.0 - version: 2.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1))(react@18.3.1) + version: 2.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) ink-gradient: specifier: ^3.0.0 - version: 3.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1)) + version: 3.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) ink-link: specifier: ^4.1.0 - version: 4.1.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1)) + version: 4.1.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) jscodeshift: specifier: ^17.0.0 version: 17.3.0(@babel/preset-env@7.26.0(@babel/core@7.28.4)) @@ -4089,6 +4101,11 @@ packages: '@types/react': optional: true + '@react-native-async-storage/async-storage@1.24.0': + resolution: {integrity: sha512-W4/vbwUOYOjco0x3toB8QCr7EjIP6nE9G7o8PMguvvjYT5Awg09lyV4enACRx4s++PPulBiBSjL0KTFx2u0Z/g==} + peerDependencies: + react-native: ^0.0.0-0 || >=0.60 <1.0 + '@react-native-community/cli-clean@12.3.7': resolution: {integrity: sha512-BCYW77QqyxfhiMEBOoHyciJRNV6Rhz1RvclReIKnCA9wAwmoJBeu4Mu+AwiECA2bUITX16fvPt3NwDsSd1jwfQ==} @@ -4730,6 +4747,127 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5': + resolution: {integrity: sha512-xfQl6Kee0ZXagUG5mpy+bMhQTNf2LAzF65m5SSgNJp47y/nP9GdXWi9blVH8IPP+QjF/+DnCtURaXS14bk3WJw==} + peerDependencies: + '@solana/web3.js': ^1.58.0 + + '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5': + resolution: {integrity: sha512-kCI+0/umWm98M9g12ndpS56U6wBzq4XdhobCkDPF8qRDYX/iTU8CD+QMcalh7VgRT7GWEmySQvQdaugM0Chf0g==} + peerDependencies: + react-native: '>0.69' + + '@solana-mobile/wallet-adapter-mobile@2.2.5': + resolution: {integrity: sha512-Zpzfwm3N4FfI63ZMs2qZChQ1j0z+p2prkZbSU51NyTnE+K9l9sDAl8RmRCOWnE29y+/AN10WuQZQoIAccHVOFg==} + peerDependencies: + '@solana/web3.js': ^1.58.0 + + '@solana-mobile/wallet-standard-mobile@0.4.4': + resolution: {integrity: sha512-LMvqkS5/aEH+EiDje9Dk351go6wO3POysgmobM4qm8RsG5s6rDAW3U0zA+5f2coGCTyRx8BKE1I/9nHlwtBuow==} + + '@solana/buffer-layout@4.0.1': + resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==} + engines: {node: '>=5.10'} + + '@solana/codecs-core@2.3.0': + resolution: {integrity: sha512-oG+VZzN6YhBHIoSKgS5ESM9VIGzhWjEHEGNPSibiDTxFhsFWxNaz8LbMDPjBUE69r9wmdGLkrQ+wVPbnJcZPvw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-core@4.0.0': + resolution: {integrity: sha512-28kNUsyIlhU3MO3/7ZLDqeJf2YAm32B4tnTjl5A9HrbBqsTZ+upT/RzxZGP1MMm7jnPuIKCMwmTpsyqyR6IUpw==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@2.3.0': + resolution: {integrity: sha512-jFvvwKJKffvG7Iz9dmN51OGB7JBcy2CJ6Xf3NqD/VP90xak66m/Lg48T01u5IQ/hc15mChVHiBm+HHuOFDUrQg==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-numbers@4.0.0': + resolution: {integrity: sha512-z9zpjtcwzqT9rbkKVZpkWB5/0V7+6YRKs6BccHkGJlaDx8Pe/+XOvPi2rEdXPqrPd9QWb5Xp1iBfcgaDMyiOiA==} + engines: {node: '>=20.18.0'} + peerDependencies: + typescript: '>=5.3.3' + + '@solana/codecs-strings@4.0.0': + resolution: {integrity: sha512-XvyD+sQ1zyA0amfxbpoFZsucLoe+yASQtDiLUGMDg5TZ82IHE3B7n82jE8d8cTAqi0HgqQiwU13snPhvg1O0Ow==} + engines: {node: '>=20.18.0'} + peerDependencies: + fastestsmallesttextencoderdecoder: ^1.0.22 + typescript: '>=5.3.3' + + '@solana/errors@2.3.0': + resolution: {integrity: sha512-66RI9MAbwYV0UtP7kGcTBVLxJgUxoZGm8Fbc0ah+lGiAw17Gugco6+9GrJCV83VyF2mDWyYnYM9qdI3yjgpnaQ==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/errors@4.0.0': + resolution: {integrity: sha512-3YEtvcMvtcnTl4HahqLt0VnaGVf7vVWOnt6/uPky5e0qV6BlxDSbGkbBzttNjxLXHognV0AQi3pjvrtfUnZmbg==} + engines: {node: '>=20.18.0'} + hasBin: true + peerDependencies: + typescript: '>=5.3.3' + + '@solana/wallet-adapter-base@0.9.27': + resolution: {integrity: sha512-kXjeNfNFVs/NE9GPmysBRKQ/nf+foSaq3kfVSeMcO/iVgigyRmB551OjU3WyAolLG/1jeEfKLqF9fKwMCRkUqg==} + engines: {node: '>=20'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + + '@solana/wallet-adapter-react@0.15.39': + resolution: {integrity: sha512-WXtlo88ith5m22qB+qiGw301/Zb9r5pYr4QdXWmlXnRNqwST5MGmJWhG+/RVrzc+OG7kSb3z1gkVNv+2X/Y0Gg==} + engines: {node: '>=20'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + react: 18.3.1 + + '@solana/wallet-standard-chains@1.1.1': + resolution: {integrity: sha512-Us3TgL4eMVoVWhuC4UrePlYnpWN+lwteCBlhZDUhFZBJ5UMGh94mYPXno3Ho7+iHPYRtuCi/ePvPcYBqCGuBOw==} + engines: {node: '>=16'} + + '@solana/wallet-standard-core@1.1.2': + resolution: {integrity: sha512-FaSmnVsIHkHhYlH8XX0Y4TYS+ebM+scW7ZeDkdXo3GiKge61Z34MfBPinZSUMV08hCtzxxqH2ydeU9+q/KDrLA==} + engines: {node: '>=16'} + + '@solana/wallet-standard-features@1.3.0': + resolution: {integrity: sha512-ZhpZtD+4VArf6RPitsVExvgkF+nGghd1rzPjd97GmBximpnt1rsUxMOEyoIEuH3XBxPyNB6Us7ha7RHWQR+abg==} + engines: {node: '>=16'} + + '@solana/wallet-standard-util@1.1.2': + resolution: {integrity: sha512-rUXFNP4OY81Ddq7qOjQV4Kmkozx4wjYAxljvyrqPx8Ycz0FYChG/hQVWqvgpK3sPsEaO/7ABG1NOACsyAKWNOA==} + engines: {node: '>=16'} + + '@solana/wallet-standard-wallet-adapter-base@1.1.4': + resolution: {integrity: sha512-Q2Rie9YaidyFA4UxcUIxUsvynW+/gE2noj/Wmk+IOwDwlVrJUAXCvFaCNsPDSyKoiYEKxkSnlG13OA1v08G4iw==} + engines: {node: '>=16'} + peerDependencies: + '@solana/web3.js': ^1.98.0 + bs58: ^6.0.0 + + '@solana/wallet-standard-wallet-adapter-react@1.1.4': + resolution: {integrity: sha512-xa4KVmPgB7bTiWo4U7lg0N6dVUtt2I2WhEnKlIv0jdihNvtyhOjCKMjucWet6KAVhir6I/mSWrJk1U9SvVvhCg==} + engines: {node: '>=16'} + peerDependencies: + '@solana/wallet-adapter-base': '*' + react: 18.3.1 + + '@solana/wallet-standard-wallet-adapter@1.1.4': + resolution: {integrity: sha512-YSBrxwov4irg2hx9gcmM4VTew3ofNnkqsXQ42JwcS6ykF1P1ecVY8JCbrv75Nwe6UodnqeoZRbN7n/p3awtjNQ==} + engines: {node: '>=16'} + + '@solana/wallet-standard@1.1.4': + resolution: {integrity: sha512-NF+MI5tOxyvfTU4A+O5idh/gJFmjm52bMwsPpFGRSL79GECSN0XLmpVOO/jqTKJgac2uIeYDpQw/eMaQuWuUXw==} + engines: {node: '>=16'} + + '@solana/web3.js@1.98.4': + resolution: {integrity: sha512-vv9lfnvjUsRiq//+j5pBdXig0IQdtzA0BRZ3bXEP4KaIyF1CcaydWqgyzQgfZMNIsWNWmG+AUHwPy4AHOD6gpw==} + '@speed-highlight/core@1.2.7': resolution: {integrity: sha512-0dxmVj4gxg3Jg879kvFS/msl4s9F3T9UXC1InxgOf7t5NvcPD97u/WTA5vL/IxWHMn7qSxBozqrnnE2wvl1m8g==} @@ -5368,12 +5506,18 @@ packages: '@types/uuid@10.0.0': resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + '@types/webextension-polyfill@0.12.3': resolution: {integrity: sha512-F58aDVSeN/MjUGazXo/cPsmR76EvqQhQ1v4x23hFjUX0cfAJYE+JBWwiOGW36/VJGGxoH74sVlRIF3z7SJCKyg==} '@types/webpack-env@1.18.8': resolution: {integrity: sha512-G9eAoJRMLjcvN4I08wB5I7YofOb/kaJNd5uoCMX+LbKXTPCF+ZIHuqTnFaK9Jz1rgs035f9JUPUhNFtqgucy/A==} + '@types/ws@7.4.7': + resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==} + '@types/ws@8.5.12': resolution: {integrity: sha512-3tPRkv1EtkDpzlgyKyI8pGsGZAGPEaXeu0DOj5DI25Ja91bdAYddYHbADRYVrZMRbfW+1l5YwXVDKohDJNQxkQ==} @@ -5839,6 +5983,31 @@ packages: '@vue/test-utils@2.4.6': resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} + '@wallet-standard/app@1.1.0': + resolution: {integrity: sha512-3CijvrO9utx598kjr45hTbbeeykQrQfKmSnxeWOgU25TOEpvcipD/bYDQWIqUv1Oc6KK4YStokSMu/FBNecGUQ==} + engines: {node: '>=16'} + + '@wallet-standard/base@1.1.0': + resolution: {integrity: sha512-DJDQhjKmSNVLKWItoKThJS+CsJQjR9AOBOirBVT1F9YpRyC9oYHE+ZnSf8y8bxUphtKqdQMPVQ2mHohYdRvDVQ==} + engines: {node: '>=16'} + + '@wallet-standard/core@1.1.1': + resolution: {integrity: sha512-5Xmjc6+Oe0hcPfVc5n8F77NVLwx1JVAoCVgQpLyv/43/bhtIif+Gx3WUrDlaSDoM8i2kA2xd6YoFbHCxs+e0zA==} + engines: {node: '>=16'} + + '@wallet-standard/errors@0.1.1': + resolution: {integrity: sha512-V8Ju1Wvol8i/VDyQOHhjhxmMVwmKiwyxUZBnHhtiPZJTWY0U/Shb2iEWyGngYEbAkp2sGTmEeNX1tVyGR7PqNw==} + engines: {node: '>=16'} + hasBin: true + + '@wallet-standard/features@1.1.0': + resolution: {integrity: sha512-hiEivWNztx73s+7iLxsuD1sOJ28xtRix58W7Xnz4XzzA/pF0+aicnWgjOdA10doVDEDZdUuZCIIqG96SFNlDUg==} + engines: {node: '>=16'} + + '@wallet-standard/wallet@1.1.0': + resolution: {integrity: sha512-Gt8TnSlDZpAl+RWOOAB/kuvC7RpcdWAlFbHNoi4gsXsfaWa1QCT6LBcfIYTPdOZC9OVZUDwqGuGAcqZejDmHjg==} + engines: {node: '>=16'} + '@web3-storage/multipart-parser@1.0.0': resolution: {integrity: sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw==} @@ -6015,6 +6184,10 @@ packages: resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} engines: {node: '>= 14'} + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -6471,6 +6644,15 @@ packages: base-64@1.0.0: resolution: {integrity: sha512-kwDPIFCGx0NZHog36dj+tHiwP4QMzsZ3AgMViUBKI0+V5n4U0ufTCUMhnQ04diaRI8EX/QcPfql7zlhZ7j4zgg==} + base-x@3.0.11: + resolution: {integrity: sha512-xz7wQ8xDhdyP7tQxwdteLYeFfS68tSMNCZ/Y37WJ4bhGfKPpqEIlmIyueQHqOyoPhE6xNUqjzRr8ra0eF9VRvA==} + + base-x@4.0.1: + resolution: {integrity: sha512-uAZ8x6r6S3aUM9rbHGVOIsR15U/ZSc82b3ymnCPsT45Gk1DDvhDPdIgB5MrhirZWt+5K0EEPQH985kNqZgNPFw==} + + base-x@5.0.1: + resolution: {integrity: sha512-M7uio8Zt++eg3jPj+rHMfCC+IuygQHHCOU+IYsVtik6FWjuYpVt/+MRKcgsAMHh8mMFAwnB+Bs+mTrFiXjMzKg==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -6532,6 +6714,9 @@ packages: bluebird@3.7.2: resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + body-parser@1.20.3: resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} @@ -6546,6 +6731,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + borsh@0.7.0: + resolution: {integrity: sha512-CLCsZGIBCFnPtkNnieW/a8wmreDmfUtjU2m9yHrzPXIlNbqVs0AQrSatSG6vdNYUqdc83tkQi2eHfF98ubzQLA==} + boxen@8.0.1: resolution: {integrity: sha512-F3PH5k5juxom4xktynS7MoFY+NUWH5LC4CnH11YB8NPew+HLpmBLCybSAEyb2F+4pRXhuhWqFesoQd6DAyc2hw==} engines: {node: '>=18'} @@ -6592,6 +6780,15 @@ packages: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} + bs58@4.0.1: + resolution: {integrity: sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==} + + bs58@5.0.0: + resolution: {integrity: sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ==} + + bs58@6.0.0: + resolution: {integrity: sha512-PD0wEnEYg6ijszw/u8s+iI3H17cTymlrwkKhDhPZq+Sokl3AU4htyBFTjAeNAlCCmg0f53g6ih3jATyCKftTfw==} + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -6623,6 +6820,10 @@ packages: buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + bufferutil@4.0.9: + resolution: {integrity: sha512-WDtdLmJvAuNNPzByAYpRo2rF1Mmradw6gvWsQKf63476DDXmomT9zUiGypLcG4ibIM67vhAj8jJRdbmEws2Aqw==} + engines: {node: '>=6.14.2'} + builtins@5.1.0: resolution: {integrity: sha512-SW9lzGTLvWTP1AY8xeAMZimqDrIaSdLQUcVr9DMef51niJ022Ri87SwRRKYm4A6iHfkPaiVUu/Duw2Wc4J7kKg==} @@ -7016,6 +7217,10 @@ packages: resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} engines: {node: '>=18'} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + commander@14.0.1: resolution: {integrity: sha512-2JkV3gUZUVrbNA+1sjBOYLsMZ5cEEl8GTFP2a4AVz5hvasAMCQ1D2l2le/cX+pV4N6ZU17zjUahLpIXRrnWL8A==} engines: {node: '>=20'} @@ -7628,6 +7833,10 @@ packages: resolution: {integrity: sha512-ua8BhapfP0JUJKC/zV9yHHDW/rDoDxP4Zhn3AkA6/xT6gY7jYXJiaeyBZznYVujhZZET+UgcbZiQ7sN3WqcImg==} engines: {node: '>=10'} + delay@5.0.0: + resolution: {integrity: sha512-ReEBKkIfe4ya47wlPYf/gu5ib6yUG0/Aez0JQZQz94kiWtRQvZIQbTiehsnwHvLSWJnQdhVeqYue7Id1dKr0qw==} + engines: {node: '>=10'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -7721,6 +7930,9 @@ packages: resolution: {integrity: sha512-sSuxWU5j5SR9QQji/o2qMvqRNYRDOcBTgsJ/DeCf4iSN4gW+gNMXM7wFIP+fdXZxoNiAnHUTGjCr+TSWXdRDKg==} engines: {node: '>=0.3.1'} + dijkstrajs@1.0.3: + resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -8002,6 +8214,12 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} + es6-promise@4.2.8: + resolution: {integrity: sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==} + + es6-promisify@5.0.0: + resolution: {integrity: sha512-C+d6UdsYDk0lMebHNR4S2NybQMMngAOnOwYBQjTOiv0MkoJMP0Myw2mgpDLBcpfCmRLxyFqYhS/CfOENq4SJhQ==} + esbuild-plugin-file-path-extensions@2.1.4: resolution: {integrity: sha512-lNjylaAsJMprYg28zjUyBivP3y0ms9b7RJZ5tdhDUFLa3sCbqZw4wDnbFUSmnyZYWhCYDPxxp7KkXM2TXGw3PQ==} engines: {node: '>=v14.0.0', npm: '>=7.0.0'} @@ -8538,6 +8756,10 @@ packages: resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} engines: {'0': node >=0.6.0} + eyes@0.1.8: + resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==} + engines: {node: '> 0.1.90'} + fast-decode-uri-component@1.0.1: resolution: {integrity: sha512-WKgKWg5eUxvRZGwW8FvfbaH7AXSh2cL+3j5fMGzUMCxWBJ3dV3a7Wz8y2f/uQ0e3B6WmodD3oS54jTQ9HVTIIg==} @@ -8576,6 +8798,9 @@ packages: fast-sha256@1.3.0: resolution: {integrity: sha512-n11RGP/lrWEFI/bWdygLxhI+pVeo1ZYIVwvvPkW7azl/rOy+F3HYRZ2K5zeE9mmkhQppyv9sQFx0JM9UabnpPQ==} + fast-stable-stringify@1.0.0: + resolution: {integrity: sha512-wpYMUmFu5f00Sm0cj2pfivpmawLZ0NKdviQ4w9zJeR8JVtOpOxHmLaJuj0vxvGqMJQWyP/COUkF75/57OKyRag==} + fast-uri@2.4.0: resolution: {integrity: sha512-ypuAmmMKInk5q7XcepxlnUWDLWv4GFtaJqAzWKqn62IpQ3pejtr5dTVbt3vwqVaMKmkNR55sTT+CqUKIaT21BA==} @@ -8590,6 +8815,9 @@ packages: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} + fastestsmallesttextencoderdecoder@1.0.22: + resolution: {integrity: sha512-Pb8d48e+oIuY4MaM64Cd7OW1gt4nxCHs7/ddPPZ/Ic3sg8yVGM7O9wDvZ7us6ScaUupzM+pfBolwtYhN1IxBIw==} + fastify-plugin@5.0.1: resolution: {integrity: sha512-HCxs+YnRaWzCl+cWRYFnHmeRFyR5GVnJTAaCJQiYzQSDwK9MgJdyAsuL3nh0EWRCYMgQ5MeziymvmAhUHYHDUQ==} @@ -9330,6 +9558,9 @@ packages: resolution: {integrity: sha512-/1/GPCpDUCCYwlERiYjxoczfP0zfvZMU/OWgQPMya9AbAE24vseigFdhAMObpc8Q4lc/kjutPfUddDYyAmejnA==} engines: {node: '>=18.18.0'} + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + husky@8.0.3: resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} engines: {node: '>=14'} @@ -9698,6 +9929,10 @@ packages: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-plain-obj@3.0.0: resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} engines: {node: '>=10'} @@ -9841,6 +10076,11 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + isomorphic-ws@4.0.1: + resolution: {integrity: sha512-BhBvN2MBpWTaSHdWRb/bwdZJ1WaehQ2L1KngkCkfLUGF0mAWAT1sQUQacEmQ0jXkFw/czDXPNQSL5u2/Krsz1w==} + peerDependencies: + ws: '*' + isomorphic-ws@5.0.0: resolution: {integrity: sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==} peerDependencies: @@ -9898,6 +10138,11 @@ packages: engines: {node: '>=10'} hasBin: true + jayson@4.2.0: + resolution: {integrity: sha512-VfJ9t1YLwacIubLhONk0KFeosUBwstRWQ0IRT1KDjEjnVnSOVHC3uwugyV7L0c7R9lpVyrUGT2XWiBA1UTtpyg==} + engines: {node: '>=8'} + hasBin: true + jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -10062,6 +10307,9 @@ packages: resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} engines: {node: '>=10'} + js-base64@3.7.8: + resolution: {integrity: sha512-hNngCeKxIUQiEUN3GPJOkz4wF/YvdUdbNL9hsBcMQTkKzboD7T/q3OYOuuPZLUE6dBxSGpwhk5mwuDud7JVAow==} + js-beautify@1.15.1: resolution: {integrity: sha512-ESjNzSlt/sWE8sciZH8kBF8BPlwXPwhR6pWKAw8bw4Bwj+iZcnKW6ONWUutJ7eObuBZQpiIb8S7OYspWrKt7rA==} engines: {node: '>=14'} @@ -10831,6 +11079,10 @@ packages: resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} engines: {node: '>=18'} + merge-options@3.0.4: + resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} + engines: {node: '>=10'} + merge-stream@2.0.0: resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} @@ -11987,6 +12239,10 @@ packages: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} + pngjs@5.0.0: + resolution: {integrity: sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw==} + engines: {node: '>=10.13.0'} + portfinder@1.0.32: resolution: {integrity: sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==} engines: {node: '>= 0.12.0'} @@ -12420,6 +12676,11 @@ packages: peerDependencies: react: 18.3.1 + qrcode@1.5.4: + resolution: {integrity: sha512-1ca71Zgiu6ORjHqFBDpnSMTR2ReToX4l1Au1VFLyVeBTFavzQnv5JxMFr3ukHVKpSrSA2MCk0lNJSykjUfz7Zg==} + engines: {node: '>=10.13.0'} + hasBin: true + qs@6.13.0: resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} @@ -12903,6 +13164,9 @@ packages: resolution: {integrity: sha512-/m/NSLxeYEgWNtyC+WtNHCF7jbGxOibVWKnn+1Psff4dJGOfoXP+MuC/f2CwSmyiHdOIzYnYFp4W6GxWfekaLA==} engines: {node: '>= 18'} + rpc-websockets@9.3.1: + resolution: {integrity: sha512-bY6a+i/lEtBJ/mUxwsCTgevoV1P0foXTVA7UoThzaIWbM+3NDqorf8NBWs5DmqKTFeA1IoNzgvkWjFCPgnzUiQ==} + rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} @@ -13399,6 +13663,12 @@ packages: resolution: {integrity: sha512-uyQK/mx5QjHun80FLJTfaWE7JtwfRMKBLkMne6udYOmvH0CawotVa7TfgYHzAnpphn4+TweIx1QKMnRIbipmUg==} engines: {node: '>= 0.10.0'} + stream-chain@2.2.5: + resolution: {integrity: sha512-1TJmBx6aSWqZ4tx7aTpBDXK0/e2hhcNSTV8+CbFJtDjbb+I1mZ8lHit0Grw9GRT+6JbIrrDd8esncgBi8aBXGA==} + + stream-json@1.9.1: + resolution: {integrity: sha512-uWkjJ+2Nt/LO9Z/JyKZbMusL8Dkh97uUBTv3AJQ74y07lVahLY4eEFsPsE97pxYBwr8nnjMAIch5eqI0gPShyw==} + stream-shift@1.0.3: resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} @@ -13596,6 +13866,10 @@ packages: resolution: {integrity: sha512-5JRxVqC8I8NuOUjzBbvVJAKNM8qoVuH0O77h4WInc/qC2q5IreqKxYwgkga3PfA22OayK2ikceb/B26dztPl+Q==} engines: {node: '>=16'} + superstruct@2.0.2: + resolution: {integrity: sha512-uV+TFRZdXsqXTL2pRvujROjdZQ4RAlBUS5BTh9IGm+jTqQntYThciG/qu57Gs69yjnVUSqdxF9YLmSnpupBW9A==} + engines: {node: '>=14.0.0'} + supertest@6.3.4: resolution: {integrity: sha512-erY3HFDG0dPnhw4U+udPfrzXa4xhSG+n4rxfRuZWCUvjFWwKl+OxWf/7zk50s84/fAAs7vf5QAb9uRa0cCykxw==} engines: {node: '>=6.4.0'} @@ -13740,6 +14014,9 @@ packages: text-decoder@1.1.0: resolution: {integrity: sha512-TmLJNj6UgX8xcUZo4UDStGQtDiTzF7BzWlzn9g7UWrjkpHr5uJTK1ld16wZ3LXb2vb6jH8qU89dW5whuMdXYdw==} + text-encoding-utf-8@1.0.2: + resolution: {integrity: sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==} + text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -14509,6 +14786,10 @@ packages: peerDependencies: react: 18.3.1 + utf-8-validate@5.0.10: + resolution: {integrity: sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==} + engines: {node: '>=6.14.2'} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -16407,7 +16688,7 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@base-org/account@2.0.1(@types/react@18.3.26)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@18.3.1))(zod@3.25.76)': + '@base-org/account@2.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(typescript@5.8.3)(use-sync-external-store@1.5.0(react@18.3.1))(utf-8-validate@5.0.10)(zod@3.25.76)': dependencies: '@noble/hashes': 1.4.0 clsx: 1.2.1 @@ -16415,7 +16696,7 @@ snapshots: idb-keyval: 6.2.1 ox: 0.6.9(typescript@5.8.3)(zod@3.25.76) preact: 10.24.2 - viem: 2.33.3(typescript@5.8.3)(zod@3.25.76) + viem: 2.33.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76) zustand: 5.0.3(@types/react@18.3.26)(react@18.3.1)(use-sync-external-store@1.5.0(react@18.3.1)) transitivePeerDependencies: - '@types/react' @@ -17087,7 +17368,7 @@ snapshots: dependencies: uuid: 8.3.2 - '@expo/cli@0.22.26(graphql@16.11.0)': + '@expo/cli@0.22.26(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10)': dependencies: '@0no-co/graphql.web': 1.1.2(graphql@16.11.0) '@babel/runtime': 7.27.6 @@ -17107,7 +17388,7 @@ snapshots: '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 '@expo/xcpretty': 4.3.2 - '@react-native/dev-middleware': 0.76.9 + '@react-native/dev-middleware': 0.76.9(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@urql/core': 5.1.1(graphql@16.11.0) '@urql/exchange-retry': 1.3.1(@urql/core@5.1.1(graphql@16.11.0)) accepts: 1.3.8 @@ -17160,7 +17441,7 @@ snapshots: undici: 6.21.2 unique-string: 2.0.0 wrap-ansi: 7.0.0 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -17168,7 +17449,7 @@ snapshots: - supports-color - utf-8-validate - '@expo/cli@54.0.11(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))': + '@expo/cli@54.0.11(bufferutil@4.0.9)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': dependencies: '@0no-co/graphql.web': 1.1.2(graphql@16.11.0) '@expo/code-signing-certificates': 0.0.5 @@ -17178,18 +17459,18 @@ snapshots: '@expo/env': 2.0.7 '@expo/image-utils': 0.8.7 '@expo/json-file': 10.0.7 - '@expo/mcp-tunnel': 0.0.8 - '@expo/metro': 54.0.0 - '@expo/metro-config': 54.0.6(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + '@expo/mcp-tunnel': 0.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@expo/metro': 54.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@expo/metro-config': 54.0.6(bufferutil@4.0.9)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) '@expo/osascript': 2.3.7 '@expo/package-manager': 1.9.8 '@expo/plist': 0.4.7 - '@expo/prebuild-config': 54.0.5(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + '@expo/prebuild-config': 54.0.5(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) '@expo/schema-utils': 0.1.7 '@expo/spawn-async': 1.7.2 '@expo/ws-tunnel': 1.0.6 '@expo/xcpretty': 4.3.2 - '@react-native/dev-middleware': 0.81.4 + '@react-native/dev-middleware': 0.81.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@urql/core': 5.1.1(graphql@16.11.0) '@urql/exchange-retry': 1.3.1(@urql/core@5.1.1(graphql@16.11.0)) accepts: 1.3.8 @@ -17203,7 +17484,7 @@ snapshots: connect: 3.7.0 debug: 4.4.3(supports-color@8.1.1) env-editor: 0.4.2 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) expo-server: 1.0.1 freeport-async: 2.0.0 getenv: 2.0.0 @@ -17234,9 +17515,9 @@ snapshots: terminal-link: 2.1.1 undici: 6.21.2 wrap-ansi: 7.0.0 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@modelcontextprotocol/sdk' - bufferutil @@ -17384,12 +17665,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/devtools@0.1.7(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)': + '@expo/devtools@0.1.7(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: chalk: 4.1.2 optionalDependencies: react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) '@expo/env@0.4.2': dependencies: @@ -17497,9 +17778,9 @@ snapshots: json5: 2.2.3 write-file-atomic: 2.4.3 - '@expo/mcp-tunnel@0.0.8': + '@expo/mcp-tunnel@0.0.8(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) zod: 3.25.76 zod-to-json-schema: 3.24.6(zod@3.25.76) transitivePeerDependencies: @@ -17529,7 +17810,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@expo/metro-config@54.0.6(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))': + '@expo/metro-config@54.0.6(bufferutil@4.0.9)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10)': dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -17537,7 +17818,7 @@ snapshots: '@expo/config': 12.0.10 '@expo/env': 2.0.7 '@expo/json-file': 10.0.7 - '@expo/metro': 54.0.0 + '@expo/metro': 54.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@expo/spawn-async': 1.7.2 browserslist: 4.26.0 chalk: 4.1.2 @@ -17553,26 +17834,26 @@ snapshots: postcss: 8.4.49 resolve-from: 5.0.0 optionalDependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@expo/metro@54.0.0': + '@expo/metro@54.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - metro: 0.83.1 + metro: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-babel-transformer: 0.83.1 metro-cache: 0.83.1 metro-cache-key: 0.83.1 - metro-config: 0.83.1 + metro-config: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-core: 0.83.1 metro-file-map: 0.83.1 metro-resolver: 0.83.1 metro-runtime: 0.83.1 metro-source-map: 0.83.1 metro-transform-plugins: 0.83.1 - metro-transform-worker: 0.83.1 + metro-transform-worker: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -17610,7 +17891,7 @@ snapshots: base64-js: 1.5.1 xmlbuilder: 15.1.1 - '@expo/prebuild-config@54.0.5(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))': + '@expo/prebuild-config@54.0.5(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))': dependencies: '@expo/config': 12.0.10 '@expo/config-plugins': 54.0.2 @@ -17619,7 +17900,7 @@ snapshots: '@expo/json-file': 10.0.7 '@react-native/normalize-colors': 0.81.4 debug: 4.4.3(supports-color@8.1.1) - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) resolve-from: 5.0.0 semver: 7.7.3 xml2js: 0.6.0 @@ -17666,11 +17947,11 @@ snapshots: dependencies: prop-types: 15.8.1 - '@expo/vector-icons@15.0.2(expo-font@14.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)': + '@expo/vector-icons@15.0.2(expo-font@14.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: - expo-font: 14.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo-font: 14.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) '@expo/ws-tunnel@1.0.6': {} @@ -17860,13 +18141,13 @@ snapshots: '@img/sharp-win32-x64@0.34.4': optional: true - '@inkjs/ui@2.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1))': + '@inkjs/ui@2.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))': dependencies: chalk: 5.6.2 cli-spinners: 3.2.0 deepmerge: 4.3.1 figures: 6.1.0 - ink: 5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1) + ink: 5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) '@inquirer/confirm@5.1.13(@types/node@22.18.12)': dependencies: @@ -17954,9 +18235,9 @@ snapshots: '@istanbuljs/schema@0.1.3': {} - '@jescalan/ink-markdown@2.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1))(react@18.3.1)': + '@jescalan/ink-markdown@2.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: - ink: 5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1) + ink: 5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) marked: 11.2.0 marked-terminal: https://codeload.github.com/jescalan/marked-terminal/tar.gz/44f5ab42076e16937f56d645d3d7264675558ea1(marked@11.2.0) react: 18.3.1 @@ -18299,7 +18580,7 @@ snapshots: dependencies: '@miniflare/shared': 2.14.4 - '@miniflare/shared-test-environment@2.14.4': + '@miniflare/shared-test-environment@2.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@cloudflare/workers-types': 4.20241022.0 '@miniflare/cache': 2.14.4 @@ -18313,7 +18594,7 @@ snapshots: '@miniflare/shared': 2.14.4 '@miniflare/sites': 2.14.4 '@miniflare/storage-memory': 2.14.4 - '@miniflare/web-sockets': 2.14.4 + '@miniflare/web-sockets': 2.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -18344,12 +18625,12 @@ snapshots: dependencies: '@miniflare/shared': 2.14.4 - '@miniflare/web-sockets@2.14.4': + '@miniflare/web-sockets@2.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@miniflare/core': 2.14.4 '@miniflare/shared': 2.14.4 undici: 5.28.4 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -18559,7 +18840,7 @@ snapshots: prompts: 2.4.2 semver: 7.7.3 - '@nuxt/devtools@2.6.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@3.5.21(typescript@5.8.3))': + '@nuxt/devtools@2.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)(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))': dependencies: '@nuxt/devtools-kit': 2.6.3(magicast@0.3.5)(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)) '@nuxt/devtools-wizard': 2.6.3 @@ -18593,7 +18874,7 @@ snapshots: vite-plugin-inspect: 11.3.3(@nuxt/kit@3.19.2(magicast@0.3.5))(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)) vite-plugin-vue-tracer: 1.0.0(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)) which: 5.0.0 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -19176,6 +19457,12 @@ snapshots: optionalDependencies: '@types/react': 18.3.26 + '@react-native-async-storage/async-storage@1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))': + dependencies: + merge-options: 3.0.4 + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) + optional: true + '@react-native-community/cli-clean@12.3.7': dependencies: '@react-native-community/cli-tools': 12.3.7 @@ -19263,7 +19550,7 @@ snapshots: '@react-native-community/cli-plugin-metro@12.3.7': optional: true - '@react-native-community/cli-server-api@12.3.7': + '@react-native-community/cli-server-api@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@react-native-community/cli-debugger-ui': 12.3.7 '@react-native-community/cli-tools': 12.3.7 @@ -19273,7 +19560,7 @@ snapshots: nocache: 3.0.4 pretty-format: 26.6.2 serve-static: 1.16.2 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - encoding @@ -19302,7 +19589,7 @@ snapshots: joi: 17.13.3 optional: true - '@react-native-community/cli@12.3.7': + '@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@react-native-community/cli-clean': 12.3.7 '@react-native-community/cli-config': 12.3.7 @@ -19310,7 +19597,7 @@ snapshots: '@react-native-community/cli-doctor': 12.3.7 '@react-native-community/cli-hermes': 12.3.7 '@react-native-community/cli-plugin-metro': 12.3.7 - '@react-native-community/cli-server-api': 12.3.7 + '@react-native-community/cli-server-api': 12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@react-native-community/cli-tools': 12.3.7 '@react-native-community/cli-types': 12.3.7 chalk: 4.1.2 @@ -19471,17 +19758,17 @@ snapshots: nullthrows: 1.1.1 yargs: 17.7.2 - '@react-native/community-cli-plugin@0.81.4(@react-native-community/cli@12.3.7)': + '@react-native/community-cli-plugin@0.81.4(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: - '@react-native/dev-middleware': 0.81.4 + '@react-native/dev-middleware': 0.81.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) debug: 4.4.3(supports-color@8.1.1) invariant: 2.2.4 - metro: 0.83.1 - metro-config: 0.83.1 + metro: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) + metro-config: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-core: 0.83.1 semver: 7.7.3 optionalDependencies: - '@react-native-community/cli': 12.3.7 + '@react-native-community/cli': 12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -19491,7 +19778,7 @@ snapshots: '@react-native/debugger-frontend@0.81.4': {} - '@react-native/dev-middleware@0.76.9': + '@react-native/dev-middleware@0.76.9(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@isaacs/ttlcache': 1.4.1 '@react-native/debugger-frontend': 0.76.9 @@ -19504,13 +19791,13 @@ snapshots: open: 7.4.2 selfsigned: 2.4.1 serve-static: 1.16.2 - ws: 6.2.3 + ws: 6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - '@react-native/dev-middleware@0.81.4': + '@react-native/dev-middleware@0.81.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)': dependencies: '@isaacs/ttlcache': 1.4.1 '@react-native/debugger-frontend': 0.81.4 @@ -19522,7 +19809,7 @@ snapshots: nullthrows: 1.1.1 open: 7.4.2 serve-static: 1.16.2 - ws: 6.2.3 + ws: 6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -19538,12 +19825,12 @@ snapshots: '@react-native/normalize-colors@0.81.4': {} - '@react-native/virtualized-lists@0.81.4(@types/react@18.3.26)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)': + '@react-native/virtualized-lists@0.81.4(@types/react@18.3.26)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)': dependencies: invariant: 2.2.4 nullthrows: 1.1.1 react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) optionalDependencies: '@types/react': 18.3.26 @@ -19756,10 +20043,10 @@ snapshots: '@rsdoctor/client@0.4.13': {} - '@rsdoctor/core@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/core@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': dependencies: - '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) axios: 1.7.9 @@ -19770,7 +20057,7 @@ snapshots: path-browserify: 1.0.1 semver: 7.7.3 source-map: 0.7.6 - webpack-bundle-analyzer: 4.10.2 + webpack-bundle-analyzer: 4.10.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@rspack/core' - bufferutil @@ -19779,12 +20066,12 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/graph@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/graph@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': dependencies: '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) lodash.unionby: 4.8.0 - socket.io: 4.8.1 + socket.io: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) source-map: 0.7.6 transitivePeerDependencies: - '@rspack/core' @@ -19793,11 +20080,11 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/rspack-plugin@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/rspack-plugin@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': dependencies: - '@rsdoctor/core': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/core': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/sdk': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rspack/core': 1.4.11(@swc/helpers@0.5.17) @@ -19809,10 +20096,10 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/sdk@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rsdoctor/sdk@0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': dependencies: '@rsdoctor/client': 0.4.13 - '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/types': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@rsdoctor/utils': 0.4.13(@rspack/core@1.4.11(@swc/helpers@0.5.17))(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) '@types/fs-extra': 11.0.4 @@ -19824,7 +20111,7 @@ snapshots: lodash: 4.17.21 open: 8.4.2 serve-static: 1.16.2 - socket.io: 4.8.1 + socket.io: 4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) source-map: 0.7.6 tapable: 2.2.1 transitivePeerDependencies: @@ -19913,16 +20200,16 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.4.11 '@rspack/binding-win32-x64-msvc': 1.4.11 - '@rspack/cli@1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rspack/cli@1.4.11(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': dependencies: '@discoveryjs/json-ext': 0.5.7 '@rspack/core': 1.4.11(@swc/helpers@0.5.17) - '@rspack/dev-server': 1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + '@rspack/dev-server': 1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) colorette: 2.0.20 exit-hook: 4.0.0 interpret: 3.1.1 rechoir: 0.8.0 - webpack-bundle-analyzer: 4.10.2 + webpack-bundle-analyzer: 4.10.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) yargs: 17.7.2 transitivePeerDependencies: - '@types/express' @@ -19941,14 +20228,14 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.17 - '@rspack/dev-server@1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': + '@rspack/dev-server@1.1.3(@rspack/core@1.4.11(@swc/helpers@0.5.17))(@types/express@4.17.23)(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)))': dependencies: '@rspack/core': 1.4.11(@swc/helpers@0.5.17) chokidar: 3.6.0 http-proxy-middleware: 2.0.9(@types/express@4.17.23) p-retry: 6.2.0 - webpack-dev-server: 5.2.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - ws: 8.18.3 + webpack-dev-server: 5.2.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@types/express' - bufferutil @@ -20052,16 +20339,278 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@solana-mobile/mobile-wallet-adapter-protocol-web3js@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3)': + dependencies: + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + bs58: 5.0.0 + js-base64: 3.7.8 + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - fastestsmallesttextencoderdecoder + - react + - react-native + - typescript + + '@solana-mobile/mobile-wallet-adapter-protocol@2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3)': + dependencies: + '@solana/codecs-strings': 4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3) + '@solana/wallet-standard': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1) + '@solana/wallet-standard-util': 1.1.2 + '@wallet-standard/core': 1.1.1 + js-base64: 3.7.8 + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - '@solana/web3.js' + - bs58 + - fastestsmallesttextencoderdecoder + - react + - typescript + + '@solana-mobile/wallet-adapter-mobile@2.2.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3)': + dependencies: + '@solana-mobile/mobile-wallet-adapter-protocol-web3js': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3) + '@solana-mobile/wallet-standard-mobile': 0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-features': 1.3.0 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + js-base64: 3.7.8 + optionalDependencies: + '@react-native-async-storage/async-storage': 1.24.0(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) + transitivePeerDependencies: + - fastestsmallesttextencoderdecoder + - react + - react-native + - typescript + + '@solana-mobile/wallet-standard-mobile@0.4.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3)': + dependencies: + '@solana-mobile/mobile-wallet-adapter-protocol': 2.2.5(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3) + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + bs58: 5.0.0 + js-base64: 3.7.8 + qrcode: 1.5.4 + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - '@solana/web3.js' + - fastestsmallesttextencoderdecoder + - react + - react-native + - typescript + + '@solana/buffer-layout@4.0.1': + dependencies: + buffer: 6.0.3 + + '@solana/codecs-core@2.3.0(typescript@5.8.3)': + dependencies: + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-core@4.0.0(typescript@5.8.3)': + dependencies: + '@solana/errors': 4.0.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@2.3.0(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 2.3.0(typescript@5.8.3) + '@solana/errors': 2.3.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-numbers@4.0.0(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 4.0.0(typescript@5.8.3) + '@solana/errors': 4.0.0(typescript@5.8.3) + typescript: 5.8.3 + + '@solana/codecs-strings@4.0.0(fastestsmallesttextencoderdecoder@1.0.22)(typescript@5.8.3)': + dependencies: + '@solana/codecs-core': 4.0.0(typescript@5.8.3) + '@solana/codecs-numbers': 4.0.0(typescript@5.8.3) + '@solana/errors': 4.0.0(typescript@5.8.3) + fastestsmallesttextencoderdecoder: 1.0.22 + typescript: 5.8.3 + + '@solana/errors@2.3.0(typescript@5.8.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.1 + typescript: 5.8.3 + + '@solana/errors@4.0.0(typescript@5.8.3)': + dependencies: + chalk: 5.6.2 + commander: 14.0.1 + typescript: 5.8.3 + + '@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))': + dependencies: + '@solana/wallet-standard-features': 1.3.0 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + eventemitter3: 5.0.1 + + '@solana/wallet-adapter-react@0.15.39(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3)': + dependencies: + '@solana-mobile/wallet-adapter-mobile': 2.2.5(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(fastestsmallesttextencoderdecoder@1.0.22)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(typescript@5.8.3) + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1) + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + react: 18.3.1 + transitivePeerDependencies: + - bs58 + - fastestsmallesttextencoderdecoder + - react-native + - typescript + + '@solana/wallet-standard-chains@1.1.1': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@solana/wallet-standard-core@1.1.2': + dependencies: + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + '@solana/wallet-standard-util': 1.1.2 + + '@solana/wallet-standard-features@1.3.0': + dependencies: + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + + '@solana/wallet-standard-util@1.1.2': + dependencies: + '@noble/curves': 1.9.7 + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + + '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)': + dependencies: + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + '@solana/wallet-standard-util': 1.1.2 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/wallet': 1.1.0 + bs58: 5.0.0 + + '@solana/wallet-standard-wallet-adapter-base@1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)': + dependencies: + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-chains': 1.1.1 + '@solana/wallet-standard-features': 1.3.0 + '@solana/wallet-standard-util': 1.1.2 + '@solana/web3.js': 1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10) + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/wallet': 1.1.0 + bs58: 6.0.0 + + '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + react: 18.3.1 + transitivePeerDependencies: + - '@solana/web3.js' + - bs58 + + '@solana/wallet-standard-wallet-adapter-react@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-adapter-base': 0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)) + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0) + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + react: 18.3.1 + transitivePeerDependencies: + - '@solana/web3.js' + - bs58 + + '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0) + '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1) + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - '@solana/web3.js' + - bs58 + - react + + '@solana/wallet-standard-wallet-adapter@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-standard-wallet-adapter-base': 1.1.4(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0) + '@solana/wallet-standard-wallet-adapter-react': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1) + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - '@solana/web3.js' + - bs58 + - react + + '@solana/wallet-standard@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-standard-core': 1.1.2 + '@solana/wallet-standard-wallet-adapter': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@5.0.0)(react@18.3.1) + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - '@solana/web3.js' + - bs58 + - react + + '@solana/wallet-standard@1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1)': + dependencies: + '@solana/wallet-standard-core': 1.1.2 + '@solana/wallet-standard-wallet-adapter': 1.1.4(@solana/wallet-adapter-base@0.9.27(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)))(@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10))(bs58@6.0.0)(react@18.3.1) + transitivePeerDependencies: + - '@solana/wallet-adapter-base' + - '@solana/web3.js' + - bs58 + - react + + '@solana/web3.js@1.98.4(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)': + dependencies: + '@babel/runtime': 7.27.6 + '@noble/curves': 1.9.7 + '@noble/hashes': 1.8.0 + '@solana/buffer-layout': 4.0.1 + '@solana/codecs-numbers': 2.3.0(typescript@5.8.3) + agentkeepalive: 4.6.0 + bn.js: 5.2.2 + borsh: 0.7.0 + bs58: 4.0.1 + buffer: 6.0.3 + fast-stable-stringify: 1.0.0 + jayson: 4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + node-fetch: 2.7.0 + rpc-websockets: 9.3.1 + superstruct: 2.0.2 + transitivePeerDependencies: + - bufferutil + - encoding + - typescript + - utf-8-validate + '@speed-highlight/core@1.2.7': {} '@stablelib/base64@1.0.1': {} '@standard-schema/spec@1.0.0': {} - '@statelyai/inspect@0.4.0(ws@8.18.3)(xstate@5.20.2)': + '@statelyai/inspect@0.4.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10))(xstate@5.20.2)': dependencies: fast-safe-stringify: 2.1.1 - isomorphic-ws: 5.0.0(ws@8.18.3) + isomorphic-ws: 5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)) partysocket: 0.0.25 safe-stable-stringify: 2.4.3 superjson: 1.13.3 @@ -20467,7 +21016,7 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.18.12)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.8.3)))(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))': + '@testing-library/jest-dom@6.4.6(@jest/globals@29.7.0)(@types/jest@29.5.12)(jest@29.7.0(@types/node@22.18.12)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.8.3)))(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))': dependencies: '@adobe/css-tools': 4.4.0 '@babel/runtime': 7.27.6 @@ -20481,7 +21030,7 @@ snapshots: '@jest/globals': 29.7.0 '@types/jest': 29.5.12 jest: 29.7.0(@types/node@22.18.12)(babel-plugin-macros@3.1.0)(ts-node@10.9.2(@swc/core@1.11.29(@swc/helpers@0.5.17))(@types/node@22.18.12)(typescript@5.8.3)) - vitest: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) + vitest: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) '@testing-library/react@16.0.0(@testing-library/dom@10.1.0)(@types/react-dom@18.3.7(@types/react@18.3.26))(@types/react@18.3.26)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: @@ -20815,10 +21364,16 @@ snapshots: '@types/uuid@10.0.0': {} + '@types/uuid@8.3.4': {} + '@types/webextension-polyfill@0.12.3': {} '@types/webpack-env@1.18.8': {} + '@types/ws@7.4.7': + dependencies: + '@types/node': 22.18.12 + '@types/ws@8.5.12': dependencies: '@types/node': 22.18.12 @@ -21203,7 +21758,7 @@ snapshots: 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) - '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))': + '@vitest/coverage-v8@3.2.4(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1))': dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 1.0.2 @@ -21218,7 +21773,7 @@ snapshots: std-env: 3.9.0 test-exclude: 7.0.1 tinyrainbow: 2.0.0 - vitest: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) + vitest: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) transitivePeerDependencies: - supports-color @@ -21504,6 +22059,33 @@ snapshots: js-beautify: 1.15.1 vue-component-type-helpers: 2.1.10 + '@wallet-standard/app@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/base@1.1.0': {} + + '@wallet-standard/core@1.1.1': + dependencies: + '@wallet-standard/app': 1.1.0 + '@wallet-standard/base': 1.1.0 + '@wallet-standard/errors': 0.1.1 + '@wallet-standard/features': 1.1.0 + '@wallet-standard/wallet': 1.1.0 + + '@wallet-standard/errors@0.1.1': + dependencies: + chalk: 5.6.2 + commander: 13.1.0 + + '@wallet-standard/features@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + + '@wallet-standard/wallet@1.1.0': + dependencies: + '@wallet-standard/base': 1.1.0 + '@web3-storage/multipart-parser@1.0.0': {} '@webassemblyjs/ast@1.14.1': @@ -21702,6 +22284,10 @@ snapshots: agent-base@7.1.3: {} + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -22286,7 +22872,7 @@ snapshots: - '@babel/preset-env' - supports-color - babel-preset-expo@54.0.4(@babel/core@7.28.4)(@babel/runtime@7.27.6)(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-refresh@0.14.2): + babel-preset-expo@54.0.4(@babel/core@7.28.4)(@babel/runtime@7.27.6)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-refresh@0.14.2): dependencies: '@babel/helper-module-imports': 7.27.1 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.28.4) @@ -22313,7 +22899,7 @@ snapshots: resolve-from: 5.0.0 optionalDependencies: '@babel/runtime': 7.27.6 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - '@babel/core' - supports-color @@ -22333,6 +22919,14 @@ snapshots: base-64@1.0.0: {} + base-x@3.0.11: + dependencies: + safe-buffer: 5.2.1 + + base-x@4.0.1: {} + + base-x@5.0.1: {} + base64-js@1.5.1: {} base64id@2.0.0: {} @@ -22387,6 +22981,8 @@ snapshots: bluebird@3.7.2: {} + bn.js@5.2.2: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -22425,6 +23021,12 @@ snapshots: boolbase@1.0.0: {} + borsh@0.7.0: + dependencies: + bn.js: 5.2.2 + bs58: 4.0.1 + text-encoding-utf-8: 1.0.2 + boxen@8.0.1: dependencies: ansi-align: 3.0.1 @@ -22489,6 +23091,18 @@ snapshots: dependencies: fast-json-stable-stringify: 2.1.0 + bs58@4.0.1: + dependencies: + base-x: 3.0.11 + + bs58@5.0.0: + dependencies: + base-x: 4.0.1 + + bs58@6.0.0: + dependencies: + base-x: 5.0.1 + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -22520,6 +23134,11 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bufferutil@4.0.9: + dependencies: + node-gyp-build: 4.8.4 + optional: true + builtins@5.1.0: dependencies: semver: 7.7.3 @@ -22859,7 +23478,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 - optional: true cliui@7.0.4: dependencies: @@ -22935,6 +23553,8 @@ snapshots: commander@12.1.0: {} + commander@13.1.0: {} + commander@14.0.1: {} commander@2.20.3: {} @@ -23597,6 +24217,8 @@ snapshots: rimraf: 3.0.2 slash: 3.0.0 + delay@5.0.0: {} + delayed-stream@1.0.0: {} denque@2.1.0: {} @@ -23655,6 +24277,8 @@ snapshots: diff@8.0.2: {} + dijkstrajs@1.0.3: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -23807,7 +24431,7 @@ snapshots: engine.io-parser@5.2.3: {} - engine.io@6.6.3: + engine.io@6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@types/cors': 2.8.17 '@types/node': 22.18.12 @@ -23817,7 +24441,7 @@ snapshots: cors: 2.8.5 debug: 4.3.7 engine.io-parser: 5.2.3 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -23993,6 +24617,12 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 + es6-promise@4.2.8: {} + + es6-promisify@5.0.0: + dependencies: + es6-promise: 4.2.8 + esbuild-plugin-file-path-extensions@2.1.4: {} esbuild@0.23.1: @@ -24464,129 +25094,129 @@ snapshots: jest-message-util: 29.7.0 jest-util: 29.7.0 - expo-apple-authentication@7.2.4(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)): + expo-apple-authentication@7.2.4(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) - expo-application@5.8.3(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-application@5.8.3(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) - expo-asset@11.0.5(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1): + expo-asset@11.0.5(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@expo/image-utils': 0.6.5 - expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - expo-constants: 17.0.8(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) + expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + expo-constants: 17.0.8(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) invariant: 2.2.4 md5-file: 3.2.3 react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - expo-asset@12.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1): + expo-asset@12.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: '@expo/image-utils': 0.8.7 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - expo-constants: 18.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + expo-constants: 18.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - expo-auth-session@5.4.0(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-auth-session@5.4.0(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo-application: 5.8.3(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) - expo-constants: 15.4.5(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) - expo-crypto: 12.8.1(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) - expo-linking: 6.2.2(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) - expo-web-browser: 12.8.2(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + expo-application: 5.8.3(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) + expo-constants: 15.4.5(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) + expo-crypto: 12.8.1(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) + expo-linking: 6.2.2(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) + expo-web-browser: 12.8.2(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) invariant: 2.2.4 transitivePeerDependencies: - expo - supports-color - expo-constants@15.4.5(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-constants@15.4.5(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: '@expo/config': 8.5.6 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - expo-constants@17.0.8(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)): + expo-constants@17.0.8(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: '@expo/config': 10.0.11 '@expo/env': 0.4.2 - expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - expo-constants@18.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)): + expo-constants@18.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: '@expo/config': 12.0.10 '@expo/env': 2.0.7 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) transitivePeerDependencies: - supports-color - expo-crypto@12.8.1(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-crypto@12.8.1(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: base64-js: 1.5.1 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) - expo-crypto@15.0.7(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-crypto@15.0.7(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: base64-js: 1.5.1 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) - expo-file-system@18.0.12(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)): + expo-file-system@18.0.12(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) web-streams-polyfill: 3.3.3 - expo-file-system@19.0.17(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)): + expo-file-system@19.0.17(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) - expo-font@13.0.4(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react@18.3.1): + expo-font@13.0.4(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) fontfaceobserver: 2.3.0 react: 18.3.1 - expo-font@14.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1): + expo-font@14.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) fontfaceobserver: 2.3.0 react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) - expo-keep-awake@14.0.3(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react@18.3.1): + expo-keep-awake@14.0.3(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) react: 18.3.1 - expo-keep-awake@15.0.7(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react@18.3.1): + expo-keep-awake@15.0.7(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) react: 18.3.1 - expo-linking@6.2.2(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-linking@6.2.2(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo-constants: 15.4.5(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) + expo-constants: 15.4.5(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)) invariant: 2.2.4 transitivePeerDependencies: - expo - supports-color - expo-local-authentication@13.8.0(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-local-authentication@13.8.0(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) invariant: 2.2.4 expo-modules-autolinking@2.0.8: @@ -24613,44 +25243,44 @@ snapshots: dependencies: invariant: 2.2.4 - expo-modules-core@3.0.21(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1): + expo-modules-core@3.0.21(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: invariant: 2.2.4 react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) - expo-secure-store@12.8.1(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-secure-store@12.8.1(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) expo-server@1.0.1: {} - expo-web-browser@12.8.2(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)): + expo-web-browser@12.8.2(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: compare-urls: 2.0.0 - expo: 54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo: 54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) url: 0.11.3 - expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1): + expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@babel/runtime': 7.27.6 - '@expo/cli': 0.22.26(graphql@16.11.0) + '@expo/cli': 0.22.26(bufferutil@4.0.9)(graphql@16.11.0)(utf-8-validate@5.0.10) '@expo/config': 10.0.11 '@expo/config-plugins': 9.0.17 '@expo/fingerprint': 0.11.11 '@expo/metro-config': 0.19.12 '@expo/vector-icons': 14.0.4 babel-preset-expo: 12.0.11(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4)) - expo-asset: 11.0.5(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - expo-constants: 17.0.8(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) - expo-file-system: 18.0.12(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) - expo-font: 13.0.4(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react@18.3.1) - expo-keep-awake: 14.0.3(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react@18.3.1) + expo-asset: 11.0.5(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + expo-constants: 17.0.8(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) + expo-file-system: 18.0.12(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) + expo-font: 13.0.4(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + expo-keep-awake: 14.0.3(expo@52.0.47(@babel/core@7.28.4)(@babel/preset-env@7.26.0(@babel/core@7.28.4))(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) expo-modules-autolinking: 2.0.8 expo-modules-core: 2.2.3 fbemitter: 3.0.0 react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) web-streams-polyfill: 3.3.3 whatwg-url-without-unicode: 8.0.0-3 transitivePeerDependencies: @@ -24664,29 +25294,29 @@ snapshots: - supports-color - utf-8-validate - expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1): + expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@babel/runtime': 7.27.6 - '@expo/cli': 54.0.11(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) + '@expo/cli': 54.0.11(bufferutil@4.0.9)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) '@expo/config': 12.0.10 '@expo/config-plugins': 54.0.2 - '@expo/devtools': 0.1.7(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + '@expo/devtools': 0.1.7(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@expo/fingerprint': 0.15.1 - '@expo/metro': 54.0.0 - '@expo/metro-config': 54.0.6(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1)) - '@expo/vector-icons': 15.0.2(expo-font@14.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + '@expo/metro': 54.0.0(bufferutil@4.0.9)(utf-8-validate@5.0.10) + '@expo/metro-config': 54.0.6(bufferutil@4.0.9)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(utf-8-validate@5.0.10) + '@expo/vector-icons': 15.0.2(expo-font@14.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) '@ungap/structured-clone': 1.3.0 - babel-preset-expo: 54.0.4(@babel/core@7.28.4)(@babel/runtime@7.27.6)(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-refresh@0.14.2) - expo-asset: 12.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - expo-constants: 18.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) - expo-file-system: 19.0.17(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)) - expo-font: 14.0.9(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) - expo-keep-awake: 15.0.7(expo@54.0.13(@babel/core@7.28.4)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1))(react@18.3.1) + babel-preset-expo: 54.0.4(@babel/core@7.28.4)(@babel/runtime@7.27.6)(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-refresh@0.14.2) + expo-asset: 12.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + expo-constants: 18.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) + expo-file-system: 19.0.17(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)) + expo-font: 14.0.9(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) + expo-keep-awake: 15.0.7(expo@54.0.13(@babel/core@7.28.4)(bufferutil@4.0.9)(graphql@16.11.0)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) expo-modules-autolinking: 3.0.15 - expo-modules-core: 3.0.21(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + expo-modules-core: 3.0.21(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) pretty-format: 29.7.0 react: 18.3.1 - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) react-refresh: 0.14.2 whatwg-url-without-unicode: 8.0.0-3 transitivePeerDependencies: @@ -24807,6 +25437,8 @@ snapshots: extsprintf@1.3.0: {} + eyes@0.1.8: {} + fast-decode-uri-component@1.0.1: {} fast-deep-equal@3.1.3: {} @@ -24847,6 +25479,8 @@ snapshots: fast-sha256@1.3.0: {} + fast-stable-stringify@1.0.0: {} + fast-uri@2.4.0: {} fast-uri@3.0.3: {} @@ -24858,6 +25492,8 @@ snapshots: fastest-levenshtein@1.0.16: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + fastify-plugin@5.0.1: {} fastify@5.6.1: @@ -25765,6 +26401,10 @@ snapshots: human-signals@8.0.0: {} + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + husky@8.0.3: {} hyperdyperid@1.2.0: {} @@ -25847,28 +26487,28 @@ snapshots: ini@4.1.1: {} - ink-big-text@2.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1))(react@18.3.1): + ink-big-text@2.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1): dependencies: cfonts: 3.3.0 - ink: 5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1) + ink: 5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) prop-types: 15.8.1 react: 18.3.1 - ink-gradient@3.0.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1)): + ink-gradient@3.0.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: '@types/gradient-string': 1.1.6 gradient-string: 2.0.2 - ink: 5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1) + ink: 5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) prop-types: 15.8.1 strip-ansi: 7.1.2 - ink-link@4.1.0(ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1)): + ink-link@4.1.0(ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - ink: 5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1) + ink: 5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10) prop-types: 15.8.1 terminal-link: 3.0.0 - ink@5.0.1(@types/react@18.3.26)(react-devtools-core@4.28.5)(react@18.3.1): + ink@5.0.1(@types/react@18.3.26)(bufferutil@4.0.9)(react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10))(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@alcalzone/ansi-tokenize': 0.1.3 ansi-escapes: 7.0.0 @@ -25893,11 +26533,11 @@ snapshots: type-fest: 4.41.0 widest-line: 5.0.0 wrap-ansi: 9.0.2 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) yoga-wasm-web: 0.3.3 optionalDependencies: '@types/react': 18.3.26 - react-devtools-core: 4.28.5 + react-devtools-core: 4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -26107,6 +26747,9 @@ snapshots: is-plain-obj@1.1.0: {} + is-plain-obj@2.1.0: + optional: true + is-plain-obj@3.0.0: {} is-plain-obj@4.1.0: {} @@ -26221,13 +26864,17 @@ snapshots: isobject@3.0.1: {} - isomorphic-ws@5.0.0(ws@8.18.3): + isomorphic-ws@4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 8.18.3 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) - isows@1.0.7(ws@8.18.2): + isomorphic-ws@5.0.0(ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)): dependencies: - ws: 8.18.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isows@1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)): + dependencies: + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) isstream@0.1.2: {} @@ -26306,6 +26953,24 @@ snapshots: filelist: 1.0.4 minimatch: 3.1.2 + jayson@4.2.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): + dependencies: + '@types/connect': 3.4.38 + '@types/node': 12.20.55 + '@types/ws': 7.4.7 + commander: 2.20.3 + delay: 5.0.0 + es6-promisify: 5.0.0 + eyes: 0.1.8 + isomorphic-ws: 4.0.1(ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10)) + json-stringify-safe: 5.0.1 + stream-json: 1.9.1 + uuid: 8.3.2 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + transitivePeerDependencies: + - bufferutil + - utf-8-validate + jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -26412,7 +27077,7 @@ snapshots: jest-util: 29.7.0 pretty-format: 29.7.0 - jest-environment-jsdom@29.7.0: + jest-environment-jsdom@29.7.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 @@ -26421,7 +27086,7 @@ snapshots: '@types/node': 22.18.12 jest-mock: 29.7.0 jest-util: 29.7.0 - jsdom: 20.0.3 + jsdom: 20.0.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -26658,6 +27323,8 @@ snapshots: joycon@3.1.1: {} + js-base64@3.7.8: {} + js-beautify@1.15.1: dependencies: config-chain: 1.1.13 @@ -26741,7 +27408,7 @@ snapshots: jsdoc-type-pratt-parser@4.1.0: {} - jsdom@20.0.3: + jsdom@20.0.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: abab: 2.0.6 acorn: 8.15.0 @@ -26767,14 +27434,14 @@ snapshots: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - jsdom@26.1.0: + jsdom@26.1.0(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: cssstyle: 4.6.0 data-urls: 5.0.0 @@ -26794,14 +27461,14 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate - jsdom@27.0.0(postcss@8.5.6): + jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10): dependencies: '@asamuzakjp/dom-selector': 6.6.2 cssstyle: 5.3.1(postcss@8.5.6) @@ -26821,7 +27488,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 15.1.0 - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -27573,6 +28240,11 @@ snapshots: merge-descriptors@2.0.0: {} + merge-options@3.0.4: + dependencies: + is-plain-obj: 2.1.0 + optional: true + merge-stream@2.0.0: {} merge2@1.4.1: {} @@ -27601,13 +28273,13 @@ snapshots: transitivePeerDependencies: - supports-color - metro-config@0.83.1: + metro-config@0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: connect: 3.7.0 cosmiconfig: 5.2.1 flow-enums-runtime: 0.0.6 jest-validate: 29.7.0 - metro: 0.83.1 + metro: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-cache: 0.83.1 metro-core: 0.83.1 metro-runtime: 0.83.1 @@ -27687,14 +28359,14 @@ snapshots: transitivePeerDependencies: - supports-color - metro-transform-worker@0.83.1: + metro-transform-worker@0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@babel/core': 7.28.4 '@babel/generator': 7.28.3 '@babel/parser': 7.28.4 '@babel/types': 7.28.4 flow-enums-runtime: 0.0.6 - metro: 0.83.1 + metro: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-babel-transformer: 0.83.1 metro-cache: 0.83.1 metro-cache-key: 0.83.1 @@ -27707,7 +28379,7 @@ snapshots: - supports-color - utf-8-validate - metro@0.83.1: + metro@0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@babel/code-frame': 7.27.1 '@babel/core': 7.28.4 @@ -27733,7 +28405,7 @@ snapshots: metro-babel-transformer: 0.83.1 metro-cache: 0.83.1 metro-cache-key: 0.83.1 - metro-config: 0.83.1 + metro-config: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) metro-core: 0.83.1 metro-file-map: 0.83.1 metro-resolver: 0.83.1 @@ -27741,13 +28413,13 @@ snapshots: metro-source-map: 0.83.1 metro-symbolicate: 0.83.1 metro-transform-plugins: 0.83.1 - metro-transform-worker: 0.83.1 + metro-transform-worker: 0.83.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) mime-types: 2.1.35 nullthrows: 1.1.1 serialize-error: 2.1.0 source-map: 0.5.7 throat: 5.0.0 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) yargs: 17.7.2 transitivePeerDependencies: - bufferutil @@ -28476,11 +29148,11 @@ 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.43)(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)(bufferutil@4.0.9)(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.43)(rollup@4.52.4)(terser@5.44.0)(tsx@4.19.2)(typescript@5.8.3)(utf-8-validate@5.0.10)(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 - '@nuxt/devtools': 2.6.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@3.5.21(typescript@5.8.3)) + '@nuxt/devtools': 2.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10)(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)) '@nuxt/kit': 4.1.2(magicast@0.3.5) '@nuxt/schema': 4.1.2 '@nuxt/telemetry': 2.6.6(magicast@0.3.5) @@ -29210,6 +29882,8 @@ snapshots: pngjs@3.4.0: {} + pngjs@5.0.0: {} + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -29555,6 +30229,12 @@ snapshots: dependencies: react: 18.3.1 + qrcode@1.5.4: + dependencies: + dijkstrajs: 1.0.3 + pngjs: 5.0.0 + yargs: 15.4.1 + qs@6.13.0: dependencies: side-channel: 1.1.0 @@ -29619,19 +30299,19 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-devtools-core@4.28.5: + react-devtools-core@4.28.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: shell-quote: 1.8.3 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate optional: true - react-devtools-core@6.1.5: + react-devtools-core@6.1.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: shell-quote: 1.8.3 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -29648,21 +30328,21 @@ snapshots: react-is@18.3.1: {} - react-native-url-polyfill@2.0.0(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1)): + react-native-url-polyfill@2.0.0(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10)): dependencies: - react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1) + react-native: 0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10) whatwg-url-without-unicode: 8.0.0-3 - react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1): + react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10): dependencies: '@jest/create-cache-key-function': 29.7.0 '@react-native/assets-registry': 0.81.4 '@react-native/codegen': 0.81.4(@babel/core@7.28.4) - '@react-native/community-cli-plugin': 0.81.4(@react-native-community/cli@12.3.7) + '@react-native/community-cli-plugin': 0.81.4(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(bufferutil@4.0.9)(utf-8-validate@5.0.10) '@react-native/gradle-plugin': 0.81.4 '@react-native/js-polyfills': 0.81.4 '@react-native/normalize-colors': 0.81.4 - '@react-native/virtualized-lists': 0.81.4(@types/react@18.3.26)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7)(@types/react@18.3.26)(react@18.3.1))(react@18.3.1) + '@react-native/virtualized-lists': 0.81.4(@types/react@18.3.26)(react-native@0.81.4(@babel/core@7.28.4)(@react-native-community/cli@12.3.7(bufferutil@4.0.9)(utf-8-validate@5.0.10))(@types/react@18.3.26)(bufferutil@4.0.9)(react@18.3.1)(utf-8-validate@5.0.10))(react@18.3.1) abort-controller: 3.0.0 anser: 1.4.10 ansi-regex: 5.0.1 @@ -29681,14 +30361,14 @@ snapshots: pretty-format: 29.7.0 promise: 8.3.0 react: 18.3.1 - react-devtools-core: 6.1.5 + react-devtools-core: 6.1.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) react-refresh: 0.14.2 regenerator-runtime: 0.13.11 scheduler: 0.26.0 semver: 7.7.3 stacktrace-parser: 0.1.10 whatwg-fetch: 3.6.20 - ws: 6.2.3 + ws: 6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) yargs: 17.7.2 optionalDependencies: '@types/react': 18.3.26 @@ -30001,8 +30681,7 @@ snapshots: require-from-string@2.0.2: {} - require-main-filename@2.0.0: - optional: true + require-main-filename@2.0.0: {} requireg@0.2.2: dependencies: @@ -30202,6 +30881,19 @@ snapshots: parseurl: 1.3.3 path-to-regexp: 8.2.0 + rpc-websockets@9.3.1: + dependencies: + '@swc/helpers': 0.5.17 + '@types/uuid': 8.3.4 + '@types/ws': 8.5.12 + buffer: 6.0.3 + eventemitter3: 5.0.1 + uuid: 8.3.2 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 + rrweb-cssom@0.8.0: {} rslog@1.2.3: {} @@ -30398,8 +31090,7 @@ snapshots: server-only@0.0.1: {} - set-blocking@2.0.0: - optional: true + set-blocking@2.0.0: {} set-cookie-parser@2.6.0: {} @@ -30607,10 +31298,10 @@ snapshots: map-obj: 5.0.2 type-fest: 4.41.0 - socket.io-adapter@2.5.5: + socket.io-adapter@2.5.5(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: debug: 4.3.7 - ws: 8.17.1 + ws: 8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - supports-color @@ -30623,14 +31314,14 @@ snapshots: transitivePeerDependencies: - supports-color - socket.io@4.8.1: + socket.io@4.8.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 debug: 4.3.7 - engine.io: 6.6.3 - socket.io-adapter: 2.5.5 + engine.io: 6.6.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) + socket.io-adapter: 2.5.5(bufferutil@4.0.9)(utf-8-validate@5.0.10) socket.io-parser: 4.2.4 transitivePeerDependencies: - bufferutil @@ -30806,6 +31497,12 @@ snapshots: stream-buffers@2.2.0: {} + stream-chain@2.2.5: {} + + stream-json@1.9.1: + dependencies: + stream-chain: 2.2.5 + stream-shift@1.0.3: {} streamsearch@1.1.0: {} @@ -31034,6 +31731,8 @@ snapshots: dependencies: copy-anything: 3.0.5 + superstruct@2.0.2: {} + supertest@6.3.4: dependencies: methods: 1.1.2 @@ -31195,6 +31894,8 @@ snapshots: dependencies: b4a: 1.6.6 + text-encoding-utf-8@1.0.2: {} + text-extensions@2.4.0: {} thenify-all@1.6.0: @@ -31965,6 +32666,11 @@ snapshots: dependencies: react: 18.3.1 + utf-8-validate@5.0.10: + dependencies: + node-gyp-build: 4.8.4 + optional: true + util-deprecate@1.0.2: {} utils-merge@1.0.1: {} @@ -32087,16 +32793,16 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 - viem@2.33.3(typescript@5.8.3)(zod@3.25.76): + viem@2.33.3(bufferutil@4.0.9)(typescript@5.8.3)(utf-8-validate@5.0.10)(zod@3.25.76): dependencies: '@noble/curves': 1.9.2 '@noble/hashes': 1.8.0 '@scure/bip32': 1.7.0 '@scure/bip39': 1.6.0 abitype: 1.0.8(typescript@5.8.3)(zod@3.25.76) - isows: 1.0.7(ws@8.18.2) + isows: 1.0.7(ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)) ox: 0.8.6(typescript@5.8.3)(zod@3.25.76) - ws: 8.18.2 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: typescript: 5.8.3 transitivePeerDependencies: @@ -32260,19 +32966,19 @@ snapshots: optionalDependencies: 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) - vitest-environment-miniflare@2.14.4(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)): + vitest-environment-miniflare@2.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10)(vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1)): dependencies: '@miniflare/queues': 2.14.4 '@miniflare/runner-vm': 2.14.4 '@miniflare/shared': 2.14.4 - '@miniflare/shared-test-environment': 2.14.4 + '@miniflare/shared-test-environment': 2.14.4(bufferutil@4.0.9)(utf-8-validate@5.0.10) undici: 5.28.4 - vitest: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) + vitest: 3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1) transitivePeerDependencies: - bufferutil - utf-8-validate - vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1): + vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@22.18.12)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@22.18.12)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -32301,7 +33007,7 @@ snapshots: '@edge-runtime/vm': 5.0.0 '@types/debug': 4.1.12 '@types/node': 22.18.12 - jsdom: 27.0.0(postcss@8.5.6) + jsdom: 27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10) transitivePeerDependencies: - jiti - less @@ -32316,7 +33022,7 @@ snapshots: - tsx - yaml - vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(postcss@8.5.6))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1): + vitest@3.2.4(@edge-runtime/vm@5.0.0)(@types/debug@4.1.12)(@types/node@24.7.2)(jiti@2.6.1)(jsdom@27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10))(lightningcss@1.30.2)(msw@2.11.6(@types/node@24.7.2)(typescript@5.8.3))(terser@5.44.0)(tsx@4.19.2)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 @@ -32345,7 +33051,7 @@ snapshots: '@edge-runtime/vm': 5.0.0 '@types/debug': 4.1.12 '@types/node': 24.7.2 - jsdom: 27.0.0(postcss@8.5.6) + jsdom: 27.0.0(bufferutil@4.0.9)(postcss@8.5.6)(utf-8-validate@5.0.10) transitivePeerDependencies: - jiti - less @@ -32440,7 +33146,7 @@ snapshots: webidl-conversions@8.0.0: optional: true - webpack-bundle-analyzer@4.10.2: + webpack-bundle-analyzer@4.10.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: '@discoveryjs/json-ext': 0.5.7 acorn: 8.15.0 @@ -32453,7 +33159,7 @@ snapshots: opener: 1.5.2 picocolors: 1.1.1 sirv: 2.0.4 - ws: 7.5.10 + ws: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) transitivePeerDependencies: - bufferutil - utf-8-validate @@ -32469,7 +33175,7 @@ snapshots: optionalDependencies: webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) - webpack-dev-server@5.2.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))): + webpack-dev-server@5.2.2(bufferutil@4.0.9)(utf-8-validate@5.0.10)(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -32498,7 +33204,7 @@ snapshots: sockjs: 0.3.24 spdy: 4.0.2 webpack-dev-middleware: 7.4.2(webpack@5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17))) - ws: 8.18.3 + ws: 8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10) optionalDependencies: webpack: 5.94.0(@swc/core@1.11.29(@swc/helpers@0.5.17)) transitivePeerDependencies: @@ -32633,8 +33339,7 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.3 - which-module@2.0.1: - optional: true + which-module@2.0.1: {} which-pm-runs@1.1.0: {} @@ -32730,17 +33435,32 @@ snapshots: signal-exit: 4.1.0 optional: true - ws@6.2.3: + ws@6.2.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): dependencies: async-limiter: 1.0.1 + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@7.5.10: {} + ws@7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.17.1: {} + ws@8.17.1(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.18.2: {} + ws@8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 - ws@8.18.3: {} + ws@8.18.3(bufferutil@4.0.9)(utf-8-validate@5.0.10): + optionalDependencies: + bufferutil: 4.0.9 + utf-8-validate: 5.0.10 wsl-utils@0.1.0: dependencies: @@ -32781,8 +33501,7 @@ snapshots: xxhash-wasm@1.1.0: {} - y18n@4.0.3: - optional: true + y18n@4.0.3: {} y18n@5.0.8: {} @@ -32819,7 +33538,6 @@ snapshots: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - optional: true yargs-parser@20.2.9: {} @@ -32838,7 +33556,6 @@ snapshots: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - optional: true yargs@16.2.0: dependencies: From f49e8aad8512c310709c54a548f24e47fd7ec7af Mon Sep 17 00:00:00 2001 From: Sarah Soutoul Date: Wed, 10 Dec 2025 13:01:05 -0600 Subject: [PATCH 09/52] docs(repo): Change typedoc workflow for core 2 (#7426) --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae9d68fce0a..cced56cad16 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -98,7 +98,7 @@ jobs: github.rest.actions.createWorkflowDispatch({ owner: 'clerk', repo: 'clerk-docs', - workflow_id: 'typedoc.yml', + workflow_id: 'typedoc-core-2.yml', ref: 'main', }) } else{ From 43d3c3eaff767054ef74fd3655e632caffeaaf33 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 10 Dec 2025 12:51:56 -0800 Subject: [PATCH 10/52] chore(backend): Fix ClerkRequest helper instance check (#7431) Co-authored-by: chris-kreidl --- .changeset/five-numbers-scream.md | 5 +++ .../tanstack-react-start/package.json | 1 - .../src/tokens/__tests__/clerkRequest.test.ts | 35 +++++++++++++++++++ packages/backend/src/tokens/clerkRequest.ts | 7 +++- 4 files changed, 46 insertions(+), 2 deletions(-) create mode 100644 .changeset/five-numbers-scream.md diff --git a/.changeset/five-numbers-scream.md b/.changeset/five-numbers-scream.md new file mode 100644 index 00000000000..9f17f73733f --- /dev/null +++ b/.changeset/five-numbers-scream.md @@ -0,0 +1,5 @@ +--- +"@clerk/backend": patch +--- + +Fixed an issue where TanStack React Start middleware fails to properly handle requests. diff --git a/integration/templates/tanstack-react-start/package.json b/integration/templates/tanstack-react-start/package.json index 7e86c3cb0ab..bf45f3efb8d 100644 --- a/integration/templates/tanstack-react-start/package.json +++ b/integration/templates/tanstack-react-start/package.json @@ -13,7 +13,6 @@ "@tanstack/react-start": "1.132.51", "react": "18.3.1", "react-dom": "18.3.1", - "srvx": "0.8.15", "tailwind-merge": "^2.5.4" }, "devDependencies": { diff --git a/packages/backend/src/tokens/__tests__/clerkRequest.test.ts b/packages/backend/src/tokens/__tests__/clerkRequest.test.ts index 9582d70a1fb..27e25d20a95 100644 --- a/packages/backend/src/tokens/__tests__/clerkRequest.test.ts +++ b/packages/backend/src/tokens/__tests__/clerkRequest.test.ts @@ -171,4 +171,39 @@ describe('createClerkRequest', () => { expect(json.cookies).toBe('{}'); }); }); + + describe('duck typing detection (instanceof workaround)', () => { + it('should create a new ClerkRequest from a regular Request', () => { + const regularRequest = new Request('http://localhost:3000'); + const clerkRequest = createClerkRequest(regularRequest); + + expect(clerkRequest).not.toBe(regularRequest); + expect(clerkRequest.clerkUrl).toBeDefined(); + expect(clerkRequest.cookies).toBeDefined(); + }); + + it('should return an existing ClerkRequest instance unchanged', () => { + const firstClerkRequest = createClerkRequest(new Request('http://localhost:3000')); + const secondClerkRequest = createClerkRequest(firstClerkRequest); + + expect(secondClerkRequest).toBe(firstClerkRequest); + }); + + it('should work correctly with bundler-scoped Request classes', () => { + // Simulate bundler creating a scoped Request class (like Request$1) + class RequestScoped extends Request { + constructor(input: RequestInfo | URL, init?: RequestInit) { + super(input, init); + } + } + + const scopedRequest = new RequestScoped('http://localhost:3000'); + const clerkRequest = createClerkRequest(scopedRequest); + + // Should create a new ClerkRequest even though scopedRequest is a different Request class + expect(clerkRequest).not.toBe(scopedRequest); + expect(clerkRequest.clerkUrl).toBeDefined(); + expect(clerkRequest.cookies).toBeDefined(); + }); + }); }); diff --git a/packages/backend/src/tokens/clerkRequest.ts b/packages/backend/src/tokens/clerkRequest.ts index 9eef0a6c117..f99c9671873 100644 --- a/packages/backend/src/tokens/clerkRequest.ts +++ b/packages/backend/src/tokens/clerkRequest.ts @@ -77,7 +77,12 @@ class ClerkRequest extends Request { } export const createClerkRequest = (...args: ConstructorParameters): ClerkRequest => { - return args[0] instanceof ClerkRequest ? args[0] : new ClerkRequest(...args); + // Use duck typing instead of instanceof to avoid issues with polyfilled Request classes + // (e.g., in TanStack Start or other environments with multiple Request class instances) + // ClerkRequest has unique properties 'clerkUrl' and 'cookies' that distinguish it from Request + const isClerkRequest = args[0] && typeof args[0] === 'object' && 'clerkUrl' in args[0] && 'cookies' in args[0]; + + return isClerkRequest ? (args[0] as ClerkRequest) : new ClerkRequest(...args); }; export type { ClerkRequest }; From 14342d2b34fe0882f7676195aefaaa17f034af70 Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 10 Dec 2025 22:15:50 -0800 Subject: [PATCH 11/52] feat(localizations,shared): Add missing password or identifier localization key (#7437) --- .changeset/unlucky-beans-check.md | 6 ++++++ packages/localizations/src/ar-SA.ts | 2 ++ packages/localizations/src/be-BY.ts | 2 ++ packages/localizations/src/bg-BG.ts | 2 ++ packages/localizations/src/bn-IN.ts | 2 ++ packages/localizations/src/ca-ES.ts | 2 ++ packages/localizations/src/cs-CZ.ts | 2 ++ packages/localizations/src/da-DK.ts | 2 ++ packages/localizations/src/de-DE.ts | 2 ++ packages/localizations/src/el-GR.ts | 2 ++ packages/localizations/src/en-GB.ts | 1 + packages/localizations/src/en-US.ts | 1 + packages/localizations/src/es-CR.ts | 2 ++ packages/localizations/src/es-ES.ts | 2 ++ packages/localizations/src/es-MX.ts | 2 ++ packages/localizations/src/es-UY.ts | 2 ++ packages/localizations/src/fa-IR.ts | 2 ++ packages/localizations/src/fi-FI.ts | 2 ++ packages/localizations/src/fr-FR.ts | 2 ++ packages/localizations/src/he-IL.ts | 1 + packages/localizations/src/hi-IN.ts | 2 ++ packages/localizations/src/hr-HR.ts | 2 ++ packages/localizations/src/hu-HU.ts | 2 ++ packages/localizations/src/id-ID.ts | 1 + packages/localizations/src/is-IS.ts | 1 + packages/localizations/src/it-IT.ts | 1 + packages/localizations/src/ja-JP.ts | 2 ++ packages/localizations/src/kk-KZ.ts | 2 ++ packages/localizations/src/ko-KR.ts | 2 ++ packages/localizations/src/mn-MN.ts | 2 ++ packages/localizations/src/ms-MY.ts | 2 ++ packages/localizations/src/nb-NO.ts | 2 ++ packages/localizations/src/nl-BE.ts | 2 ++ packages/localizations/src/nl-NL.ts | 2 ++ packages/localizations/src/pl-PL.ts | 4 +++- packages/localizations/src/pt-BR.ts | 2 ++ packages/localizations/src/pt-PT.ts | 2 ++ packages/localizations/src/ro-RO.ts | 2 ++ packages/localizations/src/ru-RU.ts | 2 ++ packages/localizations/src/sk-SK.ts | 2 ++ packages/localizations/src/sr-RS.ts | 2 ++ packages/localizations/src/sv-SE.ts | 2 ++ packages/localizations/src/ta-IN.ts | 2 ++ packages/localizations/src/te-IN.ts | 2 ++ packages/localizations/src/th-TH.ts | 1 + packages/localizations/src/tr-TR.ts | 2 ++ packages/localizations/src/uk-UA.ts | 2 ++ packages/localizations/src/vi-VN.ts | 2 ++ packages/localizations/src/zh-CN.ts | 1 + packages/localizations/src/zh-TW.ts | 1 + packages/shared/src/types/localization.ts | 1 + 51 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 .changeset/unlucky-beans-check.md diff --git a/.changeset/unlucky-beans-check.md b/.changeset/unlucky-beans-check.md new file mode 100644 index 00000000000..ad0c6bcc65d --- /dev/null +++ b/.changeset/unlucky-beans-check.md @@ -0,0 +1,6 @@ +--- +"@clerk/localizations": patch +"@clerk/shared": patch +--- + +Added missing password or identifier incorrect error localization. diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index 716eb160e89..df7ac8e0171 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -907,6 +907,8 @@ export const arSA: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'كلمة المرور أو عنوان البريد الإلكتروني غير صحيح. حاول مرة أخرى أو استخدم طريقة أخرى.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'كلمة المرور ليست قوية', form_password_pwned: 'لا يمكن أستعمال كلمة السر هذه لانها غير أمنة, الرجاء اختيار كلمة مرور أخرى', diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index f90b0172dc2..5333bbcd84d 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -917,6 +917,8 @@ export const beBY: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Невядомы або недапушчальны значэнне.', form_password_incorrect: 'Невірны пароль.', + form_password_or_identifier_incorrect: + 'Пароль або адрас электроннай пошты няправільны. Паспрабуйце яшчэ раз або выкарыстоўвайце іншы метад.', form_password_length_too_short: 'Пароль занадта кароткі.', form_password_not_strong_enough: 'Ваш пароль недастаткова надзейны.', form_password_pwned: 'Гэты пароль быў узламаны і не можа быць выкарыстаны, паспрабуйце іншы пароль.', diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index b666678c4fa..cf84bc85f31 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -910,6 +910,8 @@ export const bgBG: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: 'Невалидна парола. Моля, опитайте отново.', + form_password_or_identifier_incorrect: + 'Паролата или имейл адресът е невалиден. Моля, опитайте отново или използвайте друг метод.', form_password_length_too_short: 'Паролата е твърде кратка. Моля, въведете поне 8 символа.', form_password_not_strong_enough: 'Паролата трябва да съдържа поне една главна буква, една цифра и един специален символ.', diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index c67cdb07c5f..cd3f794faea 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -916,6 +916,8 @@ export const bnIN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'লেখা মানটি অবৈধ। দয়া করে এটি সংশোধন করুন।', form_password_incorrect: 'আপনি যে পাসওয়ার্ড লিখেছেন তা ভুল। দয়া করে আবার চেষ্টা করুন।', + form_password_or_identifier_incorrect: + 'পাসওয়ার্ড বা ইমেইল ঠিকানা ভুল। আবার চেষ্টা করুন বা অন্য পদ্ধতি ব্যবহার করুন।', form_password_length_too_short: 'আপনার পাসওয়ার্ড খুব ছোট। এটি কমপক্ষে ৮ অক্ষর দীর্ঘ হতে হবে।', form_password_not_strong_enough: 'আপনার পাসওয়ার্ড যথেষ্ট শক্তিশালী নয়।', form_password_pwned: diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 7a35168bfa9..14eb86f9166 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -911,6 +911,8 @@ export const caES: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: 'La contrasenya introduïda és incorrecta.', + form_password_or_identifier_incorrect: + "La contrasenya o l'adreça de correu electrònic és incorrecta. Torna-ho a intentar o utilitza un altre mètode.", form_password_length_too_short: 'La teva contrasenya ha de tenir almenys 8 caràcters.', form_password_not_strong_enough: 'La teva contrasenya no és prou forta.', form_password_pwned: diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index b8b569c95ca..e8e2627bf3f 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -922,6 +922,8 @@ export const csCZ: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Tento parametr má neplatnou hodnotu.', form_password_incorrect: 'Heslo je nesprávné.', + form_password_or_identifier_incorrect: + 'Heslo nebo e-mailová adresa je nesprávná. Zkuste to znovu nebo použijte jinou metodu.', form_password_length_too_short: 'Heslo je příliš krátké.', form_password_not_strong_enough: 'Vaše heslo není dostatečně silné.', form_password_pwned: 'Toto heslo bylo nalezeno jako součást prolomení a nelze ho použít, zkuste prosím jiné heslo.', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 8a60c8f062c..812b7abff9e 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -908,6 +908,8 @@ export const daDK: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: 'Adgangskoden er forkert.', + form_password_or_identifier_incorrect: + 'Adgangskoden eller e-mailadressen er forkert. Prøv igen eller brug en anden metode.', form_password_length_too_short: 'Adgangskoden er for kort.', form_password_not_strong_enough: 'Adgangskoden er ikke stærk nok.', form_password_pwned: 'Adgangskoden er blevet kompromitteret.', diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 17679603d2e..0e0ccffed1a 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -927,6 +927,8 @@ export const deDE: LocalizationResource = { form_param_type_invalid__phone_number: 'Bitte geben Sie eine gültige Telefonnummer ein.', form_param_value_invalid: 'Der eingegebene Wert ist ungültig.', form_password_incorrect: 'Das eingegebene Passwort ist falsch.', + form_password_or_identifier_incorrect: + 'Passwort oder E-Mail-Adresse ist falsch. Versuchen Sie es erneut oder verwenden Sie eine andere Methode.', form_password_length_too_short: 'Das Passwort ist zu kurz. Es muss mindestens 8 Zeichen lang sein.', form_password_not_strong_enough: 'Passwort nicht stark genug.', form_password_pwned: diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index ddb4276807e..5e861d86ae4 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -913,6 +913,8 @@ export const elGR: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Ο κωδικός πρόσβασης ή η διεύθυνση email είναι λανθασμένη. Δοκιμάστε ξανά ή χρησιμοποιήστε άλλη μέθοδο.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Ο κωδικός πρόσβασής σας δεν είναι αρκετά ισχυρός.', form_password_pwned: diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index 166c4df9ff7..c340998cd8f 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -912,6 +912,7 @@ export const enGB: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'The value entered is invalid. Please correct it.', form_password_incorrect: 'The password you entered is incorrect. Please try again.', + form_password_or_identifier_incorrect: 'Password or email address is incorrect. Try again, or use another method.', form_password_length_too_short: 'Your password is too short. It must be at least 8 characters long.', form_password_not_strong_enough: 'Your password is not strong enough.', form_password_pwned: diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index f1107e8617d..a6507d49410 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -908,6 +908,7 @@ export const enUS: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: undefined, form_password_length_too_short: 'Your password is too short. It must be at least 8 characters long.', form_password_not_strong_enough: 'Your password is not strong enough.', form_password_pwned: diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 2a70709d379..82623ca0434 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -918,6 +918,8 @@ export const esCR: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Valor inválido', form_password_incorrect: 'Contraseña incorrecta.', + form_password_or_identifier_incorrect: + 'La contraseña o la dirección de correo electrónico es incorrecta. Inténtalo de nuevo o usa otro método.', form_password_length_too_short: 'La contraseña es muy corta.', form_password_not_strong_enough: 'La contraseña no es suficientemente segura.', form_password_pwned: diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index a5101b19e86..d68dfb5dd53 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -913,6 +913,8 @@ export const esES: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Valor inválido.', form_password_incorrect: 'Contraseña incorrecta.', + form_password_or_identifier_incorrect: + 'La contraseña o la dirección de correo electrónico es incorrecta. Inténtalo de nuevo o usa otro método.', form_password_length_too_short: 'La contraseña es demasiado corta.', form_password_not_strong_enough: 'Tu contraseña no es lo suficientemente fuerte.', form_password_pwned: 'Tu contraseña ha sido comprometida en una violación de seguridad.', diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 74368afe63b..7e637f8efab 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -919,6 +919,8 @@ export const esMX: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Valor inválido', form_password_incorrect: 'Contraseña incorrecta.', + form_password_or_identifier_incorrect: + 'La contraseña o la dirección de correo electrónico es incorrecta. Inténtalo de nuevo o usa otro método.', form_password_length_too_short: 'La contraseña es muy corta.', form_password_not_strong_enough: 'La contraseña no es suficientemente segura.', form_password_pwned: diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index a800464fb03..fa91ed641d6 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -918,6 +918,8 @@ export const esUY: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'El valor ingresado es inválido. Por favor, corregilo.', form_password_incorrect: 'La contraseña ingresada es incorrecta. Por favor, intentá de nuevo.', + form_password_or_identifier_incorrect: + 'La contraseña o la dirección de correo electrónico es incorrecta. Intentá de nuevo o usá otro método.', form_password_length_too_short: 'Tu contraseña es demasiado corta. Debe tener al menos 8 caracteres.', form_password_not_strong_enough: 'Tu contraseña no es lo suficientemente fuerte.', form_password_pwned: diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index d02d5a149dc..12a87c181a4 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -920,6 +920,8 @@ export const faIR: LocalizationResource = { form_param_type_invalid__phone_number: 'شماره تلفن باید یک رشته معتبر باشد.', form_param_value_invalid: 'مقدار پارامتر نامعتبر است.', form_password_incorrect: 'رمز عبور نادرست است.', + form_password_or_identifier_incorrect: + 'رمز عبور یا آدرس ایمیل نادرست است. دوباره تلاش کنید یا از روش دیگری استفاده کنید.', form_password_length_too_short: 'رمز عبور شما خیلی کوتاه است. باید حداقل ۸ کاراکتر داشته باشد.', form_password_not_strong_enough: 'رمز عبور شما به اندازه کافی قوی نیست.', form_password_pwned: diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index 02123dab25e..c7b5fe21aef 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -911,6 +911,8 @@ export const fiFI: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Salasana tai sähköpostiosoite on väärä. Yritä uudelleen tai käytä toista menetelmää.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Salasana ei ole riittävän vahva.', form_password_pwned: 'Salasana on ollut osallisena tietovuodossa. Valitse toinen salasana.', diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index a19d796c46b..888fcdba6f6 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -928,6 +928,8 @@ export const frFR: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'La valeur fournie est invalide.', form_password_incorrect: 'Mot de passe incorrect', + form_password_or_identifier_incorrect: + "Le mot de passe ou l'adresse e-mail est incorrect. Réessayez ou utilisez une autre méthode.", form_password_length_too_short: 'Votre mot de passe est trop court.', form_password_not_strong_enough: "Votre mot de passe n'est pas assez fort.", form_password_pwned: diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index fd5cc00e23d..f6d172b5a8d 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -899,6 +899,7 @@ export const heIL: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: 'הסיסמה או כתובת האימייל שגויים. נסה שוב או השתמש בשיטה אחרת.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'הסיסמה שלך אינה מספיק חזקה.', form_password_pwned: 'הסיסמה הזו נמצאה כחלק מהפרטים שנחשפו בהפרת נתונים ולא ניתן להשתמש בה, נסה סיסמה אחרת במקום.', diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 6d9fa386d9e..fc03ec70436 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -915,6 +915,8 @@ export const hiIN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'दर्ज किया गया मान अमान्य है। कृपया इसे सही करें।', form_password_incorrect: 'आपके द्वारा दर्ज किया गया पासवर्ड गलत है। कृपया पुनः प्रयास करें।', + form_password_or_identifier_incorrect: + 'पासवर्ड या ईमेल पता गलत है। कृपया पुनः प्रयास करें या किसी अन्य विधि का उपयोग करें।', form_password_length_too_short: 'आपका पासवर्ड बहुत छोटा है। इसमें कम से कम 8 अक्षर होने चाहिए।', form_password_not_strong_enough: 'आपका पासवर्ड पर्याप्त मजबूत नहीं है।', form_password_pwned: diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 379f95a1b2a..0efcf86e557 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -913,6 +913,8 @@ export const hrHR: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Lozinka ili e-mail adresa je netočna. Pokušajte ponovno ili koristite drugu metodu.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Vaša lozinka nije dovoljno jaka.', form_password_pwned: diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 1111a42c293..e23a873ef2a 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -909,6 +909,8 @@ export const huHU: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'A jelszó vagy az e-mail cím helytelen. Próbáld újra vagy használj másik módszert.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'A jelszó nem elég erős', form_password_pwned: diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index a26544203db..bea8ab4d855 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -916,6 +916,7 @@ export const idID: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: 'Kata sandi atau alamat email salah. Coba lagi atau gunakan metode lain.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Kata sandi Anda tidak cukup kuat.', form_password_pwned: diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index 7b40b3afd33..3eeebeddf04 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -912,6 +912,7 @@ export const isIS: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: 'Lykilorðið eða netfangið er rangt. Reyndu aftur eða notaðu aðra aðferð.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Lykilorðið þitt er ekki nógu sterkt.', form_password_pwned: diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 496afb2fa24..23ced4fcb76 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -918,6 +918,7 @@ export const itIT: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Valore non valido.', form_password_incorrect: 'Password errata.', + form_password_or_identifier_incorrect: "La password o l'indirizzo email è errato. Riprova o usa un altro metodo.", form_password_length_too_short: 'La password deve avere almeno 8 caratteri.', form_password_not_strong_enough: 'La tua password non è abbastanza forte.', form_password_pwned: 'Questa password è stata trovata in una violazione dei dati. Scegli una password diversa.', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 4456bf56493..a2541ddb36e 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -922,6 +922,8 @@ export const jaJP: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'パスワードまたはメールアドレスが正しくありません。もう一度お試しいただくか、別の方法をご利用ください。', form_password_length_too_short: 'パスワードが短すぎます。8文字以上である必要があります。', form_password_not_strong_enough: 'パスワードの強度が不十分です。', form_password_pwned: diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index dfe8e8ea0cf..836e2449cfc 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -900,6 +900,8 @@ export const kkKZ: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Енгізілген мән жарамсыз.', form_password_incorrect: 'Құпия сөз қате.', + form_password_or_identifier_incorrect: + 'Құпия сөз немесе электрондық пошта мекенжайы дұрыс емес. Қайталап көріңіз немесе басқа әдісті пайдаланыңыз.', form_password_length_too_short: 'Құпия сөз тым қысқа. Кемінде 8 таңба болуы керек.', form_password_not_strong_enough: 'Құпия сөз әлсіз.', form_password_pwned: 'Бұл құпия сөз қауіпсіздік бұзылуынан табылды. Басқа құпия сөзді қолданыңыз.', diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 3ec094af7ab..5e5b5942478 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -903,6 +903,8 @@ export const koKR: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + '비밀번호 또는 이메일 주소가 올바르지 않습니다. 다시 시도하거나 다른 방법을 사용하세요.', form_password_length_too_short: undefined, form_password_not_strong_enough: '비밀번호가 충분히 안전하지 않습니다.', form_password_pwned: '이 비밀번호는 유출사항이 발견되어 사용할 수 없으므로 대신 다른 비밀번호를 사용해 보세요.', diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 4b5d2eaa854..c6a49696b58 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -910,6 +910,8 @@ export const mnMN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: 'Нууц үг буруу байна.', + form_password_or_identifier_incorrect: + 'Нууц үг эсвэл имэйл хаяг буруу байна. Дахин оролдох эсвэл өөр арга ашиглана уу.', form_password_length_too_short: 'Нууц үгийн урт хэт богино байна.', form_password_not_strong_enough: 'Таны нууц үг хангалттай хүчтэй биш байна.', form_password_pwned: diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index c500c3301e6..97bd7493816 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -919,6 +919,8 @@ export const msMY: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Nilai yang dimasukkan tidak sah. Sila betulkannya.', form_password_incorrect: 'Kata laluan yang anda masukkan tidak betul. Sila cuba lagi.', + form_password_or_identifier_incorrect: + 'Kata laluan atau alamat e-mel tidak betul. Cuba lagi atau gunakan kaedah lain.', form_password_length_too_short: 'Kata laluan anda terlalu pendek. Ia mesti sekurang-kurangnya 8 aksara panjang.', form_password_not_strong_enough: 'Kata laluan anda tidak cukup kuat.', form_password_pwned: diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 0901ed53c5c..97541b6bba0 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -909,6 +909,8 @@ export const nbNO: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Passordet eller e-postadressen er feil. Prøv igjen eller bruk en annen metode.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Passordet ditt er ikke sterkt nok.', form_password_pwned: diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 83b9f5331ec..1526efe85fd 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -910,6 +910,8 @@ export const nlBE: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'De waarde die je hebt ingevoerd is ongeldig.', form_password_incorrect: 'Het wachtwoord is incorrect.', + form_password_or_identifier_incorrect: + 'Het wachtwoord of het e-mailadres is onjuist. Probeer het opnieuw of gebruik een andere methode.', form_password_length_too_short: 'Het wachtwoord is te kort.', form_password_not_strong_enough: 'Je wachtwoord is niet sterk genoeg.', form_password_pwned: 'Dit wachtwoord is in een datalek gevonden.', diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 8c0eed02f11..79f4b28e8d3 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -910,6 +910,8 @@ export const nlNL: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'De waarde die je hebt ingevoerd is ongeldig.', form_password_incorrect: 'Het wachtwoord is incorrect.', + form_password_or_identifier_incorrect: + 'Het wachtwoord of het e-mailadres is onjuist. Probeer het opnieuw of gebruik een andere methode.', form_password_length_too_short: 'Het wachtwoord is te kort.', form_password_not_strong_enough: 'Je wachtwoord is niet sterk genoeg.', form_password_pwned: 'Dit wachtwoord is in een datalek gevonden.', diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 8bee446184a..3f4a1dfb289 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -886,8 +886,8 @@ export const plPL: LocalizationResource = { actionLink: 'Wyloguj', actionText: 'Zalogowano jako {{identifier}}', }, - title: 'Zresetuj hasło', subtitle: undefined, + title: 'Zresetuj hasło', }, unstable__errors: { already_a_member_in_organization: '{{email}} jest już członkiem organizacji.', @@ -915,6 +915,8 @@ export const plPL: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Wprowadzona wartość jest nieprawidłowa. Popraw ją.', form_password_incorrect: 'Wprowadzone hasło jest nieprawidłowe. Spróbuj ponownie.', + form_password_or_identifier_incorrect: + 'Hasło lub adres e-mail jest nieprawidłowy. Spróbuj ponownie lub użyj innej metody.', form_password_length_too_short: 'Twoje hasło jest zbyt krótkie. Musi mieć co najmniej 8 znaków.', form_password_not_strong_enough: 'Twoje hasło nie jest wystarczająco silne', form_password_pwned: diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 9680da375d1..303b4314b5b 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -923,6 +923,8 @@ export const ptBR: LocalizationResource = { form_param_type_invalid__phone_number: 'Número de telefone inválido.', form_param_value_invalid: 'Valor inválido.', form_password_incorrect: 'Senha incorreta.', + form_password_or_identifier_incorrect: + 'A senha ou o endereço de e-mail está incorreto. Tente novamente ou use outro método.', form_password_length_too_short: 'Sua senha é muito curta. Por favor, tente novamente.', form_password_not_strong_enough: 'Sua senha não é forte o suficiente.', form_password_pwned: 'Esta senha foi comprometida e não pode ser usada, por favor, tente outra senha.', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 22411c395cb..79d227d727a 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -909,6 +909,8 @@ export const ptPT: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Valor de parâmetro inválido.', form_password_incorrect: 'Palavra-passe incorreta.', + form_password_or_identifier_incorrect: + 'A palavra-passe ou o endereço de e-mail está incorreto. Tente novamente ou use outro método.', form_password_length_too_short: 'A palavra-passe é muito curta.', form_password_not_strong_enough: 'A sua palavra-passe não é forte o suficiente.', form_password_pwned: diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 52d8dc4ee1e..5d0d991f23e 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -924,6 +924,8 @@ export const roRO: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Parola sau adresa de e-mail este incorectă. Încearcă din nou sau folosește o altă metodă.', form_password_length_too_short: 'Parola este prea scurtă. Trebuie să aibă cel puțin 8 caractere.', form_password_not_strong_enough: 'Parola ta nu este suficient de puternică.', form_password_pwned: diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 145cb75f0bc..b687513c062 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -924,6 +924,8 @@ export const ruRU: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Пароль или адрес электронной почты неверен. Попробуйте снова или используйте другой метод.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Ваш пароль недостаточно надежный.', form_password_pwned: 'Этот пароль был взломан и не может быть использован, попробуйте другой пароль.', diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 99d43462908..45e19ffb883 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -916,6 +916,8 @@ export const skSK: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Hodnota je neplatná. Skontrolujte a opravte.', form_password_incorrect: 'Heslo je nesprávne. Skontrolujte a skúste to znova.', + form_password_or_identifier_incorrect: + 'Heslo alebo e-mailová adresa je nesprávna. Skúste to znova alebo použite inú metódu.', form_password_length_too_short: 'Heslo musí mať aspoň 8 znakov.', form_password_not_strong_enough: 'Vaše heslo nie je dostatočne silné.', form_password_pwned: 'Toto heslo bolo nájdené v rámci úniku dát a nemôže byť použité, prosím zvoľte iné heslo.', diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 6d3ceb2e37c..9bfba7e317f 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -908,6 +908,8 @@ export const srRS: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: 'Lozinka je netačna.', + form_password_or_identifier_incorrect: + 'Лозинка или адреса е-поште је нетачна. Покушај поново или користи други метод.', form_password_length_too_short: 'Lozinka je prekratka.', form_password_not_strong_enough: 'Tvoja lozinka nije dovoljno jaka.', form_password_pwned: diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 0a1d90128b0..e80e5f4b907 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -913,6 +913,8 @@ export const svSE: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: 'Lösenordet är felaktigt.', + form_password_or_identifier_incorrect: + 'Lösenordet eller e-postadressen är felaktig. Försök igen eller använd en annan metod.', form_password_length_too_short: 'Lösenordet är för kort.', form_password_not_strong_enough: 'Ditt lösenord är inte tillräckligt starkt.', form_password_pwned: 'Lösenordet har läckt i tidigare dataintrång.', diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 637d25d71fe..5b2108e0434 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -917,6 +917,8 @@ export const taIN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'உள்ளிடப்பட்ட மதிப்பு தவறானது. அதை திருத்தவும்.', form_password_incorrect: 'நீங்கள் உள்ளிட்ட கடவுச்சொல் தவறானது. மீண்டும் முயற்சிக்கவும்.', + form_password_or_identifier_incorrect: + 'கடவுச்சொல் அல்லது மின்னஞ்சல் முகவரி தவறானது. மீண்டும் முயற்சிக்கவும் அல்லது வேறு முறையைப் பயன்படுத்தவும்.', form_password_length_too_short: 'உங்கள் கடவுச்சொல் மிகவும் குறுகியது. இது குறைந்தது 8 எழுத்துகள் நீளமாக இருக்க வேண்டும்.', form_password_not_strong_enough: 'உங்கள் கடவுச்சொல் போதுமான வலிமை இல்லை.', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index bb88625c7bc..1b9fa063325 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -917,6 +917,8 @@ export const teIN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'నమోదు చేసిన విలువ చెల్లనిది. దయచేసి దిద్దుబాటు చేయండి.', form_password_incorrect: 'మీరు నమోదు చేసిన పాస్‌వర్డ్ తప్పు. దయచేసి మళ్ళీ ప్రయత్నించండి.', + form_password_or_identifier_incorrect: + 'పాస్‌వర్డ్ లేదా ఇమెయిల్ చిరునామా తప్పు. దయచేసి మళ్ళీ ప్రయత్నించండి లేదా మరొక పద్ధతిని ఉపయోగించండి.', form_password_length_too_short: 'మీ పాస్‌వర్డ్ చాలా చిన్నది. ఇది కనీసం 8 అక్షరాల పొడవు ఉండాలి.', form_password_not_strong_enough: 'మీ పాస్‌వర్డ్ సరిపడా బలంగా లేదు.', form_password_pwned: diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 70ef99a6783..2772fdd3e90 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -910,6 +910,7 @@ export const thTH: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: 'รหัสผ่านหรือที่อยู่อีเมลไม่ถูกต้อง ลองอีกครั้งหรือใช้วิธีอื่น', form_password_length_too_short: 'รหัสผ่านของคุณสั้นเกินไป ต้องมีความยาวอย่างน้อย 8 ตัวอักษร', form_password_not_strong_enough: 'รหัสผ่านของคุณไม่แข็งแกร่งพอ', form_password_pwned: diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index f5f44384d9b..5c09e50bcef 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -912,6 +912,8 @@ export const trTR: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: 'Parametre değeri geçersiz.', form_password_incorrect: 'Şifre yanlış.', + form_password_or_identifier_incorrect: + 'Şifre veya e-posta adresi yanlış. Tekrar deneyin veya başka bir yöntem kullanın.', form_password_length_too_short: 'Şifre çok kısa.', form_password_not_strong_enough: 'Şifreniz yeterince güçlü değil.', form_password_pwned: 'Bu şifre bir veri ihlalinde tespit edildi ve kullanılamaz. Lütfen başka bir şifre deneyin.', diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 83b57c4d337..6c84a513afd 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -908,6 +908,8 @@ export const ukUA: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Пароль або адреса електронної пошти невірні. Спробуйте ще раз або використайте інший метод.', form_password_length_too_short: undefined, form_password_not_strong_enough: 'Ваш пароль недостатньо надійний.', form_password_pwned: 'Цей пароль було зламано і його не можна використовувати, спробуйте інший пароль.', diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index fc5773c2f35..f1c453c2fe0 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -917,6 +917,8 @@ export const viVN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: + 'Mật khẩu hoặc địa chỉ email không đúng. Vui lòng thử lại hoặc sử dụng phương thức khác.', form_password_length_too_short: 'Mật khẩu của bạn quá ngắn. Nó phải có ít nhất 8 ký tự.', form_password_not_strong_enough: 'Mật khẩu của bạn không đủ mạnh.', form_password_pwned: diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 7089f5fdf76..6bbea890431 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -895,6 +895,7 @@ export const zhCN: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: '密码或电子邮件地址不正确。请重试,或使用其他方法。', form_password_length_too_short: undefined, form_password_not_strong_enough: '您的密码强度不够。', form_password_pwned: '这个密码在数据泄露中被发现,不能使用,请换一个密码试试。', diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index a35b145f296..01f956f75f0 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -896,6 +896,7 @@ export const zhTW: LocalizationResource = { form_param_type_invalid__phone_number: undefined, form_param_value_invalid: undefined, form_password_incorrect: undefined, + form_password_or_identifier_incorrect: '密碼或電子郵件地址不正確。請重試,或使用其他方法。', form_password_length_too_short: undefined, form_password_not_strong_enough: '您的密碼強度不足。', form_password_pwned: '此密碼已在已知的資料外洩事件中出現,請改用其他密碼。', diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index a5d3ab96a6d..286f64b2bbf 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1354,6 +1354,7 @@ type UnstableErrors = WithParamName<{ form_param_nil: LocalizationValue; form_code_incorrect: LocalizationValue; form_password_incorrect: LocalizationValue; + form_password_or_identifier_incorrect: LocalizationValue; form_password_validation_failed: LocalizationValue; not_allowed_access: LocalizationValue; form_identifier_exists: LocalizationValue; From 175883b05228138c9ff55d0871cc1041bd68d7fe Mon Sep 17 00:00:00 2001 From: Robert Soriano Date: Wed, 10 Dec 2025 23:43:50 -0800 Subject: [PATCH 12/52] feat(localizations,shared): Add temporary email error localization key (#7436) --- .changeset/blue-walls-promise.md | 6 ++++++ packages/localizations/src/ar-SA.ts | 2 ++ packages/localizations/src/be-BY.ts | 2 ++ packages/localizations/src/bg-BG.ts | 2 ++ packages/localizations/src/bn-IN.ts | 2 ++ packages/localizations/src/ca-ES.ts | 2 ++ packages/localizations/src/cs-CZ.ts | 2 ++ packages/localizations/src/da-DK.ts | 2 ++ packages/localizations/src/de-DE.ts | 2 ++ packages/localizations/src/el-GR.ts | 2 ++ packages/localizations/src/en-GB.ts | 2 ++ packages/localizations/src/en-US.ts | 1 + packages/localizations/src/es-CR.ts | 2 ++ packages/localizations/src/es-ES.ts | 2 ++ packages/localizations/src/es-MX.ts | 2 ++ packages/localizations/src/es-UY.ts | 2 ++ packages/localizations/src/fa-IR.ts | 2 ++ packages/localizations/src/fi-FI.ts | 2 ++ packages/localizations/src/fr-FR.ts | 2 ++ packages/localizations/src/he-IL.ts | 2 ++ packages/localizations/src/hi-IN.ts | 2 ++ packages/localizations/src/hr-HR.ts | 2 ++ packages/localizations/src/hu-HU.ts | 2 ++ packages/localizations/src/id-ID.ts | 2 ++ packages/localizations/src/is-IS.ts | 2 ++ packages/localizations/src/it-IT.ts | 2 ++ packages/localizations/src/ja-JP.ts | 2 ++ packages/localizations/src/kk-KZ.ts | 2 ++ packages/localizations/src/ko-KR.ts | 2 ++ packages/localizations/src/mn-MN.ts | 2 ++ packages/localizations/src/ms-MY.ts | 2 ++ packages/localizations/src/nb-NO.ts | 2 ++ packages/localizations/src/nl-BE.ts | 2 ++ packages/localizations/src/nl-NL.ts | 2 ++ packages/localizations/src/pl-PL.ts | 2 ++ packages/localizations/src/pt-BR.ts | 2 ++ packages/localizations/src/pt-PT.ts | 2 ++ packages/localizations/src/ro-RO.ts | 2 ++ packages/localizations/src/ru-RU.ts | 2 ++ packages/localizations/src/sk-SK.ts | 2 ++ packages/localizations/src/sr-RS.ts | 2 ++ packages/localizations/src/sv-SE.ts | 2 ++ packages/localizations/src/ta-IN.ts | 2 ++ packages/localizations/src/te-IN.ts | 2 ++ packages/localizations/src/th-TH.ts | 1 + packages/localizations/src/tr-TR.ts | 2 ++ packages/localizations/src/uk-UA.ts | 2 ++ packages/localizations/src/vi-VN.ts | 2 ++ packages/localizations/src/zh-CN.ts | 1 + packages/localizations/src/zh-TW.ts | 1 + packages/shared/src/types/localization.ts | 1 + 51 files changed, 101 insertions(+) create mode 100644 .changeset/blue-walls-promise.md diff --git a/.changeset/blue-walls-promise.md b/.changeset/blue-walls-promise.md new file mode 100644 index 00000000000..3309217fb25 --- /dev/null +++ b/.changeset/blue-walls-promise.md @@ -0,0 +1,6 @@ +--- +"@clerk/localizations": patch +"@clerk/shared": patch +--- + +Added temporary email services support error localization key. diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index df7ac8e0171..ffc17b22900 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -890,6 +890,8 @@ export const arSA: LocalizationResource = { captcha_unavailable: 'التسجيل غير ناجح بسبب فشل التحقق من صحة الروبوت. يُرجى تحديث الصفحة للمحاولة مرة أخرى أو التواصل مع فريق الدعم للحصول على مزيد من المساعدة', form_code_incorrect: undefined, + form_email_address_blocked: + 'خدمات البريد الإلكتروني المؤقتة غير مدعومة. يرجى استخدام عنوان بريدك الإلكتروني العادي لإنشاء حساب.', form_identifier_exists__email_address: 'تم إستخدام البريد الإلكتروني هذا. يرجى المحاولة مرة أخرى', form_identifier_exists__phone_number: 'تم إستخدام رقم الهاتف هذا. يرجى المحاولة مرة أخرى', form_identifier_exists__username: 'تم إستخدام اسم المستخدمد هذا. يرجى المحاولة مرة أخرى', diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 5333bbcd84d..734af8b1fc8 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -899,6 +899,8 @@ export const beBY: LocalizationResource = { captcha_unavailable: 'Рэгістрацыя не ўдалася з-за памылак праверкі ботаў. Калі ласка, абнавіце старонку, каб паспрабаваць яшчэ раз або звяжыцеся са службай падтрымкі для атрымання дапамогі.', form_code_incorrect: 'Невядомы код. Пераканайцеся, што вы ўвялі правільны код.', + form_email_address_blocked: + 'Часовая пошта не падтрымліваецца. Калі ласка, выкарыстоўвайце свой звычайны адрас электроннай пошты для стварэння акаўнта.', form_identifier_exists__email_address: 'Гэты адрас электроннай пошты ўжо выкарыстоўваецца.', form_identifier_exists__phone_number: 'Гэты нумар тэлефона ўжо выкарыстоўваецца.', form_identifier_exists__username: 'Гэта імя ўжо занята.', diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index cf84bc85f31..17e5e80b117 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -893,6 +893,8 @@ export const bgBG: LocalizationResource = { captcha_invalid: undefined, captcha_unavailable: undefined, form_code_incorrect: 'Невалиден код. Моля, опитайте отново.', + form_email_address_blocked: + 'Временните имейл услуги не се поддържат. Моля, използвайте вашия обикновен имейл адрес, за да създадете акаунт.', form_identifier_exists__email_address: 'Този имейл адрес вече е регистриран.', form_identifier_exists__phone_number: 'Този телефонен номер вече е използван.', form_identifier_exists__username: 'Това потребителско име вече съществува.', diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index cd3f794faea..46af11fcc37 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -898,6 +898,8 @@ export const bnIN: LocalizationResource = { captcha_unavailable: 'বট যাচাইকরণ ব্যর্থ হওয়ার কারণে সাইন আপ ব্যর্থ হয়েছে। আবার চেষ্টা করতে দয়া করে পৃষ্ঠাটি রিফ্রেশ করুন বা আরও সাহায্যের জন্য সাপোর্টের সাথে যোগাযোগ করুন।', form_code_incorrect: undefined, + form_email_address_blocked: + 'অস্থায়ী ইমেইল পরিষেবাগুলি সমর্থিত নয়। অনুগ্রহ করে অ্যাকাউন্ট তৈরি করতে আপনার নিয়মিত ইমেইল ঠিকানা ব্যবহার করুন।', form_identifier_exists__email_address: 'এই ইমেইল ঠিকানা ব্যবহৃত হয়েছে। দয়া করে অন্য একটি ব্যবহার করুন।', form_identifier_exists__phone_number: 'এই ফোন নম্বর ব্যবহৃত হয়েছে। দয়া করে অন্য একটি ব্যবহার করুন।', form_identifier_exists__username: 'এই ব্যবহারকারীর নাম ব্যবহৃত হয়েছে। দয়া করে অন্য একটি ব্যবহার করুন।', diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 14eb86f9166..e828a51065c 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -894,6 +894,8 @@ export const caES: LocalizationResource = { captcha_unavailable: "El registre no ha estat exitós a causa de la validació fallida de bot. Si us plau, actualitza la pàgina per tornar-ho a intentar o posa't en contacte amb el suport per obtenir més assistència.", form_code_incorrect: 'El codi introduït no és vàlid. Si us plau, comprova el codi i torna-ho a intentar.', + form_email_address_blocked: + 'Els serveis de correu electrònic temporal no estan suportats. Si us plau, utilitzeu la vostra adreça de correu electrònic habitual per crear un compte.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index e8e2627bf3f..055b9aadc0c 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -905,6 +905,8 @@ export const csCZ: LocalizationResource = { captcha_unavailable: 'Registrace nebyla úspěšná kvůli neúspěšné validaci bota. Prosím obnovte stránku a zkuste to znovu, nebo se obraťte na podporu pro další pomoc.', form_code_incorrect: 'Kód je nesprávný.', + form_email_address_blocked: + 'Dočasné e-mailové služby nejsou podporovány. Pro vytvoření účtu použijte prosím svou běžnou e-mailovou adresu.', form_identifier_exists__email_address: 'Tato emailová adresa již byla použita.', form_identifier_exists__phone_number: 'Toto telefonní číslo již bylo použito.', form_identifier_exists__username: 'Toto uživatelské jméno již bylo použito.', diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 812b7abff9e..fb7bd5fa591 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -891,6 +891,8 @@ export const daDK: LocalizationResource = { captcha_unavailable: 'Tilmelding mislykkedes på grund af fejlet botvalidering. Opdater siden for at prøve igen, eller kontakt support for yderligere assistance.', form_code_incorrect: 'Koden er forkert.', + form_email_address_blocked: + 'Midlertidige e-mailtjenester understøttes ikke. Brug venligst din almindelige e-mailadresse til at oprette en konto.', form_identifier_exists__email_address: 'E-mailadressen er allerede i brug.', form_identifier_exists__phone_number: 'Telefonnummeret er allerede i brug.', form_identifier_exists__username: 'Brugernavnet er allerede i brug.', diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 0e0ccffed1a..031959e4316 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -910,6 +910,8 @@ export const deDE: LocalizationResource = { captcha_unavailable: 'Die Anmeldung ist aufgrund einer fehlgeschlagenen Bot-Validierung fehlgeschlagen. Bitte aktualisieren Sie die Seite, um es erneut zu versuchen, oder wenden Sie sich an den Support, um weitere Unterstützung zu erhalten.', form_code_incorrect: 'Der eingegebene Code ist falsch. Bitte überprüfen Sie ihn und versuchen Sie es erneut.', + form_email_address_blocked: + 'Temporäre E-Mail-Dienste werden nicht unterstützt. Bitte verwenden Sie Ihre reguläre E-Mail-Adresse, um ein Konto zu erstellen.', form_identifier_exists__email_address: 'Diese E-Mail-Adresse ist bereits vergeben. Bitte wählen Sie eine andere.', form_identifier_exists__phone_number: 'Diese Telefonnummer ist bereits vergeben. Bitte wählen Sie eine andere.', form_identifier_exists__username: 'Dieser Benutzername ist bereits vergeben. Bitte wählen Sie einen anderen.', diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 5e861d86ae4..681ffd69b16 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -896,6 +896,8 @@ export const elGR: LocalizationResource = { captcha_unavailable: 'Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Οι προσωρινές υπηρεσίες email δεν υποστηρίζονται. Παρακαλώ χρησιμοποιήστε τη συνηθισμένη διεύθυνση email σας για να δημιουργήσετε λογαριασμό.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index c340998cd8f..6e817a811f0 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -895,6 +895,8 @@ export const enGB: LocalizationResource = { captcha_unavailable: 'Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Temporary email services are not supported. Please use your regular email address to create an account.', form_identifier_exists__email_address: 'This email address is taken. Please try another.', form_identifier_exists__phone_number: 'This phone number is taken. Please try another.', form_identifier_exists__username: 'This username is taken. Please try another.', diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index a6507d49410..069a26ca67a 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -891,6 +891,7 @@ export const enUS: LocalizationResource = { captcha_unavailable: 'Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.', form_code_incorrect: undefined, + form_email_address_blocked: undefined, form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 82623ca0434..bdc5826cbf9 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -901,6 +901,8 @@ export const esCR: LocalizationResource = { captcha_unavailable: 'El registro falló debido a fallos en la validación de robot. Por favor, recarga la página o contáctanos para obtener más asistencia.', form_code_incorrect: 'Código incorrecto.', + form_email_address_blocked: + 'Los servicios de correo electrónico temporal no están soportados. Por favor, use su dirección de correo electrónico regular para crear una cuenta.', form_identifier_exists__email_address: 'El correo electrónico ya existe', form_identifier_exists__phone_number: 'El número telefónico ya existe.', form_identifier_exists__username: 'El nombre de usuario ya existe.', diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index d68dfb5dd53..81cc2daebe8 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -895,6 +895,8 @@ export const esES: LocalizationResource = { captcha_unavailable: 'Registro fallido debido a una validación de bot fallida. Por favor, actualice la página para intentarlo de nuevo o comuníquese con el soporte para más asistencia.', form_code_incorrect: 'El código ingresado es incorrecto.', + form_email_address_blocked: + 'Los servicios de correo electrónico temporal no están soportados. Por favor, use su dirección de correo electrónico regular para crear una cuenta.', form_identifier_exists__email_address: 'Ya existe una cuenta con esta dirección de correo electrónico.', form_identifier_exists__phone_number: 'Ya existe una cuenta con este número de teléfono.', form_identifier_exists__username: 'Ya existe una cuenta con este nombre de usuario.', diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 7e637f8efab..29e6fe807c4 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -902,6 +902,8 @@ export const esMX: LocalizationResource = { captcha_unavailable: 'El registro falló debido a fallos en la validación de robot. Por favor, recarga la página o contáctanos para obtener más asistencia.', form_code_incorrect: 'Código incorrecto.', + form_email_address_blocked: + 'Los servicios de correo electrónico temporal no están soportados. Por favor, use su dirección de correo electrónico regular para crear una cuenta.', form_identifier_exists__email_address: 'El correo electrónico ya existe', form_identifier_exists__phone_number: 'El número telefónico ya existe.', form_identifier_exists__username: 'El nombre de usuario ya existe.', diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index fa91ed641d6..afc8d3f8bf1 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -901,6 +901,8 @@ export const esUY: LocalizationResource = { captcha_unavailable: 'El registro no se pudo completar debido a la validación fallida contra bots. Por favor, actualizá la página para intentarlo de nuevo o contactá al soporte para más asistencia.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Los servicios de correo electrónico temporal no están soportados. Por favor, use su dirección de correo electrónico regular para crear una cuenta.', form_identifier_exists__email_address: 'Este correo electrónico ya está en uso. Por favor, probá con otro.', form_identifier_exists__phone_number: 'Este número de teléfono ya está en uso. Por favor, probá con otro.', form_identifier_exists__username: 'Este nombre de usuario ya está en uso. Por favor, probá con otro.', diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 12a87c181a4..cdc7b5f7f53 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -903,6 +903,8 @@ export const faIR: LocalizationResource = { captcha_unavailable: 'به دلیل عدم موفقیت در اعتبارسنجی ربات، ثبت نام ناموفق بود. لطفاً برای امتحان مجدد، صفحه را رفرش کنید یا برای راهنمایی بیشتر با پشتیبانی تماس بگیرید.', form_code_incorrect: 'کد وارد شده نادرست است.', + form_email_address_blocked: + 'سرویس‌های ایمیل موقت پشتیبانی نمی‌شوند. لطفاً از آدرس ایمیل معمولی خود برای ایجاد حساب استفاده کنید.', form_identifier_exists__email_address: 'این آدرس ایمیل قبلاً استفاده شده است.', form_identifier_exists__phone_number: 'این شماره تلفن قبلاً استفاده شده است.', form_identifier_exists__username: 'این نام کاربری قبلاً گرفته شده است.', diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index c7b5fe21aef..5120484776b 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -894,6 +894,8 @@ export const fiFI: LocalizationResource = { captcha_unavailable: 'Rekisteröityminen epäonnistui, koska botin vahvistus epäonnistui. Päivitä sivu ja yritä uudelleen tai ota yhteyttä tukeen.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Väliaikaiset sähköpostipalvelut eivät ole tuettuja. Käytä tavallista sähköpostiosoitetta tilin luomiseen.', form_identifier_exists__email_address: 'Tämä sähköpostiosoite on jo käytössä. Kokeile toista.', form_identifier_exists__phone_number: 'Tämä puhelinnumero on jo käytössä. Kokeile toista.', form_identifier_exists__username: 'Tämä käyttäjänimi on jo käytössä. Kokeile toista.', diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 888fcdba6f6..d9a0354f8ca 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -911,6 +911,8 @@ export const frFR: LocalizationResource = { captcha_unavailable: "Inscription échouée en raison d'une validation de captcha non réussie. Veuillez actualiser la page pour réessayer ou contacter le support pour obtenir de l'aide.", form_code_incorrect: 'Code incorrect', + form_email_address_blocked: + 'Les services de messagerie temporaire ne sont pas pris en charge. Veuillez utiliser votre adresse e-mail habituelle pour créer un compte.', form_identifier_exists__email_address: 'Cette adresse e-mail existe déjà.', form_identifier_exists__phone_number: 'Ce numéro de téléphone existe déjà.', form_identifier_exists__username: "Ce nom d'utilisateur existe déjà.", diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index f6d172b5a8d..bdedef60375 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -882,6 +882,8 @@ export const heIL: LocalizationResource = { captcha_invalid: 'ההרשמה נכשלה עקב כשל באימות האבטחה. אנא רענן את הדף ונסה שוב, או פנה לתמיכה לעזרה נוספת.', captcha_unavailable: 'ההרשמה נכשלה עקב כשל באימות נגד בוטים. אנא רענן את הדף ונסה שוב, או פנה לתמיכה לעזרה נוספת.', form_code_incorrect: undefined, + form_email_address_blocked: + 'שירותי אימייל זמניים אינם נתמכים. אנא השתמש בכתובת האימייל הרגילה שלך כדי ליצור חשבון.', form_identifier_exists__email_address: 'כתובת המייל הזאת כבר תפוסה. אנא נסה אחרת.', form_identifier_exists__phone_number: 'מספר הטלפון הזה כבר תפוס. אנא נסה מספר אחר.', form_identifier_exists__username: 'שם המשתמש הזה כבר תפוס. אנא נסה שם משתמש אחר', diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index fc03ec70436..8306e00511a 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -898,6 +898,8 @@ export const hiIN: LocalizationResource = { captcha_unavailable: 'असफल बॉट सत्यापन के कारण साइन अप असफल रहा। पुनः प्रयास करने के लिए कृपया पृष्ठ को रिफ्रेश करें या अधिक सहायता के लिए सपोर्ट से संपर्क करें।', form_code_incorrect: undefined, + form_email_address_blocked: + 'अस्थायी ईमेल सेवाएं समर्थित नहीं हैं। कृपया खाता बनाने के लिए अपना नियमित ईमेल पता उपयोग करें।', form_identifier_exists__email_address: 'यह ईमेल पता पहले से लिया गया है। कृपया दूसरा प्रयास करें।', form_identifier_exists__phone_number: 'यह फोन नंबर पहले से लिया गया है। कृपया दूसरा प्रयास करें।', form_identifier_exists__username: 'यह उपयोगकर्ता नाम पहले से लिया गया है। कृपया दूसरा प्रयास करें।', diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 0efcf86e557..8456a871826 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -896,6 +896,8 @@ export const hrHR: LocalizationResource = { captcha_unavailable: 'Registracija neuspješna zbog neuspjele provjere bota. Molimo osvježite stranicu i pokušajte ponovno ili se obratite podršci za dodatnu pomoć.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Privremene e-mail usluge nisu podržane. Molimo koristite svoju redovitu e-mail adresu za kreiranje računa.', form_identifier_exists__email_address: 'Ova e-mail adresa je zauzeta. Molimo pokušajte s drugom.', form_identifier_exists__phone_number: 'Ovaj telefonski broj je zauzet. Molimo pokušajte s drugim.', form_identifier_exists__username: 'Ovo korisničko ime je zauzeto. Molimo pokušajte s drugim.', diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index e23a873ef2a..d436b117311 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -892,6 +892,8 @@ export const huHU: LocalizationResource = { captcha_unavailable: 'Bot érvényesítése miatt, a regisztráció sikertelen volt. Kérlek frissítsd az oldalt, hogy újra próbálhasd, vagy kérj támogatást.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Az ideiglenes e-mail szolgáltatások nem támogatottak. Kérlek, használd a szokásos e-mail címedet a fiók létrehozásához.', form_identifier_exists__email_address: 'Ez az email cím már foglalt. Kérlek próbálj egy másikat.', form_identifier_exists__phone_number: 'Ez a telefonszám már foglalt. Kérlek próbálj egy másikat.', form_identifier_exists__username: 'Ez a felhasználónév már foglalt. Kérlek próbálj egy másikat.', diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index bea8ab4d855..eac152700a3 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -899,6 +899,8 @@ export const idID: LocalizationResource = { captcha_unavailable: 'Pendaftaran gagal karena validasi bot gagal. Silakan muat ulang halaman untuk mencoba lagi atau hubungi dukungan untuk bantuan lebih lanjut.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Layanan email sementara tidak didukung. Silakan gunakan alamat email reguler Anda untuk membuat akun.', form_identifier_exists__email_address: 'Alamat email ini sudah digunakan. Silakan coba yang lain.', form_identifier_exists__phone_number: 'Nomor telepon ini sudah digunakan. Silakan coba yang lain.', form_identifier_exists__username: 'Nama pengguna ini sudah digunakan. Silakan coba yang lain.', diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index 3eeebeddf04..7c09ea1da76 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -895,6 +895,8 @@ export const isIS: LocalizationResource = { captcha_unavailable: 'Skráning mistókst vegna misheppnaðrar vélmenna staðfestingar. Vinsamlegast endurhlaðið síðuna til að reyna aftur eða hafið samband við stuðning til að fá frekari aðstoð.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Tímabundin tölvupóstþjónusta er ekki studd. Vinsamlegast notaðu venjulega netfangið þitt til að búa til reikning.', form_identifier_exists__email_address: 'Þetta netfang er þegar í notkun. Vinsamlegast reyndu annað.', form_identifier_exists__phone_number: 'Þetta símanúmer er þegar í notkun. Vinsamlegast reyndu annað.', form_identifier_exists__username: 'Þetta notendanafn er þegar í notkun. Vinsamlegast reyndu annað.', diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 23ced4fcb76..2accdf761a6 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -901,6 +901,8 @@ export const itIT: LocalizationResource = { captcha_unavailable: 'Registrazione non riuscita a causa della convalida del bot non riuscita. Per favore, ricarica la pagina e riprova o contatta il supporto per ulteriore assistenza.', form_code_incorrect: 'Il codice inserito non è corretto. Riprova.', + form_email_address_blocked: + 'I servizi di posta elettronica temporanea non sono supportati. Si prega di utilizzare il proprio indirizzo email normale per creare un account.', form_identifier_exists__email_address: 'Questa email è già registrata.', form_identifier_exists__phone_number: 'Questo numero di telefono è già registrato.', form_identifier_exists__username: 'Questo username è già in uso.', diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index a2541ddb36e..ad78d071164 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -905,6 +905,8 @@ export const jaJP: LocalizationResource = { captcha_unavailable: 'ボット検証に失敗したため、サインアップに失敗しました。ページを更新して再試行するか、サポートに連絡してさらに支援を受けてください。', form_code_incorrect: undefined, + form_email_address_blocked: + '一時的なメールサービスはサポートされていません。アカウントを作成するには、通常のメールアドレスを使用してください。', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 836e2449cfc..f0cf044c371 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -883,6 +883,8 @@ export const kkKZ: LocalizationResource = { captcha_invalid: 'Қауіпсіздік тексерілуі сәтсіз аяқталды. Браузерді өзгерту немесе кеңейтулерді өшіруге тырысыңыз.', captcha_unavailable: 'Бот тексерілуі сәтсіз аяқталды. Бетті жаңартып немесе қолдау қызметіне хабарласыңыз.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Уақытша электрондық пошта қызметтері қолдау көрсетілмейді. Есептік жазбаны жасау үшін кәдімгі электрондық пошта мекенжайыңызды пайдаланыңыз.', form_identifier_exists__email_address: 'Бұл электрондық пошта тіркелген. Басқасын қолданыңыз.', form_identifier_exists__phone_number: 'Бұл телефон нөмірі тіркелген. Басқасын қолданыңыз.', form_identifier_exists__username: 'Бұл пайдаланушы аты тіркелген. Басқасын қолданыңыз.', diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 5e5b5942478..9ded1c68f28 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -886,6 +886,8 @@ export const koKR: LocalizationResource = { captcha_unavailable: 'Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.', form_code_incorrect: undefined, + form_email_address_blocked: + '임시 이메일 서비스는 지원되지 않습니다. 계정을 만들려면 일반 이메일 주소를 사용해 주세요.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index c6a49696b58..f1dc6826445 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -893,6 +893,8 @@ export const mnMN: LocalizationResource = { captcha_unavailable: 'Ботын баталгаажуулалт амжилтгүй болсны улмаас бүртгүүлж чадсангүй. Дахин оролдохын тулд хуудсыг сэргээнэ үү эсвэл нэмэлт тусламж авахын тулд тусламж авахаар холбогдоно уу.', form_code_incorrect: 'Маягтын код буруу байна', + form_email_address_blocked: + 'Түр зуурын имэйл үйлчилгээг дэмжихгүй. Данс үүсгэхийн тулд ердийн имэйл хаягаа ашиглана уу.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 97bd7493816..13e3c18ad20 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -901,6 +901,8 @@ export const msMY: LocalizationResource = { captcha_unavailable: 'Pendaftaran tidak berjaya kerana pengesahan bot gagal. Sila muat semula halaman untuk mencuba lagi atau hubungi sokongan untuk bantuan lebih lanjut.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Perkhidmatan e-mel sementara tidak disokong. Sila gunakan alamat e-mel biasa anda untuk membuat akaun.', form_identifier_exists__email_address: 'Alamat e-mel ini telah diambil. Sila cuba yang lain.', form_identifier_exists__phone_number: 'Nombor telefon ini telah diambil. Sila cuba yang lain.', form_identifier_exists__username: 'Nama pengguna ini telah diambil. Sila cuba yang lain.', diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 97541b6bba0..41c239013ac 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -892,6 +892,8 @@ export const nbNO: LocalizationResource = { captcha_unavailable: 'Registreringen mislyktes på grunn av mislykkede bot-valideringer. Vennligst oppdater siden og prøv igjen, eller ta kontakt med brukerstøtte for mer hjelp.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Midlertidige e-posttjenester støttes ikke. Vennligst bruk din vanlige e-postadresse for å opprette en konto.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 1526efe85fd..0e24ba0af9a 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -893,6 +893,8 @@ export const nlBE: LocalizationResource = { captcha_unavailable: 'Aanmelding mislukt vanwege mislukte botvalidatie. Vernieuw de pagina om het opnieuw te proberen of neem contact op met de ondersteuning voor verdere hulp.', form_code_incorrect: 'De ingevoerde code is incorrect.', + form_email_address_blocked: + 'Tijdelijke e-maildiensten worden niet ondersteund. Gebruik uw normale e-mailadres om een account aan te maken.', form_identifier_exists__email_address: 'Dit e-mailadres is al in gebruik.', form_identifier_exists__phone_number: 'Dit telefoonnummer is al in gebruik.', form_identifier_exists__username: 'Deze gebruikersnaam is al in gebruik.', diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 79f4b28e8d3..273cb71cd1a 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -893,6 +893,8 @@ export const nlNL: LocalizationResource = { captcha_unavailable: 'Aanmelding mislukt vanwege mislukte botvalidatie. Vernieuw de pagina om het opnieuw te proberen of neem contact op met de ondersteuning voor verdere hulp.', form_code_incorrect: 'De ingevoerde code is incorrect.', + form_email_address_blocked: + 'Tijdelijke e-maildiensten worden niet ondersteund. Gebruik uw normale e-mailadres om een account aan te maken.', form_identifier_exists__email_address: 'Dit e-mailadres is al in gebruik.', form_identifier_exists__phone_number: 'Dit telefoonnummer is al in gebruik.', form_identifier_exists__username: 'Deze gebruikersnaam is al in gebruik.', diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 3f4a1dfb289..76a7bafda05 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -898,6 +898,8 @@ export const plPL: LocalizationResource = { captcha_unavailable: 'Rejestracja nie powiodła się z powodu niedostępności weryfikacji botów. Odśwież stronę, aby spróbować ponownie lub skontaktuj się z pomocą, aby uzyskać wsparcie.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Tymczasowe usługi e-mail nie są obsługiwane. Proszę użyć zwykłego adresu e-mail, aby utworzyć konto.', form_identifier_exists__email_address: 'Adres e-mail jest już zajęty. Proszę spróbować innego.', form_identifier_exists__phone_number: 'Ten numer telefonu jest zajęty. Spróbuj użyć innego.', form_identifier_exists__username: 'Ta nazwa użytkownika jest zajęta. Spróbuj użyć innej.', diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 303b4314b5b..9a43513dbc7 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -906,6 +906,8 @@ export const ptBR: LocalizationResource = { captcha_unavailable: 'Não foi possível se inscrever devido à indisponibilidade do captcha. Por favor atualize a página para tentar novamente ou entre em contato com o suporte para obter mais ajuda.', form_code_incorrect: 'Código incorreto.', + form_email_address_blocked: + 'Serviços de e-mail temporários não são suportados. Por favor, use seu endereço de e-mail regular para criar uma conta.', form_identifier_exists__email_address: 'E-mail já está em uso. Por favor, tente outro.', form_identifier_exists__phone_number: 'Telefone já está em uso. Por favor, tente outro.', form_identifier_exists__username: 'Nome de usuário já está em uso. Por favor, tente outro.', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 79d227d727a..766cde5466d 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -892,6 +892,8 @@ export const ptPT: LocalizationResource = { captcha_unavailable: 'Inscrição mal-sucedida devido a falha na validação de bot. Por favor, atualize a página para tentar novamente ou entre em contato com o suporte para obter mais ajuda.', form_code_incorrect: 'Código incorreto.', + form_email_address_blocked: + 'Serviços de e-mail temporários não são suportados. Por favor, use o seu endereço de e-mail regular para criar uma conta.', form_identifier_exists__email_address: 'O endereço de e-mail já está em uso.', form_identifier_exists__phone_number: 'O número de telemóvel já está em uso.', form_identifier_exists__username: 'O nome de utilizador já está em uso.', diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 5d0d991f23e..0cc29a124c7 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -907,6 +907,8 @@ export const roRO: LocalizationResource = { captcha_unavailable: 'Înregistrarea a eșuat din cauza validării anti-bot. Reîmprospătează pagina sau contactează suportul.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Serviciile de e-mail temporare nu sunt acceptate. Vă rugăm să folosiți adresa dvs. de e-mail obișnuită pentru a crea un cont.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index b687513c062..a968facb8e7 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -907,6 +907,8 @@ export const ruRU: LocalizationResource = { captcha_unavailable: 'Регистрация не удалась из-за неудачной проверки бота. Пожалуйста, обновите страницу, чтобы попробовать снова, или обратитесь в службу поддержки для получения дополнительной помощи.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Временные почтовые службы не поддерживаются. Пожалуйста, используйте свой обычный адрес электронной почты для создания аккаунта.', form_identifier_exists__email_address: 'Этот адрес электронной почты уже занят. Пожалуйста, попробуйте другой.', form_identifier_exists__phone_number: 'Этот номер телефона уже занят. Пожалуйста, попробуйте другой.', form_identifier_exists__username: 'Это имя пользователя уже занято. Пожалуйста, попробуйте другое.', diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 45e19ffb883..7df1c60ce41 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -899,6 +899,8 @@ export const skSK: LocalizationResource = { captcha_unavailable: 'Registrácia zlyhala z dôvodu neúspešného overenia proti botom. Obnovte stránku a skúste to znova alebo kontaktujte podporu pre ďalšiu pomoc.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Dočasné e-mailové služby nie sú podporované. Prosím, použite svoju bežnú e-mailovú adresu na vytvorenie účtu.', form_identifier_exists__email_address: 'Táto emailová adresa je už obsadená. Skúste prosím inú.', form_identifier_exists__phone_number: 'Toto telefónne číslo je už obsadené. Skúste prosím iné.', form_identifier_exists__username: 'Táto použivateľské meno je už obsadené. Skúste prosím iné.', diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index 9bfba7e317f..45a20964aa2 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -891,6 +891,8 @@ export const srRS: LocalizationResource = { captcha_unavailable: 'Registracija neuspešna zbog neuspelog proveravanja bota. Osveži stranicu da pokušaš ponovo ili se obrati podršci za više pomoći.', form_code_incorrect: 'Uneti kod je netačan.', + form_email_address_blocked: + 'Привремене е-поште услуге нису подржане. Молимо користите своју редовну адресу е-поште за креирање налога.', form_identifier_exists__email_address: 'Ova e-mail adresa je zauzeta. Molimo pokušaj sa drugom.', form_identifier_exists__phone_number: 'Ovaj telefonski broj je zauzet. Molimo pokušaj sa drugim.', form_identifier_exists__username: 'Ovo korisničko ime je zauzeto. Molimo pokušaj sa drugim.', diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index e80e5f4b907..0a033b03a1f 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -896,6 +896,8 @@ export const svSE: LocalizationResource = { captcha_unavailable: 'Registrering misslyckades på grund av misslyckad bot-validering. Vänligen uppdatera sidan och försök igen eller kontakta supporten för mer hjälp.', form_code_incorrect: 'Koden är felaktig', + form_email_address_blocked: + 'Tillfälliga e-posttjänster stöds inte. Använd din vanliga e-postadress för att skapa ett konto.', form_identifier_exists__email_address: 'Denna e-postadress är taget. Vänligen prova ett annat.', form_identifier_exists__phone_number: 'Detta telefonnummer är taget. Vänligen prova ett annat.', form_identifier_exists__username: 'Detta användarnamn är taget. Vänligen prova ett annat.', diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 5b2108e0434..1875a367553 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -900,6 +900,8 @@ export const taIN: LocalizationResource = { captcha_unavailable: 'போட் சரிபார்ப்பு தோல்வியடைந்ததால் பதிவு செய்ய முடியவில்லை. மீண்டும் முயற்சிக்க பக்கத்தை புதுப்பிக்கவும் அல்லது மேலும் உதவிக்கு ஆதரவை தொடர்பு கொள்ளவும்.', form_code_incorrect: undefined, + form_email_address_blocked: + 'தற்காலிக மின்னஞ்சல் சேவைகள் ஆதரிக்கப்படவில்லை. கணக்கை உருவாக்க உங்கள் வழக்கமான மின்னஞ்சல் முகவரியைப் பயன்படுத்தவும்.', form_identifier_exists__email_address: 'இந்த மின்னஞ்சல் முகவரி எடுக்கப்பட்டுள்ளது. வேறொன்றை முயற்சிக்கவும்.', form_identifier_exists__phone_number: 'இந்த தொலைபேசி எண் எடுக்கப்பட்டுள்ளது. வேறொன்றை முயற்சிக்கவும்.', form_identifier_exists__username: 'இந்த பயனர்பெயர் எடுக்கப்பட்டுள்ளது. வேறொன்றை முயற்சிக்கவும்.', diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 1b9fa063325..82710f7f1c0 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -900,6 +900,8 @@ export const teIN: LocalizationResource = { captcha_unavailable: 'బాట్ ధృవీకరణ విఫలమైనందున సైన్ అప్ విజయవంతం కాలేదు. మళ్ళీ ప్రయత్నించడానికి దయచేసి పేజీని రిఫ్రెష్ చేయండి లేదా మరింత సహాయం కోసం మద్దతును సంప్రదించండి.', form_code_incorrect: undefined, + form_email_address_blocked: + 'తాత్కాలిక ఇమెయిల్ సేవలు మద్దతు లేవు. దయచేసి ఖాతాను సృష్టించడానికి మీ సాధారణ ఇమెయిల్ చిరునామాను ఉపయోగించండి.', form_identifier_exists__email_address: 'ఈ ఇమెయిల్ చిరునామా తీసుకోబడింది. దయచేసి మరొకదాన్ని ప్రయత్నించండి.', form_identifier_exists__phone_number: 'ఈ ఫోన్ నంబర్ తీసుకోబడింది. దయచేసి మరొకదాన్ని ప్రయత్నించండి.', form_identifier_exists__username: 'ఈ వినియోగదారు పేరు తీసుకోబడింది. దయచేసి మరొకదాన్ని ప్రయత్నించండి.', diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 2772fdd3e90..b3d5de3ea16 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -893,6 +893,7 @@ export const thTH: LocalizationResource = { captcha_unavailable: 'การสมัครสมาชิกไม่สำเร็จเนื่องจากการตรวจสอบความปลอดถัยล้มเหลว โปรดรีเฟรชหน้าเพื่อลองใหม่หรือติดต่อฝ่ายสนับสนุนเพื่อขอความช่วยเหลือเพิ่มเติม', form_code_incorrect: undefined, + form_email_address_blocked: 'บริการอีเมลชั่วคราวไม่ได้รับการสนับสนุน กรุณาใช้อีเมลปกติของคุณเพื่อสร้างบัญชี', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 5c09e50bcef..5c20b0c5993 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -895,6 +895,8 @@ export const trTR: LocalizationResource = { captcha_unavailable: 'Bot doğrulaması başarısız olduğu için kayıt yapılamadı. Lütfen tekrar denemek için sayfayı yenileyin veya daha fazla yardım için destek ekibi ile iletişime geçin.', form_code_incorrect: 'Hatalı kod.', + form_email_address_blocked: + 'Geçici e-posta hizmetleri desteklenmemektedir. Lütfen hesap oluşturmak için normal e-posta adresinizi kullanın.', form_identifier_exists__email_address: 'Bu e-posta adresi zaten kullanılıyor.', form_identifier_exists__phone_number: 'Bu telefon numarası zaten kullanılıyor.', form_identifier_exists__username: 'Bu kullanıcı adı zaten kullanılıyor.', diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 6c84a513afd..77c697a527a 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -891,6 +891,8 @@ export const ukUA: LocalizationResource = { captcha_unavailable: 'Sign up unsuccessful due to failed bot validation. Please refresh the page to try again or reach out to support for more assistance.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Тимчасові поштові служби не підтримуються. Будь ласка, використовуйте свою звичайну адресу електронної пошти для створення облікового запису.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index f1c453c2fe0..b0da0a9dc37 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -900,6 +900,8 @@ export const viVN: LocalizationResource = { captcha_unavailable: 'Đăng ký không thành công do lỗi bot. Vui lòng tải lại trang để thử lại hoặc liên hệ hỗ trợ để được hỗ trợ.', form_code_incorrect: undefined, + form_email_address_blocked: + 'Các dịch vụ email tạm thời không được hỗ trợ. Vui lòng sử dụng địa chỉ email thông thường của bạn để tạo tài khoản.', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 6bbea890431..84c3abf358e 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -878,6 +878,7 @@ export const zhCN: LocalizationResource = { captcha_invalid: '由于安全验证失败,注册未成功。请刷新页面重试或联系支持获取更多帮助。', captcha_unavailable: '注册失败,原因是未通过机器人验证。请刷新页面重试或联系支持团队以获取更多帮助。', form_code_incorrect: undefined, + form_email_address_blocked: '不支持临时电子邮件服务。请使用您的常规电子邮件地址创建账户。', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 01f956f75f0..96328ff3d36 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -879,6 +879,7 @@ export const zhTW: LocalizationResource = { captcha_invalid: '由於安全驗證失敗,註冊未成功。請重新整理頁面再試一次,或聯絡支援以取得協助。', captcha_unavailable: '由於機器人驗證失敗導致註冊未成功。請重新整理頁面再試一次,或聯絡支援以取得協助。', form_code_incorrect: undefined, + form_email_address_blocked: '不支援臨時電子郵件服務。請使用您的常規電子郵件地址建立帳戶。', form_identifier_exists__email_address: undefined, form_identifier_exists__phone_number: undefined, form_identifier_exists__username: undefined, diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 286f64b2bbf..3e8cefd8959 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1350,6 +1350,7 @@ type UnstableErrors = WithParamName<{ form_param_type_invalid: LocalizationValue; form_param_type_invalid__phone_number: LocalizationValue; form_param_type_invalid__email_address: LocalizationValue; + form_email_address_blocked: LocalizationValue; form_password_length_too_short: LocalizationValue; form_param_nil: LocalizationValue; form_code_incorrect: LocalizationValue; From 375a32d0f44933605ffb513ff28f522ac5e851d6 Mon Sep 17 00:00:00 2001 From: Kenton Duprey Date: Thu, 11 Dec 2025 19:06:41 -0500 Subject: [PATCH 13/52] =?UTF-8?q?feat(clerk-js,localizations,types):=20Add?= =?UTF-8?q?=20ability=20for=20users=20to=20connect=20a=20Solana=20enabled?= =?UTF-8?q?=20wallet=20via=C2=A0``=20(#7435)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Kenton Duprey --- .changeset/afraid-apes-cough.md | 7 ++ packages/clerk-js/bundlewatch.config.json | 2 +- .../src/ui/common/WalletInitialIcon.tsx | 4 +- .../SignInFactorOneSolanaWalletsCard.tsx | 4 +- .../SignUp/SignUpStartSolanaWalletsCard.tsx | 26 +++- .../ui/components/UserProfile/Web3Form.tsx | 112 +++++++++++------- .../ui/components/UserProfile/Web3Section.tsx | 2 +- .../Web3SelectSolanaWalletScreen.tsx | 79 ++++++++++++ .../ui/customizables/elementDescriptors.ts | 14 +-- .../ui/elements/Web3SolanaWalletButtons.tsx | 12 +- packages/localizations/src/ar-SA.ts | 25 ++-- packages/localizations/src/be-BY.ts | 26 ++-- packages/localizations/src/bg-BG.ts | 26 ++-- packages/localizations/src/bn-IN.ts | 27 +++-- packages/localizations/src/ca-ES.ts | 26 ++-- packages/localizations/src/cs-CZ.ts | 26 ++-- packages/localizations/src/da-DK.ts | 26 ++-- packages/localizations/src/de-DE.ts | 27 +++-- packages/localizations/src/el-GR.ts | 26 ++-- packages/localizations/src/en-GB.ts | 26 ++-- packages/localizations/src/en-US.ts | 6 +- packages/localizations/src/es-CR.ts | 26 ++-- packages/localizations/src/es-ES.ts | 26 ++-- packages/localizations/src/es-MX.ts | 26 ++-- packages/localizations/src/es-UY.ts | 26 ++-- packages/localizations/src/fa-IR.ts | 25 ++-- packages/localizations/src/fi-FI.ts | 25 ++-- packages/localizations/src/fr-FR.ts | 26 ++-- packages/localizations/src/he-IL.ts | 25 ++-- packages/localizations/src/hi-IN.ts | 27 +++-- packages/localizations/src/hr-HR.ts | 26 ++-- packages/localizations/src/hu-HU.ts | 26 ++-- packages/localizations/src/id-ID.ts | 26 ++-- packages/localizations/src/is-IS.ts | 26 ++-- packages/localizations/src/it-IT.ts | 26 ++-- packages/localizations/src/ja-JP.ts | 25 ++-- packages/localizations/src/kk-KZ.ts | 26 ++-- packages/localizations/src/ko-KR.ts | 25 ++-- packages/localizations/src/mn-MN.ts | 27 +++-- packages/localizations/src/ms-MY.ts | 26 ++-- packages/localizations/src/nb-NO.ts | 26 ++-- packages/localizations/src/nl-BE.ts | 27 +++-- packages/localizations/src/nl-NL.ts | 27 +++-- packages/localizations/src/pl-PL.ts | 26 ++-- packages/localizations/src/pt-BR.ts | 25 ++-- packages/localizations/src/pt-PT.ts | 25 ++-- packages/localizations/src/ro-RO.ts | 26 ++-- packages/localizations/src/ru-RU.ts | 27 +++-- packages/localizations/src/sk-SK.ts | 26 ++-- packages/localizations/src/sr-RS.ts | 25 ++-- packages/localizations/src/sv-SE.ts | 26 ++-- packages/localizations/src/ta-IN.ts | 26 ++-- packages/localizations/src/te-IN.ts | 26 ++-- packages/localizations/src/th-TH.ts | 25 ++-- packages/localizations/src/tr-TR.ts | 26 ++-- packages/localizations/src/uk-UA.ts | 26 ++-- packages/localizations/src/vi-VN.ts | 25 ++-- packages/localizations/src/zh-CN.ts | 25 ++-- packages/localizations/src/zh-TW.ts | 25 ++-- packages/shared/src/types/appearance.ts | 14 +-- packages/shared/src/types/elementIds.ts | 3 +- packages/shared/src/types/localization.ts | 6 +- 62 files changed, 974 insertions(+), 559 deletions(-) create mode 100644 .changeset/afraid-apes-cough.md create mode 100644 packages/clerk-js/src/ui/components/UserProfile/Web3SelectSolanaWalletScreen.tsx diff --git a/.changeset/afraid-apes-cough.md b/.changeset/afraid-apes-cough.md new file mode 100644 index 00000000000..d56bab12231 --- /dev/null +++ b/.changeset/afraid-apes-cough.md @@ -0,0 +1,7 @@ +--- +'@clerk/localizations': minor +'@clerk/clerk-js': minor +'@clerk/shared': minor +--- + +Add Web3 Solana support to `` diff --git a/packages/clerk-js/bundlewatch.config.json b/packages/clerk-js/bundlewatch.config.json index f1ff076fd5b..562644e636a 100644 --- a/packages/clerk-js/bundlewatch.config.json +++ b/packages/clerk-js/bundlewatch.config.json @@ -1,6 +1,6 @@ { "files": [ - { "path": "./dist/clerk.js", "maxSize": "922.1KB" }, + { "path": "./dist/clerk.js", "maxSize": "922.6KB" }, { "path": "./dist/clerk.browser.js", "maxSize": "87KB" }, { "path": "./dist/clerk.legacy.browser.js", "maxSize": "129KB" }, { "path": "./dist/clerk.headless*.js", "maxSize": "66KB" }, diff --git a/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx b/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx index 362a9f64312..3272f295480 100644 --- a/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx +++ b/packages/clerk-js/src/ui/common/WalletInitialIcon.tsx @@ -16,8 +16,8 @@ export const WalletInitialIcon = (props: WalletInitialIconProps) => { return ( ({ ...common.centeredFlex('inline-flex'), width: t.space.$4, diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx index 321ac4ee56d..aa4674a24e7 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOneSolanaWalletsCard.tsx @@ -9,7 +9,7 @@ import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; import { Header } from '@/ui/elements/Header'; import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler'; -const Web3WalletButtons = lazy(() => +const Web3SolanaWalletButtons = lazy(() => import(/* webpackChunkName: "web3-wallet-buttons" */ '@/ui/elements/Web3SolanaWalletButtons').then(m => ({ default: m.Web3SolanaWalletButtons, })), @@ -60,7 +60,7 @@ const SignInFactorOneSolanaWalletsCardInner = () => { } > - { return clerk .authenticateWithWeb3({ diff --git a/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx b/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx index 6968e59052a..ed00e6e3e69 100644 --- a/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx @@ -2,14 +2,14 @@ import { useClerk } from '@clerk/shared/react'; import { lazy, Suspense } from 'react'; import { withRedirectToAfterSignUp, withRedirectToSignUpTask } from '@/ui/common/withRedirect'; -import { descriptors, Flex, Flow, localizationKeys } from '@/ui/customizables'; +import { descriptors, Flex, Flow, localizationKeys, Spinner } from '@/ui/customizables'; import { BackLink } from '@/ui/elements/BackLink'; import { Card } from '@/ui/elements/Card'; import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; import { Header } from '@/ui/elements/Header'; import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler'; -const Web3WalletButtons = lazy(() => +const Web3SolanaWalletButtons = lazy(() => import(/* webpackChunkName: "web3-wallet-buttons" */ '@/ui/elements/Web3SolanaWalletButtons').then(m => ({ default: m.Web3SolanaWalletButtons, })), @@ -41,8 +41,26 @@ const SignUpStartSolanaWalletsCardInner = () => { direction='col' gap={4} > - - ({ + height: '100%', + minHeight: t.sizes.$32, + })} + > + + + } + > + { return clerk .authenticateWithWeb3({ diff --git a/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx index 8ebea04501d..c80ce1eb8c0 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx @@ -1,7 +1,10 @@ import { useReverification, useUser } from '@clerk/shared/react'; import type { Web3Provider, Web3Strategy } from '@clerk/shared/types'; -import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; +import { Web3SelectSolanaWalletScreen } from '@/ui/components/UserProfile/Web3SelectSolanaWalletScreen'; +import { Action } from '@/ui/elements/Action'; +import { useActionContext } from '@/ui/elements/Action/ActionRoot'; +import { useCardState } from '@/ui/elements/contexts'; import { ProfileSection } from '@/ui/elements/Section'; import { getFieldError, handleError } from '@/ui/utils/errorHandler'; @@ -9,27 +12,41 @@ import { generateWeb3Signature, getWeb3Identifier } from '../../../utils/web3'; import { descriptors, Image, localizationKeys, Text } from '../../customizables'; import { useEnabledThirdPartyProviders } from '../../hooks'; -export const AddWeb3WalletActionMenu = withCardStateProvider(({ onClick }: { onClick?: () => void }) => { +export const AddWeb3WalletActionMenu = () => { const card = useCardState(); + const { open } = useActionContext(); const { user } = useUser(); const { strategies, strategyToDisplayData } = useEnabledThirdPartyProviders(); - const enabledStrategies = strategies.filter(s => s.startsWith('web3')) as Web3Strategy[]; - const connectedStrategies = user?.verifiedWeb3Wallets.map(w => w.verification.strategy) as Web3Strategy[]; + const connectedStrategies = user?.verifiedWeb3Wallets?.map(w => w.verification.strategy) ?? ([] as Web3Strategy[]); const unconnectedStrategies = enabledStrategies.filter(strategy => { - return !connectedStrategies.includes(strategy); + return !connectedStrategies.includes(strategy) && strategyToDisplayData[strategy]; }); + + if (unconnectedStrategies.length === 0) { + return null; + } + const createWeb3Wallet = useReverification((identifier: string) => user?.createWeb3Wallet({ web3Wallet: identifier }), ); - const connect = async (strategy: Web3Strategy) => { + // If the user selects `web3_solana_signature` as their strategy, + // we need to obtain the wallet name to use when connecting and signing the message during the auth flow + // + // Otherwise, our current Web3 providers are all based on the wallet provider name, + // which is sufficient for our current use case when connecting to a wallet. + const connect = async ({ strategy, walletName }: { strategy: Web3Strategy; walletName?: string }) => { + if (strategy === 'web3_solana_signature' && !walletName) { + open('web3Wallets'); + return; + } const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; card.setError(undefined); try { card.setLoading(strategy); - const identifier = await getWeb3Identifier({ provider }); + const identifier = await getWeb3Identifier({ provider, walletName }); if (!user) { throw new Error('user is not defined'); @@ -38,7 +55,7 @@ export const AddWeb3WalletActionMenu = withCardStateProvider(({ onClick }: { onC let web3Wallet = await createWeb3Wallet(identifier); web3Wallet = await web3Wallet?.prepareVerification({ strategy }); const message = web3Wallet?.verification.message as string; - const signature = await generateWeb3Signature({ identifier, nonce: message, provider }); + const signature = await generateWeb3Signature({ identifier, nonce: message, provider, walletName }); await web3Wallet?.attemptVerification({ signature }); card.setIdle(); } catch (err) { @@ -52,45 +69,48 @@ export const AddWeb3WalletActionMenu = withCardStateProvider(({ onClick }: { onC } }; - if (unconnectedStrategies.length === 0) { - return null; - } - return ( <> - - {unconnectedStrategies.map(strategy => ( - connect(strategy)} - isLoading={card.loadingMetadata === strategy} - isDisabled={card.isLoading} - localizationKey={localizationKeys('userProfile.web3WalletPage.web3WalletButtonsBlockButton', { - provider: strategyToDisplayData[strategy].name, - })} - sx={t => ({ - justifyContent: 'start', - gap: t.space.$2, - })} - leftIcon={ - {`Connect ({ width: theme.sizes.$5 })} - /> - } - /> - ))} - + + + {unconnectedStrategies.map(strategy => ( + connect({ strategy })} + isLoading={card.loadingMetadata === strategy} + isDisabled={card.isLoading} + localizationKey={localizationKeys('userProfile.web3WalletPage.web3WalletButtonsBlockButton', { + provider: strategyToDisplayData[strategy].name, + })} + sx={t => ({ + justifyContent: 'start', + gap: t.space.$2, + })} + leftIcon={ + {`Connect ({ width: theme.sizes.$5 })} + /> + } + /> + ))} + + + + + + + + {card.error && ( ); -}); +}; diff --git a/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx index 1902f819f19..cbdd0934091 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx @@ -108,7 +108,7 @@ export const Web3Section = withCardStateProvider( ); })} - {shouldAllowCreation && setActionValue(null)} />} + {shouldAllowCreation && } ); diff --git a/packages/clerk-js/src/ui/components/UserProfile/Web3SelectSolanaWalletScreen.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3SelectSolanaWalletScreen.tsx new file mode 100644 index 00000000000..707b591f056 --- /dev/null +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3SelectSolanaWalletScreen.tsx @@ -0,0 +1,79 @@ +import type { Web3Strategy } from '@clerk/shared/types'; +import { lazy, Suspense } from 'react'; + +import { useActionContext } from '@/ui/elements/Action/ActionRoot'; +import { useCardState } from '@/ui/elements/contexts'; +import { Form } from '@/ui/elements/Form'; +import { FormButtonContainer } from '@/ui/elements/FormButtons'; +import { FormContainer } from '@/ui/elements/FormContainer'; + +import { Button, descriptors, Flex, localizationKeys, Spinner } from '../../customizables'; + +const Web3SolanaWalletButtons = lazy(() => + import(/* webpackChunkName: "web3-wallet-buttons" */ '@/ui/elements/Web3SolanaWalletButtons').then(m => ({ + default: m.Web3SolanaWalletButtons, + })), +); + +export type Web3SelectWalletProps = { + onConnect: (params: { strategy: Web3Strategy; walletName: string }) => Promise; +}; + +export const Web3SelectSolanaWalletScreen = ({ onConnect }: Web3SelectWalletProps) => { + const card = useCardState(); + const { close } = useActionContext(); + + const onClick = async ({ walletName }: { walletName: string }) => { + card.setLoading(walletName); + try { + await onConnect({ strategy: 'web3_solana_signature', walletName }); + card.setIdle(); + } catch (err) { + card.setIdle(); + console.error(err); + } finally { + close(); + } + }; + + return ( + + + ({ + height: '100%', + minHeight: t.sizes.$32, + })} + > + + + } + > + + + + + , + ); + + const button = container.querySelector('button'); + expect(button?.hasAttribute('appearance')).toBe(false); + }); }); diff --git a/packages/react/src/components/__tests__/SignUpButton.test.tsx b/packages/react/src/components/__tests__/SignUpButton.test.tsx index f3156c19bb9..89f0d63e153 100644 --- a/packages/react/src/components/__tests__/SignUpButton.test.tsx +++ b/packages/react/src/components/__tests__/SignUpButton.test.tsx @@ -109,4 +109,29 @@ describe('', () => { ); }).toThrow(); }); + + it('does not pass unsafeMetadata prop to child element', () => { + const { container } = render( + + + , + ); + + const button = container.querySelector('button'); + expect(button?.hasAttribute('unsafeMetadata')).toBe(false); + }); + + it('does not pass appearance prop to child element', () => { + const { container } = render( + + + , + ); + + const button = container.querySelector('button'); + expect(button?.hasAttribute('appearance')).toBe(false); + }); }); From c3ff1f899098e235ff8651f9e31e2055fc43ba8e Mon Sep 17 00:00:00 2001 From: Jacob Foshee Date: Wed, 14 Jan 2026 12:33:33 -0600 Subject: [PATCH 51/52] feat(backend): Add OauthAccessToken idToken member (#7599) Co-authored-by: Cursor Agent --- .changeset/oauth-idtoken-member.md | 5 +++++ packages/backend/src/api/resources/JSON.ts | 2 ++ packages/backend/src/api/resources/OauthAccessToken.ts | 6 ++++++ 3 files changed, 13 insertions(+) create mode 100644 .changeset/oauth-idtoken-member.md diff --git a/.changeset/oauth-idtoken-member.md b/.changeset/oauth-idtoken-member.md new file mode 100644 index 00000000000..f13ed6141fc --- /dev/null +++ b/.changeset/oauth-idtoken-member.md @@ -0,0 +1,5 @@ +--- +"@clerk/backend": patch +--- + +Add optional `idToken` member to `OauthAccessToken` returned by `getUserOauthAccessToken`. The ID token is retrieved from OIDC providers and is only present for OIDC-compliant OAuth 2.0 providers when available. diff --git a/packages/backend/src/api/resources/JSON.ts b/packages/backend/src/api/resources/JSON.ts index 4aee90821ea..88e3d0c001e 100644 --- a/packages/backend/src/api/resources/JSON.ts +++ b/packages/backend/src/api/resources/JSON.ts @@ -316,6 +316,8 @@ export interface OauthAccessTokenJSON { // Only set in OAuth 1.0 tokens token_secret?: string; expires_at?: number; + // Only present for OIDC-compliant OAuth 2.0 providers when available + id_token?: string; } export interface OAuthApplicationJSON extends ClerkResourceJSON { diff --git a/packages/backend/src/api/resources/OauthAccessToken.ts b/packages/backend/src/api/resources/OauthAccessToken.ts index ce08f22fcc6..e83c8f4089c 100644 --- a/packages/backend/src/api/resources/OauthAccessToken.ts +++ b/packages/backend/src/api/resources/OauthAccessToken.ts @@ -10,6 +10,11 @@ export class OauthAccessToken { readonly scopes?: string[], readonly tokenSecret?: string, readonly expiresAt?: number, + /** + * The ID token retrieved from the OIDC provider. + * Only present for OIDC-compliant OAuth 2.0 providers when available. + */ + readonly idToken?: string, ) {} static fromJSON(data: OauthAccessTokenJSON) { @@ -22,6 +27,7 @@ export class OauthAccessToken { data.scopes, data.token_secret, data.expires_at, + data.id_token, ); } } From 271ddeb0b47357f7da316eef389ae46b180c36da Mon Sep 17 00:00:00 2001 From: Laura Beatris <48022589+LauraBeatris@users.noreply.github.com> Date: Thu, 15 Jan 2026 14:53:41 -0300 Subject: [PATCH 52/52] feat(clerk-js,shared,localizations): Surface organization creation defaults (#7603) --- .changeset/three-impalas-push.md | 7 ++ packages/clerk-js/bundlewatch.config.json | 4 +- .../resources/OrganizationCreationDefaults.ts | 80 +++++++++++++++++ .../core/resources/OrganizationSettings.ts | 12 +++ packages/clerk-js/src/core/resources/User.ts | 3 + packages/clerk-js/src/test/fixture-helpers.ts | 4 + packages/clerk-js/src/test/fixtures.ts | 3 + .../OrganizationProfileAvatarUploader.tsx | 9 +- .../CreateOrganizationScreen.tsx | 68 +++++++++++++- .../OrganizationCreationDefaultsAlert.tsx | 41 +++++++++ .../__tests__/TaskChooseOrganization.test.tsx | 90 ++++++++++++++++++- .../tasks/TaskChooseOrganization/index.tsx | 22 ++++- packages/clerk-js/src/ui/elements/Avatar.tsx | 86 +++++++++++++++++- .../src/ui/elements/AvatarUploader.tsx | 3 +- .../src/ui/elements/OrganizationAvatar.tsx | 8 +- 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/index.ts | 1 + packages/shared/src/types/localization.ts | 3 + .../src/types/organizationCreationDefaults.ts | 34 +++++++ .../shared/src/types/organizationSettings.ts | 6 ++ packages/shared/src/types/snapshots.ts | 3 + packages/shared/src/types/user.ts | 2 + 70 files changed, 668 insertions(+), 17 deletions(-) create mode 100644 .changeset/three-impalas-push.md create mode 100644 packages/clerk-js/src/core/resources/OrganizationCreationDefaults.ts create mode 100644 packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/OrganizationCreationDefaultsAlert.tsx create mode 100644 packages/shared/src/types/organizationCreationDefaults.ts diff --git a/.changeset/three-impalas-push.md b/.changeset/three-impalas-push.md new file mode 100644 index 00000000000..749388dd5fc --- /dev/null +++ b/.changeset/three-impalas-push.md @@ -0,0 +1,7 @@ +--- +'@clerk/localizations': minor +'@clerk/clerk-js': minor +'@clerk/shared': minor +--- + +Surface organization creation defaults with prefilled form fields and advisory warnings diff --git a/packages/clerk-js/bundlewatch.config.json b/packages/clerk-js/bundlewatch.config.json index 584bbf4d296..a055cc6954f 100644 --- a/packages/clerk-js/bundlewatch.config.json +++ b/packages/clerk-js/bundlewatch.config.json @@ -1,11 +1,11 @@ { "files": [ - { "path": "./dist/clerk.js", "maxSize": "924KB" }, + { "path": "./dist/clerk.js", "maxSize": "928KB" }, { "path": "./dist/clerk.browser.js", "maxSize": "87KB" }, { "path": "./dist/clerk.legacy.browser.js", "maxSize": "129KB" }, { "path": "./dist/clerk.headless*.js", "maxSize": "66KB" }, { "path": "./dist/ui-common*.js", "maxSize": "123KB" }, - { "path": "./dist/ui-common*.legacy.*.js", "maxSize": "123KB" }, + { "path": "./dist/ui-common*.legacy.*.js", "maxSize": "126KB" }, { "path": "./dist/vendors*.js", "maxSize": "50KB" }, { "path": "./dist/coinbase*.js", "maxSize": "38KB" }, { "path": "./dist/stripe-vendors*.js", "maxSize": "1KB" }, diff --git a/packages/clerk-js/src/core/resources/OrganizationCreationDefaults.ts b/packages/clerk-js/src/core/resources/OrganizationCreationDefaults.ts new file mode 100644 index 00000000000..94274a7a3ca --- /dev/null +++ b/packages/clerk-js/src/core/resources/OrganizationCreationDefaults.ts @@ -0,0 +1,80 @@ +import type { + OrganizationCreationAdvisorySeverity, + OrganizationCreationAdvisoryType, + OrganizationCreationDefaultsJSON, + OrganizationCreationDefaultsJSONSnapshot, + OrganizationCreationDefaultsResource, +} from '@clerk/shared/types'; + +import { BaseResource } from './internal'; + +export class OrganizationCreationDefaults extends BaseResource implements OrganizationCreationDefaultsResource { + advisory: { + code: OrganizationCreationAdvisoryType; + severity: OrganizationCreationAdvisorySeverity; + meta: Record; + } | null = null; + form: { + name: string; + slug: string; + logo: string | null; + blurHash: string | null; + } = { + name: '', + slug: '', + logo: null, + blurHash: null, + }; + + public constructor(data: OrganizationCreationDefaultsJSON | OrganizationCreationDefaultsJSONSnapshot | null = null) { + super(); + this.fromJSON(data); + } + + protected fromJSON(data: OrganizationCreationDefaultsJSON | OrganizationCreationDefaultsJSONSnapshot | null): this { + if (!data) { + return this; + } + + if (data.advisory) { + this.advisory = this.withDefault(data.advisory, this.advisory ?? null); + } + + if (data.form) { + this.form.name = this.withDefault(data.form.name, this.form.name); + this.form.slug = this.withDefault(data.form.slug, this.form.slug); + this.form.logo = this.withDefault(data.form.logo, this.form.logo); + this.form.blurHash = this.withDefault(data.form.blur_hash, this.form.blurHash); + } + + return this; + } + + static async retrieve(): Promise { + return await BaseResource._fetch({ + path: '/me/organization_creation_defaults', + method: 'GET', + }).then(res => { + const data = res?.response as unknown as OrganizationCreationDefaultsJSON; + return new OrganizationCreationDefaults(data); + }); + } + + public __internal_toSnapshot(): OrganizationCreationDefaultsJSONSnapshot { + return { + advisory: this.advisory + ? { + code: this.advisory.code, + meta: this.advisory.meta, + severity: this.advisory.severity, + } + : null, + form: { + name: this.form.name, + slug: this.form.slug, + logo: this.form.logo, + blur_hash: this.form.blurHash, + }, + } as unknown as OrganizationCreationDefaultsJSONSnapshot; + } +} diff --git a/packages/clerk-js/src/core/resources/OrganizationSettings.ts b/packages/clerk-js/src/core/resources/OrganizationSettings.ts index 8960b347d62..a9fa5873d49 100644 --- a/packages/clerk-js/src/core/resources/OrganizationSettings.ts +++ b/packages/clerk-js/src/core/resources/OrganizationSettings.ts @@ -23,6 +23,11 @@ export class OrganizationSettings extends BaseResource implements OrganizationSe } = { disabled: false, }; + organizationCreationDefaults: { + enabled: boolean; + } = { + enabled: false, + }; enabled: boolean = false; maxAllowedMemberships: number = 1; forceOrganizationSelection!: boolean; @@ -51,6 +56,13 @@ export class OrganizationSettings extends BaseResource implements OrganizationSe this.slug.disabled = this.withDefault(data.slug.disabled, this.slug.disabled); } + if (data.organization_creation_defaults) { + this.organizationCreationDefaults.enabled = this.withDefault( + data.organization_creation_defaults.enabled, + this.organizationCreationDefaults.enabled, + ); + } + this.enabled = this.withDefault(data.enabled, this.enabled); this.maxAllowedMemberships = this.withDefault(data.max_allowed_memberships, this.maxAllowedMemberships); this.forceOrganizationSelection = this.withDefault( diff --git a/packages/clerk-js/src/core/resources/User.ts b/packages/clerk-js/src/core/resources/User.ts index 8f61851b1c5..92f51de6681 100644 --- a/packages/clerk-js/src/core/resources/User.ts +++ b/packages/clerk-js/src/core/resources/User.ts @@ -55,6 +55,7 @@ import { UserOrganizationInvitation, Web3Wallet, } from './internal'; +import { OrganizationCreationDefaults } from './OrganizationCreationDefaults'; export class User extends BaseResource implements UserResource { pathRoot = '/me'; @@ -280,6 +281,8 @@ export class User extends BaseResource implements UserResource { getOrganizationMemberships: GetOrganizationMemberships = retrieveMembership => OrganizationMembership.retrieve(retrieveMembership); + getOrganizationCreationDefaults = () => OrganizationCreationDefaults.retrieve(); + leaveOrganization = async (organizationId: string): Promise => { const json = ( await BaseResource._fetch({ diff --git a/packages/clerk-js/src/test/fixture-helpers.ts b/packages/clerk-js/src/test/fixture-helpers.ts index 1a3655d754c..dfd935b3fd8 100644 --- a/packages/clerk-js/src/test/fixture-helpers.ts +++ b/packages/clerk-js/src/test/fixture-helpers.ts @@ -346,6 +346,9 @@ const createOrganizationSettingsFixtureHelpers = (environment: EnvironmentJSON) const withOrganizationSlug = (enabled = false) => { os.slug.disabled = !enabled; }; + const withOrganizationCreationDefaults = (enabled = false) => { + os.organization_creation_defaults.enabled = enabled; + }; const withOrganizationDomains = (modes?: OrganizationEnrollmentMode[], defaultRole?: string) => { os.domains.enabled = true; @@ -358,6 +361,7 @@ const createOrganizationSettingsFixtureHelpers = (environment: EnvironmentJSON) withOrganizationDomains, withForceOrganizationSelection, withOrganizationSlug, + withOrganizationCreationDefaults, }; }; diff --git a/packages/clerk-js/src/test/fixtures.ts b/packages/clerk-js/src/test/fixtures.ts index 9b3403f0b57..ada0f9775cd 100644 --- a/packages/clerk-js/src/test/fixtures.ts +++ b/packages/clerk-js/src/test/fixtures.ts @@ -92,6 +92,9 @@ const createBaseOrganizationSettings = (): OrganizationSettingsJSON => { slug: { disabled: true, }, + organization_creation_defaults: { + enabled: false, + }, } as unknown as OrganizationSettingsJSON; }; diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfileAvatarUploader.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfileAvatarUploader.tsx index 6c146a20312..fa2c5133528 100644 --- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfileAvatarUploader.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationProfileAvatarUploader.tsx @@ -8,9 +8,13 @@ import { Col, descriptors, Text } from '../../customizables'; import { localizationKeys } from '../../localization'; export const OrganizationProfileAvatarUploader = ( - props: Omit & { organization: Partial }, + props: Omit & { + organization: Partial; + /** Shows a loading spinner while the image is loading */ + showLoadingSpinner?: boolean; + }, ) => { - const { organization, ...rest } = props; + const { organization, showLoadingSpinner, ...rest } = props; return ( @@ -28,6 +32,7 @@ export const OrganizationProfileAvatarUploader = ( avatarPreview={ theme.sizes.$16} + showLoadingSpinner={showLoadingSpinner} {...organization} /> } diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx index 97b9241e5f6..0b8ab83cc94 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/CreateOrganizationScreen.tsx @@ -1,22 +1,28 @@ import { useOrganizationList } from '@clerk/shared/react'; -import type { CreateOrganizationParams } from '@clerk/shared/types'; +import type { CreateOrganizationParams, OrganizationCreationDefaultsResource } from '@clerk/shared/types'; +import { useState } from 'react'; +import { OrganizationProfileAvatarUploader } from '@/ui/components/OrganizationProfile/OrganizationProfileAvatarUploader'; import { useEnvironment } from '@/ui/contexts'; import { useSessionTasksContext, useTaskChooseOrganizationContext } from '@/ui/contexts/components/SessionTasks'; -import { localizationKeys } from '@/ui/customizables'; +import { Icon, localizationKeys } from '@/ui/customizables'; import { useCardState } from '@/ui/elements/contexts'; import { Form } from '@/ui/elements/Form'; import { FormButtonContainer } from '@/ui/elements/FormButtons'; import { FormContainer } from '@/ui/elements/FormContainer'; import { Header } from '@/ui/elements/Header'; +import { IconButton } from '@/ui/elements/IconButton'; +import { Upload } from '@/ui/icons'; import { createSlug } from '@/ui/utils/createSlug'; import { handleError } from '@/ui/utils/errorHandler'; import { useFormControl } from '@/ui/utils/useFormControl'; import { organizationListParams } from '../../../OrganizationSwitcher/utils'; +import { OrganizationCreationDefaultsAlert } from './OrganizationCreationDefaultsAlert'; type CreateOrganizationScreenProps = { onCancel?: () => void; + organizationCreationDefaults?: OrganizationCreationDefaultsResource | null; }; export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) => { @@ -27,13 +33,14 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) = userMemberships: organizationListParams.userMemberships, }); const { organizationSettings } = useEnvironment(); + const [file, setFile] = useState(); - const nameField = useFormControl('name', '', { + const nameField = useFormControl('name', props.organizationCreationDefaults?.form?.name ?? '', { type: 'text', label: localizationKeys('taskChooseOrganization.createOrganization.formFieldLabel__name'), placeholder: localizationKeys('taskChooseOrganization.createOrganization.formFieldInputPlaceholder__name'), }); - const slugField = useFormControl('slug', '', { + const slugField = useFormControl('slug', props.organizationCreationDefaults?.form?.slug ?? '', { type: 'text', label: localizationKeys('taskChooseOrganization.createOrganization.formFieldLabel__slug'), placeholder: localizationKeys('taskChooseOrganization.createOrganization.formFieldInputPlaceholder__slug'), @@ -57,6 +64,15 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) = const organization = await createOrganization(createOrgParams); + if (file) { + await organization.setLogo({ file }); + } else if (defaultLogoUrl) { + const response = await fetch(defaultLogoUrl); + const blob = await response.blob(); + const logoFile = new File([blob], 'logo', { type: blob.type }); + await organization.setLogo({ file: logoFile }); + } + await setActive({ organization, navigate: async ({ session }) => { @@ -77,7 +93,13 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) = slugField.setValue(val); }; + const onAvatarRemove = () => { + card.setIdle(); + return setFile(null); + }; + const isSubmitButtonDisabled = !nameField.value || !isLoaded; + const defaultLogoUrl = file === undefined ? props.organizationCreationDefaults?.form?.logo : undefined; return ( <> @@ -90,6 +112,44 @@ export const CreateOrganizationScreen = (props: CreateOrganizationScreenProps) = ({ padding: `${t.space.$none} ${t.space.$10} ${t.space.$8}` })}> + + await setFile(file)} + onAvatarRemove={file || defaultLogoUrl ? onAvatarRemove : null} + showLoadingSpinner={!!defaultLogoUrl} + avatarPreviewPlaceholder={ + ({ + color: t.colors.$colorMutedForeground, + transitionDuration: t.transitionDuration.$controls, + })} + /> + } + sx={t => ({ + width: t.sizes.$16, + height: t.sizes.$16, + borderRadius: t.radii.$md, + borderWidth: t.borderWidths.$normal, + borderStyle: t.borderStyles.$dashed, + borderColor: t.colors.$borderAlpha200, + backgroundColor: t.colors.$neutralAlpha50, + ':hover': { + backgroundColor: t.colors.$neutralAlpha50, + svg: { + transform: 'scale(1.2)', + }, + }, + })} + /> + } + /> + + + ); +} + +const advisoryToLocalizationKey = (advisory?: OrganizationCreationDefaultsResource['advisory']) => { + if (!advisory) { + return null; + } + + switch (advisory.code) { + case 'organization_already_exists': + return localizationKeys('taskChooseOrganization.alerts.organizationAlreadyExists', { + organizationDomain: advisory.meta.organization_domain, + organizationName: advisory.meta.organization_name, + }); + default: + return null; + } +}; diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx index f6daf9e1dcd..14ce04a7364 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/__tests__/TaskChooseOrganization.test.tsx @@ -1,5 +1,5 @@ import userEvent from '@testing-library/user-event'; -import { describe, expect, it } from 'vitest'; +import { beforeEach, describe, expect, it } from 'vitest'; import { bindCreateFixtures } from '@/test/create-fixtures'; import { render } from '@/test/utils'; @@ -7,12 +7,17 @@ import { createFakeUserOrganizationMembership, createFakeUserOrganizationSuggestion, } from '@/ui/components/OrganizationSwitcher/__tests__/test-utils'; +import { clearFetchCache } from '@/ui/hooks'; import { TaskChooseOrganization } from '..'; const { createFixtures } = bindCreateFixtures('TaskChooseOrganization'); describe('TaskChooseOrganization', () => { + beforeEach(() => { + clearFetchCache(); + }); + it('does not render component without existing session task', async () => { const { wrapper } = await createFixtures(f => { f.withOrganizations(); @@ -314,4 +319,87 @@ describe('TaskChooseOrganization', () => { expect(await findByText('Existing Org')).toBeInTheDocument(); }); }); + + describe('with organization creation defaults', () => { + describe('when enabled on environment', () => { + it('displays warning when organization already exists for user email domain', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withForceOrganizationSelection(); + f.withOrganizationCreationDefaults(true); + f.withUser({ + email_addresses: ['test@clerk.com'], + create_organization_enabled: true, + tasks: [{ key: 'choose-organization' }], + }); + }); + + fixtures.clerk.user?.getOrganizationCreationDefaults.mockReturnValueOnce( + Promise.resolve({ + advisory: { + code: 'organization_already_exists', + severity: 'warning', + meta: { organization_domain: 'test@clerk.com', organization_name: 'Clerk' }, + }, + }), + ); + + const { findByText } = render(, { wrapper }); + + expect( + await findByText( + /an organization already exists for the detected company name \(Clerk\) and test@clerk\.com/i, + ), + ).toBeInTheDocument(); + }); + + it('prefills create organization form with defaults', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withOrganizationSlug(true); + f.withForceOrganizationSelection(); + f.withOrganizationCreationDefaults(true); + f.withUser({ + email_addresses: ['test@clerk.com'], + create_organization_enabled: true, + tasks: [{ key: 'choose-organization' }], + }); + }); + + fixtures.clerk.user?.getOrganizationCreationDefaults.mockReturnValueOnce( + Promise.resolve({ + form: { + name: 'Test Org', + slug: 'test-org', + logo: null, + }, + }), + ); + + const { findByRole } = render(, { wrapper }); + + expect(await findByRole('textbox', { name: /name/i })).toHaveValue('Test Org'); + expect(await findByRole('textbox', { name: /slug/i })).toHaveValue('test-org'); + }); + }); + + describe('when disabled on environment', () => { + it('does not fetch for creation defaults', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withForceOrganizationSelection(); + f.withOrganizationCreationDefaults(false); + f.withUser({ + email_addresses: ['test@clerk.com'], + create_organization_enabled: true, + tasks: [{ key: 'choose-organization' }], + }); + }); + + render(, { wrapper }); + + expect(fixtures.clerk.user?.getOrganizationCreationDefaults).not.toHaveBeenCalled(); + }); + }); + }); }); diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/index.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/index.tsx index dc3375e0d0b..170167214f6 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/index.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/index.tsx @@ -1,11 +1,13 @@ import { useClerk, useSession, useUser } from '@clerk/shared/react'; +import type { OrganizationCreationDefaultsResource } from '@clerk/shared/types'; import { useState } from 'react'; -import { useSignOutContext, withCoreSessionSwitchGuard } from '@/ui/contexts'; +import { useEnvironment, useSignOutContext, withCoreSessionSwitchGuard } from '@/ui/contexts'; import { descriptors, Flex, Flow, localizationKeys, Spinner } from '@/ui/customizables'; import { Card } from '@/ui/elements/Card'; import { withCardStateProvider } from '@/ui/elements/contexts'; import { Header } from '@/ui/elements/Header'; +import { useFetch } from '@/ui/hooks'; import { useMultipleSessions } from '@/ui/hooks/useMultipleSessions'; import { useOrganizationListInView } from '@/ui/hooks/useOrganizationListInView'; @@ -16,8 +18,17 @@ import { CreateOrganizationScreen } from './CreateOrganizationScreen'; const TaskChooseOrganizationInternal = () => { const { user } = useUser(); const { userMemberships, userSuggestions, userInvitations } = useOrganizationListInView(); + const { organizationSettings } = useEnvironment(); + const organizationCreationDefaults = useFetch( + organizationSettings.organizationCreationDefaults?.enabled ? user?.getOrganizationCreationDefaults : undefined, + 'organization-creation-defaults', + ); - const isLoading = userMemberships?.isLoading || userInvitations?.isLoading || userSuggestions?.isLoading; + const isLoading = + userMemberships?.isLoading || + userInvitations?.isLoading || + userSuggestions?.isLoading || + organizationCreationDefaults?.isLoading; const hasExistingResources = !!(userMemberships?.count || userInvitations?.count || userSuggestions?.count); const isOrganizationCreationDisabled = !isLoading && !user?.createOrganizationEnabled && !hasExistingResources; @@ -47,7 +58,10 @@ const TaskChooseOrganizationInternal = () => { /> ) : ( - + )} @@ -103,6 +117,7 @@ const TaskChooseOrganizationCardFooter = () => { type TaskChooseOrganizationFlowsProps = { initialFlow: 'create' | 'choose'; + organizationCreationDefaults?: OrganizationCreationDefaultsResource | null; }; const TaskChooseOrganizationFlows = withCardStateProvider((props: TaskChooseOrganizationFlowsProps) => { @@ -112,6 +127,7 @@ const TaskChooseOrganizationFlows = withCardStateProvider((props: TaskChooseOrga return ( setCurrentFlow('choose') : undefined} + organizationCreationDefaults={props.organizationCreationDefaults} /> ); } diff --git a/packages/clerk-js/src/ui/elements/Avatar.tsx b/packages/clerk-js/src/ui/elements/Avatar.tsx index 7f691fa032e..958df6b1eb2 100644 --- a/packages/clerk-js/src/ui/elements/Avatar.tsx +++ b/packages/clerk-js/src/ui/elements/Avatar.tsx @@ -1,6 +1,6 @@ import React from 'react'; -import { Box, descriptors, Flex, Image, Text } from '../customizables'; +import { Box, descriptors, Flex, Image, Spinner, Text } from '../customizables'; import type { ElementDescriptor } from '../customizables/elementDescriptors'; import type { InternalTheme } from '../foundations'; import type { PropsOfComponent } from '../styledSystem'; @@ -15,8 +15,13 @@ type AvatarProps = PropsOfComponent & { rounded?: boolean; boxElementDescriptor?: ElementDescriptor; imageElementDescriptor?: ElementDescriptor; + /** Shows a loading spinner while the image is loading */ + showLoadingSpinner?: boolean; }; +const SPINNER_DELAY_MS = 150; +const SPINNER_MIN_DURATION_MS = 400; + export const Avatar = (props: AvatarProps) => { const { size = () => 26, @@ -28,8 +33,60 @@ export const Avatar = (props: AvatarProps) => { sx, boxElementDescriptor, imageElementDescriptor, + showLoadingSpinner = false, } = props; const [error, setError] = React.useState(false); + const [loaded, setLoaded] = React.useState(false); + const [spinnerVisible, setSpinnerVisible] = React.useState(false); + const spinnerShownAtRef = React.useRef(null); + const loadTimerRef = React.useRef | null>(null); + + React.useEffect(() => { + setLoaded(false); + setError(false); + setSpinnerVisible(false); + spinnerShownAtRef.current = null; + + return () => { + if (loadTimerRef.current) { + clearTimeout(loadTimerRef.current); + loadTimerRef.current = null; + } + }; + }, [imageUrl]); + + React.useEffect(() => { + if (!showLoadingSpinner || !imageUrl || loaded || error) { + return; + } + + const timer = setTimeout(() => { + setSpinnerVisible(true); + spinnerShownAtRef.current = Date.now(); + }, SPINNER_DELAY_MS); + + return () => clearTimeout(timer); + }, [showLoadingSpinner, imageUrl, loaded, error]); + + /** + * Prevents the loading spinner from appearing and disappearing too quickly + */ + const handleImageLoad = React.useCallback(() => { + if (spinnerShownAtRef.current) { + const elapsed = Date.now() - spinnerShownAtRef.current; + const remaining = SPINNER_MIN_DURATION_MS - elapsed; + if (remaining > 0) { + loadTimerRef.current = setTimeout(() => { + loadTimerRef.current = null; + setLoaded(true); + }, remaining); + return; + } + } + setLoaded(true); + }, []); + + const isLoading = showLoadingSpinner && spinnerVisible && imageUrl && !loaded && !error; const ImgOrFallback = initials && (!imageUrl || error) ? ( @@ -40,8 +97,15 @@ export const Avatar = (props: AvatarProps) => { title={title} alt={`${title}'s logo`} src={imageUrl || ''} - sx={{ objectFit: 'cover', width: '100%', height: '100%' }} + sx={{ + objectFit: 'cover', + width: '100%', + height: '100%', + opacity: showLoadingSpinner ? (loaded ? 1 : 0) : 1, + transition: 'opacity 0.2s ease-in-out', + }} onError={() => setError(true)} + onLoad={handleImageLoad} size={imageFetchSize} /> ); @@ -67,6 +131,24 @@ export const Avatar = (props: AvatarProps) => { > {ImgOrFallback} + {isLoading && ( + ({ + position: 'absolute', + inset: 0, + alignItems: 'center', + justifyContent: 'center', + backgroundColor: t.colors.$avatarBackground, + })} + > + + + )} + {/* /** * This Box is the "shimmer" effect for the avatar. * The ":after" selector is responsible for the border shimmer animation. diff --git a/packages/clerk-js/src/ui/elements/AvatarUploader.tsx b/packages/clerk-js/src/ui/elements/AvatarUploader.tsx index f1ae367f2c2..8a7f99b7a0d 100644 --- a/packages/clerk-js/src/ui/elements/AvatarUploader.tsx +++ b/packages/clerk-js/src/ui/elements/AvatarUploader.tsx @@ -90,9 +90,10 @@ export const AvatarUploader = (props: AvatarUploaderProps) => { await handleFileDrop(f); }; + const hasExistingImage = !!(avatarPreview.props as { imageUrl?: string })?.imageUrl; const previewElement = objectUrl ? React.cloneElement(avatarPreview, { imageUrl: objectUrl }) - : avatarPreviewPlaceholder + : avatarPreviewPlaceholder && !hasExistingImage ? React.cloneElement(avatarPreviewPlaceholder, { onClick: openDialog }) : avatarPreview; diff --git a/packages/clerk-js/src/ui/elements/OrganizationAvatar.tsx b/packages/clerk-js/src/ui/elements/OrganizationAvatar.tsx index 7f449455955..ad7a078f664 100644 --- a/packages/clerk-js/src/ui/elements/OrganizationAvatar.tsx +++ b/packages/clerk-js/src/ui/elements/OrganizationAvatar.tsx @@ -4,15 +4,19 @@ import type { PropsOfComponent } from '../styledSystem'; import { Avatar } from './Avatar'; type OrganizationAvatarProps = PropsOfComponent & - Partial>; + Partial> & { + /** Shows a loading spinner while the image is loading */ + showLoadingSpinner?: boolean; + }; export const OrganizationAvatar = (props: OrganizationAvatarProps) => { - const { name = '', imageUrl, ...rest } = props; + const { name = '', imageUrl, showLoadingSpinner, ...rest } = props; return ( diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index b48cf825e52..395bff3261d 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -882,6 +882,10 @@ export const arSA: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'توجد منظمة بالفعل لاسم الشركة المكتشف ({{organizationName}}) و {{organizationDomain}}. انضم عن طريق الدعوة.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index fd12de02b13..d04fb225140 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -890,6 +890,10 @@ export const beBY: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Арганізацыя ўжо існуе для выяўленай назвы кампаніі ({{organizationName}}) і {{organizationDomain}}. Далучайцеся па запрашэнні.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index fdcdf32b73d..7180713e37d 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -886,6 +886,10 @@ export const bgBG: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Организация вече съществува за откритото име на компанията ({{organizationName}}) и {{organizationDomain}}. Присъединете се чрез покана.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 9c36731c219..7e41d2b8ea2 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -890,6 +890,10 @@ export const bnIN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'শনাক্ত করা কোম্পানির নাম ({{organizationName}}) এবং {{organizationDomain}}-এর জন্য একটি সংস্থা ইতিমধ্যেই বিদ্যমান। আমন্ত্রণের মাধ্যমে যোগ দিন।', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 3cd5d10eeda..7633ccf17dc 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -885,6 +885,10 @@ export const caES: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + "Ja existeix una organització per al nom d'empresa detectat ({{organizationName}}) i {{organizationDomain}}. Uneix-te per invitació.", + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index b1cd9e1550e..6599a2c94f7 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -896,6 +896,10 @@ export const csCZ: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organizace již existuje pro detekovaný název společnosti ({{organizationName}}) a {{organizationDomain}}. Připojte se prostřednictvím pozvánky.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index f768668bd98..2f9578a42cb 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -883,6 +883,10 @@ export const daDK: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Der findes allerede en organisation for det registrerede firmanavn ({{organizationName}}) og {{organizationDomain}}. Tilmeld dig via invitation.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 678b136ed1a..feba5a780dc 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -901,6 +901,10 @@ export const deDE: LocalizationResource = { actionLink: 'Abmelden', actionText: 'Angemeldet als {{identifier}}', }, + alerts: { + organizationAlreadyExists: + 'Für den erkannten Firmennamen ({{organizationName}}) und {{organizationDomain}} existiert bereits eine Organisation. Treten Sie per Einladung bei.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index df35837d8b4..06dde939d34 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -888,6 +888,10 @@ export const elGR: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Υπάρχει ήδη οργανισμός για το ανιχνευμένο όνομα εταιρείας ({{organizationName}}) και {{organizationDomain}}. Εγγραφείτε μέσω πρόσκλησης.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index 0dba831bcf7..97fa9a8c58e 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -887,6 +887,10 @@ export const enGB: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'An organisation already exists for the detected company name ({{organizationName}}) and {{organizationDomain}}. Join by invitation.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/en-US.ts b/packages/localizations/src/en-US.ts index 8e9c64c7b33..5e5cceb5199 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -884,6 +884,10 @@ export const enUS: LocalizationResource = { actionLink: 'Sign out', actionText: 'Signed in as {{identifier}}', }, + alerts: { + organizationAlreadyExists: + 'An organization already exists for the detected company name ({{organizationName}}) and {{organizationDomain}}. Join by invitation.', + }, }, taskResetPassword: { formButtonPrimary: 'Reset Password', diff --git a/packages/localizations/src/es-CR.ts b/packages/localizations/src/es-CR.ts index 0a131be4671..2577231488a 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -893,6 +893,10 @@ export const esCR: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Ya existe una organización para el nombre de empresa detectado ({{organizationName}}) y {{organizationDomain}}. Únete por invitación.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index a5c8a3f4c8c..17b5e0eed16 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -887,6 +887,10 @@ export const esES: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Ya existe una organización para el nombre de empresa detectado ({{organizationName}}) y {{organizationDomain}}. Únete por invitación.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index db594fd6118..4ea8c2267a9 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -894,6 +894,10 @@ export const esMX: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Ya existe una organización para el nombre de empresa detectado ({{organizationName}}) y {{organizationDomain}}. Únete por invitación.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index a4e2c8da910..df5c9fa2a6a 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -893,6 +893,10 @@ export const esUY: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Ya existe una organización para el nombre de empresa detectado ({{organizationName}}) y {{organizationDomain}}. Únete por invitación.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 1e0e781849c..3f504c3cbde 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -897,6 +897,10 @@ export const faIR: LocalizationResource = { actionLink: 'خروج از همه حساب‌ها', actionText: 'می‌خواهید خارج شوید؟', }, + alerts: { + organizationAlreadyExists: + 'سازمانی برای نام شرکت شناسایی شده ({{organizationName}}) و {{organizationDomain}} از قبل وجود دارد. از طریق دعوتنامه بپیوندید.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index eaa48cf81c7..fac1ce9415f 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -886,6 +886,10 @@ export const fiFI: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organisaatio on jo olemassa havaitulle yrityksen nimelle ({{organizationName}}) ja {{organizationDomain}}. Liity kutsulla.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index 9771cfc711e..7de337bf3b6 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -902,6 +902,10 @@ export const frFR: LocalizationResource = { actionLink: 'Se déconnecter', actionText: 'Connecté en tant que {{identifier}}', }, + alerts: { + organizationAlreadyExists: + "Une organisation existe déjà pour le nom d'entreprise détecté ({{organizationName}}) et {{organizationDomain}}. Rejoignez par invitation.", + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index b26d094b50e..9238e00bd41 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -876,6 +876,10 @@ export const heIL: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'ארגון כבר קיים עבור שם החברה שזוהה ({{organizationName}}) ו-{{organizationDomain}}. הצטרף באמצעות הזמנה.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 64af22f24ca..e26ecb480f3 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -891,6 +891,10 @@ export const hiIN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'पता लगाई गई कंपनी के नाम ({{organizationName}}) और {{organizationDomain}} के लिए एक संगठन पहले से मौजूद है। आमंत्रण द्वारा शामिल हों।', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 89041a9c035..60d2f0b95c0 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -887,6 +887,10 @@ export const hrHR: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organizacija već postoji za otkriveni naziv tvrtke ({{organizationName}}) i {{organizationDomain}}. Pridružite se putem pozivnice.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 1766a367259..057a4c838e0 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -884,6 +884,10 @@ export const huHU: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Már létezik szervezet az észlelt cégnévhez ({{organizationName}}) és {{organizationDomain}}. Csatlakozz meghívással.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 314e4df62a4..5b7522f0ed8 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -892,6 +892,10 @@ export const idID: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organisasi sudah ada untuk nama perusahaan yang terdeteksi ({{organizationName}}) dan {{organizationDomain}}. Bergabung melalui undangan.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index e87e68da5ac..c665221f705 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -887,6 +887,10 @@ export const isIS: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Fyrirtæki er þegar til fyrir uppgötvaða fyrirtækjanafnið ({{organizationName}}) og {{organizationDomain}}. Skráðu þig með boði.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index bca7f3064c1..a636e1da40b 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -894,6 +894,10 @@ export const itIT: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + "Un'organizzazione esiste già per il nome dell'azienda rilevato ({{organizationName}}) e {{organizationDomain}}. Unisciti tramite invito.", + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index e686f7d8d3a..c8b28c65b62 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -897,6 +897,10 @@ export const jaJP: LocalizationResource = { actionLink: 'サインアウト', actionText: '{{identifier}} としてサインイン中', }, + alerts: { + organizationAlreadyExists: + '検出された会社名 ({{organizationName}}) と {{organizationDomain}} の組織がすでに存在します。招待を通じて参加してください。', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index 212ec89d50f..1021a6f5785 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -877,6 +877,10 @@ export const kkKZ: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Анықталған компания атауы ({{organizationName}}) және {{organizationDomain}} үшін ұйым бұрыннан бар. Шақыру арқылы қосылыңыз.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index f1a1a71ba3f..1a5525983fa 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -878,6 +878,10 @@ export const koKR: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + '감지된 회사 이름 ({{organizationName}}) 및 {{organizationDomain}}에 대한 조직이 이미 존재합니다. 초대를 통해 가입하세요.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index 47d7f2f3520..ba3fe405ef4 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -886,6 +886,10 @@ export const mnMN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Илрүүлсэн компанийн нэр ({{organizationName}}) болон {{organizationDomain}}-д байгууллага аль хэдийн байна. Урилгаар нэгдэнэ үү.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 8c9fc2fe6f5..6d65a259b88 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -894,6 +894,10 @@ export const msMY: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organisasi sudah wujud untuk nama syarikat yang dikesan ({{organizationName}}) dan {{organizationDomain}}. Sertai melalui jemputan.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index eca0b97f88d..a2a7106c9d4 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -884,6 +884,10 @@ export const nbNO: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'En organisasjon eksisterer allerede for det oppdagede firmanavnet ({{organizationName}}) og {{organizationDomain}}. Bli med via invitasjon.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index f0bb7d32200..a02597ea6af 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -886,6 +886,10 @@ export const nlBE: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Er bestaat al een organisatie voor de gedetecteerde bedrijfsnaam ({{organizationName}}) en {{organizationDomain}}. Word lid via uitnodiging.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index 451d77b41e0..654cb28f80c 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -886,6 +886,10 @@ export const nlNL: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Er bestaat al een organisatie voor de gedetecteerde bedrijfsnaam ({{organizationName}}) en {{organizationDomain}}. Word lid via uitnodiging.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index d037d7f4bb4..2d433ee2181 100644 --- a/packages/localizations/src/pl-PL.ts +++ b/packages/localizations/src/pl-PL.ts @@ -890,6 +890,10 @@ export const plPL: LocalizationResource = { actionLink: 'Wyloguj', actionText: 'Zalogowano jako {{identifier}}', }, + alerts: { + organizationAlreadyExists: + 'Organizacja już istnieje dla wykrytej nazwy firmy ({{organizationName}}) i {{organizationDomain}}. Dołącz przez zaproszenie.', + }, }, taskResetPassword: { formButtonPrimary: 'Zresetuj hasło', diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 16fd4e32653..75e143c13ac 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -898,6 +898,10 @@ export const ptBR: LocalizationResource = { actionLink: 'Sair', actionText: 'Conectado como {{identifier}}', }, + alerts: { + organizationAlreadyExists: + 'Uma organização já existe para o nome da empresa detectado ({{organizationName}}) e {{organizationDomain}}. Entre por convite.', + }, }, taskResetPassword: { formButtonPrimary: 'Resetar Senha', diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index 3c0a9730ec9..a4bd14a7677 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -884,6 +884,10 @@ export const ptPT: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Já existe uma organização para o nome da empresa detetado ({{organizationName}}) e {{organizationDomain}}. Adira por convite.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index 22d78472e27..b03ffb3ff73 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -899,6 +899,10 @@ export const roRO: LocalizationResource = { actionLink: 'Deconectează-te', actionText: 'Autentificat ca {{identifier}}', }, + alerts: { + organizationAlreadyExists: + 'Există deja o organizație pentru numele companiei detectate ({{organizationName}}) și {{organizationDomain}}. Alătură-te prin invitație.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index 293a20d6783..e0a3dfcceac 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -897,6 +897,10 @@ export const ruRU: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Организация уже существует для обнаруженного названия компании ({{organizationName}}) и {{organizationDomain}}. Присоединяйтесь по приглашению.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 1dd5d44d1b5..ddcdf77c989 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -890,6 +890,10 @@ export const skSK: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organizácia už existuje pre zistený názov spoločnosti ({{organizationName}}) a {{organizationDomain}}. Pripojte sa prostredníctvom pozvánky.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index f81de48bb74..8655a6279ed 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -883,6 +883,10 @@ export const srRS: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Organizacija već postoji za otkriveno ime kompanije ({{organizationName}}) i {{organizationDomain}}. Pridružite se putem pozivnice.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 7cc04f52249..705f9be4829 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -888,6 +888,10 @@ export const svSE: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'En organisation finns redan för det upptäckta företagsnamnet ({{organizationName}}) och {{organizationDomain}}. Gå med via inbjudan.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index 58a2bf94342..a8603e5b97f 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -893,6 +893,10 @@ export const taIN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'கண்டறியப்பட்ட நிறுவன பெயர் ({{organizationName}}) மற்றும் {{organizationDomain}} க்கு ஒரு அமைப்பு ஏற்கனவே உள்ளது. அழைப்பின் மூலம் சேரவும்.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 311d8825f61..b53230a6616 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -893,6 +893,10 @@ export const teIN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'గుర్తించిన కంపెనీ పేరు ({{organizationName}}) మరియు {{organizationDomain}} కోసం ఒక సంస్థ ఇప్పటికే ఉంది. ఆహ్వానం ద్వారా చేరండి.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index a67cb5afa2b..211bf49e87f 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -886,6 +886,10 @@ export const thTH: LocalizationResource = { actionLink: 'ออกจากระบบ', actionText: 'เข้าสู่ระบบในนาม {{identifier}}', }, + alerts: { + organizationAlreadyExists: + 'องค์กรสำหรับชื่อบริษัทที่ตรวจพบ ({{organizationName}}) และ {{organizationDomain}} มีอยู่แล้ว เข้าร่วมโดยการเชิญ', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 573dee4d251..8136b8ce022 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -886,6 +886,10 @@ export const trTR: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Tespit edilen şirket adı ({{organizationName}}) ve {{organizationDomain}} için bir organizasyon zaten mevcut. Davetiye ile katılın.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index eb1192aa8f8..387a1071f01 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -882,6 +882,10 @@ export const ukUA: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Організація вже існує для виявленої назви компанії ({{organizationName}}) та {{organizationDomain}}. Приєднуйтесь за запрошенням.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index b60f5ce80dd..693e2d816ae 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -893,6 +893,10 @@ export const viVN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + 'Một tổ chức đã tồn tại cho tên công ty được phát hiện ({{organizationName}}) và {{organizationDomain}}. Tham gia bằng lời mời.', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 50f6369d08c..35a1ee2b977 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -872,6 +872,10 @@ export const zhCN: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + '检测到的公司名称 ({{organizationName}}) 和 {{organizationDomain}} 已存在一个组织。请通过邀请加入。', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 07c95b8ef1e..b04b313b28e 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -873,6 +873,10 @@ export const zhTW: LocalizationResource = { actionLink: undefined, actionText: undefined, }, + alerts: { + organizationAlreadyExists: + '偵測到的公司名稱 ({{organizationName}}) 和 {{organizationDomain}} 已存在一個組織。請透過邀請加入。', + }, }, taskResetPassword: { formButtonPrimary: undefined, diff --git a/packages/shared/src/types/index.ts b/packages/shared/src/types/index.ts index 57123038f78..8f2525c4aaa 100644 --- a/packages/shared/src/types/index.ts +++ b/packages/shared/src/types/index.ts @@ -34,6 +34,7 @@ export type * from './localization'; export type * from './multiDomain'; export type * from './oauth'; export type * from './organization'; +export type * from './organizationCreationDefaults'; export type * from './organizationDomain'; export type * from './organizationInvitation'; export type * from './organizationMembership'; diff --git a/packages/shared/src/types/localization.ts b/packages/shared/src/types/localization.ts index 806826143d8..7c3b5ae0fc0 100644 --- a/packages/shared/src/types/localization.ts +++ b/packages/shared/src/types/localization.ts @@ -1314,6 +1314,9 @@ export type __internal_LocalizationResource = { title: LocalizationValue; subtitle: LocalizationValue; }; + alerts: { + organizationAlreadyExists: LocalizationValue<'organizationDomain' | 'organizationName'>; + }; }; taskResetPassword: { title: LocalizationValue; diff --git a/packages/shared/src/types/organizationCreationDefaults.ts b/packages/shared/src/types/organizationCreationDefaults.ts new file mode 100644 index 00000000000..95d3211110a --- /dev/null +++ b/packages/shared/src/types/organizationCreationDefaults.ts @@ -0,0 +1,34 @@ +import type { ClerkResourceJSON } from './json'; +import type { ClerkResource } from './resource'; + +export type OrganizationCreationAdvisoryType = 'organization_already_exists'; + +export type OrganizationCreationAdvisorySeverity = 'warning'; + +export interface OrganizationCreationDefaultsJSON extends ClerkResourceJSON { + advisory: { + code: OrganizationCreationAdvisoryType; + severity: OrganizationCreationAdvisorySeverity; + meta: Record; + } | null; + form: { + name: string; + slug: string; + logo: string | null; + blur_hash: string | null; + }; +} + +export interface OrganizationCreationDefaultsResource extends ClerkResource { + advisory: { + code: OrganizationCreationAdvisoryType; + severity: OrganizationCreationAdvisorySeverity; + meta: Record; + } | null; + form: { + name: string; + slug: string; + logo: string | null; + blurHash: string | null; + }; +} diff --git a/packages/shared/src/types/organizationSettings.ts b/packages/shared/src/types/organizationSettings.ts index ab9e0704e1e..e9a24b8e0f0 100644 --- a/packages/shared/src/types/organizationSettings.ts +++ b/packages/shared/src/types/organizationSettings.ts @@ -20,6 +20,9 @@ export interface OrganizationSettingsJSON extends ClerkResourceJSON { slug: { disabled: boolean; }; + organization_creation_defaults: { + enabled: boolean; + }; } export interface OrganizationSettingsResource extends ClerkResource { @@ -37,5 +40,8 @@ export interface OrganizationSettingsResource extends ClerkResource { slug: { disabled: boolean; }; + organizationCreationDefaults: { + enabled: boolean; + }; __internal_toSnapshot: () => OrganizationSettingsJSONSnapshot; } diff --git a/packages/shared/src/types/snapshots.ts b/packages/shared/src/types/snapshots.ts index 5f36eab401c..b39309b57f9 100644 --- a/packages/shared/src/types/snapshots.ts +++ b/packages/shared/src/types/snapshots.ts @@ -30,6 +30,7 @@ import type { VerificationJSON, Web3WalletJSON, } from './json'; +import type { OrganizationCreationDefaultsJSON } from './organizationCreationDefaults'; import type { OrganizationSettingsJSON } from './organizationSettings'; import type { ProtectConfigJSON } from './protectConfig'; import type { SignInJSON } from './signIn'; @@ -146,6 +147,8 @@ export type OrganizationMembershipJSONSnapshot = OrganizationMembershipJSON; export type OrganizationSettingsJSONSnapshot = OrganizationSettingsJSON; +export type OrganizationCreationDefaultsJSONSnapshot = OrganizationCreationDefaultsJSON; + export type PasskeyJSONSnapshot = Override; export type PhoneNumberJSONSnapshot = Override< diff --git a/packages/shared/src/types/user.ts b/packages/shared/src/types/user.ts index 87057004105..aa844b6bd25 100644 --- a/packages/shared/src/types/user.ts +++ b/packages/shared/src/types/user.ts @@ -7,6 +7,7 @@ import type { ExternalAccountResource } from './externalAccount'; import type { ImageResource } from './image'; import type { UserJSON } from './json'; import type { OAuthScope } from './oauth'; +import type { OrganizationCreationDefaultsResource } from './organizationCreationDefaults'; import type { OrganizationInvitationStatus } from './organizationInvitation'; import type { OrganizationMembershipResource } from './organizationMembership'; import type { OrganizationSuggestionResource, OrganizationSuggestionStatus } from './organizationSuggestion'; @@ -125,6 +126,7 @@ export interface UserResource extends ClerkResource, BillingPayerMethods { getOrganizationSuggestions: ( params?: GetUserOrganizationSuggestionsParams, ) => Promise>; + getOrganizationCreationDefaults: () => Promise; leaveOrganization: (organizationId: string) => Promise; createTOTP: () => Promise; verifyTOTP: (params: VerifyTOTPParams) => Promise;