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/.changeset/friendly-expo-peer-deps.md b/.changeset/friendly-expo-peer-deps.md new file mode 100644 index 00000000000..83438f7f08b --- /dev/null +++ b/.changeset/friendly-expo-peer-deps.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-expo': patch +--- + +Broaden React peer dependency to `^18.0.0 || ^19.0.0` to resolve peer dependency conflicts for Expo 54 users 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/.changeset/open-doors-flash.md b/.changeset/open-doors-flash.md new file mode 100644 index 00000000000..1d4003f8973 --- /dev/null +++ b/.changeset/open-doors-flash.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Remove opacity from `Select` placeholder diff --git a/.changeset/small-pumas-joke.md b/.changeset/small-pumas-joke.md new file mode 100644 index 00000000000..843f9577091 --- /dev/null +++ b/.changeset/small-pumas-joke.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-js': patch +--- + +Display actual organization membership name in in-app enable organization prompt success message diff --git a/.changeset/true-pans-marry.md b/.changeset/true-pans-marry.md new file mode 100644 index 00000000000..cad0ca5174d --- /dev/null +++ b/.changeset/true-pans-marry.md @@ -0,0 +1,5 @@ +--- +'@clerk/clerk-react': patch +--- + +Prevent props from leaking to child elements in SignUpButton & SignInButton diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 61953716e78..ad05f9acdc3 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 @@ -82,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: 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..cced56cad16 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,11 +1,10 @@ -name: Release -run-name: Release +name: Release (Core 2) +run-name: Release (Core 2) 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 @@ -99,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{ @@ -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 }}) diff --git a/integration/README.md b/integration/README.md index e6165c54dd8..edbe148964c 100644 --- a/integration/README.md +++ b/integration/README.md @@ -63,7 +63,7 @@ Additionally, you can use two flags to configure how Playwright runs: For example: ```shell -pnpm test:integration:base -- --ui email.link.test.ts +pnpm test:integration:base --ui -- email.link.test.ts ``` > [!TIP] diff --git a/integration/presets/envs.ts b/integration/presets/envs.ts index d9a617739b3..844b91663d6 100644 --- a/integration/presets/envs.ts +++ b/integration/presets/envs.ts @@ -154,7 +154,6 @@ const withSessionTasks = base const withSessionTasksResetPassword = base .clone() .setId('withSessionTasksResetPassword') - .setEnvVariable('private', 'CLERK_API_URL', 'https://api.clerkstage.dev') .setEnvVariable('private', 'CLERK_SECRET_KEY', instanceKeys.get('with-session-tasks-reset-password').sk) .setEnvVariable('public', 'CLERK_PUBLISHABLE_KEY', instanceKeys.get('with-session-tasks-reset-password').pk); 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/integration/testUtils/usersService.ts b/integration/testUtils/usersService.ts index 52814990c92..cb9abc22da3 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 = { @@ -76,7 +76,7 @@ export type UserService = { createFakeOrganization: (userId: string) => Promise; getUser: (opts: { id?: string; email?: string }) => Promise; createFakeAPIKey: (userId: string) => Promise; - passwordCompromised: (userId: string) => Promise; + setPasswordCompromised: (userId: string) => Promise; }; /** @@ -208,11 +208,12 @@ 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) => { - await clerkClient.users.__experimental_passwordCompromised(userId); + setPasswordCompromised: async (userId: string) => { + await clerkClient.users.setPasswordCompromised(userId); }, }; diff --git a/integration/tests/elements/otp.test.ts b/integration/tests/elements/otp.test.ts index 59f63f3414f..ea9e5690a72 100644 --- a/integration/tests/elements/otp.test.ts +++ b/integration/tests/elements/otp.test.ts @@ -138,6 +138,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withEmailCodes] })('OTP @elem await otp.pressSequentially('12'); await otp.press('ArrowLeft'); + await expect(page.getByTestId('segmented-otp-1')).toHaveAttribute('data-status', 'selected'); await otp.pressSequentially('1'); await expect(otp).toHaveValue('11'); }); @@ -200,10 +201,13 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withEmailCodes] })('OTP @elem await otp.press('ArrowLeft'); await otp.press('ArrowLeft'); + // Wait for selection to update - cursor should be on index 2 (selecting "3") + await expect(page.getByTestId('segmented-otp-2')).toHaveAttribute('data-status', 'selected'); await otp.press('Delete'); await expect(otp).toHaveValue('124'); await otp.press('ArrowRight'); + await expect(page.getByTestId('segmented-otp-2')).toHaveAttribute('data-status', 'selected'); await otp.press('Delete'); await expect(otp).toHaveValue('12'); }); 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/integration/tests/session-tasks-sign-in-reset-password.test.ts b/integration/tests/session-tasks-sign-in-reset-password.test.ts index cf82347cf09..2a61c446581 100644 --- a/integration/tests/session-tasks-sign-in-reset-password.test.ts +++ b/integration/tests/session-tasks-sign-in-reset-password.test.ts @@ -19,7 +19,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword const user = u.services.users.createFakeUser(); const createdUser = await u.services.users.createBapiUser(user); - await u.services.users.passwordCompromised(createdUser.id); + await u.services.users.setPasswordCompromised(createdUser.id); // Performs sign-in await u.po.signIn.goTo(); @@ -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(); @@ -66,7 +66,7 @@ testAgainstRunningApps({ withEnv: [appConfigs.envs.withSessionTasksResetPassword const user = u.services.users.createFakeUser(); const createdUser = await u.services.users.createBapiUser(user); - await u.services.users.passwordCompromised(createdUser.id); + await u.services.users.setPasswordCompromised(createdUser.id); const fakeOrganization = u.services.organizations.createFakeOrganization(); await u.services.organizations.createBapiOrganization({ name: fakeOrganization.name, @@ -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(); diff --git a/packages/agent-toolkit/CHANGELOG.md b/packages/agent-toolkit/CHANGELOG.md index 55e6ff9f4c6..08d0185b71e 100644 --- a/packages/agent-toolkit/CHANGELOG.md +++ b/packages/agent-toolkit/CHANGELOG.md @@ -1,5 +1,55 @@ # @clerk/agent-toolkit +## 0.2.14 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + +## 0.2.13 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 0.2.12 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 0.2.11 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/types@4.101.8 + +## 0.2.10 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/types@4.101.7 + +## 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..f1066342530 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.14", "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..6db5d368ef2 100644 --- a/packages/astro/CHANGELOG.md +++ b/packages/astro/CHANGELOG.md @@ -1,5 +1,55 @@ # @clerk/astro +## 2.16.12 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + +## 2.16.11 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 2.16.10 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 2.16.9 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/types@4.101.8 + +## 2.16.8 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/types@4.101.7 + +## 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..1bd5557b617 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.12", "description": "Clerk SDK for Astro", "keywords": [ "auth", diff --git a/packages/backend/CHANGELOG.md b/packages/backend/CHANGELOG.md index 7366e973a40..abd0273a828 100644 --- a/packages/backend/CHANGELOG.md +++ b/packages/backend/CHANGELOG.md @@ -1,5 +1,76 @@ # Change Log +## 2.29.2 + +### Patch Changes + +- Fixed an issue when using multiple `acceptsToken` values in `authenticateRequest`. When `acceptsToken` is an array containing both session and machine token types (e.g., `['session_token', 'api_key']`), the function now correctly routes to the appropriate authentication handler based on the actual token type, instead of always treating them as machine tokens. ([#7556](https://github.com/clerk/javascript/pull/7556)) by [@wobsoriano](https://github.com/wobsoriano) + +## 2.29.1 + +### Patch Changes + +- Move cookie to devDependencies and bundle it within @clerk/backend to fix module compatibility problems in TanStack Start apps. ([#7545](https://github.com/clerk/javascript/pull/7545)) by [@nikosdouvlis](https://github.com/nikosdouvlis) + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 2.29.0 + +### Minor Changes + +- Improves resilience by keeping users logged in when Clerk's origin is temporarily unavailable using edge-based token generation ([#7516](https://github.com/clerk/javascript/pull/7516)) by [@bratsos](https://github.com/bratsos) + +### Patch Changes + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 2.28.0 + +### Minor Changes + +- Dropping the `__experimental_` prefix from `setPasswordCompromised` and `unsetPasswordCompromised` and marking them as stable ([#7503](https://github.com/clerk/javascript/pull/7503)) by [@octoper](https://github.com/octoper) + +### Patch Changes + +- Renaming `__experimental_passwordCompromised` to `__experimental_setPasswordCompromised` and introducing `__experimental_unsetPasswordCompromised` ([#7477](https://github.com/clerk/javascript/pull/7477)) by [@octoper](https://github.com/octoper) + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + - @clerk/types@4.101.8 + +## 2.27.1 + +### Patch Changes + +- Fixed an issue where TanStack React Start middleware fails to properly handle requests. ([#7431](https://github.com/clerk/javascript/pull/7431)) by [@wobsoriano](https://github.com/wobsoriano) + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/types@4.101.7 + +## 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..b99f17899ee 100644 --- a/packages/backend/package.json +++ b/packages/backend/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/backend", - "version": "2.26.0", + "version": "2.29.2", "description": "Clerk Backend SDK - REST Client for Backend API & JWT verification utilities", "homepage": "https://clerk.com/", "bugs": { @@ -111,12 +111,12 @@ "dependencies": { "@clerk/shared": "workspace:^", "@clerk/types": "workspace:^", - "cookie": "1.0.2", "standardwebhooks": "^1.0.0", "tslib": "catalog:repo" }, "devDependencies": { "@edge-runtime/vm": "5.0.0", + "cookie": "1.0.2", "msw": "2.11.6", "npm-run-all": "^4.1.5", "snakecase-keys": "9.0.2", 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 }, }); } diff --git a/packages/backend/src/api/endpoints/UserApi.ts b/packages/backend/src/api/endpoints/UserApi.ts index d1408f9e5c5..4422ed1a298 100644 --- a/packages/backend/src/api/endpoints/UserApi.ts +++ b/packages/backend/src/api/endpoints/UserApi.ts @@ -199,6 +199,10 @@ type DeleteUserExternalAccountParams = { externalAccountId: string; }; +type SetPasswordCompromisedParams = { + revokeAllSessions?: boolean; +}; + type UserID = { userId: string; }; @@ -448,14 +452,25 @@ export class UserAPI extends AbstractAPI { }); } - public async __experimental_passwordCompromised(userId: string) { + public async setPasswordCompromised( + userId: string, + params: SetPasswordCompromisedParams = { + revokeAllSessions: false, + }, + ) { + this.requireId(userId); + return this.request({ + method: 'POST', + path: joinPaths(basePath, userId, 'password', 'set_compromised'), + bodyParams: params, + }); + } + + public async unsetPasswordCompromised(userId: string) { this.requireId(userId); return this.request({ method: 'POST', - path: joinPaths(basePath, userId, 'password_compromised'), - bodyParams: { - revokeAllSessions: false, - }, + path: joinPaths(basePath, userId, 'password', 'unset_compromised'), }); } } 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, ); } } diff --git a/packages/backend/src/constants.ts b/packages/backend/src/constants.ts index c79d0b340d3..ceaa1721d37 100644 --- a/packages/backend/src/constants.ts +++ b/packages/backend/src/constants.ts @@ -36,6 +36,7 @@ const QueryParameters = { HandshakeReason: '__clerk_hs_reason', HandshakeNonce: Cookies.HandshakeNonce, HandshakeFormat: 'format', + Session: '__session', } as const; const Headers = { 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/__tests__/handshake.test.ts b/packages/backend/src/tokens/__tests__/handshake.test.ts index f570867edba..4ee06f80a7b 100644 --- a/packages/backend/src/tokens/__tests__/handshake.test.ts +++ b/packages/backend/src/tokens/__tests__/handshake.test.ts @@ -431,6 +431,40 @@ describe('HandshakeService', () => { expect(url.searchParams.get(constants.QueryParameters.SuffixedCookies)).toMatch(/^(true|false)$/); expect(url.searchParams.get(constants.QueryParameters.HandshakeReason)).toBe('test-reason'); }); + + it('should include session token in handshake URL when session token is present', () => { + const contextWithSession = { + ...mockAuthenticateContext, + sessionToken: 'test_session_token_123', + } as AuthenticateContext; + const serviceWithSession = new HandshakeService(contextWithSession, mockOptions, mockOrganizationMatcher); + + const headers = serviceWithSession.buildRedirectToHandshake('test-reason'); + const location = headers.get(constants.Headers.Location); + if (!location) { + throw new Error('Location header is missing'); + } + const url = new URL(location); + + expect(url.searchParams.get(constants.Cookies.Session)).toBe('test_session_token_123'); + }); + + it('should not include session token in handshake URL when session token is absent', () => { + const contextWithoutSession = { + ...mockAuthenticateContext, + sessionToken: undefined, + } as AuthenticateContext; + const serviceWithoutSession = new HandshakeService(contextWithoutSession, mockOptions, mockOrganizationMatcher); + + const headers = serviceWithoutSession.buildRedirectToHandshake('test-reason'); + const location = headers.get(constants.Headers.Location); + if (!location) { + throw new Error('Location header is missing'); + } + const url = new URL(location); + + expect(url.searchParams.get(constants.Cookies.Session)).toBeNull(); + }); }); describe('handleTokenVerificationErrorInDevelopment', () => { diff --git a/packages/backend/src/tokens/__tests__/request.test.ts b/packages/backend/src/tokens/__tests__/request.test.ts index 0d140f8b093..450da616de5 100644 --- a/packages/backend/src/tokens/__tests__/request.test.ts +++ b/packages/backend/src/tokens/__tests__/request.test.ts @@ -1393,7 +1393,7 @@ describe('tokens.authenticateRequest(options)', () => { }); describe('Array of Accepted Token Types', () => { - test('accepts token when it is in the acceptsToken array', async () => { + test('accepts machine token when it is in the acceptsToken array', async () => { server.use( http.post(mockMachineAuthResponses.api_key.endpoint, () => { return HttpResponse.json(mockVerificationResults.api_key); @@ -1409,8 +1409,83 @@ describe('tokens.authenticateRequest(options)', () => { expect(requestState).toBeMachineAuthenticated(); }); - test('returns unauthenticated state when token type is not in the acceptsToken array', async () => { + test('accepts session token in header when session_token is in the acceptsToken array', async () => { + server.use( + http.get('https://api.clerk.test/v1/jwks', () => { + return HttpResponse.json(mockJwks); + }), + ); + + const request = mockRequest({ authorization: `Bearer ${mockJwt}` }); + const requestState = await authenticateRequest( + request, + mockOptions({ acceptsToken: ['session_token', 'api_key'] }), + ); + + expect(requestState).toBeSignedIn(); + expect(requestState.toAuth()).toBeSignedInToAuth(); + }); + + test('accepts session token in cookie when session_token is in the acceptsToken array', async () => { + server.use( + http.get('https://api.clerk.test/v1/jwks', () => { + return HttpResponse.json(mockJwks); + }), + ); + + const requestState = await authenticateRequest( + mockRequestWithCookies( + {}, + { + __session: mockJwt, + __client_uat: '12345', + }, + ), + mockOptions({ acceptsToken: ['session_token', 'api_key'] }), + ); + + // The key assertion: session token is accepted (not rejected as invalid token) + // Cookie-based auth may trigger handshake flow, but should not return TokenTypeMismatch + expect(requestState.tokenType).not.toBeNull(); + expect(requestState.reason).not.toBe(AuthErrorReason.TokenTypeMismatch); + }); + + test('accepts machine token when acceptsToken array contains mixed token types', async () => { + server.use( + http.post(mockMachineAuthResponses.m2m_token.endpoint, () => { + return HttpResponse.json(mockVerificationResults.m2m_token); + }), + ); + const request = mockRequest({ authorization: `Bearer ${mockTokens.m2m_token}` }); + const requestState = await authenticateRequest( + request, + mockOptions({ acceptsToken: ['session_token', 'm2m_token'] }), + ); + + expect(requestState).toBeMachineAuthenticated(); + }); + + test('returns unauthenticated state when machine token type is not in the acceptsToken array', async () => { + const request = mockRequest({ authorization: `Bearer ${mockTokens.m2m_token}` }); + const requestState = await authenticateRequest( + request, + mockOptions({ acceptsToken: ['api_key', 'oauth_token'] }), + ); + + expect(requestState).toBeMachineUnauthenticated({ + tokenType: null, + reason: AuthErrorReason.TokenTypeMismatch, + message: '', + }); + expect(requestState.toAuth()).toBeMachineUnauthenticatedToAuth({ + tokenType: null, + isAuthenticated: false, + }); + }); + + test('returns unauthenticated state when session token is provided but not in the acceptsToken array', async () => { + const request = mockRequest({ authorization: `Bearer ${mockJwt}` }); const requestState = await authenticateRequest( request, mockOptions({ acceptsToken: ['api_key', 'oauth_token'] }), @@ -1426,6 +1501,25 @@ describe('tokens.authenticateRequest(options)', () => { isAuthenticated: false, }); }); + + test('returns unauthenticated state when no token is provided and acceptsToken array contains only machine tokens', async () => { + const requestState = await authenticateRequest( + mockRequestWithCookies( + {}, + { + __session: mockJwt, + __client_uat: '12345', + }, + ), + mockOptions({ acceptsToken: ['api_key', 'm2m_token'] }), + ); + + expect(requestState).toBeMachineUnauthenticated({ + tokenType: null, + reason: AuthErrorReason.TokenTypeMismatch, + message: '', + }); + }); }); describe('Token Location Validation', () => { 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 }; diff --git a/packages/backend/src/tokens/handshake.ts b/packages/backend/src/tokens/handshake.ts index c19267e0506..8b0b79ee0b0 100644 --- a/packages/backend/src/tokens/handshake.ts +++ b/packages/backend/src/tokens/handshake.ts @@ -149,6 +149,10 @@ export class HandshakeService { url.searchParams.append(constants.QueryParameters.HandshakeReason, reason); url.searchParams.append(constants.QueryParameters.HandshakeFormat, 'nonce'); + if (this.authenticateContext.sessionToken) { + url.searchParams.append(constants.QueryParameters.Session, this.authenticateContext.sessionToken); + } + if (this.authenticateContext.instanceType === 'development' && this.authenticateContext.devBrowserToken) { url.searchParams.append(constants.QueryParameters.DevBrowser, this.authenticateContext.devBrowserToken); } diff --git a/packages/backend/src/tokens/request.ts b/packages/backend/src/tokens/request.ts index 863afeabaa4..88999fedc0c 100644 --- a/packages/backend/src/tokens/request.ts +++ b/packages/backend/src/tokens/request.ts @@ -782,7 +782,7 @@ export const authenticateRequest: AuthenticateRequest = (async ( } if (authenticateContext.tokenInHeader) { - if (acceptsToken === 'any') { + if (acceptsToken === 'any' || Array.isArray(acceptsToken)) { return authenticateAnyRequestWithTokenInHeader(); } if (acceptsToken === TokenType.SessionToken) { diff --git a/packages/backend/tsup.config.ts b/packages/backend/tsup.config.ts index 70ad241fe25..a501053eb06 100644 --- a/packages/backend/tsup.config.ts +++ b/packages/backend/tsup.config.ts @@ -21,7 +21,7 @@ export default defineConfig(overrideOptions => { bundle: true, clean: true, minify: false, - noExternal: ['snakecase-keys'], + noExternal: ['snakecase-keys', 'cookie'], }; const esm: Options = { diff --git a/packages/chrome-extension/CHANGELOG.md b/packages/chrome-extension/CHANGELOG.md index d397efd58aa..1b8ee2b351f 100644 --- a/packages/chrome-extension/CHANGELOG.md +++ b/packages/chrome-extension/CHANGELOG.md @@ -1,5 +1,66 @@ # Change Log +## 2.8.17 + +### Patch Changes + +- Updated dependencies [[`68fe8b6`](https://github.com/clerk/javascript/commit/68fe8b65eb47e289d22c6481f1eba7747d40a0b1)]: + - @clerk/clerk-js@5.119.1 + +## 2.8.16 + +### Patch Changes + +- Updated dependencies [[`c4dbcf7`](https://github.com/clerk/javascript/commit/c4dbcf70ec9d96b74bf31f138e7da357ba89e5e7), [`b800900`](https://github.com/clerk/javascript/commit/b800900d721d36d508881ef48e363791f461e0bf)]: + - @clerk/clerk-js@5.119.0 + - @clerk/clerk-react@5.59.3 + +## 2.8.15 + +### Patch Changes + +- Updated dependencies [[`2eaa829`](https://github.com/clerk/javascript/commit/2eaa829b5ddb1e08c241163c94bf73675170143e), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/clerk-js@5.118.0 + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + +## 2.8.14 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/clerk-js@5.117.0 + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + +## 2.8.13 + +### Patch Changes + +- Updated dependencies [[`4bcc8b6`](https://github.com/clerk/javascript/commit/4bcc8b62fcbaf2d4bdc516fe3ba3db6c93eb5a05), [`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`0f4c27e`](https://github.com/clerk/javascript/commit/0f4c27ec05401aaba3fde525f561fea79f83f1b5), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`85fea1d`](https://github.com/clerk/javascript/commit/85fea1dfda0b9b2526f52abf44e57d0b9a4790da)]: + - @clerk/clerk-js@5.116.0 + - @clerk/shared@3.41.0 + - @clerk/clerk-react@5.59.1 + +## 2.8.12 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`28c56ca`](https://github.com/clerk/javascript/commit/28c56ca4fe9a329c4f3db5d14274ff19c107c5b1), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/clerk-js@5.115.0 + - @clerk/shared@3.40.0 + - @clerk/clerk-react@5.59.0 + +## 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..2b6ae449f80 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.17", "description": "Clerk SDK for Chrome extensions", "keywords": [ "auth", diff --git a/packages/clerk-js/CHANGELOG.md b/packages/clerk-js/CHANGELOG.md index 7e04118dd29..e48e842d2d0 100644 --- a/packages/clerk-js/CHANGELOG.md +++ b/packages/clerk-js/CHANGELOG.md @@ -1,5 +1,91 @@ # Change Log +## 5.119.1 + +### Patch Changes + +- Fix role select being disabled on `OrganizationProfile` invite members page when default role is not in roles list ([#7569](https://github.com/clerk/javascript/pull/7569)) by [@LauraBeatris](https://github.com/LauraBeatris) + +## 5.119.0 + +### Minor Changes + +- Fix "You must belong to an organization" screen showing when user has existing memberships, invitations or suggestions ([#7557](https://github.com/clerk/javascript/pull/7557)) by [@LauraBeatris](https://github.com/LauraBeatris) + +- When password is enabled at the instance level, but not required allow users to add a password in the user profile. ([#7549](https://github.com/clerk/javascript/pull/7549)) by [@austincalvelage](https://github.com/austincalvelage) + +### Patch Changes + +- Updated dependencies [[`c4dbcf7`](https://github.com/clerk/javascript/commit/c4dbcf70ec9d96b74bf31f138e7da357ba89e5e7)]: + - @clerk/localizations@3.34.0 + +## 5.118.0 + +### Minor Changes + +- Disable role selection in `OrganizationProfile` during role set migration ([#7541](https://github.com/clerk/javascript/pull/7541)) by [@LauraBeatris](https://github.com/LauraBeatris) + +### Patch Changes + +- Add `data-variant` and `data-color` attributes to the Text component. ([#7535](https://github.com/clerk/javascript/pull/7535)) by [@alexcarpenter](https://github.com/alexcarpenter) + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/localizations@3.33.0 + - @clerk/shared@3.42.0 + +## 5.117.0 + +### Minor Changes + +- Improves resilience by keeping users logged in when Clerk's origin is temporarily unavailable using edge-based token generation ([#7516](https://github.com/clerk/javascript/pull/7516)) by [@bratsos](https://github.com/bratsos) + +### Patch Changes + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + - @clerk/localizations@3.32.1 + +## 5.116.0 + +### Minor Changes + +- Display message in `TaskChooseOrganization` when user is not allowed to create organizations ([#7502](https://github.com/clerk/javascript/pull/7502)) by [@LauraBeatris](https://github.com/LauraBeatris) + +### Patch Changes + +- Fix Web3 connection error handling in `` ([#7489](https://github.com/clerk/javascript/pull/7489)) by [@kduprey](https://github.com/kduprey) + +- Add missing selected and hover states to `RolesListItem` option. ([#7497](https://github.com/clerk/javascript/pull/7497)) by [@alexcarpenter](https://github.com/alexcarpenter) + +- Introduce radio group for `EnableOrganizationsPrompt` ([#7501](https://github.com/clerk/javascript/pull/7501)) by [@LauraBeatris](https://github.com/LauraBeatris) + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`54cd476`](https://github.com/clerk/javascript/commit/54cd476625852983053725ec3eb42abc3ba370df), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + - @clerk/localizations@3.32.0 + +## 5.115.0 + +### Minor Changes + +- Add Web3 Solana support to `` ([#7435](https://github.com/clerk/javascript/pull/7435)) by [@kduprey](https://github.com/kduprey) + +- Add support for Sign in with Solana. ([#7293](https://github.com/clerk/javascript/pull/7293)) by [@kduprey](https://github.com/kduprey) + +### Patch Changes + +- Fix navigation that was not awaited when attempting to set the session active on password sign-in ([#7459](https://github.com/clerk/javascript/pull/7459)) by [@octoper](https://github.com/octoper) + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`a2cc94e`](https://github.com/clerk/javascript/commit/a2cc94eb008601d6d75cafed568fea1fb2634234), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/localizations@3.31.0 + - @clerk/shared@3.40.0 + +## 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/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..584bbf4d296 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": "924KB" }, + { "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/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 2d46da3cc89..4afa01043cf 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.119.1", "description": "Clerk JS library", "keywords": [ "clerk", @@ -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/Organization.ts b/packages/clerk-js/src/core/resources/Organization.ts index ac2568191bf..875aa0141d6 100644 --- a/packages/clerk-js/src/core/resources/Organization.ts +++ b/packages/clerk-js/src/core/resources/Organization.ts @@ -95,11 +95,18 @@ export class Organization extends BaseResource implements OrganizationResource { forceUpdateClient: true, }, ).then(res => { - const { data: roles, total_count } = res?.response as unknown as ClerkPaginatedResponse; + const { + data: roles, + total_count, + has_role_set_migration, + } = res?.response as unknown as ClerkPaginatedResponse & { + has_role_set_migration?: boolean; + }; return { total_count, data: roles.map(role => new Role(role)), + has_role_set_migration, }; }); }; diff --git a/packages/clerk-js/src/core/resources/Session.ts b/packages/clerk-js/src/core/resources/Session.ts index ee5df2c43a1..aeec7d47914 100644 --- a/packages/clerk-js/src/core/resources/Session.ts +++ b/packages/clerk-js/src/core/resources/Session.ts @@ -1,5 +1,5 @@ import { createCheckAuthorization } from '@clerk/shared/authorization'; -import { ClerkWebAuthnError, is4xxError } from '@clerk/shared/error'; +import { ClerkWebAuthnError, is4xxError, MissingExpiredTokenError } from '@clerk/shared/error'; import { retry } from '@clerk/shared/retry'; import type { ActClaim, @@ -399,9 +399,14 @@ export class Session extends BaseResource implements SessionResource { // TODO: update template endpoint to accept organizationId const params: Record = template ? {} : { organizationId }; - const tokenResolver = Token.create(path, params, skipCache); + const lastActiveToken = this.lastActiveToken?.getRawString(); - // Cache the promise immediately to prevent concurrent calls from triggering duplicate requests + const tokenResolver = Token.create(path, params, skipCache ? { debug: 'skip_cache' } : undefined).catch(e => { + if (MissingExpiredTokenError.is(e) && lastActiveToken) { + return Token.create(path, { ...params }, { expired_token: lastActiveToken }); + } + throw e; + }); SessionTokenCache.set({ tokenId, tokenResolver }); return tokenResolver.then(token => { diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 73f43de78e6..fdf8b728506 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,31 @@ export class SignIn extends BaseResource implements SignInResource { }); }; + /** + * Authenticates a user using a Solana Web3 wallet during sign-in. + * + * @param params - Configuration for Solana authentication + * @param params.walletName - The name of the Solana wallet to use for authentication + * @returns A promise that resolves to the updated SignIn resource + * @throws {ClerkRuntimeError} If walletName is not provided or wallet connection fails + * + * @example + * ```typescript + * await signIn.authenticateWithSolana({ walletName: 'phantom' }); + * ``` + */ + public authenticateWithSolana = async ({ + walletName, + }: SignInAuthenticateWithSolanaParams): Promise => { + const identifier = await getSolanaIdentifier(walletName); + return this.authenticateWithWeb3({ + identifier, + generateSignature: p => generateSignatureWithSolana({ ...p, walletName }), + strategy: 'web3_solana_signature', + walletName, + }); + }; + public authenticateWithPasskey = async (params?: AuthenticateWithPasskeyParams): Promise => { const { flow } = params || {}; @@ -972,7 +1006,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 +1024,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 +1058,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 +1072,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..8421ecd70f3 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,40 @@ export class SignUp extends BaseResource implements SignUpResource { }); }; + /** + * Authenticates a user using a Solana Web3 wallet during sign-up. + * + * @param params - Configuration for Solana authentication + * @param params.walletName - The name of the Solana wallet to use (e.g., 'phantom') + * @param params.unsafeMetadata - Optional unsafe metadata to attach to the user + * @param params.legalAccepted - Optional flag indicating legal terms acceptance + * @returns A promise that resolves to the updated SignUp resource + * @throws {ClerkRuntimeError} If wallet connection fails + * + * @example + * ```typescript + * await signUp.authenticateWithSolana({ + * walletName: 'phantom', + * legalAccepted: true + * }); + * ``` + */ + public authenticateWithSolana = async ({ + walletName, + unsafeMetadata, + legalAccepted, + }: SignUpAuthenticateWithSolanaParams): Promise => { + const identifier = await getSolanaIdentifier(walletName); + return this.authenticateWithWeb3({ + identifier, + generateSignature: p => generateSignatureWithSolana({ ...p, walletName }), + unsafeMetadata, + strategy: 'web3_solana_signature', + legalAccepted, + walletName, + }); + }; + private authenticateWithRedirectOrPopup = async ( params: AuthenticateWithRedirectParams & { unsafeMetadata?: SignUpUnsafeMetadata; diff --git a/packages/clerk-js/src/core/resources/Token.ts b/packages/clerk-js/src/core/resources/Token.ts index 2b75d8b3c52..dcdf885fe6c 100644 --- a/packages/clerk-js/src/core/resources/Token.ts +++ b/packages/clerk-js/src/core/resources/Token.ts @@ -9,13 +9,11 @@ export class Token extends BaseResource implements TokenResource { jwt?: JWT; - static async create(path: string, body: any = {}, skipCache = false): Promise { - const search = skipCache ? `debug=skip_cache` : undefined; - + static async create(path: string, body: any = {}, search: Record = {}): Promise { const json = (await BaseResource._fetch({ - body, method: 'POST', path, + body, search, })) as unknown as TokenJSON; diff --git a/packages/clerk-js/src/core/resources/UserSettings.ts b/packages/clerk-js/src/core/resources/UserSettings.ts index 8af85ab38c8..ed5951b7037 100644 --- a/packages/clerk-js/src/core/resources/UserSettings.ts +++ b/packages/clerk-js/src/core/resources/UserSettings.ts @@ -191,7 +191,7 @@ export class UserSettings extends BaseResource implements UserSettingsResource { } get instanceIsPasswordBased() { - return Boolean(this.attributes?.password?.enabled && this.attributes.password?.required); + return Boolean(this.attributes?.password?.enabled); } get hasValidAuthFactor() { diff --git a/packages/clerk-js/src/core/resources/__tests__/Session.test.ts b/packages/clerk-js/src/core/resources/__tests__/Session.test.ts index 4de20208046..eb51257191d 100644 --- a/packages/clerk-js/src/core/resources/__tests__/Session.test.ts +++ b/packages/clerk-js/src/core/resources/__tests__/Session.test.ts @@ -1,3 +1,4 @@ +import { ClerkAPIResponseError } from '@clerk/shared/error'; import type { InstanceType, OrganizationJSON, SessionJSON } from '@clerk/shared/types'; import { afterEach, beforeEach, describe, expect, it, type Mock, vi } from 'vitest'; @@ -1085,4 +1086,151 @@ describe('Session', () => { expect(isAuthorized).toBe(true); }); }); + + describe('origin outage mode fallback', () => { + let dispatchSpy: ReturnType; + let fetchSpy: ReturnType; + + beforeEach(() => { + SessionTokenCache.clear(); + dispatchSpy = vi.spyOn(eventBus, 'emit'); + fetchSpy = vi.spyOn(BaseResource, '_fetch' as any); + BaseResource.clerk = clerkMock() as any; + }); + + afterEach(() => { + dispatchSpy?.mockRestore(); + fetchSpy?.mockRestore(); + BaseResource.clerk = null as any; + }); + + it('should retry with expired token when API returns 422 with missing_expired_token error', async () => { + const session = new Session({ + status: 'active', + id: 'session_1', + object: 'session', + user: createUser({}), + last_active_organization_id: null, + last_active_token: { object: 'token', jwt: mockJwt }, + actor: null, + created_at: new Date().getTime(), + updated_at: new Date().getTime(), + } as SessionJSON); + + SessionTokenCache.clear(); + + const errorResponse = new ClerkAPIResponseError('Missing expired token', { + data: [ + { code: 'missing_expired_token', message: 'Missing expired token', long_message: 'Missing expired token' }, + ], + status: 422, + }); + fetchSpy.mockRejectedValueOnce(errorResponse); + + fetchSpy.mockResolvedValueOnce({ object: 'token', jwt: mockJwt }); + + await session.getToken(); + + expect(fetchSpy).toHaveBeenCalledTimes(2); + + expect(fetchSpy.mock.calls[0][0]).toMatchObject({ + path: '/client/sessions/session_1/tokens', + method: 'POST', + body: { organizationId: null }, + }); + + expect(fetchSpy.mock.calls[1][0]).toMatchObject({ + path: '/client/sessions/session_1/tokens', + method: 'POST', + body: { organizationId: null }, + search: { expired_token: mockJwt }, + }); + }); + + it('should not retry with expired token when lastActiveToken is not available', async () => { + const session = new Session({ + status: 'active', + id: 'session_1', + object: 'session', + user: createUser({}), + last_active_organization_id: null, + last_active_token: null, + actor: null, + created_at: new Date().getTime(), + updated_at: new Date().getTime(), + } as unknown as SessionJSON); + + SessionTokenCache.clear(); + + const errorResponse = new ClerkAPIResponseError('Missing expired token', { + data: [ + { code: 'missing_expired_token', message: 'Missing expired token', long_message: 'Missing expired token' }, + ], + status: 422, + }); + fetchSpy.mockRejectedValue(errorResponse); + + await expect(session.getToken()).rejects.toMatchObject({ + status: 422, + errors: [{ code: 'missing_expired_token' }], + }); + + expect(fetchSpy).toHaveBeenCalledTimes(1); + }); + + it('should not retry with expired token for non-422 errors', async () => { + const session = new Session({ + status: 'active', + id: 'session_1', + object: 'session', + user: createUser({}), + last_active_organization_id: null, + last_active_token: { object: 'token', jwt: mockJwt }, + actor: null, + created_at: new Date().getTime(), + updated_at: new Date().getTime(), + } as SessionJSON); + + SessionTokenCache.clear(); + + const errorResponse = new ClerkAPIResponseError('Bad request', { + data: [{ code: 'bad_request', message: 'Bad request', long_message: 'Bad request' }], + status: 400, + }); + fetchSpy.mockRejectedValueOnce(errorResponse); + + await expect(session.getToken()).rejects.toThrow(ClerkAPIResponseError); + + expect(fetchSpy).toHaveBeenCalledTimes(1); + }); + + it('should not retry with expired token when error code is different', async () => { + const session = new Session({ + status: 'active', + id: 'session_1', + object: 'session', + user: createUser({}), + last_active_organization_id: null, + last_active_token: { object: 'token', jwt: mockJwt }, + actor: null, + created_at: new Date().getTime(), + updated_at: new Date().getTime(), + } as unknown as SessionJSON); + + SessionTokenCache.clear(); + + const errorResponse = new ClerkAPIResponseError('Validation failed', { + data: [{ code: 'validation_error', message: 'Validation failed', long_message: 'Validation failed' }], + status: 422, + }); + fetchSpy.mockRejectedValue(errorResponse); + + await expect(session.getToken()).rejects.toMatchObject({ + status: 422, + errors: [{ code: 'validation_error' }], + }); + + expect(fetchSpy).toHaveBeenCalledTimes(1); + }); + }); }); diff --git a/packages/clerk-js/src/core/resources/__tests__/Token.test.ts b/packages/clerk-js/src/core/resources/__tests__/Token.test.ts index bd1830cb4e5..d4738734267 100644 --- a/packages/clerk-js/src/core/resources/__tests__/Token.test.ts +++ b/packages/clerk-js/src/core/resources/__tests__/Token.test.ts @@ -137,7 +137,7 @@ describe('Token', () => { mockFetch(true, 200, { jwt: mockJwt }); BaseResource.clerk = { getFapiClient: () => createFapiClient(baseFapiClientOptions) } as any; - await Token.create('/path/to/tokens', {}, true); + await Token.create('/path/to/tokens', {}, { debug: 'skip_cache' }); const [url] = (global.fetch as Mock).mock.calls[0]; expect(url.toString()).toContain('debug=skip_cache'); @@ -147,10 +147,51 @@ describe('Token', () => { mockFetch(true, 200, { jwt: mockJwt }); BaseResource.clerk = { getFapiClient: () => createFapiClient(baseFapiClientOptions) } as any; - await Token.create('/path/to/tokens', {}, false); + await Token.create('/path/to/tokens', {}); const [url] = (global.fetch as Mock).mock.calls[0]; expect(url.toString()).not.toContain('debug=skip_cache'); }); }); + + describe('create with search parameters', () => { + afterEach(() => { + (global.fetch as Mock)?.mockClear(); + BaseResource.clerk = null as any; + }); + + it('should include search parameters in the API request', async () => { + mockFetch(true, 200, { object: 'token', jwt: mockJwt }); + BaseResource.clerk = { getFapiClient: () => createFapiClient(baseFapiClientOptions) } as any; + + await Token.create('/path/to/tokens', {}, { expired_token: 'some_expired_token' }); + + expect(global.fetch).toHaveBeenCalledTimes(1); + const [url, options] = (global.fetch as Mock).mock.calls[0]; + expect(url.toString()).toContain('https://clerk.example.com/v1/path/to/tokens'); + expect(url.toString()).toContain('expired_token=some_expired_token'); + expect(options).toMatchObject({ + method: 'POST', + credentials: 'include', + headers: expect.any(Headers), + }); + }); + + it('should work without search parameters (backward compatibility)', async () => { + mockFetch(true, 200, { object: 'token', jwt: mockJwt }); + BaseResource.clerk = { getFapiClient: () => createFapiClient(baseFapiClientOptions) } as any; + + await Token.create('/path/to/tokens'); + + expect(global.fetch).toHaveBeenCalledTimes(1); + const [url, options] = (global.fetch as Mock).mock.calls[0]; + expect(url.toString()).toContain('https://clerk.example.com/v1/path/to/tokens'); + expect(options).toMatchObject({ + method: 'POST', + body: '', + credentials: 'include', + headers: expect.any(Headers), + }); + }); + }); }); diff --git a/packages/clerk-js/src/core/resources/__tests__/UserSettings.test.ts b/packages/clerk-js/src/core/resources/__tests__/UserSettings.test.ts index e3ec7d04cca..e87df8e5028 100644 --- a/packages/clerk-js/src/core/resources/__tests__/UserSettings.test.ts +++ b/packages/clerk-js/src/core/resources/__tests__/UserSettings.test.ts @@ -75,6 +75,17 @@ describe('UserSettings', () => { }, }, } as any as UserSettingsJSON); + expect(sut.instanceIsPasswordBased).toEqual(true); + + sut = new UserSettings({ + attributes: { + password: { + enabled: false, + required: false, + }, + }, + } as any as UserSettingsJSON); + expect(sut.instanceIsPasswordBased).toEqual(false); }); 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..3272f295480 --- /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/OrganizationProfile/ActiveMembersList.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx index f4badb83534..acb28b9cfaa 100644 --- a/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/ActiveMembersList.tsx @@ -20,7 +20,7 @@ export const ActiveMembersList = ({ memberships, pageSize }: ActiveMembersListPr const card = useCardState(); const { organization } = useOrganization(); - const { options, isLoading: loadingRoles } = useFetchRoles(); + const { options, isLoading: loadingRoles, hasRoleSetMigration } = useFetchRoles(); if (!organization) { return null; @@ -61,6 +61,7 @@ export const ActiveMembersList = ({ memberships, pageSize }: ActiveMembersListPr options={options} onRoleChange={handleRoleChange(m)} onRemove={handleRemove(m)} + hasRoleSetMigration={hasRoleSetMigration} /> ))} /> @@ -73,8 +74,9 @@ const MemberRow = (props: { onRemove: () => unknown; options: Parameters[0]['roles']; onRoleChange: (role: string) => unknown; + hasRoleSetMigration: boolean; }) => { - const { membership, onRemove, onRoleChange, options } = props; + const { membership, onRemove, onRoleChange, options, hasRoleSetMigration } = props; const { localizeCustomRole } = useLocalizeCustomRoles(); const card = useCardState(); const { user } = useUser(); @@ -112,7 +114,7 @@ const MemberRow = (props: { } > { label: localizationKeys('formFieldLabel__emailAddresses'), }); - const defaultRole = useDefaultRole(); const roleField = useFormControl('role', '', { label: localizationKeys('formFieldLabel__role'), }); - useEffect(() => { - if (roleField.value || !defaultRole) { - return; - } - - roleField.setValue(defaultRole); - }, [defaultRole, roleField]); - if (!organization) { return null; } @@ -199,9 +190,24 @@ export const InviteMembersForm = (props: InviteMembersFormProps) => { }; const AsyncRoleSelect = (field: ReturnType>) => { - const { options, isLoading } = useFetchRoles(); - + const { options, isLoading, hasRoleSetMigration } = useFetchRoles(); const { t } = useLocalizations(); + const defaultRole = useDefaultRole(); + + useEffect(() => { + if (field.value || !defaultRole) { + return; + } + + // Skip if the default role from org settings is not in the current role set + // This will eventually be returned by the roles endpoint, and `organizationSettings.domains.defaultRole` will be deprecated + const defaultRoleExists = options?.some(option => option.value === defaultRole); + if (!defaultRoleExists) { + return; + } + + field.setValue(defaultRole); + }, [defaultRole, options, field]); return ( @@ -212,7 +218,7 @@ const AsyncRoleSelect = (field: ReturnType>) => { field.setValue(value)} triggerSx={t => ({ minWidth: t.sizes.$40, justifyContent: 'space-between', display: 'flex' })} optionListSx={t => ({ minWidth: t.sizes.$48 })} diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/MemberListTable.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/MemberListTable.tsx index c47c185581a..9eb9592e108 100644 --- a/packages/clerk-js/src/ui/components/OrganizationProfile/MemberListTable.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/MemberListTable.tsx @@ -242,6 +242,12 @@ const RolesListItem = memo((props: RolesListItemProps) => { width: '100%', padding: `${theme.space.$2} ${theme.space.$4}`, borderRadius: theme.radii.$md, + '&:hover': { + backgroundColor: theme.colors.$neutralAlpha100, + }, + '&[data-focused="true"]': { + backgroundColor: theme.colors.$neutralAlpha150, + }, }), sx, ]} diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx index 57b98fd8e7e..83175235d6c 100644 --- a/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/OrganizationMembers.tsx @@ -1,11 +1,13 @@ import { useOrganization } from '@clerk/shared/react'; import { useState } from 'react'; +import { Alert } from '@/ui/elements/Alert'; import { Animated } from '@/ui/elements/Animated'; import { Card } from '@/ui/elements/Card'; import { useCardState, withCardStateProvider } from '@/ui/elements/contexts'; import { Header } from '@/ui/elements/Header'; import { Tab, TabPanel, TabPanels, Tabs, TabsList } from '@/ui/elements/Tabs'; +import { useFetchRoles } from '@/ui/hooks/useFetchRoles'; import { NotificationCountBadge, useProtect } from '../../common'; import { useEnvironment, useOrganizationProfileContext } from '../../contexts'; @@ -24,6 +26,7 @@ export const ACTIVE_MEMBERS_PAGE_SIZE = 10; export const OrganizationMembers = withCardStateProvider(() => { const { organizationSettings } = useEnvironment(); const card = useCardState(); + const { hasRoleSetMigration } = useFetchRoles(); const canManageMemberships = useProtect({ permission: 'org:sys_memberships:manage' }); const canReadMemberships = useProtect({ permission: 'org:sys_memberships:read' }); const isDomainsEnabled = organizationSettings?.domains?.enabled && canManageMemberships; @@ -142,6 +145,17 @@ export const OrganizationMembers = withCardStateProvider(() => { /> } /> + {hasRoleSetMigration && ( + + )} { clearFetchCache(); }); + it('disables the role select when role set migration is in progress', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', role: 'admin' }], + }); + }); + + fixtures.clerk.organization?.getInvitations.mockRejectedValue(null); + fixtures.clerk.organization?.getRoles.mockResolvedValue({ + total_count: 2, + has_role_set_migration: true, + data: [ + { + pathRoot: '', + reload: vi.fn(), + id: 'member', + key: 'member', + name: 'member', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + { + pathRoot: '', + reload: vi.fn(), + id: 'admin', + key: 'admin', + name: 'Admin', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + }); + + const { getByRole } = render( + + + , + { wrapper }, + ); + + await waitFor(() => { + expect(getByRole('button', { name: /select role/i })).toBeDisabled(); + }); + }); + it('renders the component', async () => { const { wrapper, fixtures } = await createFixtures(f => { f.withOrganizations(); @@ -195,6 +245,59 @@ describe('InviteMembersPage', () => { await waitFor(() => expect(getByRole('button', { name: /select role/i })).toBeInTheDocument()); }); + it('enables selecting other options if default role is not available', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withOrganizationDomains(undefined, 'mydefaultrole'); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', role: 'admin' }], + }); + }); + + fixtures.clerk.organization?.getInvitations.mockRejectedValue(null); + fixtures.clerk.organization?.getRoles.mockResolvedValue({ + total_count: 1, + data: [ + { + pathRoot: '', + reload: vi.fn(), + id: 'member', + key: 'member', + name: 'member', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + { + pathRoot: '', + reload: vi.fn(), + id: 'admin', + key: 'admin', + name: 'admin', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + }); + + fixtures.clerk.organization?.inviteMembers.mockResolvedValueOnce([{}] as OrganizationInvitationResource[]); + const { findByText, getByRole, userEvent, getByTestId } = render( + + + , + { wrapper }, + ); + await userEvent.type(getByTestId('tag-input'), 'test+1@clerk.com,'); + await waitFor(() => expect(getByRole('button', { name: /select role/i })).toBeInTheDocument()); + await userEvent.click(getByRole('button', { name: /select role/i })); + await userEvent.click(await findByText(/admin/i)); + await waitFor(() => expect(getByRole('button', { name: 'Send invitations' })).not.toBeDisabled()); + }); + it('enables send button with default role once email address has been entered', async () => { const defaultRole = 'mydefaultrole'; @@ -256,7 +359,9 @@ describe('InviteMembersPage', () => { expect(getByRole('button', { name: 'Send invitations' })).toBeDisabled(); await userEvent.type(getByTestId('tag-input'), 'test+1@clerk.com,'); - expect(getByRole('button', { name: 'Send invitations' })).not.toBeDisabled(); + await waitFor(() => { + expect(getByRole('button', { name: 'Send invitations' })).not.toBeDisabled(); + }); await userEvent.click(getByRole('button', { name: /mydefaultrole/i })); }); }); diff --git a/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx b/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx index 1f9596b427e..7a65ad0da98 100644 --- a/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx +++ b/packages/clerk-js/src/ui/components/OrganizationProfile/__tests__/OrganizationMembers.test.tsx @@ -561,6 +561,217 @@ describe('OrganizationMembers', () => { await waitFor(() => expect(getByRole('button', { name: 'Managed Admin' })).toBeDisabled()); }); + it('disables the role select when role set migration is in progress', async () => { + const membersList: OrganizationMembershipResource[] = [ + createFakeMember({ + id: '1', + orgId: '1', + role: 'admin', + identifier: 'test_user1', + firstName: 'First1', + lastName: 'Last1', + createdAt: new Date('2022-01-01'), + }), + createFakeMember({ + id: '2', + orgId: '1', + role: 'member', + identifier: 'test_user2', + firstName: 'First2', + lastName: 'Last2', + createdAt: new Date('2022-01-01'), + }), + ]; + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', id: '1' }], + }); + }); + + fixtures.clerk.organization?.getInvitations.mockRejectedValue(null); + + fixtures.clerk.organization?.getMemberships.mockReturnValue( + Promise.resolve({ + data: membersList, + total_count: 2, + }), + ); + + fixtures.clerk.organization?.getRoles.mockResolvedValue({ + total_count: 2, + has_role_set_migration: true, + data: [ + { + pathRoot: '', + reload: vi.fn(), + id: 'member', + key: 'member', + name: 'Member', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + { + pathRoot: '', + reload: vi.fn(), + id: 'admin', + key: 'admin', + name: 'Admin', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + }); + + const { container, queryAllByRole } = render(, { wrapper }); + + await waitForLoadingCompleted(container); + + const adminButtons = queryAllByRole('button', { name: 'Admin' }); + const memberButtons = queryAllByRole('button', { name: 'Member' }); + + adminButtons.forEach(button => expect(button).toBeDisabled()); + memberButtons.forEach(button => expect(button).toBeDisabled()); + }); + + it('displays a warning alert when role set migration is in progress', async () => { + const membersList: OrganizationMembershipResource[] = [ + createFakeMember({ + id: '1', + orgId: '1', + role: 'admin', + identifier: 'test_user1', + firstName: 'First1', + lastName: 'Last1', + createdAt: new Date('2022-01-01'), + }), + ]; + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', id: '1' }], + }); + }); + + fixtures.clerk.organization?.getInvitations.mockRejectedValue(null); + + fixtures.clerk.organization?.getMemberships.mockReturnValue( + Promise.resolve({ + data: membersList, + total_count: 1, + }), + ); + + fixtures.clerk.organization?.getRoles.mockResolvedValue({ + total_count: 2, + has_role_set_migration: true, + data: [ + { + pathRoot: '', + reload: vi.fn(), + id: 'member', + key: 'member', + name: 'Member', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + { + pathRoot: '', + reload: vi.fn(), + id: 'admin', + key: 'admin', + name: 'Admin', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + }); + + const { container, getByText } = render(, { wrapper }); + + await waitForLoadingCompleted(container); + + expect(getByText('Roles are temporarily locked')).toBeInTheDocument(); + expect( + getByText("We are updating the available roles. Once that's done, you'll be able to update roles again."), + ).toBeInTheDocument(); + }); + + it('does not display a warning alert when role set migration is not in progress', async () => { + const membersList: OrganizationMembershipResource[] = [ + createFakeMember({ + id: '1', + orgId: '1', + role: 'admin', + identifier: 'test_user1', + firstName: 'First1', + lastName: 'Last1', + createdAt: new Date('2022-01-01'), + }), + ]; + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withUser({ + email_addresses: ['test@clerk.com'], + organization_memberships: [{ name: 'Org1', id: '1' }], + }); + }); + + fixtures.clerk.organization?.getInvitations.mockRejectedValue(null); + + fixtures.clerk.organization?.getMemberships.mockReturnValue( + Promise.resolve({ + data: membersList, + total_count: 1, + }), + ); + + fixtures.clerk.organization?.getRoles.mockResolvedValue({ + total_count: 2, + has_role_set_migration: false, + data: [ + { + pathRoot: '', + reload: vi.fn(), + id: 'member', + key: 'member', + name: 'Member', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + { + pathRoot: '', + reload: vi.fn(), + id: 'admin', + key: 'admin', + name: 'Admin', + description: '', + permissions: [], + createdAt: new Date(), + updatedAt: new Date(), + }, + ], + }); + + const { container, queryByText } = render(, { wrapper }); + + await waitForLoadingCompleted(container); + + expect(queryByText('Roles are temporarily locked')).not.toBeInTheDocument(); + }); + describe('InviteMembersScreen', () => { it('shows the invite screen when user clicks on Invite button', async () => { const { wrapper, fixtures } = await createFixtures(f => { diff --git a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx index 6942ae08806..c0ac1acc82a 100644 --- a/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx +++ b/packages/clerk-js/src/ui/components/SessionTasks/tasks/TaskChooseOrganization/ChooseOrganizationScreen.tsx @@ -33,6 +33,7 @@ type ChooseOrganizationScreenProps = { export const ChooseOrganizationScreen = (props: ChooseOrganizationScreenProps) => { const card = useCardState(); + const { user } = useUser(); const { ref, userMemberships, userSuggestions, userInvitations } = useOrganizationListInView(); const isLoading = userMemberships?.isLoading || userInvitations?.isLoading || userSuggestions?.isLoading; @@ -50,7 +51,13 @@ export const ChooseOrganizationScreen = (props: ChooseOrganizationScreenProps) = sx={t => ({ padding: `${t.space.$none} ${t.space.$8}` })} > - + ({ margin: `${t.space.$none} ${t.space.$8}` })}>{card.error} 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 b0604a57582..f6daf9e1dcd 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 @@ -3,7 +3,10 @@ import { describe, expect, it } from 'vitest'; import { bindCreateFixtures } from '@/test/create-fixtures'; import { render } from '@/test/utils'; -import { createFakeUserOrganizationMembership } from '@/ui/components/OrganizationSwitcher/__tests__/test-utils'; +import { + createFakeUserOrganizationMembership, + createFakeUserOrganizationSuggestion, +} from '@/ui/components/OrganizationSwitcher/__tests__/test-utils'; import { TaskChooseOrganization } from '..'; @@ -240,4 +243,75 @@ describe('TaskChooseOrganization', () => { expect(queryByLabelText(/Slug/i)).toBeInTheDocument(); }); }); + + describe('when users are not allowed to create organizations', () => { + it('does not display create organization screen', async () => { + const { wrapper } = await createFixtures(f => { + f.withOrganizations(); + f.withForceOrganizationSelection(); + f.withUser({ + create_organization_enabled: false, + tasks: [{ key: 'choose-organization' }], + }); + }); + + const { findByText, queryByText } = render(, { wrapper }); + + expect(await findByText(/you must belong to an organization/i)).toBeInTheDocument(); + expect(await findByText(/contact your organization admin for an invitation/i)).toBeInTheDocument(); + expect(queryByText(/create new organization/i)).not.toBeInTheDocument(); + }); + + it('with existing memberships or suggestions, displays create organization screen', async () => { + const { wrapper, fixtures } = await createFixtures(f => { + f.withOrganizations(); + f.withForceOrganizationSelection(); + f.withUser({ + create_organization_enabled: false, + tasks: [{ key: 'choose-organization' }], + }); + }); + + fixtures.clerk.user?.getOrganizationMemberships.mockReturnValueOnce( + Promise.resolve({ + data: [ + createFakeUserOrganizationMembership({ + id: '1', + organization: { + id: '1', + name: 'Existing Org', + slug: 'org1', + membersCount: 1, + adminDeleteEnabled: false, + maxAllowedMemberships: 1, + pendingInvitationsCount: 1, + }, + }), + ], + total_count: 1, + }), + ); + + fixtures.clerk.user?.getOrganizationSuggestions.mockReturnValueOnce( + Promise.resolve({ + data: [ + createFakeUserOrganizationSuggestion({ + id: '2', + emailAddress: 'two@clerk.com', + publicOrganizationData: { + name: 'OrgTwoSuggestion', + }, + }), + ], + total_count: 1, + }), + ); + + const { findByText, queryByText } = render(, { wrapper }); + + expect(await findByText('Join an existing organization')).toBeInTheDocument(); + expect(await queryByText('Create new organization')).not.toBeInTheDocument(); + expect(await findByText('Existing Org')).toBeInTheDocument(); + }); + }); }); 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 4d8135592c2..dc3375e0d0b 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 @@ -5,6 +5,7 @@ import { 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 { useMultipleSessions } from '@/ui/hooks/useMultipleSessions'; import { useOrganizationListInView } from '@/ui/hooks/useOrganizationListInView'; @@ -13,24 +14,16 @@ import { ChooseOrganizationScreen } from './ChooseOrganizationScreen'; import { CreateOrganizationScreen } from './CreateOrganizationScreen'; const TaskChooseOrganizationInternal = () => { - const { signOut } = useClerk(); const { user } = useUser(); - const { session } = useSession(); const { userMemberships, userSuggestions, userInvitations } = useOrganizationListInView(); - const { otherSessions } = useMultipleSessions({ user }); - const { navigateAfterSignOut, navigateAfterMultiSessionSingleSignOutUrl } = useSignOutContext(); - - const handleSignOut = () => { - if (otherSessions.length === 0) { - return signOut(navigateAfterSignOut); - } - - return signOut(navigateAfterMultiSessionSingleSignOutUrl, { sessionId: session?.id }); - }; const isLoading = userMemberships?.isLoading || userInvitations?.isLoading || userSuggestions?.isLoading; const hasExistingResources = !!(userMemberships?.count || userInvitations?.count || userSuggestions?.count); - const identifier = user?.primaryEmailAddress?.emailAddress ?? user?.username; + const isOrganizationCreationDisabled = !isLoading && !user?.createOrganizationEnabled && !hasExistingResources; + + if (isOrganizationCreationDisabled) { + return ; + } return ( @@ -58,34 +51,56 @@ const TaskChooseOrganizationInternal = () => { )} - - ({ width: '100%' })} - > - {identifier && ( - - )} - ({ flexShrink: 0 })} - onClick={handleSignOut} - localizationKey={localizationKeys('taskChooseOrganization.signOut.actionLink')} - /> - - + ); }; +const TaskChooseOrganizationCardFooter = () => { + const { signOut } = useClerk(); + const { user } = useUser(); + const { session } = useSession(); + const { otherSessions } = useMultipleSessions({ user }); + const { navigateAfterSignOut, navigateAfterMultiSessionSingleSignOutUrl } = useSignOutContext(); + + const handleSignOut = () => { + if (otherSessions.length === 0) { + return signOut(navigateAfterSignOut); + } + + return signOut(navigateAfterMultiSessionSingleSignOutUrl, { sessionId: session?.id }); + }; + + const identifier = user?.primaryEmailAddress?.emailAddress ?? user?.username; + + return ( + + ({ width: '100%' })} + > + {identifier && ( + + )} + ({ flexShrink: 0 })} + onClick={handleSignOut} + localizationKey={localizationKeys('taskChooseOrganization.signOut.actionLink')} + /> + + + ); +}; + type TaskChooseOrganizationFlowsProps = { initialFlow: 'create' | 'choose'; }; @@ -104,6 +119,29 @@ const TaskChooseOrganizationFlows = withCardStateProvider((props: TaskChooseOrga return setCurrentFlow('create')} />; }); +function OrganizationCreationDisabledScreen() { + return ( + + + + + + + + + + + + + + + ); +} + export const TaskChooseOrganization = withCoreSessionSwitchGuard( withTaskGuard(withCardStateProvider(TaskChooseOrganizationInternal), 'choose-organization'), ); diff --git a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx index 92605902273..1780bd11e41 100644 --- a/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx +++ b/packages/clerk-js/src/ui/components/SignIn/SignInFactorOnePasswordCard.tsx @@ -79,7 +79,7 @@ export const SignInFactorOnePasswordCard = (props: SignInFactorOnePasswordProps) return setActive({ session: res.createdSessionId, navigate: ({ session }) => { - void navigateOnSetActive({ session, redirectUrl: afterSignInUrl }); + return navigateOnSetActive({ session, redirectUrl: afterSignInUrl }); }, }); case 'needs_second_factor': 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..4a94a0350b9 --- /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 Web3SolanaWalletButtons = lazy(() => + import(/* webpackChunkName: "web3-solana-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..e8d6bc3196f --- /dev/null +++ b/packages/clerk-js/src/ui/components/SignUp/SignUpStartSolanaWalletsCard.tsx @@ -0,0 +1,93 @@ +import { useClerk } from '@clerk/shared/react'; +import { lazy, Suspense } from 'react'; + +import { withRedirectToAfterSignUp, withRedirectToSignUpTask } 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 Web3SolanaWalletButtons = lazy(() => + import(/* webpackChunkName: "web3-solana-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} + + ({ + height: '100%', + minHeight: t.sizes.$32, + })} + > + + + } + > + { + 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/components/UserProfile/Web3Form.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx index 8ebea04501d..e92d49f157f 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3Form.tsx @@ -1,35 +1,52 @@ 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'; +import { web3CallbackErrorHandler } from '@/ui/utils/web3CallbackErrorHandler'; import { generateWeb3Signature, getWeb3Identifier } from '../../../utils/web3'; -import { descriptors, Image, localizationKeys, Text } from '../../customizables'; +import { descriptors, Image, localizationKeys } 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,70 +55,56 @@ 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) { card.setIdle(); - const fieldError = getFieldError(err); - if (fieldError) { - card.setError(fieldError.longMessage); - } else { - handleError(err, [], card.setError); - } + web3CallbackErrorHandler(err, card.setError); } }; - 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 })} - /> - } - /> - ))} - - {card.error && ( - ({ - padding: t.sizes.$1x5, - paddingLeft: t.sizes.$8x5, - })} + + - {card.error} - - )} + {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 })} + /> + } + /> + ))} + + + + + + + ); -}); +}; diff --git a/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx b/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx index 1902f819f19..525246c6bd0 100644 --- a/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3Section.tsx @@ -95,7 +95,10 @@ export const Web3Section = withCardStateProvider( - + @@ -108,14 +111,14 @@ export const Web3Section = withCardStateProvider( ); })} - {shouldAllowCreation && setActionValue(null)} />} + {shouldAllowCreation && } ); }, ); -const Web3WalletMenu = ({ walletId }: { walletId: string }) => { +const Web3WalletMenu = ({ walletId, isVerified }: { walletId: string; isVerified: boolean }) => { const card = useCardState(); const { open } = useActionContext(); const { user } = useUser(); @@ -126,7 +129,8 @@ const Web3WalletMenu = ({ walletId }: { walletId: string }) => { const actions = ( [ - !isPrimary + // Only allow setting as primary if the wallet is verified and not already primary + !isPrimary && isVerified ? { label: localizationKeys('userProfile.start.web3WalletsSection.detailsAction__nonPrimary'), onClick: () => { 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..cdc2791badb --- /dev/null +++ b/packages/clerk-js/src/ui/components/UserProfile/Web3SelectSolanaWalletScreen.tsx @@ -0,0 +1,88 @@ +import { ClerkRuntimeError } from '@clerk/shared/error'; +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 { handleError } from '@/ui/utils/errorHandler'; + +import { Button, descriptors, Flex, localizationKeys, Spinner } from '../../customizables'; + +const Web3SolanaWalletButtons = lazy(() => + import(/* webpackChunkName: "web3-solana-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(); + if (err instanceof Error) { + handleError(err, [], card.setError); + } else { + const error = new ClerkRuntimeError('An error occurred while generating the Solana signature.', { + code: 'web3_solana_signature_generation_failed', + cause: err instanceof Error ? err : undefined, + }); + handleError(error, [], card.setError); + } + } + }; + + return ( + + + ({ + height: '100%', + minHeight: t.sizes.$32, + })} + > + + + } + > + + + + + ); +}); + +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..c61a5fe7d37 100644 --- a/packages/clerk-js/src/ui/elements/contexts/index.tsx +++ b/packages/clerk-js/src/ui/elements/contexts/index.tsx @@ -128,7 +128,9 @@ export type FlowMetadata = { | 'complete' | 'accountSwitcher' | 'chooseOrganization' - | 'enterpriseConnections'; + | 'organizationCreationDisabled' + | 'enterpriseConnections' + | 'chooseWallet'; }; const [FlowMetadataCtx, useFlowMetadata] = createContextAndHook('FlowMetadata'); diff --git a/packages/clerk-js/src/ui/hooks/useFetchRoles.ts b/packages/clerk-js/src/ui/hooks/useFetchRoles.ts index 4e50dfd4dc8..73aaead6de8 100644 --- a/packages/clerk-js/src/ui/hooks/useFetchRoles.ts +++ b/packages/clerk-js/src/ui/hooks/useFetchRoles.ts @@ -30,6 +30,7 @@ export const useFetchRoles = (enabled = true) => { return { isLoading, + hasRoleSetMigration: !!data?.has_role_set_migration, options: data?.data?.map(role => ({ value: role.key, label: role.name })), }; }; diff --git a/packages/clerk-js/src/ui/localization/__tests__/parseLocalization.test.tsx b/packages/clerk-js/src/ui/localization/__tests__/parseLocalization.test.tsx index 1843c2eb41e..bb0da39f4ad 100644 --- a/packages/clerk-js/src/ui/localization/__tests__/parseLocalization.test.tsx +++ b/packages/clerk-js/src/ui/localization/__tests__/parseLocalization.test.tsx @@ -37,4 +37,65 @@ describe('Localization parsing and replacing', () => { const localizedValue = result.current.t(localizationKeys('backButton')); expect(localizedValue).toBe('test'); }); + + it('falls back to English when user locale has undefined value for a key', async () => { + const { wrapper: Wrapper } = await createFixtures(); + const wrapperBefore = ({ children }) => ( + + + {children} + + + ); + + const { result } = renderHook(() => useLocalizations(), { wrapper: wrapperBefore }); + + // undefined value should fall back to English + const backButtonValue = result.current.t(localizationKeys('backButton')); + expect(backButtonValue).toBe(defaultResource.backButton); + + // Non-undefined value should use the translation + const formButtonValue = result.current.t(localizationKeys('formButtonPrimary')); + expect(formButtonValue).toBe('Translated'); + }); + + it('falls back to English for nested keys with undefined values', async () => { + const { wrapper: Wrapper } = await createFixtures(); + const wrapperBefore = ({ children }) => ( + + + {children} + + + ); + + const { result } = renderHook(() => useLocalizations(), { wrapper: wrapperBefore }); + + // undefined nested value should fall back to English (tokens get replaced by t()) + const titleValue = result.current.t(localizationKeys('signIn.start.title')); + // The English default is 'Sign in to {{applicationName}}', tokens get replaced + expect(titleValue).toContain('Sign in to'); + + // Non-undefined nested value should use the translation + const subtitleValue = result.current.t(localizationKeys('signIn.start.subtitle')); + expect(subtitleValue).toBe('Custom subtitle'); + }); }); diff --git a/packages/clerk-js/src/ui/primitives/Text.tsx b/packages/clerk-js/src/ui/primitives/Text.tsx index 93ec00b736d..a430b165cb3 100644 --- a/packages/clerk-js/src/ui/primitives/Text.tsx +++ b/packages/clerk-js/src/ui/primitives/Text.tsx @@ -48,6 +48,8 @@ export const Text = React.forwardRef((props, ref) => { return ( 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..e4d7c58cd4b --- /dev/null +++ b/packages/clerk-js/src/utils/injectedWeb3SolanaProviders.ts @@ -0,0 +1,71 @@ +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; + #initialized: boolean = false; + static #instance: InjectedWeb3SolanaProviders | null = null; + + private constructor() {} + + async #initialize() { + if (this.#initialized) { + return; + } + this.#initialized = true; + 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/CHANGELOG.md b/packages/elements/CHANGELOG.md index d9ae77c15c7..4801cf03979 100644 --- a/packages/elements/CHANGELOG.md +++ b/packages/elements/CHANGELOG.md @@ -1,5 +1,47 @@ # @clerk/elements +## 0.24.3 + +### Patch Changes + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + - @clerk/types@4.101.10 + +## 0.24.2 + +### Patch Changes + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 0.24.1 + +### Patch Changes + +- Fix elements otp test interactions ([#7507](https://github.com/clerk/javascript/pull/7507)) by [@alexcarpenter](https://github.com/alexcarpenter) + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + - @clerk/clerk-react@5.59.1 + - @clerk/types@4.101.8 + +## 0.24.0 + +### Minor Changes + +- Add support for Sign in with Solana. ([#7293](https://github.com/clerk/javascript/pull/7293)) by [@kduprey](https://github.com/kduprey) + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/clerk-react@5.59.0 + - @clerk/types@4.101.7 + ## 0.23.89 ### Patch Changes diff --git a/packages/elements/package.json b/packages/elements/package.json index e0eb6c765aa..8f0074744bf 100644 --- a/packages/elements/package.json +++ b/packages/elements/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/elements", - "version": "0.23.89", + "version": "0.24.3", "description": "Clerk Elements", "keywords": [ "clerk", 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/expo-passkeys/CHANGELOG.md b/packages/expo-passkeys/CHANGELOG.md index 342da0bf22c..6f7d4d6ec62 100644 --- a/packages/expo-passkeys/CHANGELOG.md +++ b/packages/expo-passkeys/CHANGELOG.md @@ -1,5 +1,35 @@ # @clerk/expo-passkeys +## 0.4.29 + +### Patch Changes + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + +## 0.4.28 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + +## 0.4.27 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + +## 0.4.26 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + ## 0.4.25 ### Patch Changes diff --git a/packages/expo-passkeys/package.json b/packages/expo-passkeys/package.json index f04aaa72c71..a117d7a3756 100644 --- a/packages/expo-passkeys/package.json +++ b/packages/expo-passkeys/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/expo-passkeys", - "version": "0.4.25", + "version": "0.4.29", "description": "Passkeys library to be used with Clerk for expo", "keywords": [ "react-native", diff --git a/packages/expo/CHANGELOG.md b/packages/expo/CHANGELOG.md index 6222317dedd..268eb83dba3 100644 --- a/packages/expo/CHANGELOG.md +++ b/packages/expo/CHANGELOG.md @@ -1,5 +1,70 @@ # Change Log +## 2.19.17 + +### Patch Changes + +- Updated dependencies [[`68fe8b6`](https://github.com/clerk/javascript/commit/68fe8b65eb47e289d22c6481f1eba7747d40a0b1)]: + - @clerk/clerk-js@5.119.1 + +## 2.19.16 + +### Patch Changes + +- Updated dependencies [[`c4dbcf7`](https://github.com/clerk/javascript/commit/c4dbcf70ec9d96b74bf31f138e7da357ba89e5e7), [`b800900`](https://github.com/clerk/javascript/commit/b800900d721d36d508881ef48e363791f461e0bf)]: + - @clerk/clerk-js@5.119.0 + - @clerk/clerk-react@5.59.3 + +## 2.19.15 + +### Patch Changes + +- Updated dependencies [[`2eaa829`](https://github.com/clerk/javascript/commit/2eaa829b5ddb1e08c241163c94bf73675170143e), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/clerk-js@5.118.0 + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + - @clerk/types@4.101.10 + +## 2.19.14 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/clerk-js@5.117.0 + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 2.19.13 + +### Patch Changes + +- Updated dependencies [[`4bcc8b6`](https://github.com/clerk/javascript/commit/4bcc8b62fcbaf2d4bdc516fe3ba3db6c93eb5a05), [`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`0f4c27e`](https://github.com/clerk/javascript/commit/0f4c27ec05401aaba3fde525f561fea79f83f1b5), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`85fea1d`](https://github.com/clerk/javascript/commit/85fea1dfda0b9b2526f52abf44e57d0b9a4790da)]: + - @clerk/clerk-js@5.116.0 + - @clerk/shared@3.41.0 + - @clerk/clerk-react@5.59.1 + - @clerk/types@4.101.8 + +## 2.19.12 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`28c56ca`](https://github.com/clerk/javascript/commit/28c56ca4fe9a329c4f3db5d14274ff19c107c5b1), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/clerk-js@5.115.0 + - @clerk/shared@3.40.0 + - @clerk/clerk-react@5.59.0 + - @clerk/types@4.101.7 + +## 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..706d19b8b03 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.17", "description": "Clerk React Native/Expo library", "keywords": [ "react", @@ -110,8 +110,8 @@ "expo-local-authentication": ">=13.5.0", "expo-secure-store": ">=12.4.0", "expo-web-browser": ">=12.5.0", - "react": "catalog:peer-react", - "react-dom": "catalog:peer-react", + "react": "^18.0.0 || ^19.0.0", + "react-dom": "^18.0.0 || ^19.0.0", "react-native": ">=0.73" }, "peerDependenciesMeta": { diff --git a/packages/express/CHANGELOG.md b/packages/express/CHANGELOG.md index 710ae126bf2..2c72d00d652 100644 --- a/packages/express/CHANGELOG.md +++ b/packages/express/CHANGELOG.md @@ -1,5 +1,55 @@ # Change Log +## 1.7.62 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + +## 1.7.61 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 1.7.60 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 1.7.59 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/types@4.101.8 + +## 1.7.58 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/types@4.101.7 + +## 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..ee62d5f6c8f 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.62", "description": "Clerk server SDK for usage with Express", "keywords": [ "clerk", diff --git a/packages/fastify/CHANGELOG.md b/packages/fastify/CHANGELOG.md index d54e24f4ee4..85086c66e5d 100644 --- a/packages/fastify/CHANGELOG.md +++ b/packages/fastify/CHANGELOG.md @@ -1,5 +1,55 @@ # Change Log +## 2.6.14 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + +## 2.6.13 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 2.6.12 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 2.6.11 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/types@4.101.8 + +## 2.6.10 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/types@4.101.7 + +## 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..dede8ebdfb3 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.14", "description": "Clerk SDK for Fastify", "keywords": [ "auth", diff --git a/packages/localizations/CHANGELOG.md b/packages/localizations/CHANGELOG.md index 08ee8953b88..30c3560a041 100644 --- a/packages/localizations/CHANGELOG.md +++ b/packages/localizations/CHANGELOG.md @@ -1,5 +1,67 @@ # Change Log +## 3.34.0 + +### Minor Changes + +- Fix "You must belong to an organization" screen showing when user has existing memberships, invitations or suggestions ([#7557](https://github.com/clerk/javascript/pull/7557)) by [@LauraBeatris](https://github.com/LauraBeatris) + +## 3.33.0 + +### Minor Changes + +- Disable role selection in `OrganizationProfile` during role set migration ([#7541](https://github.com/clerk/javascript/pull/7541)) by [@LauraBeatris](https://github.com/LauraBeatris) + +### Patch Changes + +- Updated dependencies []: + - @clerk/types@4.101.10 + +## 3.32.1 + +### Patch Changes + +- Updated dependencies []: + - @clerk/types@4.101.9 + +## 3.32.0 + +### Minor Changes + +- Display message in `TaskChooseOrganization` when user is not allowed to create organizations ([#7502](https://github.com/clerk/javascript/pull/7502)) by [@LauraBeatris](https://github.com/LauraBeatris) + +### Patch Changes + +- Added waitlist translations. ([#7483](https://github.com/clerk/javascript/pull/7483)) by [@wobsoriano](https://github.com/wobsoriano) + +- Updated dependencies []: + - @clerk/types@4.101.8 + +## 3.31.0 + +### Minor Changes + +- Add Web3 Solana support to `` ([#7435](https://github.com/clerk/javascript/pull/7435)) by [@kduprey](https://github.com/kduprey) + +- Add support for Sign in with Solana. ([#7293](https://github.com/clerk/javascript/pull/7293)) by [@kduprey](https://github.com/kduprey) + +### Patch Changes + +- Added temporary email services support error localization key. ([#7436](https://github.com/clerk/javascript/pull/7436)) by [@wobsoriano](https://github.com/wobsoriano) + +- Fixed incorrect word in `da-DK` localization ([#7462](https://github.com/clerk/javascript/pull/7462)) by [@jacekradko](https://github.com/jacekradko) + +- Added missing password or identifier incorrect error localization. ([#7437](https://github.com/clerk/javascript/pull/7437)) by [@wobsoriano](https://github.com/wobsoriano) + +- Updated dependencies []: + - @clerk/types@4.101.7 + +## 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..ea935b02c44 100644 --- a/packages/localizations/package.json +++ b/packages/localizations/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/localizations", - "version": "3.30.0", + "version": "3.34.0", "description": "Localizations for the Clerk components", "keywords": [ "react", diff --git a/packages/localizations/src/ar-SA.ts b/packages/localizations/src/ar-SA.ts index b53225be7bc..b48cf825e52 100644 --- a/packages/localizations/src/ar-SA.ts +++ b/packages/localizations/src/ar-SA.ts @@ -395,6 +395,12 @@ export const arSA: LocalizationResource = { headerTitle__members: 'الأعضاء', headerTitle__requests: 'الطلبات', }, + alerts: { + roleSetMigrationInProgress: { + title: 'الأدوار مقفلة مؤقتًا', + subtitle: 'نحن نقوم بتحديث الأدوار المتاحة. بمجرد الانتهاء، ستتمكن من تحديث الأدوار مرة أخرى.', + }, + }, }, navbar: { apiKeys: undefined, @@ -747,6 +753,10 @@ export const arSA: LocalizationResource = { subtitle: 'للمتابعة، يرجى إدخال رمز التحقق الذي تم إنشاؤه بواسطة تطبيق المصادقة الخاص بك', title: 'نظام التحقق بخطوتين', }, + web3Solana: { + subtitle: 'حدد محفظة أدناه لتسجيل الدخول', + title: 'تسجيل الدخول باستخدام Solana', + }, }, signInEnterPasswordTitle: 'إدخل كلمة المرور', signUp: { @@ -837,6 +847,10 @@ export const arSA: LocalizationResource = { title: 'أنشاء حساب جديد', titleCombined: 'أنشاء حساب جديد', }, + web3Solana: { + subtitle: 'حدد محفظة أدناه للتسجيل', + title: 'التسجيل باستخدام Solana', + }, }, socialButtonsBlockButton: 'للمتابعة مع {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -846,6 +860,7 @@ export const arSA: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -859,6 +874,10 @@ export const arSA: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'يجب أن تنتمي إلى منظمة', + subtitle: 'تواصل مع مسؤول منظمتك للحصول على دعوة.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -882,6 +901,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: 'تم إستخدام اسم المستخدمد هذا. يرجى المحاولة مرة أخرى', @@ -899,6 +920,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: 'لا يمكن أستعمال كلمة السر هذه لانها غير أمنة, الرجاء اختيار كلمة مرور أخرى', @@ -937,6 +960,8 @@ export const arSA: LocalizationResource = { phone_number_exists: 'هذا الرقم مأخوذ الرجاء أختيار رقم آخر', session_exists: 'لقد قمت بتسجيل الدخول بالفعل', web3_missing_identifier: undefined, + web3_signature_request_rejected: 'لقد رفضت طلب التوقيع. يرجى المحاولة مرة أخرى للمتابعة.', + web3_solana_signature_generation_failed: 'حدث خطأ أثناء إنشاء التوقيع. يرجى المحاولة مرة أخرى للمتابعة.', zxcvbn: { couldBeStronger: 'كلمة مرورك سليمة من الأفضل ان تكون اقوى. الرجاء أضافة حروف أكثر', goodPassword: 'كلمة مرورك طابقت جميع المتطلبات الازمة', @@ -1301,6 +1326,10 @@ export const arSA: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'محافظ Web3', title: 'محافظ Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'حدد محفظة Solana للاتصال بحسابك.', + title: 'إضافة محفظة Solana', + }, }, }, usernamePage: { @@ -1324,16 +1353,22 @@ export const arSA: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'تسجيل الدخول', + actionText: 'هل لديك وصول بالفعل؟', + formButton: 'الانضمام إلى قائمة الانتظار', + subtitle: 'أدخل عنوان بريدك الإلكتروني وسنخبرك عندما يكون مكانك جاهزًا', + title: 'الانضمام إلى قائمة الانتظار', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'سيتم إعادة توجيهك قريبًا...', + subtitle: 'سنكون على اتصال عندما يكون مكانك جاهزًا', + title: 'شكرًا للانضمام إلى قائمة الانتظار!', }, }, + web3SolanaWalletButtons: { + connect: 'الاتصال باستخدام {{walletName}}', + continue: 'المتابعة باستخدام {{walletName}}', + noneAvailable: + 'لم يتم اكتشاف محافظ Solana Web3. يرجى تثبيت {{ solanaWalletsLink || link("wallet extension") }} مدعوم بـ Web3.', + }, } as const; diff --git a/packages/localizations/src/be-BY.ts b/packages/localizations/src/be-BY.ts index 46615db43f9..fd12de02b13 100644 --- a/packages/localizations/src/be-BY.ts +++ b/packages/localizations/src/be-BY.ts @@ -396,6 +396,12 @@ export const beBY: LocalizationResource = { headerTitle__members: 'Удзельнікі', headerTitle__requests: 'Заявкі', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Ролі часова заблакіраваны', + subtitle: 'Мы абнаўляем даступныя ролі. Калі гэта будзе зроблена, вы зможаце абнавіць ролі зноў.', + }, + }, }, navbar: { apiKeys: undefined, @@ -753,6 +759,10 @@ export const beBY: LocalizationResource = { subtitle: 'Увядзіце код, атрыманы з вашага TOTP-генератара.', title: 'Двухфактарная верыфікацыя', }, + web3Solana: { + subtitle: 'Выберыце кашалёк ніжэй, каб увайсці', + title: 'Увайсці з Solana', + }, }, signInEnterPasswordTitle: undefined, signUp: { @@ -845,6 +855,10 @@ export const beBY: LocalizationResource = { title: 'Стварыце Ваш акаўнт', titleCombined: 'Стварыце Ваш акаўнт', }, + web3Solana: { + subtitle: 'Выберыце кашалёк ніжэй, каб зарэгістравацца', + title: 'Зарэгістравацца з Solana', + }, }, socialButtonsBlockButton: 'Працягнуць з дапамогай {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -854,6 +868,7 @@ export const beBY: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -867,6 +882,10 @@ export const beBY: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Вы павінны належаць да арганізацыі', + subtitle: 'Звярніцеся да адміністратара вашай арганізацыі для атрымання запрашэння.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -891,6 +910,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: 'Гэта імя ўжо занята.', @@ -909,6 +930,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: 'Гэты пароль быў узламаны і не можа быць выкарыстаны, паспрабуйце іншы пароль.', @@ -947,6 +970,9 @@ export const beBY: LocalizationResource = { phone_number_exists: 'Гэты нумар тэлефона ўжо заняты. Калі ласка, паспрабуйце іншы.', session_exists: 'Вы ўжо ўвайшлі.', web3_missing_identifier: undefined, + web3_signature_request_rejected: 'Вы адхілілі запыт на подпіс. Калі ласка, паспрабуйце яшчэ раз, каб працягнуць.', + web3_solana_signature_generation_failed: + 'Адбылася памылка пры стварэнні подпісу. Калі ласка, паспрабуйце яшчэ раз, каб працягнуць.', zxcvbn: { couldBeStronger: 'Ваш пароль падыходзіць, але мог бы быць надзейнейшым. Паспрабуйце дадаць больш сімвалаў.', goodPassword: 'Добрая праца. Гэта выдатны пароль.', @@ -1319,6 +1345,10 @@ export const beBY: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 кашалькі', title: 'Web3 кашалькі', + web3SelectSolanaWalletScreen: { + subtitle: 'Выберыце кашалёк Solana для падключэння да вашага акаўнта.', + title: 'Дадаць кашалёк Solana', + }, }, }, usernamePage: { @@ -1354,4 +1384,10 @@ export const beBY: LocalizationResource = { title: 'Вы ў чакальным спісе', }, }, + web3SolanaWalletButtons: { + connect: 'Падключыцца з {{walletName}}', + continue: 'Працягнуць з {{walletName}}', + noneAvailable: + 'Кашалькі Solana Web3 не выяўлены. Калі ласка, усталюйце {{ solanaWalletsLink || link("wallet extension") }} з падтрымкай Web3.', + }, } as const; diff --git a/packages/localizations/src/bg-BG.ts b/packages/localizations/src/bg-BG.ts index 45fdeecc376..fdcdf32b73d 100644 --- a/packages/localizations/src/bg-BG.ts +++ b/packages/localizations/src/bg-BG.ts @@ -396,6 +396,12 @@ export const bgBG: LocalizationResource = { headerTitle__members: 'Членове', headerTitle__requests: 'Заявки', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Ролите са временно заключени', + subtitle: 'Актуализираме наличните роли. Когато това приключи, ще можете отново да актуализирате ролите.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +756,10 @@ export const bgBG: LocalizationResource = { 'За да продължите, моля въведете кода за потвърждение, генериран от вашето приложение за удостоверяване', title: 'Двустепенна верификация', }, + web3Solana: { + subtitle: 'Изберете портфейл по-долу, за да влезете', + title: 'Вход със Solana', + }, }, signInEnterPasswordTitle: 'Въведете вашата парола', signUp: { @@ -841,6 +851,10 @@ export const bgBG: LocalizationResource = { title: 'Създайте своя акаунт', titleCombined: 'Създайте своя акаунт', }, + web3Solana: { + subtitle: 'Изберете портфейл по-долу, за да се регистрирате', + title: 'Регистрация със Solana', + }, }, socialButtonsBlockButton: 'Продължи с {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -850,6 +864,7 @@ export const bgBG: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -863,6 +878,10 @@ export const bgBG: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Трябва да принадлежите към организация', + subtitle: 'Свържете се с администратора на вашата организация за покана.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -885,6 +904,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: 'Това потребителско име вече съществува.', @@ -902,6 +923,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: 'Паролата трябва да съдържа поне една главна буква, една цифра и един специален символ.', @@ -940,6 +963,9 @@ export const bgBG: LocalizationResource = { phone_number_exists: 'Този телефонен номер е зает. Моля, опитайте с друг.', session_exists: 'Вече сте влезнали.', web3_missing_identifier: undefined, + web3_signature_request_rejected: 'Отхвърлихте заявката за подпис. Моля, опитайте отново, за да продължите.', + web3_solana_signature_generation_failed: + 'Възникна грешка при генерирането на подписа. Моля, опитайте отново, за да продължите.', zxcvbn: { couldBeStronger: 'Вашата парола работи, но може да бъде по-сигурна. Опитайте да добавите повече символи.', goodPassword: 'Вашата парола отговаря на всички необходими изисквания.', @@ -1310,6 +1336,10 @@ export const bgBG: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 портфейли', title: 'Web3 портфейли', + web3SelectSolanaWalletScreen: { + subtitle: 'Изберете Solana портфейл, който да свържете с акаунта си.', + title: 'Добавяне на Solana портфейл', + }, }, }, usernamePage: { @@ -1345,4 +1375,10 @@ export const bgBG: LocalizationResource = { title: 'Waitlist successful', }, }, + web3SolanaWalletButtons: { + connect: 'Свързване с {{walletName}}', + continue: 'Продължаване с {{walletName}}', + noneAvailable: + 'Не са открити Solana Web3 портфейли. Моля, инсталирайте {{ solanaWalletsLink || link("wallet extension") }} с поддръжка на Web3.', + }, } as const; diff --git a/packages/localizations/src/bn-IN.ts b/packages/localizations/src/bn-IN.ts index 6f081b51975..9c36731c219 100644 --- a/packages/localizations/src/bn-IN.ts +++ b/packages/localizations/src/bn-IN.ts @@ -397,6 +397,12 @@ export const bnIN: LocalizationResource = { headerTitle__members: 'সদস্য', headerTitle__requests: 'অনুরোধ', }, + alerts: { + roleSetMigrationInProgress: { + title: 'ভূমিকাগুলি সাময়িকভাবে লক করা আছে', + subtitle: 'আমরা উপলব্ধ ভূমিকাগুলি আপডেট করছি। এটি সম্পন্ন হলে, আপনি আবার ভূমিকা আপডেট করতে পারবেন।', + }, + }, }, navbar: { apiKeys: undefined, @@ -753,6 +759,10 @@ export const bnIN: LocalizationResource = { subtitle: 'চালিয়ে যেতে, আপনার অথেনটিকেটর অ্যাপ দ্বারা উৎপন্ন যাচাইকরণ কোড লিখুন', title: 'দুই-ধাপ যাচাইকরণ', }, + web3Solana: { + subtitle: 'সাইন ইন করতে নিচে একটি ওয়ালেট নির্বাচন করুন', + title: 'Solana দিয়ে সাইন ইন করুন', + }, }, signInEnterPasswordTitle: 'আপনার পাসওয়ার্ড লিখুন', signUp: { @@ -845,6 +855,10 @@ export const bnIN: LocalizationResource = { title: 'আপনার অ্যাকাউন্ট তৈরি করুন', titleCombined: 'আপনার অ্যাকাউন্ট তৈরি করুন', }, + web3Solana: { + subtitle: 'সাইন আপ করতে নিচে একটি ওয়ালেট নির্বাচন করুন', + title: 'Solana দিয়ে সাইন আপ করুন', + }, }, socialButtonsBlockButton: '{{provider|titleize}} দিয়ে চালিয়ে যান', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -854,6 +868,7 @@ export const bnIN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -867,6 +882,10 @@ export const bnIN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'আপনাকে অবশ্যই একটি সংগঠনের অন্তর্ভুক্ত হতে হবে', + subtitle: 'আমন্ত্রণের জন্য আপনার সংগঠনের প্রশাসকের সাথে যোগাযোগ করুন।', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -890,6 +909,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: 'এই ব্যবহারকারীর নাম ব্যবহৃত হয়েছে। দয়া করে অন্য একটি ব্যবহার করুন।', @@ -908,6 +929,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: @@ -950,6 +973,10 @@ export const bnIN: LocalizationResource = { phone_number_exists: 'এই ফোন নম্বর ব্যবহৃত হয়েছে। দয়া করে অন্য একটি ব্যবহার করুন।', session_exists: undefined, web3_missing_identifier: 'একটি Web3 ওয়ালেট এক্সটেনশন পাওয়া যায়নি। চালিয়ে যেতে দয়া করে একটি ইনস্টল করুন।', + web3_signature_request_rejected: + 'আপনি সিগনেচার অনুরোধটি প্রত্যাখ্যান করেছেন। চালিয়ে যেতে অনুগ্রহ করে আবার চেষ্টা করুন।', + web3_solana_signature_generation_failed: + 'সিগনেচার তৈরি করার সময় একটি ত্রুটি ঘটেছে। চালিয়ে যেতে অনুগ্রহ করে আবার চেষ্টা করুন।', zxcvbn: { couldBeStronger: 'আপনার পাসওয়ার্ড কাজ করে, কিন্তু আরও শক্তিশালী হতে পারে। আরও অক্ষর যোগ করার চেষ্টা করুন।', goodPassword: 'আপনার পাসওয়ার্ড সমস্ত প্রয়োজনীয় শর্ত পূরণ করে।', @@ -1320,6 +1347,10 @@ export const bnIN: LocalizationResource = { detailsAction__nonPrimary: 'প্রাথমিক হিসাবে সেট করুন', primaryButton: 'ওয়ালেট সংযুক্ত করুন', title: 'Web3 ওয়ালেট', + web3SelectSolanaWalletScreen: { + subtitle: 'আপনার অ্যাকাউন্টের সাথে সংযুক্ত করতে একটি Solana ওয়ালেট নির্বাচন করুন।', + title: 'একটি Solana ওয়ালেট যোগ করুন', + }, }, }, usernamePage: { @@ -1355,4 +1386,10 @@ export const bnIN: LocalizationResource = { title: 'ওয়েটলিস্টে যোগ দেওয়ার জন্য ধন্যবাদ!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} দিয়ে সংযুক্ত করুন', + continue: '{{walletName}} দিয়ে চালিয়ে যান', + noneAvailable: + 'কোনো Solana Web3 ওয়ালেট শনাক্ত হয়নি। অনুগ্রহ করে Web3 সমর্থিত {{ solanaWalletsLink || link("wallet extension") }} ইনস্টল করুন।', + }, } as const; diff --git a/packages/localizations/src/ca-ES.ts b/packages/localizations/src/ca-ES.ts index 6795c763418..3cd5d10eeda 100644 --- a/packages/localizations/src/ca-ES.ts +++ b/packages/localizations/src/ca-ES.ts @@ -396,6 +396,12 @@ export const caES: LocalizationResource = { headerTitle__members: 'Membres', headerTitle__requests: 'Sol·licituds', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Els rols estan temporalment bloquejats', + subtitle: 'Estem actualitzant els rols disponibles. Un cop fet, podreu tornar a actualitzar els rols.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +756,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: 'Selecciona una cartera a continuació per iniciar la sessió', + title: 'Inicia la sessió amb Solana', + }, }, signInEnterPasswordTitle: 'Introdueix la teva contrasenya', signUp: { @@ -840,6 +850,10 @@ export const caES: LocalizationResource = { title: 'Crea el teu compte', titleCombined: 'Crea el teu compte', }, + web3Solana: { + subtitle: 'Selecciona una cartera a continuació per registrar-te', + title: "Registra't amb Solana", + }, }, socialButtonsBlockButton: 'Continua amb {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -849,6 +863,7 @@ export const caES: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -862,6 +877,10 @@ export const caES: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Heu de pertànyer a una organització', + subtitle: "Contacteu amb l'administrador de la vostra organització per obtenir una invitació.", + }, signOut: { actionLink: undefined, actionText: undefined, @@ -886,6 +905,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, @@ -903,6 +924,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: @@ -942,6 +965,9 @@ 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: 'Has rebutjat la sol·licitud de signatura. Torna-ho a provar per continuar.', + web3_solana_signature_generation_failed: + "S'ha produït un error en generar la signatura. Torna-ho a provar per continuar.", 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.', @@ -1316,6 +1342,10 @@ export const caES: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Carteres Web3', title: 'Carteres Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecciona una cartera de Solana per connectar-la al teu compte.', + title: 'Afegeix una cartera de Solana', + }, }, }, usernamePage: { @@ -1339,16 +1369,22 @@ export const caES: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Iniciar sessió', + actionText: 'Ja tens accés?', + formButton: "Unir-se a la llista d'espera", + subtitle: "Introdueix la teva adreça de correu electrònic i t'avisarem quan el teu lloc estigui llest", + title: "Unir-se a la llista d'espera", }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: "Se't redirigirà aviat...", + subtitle: "T'enviarem un missatge quan el teu lloc estigui llest", + title: "Gràcies per unir-te a la llista d'espera!", }, }, + web3SolanaWalletButtons: { + connect: 'Connecta amb {{walletName}}', + continue: 'Continua amb {{walletName}}', + noneAvailable: + 'No s\'han detectat carteres Web3 de Solana. Instal·la una {{ solanaWalletsLink || link("wallet extension") }} compatible amb Web3.', + }, } as const; diff --git a/packages/localizations/src/cs-CZ.ts b/packages/localizations/src/cs-CZ.ts index 347288d015a..b1cd9e1550e 100644 --- a/packages/localizations/src/cs-CZ.ts +++ b/packages/localizations/src/cs-CZ.ts @@ -401,6 +401,12 @@ export const csCZ: LocalizationResource = { headerTitle__members: 'Členové', headerTitle__requests: 'Žádosti', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Role jsou dočasně uzamčeny', + subtitle: 'Aktualizujeme dostupné role. Jakmile to bude hotové, budete moci role opět aktualizovat.', + }, + }, }, navbar: { apiKeys: 'API klíče', @@ -757,6 +763,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: 'Vyberte níže peněženku pro přihlášení', + title: 'Přihlásit se pomocí Solana', + }, }, signInEnterPasswordTitle: 'Zadejte své heslo', signUp: { @@ -851,6 +861,10 @@ export const csCZ: LocalizationResource = { title: 'Vytvořte si účet', titleCombined: 'Vytvořte si účet', }, + web3Solana: { + subtitle: 'Vyberte níže peněženku pro registraci', + title: 'Zaregistrovat se pomocí Solana', + }, }, socialButtonsBlockButton: 'Pokračovat s {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -860,6 +874,7 @@ export const csCZ: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -873,6 +888,10 @@ export const csCZ: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Musíte patřit do organizace', + subtitle: 'Kontaktujte administrátora vaší organizace pro pozvánku.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -897,6 +916,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.', @@ -914,6 +935,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.', @@ -952,6 +975,9 @@ 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: 'Odmítli jste žádost o podpis. Chcete-li pokračovat, zkuste to prosím znovu.', + web3_solana_signature_generation_failed: + 'Při generování podpisu došlo k chybě. Chcete-li pokračovat, zkuste to prosím znovu.', 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.', @@ -1323,6 +1349,10 @@ export const csCZ: LocalizationResource = { detailsAction__nonPrimary: 'Nastavit jako primární', primaryButton: 'Připojit peněženku', title: 'Web3 peněženky', + web3SelectSolanaWalletScreen: { + subtitle: 'Vyberte Solana peněženku, kterou chcete připojit ke svému účtu.', + title: 'Přidat Solana peněženku', + }, }, }, usernamePage: { @@ -1358,4 +1388,10 @@ export const csCZ: LocalizationResource = { title: 'Děkujeme za připojení k čekací listině!', }, }, + web3SolanaWalletButtons: { + connect: 'Připojit pomocí {{walletName}}', + continue: 'Pokračovat pomocí {{walletName}}', + noneAvailable: + 'Nebyla zjištěna žádná Solana Web3 peněženka. Nainstalujte si prosím {{ solanaWalletsLink || link("wallet extension") }} s podporou Web3.', + }, } as const; diff --git a/packages/localizations/src/da-DK.ts b/packages/localizations/src/da-DK.ts index 39e7d41de54..f768668bd98 100644 --- a/packages/localizations/src/da-DK.ts +++ b/packages/localizations/src/da-DK.ts @@ -395,6 +395,12 @@ export const daDK: LocalizationResource = { headerTitle__members: 'Medlemmer', headerTitle__requests: 'Anmodninger', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roller er midlertidigt låst', + subtitle: 'Vi opdaterer de tilgængelige roller. Når det er gjort, vil du kunne opdatere roller igen.', + }, + }, }, navbar: { apiKeys: undefined, @@ -738,7 +744,7 @@ export const daDK: LocalizationResource = { subtitle: undefined, title: undefined, }, - subtitle: 'Forsæt til {{applicationName}}', + subtitle: 'Fortsæt til {{applicationName}}', subtitleCombined: undefined, title: 'Log ind', titleCombined: undefined, @@ -748,6 +754,10 @@ export const daDK: LocalizationResource = { subtitle: undefined, title: 'Totrinsbekræftelse', }, + web3Solana: { + subtitle: 'Vælg en wallet nedenfor for at logge ind', + title: 'Log ind med Solana', + }, }, signInEnterPasswordTitle: 'Indtast din adgangskode', signUp: { @@ -759,7 +769,7 @@ export const daDK: LocalizationResource = { continue: { actionLink: 'Log ind', actionText: 'Har du en konto?', - subtitle: 'Forsæt til {{applicationName}}', + subtitle: 'Fortsæt til {{applicationName}}', title: 'Udfyld manglende felter', }, emailCode: { @@ -780,7 +790,7 @@ export const daDK: LocalizationResource = { title: 'Tilmelding...', }, resendButton: 'Send link igen', - subtitle: 'Forsæt til {{applicationName}}', + subtitle: 'Fortsæt til {{applicationName}}', title: 'Bekræft din email', verified: { title: 'Vellykket tilmelding', @@ -833,13 +843,17 @@ export const daDK: LocalizationResource = { subtitle: undefined, title: undefined, }, - subtitle: 'Forsæt til {{applicationName}}', - subtitleCombined: 'Forsæt til {{applicationName}}', + subtitle: 'Fortsæt til {{applicationName}}', + subtitleCombined: 'Fortsæt til {{applicationName}}', title: 'Opret din konto', titleCombined: 'Opret din konto', }, + web3Solana: { + subtitle: 'Vælg en wallet nedenfor for at tilmelde dig', + title: 'Tilmeld dig med Solana', + }, }, - socialButtonsBlockButton: 'Forsæt med {{provider|titleize}}', + socialButtonsBlockButton: 'Fortsæt med {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, taskChooseOrganization: { chooseOrganization: { @@ -847,6 +861,7 @@ export const daDK: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -860,6 +875,10 @@ export const daDK: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Du skal tilhøre en organisation', + subtitle: 'Kontakt din organisationsadministrator for en invitation.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -883,6 +902,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.', @@ -900,6 +921,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.', @@ -938,6 +961,9 @@ 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: 'Du har afvist signaturanmodningen. Prøv igen for at fortsætte.', + web3_solana_signature_generation_failed: + 'Der opstod en fejl under generering af signaturen. Prøv igen for at fortsætte.', 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.', @@ -1307,6 +1333,10 @@ export const daDK: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Tilføj Web3 tegnebøger', title: 'Web3 tegnebøger', + web3SelectSolanaWalletScreen: { + subtitle: 'Vælg en Solana-wallet for at forbinde den til din konto.', + title: 'Tilføj en Solana-wallet', + }, }, }, usernamePage: { @@ -1330,16 +1360,22 @@ export const daDK: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Log ind', + actionText: 'Har du allerede adgang?', + formButton: 'Tilmeld dig ventelisten', + subtitle: 'Indtast din e-mailadresse, så giver vi dig besked, når din plads er klar', + title: 'Tilmeld dig ventelisten', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Du vil blive omdirigeret snart...', + subtitle: 'Vi kontakter dig, når din plads er klar', + title: 'Tak fordi du tilmeldte dig ventelisten!', }, }, + web3SolanaWalletButtons: { + connect: 'Forbind med {{walletName}}', + continue: 'Fortsæt med {{walletName}}', + noneAvailable: + 'Ingen Solana Web3-wallets fundet. Installer venligst en Web3-understøttet {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/de-DE.ts b/packages/localizations/src/de-DE.ts index 1bbdec3e5e2..678b136ed1a 100644 --- a/packages/localizations/src/de-DE.ts +++ b/packages/localizations/src/de-DE.ts @@ -405,6 +405,13 @@ export const deDE: LocalizationResource = { headerTitle__members: 'Mitglieder', headerTitle__requests: 'Anfragen', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Rollen sind vorübergehend gesperrt', + subtitle: + 'Wir aktualisieren die verfügbaren Rollen. Sobald dies abgeschlossen ist, können Sie die Rollen wieder aktualisieren.', + }, + }, }, navbar: { apiKeys: 'API-Keys', @@ -764,6 +771,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: 'Wähle unten eine Wallet aus, um dich anzumelden', + title: 'Mit Solana anmelden', + }, }, signInEnterPasswordTitle: 'Geben Sie Ihr Passwort ein', signUp: { @@ -855,6 +866,10 @@ export const deDE: LocalizationResource = { title: 'Erstellen Sie Ihr Konto', titleCombined: 'Erstellen Sie Ihr Konto', }, + web3Solana: { + subtitle: 'Wähle unten eine Wallet aus, um dich zu registrieren', + title: 'Mit Solana registrieren', + }, }, socialButtonsBlockButton: 'Weiter mit {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -864,6 +879,7 @@ export const deDE: LocalizationResource = { action__invitationAccept: 'Beitreten', action__suggestionsAccept: 'Beitritt beantragen', subtitle: 'Einer bestehenden Organisation beitreten oder eine neue erstellen', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: 'Genehmigung ausstehend', title: 'Organisation auswählen', }, @@ -877,6 +893,10 @@ export const deDE: LocalizationResource = { subtitle: 'Geben Sie Ihre Organisationsdetails ein, um fortzufahren', title: 'Organisation einrichten', }, + organizationCreationDisabled: { + title: 'Sie müssen einer Organisation angehören', + subtitle: 'Kontaktieren Sie Ihren Organisationsadministrator für eine Einladung.', + }, signOut: { actionLink: 'Abmelden', actionText: 'Angemeldet als {{identifier}}', @@ -902,6 +922,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.', @@ -919,6 +941,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: @@ -968,6 +992,10 @@ 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: + 'Du hast die Signaturanfrage abgelehnt. Bitte versuche es erneut, um fortzufahren.', + web3_solana_signature_generation_failed: + 'Beim Erstellen der Signatur ist ein Fehler aufgetreten. Bitte versuche es erneut, um fortzufahren.', zxcvbn: { couldBeStronger: 'Ihr Passwort funktioniert, könnte aber besser sein. Versuchen Sie, mehr Zeichen hinzuzufügen.', goodPassword: 'Ihr Passwort erfüllt alle notwendigen Anforderungen.', @@ -1343,6 +1371,10 @@ export const deDE: LocalizationResource = { detailsAction__nonPrimary: 'Als primär festlegen', primaryButton: 'Web3-Wallets', title: 'Web3-Wallets', + web3SelectSolanaWalletScreen: { + subtitle: 'Wähle eine Solana-Wallet aus, um sie mit deinem Konto zu verbinden.', + title: 'Solana-Wallet hinzufügen', + }, }, }, usernamePage: { @@ -1379,4 +1411,10 @@ export const deDE: LocalizationResource = { title: 'Erfolgreich auf die Warteliste gesetzt', }, }, + web3SolanaWalletButtons: { + connect: 'Mit {{walletName}} verbinden', + continue: 'Weiter mit {{walletName}}', + noneAvailable: + 'Keine Solana-Web3-Wallets erkannt. Bitte installiere eine Web3-unterstützte {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/el-GR.ts b/packages/localizations/src/el-GR.ts index 7cf247ee85e..df35837d8b4 100644 --- a/packages/localizations/src/el-GR.ts +++ b/packages/localizations/src/el-GR.ts @@ -396,6 +396,13 @@ export const elGR: LocalizationResource = { headerTitle__members: 'Members', headerTitle__requests: 'Requests', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Οι ρόλοι είναι προσωρινά κλειδωμένοι', + subtitle: + 'Ενημερώνουμε τους διαθέσιμους ρόλους. Μόλις ολοκληρωθεί, θα μπορείτε να ενημερώσετε ξανά τους ρόλους.', + }, + }, }, navbar: { apiKeys: undefined, @@ -751,6 +758,10 @@ export const elGR: LocalizationResource = { subtitle: undefined, title: 'Aυθεντικοποίηση δύο βημάτων', }, + web3Solana: { + subtitle: 'Επιλέξτε ένα πορτοφόλι παρακάτω για να συνδεθείτε', + title: 'Σύνδεση με Solana', + }, }, signInEnterPasswordTitle: 'Εισαγωγή κωδικού πρόσβασης', signUp: { @@ -842,6 +853,10 @@ export const elGR: LocalizationResource = { title: 'Δημιουργήστε τον λογαριασμό σας', titleCombined: 'Δημιουργήστε τον λογαριασμό σας', }, + web3Solana: { + subtitle: 'Επιλέξτε ένα πορτοφόλι παρακάτω για να εγγραφείτε', + title: 'Εγγραφή με Solana', + }, }, socialButtonsBlockButton: 'Συνέχεια με {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -851,6 +866,7 @@ export const elGR: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -864,6 +880,10 @@ export const elGR: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Πρέπει να ανήκετε σε έναν οργανισμό', + subtitle: 'Επικοινωνήστε με τον διαχειριστή του οργανισμού σας για πρόσκληση.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -888,6 +908,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, @@ -905,6 +927,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: @@ -944,6 +968,9 @@ export const elGR: LocalizationResource = { phone_number_exists: 'Αυτός ο αριθμός τηλεφώνου χρησιμοποιείται ήδη. Δοκιμάστε έναν άλλο.', session_exists: 'Έχετε ήδη συνδεθεί.', web3_missing_identifier: undefined, + web3_signature_request_rejected: 'Απορρίψατε το αίτημα υπογραφής. Δοκιμάστε ξανά για να συνεχίσετε.', + web3_solana_signature_generation_failed: + 'Παρουσιάστηκε σφάλμα κατά τη δημιουργία της υπογραφής. Δοκιμάστε ξανά για να συνεχίσετε.', zxcvbn: { couldBeStronger: 'Ο κωδικός πρόσβασής σας είναι αρκετός, αλλά θα μπορούσε να είναι πιο ισχυρός. Δοκιμάστε να προσθέσετε περισσότερους χαρακτήρες.', @@ -1319,6 +1346,10 @@ export const elGR: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Πορτοφόλια Web3', title: 'Πορτοφόλια Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Επιλέξτε ένα πορτοφόλι Solana για σύνδεση με τον λογαριασμό σας.', + title: 'Προσθήκη πορτοφολιού Solana', + }, }, }, usernamePage: { @@ -1342,16 +1373,23 @@ export const elGR: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Σύνδεση', + actionText: 'Έχετε ήδη πρόσβαση;', + formButton: 'Εγγραφή στη λίστα αναμονής', + subtitle: + 'Εισάγετε τη διεύθυνση ηλεκτρονικού ταχυδρομείου σας και θα σας ενημερώσουμε όταν η θέση σας είναι έτοιμη', + title: 'Εγγραφή στη λίστα αναμονής', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Θα ανακατευθυνθείτε σύντομα...', + subtitle: 'Θα επικοινωνήσουμε μαζί σας όταν η θέση σας είναι έτοιμη', + title: 'Ευχαριστούμε που εγγραφήκατε στη λίστα αναμονής!', }, }, + web3SolanaWalletButtons: { + connect: 'Σύνδεση με {{walletName}}', + continue: 'Συνέχεια με {{walletName}}', + noneAvailable: + 'Δεν εντοπίστηκαν πορτοφόλια Solana Web3. Εγκαταστήστε ένα {{ solanaWalletsLink || link("wallet extension") }} με υποστήριξη Web3.', + }, } as const; diff --git a/packages/localizations/src/en-GB.ts b/packages/localizations/src/en-GB.ts index b3dd9f7131e..0dba831bcf7 100644 --- a/packages/localizations/src/en-GB.ts +++ b/packages/localizations/src/en-GB.ts @@ -396,6 +396,12 @@ export const enGB: LocalizationResource = { headerTitle__members: 'Members', headerTitle__requests: 'Requests', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roles are temporarily locked', + subtitle: "We are updating the available roles. Once that's done, you'll be able to update roles again.", + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +756,10 @@ export const enGB: 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: { @@ -842,6 +852,10 @@ export const enGB: 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}}', @@ -851,6 +865,7 @@ export const enGB: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -864,6 +879,10 @@ export const enGB: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'You must belong to an organisation', + subtitle: 'Contact your organisation admin for an invitation.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -887,6 +906,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.', @@ -904,6 +925,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: @@ -946,6 +968,9 @@ 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: '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.', @@ -1315,6 +1340,10 @@ export const enGB: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Connect wallet', title: 'Web3 wallets', + web3SelectSolanaWalletScreen: { + subtitle: 'Select a Solana wallet to connect to your account.', + title: 'Add a Solana wallet', + }, }, }, usernamePage: { @@ -1350,4 +1379,10 @@ export const enGB: LocalizationResource = { title: 'Thanks for joining the waitlist!', }, }, + web3SolanaWalletButtons: { + 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/en-US.ts b/packages/localizations/src/en-US.ts index 4473eaf6733..8e9c64c7b33 100644 --- a/packages/localizations/src/en-US.ts +++ b/packages/localizations/src/en-US.ts @@ -387,6 +387,12 @@ export const enUS: LocalizationResource = { tableHeader__requested: 'Requested access', table__emptyRow: 'No requests to display', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roles are temporarily locked', + subtitle: "We are updating the available roles. Once that's done, you'll be able to update roles again.", + }, + }, start: { headerTitle__invitations: 'Invitations', headerTitle__members: 'Members', @@ -747,6 +753,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 +849,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}}', @@ -848,6 +862,7 @@ export const enUS: LocalizationResource = { action__invitationAccept: 'Join', action__suggestionsAccept: 'Request to join', subtitle: 'Join an existing organization or create a new one', + subtitle__createOrganizationDisabled: 'Join an existing organization', suggestionsAcceptedLabel: 'Pending approval', title: 'Choose an organization', }, @@ -861,6 +876,10 @@ export const enUS: LocalizationResource = { subtitle: 'Enter your organization details to continue', title: 'Setup your organization', }, + organizationCreationDisabled: { + title: 'You must belong to an organization', + subtitle: 'Contact your organization admin for an invitation.', + }, signOut: { actionLink: 'Sign out', actionText: 'Signed in as {{identifier}}', @@ -883,6 +902,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, @@ -900,6 +920,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: @@ -941,6 +962,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.', @@ -1311,6 +1335,10 @@ export const enUS: LocalizationResource = { detailsAction__nonPrimary: 'Set as primary', primaryButton: 'Connect wallet', title: 'Web3 wallets', + web3SelectSolanaWalletScreen: { + subtitle: 'Select a Solana wallet to connect to your account.', + title: 'Add a Solana wallet', + }, }, }, usernamePage: { @@ -1346,4 +1374,10 @@ export const enUS: LocalizationResource = { title: 'Thanks for joining the waitlist!', }, }, + web3SolanaWalletButtons: { + 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..0a131be4671 100644 --- a/packages/localizations/src/es-CR.ts +++ b/packages/localizations/src/es-CR.ts @@ -397,6 +397,13 @@ export const esCR: LocalizationResource = { headerTitle__members: 'Miembros', headerTitle__requests: 'Solicitudes', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Los roles están temporalmente bloqueados', + subtitle: + 'Estamos actualizando los roles disponibles. Una vez hecho esto, podrás actualizar los roles de nuevo.', + }, + }, }, navbar: { apiKeys: undefined, @@ -755,6 +762,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: 'Selecciona una billetera abajo para iniciar sesión', + title: 'Iniciar sesión con Solana', + }, }, signInEnterPasswordTitle: 'Ingresa tu contraseña', signUp: { @@ -847,6 +858,10 @@ export const esCR: LocalizationResource = { title: 'Crea tu cuenta', titleCombined: 'Crea tu cuenta', }, + web3Solana: { + subtitle: 'Selecciona una billetera abajo para registrarte', + title: 'Registrarse con Solana', + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -856,6 +871,7 @@ export const esCR: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -869,6 +885,10 @@ export const esCR: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Debe pertenecer a una organización', + subtitle: 'Contacte al administrador de su organización para obtener una invitación.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -893,6 +913,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.', @@ -910,6 +932,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: @@ -951,6 +975,9 @@ 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: 'Has rechazado la solicitud de firma. Inténtalo de nuevo para continuar.', + web3_solana_signature_generation_failed: + 'Se produjo un error al generar la firma. Inténtalo de nuevo para continuar.', 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.', @@ -1323,6 +1350,10 @@ export const esCR: LocalizationResource = { detailsAction__nonPrimary: 'Establecer como primaria', primaryButton: 'Conectar billetera', title: 'Billeteras Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecciona una billetera de Solana para conectarla a tu cuenta.', + title: 'Agregar una billetera de Solana', + }, }, }, usernamePage: { @@ -1358,4 +1389,10 @@ export const esCR: LocalizationResource = { title: '¡Gracias por unirte a la lista de espera!', }, }, + web3SolanaWalletButtons: { + connect: 'Conectar con {{walletName}}', + continue: 'Continuar con {{walletName}}', + noneAvailable: + 'No se detectaron billeteras Web3 de Solana. Instala una {{ solanaWalletsLink || link("wallet extension") }} compatible con Web3.', + }, } as const; diff --git a/packages/localizations/src/es-ES.ts b/packages/localizations/src/es-ES.ts index c03a7b3702f..a5c8a3f4c8c 100644 --- a/packages/localizations/src/es-ES.ts +++ b/packages/localizations/src/es-ES.ts @@ -396,6 +396,13 @@ export const esES: LocalizationResource = { headerTitle__members: 'Miembros', headerTitle__requests: 'Solicitudes', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Los roles están temporalmente bloqueados', + subtitle: + 'Estamos actualizando los roles disponibles. Una vez hecho esto, podrás actualizar los roles de nuevo.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +757,10 @@ export const esES: LocalizationResource = { subtitle: 'Introduce el código que te enviamos a tu dispositivo', title: 'Verificación de dos pasos', }, + web3Solana: { + subtitle: 'Selecciona una cartera abajo para iniciar sesión', + title: 'Iniciar sesión con Solana', + }, }, signInEnterPasswordTitle: 'Ingresa tu contraseña', signUp: { @@ -841,6 +852,10 @@ export const esES: LocalizationResource = { title: 'Crea tu cuenta', titleCombined: 'Crea tu cuenta', }, + web3Solana: { + subtitle: 'Selecciona una cartera abajo para registrarte', + title: 'Registrarse con Solana', + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -850,6 +865,7 @@ export const esES: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -863,6 +879,10 @@ export const esES: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Debe pertenecer a una organización', + subtitle: 'Contacte al administrador de su organización para obtener una invitación.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -887,6 +907,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.', @@ -905,6 +927,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.', @@ -945,6 +969,9 @@ 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: 'Has rechazado la solicitud de firma. Inténtalo de nuevo para continuar.', + web3_solana_signature_generation_failed: + 'Se produjo un error al generar la firma. Inténtalo de nuevo para continuar.', zxcvbn: { couldBeStronger: undefined, goodPassword: undefined, @@ -1316,6 +1343,10 @@ export const esES: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Agregar cartera Web3', title: 'Cartera Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecciona una cartera de Solana para conectarla a tu cuenta.', + title: 'Añadir una cartera de Solana', + }, }, }, usernamePage: { @@ -1352,4 +1383,10 @@ export const esES: LocalizationResource = { title: '¡Te has unido a la lista de espera!', }, }, + web3SolanaWalletButtons: { + connect: 'Conectar con {{walletName}}', + continue: 'Continuar con {{walletName}}', + noneAvailable: + 'No se detectaron carteras Solana Web3. Instala una {{ solanaWalletsLink || link("wallet extension") }} compatible con Web3.', + }, } as const; diff --git a/packages/localizations/src/es-MX.ts b/packages/localizations/src/es-MX.ts index 2d675787ae1..db594fd6118 100644 --- a/packages/localizations/src/es-MX.ts +++ b/packages/localizations/src/es-MX.ts @@ -398,6 +398,13 @@ export const esMX: LocalizationResource = { headerTitle__members: 'Miembros', headerTitle__requests: 'Solicitudes', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Los roles están temporalmente bloqueados', + subtitle: + 'Estamos actualizando los roles disponibles. Una vez hecho esto, podrás actualizar los roles de nuevo.', + }, + }, }, navbar: { apiKeys: 'Claves API', @@ -756,6 +763,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: 'Selecciona una billetera abajo para iniciar sesión', + title: 'Iniciar sesión con Solana', + }, }, signInEnterPasswordTitle: 'Ingresa tu contraseña', signUp: { @@ -848,6 +859,10 @@ export const esMX: LocalizationResource = { title: 'Crea tu cuenta', titleCombined: 'Crea tu cuenta', }, + web3Solana: { + subtitle: 'Selecciona una billetera abajo para registrarte', + title: 'Registrarse con Solana', + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -857,6 +872,7 @@ export const esMX: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -870,6 +886,10 @@ export const esMX: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Debe pertenecer a una organización', + subtitle: 'Contacte al administrador de su organización para obtener una invitación.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -894,6 +914,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.', @@ -911,6 +933,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: @@ -952,6 +976,9 @@ 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: 'Has rechazado la solicitud de firma. Inténtalo de nuevo para continuar.', + web3_solana_signature_generation_failed: + 'Se produjo un error al generar la firma. Inténtalo de nuevo para continuar.', 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.', @@ -1324,6 +1351,10 @@ export const esMX: LocalizationResource = { detailsAction__nonPrimary: 'Establecer como primaria', primaryButton: 'Conectar billetera', title: 'Billeteras Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecciona una billetera de Solana para conectarla a tu cuenta.', + title: 'Agregar una billetera de Solana', + }, }, }, usernamePage: { @@ -1359,4 +1390,10 @@ export const esMX: LocalizationResource = { title: '¡Gracias por unirte a la lista de espera!', }, }, + web3SolanaWalletButtons: { + connect: 'Conectar con {{walletName}}', + continue: 'Continuar con {{walletName}}', + noneAvailable: + 'No se detectaron billeteras Web3 de Solana. Instala una {{ solanaWalletsLink || link("wallet extension") }} compatible con Web3.', + }, } as const; diff --git a/packages/localizations/src/es-UY.ts b/packages/localizations/src/es-UY.ts index 4608a3b4838..a4e2c8da910 100644 --- a/packages/localizations/src/es-UY.ts +++ b/packages/localizations/src/es-UY.ts @@ -397,6 +397,13 @@ export const esUY: LocalizationResource = { headerTitle__members: 'Miembros', headerTitle__requests: 'Solicitudes', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Los roles están temporalmente bloqueados', + subtitle: + 'Estamos actualizando los roles disponibles. Una vez hecho esto, podrás actualizar los roles de nuevo.', + }, + }, }, navbar: { apiKeys: undefined, @@ -753,6 +760,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: 'Selecciona una billetera abajo para iniciar sesión', + title: 'Iniciar sesión con Solana', + }, }, signInEnterPasswordTitle: 'Ingresá tu contraseña', signUp: { @@ -847,6 +858,10 @@ export const esUY: LocalizationResource = { title: 'Creá tu cuenta', titleCombined: 'Creá tu cuenta', }, + web3Solana: { + subtitle: 'Selecciona una billetera abajo para registrarte', + title: 'Registrarse con Solana', + }, }, socialButtonsBlockButton: 'Continuar con {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -856,6 +871,7 @@ export const esUY: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -869,6 +885,10 @@ export const esUY: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Debés pertenecer a una organización', + subtitle: 'Contactá al administrador de tu organización para obtener una invitación.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -893,6 +913,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.', @@ -910,6 +932,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: @@ -953,6 +977,9 @@ 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: 'Has rechazado la solicitud de firma. Inténtalo de nuevo para continuar.', + web3_solana_signature_generation_failed: + 'Se produjo un error al generar la firma. Inténtalo de nuevo para continuar.', 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.', @@ -1323,6 +1350,10 @@ export const esUY: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Conectar cartera', title: 'Carteras Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecciona una billetera de Solana para conectarla a tu cuenta.', + title: 'Agregar una billetera de Solana', + }, }, }, usernamePage: { @@ -1358,4 +1389,10 @@ export const esUY: LocalizationResource = { title: '¡Gracias por unirte a la lista de espera!', }, }, + web3SolanaWalletButtons: { + connect: 'Conectar con {{walletName}}', + continue: 'Continuar con {{walletName}}', + noneAvailable: + 'No se detectaron billeteras Web3 de Solana. Instala una {{ solanaWalletsLink || link("wallet extension") }} compatible con Web3.', + }, } as const; diff --git a/packages/localizations/src/fa-IR.ts b/packages/localizations/src/fa-IR.ts index 5bc5a22764a..1e0e781849c 100644 --- a/packages/localizations/src/fa-IR.ts +++ b/packages/localizations/src/fa-IR.ts @@ -402,6 +402,13 @@ export const faIR: LocalizationResource = { headerTitle__members: 'اعضا', headerTitle__requests: 'درخواست‌ها', }, + alerts: { + roleSetMigrationInProgress: { + title: 'نقش‌ها موقتاً قفل شده‌اند', + subtitle: + 'ما در حال به‌روزرسانی نقش‌های موجود هستیم. پس از اتمام، می‌توانید دوباره نقش‌ها را به‌روزرسانی کنید.', + }, + }, }, navbar: { apiKeys: 'کلیدهای API', @@ -758,6 +765,10 @@ export const faIR: LocalizationResource = { subtitle: 'برای ادامه، لطفاً کد تأیید تولید شده توسط برنامه تأیید هویت خود را وارد کنید', title: 'تأیید دو مرحله‌ای', }, + web3Solana: { + subtitle: 'برای ورود، یک کیف پول را در زیر انتخاب کنید', + title: 'ورود با Solana', + }, }, signInEnterPasswordTitle: 'رمز عبور خود را وارد کنید', signUp: { @@ -851,6 +862,10 @@ export const faIR: LocalizationResource = { title: 'حساب کاربری خود را ایجاد کنید', titleCombined: 'حساب کاربری خود را ایجاد کنید', }, + web3Solana: { + subtitle: 'برای ثبت‌نام، یک کیف پول را در زیر انتخاب کنید', + title: 'ثبت‌نام با Solana', + }, }, socialButtonsBlockButton: 'ادامه با {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -860,6 +875,7 @@ export const faIR: LocalizationResource = { action__invitationAccept: 'بپیوندید', action__suggestionsAccept: 'درخواست عضویت', subtitle: 'برای ادامه، سازمانی را انتخاب کنید', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: 'در انتظار تایید', title: 'یک سازمان انتخاب کنید', }, @@ -873,6 +889,10 @@ export const faIR: LocalizationResource = { subtitle: 'سازمان جدیدی برای شروع کار ایجاد کنید', title: 'ایجاد سازمان جدید', }, + organizationCreationDisabled: { + title: 'شما باید عضو یک سازمان باشید', + subtitle: 'برای دریافت دعوتنامه با مدیر سازمان خود تماس بگیرید.', + }, signOut: { actionLink: 'خروج از همه حساب‌ها', actionText: 'می‌خواهید خارج شوید؟', @@ -895,6 +915,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: 'این نام کاربری قبلاً گرفته شده است.', @@ -912,6 +934,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: @@ -950,6 +974,8 @@ export const faIR: LocalizationResource = { phone_number_exists: 'این شماره تلفن قبلاً استفاده شده است.', session_exists: 'جلسه از قبل وجود دارد.', web3_missing_identifier: 'افزونه‌ی کیف پول وب۳ پیدا نشد. برای ادامه، لطفاً یکی نصب کنید.', + web3_signature_request_rejected: 'درخواست امضا را رد کرده‌اید. برای ادامه دوباره تلاش کنید.', + web3_solana_signature_generation_failed: 'هنگام ایجاد امضا خطایی رخ داد. برای ادامه دوباره تلاش کنید.', zxcvbn: { couldBeStronger: 'رمز عبور شما کار می‌کند، اما می‌توانست قوی‌تر باشد. سعی کنید کاراکترهای بیشتری اضافه کنید.', goodPassword: 'رمز عبور شما تمام شرایط لازم را برآورده می‌کند.', @@ -1319,6 +1345,10 @@ export const faIR: LocalizationResource = { detailsAction__nonPrimary: 'به عنوان اصلی تنظیم کنید', primaryButton: 'اتصال کیف پول', title: 'کیف پول های Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'یک کیف پول Solana را برای اتصال به حساب خود انتخاب کنید.', + title: 'افزودن کیف پول Solana', + }, }, }, usernamePage: { @@ -1354,4 +1384,10 @@ export const faIR: LocalizationResource = { title: 'ممنون که به لیست انتظار پیوستید!', }, }, + web3SolanaWalletButtons: { + connect: 'اتصال با {{walletName}}', + continue: 'ادامه با {{walletName}}', + noneAvailable: + 'هیچ کیف پول Solana Web3 شناسایی نشد. لطفاً یک {{ solanaWalletsLink || link("wallet extension") }} پشتیبانی‌شده از Web3 نصب کنید.', + }, } as const; diff --git a/packages/localizations/src/fi-FI.ts b/packages/localizations/src/fi-FI.ts index b79f1a1af10..eaa48cf81c7 100644 --- a/packages/localizations/src/fi-FI.ts +++ b/packages/localizations/src/fi-FI.ts @@ -396,6 +396,12 @@ export const fiFI: LocalizationResource = { headerTitle__members: 'Jäsenet', headerTitle__requests: 'Pyyntöjä', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roolit on tilapäisesti lukittu', + subtitle: 'Päivitämme käytettävissä olevia rooleja. Kun se on tehty, voit päivittää rooleja uudelleen.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +756,10 @@ export const fiFI: LocalizationResource = { subtitle: 'Syötä todennuskoodi autentikointisovelluksestasi', title: 'Kaksivaiheinen todennus', }, + web3Solana: { + subtitle: 'Valitse alta lompakko kirjautumista varten', + title: 'Kirjaudu sisään Solanalla', + }, }, signInEnterPasswordTitle: 'Syötä salasanasi', signUp: { @@ -841,6 +851,10 @@ export const fiFI: LocalizationResource = { title: 'Luo tili', titleCombined: 'Luo tili', }, + web3Solana: { + subtitle: 'Valitse alta lompakko rekisteröitymistä varten', + title: 'Rekisteröidy Solanalla', + }, }, socialButtonsBlockButton: 'Jatka palvelun {{provider|titleize}} avulla', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -850,6 +864,7 @@ export const fiFI: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -863,6 +878,10 @@ export const fiFI: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Sinun täytyy kuulua organisaatioon', + subtitle: 'Ota yhteyttä organisaatiosi ylläpitäjään saadaksesi kutsun.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -886,6 +905,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.', @@ -903,6 +924,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.', @@ -941,6 +964,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: 'Hylkäsit allekirjoituspyynnön. Yritä uudelleen jatkaaksesi.', + web3_solana_signature_generation_failed: 'Allekirjoitusta luotaessa tapahtui virhe. Yritä uudelleen jatkaaksesi.', zxcvbn: { couldBeStronger: 'Salasanasi toimii, mutta se voisi olla vahvempi. Kokeile lisätä erikoismerkkejä tai numeroita.', goodPassword: 'Salasanasi täyttää kaikki tarvittavat vaatimukset.', @@ -1312,6 +1337,10 @@ export const fiFI: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3-lompakot', title: 'Web3-lompakot', + web3SelectSolanaWalletScreen: { + subtitle: 'Valitse Solana-lompakko yhdistettäväksi tiliisi.', + title: 'Lisää Solana-lompakko', + }, }, }, usernamePage: { @@ -1335,16 +1364,22 @@ export const fiFI: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Kirjaudu sisään', + actionText: 'Onko sinulla jo pääsy?', + formButton: 'Liity jonoon', + subtitle: 'Syötä sähköpostiosoitteesi ja ilmoitamme sinulle, kun paikkasi on valmis', + title: 'Liity jonoon', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Sinut ohjataan pian...', + subtitle: 'Olemme yhteydessä, kun paikkasi on valmis', + title: 'Kiitos liittymisestä jonoon!', }, }, + web3SolanaWalletButtons: { + connect: 'Yhdistä {{walletName}}', + continue: 'Jatka {{walletName}}', + noneAvailable: + 'Solana Web3 -lompakoita ei havaittu. Asenna Web3-yhteensopiva {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/fr-FR.ts b/packages/localizations/src/fr-FR.ts index cb9f6fa9afc..9771cfc711e 100644 --- a/packages/localizations/src/fr-FR.ts +++ b/packages/localizations/src/fr-FR.ts @@ -406,6 +406,13 @@ export const frFR: LocalizationResource = { headerTitle__members: 'Membres', headerTitle__requests: 'Demandes', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Les rôles sont temporairement verrouillés', + subtitle: + 'Nous mettons à jour les rôles disponibles. Une fois terminé, vous pourrez de nouveau modifier les rôles.', + }, + }, }, navbar: { apiKeys: 'Clés API', @@ -764,6 +771,10 @@ export const frFR: LocalizationResource = { subtitle: "Entrez le code de l'application d'authentification.", title: 'Vérification en deux étapes', }, + web3Solana: { + subtitle: 'Sélectionnez un portefeuille ci-dessous pour vous connecter', + title: 'Se connecter avec Solana', + }, }, signInEnterPasswordTitle: 'Tapez votre mot de passe', signUp: { @@ -856,6 +867,10 @@ export const frFR: LocalizationResource = { title: 'Créez votre compte', titleCombined: 'Créez votre compte', }, + web3Solana: { + subtitle: 'Sélectionnez un portefeuille ci-dessous pour vous inscrire', + title: "S'inscrire avec Solana", + }, }, socialButtonsBlockButton: 'Continuer avec {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -865,6 +880,7 @@ export const frFR: LocalizationResource = { action__invitationAccept: 'Rejoindre', action__suggestionsAccept: 'Demander à rejoindre', subtitle: 'Rejoignez une organisation existante ou créez-en une nouvelle', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: 'En attente d’approbation', title: 'Choisir une organisation', }, @@ -878,6 +894,10 @@ export const frFR: LocalizationResource = { subtitle: 'Entrez les détails de votre organisation pour continuer', title: 'Configurer votre organisation', }, + organizationCreationDisabled: { + title: 'Vous devez appartenir à une organisation', + subtitle: "Contactez l'administrateur de votre organisation pour obtenir une invitation.", + }, signOut: { actionLink: 'Se déconnecter', actionText: 'Connecté en tant que {{identifier}}', @@ -903,6 +923,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à.", @@ -920,6 +942,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: @@ -961,6 +985,9 @@ 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: 'Vous avez refusé la demande de signature. Veuillez réessayer pour continuer.', + web3_solana_signature_generation_failed: + "Une erreur s'est produite lors de la génération de la signature. Veuillez réessayer pour continuer.", 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.", @@ -1334,6 +1361,10 @@ export const frFR: LocalizationResource = { detailsAction__nonPrimary: 'Définir comme principal', primaryButton: 'Portefeuilles Web3', title: 'Portefeuilles Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Sélectionnez un portefeuille Solana à connecter à votre compte.', + title: 'Ajouter un portefeuille Solana', + }, }, }, usernamePage: { @@ -1369,4 +1400,10 @@ export const frFR: LocalizationResource = { title: 'Inscription réussie', }, }, + web3SolanaWalletButtons: { + connect: 'Se connecter avec {{walletName}}', + continue: 'Continuer avec {{walletName}}', + noneAvailable: + 'Aucun portefeuille Solana Web3 détecté. Veuillez installer une {{ solanaWalletsLink || link("wallet extension") }} compatible Web3.', + }, } as const; diff --git a/packages/localizations/src/he-IL.ts b/packages/localizations/src/he-IL.ts index 8f4417e263a..b26d094b50e 100644 --- a/packages/localizations/src/he-IL.ts +++ b/packages/localizations/src/he-IL.ts @@ -393,6 +393,12 @@ export const heIL: LocalizationResource = { headerTitle__members: 'חברים', headerTitle__requests: 'בקשות', }, + alerts: { + roleSetMigrationInProgress: { + title: 'התפקידים נעולים זמנית', + subtitle: 'אנחנו מעדכנים את התפקידים הזמינים. לאחר שזה יסתיים, תוכל לעדכן תפקידים שוב.', + }, + }, }, navbar: { apiKeys: undefined, @@ -741,6 +747,10 @@ export const heIL: LocalizationResource = { subtitle: 'להמשך, אנא הכנס את קוד האימות שנוצר על ידי אפליקציית האימות שלך', title: 'אימות שני שלבים', }, + web3Solana: { + subtitle: 'בחר/י ארנק למטה כדי להתחבר', + title: 'התחברות עם Solana', + }, }, signInEnterPasswordTitle: 'הזן את הסיסמה שלך', signUp: { @@ -831,6 +841,10 @@ export const heIL: LocalizationResource = { title: 'צור את החשבון שלך', titleCombined: 'צור את החשבון שלך', }, + web3Solana: { + subtitle: 'בחר/י ארנק למטה כדי להירשם', + title: 'הרשמה עם Solana', + }, }, socialButtonsBlockButton: 'המשך עם {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -840,6 +854,7 @@ export const heIL: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -853,6 +868,10 @@ export const heIL: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'עליך להשתייך לארגון', + subtitle: 'פנה למנהל הארגון שלך לקבלת הזמנה.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -874,6 +893,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: 'שם המשתמש הזה כבר תפוס. אנא נסה שם משתמש אחר', @@ -891,6 +912,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: 'הסיסמה הזו נמצאה כחלק מהפרטים שנחשפו בהפרת נתונים ולא ניתן להשתמש בה, נסה סיסמה אחרת במקום.', @@ -930,6 +952,8 @@ export const heIL: LocalizationResource = { phone_number_exists: 'מספר הטלפון הזה כבר בשימוש. אנא נסה מספר אחר.', session_exists: 'אתה כבר מחובר לחשבון.', web3_missing_identifier: undefined, + web3_signature_request_rejected: 'דחית את בקשת החתימה. נסה/י שוב כדי להמשיך.', + web3_solana_signature_generation_failed: 'אירעה שגיאה בעת יצירת החתימה. נסה/י שוב כדי להמשיך.', zxcvbn: { couldBeStronger: 'הסיסמה שלך תקפה, אך יכולה להיות חזקה יותר. נסה להוסיף יותר תווים.', goodPassword: 'עבודה טובה. זו סיסמה מצוינת.', @@ -1288,6 +1312,10 @@ export const heIL: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'ארנקי Web3', title: 'ארנקי Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'בחר/י ארנק Solana כדי לחבר לחשבון שלך.', + title: 'הוסף/י ארנק Solana', + }, }, }, usernamePage: { @@ -1323,4 +1351,10 @@ export const heIL: LocalizationResource = { title: 'תודה שהצטרפת לרשימת ההמתנה!', }, }, + web3SolanaWalletButtons: { + connect: 'התחבר/י עם {{walletName}}', + continue: 'המשך/י עם {{walletName}}', + noneAvailable: + 'לא זוהו ארנקי Solana Web3. נא להתקין {{ solanaWalletsLink || link("wallet extension") }} התומך ב‑Web3.', + }, } as const; diff --git a/packages/localizations/src/hi-IN.ts b/packages/localizations/src/hi-IN.ts index 20c676fd0f1..64af22f24ca 100644 --- a/packages/localizations/src/hi-IN.ts +++ b/packages/localizations/src/hi-IN.ts @@ -397,6 +397,13 @@ export const hiIN: LocalizationResource = { headerTitle__members: 'सदस्य', headerTitle__requests: 'अनुरोध', }, + alerts: { + roleSetMigrationInProgress: { + title: 'भूमिकाएं अस्थायी रूप से लॉक हैं', + subtitle: + 'हम उपलब्ध भूमिकाओं को अपडेट कर रहे हैं। एक बार यह हो जाने के बाद, आप फिर से भूमिकाएं अपडेट कर सकेंगे।', + }, + }, }, navbar: { apiKeys: undefined, @@ -752,6 +759,10 @@ export const hiIN: LocalizationResource = { subtitle: 'जारी रखने के लिए, कृपया अपने प्रमाणकर्ता ऐप द्वारा जनरेट किए गए कोड को दर्ज करें', title: 'दो-चरण सत्यापन', }, + web3Solana: { + subtitle: 'साइन इन करने के लिए नीचे एक वॉलेट चुनें', + title: 'Solana के साथ साइन इन करें', + }, }, signInEnterPasswordTitle: 'अपना पासवर्ड दर्ज करें', signUp: { @@ -845,6 +856,10 @@ export const hiIN: LocalizationResource = { title: 'अपना खाता बनाएं', titleCombined: 'अपना खाता बनाएं', }, + web3Solana: { + subtitle: 'साइन अप करने के लिए नीचे एक वॉलेट चुनें', + title: 'Solana के साथ साइन अप करें', + }, }, socialButtonsBlockButton: '{{provider|titleize}} के साथ जारी रखें', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -854,6 +869,7 @@ export const hiIN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -867,6 +883,10 @@ export const hiIN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'आपको किसी संगठन से संबंधित होना चाहिए', + subtitle: 'आमंत्रण के लिए अपने संगठन के व्यवस्थापक से संपर्क करें।', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -890,6 +910,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: 'यह उपयोगकर्ता नाम पहले से लिया गया है। कृपया दूसरा प्रयास करें।', @@ -907,6 +929,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: @@ -951,6 +975,10 @@ export const hiIN: LocalizationResource = { phone_number_exists: 'यह फोन नंबर पहले से लिया गया है। कृपया दूसरा प्रयास करें।', session_exists: undefined, web3_missing_identifier: 'Web3 वॉलेट एक्सटेंशन नहीं मिल सका। जारी रखने के लिए कृपया एक इंस्टॉल करें।', + web3_signature_request_rejected: + 'आपने सिग्नेचर अनुरोध अस्वीकार कर दिया है। जारी रखने के लिए कृपया फिर से प्रयास करें।', + web3_solana_signature_generation_failed: + 'सिग्नेचर बनाते समय एक त्रुटि हुई। जारी रखने के लिए कृपया फिर से प्रयास करें।', zxcvbn: { couldBeStronger: 'आपका पासवर्ड काम करता है, लेकिन मजबूत हो सकता है। अधिक अक्षर जोड़ने का प्रयास करें।', goodPassword: 'आपका पासवर्ड सभी आवश्यक आवश्यकताओं को पूरा करता है।', @@ -1320,6 +1348,10 @@ export const hiIN: LocalizationResource = { detailsAction__nonPrimary: 'प्राथमिक के रूप में सेट करें', primaryButton: 'वॉलेट कनेक्ट करें', title: 'Web3 वॉलेट', + web3SelectSolanaWalletScreen: { + subtitle: 'अपने खाते से कनेक्ट करने के लिए एक Solana वॉलेट चुनें।', + title: 'Solana वॉलेट जोड़ें', + }, }, }, usernamePage: { @@ -1355,4 +1387,10 @@ export const hiIN: LocalizationResource = { title: 'प्रतीक्षा सूची में शामिल होने के लिए धन्यवाद!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} के साथ कनेक्ट करें', + continue: '{{walletName}} के साथ जारी रखें', + noneAvailable: + 'कोई Solana Web3 वॉलेट नहीं मिला। कृपया Web3 समर्थित {{ solanaWalletsLink || link("wallet extension") }} इंस्टॉल करें।', + }, } as const; diff --git a/packages/localizations/src/hr-HR.ts b/packages/localizations/src/hr-HR.ts index 7f200827522..89041a9c035 100644 --- a/packages/localizations/src/hr-HR.ts +++ b/packages/localizations/src/hr-HR.ts @@ -395,6 +395,12 @@ export const hrHR: LocalizationResource = { headerTitle__members: 'Članovi', headerTitle__requests: 'Zahtjevi', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Uloge su privremeno zaključane', + subtitle: 'Ažuriramo dostupne uloge. Kada to završimo, moći ćete ponovno ažurirati uloge.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +756,10 @@ export const hrHR: LocalizationResource = { subtitle: 'Za nastavak, unesite verifikacijski kod generiran vašom aplikacijom za autentifikaciju', title: 'Dvostupanjska verifikacija', }, + web3Solana: { + subtitle: 'Odaberite novčanik u nastavku za prijavu', + title: 'Prijava putem Solane', + }, }, signInEnterPasswordTitle: 'Unesite svoju lozinku', signUp: { @@ -842,6 +852,10 @@ export const hrHR: LocalizationResource = { title: 'Kreirajte svoj račun', titleCombined: 'Kreirajte svoj račun', }, + web3Solana: { + subtitle: 'Odaberite novčanik u nastavku za registraciju', + title: 'Registracija putem Solane', + }, }, socialButtonsBlockButton: 'Nastavite s {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -851,6 +865,7 @@ export const hrHR: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -864,6 +879,10 @@ export const hrHR: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Morate pripadati organizaciji', + subtitle: 'Kontaktirajte administratora svoje organizacije za pozivnicu.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -888,6 +907,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.', @@ -905,6 +926,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: @@ -947,6 +970,9 @@ 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: 'Odbili ste zahtjev za potpis. Pokušajte ponovno za nastavak.', + web3_solana_signature_generation_failed: + 'Došlo je do pogreške pri generiranju potpisa. Pokušajte ponovno za nastavak.', 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.', @@ -1315,6 +1341,10 @@ export const hrHR: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Poveži novčanik', title: 'Web3 novčanici', + web3SelectSolanaWalletScreen: { + subtitle: 'Odaberite Solana novčanik za povezivanje s vašim računom.', + title: 'Dodaj Solana novčanik', + }, }, }, usernamePage: { @@ -1338,16 +1368,22 @@ export const hrHR: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Prijavi se', + actionText: 'Već imaš pristup?', + formButton: 'Pridruži se listi čekanja', + subtitle: 'Unesi svoju e-mail adresu i obavijestit ćemo te kada tvoje mjesto bude spremno', + title: 'Pridruži se listi čekanja', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Uskoro ćeš biti preusmjeren...', + subtitle: 'Javit ćemo ti se kada tvoje mjesto bude spremno', + title: 'Hvala što si se pridružio/la listi čekanja!', }, }, + web3SolanaWalletButtons: { + connect: 'Poveži se s {{walletName}}', + continue: 'Nastavi s {{walletName}}', + noneAvailable: + 'Nisu otkrivene Solana Web3 novčanike. Instalirajte {{ solanaWalletsLink || link("wallet extension") }} s podrškom za Web3.', + }, } as const; diff --git a/packages/localizations/src/hu-HU.ts b/packages/localizations/src/hu-HU.ts index 4639bc50d0f..1766a367259 100644 --- a/packages/localizations/src/hu-HU.ts +++ b/packages/localizations/src/hu-HU.ts @@ -395,6 +395,12 @@ export const huHU: LocalizationResource = { headerTitle__members: 'Tagok', headerTitle__requests: 'Kérések', }, + alerts: { + roleSetMigrationInProgress: { + title: 'A szerepkörök ideiglenesen zárolva vannak', + subtitle: 'Frissítjük az elérhető szerepköröket. Ha ez befejeződött, újra frissítheti a szerepköröket.', + }, + }, }, navbar: { apiKeys: undefined, @@ -749,6 +755,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: 'Válasszon alább egy tárcát a bejelentkezéshez', + title: 'Bejelentkezés Solanával', + }, }, signInEnterPasswordTitle: 'Írd be a jelszavad', signUp: { @@ -839,6 +849,10 @@ export const huHU: LocalizationResource = { title: 'Fiók létrehozása', titleCombined: 'Fiók létrehozása', }, + web3Solana: { + subtitle: 'Válasszon alább egy tárcát a regisztrációhoz', + title: 'Regisztráció Solanával', + }, }, socialButtonsBlockButton: 'Folytatás {{provider|titleize}} segítségével', socialButtonsBlockButtonManyInView: undefined, @@ -848,6 +862,7 @@ export const huHU: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -861,6 +876,10 @@ export const huHU: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Egy szervezethez kell tartoznia', + subtitle: 'Kérjen meghívót a szervezet adminisztrátorától.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -884,6 +903,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.', @@ -901,6 +922,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: @@ -941,6 +964,9 @@ 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: 'Elutasította az aláírási kérelmet. Kérjük, próbálja meg újra a folytatáshoz.', + web3_solana_signature_generation_failed: + 'Hiba történt az aláírás létrehozása közben. Kérjük, próbálja meg újra a folytatáshoz.', zxcvbn: { couldBeStronger: 'A jelszavad, jó, de lehetne erősebb. Adj hozzá több karaktert.', goodPassword: 'A jelszavad megfelel az elvárásoknak.', @@ -1312,6 +1338,10 @@ export const huHU: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 tárcák', title: 'Web3 tárcák', + web3SelectSolanaWalletScreen: { + subtitle: 'Válasszon egy Solana tárcát a fiókjához való csatlakozáshoz.', + title: 'Solana tárca hozzáadása', + }, }, }, usernamePage: { @@ -1335,16 +1365,22 @@ export const huHU: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Bejelentkezés', + actionText: 'Már van hozzáférésed?', + formButton: 'Csatlakozás a várólistához', + subtitle: 'Add meg az e-mail címedet, és értesítünk, amikor a helyed elkészül', + title: 'Csatlakozás a várólistához', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Hamarosan átirányítunk...', + subtitle: 'Visszajelzünk, amikor a helyed elkészül', + title: 'Köszönjük, hogy csatlakoztál a várólistához!', }, }, + web3SolanaWalletButtons: { + connect: 'Csatlakozás: {{walletName}}', + continue: 'Folytatás: {{walletName}}', + noneAvailable: + 'Nem észlelhető Solana Web3 tárca. Kérjük, telepítsen egy Web3-kompatibilis {{ solanaWalletsLink || link("wallet extension") }}-t.', + }, } as const; diff --git a/packages/localizations/src/id-ID.ts b/packages/localizations/src/id-ID.ts index 51fe316c300..314e4df62a4 100644 --- a/packages/localizations/src/id-ID.ts +++ b/packages/localizations/src/id-ID.ts @@ -396,6 +396,13 @@ export const idID: LocalizationResource = { headerTitle__members: 'Anggota', headerTitle__requests: 'Permintaan', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Peran untuk sementara terkunci', + subtitle: + 'Kami sedang memperbarui peran yang tersedia. Setelah selesai, Anda akan dapat memperbarui peran lagi.', + }, + }, }, navbar: { apiKeys: undefined, @@ -752,6 +759,10 @@ export const idID: LocalizationResource = { subtitle: 'Untuk melanjutkan, masukkan kode verifikasi yang dihasilkan oleh aplikasi autentikator Anda', title: 'Verifikasi dua langkah', }, + web3Solana: { + subtitle: 'Pilih dompet di bawah untuk masuk', + title: 'Masuk dengan Solana', + }, }, signInEnterPasswordTitle: 'Masukkan kata sandi Anda', signUp: { @@ -846,6 +857,10 @@ export const idID: LocalizationResource = { title: 'Buat akun Anda', titleCombined: 'Buat akun Anda', }, + web3Solana: { + subtitle: 'Pilih dompet di bawah untuk mendaftar', + title: 'Daftar dengan Solana', + }, }, socialButtonsBlockButton: 'Lanjutkan dengan {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -855,6 +870,7 @@ export const idID: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -868,6 +884,10 @@ export const idID: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Anda harus menjadi anggota organisasi', + subtitle: 'Hubungi admin organisasi Anda untuk mendapatkan undangan.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -891,6 +911,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.', @@ -908,6 +930,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: @@ -950,6 +973,9 @@ 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: 'Anda menolak permintaan tanda tangan. Silakan coba lagi untuk melanjutkan.', + web3_solana_signature_generation_failed: + 'Terjadi kesalahan saat membuat tanda tangan. Silakan coba lagi untuk melanjutkan.', zxcvbn: { couldBeStronger: 'Kata sandi Anda berfungsi, tapi bisa lebih kuat. Coba tambahkan lebih banyak karakter.', goodPassword: 'Kata sandi Anda memenuhi semua persyaratan yang diperlukan.', @@ -1309,6 +1335,10 @@ export const idID: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: undefined, title: undefined, + web3SelectSolanaWalletScreen: { + subtitle: 'Pilih dompet Solana untuk dihubungkan ke akun Anda.', + title: 'Tambahkan dompet Solana', + }, }, }, usernamePage: { @@ -1344,4 +1374,10 @@ export const idID: LocalizationResource = { title: 'Terima kasih telah bergabung dengan daftar tunggu!', }, }, + web3SolanaWalletButtons: { + connect: 'Hubungkan dengan {{walletName}}', + continue: 'Lanjutkan dengan {{walletName}}', + noneAvailable: + 'Tidak ada dompet Solana Web3 yang terdeteksi. Silakan instal {{ solanaWalletsLink || link("wallet extension") }} yang mendukung Web3.', + }, } as const; diff --git a/packages/localizations/src/is-IS.ts b/packages/localizations/src/is-IS.ts index e3057b8cd80..e87e68da5ac 100644 --- a/packages/localizations/src/is-IS.ts +++ b/packages/localizations/src/is-IS.ts @@ -396,6 +396,12 @@ export const isIS: LocalizationResource = { headerTitle__members: 'Meðlimir', headerTitle__requests: 'Beiðnir', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Hlutverk eru tímabundið læst', + subtitle: 'Við erum að uppfæra tiltæk hlutverk. Þegar því er lokið geturðu uppfært hlutverk aftur.', + }, + }, }, navbar: { apiKeys: undefined, @@ -751,6 +757,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: 'Veldu veski hér að neðan til að skrá þig inn', + title: 'Skrá inn með Solana', + }, }, signInEnterPasswordTitle: 'Sláðu inn lykilorðið þitt', signUp: { @@ -842,6 +852,10 @@ export const isIS: LocalizationResource = { title: 'Stofna reikning', titleCombined: 'Stofna reikning', }, + web3Solana: { + subtitle: 'Veldu veski hér að neðan til að skrá þig', + title: 'Skráðu þig með Solana', + }, }, socialButtonsBlockButton: 'Halda áfram með {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -851,6 +865,7 @@ export const isIS: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -864,6 +879,10 @@ export const isIS: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Þú verður að tilheyra samtökum', + subtitle: 'Hafðu samband við stjórnanda samtakanna til að fá boð.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -887,6 +906,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ð.', @@ -904,6 +925,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: @@ -945,6 +967,9 @@ 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: 'Þú hafðir hafnað beiðni um undirritun. Reyndu aftur til að halda áfram.', + web3_solana_signature_generation_failed: + 'Villa kom upp við að búa til undirritun. Reyndu aftur til að halda áfram.', 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.', @@ -1316,6 +1341,10 @@ export const isIS: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 veski', title: 'Web3 veski', + web3SelectSolanaWalletScreen: { + subtitle: 'Veldu Solana-veski til að tengja við aðganginn þinn.', + title: 'Bæta við Solana-veski', + }, }, }, usernamePage: { @@ -1339,16 +1368,22 @@ export const isIS: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Skrá inn', + actionText: 'Áttu nú þegar aðgang?', + formButton: 'Skrá sig á biðlista', + subtitle: 'Sláðu inn netfangið þitt og við látum þig vita þegar staða þín er tilbúin', + title: 'Skrá sig á biðlista', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Þú verður áframsendur fljótlega...', + subtitle: 'Við höfum samband þegar staða þín er tilbúin', + title: 'Takk fyrir að skrá sig á biðlistann!', }, }, + web3SolanaWalletButtons: { + connect: 'Tengjast með {{walletName}}', + continue: 'Halda áfram með {{walletName}}', + noneAvailable: + 'Engin Solana Web3 veski fundust. Vinsamlegast settu upp Web3-stutt {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/it-IT.ts b/packages/localizations/src/it-IT.ts index 972d54a68e9..bca7f3064c1 100644 --- a/packages/localizations/src/it-IT.ts +++ b/packages/localizations/src/it-IT.ts @@ -403,6 +403,13 @@ export const itIT: LocalizationResource = { headerTitle__members: 'Membri', headerTitle__requests: 'Richieste', }, + alerts: { + roleSetMigrationInProgress: { + title: 'I ruoli sono temporaneamente bloccati', + subtitle: + 'Stiamo aggiornando i ruoli disponibili. Una volta completato, potrai aggiornare nuovamente i ruoli.', + }, + }, }, navbar: { apiKeys: 'Chiavi API', @@ -756,6 +763,10 @@ export const itIT: LocalizationResource = { subtitle: 'Inserisci il codice di verifica dalla tua app di autenticazione.', title: 'Verifica in due passaggi', }, + web3Solana: { + subtitle: 'Seleziona un wallet qui sotto per accedere', + title: 'Accedi con Solana', + }, }, signInEnterPasswordTitle: 'Inserisci la tua password', signUp: { @@ -848,6 +859,10 @@ export const itIT: LocalizationResource = { title: 'Crea il tuo account', titleCombined: 'Crea il tuo account', }, + web3Solana: { + subtitle: 'Seleziona un wallet qui sotto per registrarti', + title: 'Registrati con Solana', + }, }, socialButtonsBlockButton: 'Continua con {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -857,6 +872,7 @@ export const itIT: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -870,6 +886,10 @@ export const itIT: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: "Devi appartenere a un'organizzazione", + subtitle: "Contatta l'amministratore della tua organizzazione per un invito.", + }, signOut: { actionLink: undefined, actionText: undefined, @@ -893,6 +913,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.', @@ -910,6 +932,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.', @@ -949,6 +972,9 @@ 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: 'Hai rifiutato la richiesta di firma. Riprova per continuare.', + web3_solana_signature_generation_failed: + 'Si è verificato un errore durante la generazione della firma. Riprova per continuare.', zxcvbn: { couldBeStronger: undefined, goodPassword: undefined, @@ -1321,6 +1347,10 @@ export const itIT: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 wallets', title: 'Web3 wallets', + web3SelectSolanaWalletScreen: { + subtitle: 'Seleziona un wallet Solana da collegare al tuo account.', + title: 'Aggiungi un wallet Solana', + }, }, }, usernamePage: { @@ -1344,16 +1374,22 @@ export const itIT: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Accedi', + actionText: 'Hai già accesso?', + formButton: "Unisciti alla lista d'attesa", + subtitle: 'Inserisci il tuo indirizzo email e ti avviseremo quando il tuo posto sarà pronto', + title: "Unisciti alla lista d'attesa", }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Verrai reindirizzato a breve...', + subtitle: 'Ti contatteremo quando il tuo posto sarà pronto', + title: "Grazie per esserti unito alla lista d'attesa!", }, }, + web3SolanaWalletButtons: { + connect: 'Connetti con {{walletName}}', + continue: 'Continua con {{walletName}}', + noneAvailable: + 'Nessun wallet Solana Web3 rilevato. Installa un {{ solanaWalletsLink || link("wallet extension") }} compatibile con Web3.', + }, } as const; diff --git a/packages/localizations/src/ja-JP.ts b/packages/localizations/src/ja-JP.ts index 32056235b1e..e686f7d8d3a 100644 --- a/packages/localizations/src/ja-JP.ts +++ b/packages/localizations/src/ja-JP.ts @@ -403,6 +403,12 @@ export const jaJP: LocalizationResource = { headerTitle__members: 'メンバー', headerTitle__requests: 'リクエスト', }, + alerts: { + roleSetMigrationInProgress: { + title: 'ロールは一時的にロックされています', + subtitle: '利用可能なロールを更新しています。完了次第、ロールを再度更新できるようになります。', + }, + }, }, navbar: { apiKeys: 'APIキー', @@ -759,6 +765,10 @@ export const jaJP: LocalizationResource = { subtitle: '続行するには、認証アプリで生成された検証コードを入力してください', title: '二段階認証', }, + web3Solana: { + subtitle: 'サインインするには下のウォレットを選択してください', + title: 'Solana でサインイン', + }, }, signInEnterPasswordTitle: 'パスワードを入力してください', signUp: { @@ -852,6 +862,10 @@ export const jaJP: LocalizationResource = { title: 'アカウントを作成', titleCombined: 'アカウントを作成', }, + web3Solana: { + subtitle: 'サインアップするには下のウォレットを選択してください', + title: 'Solana でサインアップ', + }, }, socialButtonsBlockButton: '{{provider|titleize}}で続ける', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -861,6 +875,7 @@ export const jaJP: LocalizationResource = { action__invitationAccept: '参加する', action__suggestionsAccept: '参加をリクエストする', subtitle: '既存の組織に参加するか、新しい組織を作成します', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: '承認待ち', title: '組織を選択', }, @@ -874,6 +889,10 @@ export const jaJP: LocalizationResource = { subtitle: '続行するには組織の詳細を入力してください', title: '組織をセットアップ', }, + organizationCreationDisabled: { + title: '組織に所属する必要があります', + subtitle: '招待を受けるには組織の管理者にお問い合わせください。', + }, signOut: { actionLink: 'サインアウト', actionText: '{{identifier}} としてサインイン中', @@ -897,6 +916,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, @@ -914,6 +935,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: @@ -954,6 +977,8 @@ export const jaJP: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'Web3ウォレット拡張機能が見つかりません。続行するにはインストールしてください。', + web3_signature_request_rejected: '署名リクエストを拒否しました。続行するにはもう一度お試しください。', + web3_solana_signature_generation_failed: '署名の生成中にエラーが発生しました。続行するにはもう一度お試しください。', zxcvbn: { couldBeStronger: 'パスワードは有効ですが、もう少し強化できます。文字を追加してみてください。', goodPassword: 'パスワードはすべての要件を満たしています。', @@ -1320,6 +1345,10 @@ export const jaJP: LocalizationResource = { detailsAction__nonPrimary: 'プライマリに設定する', primaryButton: 'ウォレットを接続', title: 'Web3ウォレット', + web3SelectSolanaWalletScreen: { + subtitle: 'アカウントに接続する Solana ウォレットを選択してください。', + title: 'Solana ウォレットを追加', + }, }, }, usernamePage: { @@ -1355,4 +1384,10 @@ export const jaJP: LocalizationResource = { title: '待機リストへの参加ありがとうございます!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} で接続', + continue: '{{walletName}} で続行', + noneAvailable: + 'Solana Web3 ウォレットが検出されませんでした。Web3 に対応した {{ solanaWalletsLink || link("wallet extension") }} をインストールしてください。', + }, } as const; diff --git a/packages/localizations/src/kk-KZ.ts b/packages/localizations/src/kk-KZ.ts index a6fafe75c28..212ec89d50f 100644 --- a/packages/localizations/src/kk-KZ.ts +++ b/packages/localizations/src/kk-KZ.ts @@ -392,6 +392,12 @@ export const kkKZ: LocalizationResource = { headerTitle__members: 'Мүшелер', headerTitle__requests: 'Сұраулар', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Рөлдер уақытша құлыпталған', + subtitle: 'Қолжетімді рөлдерді жаңартып жатырмыз. Бұл аяқталғаннан кейін рөлдерді қайта жаңарта аласыз.', + }, + }, }, navbar: { apiKeys: undefined, @@ -741,6 +747,10 @@ export const kkKZ: LocalizationResource = { subtitle: 'Аутентификатор қолданбасындағы кодты енгізіңіз', title: 'Екі қадамды растау', }, + web3Solana: { + subtitle: 'Кіру үшін төменде әмиянды таңдаңыз', + title: 'Solana арқылы кіру', + }, }, signInEnterPasswordTitle: 'Құпия сөзді енгізіңіз', signUp: { @@ -832,6 +842,10 @@ export const kkKZ: LocalizationResource = { title: 'Есептік жазбаны құру', titleCombined: 'Есептік жазбаны құру', }, + web3Solana: { + subtitle: 'Тіркелу үшін төменде әмиянды таңдаңыз', + title: 'Solana арқылы тіркелу', + }, }, socialButtonsBlockButton: '{{provider|titleize}} арқылы жалғастыру', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -841,6 +855,7 @@ export const kkKZ: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -854,6 +869,10 @@ export const kkKZ: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Сіз ұйымға тиесілі болуыңыз керек', + subtitle: 'Шақыру алу үшін ұйымыңыздың әкімшісіне хабарласыңыз.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -875,6 +894,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: 'Бұл пайдаланушы аты тіркелген. Басқасын қолданыңыз.', @@ -892,6 +913,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: 'Бұл құпия сөз қауіпсіздік бұзылуынан табылды. Басқа құпия сөзді қолданыңыз.', @@ -930,6 +953,9 @@ export const kkKZ: LocalizationResource = { phone_number_exists: 'Бұл телефон нөмірі тіркелген. Басқасын қолданыңыз.', session_exists: undefined, web3_missing_identifier: 'Web3 Wallet кеңейтуі табылмады. Орнатыңыз.', + web3_signature_request_rejected: 'Сіз қолтаңба сұрауын қабылдамадыңыз. Жалғастыру үшін қайтадан көріңіз.', + web3_solana_signature_generation_failed: + 'Қолтаңбаны жасау кезінде қате орын алды. Жалғастыру үшін қайтадан көріңіз.', zxcvbn: { couldBeStronger: 'Құпия сөз әлсіз. Таңбалар санын көбейтіңіз.', goodPassword: 'Құпия сөз талаптарға сай.', @@ -1288,6 +1314,10 @@ export const kkKZ: LocalizationResource = { detailsAction__nonPrimary: 'Негізгі ретінде орнату', primaryButton: 'Әптәпқалманы қосу', title: 'Web3 әптәпқалмалары', + web3SelectSolanaWalletScreen: { + subtitle: 'Есептік жазбаңызға қосу үшін Solana әмиянын таңдаңыз.', + title: 'Solana әмиянын қосу', + }, }, }, usernamePage: { @@ -1323,4 +1353,10 @@ export const kkKZ: LocalizationResource = { title: 'Күту тізіміне қосылғаныңыз үшін рақмет!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} арқылы қосылу', + continue: '{{walletName}} арқылы жалғастыру', + noneAvailable: + 'Solana Web3 әмияндары табылмады. Web3 қолдайтын {{ solanaWalletsLink || link("wallet extension") }} орнатыңыз.', + }, } as const; diff --git a/packages/localizations/src/ko-KR.ts b/packages/localizations/src/ko-KR.ts index 56bce5252fc..f1a1a71ba3f 100644 --- a/packages/localizations/src/ko-KR.ts +++ b/packages/localizations/src/ko-KR.ts @@ -395,6 +395,12 @@ export const koKR: LocalizationResource = { headerTitle__members: 'Members', headerTitle__requests: 'Requests', }, + alerts: { + roleSetMigrationInProgress: { + title: '역할이 일시적으로 잠겨 있습니다', + subtitle: '사용 가능한 역할을 업데이트하고 있습니다. 완료되면 다시 역할을 업데이트할 수 있습니다.', + }, + }, }, navbar: { apiKeys: undefined, @@ -743,6 +749,10 @@ export const koKR: LocalizationResource = { subtitle: '계속하려면 인증 앱에서 생성된 인증 코드를 입력하세요', title: '2단계 인증', }, + web3Solana: { + subtitle: '로그인하려면 아래에서 지갑을 선택하세요', + title: 'Solana로 로그인', + }, }, signInEnterPasswordTitle: '비밀번호를 입력하세요', signUp: { @@ -833,6 +843,10 @@ export const koKR: LocalizationResource = { title: '계정 만들기', titleCombined: '계정 만들기', }, + web3Solana: { + subtitle: '가입하려면 아래에서 지갑을 선택하세요', + title: 'Solana로 가입', + }, }, socialButtonsBlockButton: '{{provider|titleize}}로 계속하기', socialButtonsBlockButtonManyInView: undefined, @@ -842,6 +856,7 @@ export const koKR: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -855,6 +870,10 @@ export const koKR: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: '조직에 소속되어야 합니다', + subtitle: '초대를 받으려면 조직 관리자에게 문의하세요.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -878,6 +897,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, @@ -895,6 +916,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: '이 비밀번호는 유출사항이 발견되어 사용할 수 없으므로 대신 다른 비밀번호를 사용해 보세요.', @@ -933,6 +956,8 @@ export const koKR: LocalizationResource = { phone_number_exists: '이 전화번호는 이미 사용중입니다. 다른 번호를 시도해 주세요.', session_exists: '이미 로그인 중입니다.', web3_missing_identifier: undefined, + web3_signature_request_rejected: '서명 요청을 거부했습니다. 계속하려면 다시 시도해 주세요.', + web3_solana_signature_generation_failed: '서명을 생성하는 동안 오류가 발생했습니다. 계속하려면 다시 시도해 주세요.', zxcvbn: { couldBeStronger: '비밀번호는 작동하지만 더 강력할 수 있습니다. 문자를 더 추가해 보세요.', goodPassword: '수고하셨습니다. 훌륭한 비밀번호입니다.', @@ -1294,6 +1319,10 @@ export const koKR: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 지갑', title: 'Web3 지갑', + web3SelectSolanaWalletScreen: { + subtitle: '계정에 연결할 Solana 지갑을 선택하세요.', + title: 'Solana 지갑 추가', + }, }, }, usernamePage: { @@ -1317,16 +1346,22 @@ export const koKR: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: '로그인', + actionText: '이미 액세스 권한이 있으신가요?', + formButton: '대기 목록에 가입', + subtitle: '이메일 주소를 입력하시면 준비되면 알려드리겠습니다', + title: '대기 목록에 가입', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: '곧 리디렉션됩니다...', + subtitle: '준비되면 연락드리겠습니다', + title: '대기 목록에 가입해 주셔서 감사합니다!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}}(으)로 연결', + continue: '{{walletName}}(으)로 계속', + noneAvailable: + 'Solana Web3 지갑을 찾을 수 없습니다. Web3를 지원하는 {{ solanaWalletsLink || link("wallet extension") }}을(를) 설치해 주세요.', + }, } as const; diff --git a/packages/localizations/src/mn-MN.ts b/packages/localizations/src/mn-MN.ts index f3226c8d8cd..47d7f2f3520 100644 --- a/packages/localizations/src/mn-MN.ts +++ b/packages/localizations/src/mn-MN.ts @@ -396,6 +396,13 @@ export const mnMN: LocalizationResource = { headerTitle__members: 'Гишүүд', headerTitle__requests: 'Хүсэлтүүд', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Дүрүүд түр хугацаанд түгжигдсэн байна', + subtitle: + 'Бид боломжтой дүрүүдийг шинэчилж байна. Дууссаны дараа та дүрүүдийг дахин шинэчлэх боломжтой болно.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +757,10 @@ export const mnMN: LocalizationResource = { subtitle: 'Үргэлжлүүлэхийн тулд authenticator апп-аар үүсгэсэн баталгаажуулах кодыг оруулна уу', title: 'Two-step баталгаажуулалт', }, + web3Solana: { + subtitle: 'Нэвтрэхийн тулд доороос түрийвч сонгоно уу', + title: 'Solana-аар нэвтрэх', + }, }, signInEnterPasswordTitle: 'Нууц үгээ оруулна уу', signUp: { @@ -840,6 +851,10 @@ export const mnMN: LocalizationResource = { title: 'Бүртгэл үүсгэх', titleCombined: 'Бүртгэл үүсгэх', }, + web3Solana: { + subtitle: 'Бүртгүүлэхийн тулд доороос түрийвч сонгоно уу', + title: 'Solana-аар бүртгүүлэх', + }, }, socialButtonsBlockButton: '{{provider|titleize}}-р үргэлжлүүлэх', socialButtonsBlockButtonManyInView: undefined, @@ -849,6 +864,7 @@ export const mnMN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -862,6 +878,10 @@ export const mnMN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Та байгууллагад харьяалагдах ёстой', + subtitle: 'Урилга авахын тулд байгууллагын админтай холбогдоно уу.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -885,6 +905,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, @@ -902,6 +924,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: @@ -941,6 +965,10 @@ export const mnMN: LocalizationResource = { phone_number_exists: 'Энэ утасны дугаарыг авсан. Өөр оролдоно уу.', session_exists: 'Та аль хэдийн нэвтэрсэн байна.', web3_missing_identifier: undefined, + web3_signature_request_rejected: + 'Та гарын үсгийн хүсэлтийг цуцалсан байна. Үргэлжлүүлэхийн тулд дахин оролдоно уу.', + web3_solana_signature_generation_failed: + 'Гарын үсэг үүсгэх үед алдаа гарлаа. Үргэлжлүүлэхийн тулд дахин оролдоно уу.', zxcvbn: { couldBeStronger: 'Таны нууц үг ажилладаг, гэхдээ илүү хүчтэй байж болно. Илүү олон тэмдэгт нэмж үзээрэй.', goodPassword: 'Таны нууц үг шаардлагатай бүх шаардлагыг хангаж байна.', @@ -1310,6 +1338,10 @@ export const mnMN: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 wallets', title: 'Web3 wallets', + web3SelectSolanaWalletScreen: { + subtitle: 'Өөрийн бүртгэлтэй холбох Solana түрийвч сонгоно уу.', + title: 'Solana түрийвч нэмэх', + }, }, }, usernamePage: { @@ -1333,16 +1365,22 @@ export const mnMN: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Нэвтрэх', + actionText: 'Та аль хэдийн нэвтрэх эрхтэй юу?', + formButton: 'Хүлээлгийн жагсаалтад нэгдэх', + subtitle: 'Имэйл хаягаа оруулаад таны байр бэлэн болоход мэдэгдэх болно', + title: 'Хүлээлгийн жагсаалтад нэгдэх', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Удахгүй дахин чиглүүлэх болно...', + subtitle: 'Таны байр бэлэн болоход бид холбогдох болно', + title: 'Хүлээлгийн жагсаалтад нэгдсэнд баярлалаа!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}}-аар холбох', + continue: '{{walletName}}-аар үргэлжлүүлэх', + noneAvailable: + 'Solana Web3 түрийвч илрээгүй. Web3-ийг дэмждэг {{ solanaWalletsLink || link("wallet extension") }} суулгана уу.', + }, } as const; diff --git a/packages/localizations/src/ms-MY.ts b/packages/localizations/src/ms-MY.ts index 76f884c09d2..8c9fc2fe6f5 100644 --- a/packages/localizations/src/ms-MY.ts +++ b/packages/localizations/src/ms-MY.ts @@ -397,6 +397,13 @@ export const msMY: LocalizationResource = { headerTitle__members: 'Ahli', headerTitle__requests: 'Permintaan', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Peranan dikunci buat sementara waktu', + subtitle: + 'Kami sedang mengemas kini peranan yang tersedia. Setelah selesai, anda akan dapat mengemas kini peranan semula.', + }, + }, }, navbar: { apiKeys: undefined, @@ -754,6 +761,10 @@ export const msMY: LocalizationResource = { subtitle: 'Untuk meneruskan, sila masukkan kod pengesahan yang dijana oleh aplikasi pengesah anda', title: 'Pengesahan dua langkah', }, + web3Solana: { + subtitle: 'Pilih dompet di bawah untuk log masuk', + title: 'Log masuk dengan Solana', + }, }, signInEnterPasswordTitle: 'Masukkan kata laluan anda', signUp: { @@ -848,6 +859,10 @@ export const msMY: LocalizationResource = { title: 'Cipta akaun anda', titleCombined: 'Cipta akaun anda', }, + web3Solana: { + subtitle: 'Pilih dompet di bawah untuk mendaftar', + title: 'Daftar dengan Solana', + }, }, socialButtonsBlockButton: 'Teruskan dengan {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -857,6 +872,7 @@ export const msMY: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -870,6 +886,10 @@ export const msMY: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Anda mesti menjadi ahli organisasi', + subtitle: 'Hubungi pentadbir organisasi anda untuk jemputan.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -893,6 +913,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.', @@ -911,6 +933,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: @@ -956,6 +980,9 @@ 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: 'Anda telah menolak permintaan tandatangan. Sila cuba lagi untuk meneruskan.', + web3_solana_signature_generation_failed: + 'Ralat berlaku semasa menjana tandatangan. Sila cuba lagi untuk meneruskan.', zxcvbn: { couldBeStronger: 'Kata laluan anda berfungsi, tetapi boleh lebih kuat. Cuba tambah lebih banyak aksara.', goodPassword: 'Kata laluan anda memenuhi semua keperluan yang diperlukan.', @@ -1328,6 +1355,10 @@ export const msMY: LocalizationResource = { detailsAction__nonPrimary: 'Tetapkan sebagai utama', primaryButton: 'Sambung dompet', title: 'Dompet web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Pilih dompet Solana untuk disambungkan ke akaun anda.', + title: 'Tambah dompet Solana', + }, }, }, usernamePage: { @@ -1363,4 +1394,10 @@ export const msMY: LocalizationResource = { title: 'Terima kasih kerana menyertai senarai menunggu!', }, }, + web3SolanaWalletButtons: { + connect: 'Sambung dengan {{walletName}}', + continue: 'Teruskan dengan {{walletName}}', + noneAvailable: + 'Tiada dompet Solana Web3 dikesan. Sila pasang {{ solanaWalletsLink || link("wallet extension") }} yang menyokong Web3.', + }, } as const; diff --git a/packages/localizations/src/nb-NO.ts b/packages/localizations/src/nb-NO.ts index 21fd1a962a2..eca0b97f88d 100644 --- a/packages/localizations/src/nb-NO.ts +++ b/packages/localizations/src/nb-NO.ts @@ -395,6 +395,12 @@ export const nbNO: LocalizationResource = { headerTitle__members: 'Medlemmer', headerTitle__requests: 'Forespørsler', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roller er midlertidig låst', + subtitle: 'Vi oppdaterer tilgjengelige roller. Når det er gjort, vil du kunne oppdatere roller igjen.', + }, + }, }, navbar: { apiKeys: undefined, @@ -749,6 +755,10 @@ export const nbNO: LocalizationResource = { subtitle: undefined, title: 'To-trinns verifisering', }, + web3Solana: { + subtitle: 'Velg en lommebok nedenfor for å logge inn', + title: 'Logg inn med Solana', + }, }, signInEnterPasswordTitle: 'Skriv inn passordet ditt', signUp: { @@ -839,6 +849,10 @@ export const nbNO: LocalizationResource = { title: 'Opprett kontoen din', titleCombined: 'Opprett kontoen din', }, + web3Solana: { + subtitle: 'Velg en lommebok nedenfor for å registrere deg', + title: 'Registrer deg med Solana', + }, }, socialButtonsBlockButton: 'Fortsett med {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -848,6 +862,7 @@ export const nbNO: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -861,6 +876,10 @@ export const nbNO: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Du må tilhøre en organisasjon', + subtitle: 'Kontakt organisasjonsadministratoren din for en invitasjon.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -884,6 +903,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, @@ -901,6 +922,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: @@ -940,6 +963,9 @@ 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: 'Du avviste signaturforespørselen. Prøv igjen for å fortsette.', + web3_solana_signature_generation_failed: + 'Det oppstod en feil under generering av signaturen. Prøv igjen for å fortsette.', 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.', @@ -1309,6 +1335,10 @@ export const nbNO: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3-lommebøker', title: 'Web3-lommebøker', + web3SelectSolanaWalletScreen: { + subtitle: 'Velg en Solana-lommebok for å koble den til kontoen din.', + title: 'Legg til en Solana-lommebok', + }, }, }, usernamePage: { @@ -1332,16 +1362,22 @@ export const nbNO: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Logg inn', + actionText: 'Har du allerede tilgang?', + formButton: 'Bli med på ventelisten', + subtitle: 'Skriv inn e-postadressen din, så gir vi deg beskjed når plassen din er klar', + title: 'Bli med på ventelisten', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Du vil bli omdirigert snart...', + subtitle: 'Vi tar kontakt når plassen din er klar', + title: 'Takk for at du ble med på ventelisten!', }, }, + web3SolanaWalletButtons: { + connect: 'Koble til med {{walletName}}', + continue: 'Fortsett med {{walletName}}', + noneAvailable: + 'Ingen Solana Web3-lommebøker ble funnet. Installer en Web3-støttet {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/nl-BE.ts b/packages/localizations/src/nl-BE.ts index 5167e3eddda..f0bb7d32200 100644 --- a/packages/localizations/src/nl-BE.ts +++ b/packages/localizations/src/nl-BE.ts @@ -395,6 +395,13 @@ export const nlBE: LocalizationResource = { headerTitle__members: 'Leden', headerTitle__requests: 'Verzoeken', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Rollen zijn tijdelijk vergrendeld', + subtitle: + 'We zijn de beschikbare rollen aan het bijwerken. Zodra dit klaar is, kunt u de rollen opnieuw bijwerken.', + }, + }, }, navbar: { apiKeys: undefined, @@ -749,6 +756,10 @@ export const nlBE: LocalizationResource = { subtitle: '', title: 'Tweestapsverificatie', }, + web3Solana: { + subtitle: 'Selecteer hieronder een wallet om in te loggen', + title: 'Inloggen met Solana', + }, }, signInEnterPasswordTitle: 'Vul je wachtwoord in', signUp: { @@ -840,6 +851,10 @@ export const nlBE: LocalizationResource = { title: 'Maak je account aan', titleCombined: 'Maak je account aan', }, + web3Solana: { + subtitle: 'Selecteer hieronder een wallet om je te registreren', + title: 'Registreren met Solana', + }, }, socialButtonsBlockButton: 'Ga verder met {{provider|titleize}}', socialButtonsBlockButtonManyInView: 'Ga verder met {{provider|titleize}}', @@ -849,6 +864,7 @@ export const nlBE: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -862,6 +878,10 @@ export const nlBE: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Je moet tot een organisatie behoren', + subtitle: 'Neem contact op met de beheerder van je organisatie voor een uitnodiging.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -885,6 +905,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.', @@ -902,6 +924,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.', @@ -940,6 +964,10 @@ 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: + 'Je hebt het handtekeningverzoek afgewezen. Probeer het opnieuw om verder te gaan.', + web3_solana_signature_generation_failed: + 'Er is een fout opgetreden bij het genereren van de handtekening. Probeer het opnieuw om verder te gaan.', zxcvbn: { couldBeStronger: 'Je wachtwoord werkt, maar kan sterker zijn. Probeer meer tekens toe te voegen.', goodPassword: 'Je wachtwoord voldoet aan alle vereisten.', @@ -1307,6 +1335,10 @@ export const nlBE: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 portefeuilles', title: 'Web3 portefeuilles', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecteer een Solana-wallet om aan je account te koppelen.', + title: 'Solana-wallet toevoegen', + }, }, }, usernamePage: { @@ -1342,4 +1374,10 @@ export const nlBE: LocalizationResource = { title: 'Succes!', }, }, + web3SolanaWalletButtons: { + connect: 'Verbinden met {{walletName}}', + continue: 'Doorgaan met {{walletName}}', + noneAvailable: + 'Geen Solana Web3-wallets gedetecteerd. Installeer een Web3-ondersteunde {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/nl-NL.ts b/packages/localizations/src/nl-NL.ts index d438ebb6895..451d77b41e0 100644 --- a/packages/localizations/src/nl-NL.ts +++ b/packages/localizations/src/nl-NL.ts @@ -395,6 +395,13 @@ export const nlNL: LocalizationResource = { headerTitle__members: 'Leden', headerTitle__requests: 'Verzoeken', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Rollen zijn tijdelijk vergrendeld', + subtitle: + 'We zijn de beschikbare rollen aan het bijwerken. Zodra dit klaar is, kunt u de rollen opnieuw bijwerken.', + }, + }, }, navbar: { apiKeys: undefined, @@ -749,6 +756,10 @@ export const nlNL: LocalizationResource = { subtitle: '', title: 'Tweestapsverificatie', }, + web3Solana: { + subtitle: 'Selecteer hieronder een wallet om in te loggen', + title: 'Inloggen met Solana', + }, }, signInEnterPasswordTitle: 'Vul je wachtwoord in', signUp: { @@ -840,6 +851,10 @@ export const nlNL: LocalizationResource = { title: 'Maak je account aan', titleCombined: 'Maak je account aan', }, + web3Solana: { + subtitle: 'Selecteer hieronder een wallet om je te registreren', + title: 'Registreren met Solana', + }, }, socialButtonsBlockButton: 'Ga verder met {{provider|titleize}}', socialButtonsBlockButtonManyInView: 'Ga verder met {{provider|titleize}}', @@ -849,6 +864,7 @@ export const nlNL: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -862,6 +878,10 @@ export const nlNL: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Je moet tot een organisatie behoren', + subtitle: 'Neem contact op met de beheerder van je organisatie voor een uitnodiging.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -885,6 +905,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.', @@ -902,6 +924,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.', @@ -940,6 +964,10 @@ 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: + 'Je hebt het handtekeningverzoek afgewezen. Probeer het opnieuw om verder te gaan.', + web3_solana_signature_generation_failed: + 'Er is een fout opgetreden bij het genereren van de handtekening. Probeer het opnieuw om verder te gaan.', zxcvbn: { couldBeStronger: 'Je wachtwoord werkt, maar kan sterker zijn. Probeer meer tekens toe te voegen.', goodPassword: 'Je wachtwoord voldoet aan alle vereisten.', @@ -1307,6 +1335,10 @@ export const nlNL: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 portefeuilles', title: 'Web3 portefeuilles', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecteer een Solana-wallet om aan je account te koppelen.', + title: 'Solana-wallet toevoegen', + }, }, }, usernamePage: { @@ -1342,4 +1374,10 @@ export const nlNL: LocalizationResource = { title: 'Succes!', }, }, + web3SolanaWalletButtons: { + connect: 'Verbinden met {{walletName}}', + continue: 'Doorgaan met {{walletName}}', + noneAvailable: + 'Geen Solana Web3-wallets gedetecteerd. Installeer een Web3-ondersteunde {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/pl-PL.ts b/packages/localizations/src/pl-PL.ts index 5037147e910..d037d7f4bb4 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', @@ -395,6 +395,12 @@ export const plPL: LocalizationResource = { headerTitle__members: 'Członkowie', headerTitle__requests: 'Prośby', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Role są tymczasowo zablokowane', + subtitle: 'Aktualizujemy dostępne role. Po zakończeniu będziesz mógł ponownie aktualizować role.', + }, + }, }, navbar: { apiKeys: undefined, @@ -495,12 +501,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', @@ -751,6 +757,10 @@ export const plPL: LocalizationResource = { subtitle: 'Aby kontynuować, wprowadź kod weryfikacyjny wygenerowany przez aplikację uwierzytelniającą', title: 'Weryfikacja dwustopniowa', }, + web3Solana: { + subtitle: 'Wybierz poniżej portfel, aby się zalogować', + title: 'Zaloguj się przez Solana', + }, }, signInEnterPasswordTitle: 'Wprowadź swoje hasło', signUp: { @@ -845,41 +855,50 @@ export const plPL: LocalizationResource = { title: 'Utwórz swoje konto', titleCombined: 'Utwórz swoje konto', }, + web3Solana: { + subtitle: 'Wybierz poniżej portfel, aby się zarejestrować', + title: 'Zarejestruj się przez Solana', + }, }, socialButtonsBlockButton: 'Kontynuuj z {{provider|titleize}}', 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ą', + subtitle__createOrganizationDisabled: undefined, + 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ę', + }, + organizationCreationDisabled: { + title: 'Musisz należeć do organizacji', + subtitle: 'Skontaktuj się z administratorem swojej organizacji, aby uzyskać zaproszenie.', }, 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}}', }, subtitle: undefined, - title: undefined, + title: 'Zresetuj hasło', }, unstable__errors: { already_a_member_in_organization: '{{email}} jest już członkiem organizacji.', @@ -890,6 +909,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.', @@ -907,6 +928,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: @@ -949,6 +972,9 @@ 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: 'Odrzuciłeś prośbę o podpis. Spróbuj ponownie, aby kontynuować.', + web3_solana_signature_generation_failed: + 'Wystąpił błąd podczas generowania podpisu. Spróbuj ponownie, aby kontynuować.', 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.', @@ -1319,6 +1345,10 @@ export const plPL: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Portfele Web3', title: 'Portfele Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Wybierz portfel Solana, aby połączyć go z kontem.', + title: 'Dodaj portfel Solana', + }, }, }, usernamePage: { @@ -1354,4 +1384,10 @@ export const plPL: LocalizationResource = { title: 'Dziękujemy za dołączenie do listy oczekujących!', }, }, + web3SolanaWalletButtons: { + connect: 'Połącz z {{walletName}}', + continue: 'Kontynuuj z {{walletName}}', + noneAvailable: + 'Nie wykryto portfeli Solana Web3. Zainstaluj {{ solanaWalletsLink || link("wallet extension") }} obsługujący Web3.', + }, } as const; diff --git a/packages/localizations/src/pt-BR.ts b/packages/localizations/src/pt-BR.ts index 7a4d328d672..16fd4e32653 100644 --- a/packages/localizations/src/pt-BR.ts +++ b/packages/localizations/src/pt-BR.ts @@ -403,6 +403,13 @@ export const ptBR: LocalizationResource = { headerTitle__members: 'Membros', headerTitle__requests: 'Solicitações', }, + alerts: { + roleSetMigrationInProgress: { + title: 'As funções estão temporariamente bloqueadas', + subtitle: + 'Estamos atualizando as funções disponíveis. Assim que isso for concluído, você poderá atualizar as funções novamente.', + }, + }, }, navbar: { apiKeys: 'Chaves de API', @@ -758,6 +765,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: 'Selecione uma carteira abaixo para entrar', + title: 'Entrar com Solana', + }, }, signInEnterPasswordTitle: 'Insira sua senha', signUp: { @@ -852,6 +863,10 @@ export const ptBR: LocalizationResource = { title: 'Criar sua conta', titleCombined: 'Criar sua conta', }, + web3Solana: { + subtitle: 'Selecione uma carteira abaixo para se cadastrar', + title: 'Cadastrar-se com Solana', + }, }, socialButtonsBlockButton: 'Continuar com {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -861,6 +876,7 @@ export const ptBR: LocalizationResource = { action__invitationAccept: 'Participar', action__suggestionsAccept: 'Solicitar participação', subtitle: 'Junte-se a uma organização existente ou crie uma nova', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: 'Aprovação pendente', title: 'Escolha uma organização', }, @@ -874,6 +890,10 @@ export const ptBR: LocalizationResource = { subtitle: 'Conte-nos um pouco sobre sua organização', title: 'Configure sua conta', }, + organizationCreationDisabled: { + title: 'Você deve pertencer a uma organização', + subtitle: 'Entre em contato com o administrador da sua organização para obter um convite.', + }, signOut: { actionLink: 'Sair', actionText: 'Conectado como {{identifier}}', @@ -898,6 +918,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.', @@ -915,6 +937,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.', @@ -957,6 +981,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: 'Você rejeitou a solicitação de assinatura. Tente novamente para continuar.', + web3_solana_signature_generation_failed: 'Ocorreu um erro ao gerar a assinatura. Tente novamente para continuar.', zxcvbn: { couldBeStronger: 'Sua senha funciona, mas poderia ser mais forte. Tente adicionar mais caracteres.', goodPassword: 'Sua senha atende a todos os requisitos necessários.', @@ -1329,6 +1355,10 @@ export const ptBR: LocalizationResource = { detailsAction__nonPrimary: 'Definir como principal', primaryButton: 'Carteiras Web3', title: 'Carteiras Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecione uma carteira Solana para conectar à sua conta.', + title: 'Adicionar uma carteira Solana', + }, }, }, usernamePage: { @@ -1364,4 +1394,10 @@ export const ptBR: LocalizationResource = { title: 'Obrigado por entrar na lista de espera!', }, }, + web3SolanaWalletButtons: { + connect: 'Conectar com {{walletName}}', + continue: 'Continuar com {{walletName}}', + noneAvailable: + 'Nenhuma carteira Solana Web3 foi detectada. Instale uma {{ solanaWalletsLink || link("wallet extension") }} compatível com Web3.', + }, } as const; diff --git a/packages/localizations/src/pt-PT.ts b/packages/localizations/src/pt-PT.ts index c298945fe45..3c0a9730ec9 100644 --- a/packages/localizations/src/pt-PT.ts +++ b/packages/localizations/src/pt-PT.ts @@ -394,6 +394,13 @@ export const ptPT: LocalizationResource = { headerTitle__members: 'Membros', headerTitle__requests: 'Pedidos', }, + alerts: { + roleSetMigrationInProgress: { + title: 'As funções estão temporariamente bloqueadas', + subtitle: + 'Estamos a atualizar as funções disponíveis. Assim que terminar, poderá atualizar as funções novamente.', + }, + }, }, navbar: { apiKeys: undefined, @@ -747,6 +754,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: 'Selecione uma carteira abaixo para iniciar sessão', + title: 'Iniciar sessão com Solana', + }, }, signInEnterPasswordTitle: 'Insira a sua palavra-passe', signUp: { @@ -838,6 +849,10 @@ export const ptPT: LocalizationResource = { title: 'Criar a sua conta', titleCombined: 'Criar a sua conta', }, + web3Solana: { + subtitle: 'Selecione uma carteira abaixo para se registar', + title: 'Registar-se com Solana', + }, }, socialButtonsBlockButton: 'Continuar com {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -847,6 +862,7 @@ export const ptPT: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -860,6 +876,10 @@ export const ptPT: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Deve pertencer a uma organização', + subtitle: 'Contacte o administrador da sua organização para obter um convite.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -884,6 +904,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.', @@ -901,6 +923,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: @@ -941,6 +965,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: 'Rejeitou o pedido de assinatura. Tente novamente para continuar.', + web3_solana_signature_generation_failed: 'Ocorreu um erro ao gerar a assinatura. Tente novamente para continuar.', 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.', @@ -1309,6 +1335,10 @@ export const ptPT: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Carteiras Web3', title: 'Carteiras Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selecione uma carteira Solana para ligar à sua conta.', + title: 'Adicionar uma carteira Solana', + }, }, }, usernamePage: { @@ -1344,4 +1374,10 @@ export const ptPT: LocalizationResource = { title: 'Inscrição bem-sucedida na lista de espera', }, }, + web3SolanaWalletButtons: { + connect: 'Conectar com {{walletName}}', + continue: 'Continuar com {{walletName}}', + noneAvailable: + 'Não foram detetadas carteiras Solana Web3. Instale uma {{ solanaWalletsLink || link("wallet extension") }} com suporte Web3.', + }, } as const; diff --git a/packages/localizations/src/ro-RO.ts b/packages/localizations/src/ro-RO.ts index b489430bf35..22d78472e27 100644 --- a/packages/localizations/src/ro-RO.ts +++ b/packages/localizations/src/ro-RO.ts @@ -403,6 +403,13 @@ export const roRO: LocalizationResource = { headerTitle__members: 'Membri', headerTitle__requests: 'Ceri de acces', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Rolurile sunt temporar blocate', + subtitle: + 'Actualizăm rolurile disponibile. Odată ce acest lucru este finalizat, veți putea actualiza din nou rolurile.', + }, + }, }, navbar: { apiKeys: 'Chei API', @@ -760,6 +767,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: 'Selectați un portofel mai jos pentru a vă conecta', + title: 'Conectare cu Solana', + }, }, signInEnterPasswordTitle: 'Introdu parola', signUp: { @@ -853,6 +864,10 @@ export const roRO: LocalizationResource = { title: 'Creează-ți contul', titleCombined: 'Creează-ți contul', }, + web3Solana: { + subtitle: 'Selectați un portofel mai jos pentru a vă înregistra', + title: 'Înregistrare cu Solana', + }, }, socialButtonsBlockButton: 'Continuă cu {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -862,6 +877,7 @@ export const roRO: LocalizationResource = { action__invitationAccept: 'Alătură-te', action__suggestionsAccept: 'Solicită alăturarea', subtitle: 'Alătură-te unei organizații existente sau creează una nouă', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: 'În așteptare', title: 'Alege o organizație', }, @@ -875,6 +891,10 @@ export const roRO: LocalizationResource = { subtitle: 'Introdu detaliile organizației pentru a continua', title: 'Configurează-ți organizația', }, + organizationCreationDisabled: { + title: 'Trebuie să aparții unei organizații', + subtitle: 'Contactează administratorul organizației tale pentru o invitație.', + }, signOut: { actionLink: 'Deconectează-te', actionText: 'Autentificat ca {{identifier}}', @@ -899,6 +919,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, @@ -916,6 +938,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: @@ -958,6 +982,9 @@ 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: 'Ați respins solicitarea de semnătură. Încercați din nou pentru a continua.', + web3_solana_signature_generation_failed: + 'A apărut o eroare la generarea semnăturii. Încercați din nou pentru a continua.', 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.', @@ -1326,6 +1353,10 @@ export const roRO: LocalizationResource = { detailsAction__nonPrimary: 'Setează ca principal', primaryButton: 'Conectează portofel', title: 'Portofele Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Selectați un portofel Solana pentru a-l conecta la contul dvs.', + title: 'Adăugați un portofel Solana', + }, }, }, usernamePage: { @@ -1361,4 +1392,10 @@ export const roRO: LocalizationResource = { title: 'Mulțumim pentru înscriere!', }, }, + web3SolanaWalletButtons: { + connect: 'Conectează cu {{walletName}}', + continue: 'Continuă cu {{walletName}}', + noneAvailable: + 'Nu s-au detectat portofele Solana Web3. Instalați un {{ solanaWalletsLink || link("wallet extension") }} compatibil cu Web3.', + }, } as const; diff --git a/packages/localizations/src/ru-RU.ts b/packages/localizations/src/ru-RU.ts index cf3f2ea89e6..293a20d6783 100644 --- a/packages/localizations/src/ru-RU.ts +++ b/packages/localizations/src/ru-RU.ts @@ -399,6 +399,12 @@ export const ruRU: LocalizationResource = { headerTitle__members: 'Участники', headerTitle__requests: 'Заявки', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Роли временно заблокированы', + subtitle: 'Мы обновляем доступные роли. Как только это будет сделано, вы сможете снова обновлять роли.', + }, + }, }, navbar: { apiKeys: undefined, @@ -758,6 +764,10 @@ export const ruRU: LocalizationResource = { subtitle: 'Чтобы продолжить, пожалуйста, введите код проверки, сгенерированный вашим приложением аутентификации.', title: 'Двухфакторная верификация', }, + web3Solana: { + subtitle: 'Выберите кошелёк ниже, чтобы войти', + title: 'Войти через Solana', + }, }, signInEnterPasswordTitle: 'Введите Ваш пароль', signUp: { @@ -852,6 +862,10 @@ export const ruRU: LocalizationResource = { title: 'Создайте Вашу учетную запись', titleCombined: 'Создайте Вашу учетную запись', }, + web3Solana: { + subtitle: 'Выберите кошелёк ниже, чтобы зарегистрироваться', + title: 'Зарегистрироваться через Solana', + }, }, socialButtonsBlockButton: 'Продолжить с помощью {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -861,6 +875,7 @@ export const ruRU: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -874,6 +889,10 @@ export const ruRU: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Вы должны принадлежать к организации', + subtitle: 'Свяжитесь с администратором вашей организации для получения приглашения.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -899,6 +918,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: 'Это имя пользователя уже занято. Пожалуйста, попробуйте другое.', @@ -916,6 +937,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: 'Этот пароль был взломан и не может быть использован, попробуйте другой пароль.', @@ -957,6 +980,10 @@ export const ruRU: LocalizationResource = { phone_number_exists: 'Этот номер телефона уже занят. Пожалуйста, попробуйте другой.', session_exists: 'Вы уже вошли в систему.', web3_missing_identifier: undefined, + web3_signature_request_rejected: + 'Вы отклонили запрос на подпись. Пожалуйста, попробуйте ещё раз, чтобы продолжить.', + web3_solana_signature_generation_failed: + 'Произошла ошибка при создании подписи. Пожалуйста, попробуйте ещё раз, чтобы продолжить.', zxcvbn: { couldBeStronger: 'Ваш пароль подходит, но мог бы быть надежнее. Попробуйте добавить больше символов.', goodPassword: 'Хорошая работа. Это отличный пароль.', @@ -1331,6 +1358,10 @@ export const ruRU: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 кошельки', title: 'Web3 кошельки', + web3SelectSolanaWalletScreen: { + subtitle: 'Выберите кошелёк Solana для подключения к вашему аккаунту.', + title: 'Добавить кошелёк Solana', + }, }, }, usernamePage: { @@ -1366,4 +1397,10 @@ export const ruRU: LocalizationResource = { title: 'Спасибо за присоединение к списку ожидания!', }, }, + web3SolanaWalletButtons: { + connect: 'Подключиться через {{walletName}}', + continue: 'Продолжить через {{walletName}}', + noneAvailable: + 'Кошельки Solana Web3 не обнаружены. Установите {{ solanaWalletsLink || link("wallet extension") }} с поддержкой Web3.', + }, } as const; diff --git a/packages/localizations/src/sk-SK.ts b/packages/localizations/src/sk-SK.ts index 7b946da46ce..1dd5d44d1b5 100644 --- a/packages/localizations/src/sk-SK.ts +++ b/packages/localizations/src/sk-SK.ts @@ -395,6 +395,12 @@ export const skSK: LocalizationResource = { headerTitle__members: 'Členovia', headerTitle__requests: 'Požiadavky', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Úlohy sú dočasne uzamknuté', + subtitle: 'Aktualizujeme dostupné úlohy. Po dokončení budete môcť úlohy opäť aktualizovať.', + }, + }, }, navbar: { apiKeys: undefined, @@ -751,6 +757,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: 'Vyberte nižšie peňaženku na prihlásenie', + title: 'Prihlásiť sa cez Solana', + }, }, signInEnterPasswordTitle: 'Zadajte svoje heslo', signUp: { @@ -845,6 +855,10 @@ export const skSK: LocalizationResource = { title: 'Vytvorte si účet', titleCombined: 'Vytvorte si účet', }, + web3Solana: { + subtitle: 'Vyberte nižšie peňaženku na registráciu', + title: 'Zaregistrovať sa cez Solana', + }, }, socialButtonsBlockButton: 'Pokračovať s {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -854,6 +868,7 @@ export const skSK: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -867,6 +882,10 @@ export const skSK: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Musíte patriť do organizácie', + subtitle: 'Kontaktujte administrátora vašej organizácie pre pozvánku.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -891,6 +910,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é.', @@ -908,6 +929,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.', @@ -948,6 +971,9 @@ 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: 'Odmietli ste žiadosť o podpis. Skúste to znova, aby ste mohli pokračovať.', + web3_solana_signature_generation_failed: + 'Pri generovaní podpisu sa vyskytla chyba. Skúste to znova, aby ste mohli pokračovať.', 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.', @@ -1316,6 +1342,10 @@ export const skSK: LocalizationResource = { detailsAction__nonPrimary: 'Nastaiť ako hlavnú', primaryButton: 'Web3 peňaženky', title: 'Web3 peňaženky', + web3SelectSolanaWalletScreen: { + subtitle: 'Vyberte Solana peňaženku na pripojenie k vášmu účtu.', + title: 'Pridať Solana peňaženku', + }, }, }, usernamePage: { @@ -1351,4 +1381,10 @@ export const skSK: LocalizationResource = { title: 'Ďakujeme, že ste sa pridali na waitlist!', }, }, + web3SolanaWalletButtons: { + connect: 'Pripojiť pomocou {{walletName}}', + continue: 'Pokračovať pomocou {{walletName}}', + noneAvailable: + 'Neboli zistené žiadne Solana Web3 peňaženky. Nainštalujte si {{ solanaWalletsLink || link("wallet extension") }} s podporou Web3.', + }, } as const; diff --git a/packages/localizations/src/sr-RS.ts b/packages/localizations/src/sr-RS.ts index efb367e7ab7..f81de48bb74 100644 --- a/packages/localizations/src/sr-RS.ts +++ b/packages/localizations/src/sr-RS.ts @@ -395,6 +395,12 @@ export const srRS: LocalizationResource = { headerTitle__members: 'Članovi', headerTitle__requests: 'Zahtevi', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Uloge su privremeno zaključane', + subtitle: 'Ažuriramo dostupne uloge. Kada to bude završeno, moći ćete ponovo da ažurirate uloge.', + }, + }, }, navbar: { apiKeys: undefined, @@ -748,6 +754,10 @@ export const srRS: LocalizationResource = { subtitle: 'Da nastaviš, molimo unesi verifikacioni kod generisan tvojom aplikacijom za autentifikaciju', title: 'Dvostepena verifikacija', }, + web3Solana: { + subtitle: 'Izaberi novčanik ispod da se prijaviš', + title: 'Prijavi se sa Solana', + }, }, signInEnterPasswordTitle: 'Unesi svoju lozinku', signUp: { @@ -838,6 +848,10 @@ export const srRS: LocalizationResource = { title: 'Kreiraj svoj nalog', titleCombined: 'Kreiraj svoj nalog', }, + web3Solana: { + subtitle: 'Izaberi novčanik ispod da se registruješ', + title: 'Registruj se sa Solana', + }, }, socialButtonsBlockButton: 'Nastavi sa {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -847,6 +861,7 @@ export const srRS: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -860,6 +875,10 @@ export const srRS: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Morate pripadati organizaciji', + subtitle: 'Kontaktirajte administratora svoje organizacije za pozivnicu.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -883,6 +902,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.', @@ -900,6 +921,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: @@ -940,6 +963,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: 'Odbio/la si zahtev za potpis. Pokušaj ponovo da nastaviš.', + web3_solana_signature_generation_failed: 'Došlo je do greške pri generisanju potpisa. Pokušaj ponovo da nastaviš.', 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.', @@ -1308,6 +1333,10 @@ export const srRS: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 novčanici', title: 'Web3 novčanici', + web3SelectSolanaWalletScreen: { + subtitle: 'Izaberi Solana novčanik da ga povežeš sa svojim nalogom.', + title: 'Dodaj Solana novčanik', + }, }, }, usernamePage: { @@ -1331,16 +1360,22 @@ export const srRS: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Пријави се', + actionText: 'Већ имаш приступ?', + formButton: 'Придружи се листи чекања', + subtitle: 'Унеси своју е-пошту и обавестићемо те када твоје место буде спремно', + title: 'Придружи се листи чекања', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Ускоро ћеш бити преусмерен...', + subtitle: 'Јавићемо ти се када твоје место буде спремно', + title: 'Хвала што си се придружио/ла листи чекања!', }, }, + web3SolanaWalletButtons: { + connect: 'Poveži se sa {{walletName}}', + continue: 'Nastavi sa {{walletName}}', + noneAvailable: + 'Nisu detektovani Solana Web3 novčanici. Instaliraj {{ solanaWalletsLink || link("wallet extension") }} koji podržava Web3.', + }, } as const; diff --git a/packages/localizations/src/sv-SE.ts b/packages/localizations/src/sv-SE.ts index 9f98e702798..7cc04f52249 100644 --- a/packages/localizations/src/sv-SE.ts +++ b/packages/localizations/src/sv-SE.ts @@ -395,6 +395,12 @@ export const svSE: LocalizationResource = { headerTitle__members: 'Medlemmar', headerTitle__requests: 'Förfrågningar', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roller är tillfälligt låsta', + subtitle: 'Vi uppdaterar tillgängliga roller. När det är klart kommer du att kunna uppdatera roller igen.', + }, + }, }, navbar: { apiKeys: undefined, @@ -751,6 +757,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: 'Välj en plånbok nedan för att logga in', + title: 'Logga in med Solana', + }, }, signInEnterPasswordTitle: 'Ange ditt lösenord', signUp: { @@ -843,6 +853,10 @@ export const svSE: LocalizationResource = { title: 'Skapa ditt konto', titleCombined: 'Skapa ditt konto', }, + web3Solana: { + subtitle: 'Välj en plånbok nedan för att registrera dig', + title: 'Registrera dig med Solana', + }, }, socialButtonsBlockButton: 'Fortsätt med {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -852,6 +866,7 @@ export const svSE: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -865,6 +880,10 @@ export const svSE: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Du måste tillhöra en organisation', + subtitle: 'Kontakta din organisationsadministratör för en inbjudan.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -888,6 +907,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.', @@ -905,6 +926,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.', @@ -943,6 +966,9 @@ 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: 'Du avvisade signaturbegäran. Försök igen för att fortsätta.', + web3_solana_signature_generation_failed: + 'Ett fel uppstod när signaturen skulle genereras. Försök igen för att fortsätta.', 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.', @@ -1311,6 +1337,10 @@ export const svSE: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 plånböcker', title: 'Web3 plånböcker', + web3SelectSolanaWalletScreen: { + subtitle: 'Välj en Solana-plånbok för att ansluta den till ditt konto.', + title: 'Lägg till en Solana-plånbok', + }, }, }, usernamePage: { @@ -1334,16 +1364,22 @@ export const svSE: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Logga in', + actionText: 'Har du redan åtkomst?', + formButton: 'Gå med i väntelistan', + subtitle: 'Ange din e-postadress så meddelar vi dig när din plats är redo', + title: 'Gå med i väntelistan', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Du kommer att omdirigeras snart...', + subtitle: 'Vi hör av oss när din plats är redo', + title: 'Tack för att du gick med i väntelistan!', }, }, + web3SolanaWalletButtons: { + connect: 'Anslut med {{walletName}}', + continue: 'Fortsätt med {{walletName}}', + noneAvailable: + 'Inga Solana Web3-plånböcker upptäcktes. Installera en Web3-stödd {{ solanaWalletsLink || link("wallet extension") }}.', + }, } as const; diff --git a/packages/localizations/src/ta-IN.ts b/packages/localizations/src/ta-IN.ts index aee6114fa90..58a2bf94342 100644 --- a/packages/localizations/src/ta-IN.ts +++ b/packages/localizations/src/ta-IN.ts @@ -398,6 +398,13 @@ export const taIN: LocalizationResource = { headerTitle__members: 'உறுப்பினர்கள்', headerTitle__requests: 'கோரிக்கைகள்', }, + alerts: { + roleSetMigrationInProgress: { + title: 'பாத்திரங்கள் தற்காலிகமாக பூட்டப்பட்டுள்ளன', + subtitle: + 'கிடைக்கக்கூடிய பாத்திரங்களை நாங்கள் புதுப்பிக்கிறோம். இது முடிந்ததும், நீங்கள் மீண்டும் பாத்திரங்களை புதுப்பிக்க முடியும்.', + }, + }, }, navbar: { apiKeys: undefined, @@ -754,6 +761,10 @@ export const taIN: LocalizationResource = { subtitle: 'தொடர, உங்கள் அங்கீகாரி பயன்பாட்டால் உருவாக்கப்பட்ட சரிபார்ப்புக் குறியீட்டை உள்ளிடவும்', title: 'இரண்டு-படி சரிபார்ப்பு', }, + web3Solana: { + subtitle: 'உள்நுழைய கீழே ஒரு வாலெட்டைத் தேர்ந்தெடுக்கவும்', + title: 'Solana மூலம் உள்நுழையவும்', + }, }, signInEnterPasswordTitle: 'உங்கள் கடவுச்சொல்லை உள்ளிடவும்', signUp: { @@ -847,6 +858,10 @@ export const taIN: LocalizationResource = { title: 'உங்கள் கணக்கை உருவாக்கவும்', titleCombined: 'உங்கள் கணக்கை உருவாக்கவும்', }, + web3Solana: { + subtitle: 'பதிவு செய்ய கீழே ஒரு வாலெட்டைத் தேர்ந்தெடுக்கவும்', + title: 'Solana மூலம் பதிவு செய்யவும்', + }, }, socialButtonsBlockButton: '{{provider|titleize}} மூலம் தொடரவும்', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -856,6 +871,7 @@ export const taIN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -869,6 +885,10 @@ export const taIN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'நீங்கள் ஒரு அமைப்பில் உறுப்பினராக இருக்க வேண்டும்', + subtitle: 'அழைப்புக்கு உங்கள் அமைப்பின் நிர்வாகியைத் தொடர்பு கொள்ளவும்.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -892,6 +912,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: 'இந்த பயனர்பெயர் எடுக்கப்பட்டுள்ளது. வேறொன்றை முயற்சிக்கவும்.', @@ -909,6 +931,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: 'உங்கள் கடவுச்சொல் போதுமான வலிமை இல்லை.', @@ -955,6 +979,9 @@ export const taIN: LocalizationResource = { phone_number_exists: 'இந்த தொலைபேசி எண் எடுக்கப்பட்டுள்ளது. வேறொன்றை முயற்சிக்கவும்.', session_exists: undefined, web3_missing_identifier: 'Web3 வாலட் நீட்டிப்பு காணப்படவில்லை. தொடர ஒன்றை நிறுவவும்.', + web3_signature_request_rejected: 'நீங்கள் கையொப்ப கோரிக்கையை நிராகரித்துவிட்டீர்கள். தொடர மீண்டும் முயற்சிக்கவும்.', + web3_solana_signature_generation_failed: + 'கையொப்பத்தை உருவாக்கும் போது பிழை ஏற்பட்டது. தொடர மீண்டும் முயற்சிக்கவும்.', zxcvbn: { couldBeStronger: 'உங்கள் கடவுச்சொல் செயல்படுகிறது, ஆனால் மேலும் வலுவாக இருக்கலாம். மேலும் எழுத்துகளைச் சேர்க்க முயற்சிக்கவும்.', @@ -1326,6 +1353,10 @@ export const taIN: LocalizationResource = { detailsAction__nonPrimary: 'முதன்மையாக அமைக்கவும்', primaryButton: 'வாலட்டை இணைக்கவும்', title: 'Web3 வாலட்டுகள்', + web3SelectSolanaWalletScreen: { + subtitle: 'உங்கள் கணக்குடன் இணைக்க Solana வாலெட்டைத் தேர்ந்தெடுக்கவும்.', + title: 'Solana வாலெட்டை சேர்க்கவும்', + }, }, }, usernamePage: { @@ -1361,4 +1392,10 @@ export const taIN: LocalizationResource = { title: 'காத்திருப்பில் சேர்ந்ததற்கு நன்றி!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} மூலம் இணைக்கவும்', + continue: '{{walletName}} மூலம் தொடரவும்', + noneAvailable: + 'Solana Web3 வாலெட்டுகள் எதுவும் கண்டறியப்படவில்லை. Web3 ஆதரிக்கும் {{ solanaWalletsLink || link("wallet extension") }} ஐ நிறுவவும்.', + }, } as const; diff --git a/packages/localizations/src/te-IN.ts b/packages/localizations/src/te-IN.ts index 4b90e7270ec..311d8825f61 100644 --- a/packages/localizations/src/te-IN.ts +++ b/packages/localizations/src/te-IN.ts @@ -397,6 +397,13 @@ export const teIN: LocalizationResource = { headerTitle__members: 'సభ్యులు', headerTitle__requests: 'అభ్యర్థనలు', }, + alerts: { + roleSetMigrationInProgress: { + title: 'పాత్రలు తాత్కాలికంగా లాక్ చేయబడ్డాయి', + subtitle: + 'మేము అందుబాటులో ఉన్న పాత్రలను అప్‌డేట్ చేస్తున్నాము. అది పూర్తయిన తర్వాత, మీరు మళ్ళీ పాత్రలను అప్‌డేట్ చేయగలరు.', + }, + }, }, navbar: { apiKeys: undefined, @@ -754,6 +761,10 @@ export const teIN: LocalizationResource = { subtitle: 'కొనసాగించడానికి, దయచేసి మీ ప్రమాణీకరణ యాప్ ద్వారా రూపొందించిన ధృవీకరణ కోడ్‌ను నమోదు చేయండి', title: 'రెండు-దశల ధృవీకరణ', }, + web3Solana: { + subtitle: 'సైన్ ఇన్ చేయడానికి క్రింద వాలెట్‌ను ఎంచుకోండి', + title: 'Solana తో సైన్ ఇన్ చేయండి', + }, }, signInEnterPasswordTitle: 'మీ పాస్‌వర్డ్‌ను నమోదు చేయండి', signUp: { @@ -847,6 +858,10 @@ export const teIN: LocalizationResource = { title: 'మీ ఖాతాను సృష్టించండి', titleCombined: 'మీ ఖాతాను సృష్టించండి', }, + web3Solana: { + subtitle: 'సైన్ అప్ చేయడానికి క్రింద వాలెట్‌ను ఎంచుకోండి', + title: 'Solana తో సైన్ అప్ చేయండి', + }, }, socialButtonsBlockButton: '{{provider|titleize}}తో కొనసాగించండి', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -856,6 +871,7 @@ export const teIN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -869,6 +885,10 @@ export const teIN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'మీరు ఒక సంస్థకు చెంది ఉండాలి', + subtitle: 'ఆహ్వానం కోసం మీ సంస్థ నిర్వాహకుడిని సంప్రదించండి.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -892,6 +912,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: 'ఈ వినియోగదారు పేరు తీసుకోబడింది. దయచేసి మరొకదాన్ని ప్రయత్నించండి.', @@ -909,6 +931,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: @@ -951,6 +975,9 @@ export const teIN: LocalizationResource = { phone_number_exists: 'ఈ ఫోన్ నంబర్ తీసుకోబడింది. దయచేసి మరొకదాన్ని ప్రయత్నించండి.', session_exists: undefined, web3_missing_identifier: 'Web3 వాలెట్ పొడిగింపు కనుగొనబడలేదు. కొనసాగించడానికి దయచేసి ఒకదాన్ని ఇన్‌స్టాల్ చేయండి.', + web3_signature_request_rejected: 'మీరు సంతకం అభ్యర్థనను తిరస్కరించారు. కొనసాగేందుకు దయచేసి మళ్లీ ప్రయత్నించండి.', + web3_solana_signature_generation_failed: + 'సంతకం తయారు చేసే సమయంలో లోపం జరిగింది. కొనసాగేందుకు దయచేసి మళ్లీ ప్రయత్నించండి.', zxcvbn: { couldBeStronger: 'మీ పాస్‌వర్డ్ పనిచేస్తుంది, కానీ మరింత బలంగా ఉండవచ్చు. మరిన్ని అక్షరాలను జోడించడానికి ప్రయత్నించండి.', @@ -1322,6 +1349,10 @@ export const teIN: LocalizationResource = { detailsAction__nonPrimary: 'ప్రాథమికంగా సెట్ చేయండి', primaryButton: 'వాలెట్‌ను కనెక్ట్ చేయండి', title: 'Web3 వాలెట్‌లు', + web3SelectSolanaWalletScreen: { + subtitle: 'మీ ఖాతాతో కనెక్ట్ చేయడానికి Solana వాలెట్‌ను ఎంచుకోండి.', + title: 'Solana వాలెట్‌ను జోడించండి', + }, }, }, usernamePage: { @@ -1357,4 +1388,10 @@ export const teIN: LocalizationResource = { title: 'వెయిట్‌లిస్ట్‌లో చేరినందుకు ధన్యవాదాలు!', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} తో కనెక్ట్ అవ్వండి', + continue: '{{walletName}} తో కొనసాగించండి', + noneAvailable: + 'Solana Web3 వాలెట్లు ఏవీ గుర్తించబడలేదు. Web3 కి మద్దతు ఉన్న {{ solanaWalletsLink || link("wallet extension") }} ను ఇన్‌స్టాల్ చేయండి.', + }, } as const; diff --git a/packages/localizations/src/th-TH.ts b/packages/localizations/src/th-TH.ts index 5cdf69204b3..a67cb5afa2b 100644 --- a/packages/localizations/src/th-TH.ts +++ b/packages/localizations/src/th-TH.ts @@ -399,6 +399,12 @@ export const thTH: LocalizationResource = { headerTitle__members: 'สมาชิก', headerTitle__requests: 'คำขอ', }, + alerts: { + roleSetMigrationInProgress: { + title: 'บทบาทถูกล็อคชั่วคราว', + subtitle: 'เรากำลังอัปเดตบทบาทที่มีอยู่ เมื่อเสร็จแล้ว คุณจะสามารถอัปเดตบทบาทได้อีกครั้ง', + }, + }, }, navbar: { apiKeys: 'คีย์ API', @@ -750,6 +756,10 @@ export const thTH: LocalizationResource = { subtitle: 'เพื่อดำเนินการต่อ โปรดใส่รหัสยืนยันที่สร้างโดยแอป Authenticator ของคุณ', title: 'การยืนยันตัวตนสองขั้นตอน', }, + web3Solana: { + subtitle: 'เลือกกระเป๋าเงินด้านล่างเพื่อเข้าสู่ระบบ', + title: 'เข้าสู่ระบบด้วย Solana', + }, }, signInEnterPasswordTitle: 'ใส่รหัสผ่านของคุณ', signUp: { @@ -841,6 +851,10 @@ export const thTH: LocalizationResource = { title: 'สร้างบัญชีของคุณ', titleCombined: 'สร้างบัญชีของคุณ', }, + web3Solana: { + subtitle: 'เลือกกระเป๋าเงินด้านล่างเพื่อสมัครใช้งาน', + title: 'สมัครใช้งานด้วย Solana', + }, }, socialButtonsBlockButton: 'ดำเนินการต่อด้วย {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -850,6 +864,7 @@ export const thTH: LocalizationResource = { action__invitationAccept: 'เข้าร่วม', action__suggestionsAccept: 'ขอเข้าร่วม', subtitle: 'เข้าร่วมองค์กรที่มีอยู่หรือสร้างใหม่', + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: 'รออนุมัติ', title: 'เลือกองค์กร', }, @@ -863,6 +878,10 @@ export const thTH: LocalizationResource = { subtitle: 'ใส่รายละเอียดองค์กรของคุณเพื่อดำเนินการต่อ', title: 'ตั้งค่าองค์กรของคุณ', }, + organizationCreationDisabled: { + title: 'คุณต้องเป็นสมาชิกขององค์กร', + subtitle: 'ติดต่อผู้ดูแลระบบขององค์กรของคุณเพื่อขอคำเชิญ', + }, signOut: { actionLink: 'ออกจากระบบ', actionText: 'เข้าสู่ระบบในนาม {{identifier}}', @@ -885,6 +904,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, @@ -902,6 +922,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: @@ -941,6 +962,8 @@ export const thTH: LocalizationResource = { phone_number_exists: undefined, session_exists: undefined, web3_missing_identifier: 'ไม่พบส่วนขยาย Web3 Wallet โปรดติดตั้งเพื่อดำเนินการต่อ', + web3_signature_request_rejected: 'คุณได้ปฏิเสธคำขอการลงลายเซ็น โปรดลองอีกครั้งเพื่อดำเนินการต่อ', + web3_solana_signature_generation_failed: 'เกิดข้อผิดพลาดขณะสร้างลายเซ็น โปรดลองอีกครั้งเพื่อดำเนินการต่อ', zxcvbn: { couldBeStronger: 'รหัสผ่านของคุณใช้ได้ แต่อาจแข็งแกร่งกว่านี้ ลองเพิ่มตัวอักษรเพิ่มเติม', goodPassword: 'รหัสผ่านของคุณตรงตามข้อกำหนดที่จำเป็นทั้งหมด', @@ -1304,6 +1327,10 @@ export const thTH: LocalizationResource = { detailsAction__nonPrimary: 'ตั้งเป็นหลัก', primaryButton: 'เชื่อมต่อวอลเล็ต', title: 'วอลเล็ต Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'เลือกกระเป๋าเงิน Solana เพื่อเชื่อมต่อกับบัญชีของคุณ', + title: 'เพิ่มกระเป๋าเงิน Solana', + }, }, }, usernamePage: { @@ -1339,4 +1366,10 @@ export const thTH: LocalizationResource = { title: 'ขอบคุณที่เข้าร่วม Waitlist!', }, }, + web3SolanaWalletButtons: { + connect: 'เชื่อมต่อด้วย {{walletName}}', + continue: 'ดำเนินการต่อด้วย {{walletName}}', + noneAvailable: + 'ไม่พบกระเป๋าเงิน Solana Web3 โปรดติดตั้ง {{ solanaWalletsLink || link("wallet extension") }} ที่รองรับ Web3', + }, } as const; diff --git a/packages/localizations/src/tr-TR.ts b/packages/localizations/src/tr-TR.ts index 333b2e3fadf..573dee4d251 100644 --- a/packages/localizations/src/tr-TR.ts +++ b/packages/localizations/src/tr-TR.ts @@ -395,6 +395,12 @@ export const trTR: LocalizationResource = { headerTitle__members: 'Üyeler', headerTitle__requests: 'İstekler', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Roller geçici olarak kilitlendi', + subtitle: 'Mevcut rolleri güncelliyoruz. Bu tamamlandığında rolleri tekrar güncelleyebileceksiniz.', + }, + }, }, navbar: { apiKeys: undefined, @@ -750,6 +756,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: 'Giriş yapmak için aşağıdan bir cüzdan seçin', + title: 'Solana ile giriş yap', + }, }, signInEnterPasswordTitle: 'Şifrenizi girin', signUp: { @@ -841,6 +851,10 @@ export const trTR: LocalizationResource = { title: 'Hesap oluştur', titleCombined: 'Hesap oluştur', }, + web3Solana: { + subtitle: 'Kaydolmak için aşağıdan bir cüzdan seçin', + title: 'Solana ile kaydol', + }, }, socialButtonsBlockButton: '{{provider|titleize}} ile giriş yapın', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -850,6 +864,7 @@ export const trTR: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -863,6 +878,10 @@ export const trTR: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Bir organizasyona ait olmalısınız', + subtitle: 'Davet için organizasyon yöneticinizle iletişime geçin.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -887,6 +906,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.', @@ -904,6 +925,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.', @@ -944,6 +967,9 @@ 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: 'İmza isteğini reddettiniz. Devam etmek için lütfen tekrar deneyin.', + web3_solana_signature_generation_failed: + 'İmza oluşturulurken bir hata oluştu. Devam etmek için lütfen tekrar deneyin.', zxcvbn: { couldBeStronger: 'Şifreniz kriterleri karşılıyor; fakat birkaç karakter daha ekleyerek daha güçlü bir şifre oluşturabilirsiniz.', @@ -1313,6 +1339,10 @@ export const trTR: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 cüzdanları', title: 'Web3 cüzdanları', + web3SelectSolanaWalletScreen: { + subtitle: 'Hesabınıza bağlamak için bir Solana cüzdanı seçin.', + title: 'Bir Solana cüzdanı ekle', + }, }, }, usernamePage: { @@ -1348,4 +1378,10 @@ export const trTR: LocalizationResource = { title: 'Bekleme Listesine Katıldınız', }, }, + web3SolanaWalletButtons: { + connect: '{{walletName}} ile bağlan', + continue: '{{walletName}} ile devam et', + noneAvailable: + 'Solana Web3 cüzdanı tespit edilmedi. Lütfen Web3 destekli {{ solanaWalletsLink || link("wallet extension") }} kurun.', + }, } as const; diff --git a/packages/localizations/src/uk-UA.ts b/packages/localizations/src/uk-UA.ts index 2518da7ce4e..eb1192aa8f8 100644 --- a/packages/localizations/src/uk-UA.ts +++ b/packages/localizations/src/uk-UA.ts @@ -395,6 +395,12 @@ export const ukUA: LocalizationResource = { headerTitle__members: 'Members', headerTitle__requests: 'Requests', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Ролі тимчасово заблоковані', + subtitle: 'Ми оновлюємо доступні ролі. Коли це буде зроблено, ви зможете знову оновлювати ролі.', + }, + }, }, navbar: { apiKeys: undefined, @@ -747,6 +753,10 @@ export const ukUA: LocalizationResource = { subtitle: undefined, title: 'Двоетапна перевірка', }, + web3Solana: { + subtitle: 'Виберіть гаманець нижче, щоб увійти', + title: 'Увійти через Solana', + }, }, signInEnterPasswordTitle: 'Введіть Ваш пароль', signUp: { @@ -837,6 +847,10 @@ export const ukUA: LocalizationResource = { title: 'Створіть Ваш акаунт', titleCombined: 'Створіть Ваш акаунт', }, + web3Solana: { + subtitle: 'Виберіть гаманець нижче, щоб зареєструватися', + title: 'Зареєструватися через Solana', + }, }, socialButtonsBlockButton: 'Продовжити за допомогою {{provider|titleize}}', socialButtonsBlockButtonManyInView: undefined, @@ -846,6 +860,7 @@ export const ukUA: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -859,6 +874,10 @@ export const ukUA: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Ви повинні належати до організації', + subtitle: 'Зверніться до адміністратора вашої організації для отримання запрошення.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -883,6 +902,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, @@ -900,6 +921,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: 'Цей пароль було зламано і його не можна використовувати, спробуйте інший пароль.', @@ -938,6 +961,9 @@ export const ukUA: LocalizationResource = { phone_number_exists: 'Цей номер телефону вже використовується. Спробуйте інший.', session_exists: 'Ви вже увійшли в систему.', web3_missing_identifier: undefined, + web3_signature_request_rejected: 'Ви відхилили запит на підпис. Будь ласка, спробуйте ще раз, щоб продовжити.', + web3_solana_signature_generation_failed: + 'Під час створення підпису сталася помилка. Будь ласка, спробуйте ще раз, щоб продовжити.', zxcvbn: { couldBeStronger: 'Ваш пароль підходить, але міг би бути надійнішим. Спробуйте додати більше символів.', goodPassword: 'Хороша робота. Це відмінний пароль.', @@ -1307,6 +1333,10 @@ export const ukUA: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 гаманці', title: 'Web3 гаманці', + web3SelectSolanaWalletScreen: { + subtitle: 'Виберіть гаманець Solana, щоб підключити його до свого облікового запису.', + title: 'Додати гаманець Solana', + }, }, }, usernamePage: { @@ -1330,16 +1360,22 @@ export const ukUA: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: 'Увійти', + actionText: 'Вже маєте доступ?', + formButton: 'Приєднатися до списку очікування', + subtitle: 'Введіть свою електронну адресу, і ми повідомимо вас, коли ваше місце буде готове', + title: 'Приєднатися до списку очікування', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: 'Ви будете перенаправлені незабаром...', + subtitle: "Ми зв'яжемося з вами, коли ваше місце буде готове", + title: 'Дякуємо за приєднання до списку очікування!', }, }, + web3SolanaWalletButtons: { + connect: 'Підключитися через {{walletName}}', + continue: 'Продовжити через {{walletName}}', + noneAvailable: + 'Гаманці Solana Web3 не виявлено. Установіть {{ solanaWalletsLink || link("wallet extension") }} з підтримкою Web3.', + }, } as const; diff --git a/packages/localizations/src/vi-VN.ts b/packages/localizations/src/vi-VN.ts index 3e8d8fc2317..b60f5ce80dd 100644 --- a/packages/localizations/src/vi-VN.ts +++ b/packages/localizations/src/vi-VN.ts @@ -401,6 +401,12 @@ export const viVN: LocalizationResource = { headerTitle__members: 'Thành viên', headerTitle__requests: 'Yêu cầu', }, + alerts: { + roleSetMigrationInProgress: { + title: 'Các vai trò tạm thời bị khóa', + subtitle: 'Chúng tôi đang cập nhật các vai trò có sẵn. Sau khi hoàn tất, bạn sẽ có thể cập nhật vai trò lại.', + }, + }, }, navbar: { apiKeys: 'Khoá API', @@ -756,6 +762,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: 'Chọn ví bên dưới để đăng nhập', + title: 'Đăng nhập với Solana', + }, }, signInEnterPasswordTitle: 'Nhập mật khẩu', signUp: { @@ -848,6 +858,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: 'Chọn ví bên dưới để đăng ký', + title: 'Đăng ký với Solana', + }, }, socialButtonsBlockButton: 'Tiếp tục với {{provider|titleize}}', socialButtonsBlockButtonManyInView: '{{provider|titleize}}', @@ -857,6 +871,7 @@ export const viVN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -870,6 +885,10 @@ export const viVN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: 'Bạn phải thuộc về một tổ chức', + subtitle: 'Liên hệ với quản trị viên tổ chức của bạn để nhận lời mời.', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -892,6 +911,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, @@ -909,6 +930,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: @@ -947,6 +970,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: 'Bạn đã từ chối yêu cầu ký. Vui lòng thử lại để tiếp tục.', + web3_solana_signature_generation_failed: 'Đã xảy ra lỗi khi tạo chữ ký. Vui lòng thử lại để tiếp tục.', 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.', @@ -1318,6 +1343,10 @@ export const viVN: LocalizationResource = { detailsAction__nonPrimary: 'Đặt làm chính', primaryButton: 'Kết nối ví', title: 'Ví Web3', + web3SelectSolanaWalletScreen: { + subtitle: 'Chọn một ví Solana để kết nối với tài khoản của bạn.', + title: 'Thêm ví Solana', + }, }, }, usernamePage: { @@ -1353,4 +1382,10 @@ export const viVN: LocalizationResource = { title: 'Cảm ơn bạn đã tham gia danh sách chờ!', }, }, + web3SolanaWalletButtons: { + connect: 'Kết nối với {{walletName}}', + continue: 'Tiếp tục với {{walletName}}', + noneAvailable: + 'Không phát hiện ví Solana Web3 nào. Vui lòng cài đặt {{ solanaWalletsLink || link("wallet extension") }} hỗ trợ Web3.', + }, } as const; diff --git a/packages/localizations/src/zh-CN.ts b/packages/localizations/src/zh-CN.ts index 5f5223af7d1..50f6369d08c 100644 --- a/packages/localizations/src/zh-CN.ts +++ b/packages/localizations/src/zh-CN.ts @@ -391,6 +391,12 @@ export const zhCN: LocalizationResource = { headerTitle__members: '成员', headerTitle__requests: '请求', }, + alerts: { + roleSetMigrationInProgress: { + title: '角色暂时被锁定', + subtitle: '我们正在更新可用角色。完成后,您将能够再次更新角色。', + }, + }, }, navbar: { apiKeys: undefined, @@ -737,6 +743,10 @@ export const zhCN: LocalizationResource = { subtitle: '请继续输入由您的身份验证应用生成的验证码。', title: '两步验证', }, + web3Solana: { + subtitle: '请选择下方的钱包进行登录', + title: '使用 Solana 登录', + }, }, signInEnterPasswordTitle: '输入您的密码', signUp: { @@ -827,6 +837,10 @@ export const zhCN: LocalizationResource = { title: '创建您的账户', titleCombined: '创建您的账户', }, + web3Solana: { + subtitle: '请选择下方的钱包进行注册', + title: '使用 Solana 注册', + }, }, socialButtonsBlockButton: '使用 {{provider|titleize}} 登录', socialButtonsBlockButtonManyInView: undefined, @@ -836,6 +850,7 @@ export const zhCN: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -849,6 +864,10 @@ export const zhCN: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: '您必须属于一个组织', + subtitle: '请联系您的组织管理员获取邀请。', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -870,6 +889,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, @@ -887,6 +907,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: '这个密码在数据泄露中被发现,不能使用,请换一个密码试试。', @@ -924,6 +945,8 @@ export const zhCN: LocalizationResource = { phone_number_exists: '该电话号码已被使用,请尝试其他号码。', session_exists: '您已登录。', web3_missing_identifier: undefined, + web3_signature_request_rejected: '您已拒绝签名请求。请重试以继续。', + web3_solana_signature_generation_failed: '生成签名时发生错误。请重试以继续。', zxcvbn: { couldBeStronger: '您的密码可以用,但可以更强。试着添加更多字符。', goodPassword: '做得好。这是一个优秀的密码。', @@ -1278,6 +1301,10 @@ export const zhCN: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: 'Web3 钱包', title: 'Web3 钱包', + web3SelectSolanaWalletScreen: { + subtitle: '选择一个 Solana 钱包以连接到您的账户。', + title: '添加 Solana 钱包', + }, }, }, usernamePage: { @@ -1301,16 +1328,22 @@ export const zhCN: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: '登录', + actionText: '已有访问权限?', + formButton: '加入候补名单', + subtitle: '输入您的电子邮件地址,我们会在您的位置准备好时通知您', + title: '加入候补名单', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: '您将很快被重定向...', + subtitle: '当您的位置准备好时,我们会与您联系', + title: '感谢您加入候补名单!', }, }, + web3SolanaWalletButtons: { + connect: '使用 {{walletName}} 连接', + continue: '使用 {{walletName}} 继续', + noneAvailable: + '未检测到 Solana Web3 钱包。请安装支持 Web3 的 {{ solanaWalletsLink || link("wallet extension") }}。', + }, } as const; diff --git a/packages/localizations/src/zh-TW.ts b/packages/localizations/src/zh-TW.ts index 4e6fb98a8de..07c95b8ef1e 100644 --- a/packages/localizations/src/zh-TW.ts +++ b/packages/localizations/src/zh-TW.ts @@ -391,6 +391,12 @@ export const zhTW: LocalizationResource = { headerTitle__members: '成員', headerTitle__requests: '請求', }, + alerts: { + roleSetMigrationInProgress: { + title: '角色暫時被鎖定', + subtitle: '我們正在更新可用角色。完成後,您將能夠再次更新角色。', + }, + }, }, navbar: { apiKeys: undefined, @@ -737,6 +743,10 @@ export const zhTW: LocalizationResource = { subtitle: undefined, title: '兩步驟驗證', }, + web3Solana: { + subtitle: '請選擇下方錢包以登入', + title: '使用 Solana 登入', + }, }, signInEnterPasswordTitle: '輸入您的密碼', signUp: { @@ -828,6 +838,10 @@ export const zhTW: LocalizationResource = { title: '建立您的帳戶', titleCombined: '建立您的帳戶', }, + web3Solana: { + subtitle: '請選擇下方錢包以註冊', + title: '使用 Solana 註冊', + }, }, socialButtonsBlockButton: '以 {{provider|titleize}} 帳戶登入', socialButtonsBlockButtonManyInView: undefined, @@ -837,6 +851,7 @@ export const zhTW: LocalizationResource = { action__invitationAccept: undefined, action__suggestionsAccept: undefined, subtitle: undefined, + subtitle__createOrganizationDisabled: undefined, suggestionsAcceptedLabel: undefined, title: undefined, }, @@ -850,6 +865,10 @@ export const zhTW: LocalizationResource = { subtitle: undefined, title: undefined, }, + organizationCreationDisabled: { + title: '您必須屬於一個組織', + subtitle: '請聯繫您的組織管理員以獲取邀請。', + }, signOut: { actionLink: undefined, actionText: undefined, @@ -871,6 +890,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, @@ -888,6 +908,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: '此密碼已在已知的資料外洩事件中出現,請改用其他密碼。', @@ -924,6 +945,8 @@ export const zhTW: LocalizationResource = { phone_number_exists: '此電話號碼已被使用,請嘗試其他號碼。', session_exists: '您已經登錄。', web3_missing_identifier: undefined, + web3_signature_request_rejected: '您已拒絕簽名請求。請再試一次以繼續。', + web3_solana_signature_generation_failed: '產生簽名時發生錯誤。請再試一次以繼續。', zxcvbn: { couldBeStronger: '您的密碼強度尚可,但可以更安全。請嘗試增加長度或複雜度。', goodPassword: '密碼強度良好。', @@ -1276,6 +1299,10 @@ export const zhTW: LocalizationResource = { detailsAction__nonPrimary: undefined, primaryButton: '新增 Web3 錢包', title: 'Web3 錢包', + web3SelectSolanaWalletScreen: { + subtitle: '選擇一個 Solana 錢包以連線到您的帳戶。', + title: '新增 Solana 錢包', + }, }, }, usernamePage: { @@ -1299,16 +1326,22 @@ export const zhTW: LocalizationResource = { }, waitlist: { start: { - actionLink: undefined, - actionText: undefined, - formButton: undefined, - subtitle: undefined, - title: undefined, + actionLink: '登入', + actionText: '已有存取權限?', + formButton: '加入候補名單', + subtitle: '輸入您的電子郵件地址,我們會在您的位置準備好時通知您', + title: '加入候補名單', }, success: { - message: undefined, - subtitle: undefined, - title: undefined, + message: '您將很快被重新導向...', + subtitle: '當您的位置準備好時,我們會與您聯繫', + title: '感謝您加入候補名單!', }, }, + web3SolanaWalletButtons: { + connect: '使用 {{walletName}} 連線', + continue: '使用 {{walletName}} 繼續', + noneAvailable: + '未偵測到 Solana Web3 錢包。請安裝支援 Web3 的 {{ solanaWalletsLink || link("wallet extension") }}。', + }, } as const; diff --git a/packages/nextjs/CHANGELOG.md b/packages/nextjs/CHANGELOG.md index 5f9169532b8..dc7e7ed82b8 100644 --- a/packages/nextjs/CHANGELOG.md +++ b/packages/nextjs/CHANGELOG.md @@ -1,5 +1,65 @@ # Change Log +## 6.36.7 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + - @clerk/clerk-react@5.59.3 + +## 6.36.6 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + - @clerk/types@4.101.10 + +## 6.36.5 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 6.36.4 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/clerk-react@5.59.1 + - @clerk/types@4.101.8 + +## 6.36.3 + +### Patch Changes + +- Mark internal keyless header function async to comply with Server Actions async requirements ([#7445](https://github.com/clerk/javascript/pull/7445)) by [@wobsoriano](https://github.com/wobsoriano) + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/clerk-react@5.59.0 + - @clerk/types@4.101.7 + +## 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..41cc947aa18 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.7", "description": "Clerk SDK for NextJS", "keywords": [ "clerk", diff --git a/packages/nextjs/src/__tests__/keyless-custom-headers.test.ts b/packages/nextjs/src/__tests__/keyless-custom-headers.test.ts index 48cc8cb896e..7be75419d7a 100644 --- a/packages/nextjs/src/__tests__/keyless-custom-headers.test.ts +++ b/packages/nextjs/src/__tests__/keyless-custom-headers.test.ts @@ -166,7 +166,7 @@ describe('keyless-custom-headers', () => { }); describe('formatMetadataHeaders', () => { - it('should format complete metadata object with all fields present', () => { + it('should format complete metadata object with all fields present', async () => { const metadata = { nodeVersion: 'v18.17.0', nextVersion: 'next-server (v15.4.5)', @@ -181,7 +181,7 @@ describe('keyless-custom-headers', () => { isCI: false, }; - const result = formatMetadataHeaders(metadata); + const result = await formatMetadataHeaders(metadata); // Test exact header casing and values expect(result.get('Clerk-Node-Version')).toBe('v18.17.0'); @@ -196,7 +196,7 @@ describe('keyless-custom-headers', () => { expect(result.get('Clerk-Auth-Status')).toBe('signed-out'); }); - it('should handle missing optional fields gracefully', () => { + it('should handle missing optional fields gracefully', async () => { const metadata = { userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)', host: 'localhost:3000', @@ -208,7 +208,7 @@ describe('keyless-custom-headers', () => { // Missing: nodeVersion, nextVersion, npmConfigUserAgent, port }; - const result = formatMetadataHeaders(metadata); + const result = await formatMetadataHeaders(metadata); // Test that only present fields are set expect(result.get('Clerk-Client-User-Agent')).toBe('Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)'); @@ -225,7 +225,7 @@ describe('keyless-custom-headers', () => { expect(result.get('Clerk-Node-Port')).toBeNull(); }); - it('should handle undefined values for optional fields', () => { + it('should handle undefined values for optional fields', async () => { const metadata = { nodeVersion: undefined, nextVersion: undefined, @@ -240,7 +240,7 @@ describe('keyless-custom-headers', () => { isCI: false, }; - const result = formatMetadataHeaders(metadata); + const result = await formatMetadataHeaders(metadata); // Test that undefined fields are not set expect(result.get('Clerk-Node-Version')).toBeNull(); @@ -257,7 +257,7 @@ describe('keyless-custom-headers', () => { expect(result.get('Clerk-Auth-Status')).toBe('test-auth-status'); }); - it('should handle empty string values', () => { + it('should handle empty string values', async () => { const metadata = { nodeVersion: '', nextVersion: '', @@ -272,7 +272,7 @@ describe('keyless-custom-headers', () => { isCI: false, }; - const result = formatMetadataHeaders(metadata); + const result = await formatMetadataHeaders(metadata); // Empty strings should not be set as headers expect(result.get('Clerk-Node-Version')).toBeNull(); @@ -513,7 +513,7 @@ describe('keyless-custom-headers', () => { // Collect metadata and format headers const metadata = await collectKeylessMetadata(); - const headers = formatMetadataHeaders(metadata); + const headers = await formatMetadataHeaders(metadata); // Verify the full pipeline works correctly expect(headers.get('Clerk-Client-User-Agent')).toBe('Integration-Test-Agent'); diff --git a/packages/nextjs/src/server/keyless-custom-headers.ts b/packages/nextjs/src/server/keyless-custom-headers.ts index 5e216933843..73ca03837b6 100644 --- a/packages/nextjs/src/server/keyless-custom-headers.ts +++ b/packages/nextjs/src/server/keyless-custom-headers.ts @@ -20,7 +20,7 @@ interface MetadataHeaders { * Collects metadata from the environment and request headers */ export async function collectKeylessMetadata(): Promise { - const headerStore = await headers(); // eslint-disable-line + const headerStore = await headers(); return { nodeVersion: process.version, @@ -99,7 +99,7 @@ function getNextVersion(): string | undefined { /** * Converts metadata to HTTP headers */ -export function formatMetadataHeaders(metadata: MetadataHeaders): Headers { +export async function formatMetadataHeaders(metadata: MetadataHeaders): Promise { const headers = new Headers(); if (metadata.nodeVersion) { diff --git a/packages/nuxt/CHANGELOG.md b/packages/nuxt/CHANGELOG.md index e78f93807b7..72f014367c9 100644 --- a/packages/nuxt/CHANGELOG.md +++ b/packages/nuxt/CHANGELOG.md @@ -1,5 +1,59 @@ # @clerk/nuxt +## 1.13.12 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + +## 1.13.11 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + - @clerk/vue@1.17.7 + +## 1.13.10 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + - @clerk/vue@1.17.6 + +## 1.13.9 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/types@4.101.8 + - @clerk/vue@1.17.5 + +## 1.13.8 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/types@4.101.7 + - @clerk/vue@1.17.4 + +## 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..02f515070fc 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.12", "description": "Clerk SDK for Nuxt", "keywords": [ "clerk", diff --git a/packages/react-router/CHANGELOG.md b/packages/react-router/CHANGELOG.md index 48256a9caa5..aa3d8ad7f81 100644 --- a/packages/react-router/CHANGELOG.md +++ b/packages/react-router/CHANGELOG.md @@ -1,5 +1,63 @@ # Change Log +## 2.3.9 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + - @clerk/clerk-react@5.59.3 + +## 2.3.8 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + - @clerk/types@4.101.10 + +## 2.3.7 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 2.3.6 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/clerk-react@5.59.1 + - @clerk/types@4.101.8 + +## 2.3.5 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/clerk-react@5.59.0 + - @clerk/types@4.101.7 + +## 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..d2d53aead7b 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.9", "description": "Clerk SDK for React Router", "keywords": [ "clerk", diff --git a/packages/react/CHANGELOG.md b/packages/react/CHANGELOG.md index eaf8804fe54..6a873f370c9 100644 --- a/packages/react/CHANGELOG.md +++ b/packages/react/CHANGELOG.md @@ -1,5 +1,39 @@ # Change Log +## 5.59.3 + +### Patch Changes + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + +## 5.59.2 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + +## 5.59.1 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + +## 5.59.0 + +### Minor Changes + +- Add support for Sign in with Solana. ([#7293](https://github.com/clerk/javascript/pull/7293)) by [@kduprey](https://github.com/kduprey) + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + ## 5.58.1 ### Patch Changes diff --git a/packages/react/package.json b/packages/react/package.json index e2937e752fd..a3dd622e09a 100644 --- a/packages/react/package.json +++ b/packages/react/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/clerk-react", - "version": "5.58.1", + "version": "5.59.3", "description": "Clerk React library", "keywords": [ "clerk", diff --git a/packages/react/src/components/SignInButton.tsx b/packages/react/src/components/SignInButton.tsx index fb45e4acbb6..729217fcffd 100644 --- a/packages/react/src/components/SignInButton.tsx +++ b/packages/react/src/components/SignInButton.tsx @@ -8,6 +8,8 @@ import { withClerk } from './withClerk'; export const SignInButton = withClerk( ({ clerk, children, ...props }: WithClerkProp>) => { const { + // @ts-expect-error - appearance is a valid prop for SignInProps & SignInButtonPropsModal + appearance, signUpFallbackRedirectUrl, forceRedirectUrl, fallbackRedirectUrl, @@ -33,7 +35,7 @@ export const SignInButton = withClerk( }; if (mode === 'modal') { - return clerk.openSignIn({ ...opts, appearance: props.appearance }); + return clerk.openSignIn({ ...opts, appearance }); } return clerk.redirectToSignIn({ ...opts, diff --git a/packages/react/src/components/SignUpButton.tsx b/packages/react/src/components/SignUpButton.tsx index 14cd75d4ac9..8beac5f6360 100644 --- a/packages/react/src/components/SignUpButton.tsx +++ b/packages/react/src/components/SignUpButton.tsx @@ -8,6 +8,10 @@ import { withClerk } from './withClerk'; export const SignUpButton = withClerk( ({ clerk, children, ...props }: WithClerkProp>) => { const { + // @ts-expect-error - appearance is a valid prop for SignUpProps & SignUpButtonPropsModal + appearance, + // @ts-expect-error - unsafeMetadata is a valid prop for SignUpProps & SignUpButtonPropsModal + unsafeMetadata, fallbackRedirectUrl, forceRedirectUrl, signInFallbackRedirectUrl, @@ -34,8 +38,8 @@ export const SignUpButton = withClerk( if (mode === 'modal') { return clerk.openSignUp({ ...opts, - appearance: props.appearance, - unsafeMetadata: props.unsafeMetadata, + appearance, + unsafeMetadata, }); } diff --git a/packages/react/src/components/__tests__/SignInButton.test.tsx b/packages/react/src/components/__tests__/SignInButton.test.tsx index b9eba07aa57..03523dd2d15 100644 --- a/packages/react/src/components/__tests__/SignInButton.test.tsx +++ b/packages/react/src/components/__tests__/SignInButton.test.tsx @@ -105,4 +105,18 @@ describe('', () => { ); }).toThrow(); }); + + it('does not pass appearance prop to child element', () => { + const { container } = render( + + + , + ); + + 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); + }); }); 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/remix/CHANGELOG.md b/packages/remix/CHANGELOG.md index 0c650bf3a1b..d691d62500c 100644 --- a/packages/remix/CHANGELOG.md +++ b/packages/remix/CHANGELOG.md @@ -1,5 +1,61 @@ # Change Log +## 4.13.29 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + - @clerk/clerk-react@5.59.3 + +## 4.13.28 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + - @clerk/types@4.101.10 + +## 4.13.27 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 4.13.26 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/clerk-react@5.59.1 + - @clerk/types@4.101.8 + +## 4.13.25 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/clerk-react@5.59.0 + - @clerk/types@4.101.7 + +## 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..8329fc04118 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.29", "description": "Clerk SDK for Remix", "keywords": [ "clerk", diff --git a/packages/shared/CHANGELOG.md b/packages/shared/CHANGELOG.md index 053c5bcc0b8..0e9520675c9 100644 --- a/packages/shared/CHANGELOG.md +++ b/packages/shared/CHANGELOG.md @@ -1,5 +1,45 @@ # Change Log +## 3.42.0 + +### Minor Changes + +- Disable role selection in `OrganizationProfile` during role set migration ([#7541](https://github.com/clerk/javascript/pull/7541)) by [@LauraBeatris](https://github.com/LauraBeatris) + +## 3.41.1 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +## 3.41.0 + +### Minor Changes + +- Display message in `TaskChooseOrganization` when user is not allowed to create organizations ([#7502](https://github.com/clerk/javascript/pull/7502)) by [@LauraBeatris](https://github.com/LauraBeatris) + +### Patch Changes + +- Fix locale fallback logic to render English values when localization keys are `undefined`. ([#7494](https://github.com/clerk/javascript/pull/7494)) by [@alexcarpenter](https://github.com/alexcarpenter) + +- Fix is known error issues due to cross-bundle scenarios where instanceof fails due to different class instances. ([#7507](https://github.com/clerk/javascript/pull/7507)) by [@alexcarpenter](https://github.com/alexcarpenter) + +- Refactor internal Clerk error handling functions ([#7490](https://github.com/clerk/javascript/pull/7490)) by [@kduprey](https://github.com/kduprey) + +## 3.40.0 + +### Minor Changes + +- Add Web3 Solana support to `` ([#7435](https://github.com/clerk/javascript/pull/7435)) by [@kduprey](https://github.com/kduprey) + +- Add support for Sign in with Solana. ([#7293](https://github.com/clerk/javascript/pull/7293)) by [@kduprey](https://github.com/kduprey) + +### Patch Changes + +- Added temporary email services support error localization key. ([#7436](https://github.com/clerk/javascript/pull/7436)) by [@wobsoriano](https://github.com/wobsoriano) + +- Added missing password or identifier incorrect error localization. ([#7437](https://github.com/clerk/javascript/pull/7437)) by [@wobsoriano](https://github.com/wobsoriano) + ## 3.39.0 ### Minor Changes diff --git a/packages/shared/package.json b/packages/shared/package.json index f8d6cd49a2c..a566d852757 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/shared", - "version": "3.39.0", + "version": "3.42.0", "description": "Internal package utils used by the Clerk SDKs", "repository": { "type": "git", diff --git a/packages/shared/src/error.ts b/packages/shared/src/error.ts index ad8cea5ce3b..328a363015e 100644 --- a/packages/shared/src/error.ts +++ b/packages/shared/src/error.ts @@ -1,8 +1,9 @@ export { errorToJSON, parseError, parseErrors } from './errors/parseError'; -export { ClerkAPIError } from './errors/clerkApiError'; -export { ClerkAPIResponseError } from './errors/clerkApiResponseError'; -export { ClerkError } from './errors/clerkError'; +export { ClerkAPIError, isClerkAPIError } from './errors/clerkApiError'; +export { ClerkAPIResponseError, isClerkAPIResponseError } from './errors/clerkApiResponseError'; +export { ClerkError, isClerkError } from './errors/clerkError'; +export { MissingExpiredTokenError } from './errors/missingExpiredTokenError'; export { buildErrorThrower, type ErrorThrower, type ErrorThrowerOptions } from './errors/errorThrower'; @@ -10,15 +11,13 @@ export { EmailLinkError, EmailLinkErrorCode, EmailLinkErrorCodeStatus } from './ export type { MetamaskError } from './errors/metamaskError'; -export { ClerkRuntimeError } from './errors/clerkRuntimeError'; +export { ClerkRuntimeError, isClerkRuntimeError } from './errors/clerkRuntimeError'; export { ClerkWebAuthnError } from './errors/webAuthNError'; export { is4xxError, isCaptchaError, - isClerkAPIResponseError, - isClerkRuntimeError, isEmailLinkError, isKnownError, isMetamaskError, diff --git a/packages/shared/src/errors/clerkApiError.ts b/packages/shared/src/errors/clerkApiError.ts index 42fc43183ee..f06339df7c7 100644 --- a/packages/shared/src/errors/clerkApiError.ts +++ b/packages/shared/src/errors/clerkApiError.ts @@ -1,12 +1,13 @@ import type { ClerkAPIError as ClerkAPIErrorInterface, ClerkAPIErrorJSON } from '../types'; import { createErrorTypeGuard } from './createErrorTypeGuard'; -export type ClerkApiErrorMeta = Record; +export type ClerkAPIErrorMeta = Record; /** * This error contains the specific error message, code, and any additional metadata that was returned by the Clerk API. */ -export class ClerkAPIError implements ClerkAPIErrorInterface { +export class ClerkAPIError implements ClerkAPIErrorInterface { + // TODO: Update kind to match class name in Core 3 static kind = 'ClerkApiError'; readonly code: string; readonly message: string; @@ -36,6 +37,6 @@ export class ClerkAPIError implements Cler } /** - * Type guard to check if a value is a ClerkApiError instance. + * Type guard to check if a value is a ClerkAPIError instance. */ -export const isClerkApiError = createErrorTypeGuard(ClerkAPIError); +export const isClerkAPIError = createErrorTypeGuard(ClerkAPIError); diff --git a/packages/shared/src/errors/clerkApiResponseError.ts b/packages/shared/src/errors/clerkApiResponseError.ts index 671c41bef5c..edf9dc04407 100644 --- a/packages/shared/src/errors/clerkApiResponseError.ts +++ b/packages/shared/src/errors/clerkApiResponseError.ts @@ -47,14 +47,14 @@ export class ClerkAPIResponseError extends ClerkError implements ClerkAPIRespons } /** - * Type guard to check if an error is a ClerkApiResponseError. + * Type guard to check if an error is a ClerkAPIResponseError. * Can be called as a standalone function or as a method on an error object. * * @example * // As a standalone function - * if (isClerkApiResponseError(error)) { ... } + * if (isClerkAPIResponseError(error)) { ... } * * // As a method (when attached to error object) - * if (error.isClerkApiResponseError()) { ... } + * if (error.isClerkAPIResponseError()) { ... } */ -export const isClerkApiResponseError = createErrorTypeGuard(ClerkAPIResponseError); +export const isClerkAPIResponseError = createErrorTypeGuard(ClerkAPIResponseError); diff --git a/packages/shared/src/errors/createErrorTypeGuard.ts b/packages/shared/src/errors/createErrorTypeGuard.ts index aa6afe5d96d..fecb601a922 100644 --- a/packages/shared/src/errors/createErrorTypeGuard.ts +++ b/packages/shared/src/errors/createErrorTypeGuard.ts @@ -29,6 +29,14 @@ export function createErrorTypeGuard Value>( if (!target) { throw new TypeError(`${ErrorClass.kind || ErrorClass.name} type guard requires an error object`); } + // Use duck-typing with 'kind' property to handle cross-bundle scenarios + // where instanceof fails due to different class instances + if (ErrorClass.kind && typeof target === 'object' && target !== null && 'constructor' in target) { + const targetConstructor = (target as { constructor?: { kind?: string } }).constructor; + if (targetConstructor?.kind === ErrorClass.kind) { + return true; + } + } return target instanceof ErrorClass; } diff --git a/packages/shared/src/errors/globalHookError.ts b/packages/shared/src/errors/globalHookError.ts index c4615e16234..c02c813b443 100644 --- a/packages/shared/src/errors/globalHookError.ts +++ b/packages/shared/src/errors/globalHookError.ts @@ -1,4 +1,4 @@ -import { isClerkApiResponseError } from './clerkApiResponseError'; +import { isClerkAPIResponseError } from './clerkApiResponseError'; import type { ClerkError } from './clerkError'; import { isClerkRuntimeError } from './clerkRuntimeError'; @@ -9,7 +9,7 @@ import { isClerkRuntimeError } from './clerkRuntimeError'; */ export function createClerkGlobalHookError(error: ClerkError) { const predicates = { - isClerkApiResponseError, + isClerkAPIResponseError, isClerkRuntimeError, } as const; diff --git a/packages/shared/src/errors/helpers.ts b/packages/shared/src/errors/helpers.ts index 5d28681e836..b95f55d5a8c 100644 --- a/packages/shared/src/errors/helpers.ts +++ b/packages/shared/src/errors/helpers.ts @@ -1,5 +1,7 @@ import type { ClerkAPIResponseError } from './clerkApiResponseError'; +import { isClerkAPIResponseError } from './clerkApiResponseError'; import type { ClerkRuntimeError } from './clerkRuntimeError'; +import { isClerkRuntimeError } from './clerkRuntimeError'; import type { EmailLinkError } from './emailLinkError'; import type { MetamaskError } from './metamaskError'; @@ -55,35 +57,6 @@ export function isKnownError(error: any): error is ClerkAPIResponseError | Clerk return isClerkAPIResponseError(error) || isMetamaskError(error) || isClerkRuntimeError(error); } -/** - * Checks if the provided error is a ClerkAPIResponseError. - * - * @internal - */ -export function isClerkAPIResponseError(err: any): err is ClerkAPIResponseError { - return err && 'clerkError' in err; -} - -/** - * Checks if the provided error object is an instance of ClerkRuntimeError. - * - * @param err - The error object to check. - * @returns True if the error is a ClerkRuntimeError, false otherwise. - * - * @example - * const error = new ClerkRuntimeError('An error occurred'); - * if (isClerkRuntimeError(error)) { - * // Handle ClerkRuntimeError - * console.error('ClerkRuntimeError:', error.message); - * } else { - * // Handle other errors - * console.error('Other error:', error.message); - * } - */ -export function isClerkRuntimeError(err: any): err is ClerkRuntimeError { - return 'clerkRuntimeError' in err; -} - /** * Checks if the provided error is a Clerk runtime error indicating a reverification was cancelled. * diff --git a/packages/shared/src/errors/missingExpiredTokenError.ts b/packages/shared/src/errors/missingExpiredTokenError.ts new file mode 100644 index 00000000000..2b3d15396e0 --- /dev/null +++ b/packages/shared/src/errors/missingExpiredTokenError.ts @@ -0,0 +1,45 @@ +import { ClerkAPIResponseError, isClerkAPIResponseError } from './clerkApiResponseError'; + +/** + * Error class representing a missing expired token error from the API. + * This error occurs when the server requires an expired token to mint a new session token. + * + * Use the static `is` method to check if a ClerkAPIResponseError matches this error type. + * + * @example + * ```typescript + * if (MissingExpiredTokenError.is(error)) { + * // Handle the missing expired token error + * } + * ``` + */ +export class MissingExpiredTokenError extends ClerkAPIResponseError { + static kind = 'MissingExpiredTokenError'; + static readonly ERROR_CODE = 'missing_expired_token' as const; + static readonly STATUS = 422 as const; + + /** + * Type guard to check if an error is a MissingExpiredTokenError. + * This checks the error's properties (status and error code) rather than instanceof, + * allowing it to work with ClerkAPIResponseError instances thrown from the API layer. + * + * @example + * ```typescript + * try { + * await someApiCall(); + * } catch (e) { + * if (MissingExpiredTokenError.is(e)) { + * // e is typed as ClerkAPIResponseError with the specific error properties + * } + * } + * ``` + */ + static is(err: unknown): err is ClerkAPIResponseError { + return ( + isClerkAPIResponseError(err) && + err.status === MissingExpiredTokenError.STATUS && + err.errors.length > 0 && + err.errors[0].code === MissingExpiredTokenError.ERROR_CODE + ); + } +} diff --git a/packages/shared/src/types/appearance.ts b/packages/shared/src/types/appearance.ts index 809aae80217..19598760418 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; + + web3SolanaWalletButtonsRoot: WithOptions; + web3SolanaWalletButtons: WithOptions; + web3SolanaWalletButtonsIconButton: WithOptions; + web3SolanaWalletButtonsBlockButton: WithOptions; + web3SolanaWalletButtonsBlockButtonText: WithOptions; + web3SolanaWalletButtonsWalletIcon: WithOptions; + web3SolanaWalletButtonsWalletInitialIcon: 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/elementIds.ts b/packages/shared/src/types/elementIds.ts index 8ba40eb431c..77f71404daa 100644 --- a/packages/shared/src/types/elementIds.ts +++ b/packages/shared/src/types/elementIds.ts @@ -25,7 +25,8 @@ export type FieldId = | 'apiKeyDescription' | 'apiKeyExpirationDate' | 'apiKeyRevokeConfirmation' - | 'apiKeySecret'; + | 'apiKeySecret' + | 'web3WalletName'; export type ProfileSectionId = | 'profile' | 'username' 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..806826143d8 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: { @@ -709,6 +718,10 @@ export type __internal_LocalizationResource = { primaryButton: LocalizationValue; destructiveAction: LocalizationValue; detailsAction__nonPrimary: LocalizationValue; + web3SelectSolanaWalletScreen: { + title: LocalizationValue; + subtitle: LocalizationValue; + }; }; dangerSection: { title: LocalizationValue; @@ -1115,6 +1128,12 @@ export type __internal_LocalizationResource = { primaryButton: LocalizationValue; }; }; + alerts: { + roleSetMigrationInProgress: { + title: LocalizationValue; + subtitle: LocalizationValue; + }; + }; }; billingPage: { title: LocalizationValue; @@ -1285,11 +1304,16 @@ export type __internal_LocalizationResource = { chooseOrganization: { title: LocalizationValue; subtitle: LocalizationValue; + subtitle__createOrganizationDisabled: LocalizationValue; suggestionsAcceptedLabel: LocalizationValue; action__suggestionsAccept: LocalizationValue; action__createOrganization: LocalizationValue; action__invitationAccept: LocalizationValue; }; + organizationCreationDisabled: { + title: LocalizationValue; + subtitle: LocalizationValue; + }; }; taskResetPassword: { title: LocalizationValue; @@ -1300,6 +1324,11 @@ export type __internal_LocalizationResource = { }; formButtonPrimary: LocalizationValue; }; + web3SolanaWalletButtons: { + connect: LocalizationValue<'walletName'>; + continue: LocalizationValue<'walletName'>; + noneAvailable: LocalizationValue<'solanaWalletsLink'>; + }; }; type WithParamName = T & @@ -1320,6 +1349,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; @@ -1334,10 +1365,12 @@ 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; form_password_incorrect: LocalizationValue; + form_password_or_identifier_incorrect: LocalizationValue; form_password_validation_failed: LocalizationValue; not_allowed_access: LocalizationValue; form_identifier_exists: LocalizationValue; diff --git a/packages/shared/src/types/organization.ts b/packages/shared/src/types/organization.ts index 28114128076..98ced75e217 100644 --- a/packages/shared/src/types/organization.ts +++ b/packages/shared/src/types/organization.ts @@ -51,7 +51,7 @@ export interface OrganizationResource extends ClerkResource, BillingPayerMethods update: (params: UpdateOrganizationParams) => Promise; getMemberships: GetMemberships; getInvitations: (params?: GetInvitationsParams) => Promise>; - getRoles: (params?: GetRolesParams) => Promise>; + getRoles: (params?: GetRolesParams) => Promise; getDomains: (params?: GetDomainsParams) => Promise>; getMembershipRequests: ( params?: GetMembershipRequestParams, @@ -70,6 +70,10 @@ export interface OrganizationResource extends ClerkResource, BillingPayerMethods export type GetRolesParams = ClerkPaginationParams; +export interface GetRolesResponse extends ClerkPaginatedResponse { + has_role_set_migration?: boolean; +} + export type GetMembersParams = ClerkPaginationParams<{ role?: OrganizationCustomRoleKey[]; query?: string; 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/user.ts b/packages/shared/src/types/user.ts index 54b949411d3..87057004105 100644 --- a/packages/shared/src/types/user.ts +++ b/packages/shared/src/types/user.ts @@ -59,7 +59,7 @@ declare global { /** * The `User` object holds all of the information for a single user of your application and provides a set of methods to manage their account. * - * A user can be contacted at their primary email address or primary phone number. They can have more than one registered email address, but only one of them will be their primary email address. This goes for phone numbers as well; a user can have more than one, but only one phone number will be their primary. At the same time, a user can also have one or more external accounts by connecting to [social providers](https://clerk.com/docs/guides/configure/auth-strategies/social-connections/all-providers) such as Google, Apple, Facebook, and many more. + * A user can be contacted at their primary email address or primary phone number. They can have more than one registered email address, but only one of them will be their primary email address. This goes for phone numbers as well; a user can have more than one, but only one phone number will be their primary. At the same time, a user can also have one or more external accounts by connecting to [social providers](https://clerk.com/docs/guides/configure/auth-strategies/social-connections/overview) such as Google, Apple, Facebook, and many more. * * Finally, a `User` object holds profile data like the user's name, profile picture, and a set of [metadata](/docs/guides/users/extending) that can be used internally to store arbitrary information. The metadata are split into `publicMetadata` and `privateMetadata`. Both types are set from the [Backend API](https://clerk.com/docs/reference/backend-api){{ target: '_blank' }}, but public metadata can also be accessed from the [Frontend API](https://clerk.com/docs/reference/frontend-api){{ target: '_blank' }}. * 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/utils/fastDeepMerge.ts b/packages/shared/src/utils/fastDeepMerge.ts index 1aa08d7e0d9..617f097df3c 100644 --- a/packages/shared/src/utils/fastDeepMerge.ts +++ b/packages/shared/src/utils/fastDeepMerge.ts @@ -17,7 +17,7 @@ export const fastDeepMergeAndReplace = ( target[key] = new (Object.getPrototypeOf(source[key]).constructor)(); } fastDeepMergeAndReplace(source[key], target[key]); - } else if (Object.prototype.hasOwnProperty.call(source, key)) { + } else if (Object.prototype.hasOwnProperty.call(source, key) && source[key] !== undefined) { target[key] = source[key]; } } 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/packages/tanstack-react-start/CHANGELOG.md b/packages/tanstack-react-start/CHANGELOG.md index c78e3942862..e3eda4d9700 100644 --- a/packages/tanstack-react-start/CHANGELOG.md +++ b/packages/tanstack-react-start/CHANGELOG.md @@ -1,5 +1,63 @@ # @clerk/tanstack-react-start +## 0.27.14 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + - @clerk/clerk-react@5.59.3 + +## 0.27.13 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/clerk-react@5.59.3 + - @clerk/types@4.101.10 + +## 0.27.12 + +### Patch Changes + +- Fix React peer dependency version ranges to use `~` instead of `^` for React 19 versions, ensuring non-overlapping version constraints. ([#7513](https://github.com/clerk/javascript/pull/7513)) by [@jacekradko](https://github.com/jacekradko) + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/clerk-react@5.59.2 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 0.27.11 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/clerk-react@5.59.1 + - @clerk/types@4.101.8 + +## 0.27.10 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/clerk-react@5.59.0 + - @clerk/types@4.101.7 + +## 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..b7af01c0d8d 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.14", "description": "Clerk SDK for TanStack React Start", "keywords": [ "clerk", diff --git a/packages/testing/CHANGELOG.md b/packages/testing/CHANGELOG.md index 37dc8f0e32f..08308ab1659 100644 --- a/packages/testing/CHANGELOG.md +++ b/packages/testing/CHANGELOG.md @@ -1,5 +1,55 @@ # @clerk/testing +## 1.13.28 + +### Patch Changes + +- Updated dependencies [[`6b26afc`](https://github.com/clerk/javascript/commit/6b26afcc784f6e8344cf6ff0b1ef69c14019fe66)]: + - @clerk/backend@2.29.2 + +## 1.13.27 + +### Patch Changes + +- Updated dependencies [[`9320c4f`](https://github.com/clerk/javascript/commit/9320c4f9dde7d9a4732cdb3a9ca71e8a720a8dea), [`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/backend@2.29.1 + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 1.13.26 + +### Patch Changes + +- Updated dependencies [[`ede3e2a`](https://github.com/clerk/javascript/commit/ede3e2a326c9cbbd4ab09375f4bb291483681892), [`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/backend@2.29.0 + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 1.13.25 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`5d25027`](https://github.com/clerk/javascript/commit/5d250277ea389695e82ec9471f1eadadf7cbc4c3), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630), [`d4e2739`](https://github.com/clerk/javascript/commit/d4e2739422bdeea44f240c9d7637f564dce5320f)]: + - @clerk/shared@3.41.0 + - @clerk/backend@2.28.0 + - @clerk/types@4.101.8 + +## 1.13.24 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`43d3c3e`](https://github.com/clerk/javascript/commit/43d3c3eaff767054ef74fd3655e632caffeaaf33), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/backend@2.27.1 + - @clerk/types@4.101.7 + +## 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..b5965f456ff 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.28", "description": "Utilities to help you create E2E test suites for apps using Clerk", "keywords": [ "auth", diff --git a/packages/themes/CHANGELOG.md b/packages/themes/CHANGELOG.md index e01387a8ed3..5091a383dd8 100644 --- a/packages/themes/CHANGELOG.md +++ b/packages/themes/CHANGELOG.md @@ -1,5 +1,33 @@ # Change Log +## 2.4.47 + +### Patch Changes + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + +## 2.4.46 + +### Patch Changes + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + +## 2.4.45 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + +## 2.4.44 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + ## 2.4.43 ### Patch Changes diff --git a/packages/themes/package.json b/packages/themes/package.json index 046ec53a99c..b4bb35ada2e 100644 --- a/packages/themes/package.json +++ b/packages/themes/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/themes", - "version": "2.4.43", + "version": "2.4.47", "description": "Themes for the Clerk auth components", "keywords": [ "react", diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index ec6d729b58d..f7b5cdbfac6 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,5 +1,33 @@ # Change Log +## 4.101.10 + +### Patch Changes + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + +## 4.101.9 + +### Patch Changes + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + +## 4.101.8 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + +## 4.101.7 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + ## 4.101.6 ### Patch Changes diff --git a/packages/types/package.json b/packages/types/package.json index a0cf06c8b3b..249c1375f19 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/types", - "version": "4.101.6", + "version": "4.101.10", "description": "Typings for Clerk libraries.", "keywords": [ "clerk", diff --git a/packages/vue/CHANGELOG.md b/packages/vue/CHANGELOG.md index 9bc25c544ed..de5e2a64993 100644 --- a/packages/vue/CHANGELOG.md +++ b/packages/vue/CHANGELOG.md @@ -1,5 +1,37 @@ # @clerk/vue +## 1.17.7 + +### Patch Changes + +- Updated dependencies [[`a4e6932`](https://github.com/clerk/javascript/commit/a4e693262f734bfd3ab08ffac019168c874c2bd8)]: + - @clerk/shared@3.42.0 + - @clerk/types@4.101.10 + +## 1.17.6 + +### Patch Changes + +- Updated dependencies [[`03dd374`](https://github.com/clerk/javascript/commit/03dd37458eedf59198dc3574e12030b217efcb41)]: + - @clerk/shared@3.41.1 + - @clerk/types@4.101.9 + +## 1.17.5 + +### Patch Changes + +- Updated dependencies [[`79eb5af`](https://github.com/clerk/javascript/commit/79eb5afd91d7b002faafd2980850d944acb37917), [`b3b02b4`](https://github.com/clerk/javascript/commit/b3b02b46dfa6d194ed12d2e6b9e332796ee73c4a), [`7b3024a`](https://github.com/clerk/javascript/commit/7b3024a71e6e45e926d83f1a9e887216e7c14424), [`2cd4da9`](https://github.com/clerk/javascript/commit/2cd4da9c72bc7385c0c7c71e2a7ca856d79ce630)]: + - @clerk/shared@3.41.0 + - @clerk/types@4.101.8 + +## 1.17.4 + +### Patch Changes + +- Updated dependencies [[`375a32d`](https://github.com/clerk/javascript/commit/375a32d0f44933605ffb513ff28f522ac5e851d6), [`175883b`](https://github.com/clerk/javascript/commit/175883b05228138c9ff55d0871cc1041bd68d7fe), [`f626046`](https://github.com/clerk/javascript/commit/f626046c589956022b1e1ac70382c986822f4733), [`14342d2`](https://github.com/clerk/javascript/commit/14342d2b34fe0882f7676195aefaaa17f034af70)]: + - @clerk/shared@3.40.0 + - @clerk/types@4.101.7 + ## 1.17.3 ### Patch Changes diff --git a/packages/vue/package.json b/packages/vue/package.json index ef19a868cb7..5cc3b627e27 100644 --- a/packages/vue/package.json +++ b/packages/vue/package.json @@ -1,6 +1,6 @@ { "name": "@clerk/vue", - "version": "1.17.3", + "version": "1.17.7", "description": "Clerk SDK for Vue", "keywords": [ "clerk", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3c5c14c87f7..0e18b9953f2 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 @@ -366,9 +366,6 @@ importers: '@clerk/types': specifier: workspace:^ version: link:../types - cookie: - specifier: 1.0.2 - version: 1.0.2 standardwebhooks: specifier: ^1.0.0 version: 1.0.0 @@ -379,6 +376,9 @@ importers: '@edge-runtime/vm': specifier: 5.0.0 version: 5.0.0 + cookie: + specifier: 1.0.2 + version: 1.0.2 msw: specifier: 2.11.6 version: 2.11.6(@types/node@24.7.2)(typescript@5.8.3) @@ -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==} @@ -14929,10 +15210,12 @@ packages: whatwg-encoding@2.0.0: resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} engines: {node: '>=12'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-encoding@3.1.1: resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} engines: {node: '>=18'} + deprecated: Use @exodus/bytes instead for a more spec-conformant and faster implementation whatwg-fetch@3.6.20: resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} @@ -16407,7 +16690,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 +16698,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 +17370,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 +17390,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 +17443,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 +17451,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 +17461,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 +17486,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 +17517,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 +17667,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 +17780,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 +17812,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 +17820,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 +17836,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 +17893,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 +17902,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 +17949,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 +18143,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 +18237,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 +18582,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 +18596,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 +18627,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 +18842,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 +18876,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 +19459,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 +19552,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 +19562,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 +19591,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 +19599,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 +19760,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 +19780,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 +19793,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 +19811,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 +19827,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 +20045,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 +20059,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 +20068,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 +20082,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 +20098,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 +20113,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 +20202,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 +20230,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 +20341,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 +21018,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 +21032,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 +21366,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 +21760,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 +21775,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 +22061,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 +22286,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 +22874,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 +22901,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 +22921,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 +22983,8 @@ snapshots: bluebird@3.7.2: {} + bn.js@5.2.2: {} + body-parser@1.20.3: dependencies: bytes: 3.1.2 @@ -22425,6 +23023,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 +23093,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 +23136,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 +23480,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 +23555,8 @@ snapshots: commander@12.1.0: {} + commander@13.1.0: {} + commander@14.0.1: {} commander@2.20.3: {} @@ -23597,6 +24219,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 +24279,8 @@ snapshots: diff@8.0.2: {} + dijkstrajs@1.0.3: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -23807,7 +24433,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 +24443,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 +24619,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 +25096,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 +25245,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 +25296,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 +25439,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 +25481,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 +25494,8 @@ snapshots: fastest-levenshtein@1.0.16: {} + fastestsmallesttextencoderdecoder@1.0.22: {} + fastify-plugin@5.0.1: {} fastify@5.6.1: @@ -25765,6 +26403,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 +26489,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 +26535,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 +26749,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 +26866,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: 7.5.10(bufferutil@4.0.9)(utf-8-validate@5.0.10) + + isomorphic-ws@5.0.0(ws@8.18.3(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) - 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)): dependencies: - ws: 8.18.2 + ws: 8.18.2(bufferutil@4.0.9)(utf-8-validate@5.0.10) isstream@0.1.2: {} @@ -26306,6 +26955,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 +27079,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 +27088,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 +27325,8 @@ snapshots: joycon@3.1.1: {} + js-base64@3.7.8: {} + js-beautify@1.15.1: dependencies: config-chain: 1.1.13 @@ -26741,7 +27410,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 +27436,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 +27463,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 +27490,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 +28242,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 +28275,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 +28361,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 +28381,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 +28407,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 +28415,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 +29150,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 +29884,8 @@ snapshots: pngjs@3.4.0: {} + pngjs@5.0.0: {} + portfinder@1.0.32: dependencies: async: 2.6.4 @@ -29555,6 +30231,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 +30301,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 +30330,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 +30363,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 +30683,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 +30883,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 +31092,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 +31300,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 +31316,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 +31499,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 +31733,8 @@ snapshots: dependencies: copy-anything: 3.0.5 + superstruct@2.0.2: {} + supertest@6.3.4: dependencies: methods: 1.1.2 @@ -31195,6 +31896,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 +32668,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 +32795,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 +32968,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 +33009,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 +33024,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 +33053,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 +33148,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 +33161,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 +33177,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 +33206,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 +33341,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 +33437,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 +33503,7 @@ snapshots: xxhash-wasm@1.1.0: {} - y18n@4.0.3: - optional: true + y18n@4.0.3: {} y18n@5.0.8: {} @@ -32819,7 +33540,6 @@ snapshots: dependencies: camelcase: 5.3.1 decamelize: 1.2.0 - optional: true yargs-parser@20.2.9: {} @@ -32838,7 +33558,6 @@ snapshots: which-module: 2.0.1 y18n: 4.0.3 yargs-parser: 18.1.3 - optional: true yargs@16.2.0: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 39b6bb4fc0d..1b25706c688 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -15,8 +15,8 @@ catalogs: # Can be referenced through "catalog:peer-react" peer-react: - react: ^18.0.0 || ^19.0.0 || ^19.0.0-0 - react-dom: ^18.0.0 || ^19.0.0 || ^19.0.0-0 + react: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 + react-dom: ^18.0.0 || ~19.0.3 || ~19.1.4 || ~19.2.3 || ~19.3.0-0 # Can be referenced through "catalog:repo" repo: