From 0bef6301158ddbf929420bfd1d8355a52b2f2618 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Wed, 13 Nov 2024 13:07:57 -0500 Subject: [PATCH 1/9] fix(clerk-js,clerk-react,chrome-extension): Build and consume packages without remotely hosted code --- .changeset/afraid-toes-sin.md | 6 + .changeset/tidy-garlics-boil.md | 5 + .../chrome-extension/src/background/clerk.ts | 5 +- .../chrome-extension/src/internal/clerk.ts | 6 +- .../src/react/ClerkProvider.tsx | 2 +- packages/chrome-extension/tsup.config.ts | 7 +- packages/clerk-js/no-rhc/index.d.ts | 3 + packages/clerk-js/no-rhc/index.js | 1 + packages/clerk-js/package.json | 3 +- packages/clerk-js/rspack.config.js | 71 +- packages/clerk-js/src/core/clerk.ts | 108 +-- .../clerk-js/src/core/resources/SignIn.ts | 105 +-- .../clerk-js/src/core/resources/SignUp.ts | 175 +++-- packages/clerk-js/src/globals.d.ts | 1 + .../components/GoogleOneTap/one-tap-start.tsx | 27 +- .../src/utils/captcha/getCaptchaToken.ts | 8 +- packages/clerk-js/src/utils/index.ts | 11 +- packages/react/src/globals.d.ts | 1 + packages/react/src/isomorphicClerk.ts | 79 +- playground/browser-extension/assets/icon.png | Bin 0 -> 79750 bytes playground/browser-extension/package.json | 18 +- playground/browser-extension/pnpm-lock.yaml | 704 ++++++++---------- .../browser-extension/src/background/index.ts | 19 +- .../browser-extension/src/popup/index.tsx | 31 +- 24 files changed, 739 insertions(+), 657 deletions(-) create mode 100644 .changeset/afraid-toes-sin.md create mode 100644 .changeset/tidy-garlics-boil.md create mode 100644 packages/clerk-js/no-rhc/index.d.ts create mode 100644 packages/clerk-js/no-rhc/index.js create mode 100644 playground/browser-extension/assets/icon.png diff --git a/.changeset/afraid-toes-sin.md b/.changeset/afraid-toes-sin.md new file mode 100644 index 00000000000..874fa3039bd --- /dev/null +++ b/.changeset/afraid-toes-sin.md @@ -0,0 +1,6 @@ +--- +'@clerk/clerk-js': patch +'@clerk/clerk-react': patch +--- + +Include **BUILD_ENABLE_RHC** to allow for builds which remove remotely hosted code as it is a requirement for browser extensions. diff --git a/.changeset/tidy-garlics-boil.md b/.changeset/tidy-garlics-boil.md new file mode 100644 index 00000000000..b885d2e8606 --- /dev/null +++ b/.changeset/tidy-garlics-boil.md @@ -0,0 +1,5 @@ +--- +'@clerk/chrome-extension': major +--- + +Consume packages with remotely hosted code removed as required by Manifest v3. diff --git a/packages/chrome-extension/src/background/clerk.ts b/packages/chrome-extension/src/background/clerk.ts index 6f75d4a8025..c77b4722651 100644 --- a/packages/chrome-extension/src/background/clerk.ts +++ b/packages/chrome-extension/src/background/clerk.ts @@ -1,4 +1,4 @@ -import { Clerk } from '@clerk/clerk-js'; +import { Clerk } from '@clerk/clerk-js/no-rhc'; import { createClerkClient as _createClerkClient, @@ -6,10 +6,11 @@ import { } from '../internal'; import { SCOPE } from '../types'; +Clerk.mountComponentRenderer = undefined; + export type CreateClerkClientOptions = Omit<_CreateClerkClientOptions, 'scope'>; export async function createClerkClient(opts: CreateClerkClientOptions): Promise { - Clerk.mountComponentRenderer = undefined; const clerk = await _createClerkClient({ ...opts, scope: SCOPE.BACKGROUND }); await clerk.load({ standardBrowser: false }); return clerk; diff --git a/packages/chrome-extension/src/internal/clerk.ts b/packages/chrome-extension/src/internal/clerk.ts index 6b134503669..0fe5df00d1d 100644 --- a/packages/chrome-extension/src/internal/clerk.ts +++ b/packages/chrome-extension/src/internal/clerk.ts @@ -1,4 +1,4 @@ -import { Clerk } from '@clerk/clerk-js'; +import { Clerk } from '@clerk/clerk-js/no-rhc'; import { DEV_BROWSER_JWT_KEY } from '@clerk/shared/devBrowser'; import { parsePublishableKey } from '@clerk/shared/keys'; import browser from 'webextension-polyfill'; @@ -32,6 +32,10 @@ export async function createClerkClient({ storageCache = BrowserStorageCache, syncHost, }: CreateClerkClientOptions): Promise { + if (scope === SCOPE.BACKGROUND) { + Clerk.mountComponentRenderer = undefined; + } + // Don't cache background scripts as it can result in out-of-sync client information. if (clerk && scope !== SCOPE.BACKGROUND) { return clerk; diff --git a/packages/chrome-extension/src/react/ClerkProvider.tsx b/packages/chrome-extension/src/react/ClerkProvider.tsx index 3c174bc90a4..8127a36d01a 100644 --- a/packages/chrome-extension/src/react/ClerkProvider.tsx +++ b/packages/chrome-extension/src/react/ClerkProvider.tsx @@ -1,4 +1,4 @@ -import type { Clerk } from '@clerk/clerk-js'; +import type { Clerk } from '@clerk/clerk-js/no-rhc'; import type { ClerkProviderProps as ClerkReactProviderProps } from '@clerk/clerk-react'; import { ClerkProvider as ClerkReactProvider } from '@clerk/clerk-react'; import React from 'react'; diff --git a/packages/chrome-extension/tsup.config.ts b/packages/chrome-extension/tsup.config.ts index a7f6237ea5a..0f8d5d72ae7 100644 --- a/packages/chrome-extension/tsup.config.ts +++ b/packages/chrome-extension/tsup.config.ts @@ -2,7 +2,6 @@ import type { Options } from 'tsup'; import { defineConfig } from 'tsup'; import { runAfterLast } from '../../scripts/utils'; -// @ts-ignore import { name, version } from './package.json'; export default defineConfig(overrideOptions => { @@ -10,16 +9,20 @@ export default defineConfig(overrideOptions => { const shouldPublish = !!overrideOptions.env?.publish; const common: Options = { - entry: ['./src/index.ts', './src/background/index.ts', './src/internal/index.ts', './src/react/index.ts'], + entry: ['./src/index.ts', './src/background/index.ts', './src/react/index.ts'], bundle: true, clean: true, minify: false, sourcemap: true, legacyOutput: true, + treeshake: true, + noExternal: ['@clerk/clerk-react'], + external: ['use-sync-external-store'], define: { PACKAGE_NAME: `"${name}"`, PACKAGE_VERSION: `"${version}"`, __DEV__: `${isWatch}`, + __BUILD_ENABLE_RHC__: 'false', }, }; diff --git a/packages/clerk-js/no-rhc/index.d.ts b/packages/clerk-js/no-rhc/index.d.ts new file mode 100644 index 00000000000..e2e71077761 --- /dev/null +++ b/packages/clerk-js/no-rhc/index.d.ts @@ -0,0 +1,3 @@ +export { Clerk } from '../dist/types/index'; + +export * from '../dist/types/index'; diff --git a/packages/clerk-js/no-rhc/index.js b/packages/clerk-js/no-rhc/index.js new file mode 100644 index 00000000000..f29fe6cfcfa --- /dev/null +++ b/packages/clerk-js/no-rhc/index.js @@ -0,0 +1 @@ +module.exports = require('../dist/clerk.no-rhc'); diff --git a/packages/clerk-js/package.json b/packages/clerk-js/package.json index 3421a691013..1dbcb32ab4c 100644 --- a/packages/clerk-js/package.json +++ b/packages/clerk-js/package.json @@ -27,7 +27,8 @@ "types": "dist/types/index.d.ts", "files": [ "dist", - "headless" + "headless", + "no-rhc" ], "scripts": { "build": "pnpm build:bundle && pnpm build:declarations", diff --git a/packages/clerk-js/rspack.config.js b/packages/clerk-js/rspack.config.js index 2f17f5cd940..16f9d29b2a4 100644 --- a/packages/clerk-js/rspack.config.js +++ b/packages/clerk-js/rspack.config.js @@ -11,6 +11,7 @@ const isDevelopment = mode => !isProduction(mode); const variants = { clerk: 'clerk', + clerkNoRHC: 'clerk.no-rhc', // Omit Remotely Hosted Code clerkBrowser: 'clerk.browser', clerkHeadless: 'clerk.headless', clerkHeadlessBrowser: 'clerk.headless.browser', @@ -18,6 +19,7 @@ const variants = { const variantToSourceFile = { [variants.clerk]: './src/index.ts', + [variants.clerkNoRHC]: './src/index.ts', [variants.clerkBrowser]: './src/index.browser.ts', [variants.clerkHeadless]: './src/index.headless.ts', [variants.clerkHeadlessBrowser]: './src/index.headless.browser.ts', @@ -27,9 +29,10 @@ const variantToSourceFile = { * * @param {object} config * @param {'development'|'production'} config.mode + * @param {boolean} [config.rhc=true] * @returns { import('@rspack/cli').Configuration } */ -const common = ({ mode }) => { +const common = ({ mode, rhc = true }) => { return { mode, resolve: { @@ -39,6 +42,7 @@ const common = ({ mode }) => { }, plugins: [ new rspack.DefinePlugin({ + __BUILD_ENABLE_RHC__: JSON.stringify(rhc), __DEV__: isDevelopment(mode), __PKG_VERSION__: JSON.stringify(packageJSON.version), __PKG_NAME__: JSON.stringify(packageJSON.name), @@ -400,12 +404,63 @@ const prodConfig = ({ mode, env, analysis }) => { }, }); + const clerkEsmNoRHC = merge( + entryForVariant(variants.clerkNoRHC), + common({ mode, rhc: false }), + commonForProd(), + commonForProdBundled(), + { + experiments: { + outputModule: true, + }, + output: { + filename: '[name].mjs', + libraryTarget: 'module', + }, + plugins: [ + // Include the lazy chunks in the bundle as well + // so that the final bundle can be imported and bundled again + // by a different bundler, eg the webpack instance used by react-scripts + new rspack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + ], + optimization: { + splitChunks: false, + }, + }, + ); + + const clerkCjsNoRHC = merge( + entryForVariant(variants.clerkNoRHC), + common({ mode, rhc: false }), + commonForProd(), + commonForProdBundled(), + { + output: { + filename: '[name].js', + libraryTarget: 'commonjs', + }, + plugins: [ + // Include the lazy chunks in the bundle as well + // so that the final bundle can be imported and bundled again + // by a different bundler, eg the webpack instance used by react-scripts + new rspack.optimize.LimitChunkCountPlugin({ + maxChunks: 1, + }), + ], + optimization: { + splitChunks: false, + }, + }, + ); + // webpack-bundle-analyzer only supports a single build, use clerkBrowser as that's the default build we serve if (analysis) { return [clerkBrowser]; } - return [clerkBrowser, clerkHeadless, clerkHeadlessBrowser, clerkEsm, clerkCjs]; + return [clerkBrowser, clerkHeadless, clerkHeadlessBrowser, clerkEsm, clerkEsmNoRHC, clerkCjs, clerkCjsNoRHC]; }; /** @@ -478,12 +533,24 @@ const devConfig = ({ mode, env }) => { common({ mode }), commonForDev(), ), + // prettier-ignore + [variants.clerkBrowserNoRHC]: merge( + entryForVariant(variants.clerkBrowserNoRHC), + common({ mode, rhc: false }), + commonForDev(), + ), [variants.clerkHeadless]: merge( entryForVariant(variants.clerkHeadless), common({ mode }), commonForDev(), // externalsForHeadless(), ), + [variants.clerkHeadlessNoRHC]: merge( + entryForVariant(variants.clerkHeadlessNoRHC), + common({ mode, rhc: false }), + commonForDev(), + // externalsForHeadless(), + ), [variants.clerkHeadlessBrowser]: merge( entryForVariant(variants.clerkHeadlessBrowser), common({ mode }), diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 21f43e6ee6e..a1e5b06eae4 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1486,21 +1486,25 @@ export class Clerk implements ClerkInterface { public authenticateWithGoogleOneTap = async ( params: AuthenticateWithGoogleOneTapParams, ): Promise => { - return this.client?.signIn - .create({ - strategy: 'google_one_tap', - token: params.token, - }) - .catch(err => { - if (isClerkAPIResponseError(err) && err.errors[0].code === 'external_account_not_found') { - return this.client?.signUp.create({ - strategy: 'google_one_tap', - token: params.token, - legalAccepted: params.legalAccepted, - }); - } - throw err; - }) as Promise; + if (__BUILD_ENABLE_RHC__) { + return this.client?.signIn + .create({ + strategy: 'google_one_tap', + token: params.token, + }) + .catch(err => { + if (isClerkAPIResponseError(err) && err.errors[0].code === 'external_account_not_found') { + return this.client?.signUp.create({ + strategy: 'google_one_tap', + token: params.token, + legalAccepted: params.legalAccepted, + }); + } + throw err; + }) as Promise; + } else { + throw new Error('Google One Tap authentication is not supported in this environment'); + } }; public authenticateWithMetamask = async (props: AuthenticateWithMetamaskParams = {}): Promise => { @@ -1519,47 +1523,51 @@ export class Clerk implements ClerkInterface { strategy, legalAccepted, }: ClerkAuthenticateWithWeb3Params): Promise => { - if (!this.client || !this.environment) { - return; - } - const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - const identifier = await getWeb3Identifier({ provider }); - const generateSignature = - provider === 'metamask' ? generateSignatureWithMetamask : generateSignatureWithCoinbaseWallet; + if (__BUILD_ENABLE_RHC__) { + if (!this.client || !this.environment) { + return; + } + const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; + const identifier = await getWeb3Identifier({ provider }); + const generateSignature = + provider === 'metamask' ? generateSignatureWithMetamask : generateSignatureWithCoinbaseWallet; - const navigate = (to: string) => - customNavigate && typeof customNavigate === 'function' ? customNavigate(to) : this.navigate(to); + const navigate = (to: string) => + customNavigate && typeof customNavigate === 'function' ? customNavigate(to) : this.navigate(to); - let signInOrSignUp: SignInResource | SignUpResource; - try { - signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ identifier, generateSignature, strategy }); - } catch (err) { - if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { - signInOrSignUp = await this.client.signUp.authenticateWithWeb3({ - identifier, - generateSignature, - unsafeMetadata, - strategy, - legalAccepted, - }); + let signInOrSignUp: SignInResource | SignUpResource; + try { + signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ identifier, generateSignature, strategy }); + } catch (err) { + if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { + signInOrSignUp = await this.client.signUp.authenticateWithWeb3({ + identifier, + generateSignature, + unsafeMetadata, + strategy, + legalAccepted, + }); - if ( - signUpContinueUrl && - signInOrSignUp.status === 'missing_requirements' && - signInOrSignUp.verifications.web3Wallet.status === 'verified' - ) { - await navigate(signUpContinueUrl); + if ( + signUpContinueUrl && + signInOrSignUp.status === 'missing_requirements' && + signInOrSignUp.verifications.web3Wallet.status === 'verified' + ) { + await navigate(signUpContinueUrl); + } + } else { + throw err; } - } else { - throw err; } - } - if (signInOrSignUp.createdSessionId) { - await this.setActive({ - session: signInOrSignUp.createdSessionId, - redirectUrl, - }); + if (signInOrSignUp.createdSessionId) { + await this.setActive({ + session: signInOrSignUp.createdSessionId, + redirectUrl, + }); + } + } else { + throw new Error('Web3 authentication is not supported in this environment'); } }; diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 48bfb57ce29..211527bd39c 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -237,67 +237,82 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithWeb3 = async (params: AuthenticateWithWeb3Params): Promise => { - const { identifier, generateSignature, strategy = 'web3_metamask_signature' } = params || {}; - const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; + if (__BUILD_ENABLE_RHC__) { + const { identifier, generateSignature, strategy = 'web3_metamask_signature' } = params || {}; + const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - if (!(typeof generateSignature === 'function')) { - clerkMissingOptionError('generateSignature'); - } + if (!(typeof generateSignature === 'function')) { + clerkMissingOptionError('generateSignature'); + } - await this.create({ identifier }); + await this.create({ identifier }); - const web3FirstFactor = this.supportedFirstFactors?.find(f => f.strategy === strategy) as Web3SignatureFactor; + const web3FirstFactor = this.supportedFirstFactors?.find(f => f.strategy === strategy) as Web3SignatureFactor; - if (!web3FirstFactor) { - clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); - } + if (!web3FirstFactor) { + clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); + } - await this.prepareFirstFactor(web3FirstFactor); + await this.prepareFirstFactor(web3FirstFactor); - const { message } = this.firstFactorVerification; - if (!message) { - clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); - } + const { message } = this.firstFactorVerification; + if (!message) { + clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); + } - let signature: string; - try { - signature = await generateSignature({ identifier, nonce: message, 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 - // reason we retry the request once more in order for the flow to be able to be completed successfully. - // - // 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) { + let signature: string; + try { signature = await generateSignature({ identifier, nonce: message, provider }); - } else { - throw err; + } 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 + // reason we retry the request once more in order for the flow to be able to be completed successfully. + // + // 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 }); + } else { + throw err; + } } - } - return this.attemptFirstFactor({ - signature, - strategy, - }); + return this.attemptFirstFactor({ + signature, + strategy, + }); + } else { + console.warn('Web3 is not supported in this environment'); + return this; + } }; public authenticateWithMetamask = async (): Promise => { - const identifier = await getMetamaskIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithMetamask, - strategy: 'web3_metamask_signature', - }); + if (__BUILD_ENABLE_RHC__) { + const identifier = await getMetamaskIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithMetamask, + strategy: 'web3_metamask_signature', + }); + } else { + console.warn('Metamask is not supported in this environment'); + return this; + } }; public authenticateWithCoinbaseWallet = async (): Promise => { - const identifier = await getCoinbaseWalletIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithCoinbaseWallet, - strategy: 'web3_coinbase_wallet_signature', - }); + if (__BUILD_ENABLE_RHC__) { + const identifier = await getCoinbaseWalletIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithCoinbaseWallet, + strategy: 'web3_coinbase_wallet_signature', + }); + } else { + console.warn('Coinbase Wallet is not supported in this environment'); + return this; + } }; public authenticateWithPasskey = async (params?: AuthenticateWithPasskeyParams): Promise => { diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 85b123ca343..53d9e1dfb57 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -79,31 +79,41 @@ export class SignUp extends BaseResource implements SignUpResource { create = async (params: SignUpCreateParams): Promise => { const paramsWithCaptcha: Record = params; - const { captchaSiteKey, canUseCaptcha, captchaURL, captchaWidgetType, captchaProvider, captchaPublicKeyInvisible } = - retrieveCaptchaInfo(SignUp.clerk); - if ( - !this.shouldBypassCaptchaForAttempt(params) && - canUseCaptcha && - captchaSiteKey && - captchaURL && - captchaPublicKeyInvisible - ) { - try { - const captchaParams = await getCaptchaToken({ - siteKey: captchaSiteKey, - widgetType: captchaWidgetType, - invisibleSiteKey: captchaPublicKeyInvisible, - scriptUrl: captchaURL, - captchaProvider, - }); - paramsWithCaptcha.captchaToken = captchaParams.captchaToken; - paramsWithCaptcha.captchaWidgetType = captchaParams.captchaWidgetType; - } catch (e) { - if (e.captchaError) { - paramsWithCaptcha.captchaError = e.captchaError; - } else { - throw new ClerkRuntimeError(e.message, { code: 'captcha_unavailable' }); + if (__BUILD_ENABLE_RHC__) { + const { + captchaSiteKey, + canUseCaptcha, + captchaURL, + captchaWidgetType, + captchaProvider, + captchaPublicKeyInvisible, + } = retrieveCaptchaInfo(SignUp.clerk); + + if ( + !this.shouldBypassCaptchaForAttempt(params) && + canUseCaptcha && + captchaSiteKey && + captchaURL && + captchaPublicKeyInvisible + ) { + try { + const captchaParams = await getCaptchaToken({ + siteKey: captchaSiteKey, + widgetType: captchaWidgetType, + invisibleSiteKey: captchaPublicKeyInvisible, + scriptUrl: captchaURL, + captchaProvider, + }); + + paramsWithCaptcha.captchaToken = captchaParams.captchaToken; + paramsWithCaptcha.captchaWidgetType = captchaParams.captchaWidgetType; + } catch (e) { + if (e.captchaError) { + paramsWithCaptcha.captchaError = e.captchaError; + } else { + throw new ClerkRuntimeError(e.message, { code: 'captcha_unavailable' }); + } } } } @@ -196,47 +206,52 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - const { - generateSignature, - identifier, - unsafeMetadata, - strategy = 'web3_metamask_signature', - legalAccepted, - } = params || {}; - const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - - if (!(typeof generateSignature === 'function')) { - clerkMissingOptionError('generateSignature'); - } + if (__BUILD_ENABLE_RHC__) { + const { + generateSignature, + identifier, + unsafeMetadata, + strategy = 'web3_metamask_signature', + legalAccepted, + } = params || {}; + const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - const web3Wallet = identifier || this.web3wallet!; - await this.create({ web3Wallet, unsafeMetadata, legalAccepted }); - await this.prepareWeb3WalletVerification({ strategy }); + if (!(typeof generateSignature === 'function')) { + clerkMissingOptionError('generateSignature'); + } - const { message } = this.verifications.web3Wallet; - if (!message) { - clerkVerifyWeb3WalletCalledBeforeCreate('SignUp'); - } + const web3Wallet = identifier || this.web3wallet!; + await this.create({ web3Wallet, unsafeMetadata, legalAccepted }); + await this.prepareWeb3WalletVerification({ strategy }); - let signature: string; - try { - signature = await generateSignature({ identifier, nonce: message, provider }); - } 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 - // signature request to be rejected. For this reason we retry the request once more - // in order for the flow to be able to be completed successfully. - // - // 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) { + const { message } = this.verifications.web3Wallet; + if (!message) { + clerkVerifyWeb3WalletCalledBeforeCreate('SignUp'); + } + + let signature: string; + try { signature = await generateSignature({ identifier, nonce: message, provider }); - } else { - throw err; + } 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 + // signature request to be rejected. For this reason we retry the request once more + // in order for the flow to be able to be completed successfully. + // + // 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 }); + } else { + throw err; + } } - } - return this.attemptWeb3WalletVerification({ signature, strategy }); + return this.attemptWeb3WalletVerification({ signature, strategy }); + } else { + console.warn('Web3 is not enabled in this environment'); + return this; + } }; public authenticateWithMetamask = async ( @@ -244,14 +259,19 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - const identifier = await getMetamaskIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithMetamask, - unsafeMetadata: params?.unsafeMetadata, - strategy: 'web3_metamask_signature', - legalAccepted: params?.legalAccepted, - }); + if (__BUILD_ENABLE_RHC__) { + const identifier = await getMetamaskIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithMetamask, + unsafeMetadata: params?.unsafeMetadata, + strategy: 'web3_metamask_signature', + legalAccepted: params?.legalAccepted, + }); + } else { + console.warn('Metamask is not enabled in this environment'); + return this; + } }; public authenticateWithCoinbaseWallet = async ( @@ -259,14 +279,19 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - const identifier = await getCoinbaseWalletIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithCoinbaseWallet, - unsafeMetadata: params?.unsafeMetadata, - strategy: 'web3_coinbase_wallet_signature', - legalAccepted: params?.legalAccepted, - }); + if (__BUILD_ENABLE_RHC__) { + const identifier = await getCoinbaseWalletIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithCoinbaseWallet, + unsafeMetadata: params?.unsafeMetadata, + strategy: 'web3_coinbase_wallet_signature', + legalAccepted: params?.legalAccepted, + }); + } else { + console.warn('Coinbase Wallet is not enabled in this environment'); + return this; + } }; public authenticateWithRedirect = async ({ diff --git a/packages/clerk-js/src/globals.d.ts b/packages/clerk-js/src/globals.d.ts index 26ef5a8a3c2..97632ce2f46 100644 --- a/packages/clerk-js/src/globals.d.ts +++ b/packages/clerk-js/src/globals.d.ts @@ -2,6 +2,7 @@ declare global { const __DEV__: boolean; const __PKG_NAME__: string; const __PKG_VERSION__: string; + const __BUILD_ENABLE_RHC__: string; interface Window { __unstable__onBeforeSetActive: () => Promise | void; diff --git a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx index 9d612da1e70..e43f42a0a78 100644 --- a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx +++ b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx @@ -33,16 +33,23 @@ function _OneTapStart(): JSX.Element | null { const shouldLoadGIS = !user?.id && !!environmentClientID; async function initializeGIS() { - const google = await loadGIS(); - google.accounts.id.initialize({ - client_id: environmentClientID!, - callback: oneTapCallback, - itp_support: ctx.itpSupport, - cancel_on_tap_outside: ctx.cancelOnTapOutside, - auto_select: false, - use_fedcm_for_prompt: ctx.fedCmSupport, - }); - return google; + if (__BUILD_ENABLE_RHC__) { + const google = await loadGIS(); + + google.accounts.id.initialize({ + client_id: environmentClientID!, + callback: oneTapCallback, + itp_support: ctx.itpSupport, + cancel_on_tap_outside: ctx.cancelOnTapOutside, + auto_select: false, + use_fedcm_for_prompt: ctx.fedCmSupport, + }); + + return google; + } + + console.warn('Google Identity Services is not enabled in this environment'); + return undefined; } /** diff --git a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts index 68058d407ce..d95e834bd84 100644 --- a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts +++ b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts @@ -1,4 +1,10 @@ import { getTurnstileToken } from './turnstile'; import type { CaptchaOptions } from './types'; -export const getCaptchaToken = (opts: CaptchaOptions) => getTurnstileToken(opts); +export const getCaptchaToken = (opts: CaptchaOptions) => { + if (__BUILD_ENABLE_RHC__) { + return getTurnstileToken(opts); + } else { + throw new Error('Captcha is not supported in this environment'); + } +}; diff --git a/packages/clerk-js/src/utils/index.ts b/packages/clerk-js/src/utils/index.ts index cdffa71c21c..892275e1cdf 100644 --- a/packages/clerk-js/src/utils/index.ts +++ b/packages/clerk-js/src/utils/index.ts @@ -1,4 +1,5 @@ export * from './beforeUnloadTracker'; +export * from './completeSignUpFlow'; export * from './componentGuards'; export * from './dynamicParamParser'; export * from './email'; @@ -6,11 +7,13 @@ export * from './encoders'; export * from './errors'; export * from './errorThrower'; export * from './getClerkQueryParam'; -export * from './getClerkQueryParam'; export * from './hex'; export * from './ignoreEventValue'; +export * from './image'; export * from './instance'; export * from './jwt'; +export * from './normalizeRoutingOptions'; +export * from './organization'; export * from './pageLifecycle'; export * from './path'; export * from './props'; @@ -20,9 +23,3 @@ export * from './runtime'; export * from './url'; export * from './web3'; export * from './windowNavigate'; -export * from './componentGuards'; -export * from './queryStateParams'; -export * from './normalizeRoutingOptions'; -export * from './image'; -export * from './completeSignUpFlow'; -export * from './organization'; diff --git a/packages/react/src/globals.d.ts b/packages/react/src/globals.d.ts index 35c17622984..61103655a8c 100644 --- a/packages/react/src/globals.d.ts +++ b/packages/react/src/globals.d.ts @@ -5,4 +5,5 @@ declare global { const PACKAGE_VERSION: string; const JS_PACKAGE_VERSION: string; const __DEV__: boolean; + const __BUILD_ENABLE_RHC__: string; } diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 40c865118d9..a1c6d71206f 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -60,6 +60,11 @@ import type { } from './types'; import { isConstructor } from './utils'; +if (typeof __BUILD_ENABLE_RHC__ === 'undefined') { + // @ts-expect-error -- TODO: Fix typing + globalThis.__BUILD_ENABLE_RHC__ = true; +} + const SDK_METADATA = { name: PACKAGE_NAME, version: PACKAGE_VERSION, @@ -462,22 +467,24 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { global.Clerk = c; } else { - // Hot-load latest ClerkJS from Clerk CDN - if (!global.Clerk) { - await loadClerkJsScript({ - ...this.options, - publishableKey: this.#publishableKey, - proxyUrl: this.proxyUrl, - domain: this.domain, - nonce: this.options.nonce, - }); - } + if (__BUILD_ENABLE_RHC__) { + // Hot-load latest ClerkJS from Clerk CDN + if (!global.Clerk) { + await loadClerkJsScript({ + ...this.options, + publishableKey: this.#publishableKey, + proxyUrl: this.proxyUrl, + domain: this.domain, + nonce: this.options.nonce, + }); + } - if (!global.Clerk) { - throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.'); - } + if (!global.Clerk) { + throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.'); + } - await global.Clerk.load(this.options); + await global.Clerk.load(this.options); + } } if (global.Clerk?.loaded) { @@ -1118,37 +1125,53 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { }; authenticateWithMetamask = async (params: AuthenticateWithMetamaskParams): Promise => { - const callback = () => this.clerkjs?.authenticateWithMetamask(params); - if (this.clerkjs && this.#loaded) { - return callback() as Promise; + if (__BUILD_ENABLE_RHC__) { + const callback = () => this.clerkjs?.authenticateWithMetamask(params); + if (this.clerkjs && this.#loaded) { + return callback() as Promise; + } else { + this.premountMethodCalls.set('authenticateWithMetamask', callback); + } } else { - this.premountMethodCalls.set('authenticateWithMetamask', callback); + console.warn('Metamask authentication is not supported in this environment'); } }; authenticateWithCoinbaseWallet = async (params: AuthenticateWithCoinbaseWalletParams): Promise => { - const callback = () => this.clerkjs?.authenticateWithCoinbaseWallet(params); - if (this.clerkjs && this.#loaded) { - return callback() as Promise; + if (__BUILD_ENABLE_RHC__) { + const callback = () => this.clerkjs?.authenticateWithCoinbaseWallet(params); + if (this.clerkjs && this.#loaded) { + return callback() as Promise; + } else { + this.premountMethodCalls.set('authenticateWithCoinbaseWallet', callback); + } } else { - this.premountMethodCalls.set('authenticateWithCoinbaseWallet', callback); + console.warn('Coinbase Wallet authentication is not supported in this environment'); } }; authenticateWithWeb3 = async (params: ClerkAuthenticateWithWeb3Params): Promise => { - const callback = () => this.clerkjs?.authenticateWithWeb3(params); - if (this.clerkjs && this.#loaded) { - return callback() as Promise; + if (__BUILD_ENABLE_RHC__) { + const callback = () => this.clerkjs?.authenticateWithWeb3(params); + if (this.clerkjs && this.#loaded) { + return callback() as Promise; + } else { + this.premountMethodCalls.set('authenticateWithWeb3', callback); + } } else { - this.premountMethodCalls.set('authenticateWithWeb3', callback); + console.warn('Web3 authentication is not supported in this environment'); } }; authenticateWithGoogleOneTap = async ( params: AuthenticateWithGoogleOneTapParams, ): Promise => { - const clerkjs = await this.#waitForClerkJS(); - return clerkjs.authenticateWithGoogleOneTap(params); + if (__BUILD_ENABLE_RHC__) { + const clerkjs = await this.#waitForClerkJS(); + return clerkjs.authenticateWithGoogleOneTap(params); + } else { + console.warn('Google One Tap authentication is not supported in this environment'); + } }; createOrganization = async (params: CreateOrganizationParams): Promise => { diff --git a/playground/browser-extension/assets/icon.png b/playground/browser-extension/assets/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cfd931be9f3312acf4042d8dfe6be4d4f2b74b87 GIT binary patch literal 79750 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®#@um)NH>6r=Ese1ao~VfxaI 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' react-dom: '>=18' - '@clerk/clerk-js@5.29.1': - resolution: {integrity: sha512-2SwhoKHnGLiG1pgRxYkMzLzuLEuoS0l3KzYYC1D9EHxQ9s6ei2ZWlKxUQmw/WQSuAhQ669/g0KVNMvUo++cicA==} - engines: {node: '>=18.17.0'} - peerDependencies: - react: '>=18' - react-dom: '>=18' - - '@clerk/clerk-js@file:../../packages/clerk-js': - resolution: {directory: ../../packages/clerk-js, type: directory} + '@clerk/clerk-js@5.31.2': + resolution: {integrity: sha512-+pPQSQD9I0C/802wL7d8sFiDqtZl2ZM2WbD7vJ3CYBANjI93iUAwPYH+cqvq1X5QusjCyUQUH/bvIGh/rdSXuw==} engines: {node: '>=18.17.0'} peerDependencies: react: '>=18' react-dom: '>=18' - '@clerk/clerk-react@5.13.1': - resolution: {integrity: sha512-d+6RhRdSIGZpZhrn/f4ZPpx+ZfXCWDV8DFFvCzXjkNqeJDmCBWOeUYNHM5Ag2pXWp+wl0dU7C9qxgSLwrh7rvQ==} - engines: {node: '>=18.17.0'} - peerDependencies: - react: '>=18 || >=19.0.0-beta' - react-dom: '>=18 || >=19.0.0-beta' - - '@clerk/clerk-react@file:../../packages/react': - resolution: {directory: ../../packages/react, type: directory} + '@clerk/clerk-react@5.15.1': + resolution: {integrity: sha512-p6PLh6SBREEknCzi4I2pyYXRy0OLS7bJ4X9flW1877evYJgyJuirBf8j/RTWg5YzCbVx+GPiZhdlZSCNzH+5Cg==} engines: {node: '>=18.17.0'} peerDependencies: - react: '>=18 || >=19.0.0-beta' - react-dom: '>=18 || >=19.0.0-beta' - - '@clerk/localizations@3.4.0': - resolution: {integrity: sha512-RrlumDVyKWtOEMqzWsIF+cRVr3FQAVYWW99dXUsKtSF92G3HtbMCp9c8ysMyHxR/K31tweb8Ut29cB8nBcKQyQ==} - engines: {node: '>=18.17.0'} + react: ^18 || ^19.0.0-0 + react-dom: ^18 || ^19.0.0-0 - '@clerk/localizations@file:../../packages/localizations': - resolution: {directory: ../../packages/localizations, type: directory} + '@clerk/localizations@3.5.0': + resolution: {integrity: sha512-YlAYE1020N1qvVDdHZ97H9P0y0UTf4pEzE6gWNiWc53UPvlLfe3oKZaG+In56zpMIM2qf3zJJThNEu3ODTauSQ==} engines: {node: '>=18.17.0'} - '@clerk/shared@2.10.1': - resolution: {integrity: sha512-9dPuCcTd2qaK+YU9BiO5mPPnet9B38ZSp0gutnaUQmve9013qO0p9Lx7ympiPSulwkTG4NAfYxjr/pyIUUFqCQ==} + '@clerk/shared@2.11.5': + resolution: {integrity: sha512-GQiqKgIBhqnXfLmohNbDvTz8GNK/nYRSWciGArdezaB+w2q+QpQyo2v1Y7Bh6j608iKZCnc4jG4yxcAI/pRQDA==} engines: {node: '>=18.17.0'} peerDependencies: react: '>=18 || >=19.0.0-beta' @@ -208,28 +172,8 @@ packages: react-dom: optional: true - '@clerk/shared@file:../../packages/shared': - resolution: {directory: ../../packages/shared, type: directory} - engines: {node: '>=18.17.0'} - peerDependencies: - react: '>=18 || >=19.0.0-beta' - react-dom: '>=18 || >=19.0.0-beta' - peerDependenciesMeta: - react: - optional: true - react-dom: - optional: true - - '@clerk/themes@file:../../packages/themes': - resolution: {directory: ../../packages/themes, type: directory} - engines: {node: '>=18.17.0'} - - '@clerk/types@4.28.0': - resolution: {integrity: sha512-RPdrUs8HYfhXaZ0MOVBkzy7lilsU9lDVSC88a5o/cEMmTML+BTDfLHMlLG81kgvagSLCKKbl28iocb8y7stm1Q==} - engines: {node: '>=18.17.0'} - - '@clerk/types@file:../../packages/types': - resolution: {directory: ../../packages/types, type: directory} + '@clerk/types@4.30.0': + resolution: {integrity: sha512-/RLWXsz4yp9uFvJhDZDyZGRDyx3VdHRyPYQS7onhGVTY846X6iCzJVlMFzdpzW3PITxMBgCI9MjgKdH50vBPBA==} engines: {node: '>=18.17.0'} '@coinbase/wallet-sdk@4.0.4': @@ -897,8 +841,8 @@ packages: cpu: [arm64] os: [android] - '@parcel/watcher-android-arm64@2.4.1': - resolution: {integrity: sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==} + '@parcel/watcher-android-arm64@2.5.0': + resolution: {integrity: sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [android] @@ -909,8 +853,8 @@ packages: cpu: [arm64] os: [darwin] - '@parcel/watcher-darwin-arm64@2.4.1': - resolution: {integrity: sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==} + '@parcel/watcher-darwin-arm64@2.5.0': + resolution: {integrity: sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [darwin] @@ -921,14 +865,14 @@ packages: cpu: [x64] os: [darwin] - '@parcel/watcher-darwin-x64@2.4.1': - resolution: {integrity: sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==} + '@parcel/watcher-darwin-x64@2.5.0': + resolution: {integrity: sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [darwin] - '@parcel/watcher-freebsd-x64@2.4.1': - resolution: {integrity: sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==} + '@parcel/watcher-freebsd-x64@2.5.0': + resolution: {integrity: sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [freebsd] @@ -939,8 +883,14 @@ packages: cpu: [arm] os: [linux] - '@parcel/watcher-linux-arm-glibc@2.4.1': - resolution: {integrity: sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==} + '@parcel/watcher-linux-arm-glibc@2.5.0': + resolution: {integrity: sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.0': + resolution: {integrity: sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] @@ -951,8 +901,8 @@ packages: cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-glibc@2.4.1': - resolution: {integrity: sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==} + '@parcel/watcher-linux-arm64-glibc@2.5.0': + resolution: {integrity: sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] @@ -963,8 +913,8 @@ packages: cpu: [arm64] os: [linux] - '@parcel/watcher-linux-arm64-musl@2.4.1': - resolution: {integrity: sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==} + '@parcel/watcher-linux-arm64-musl@2.5.0': + resolution: {integrity: sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] @@ -975,8 +925,8 @@ packages: cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-glibc@2.4.1': - resolution: {integrity: sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==} + '@parcel/watcher-linux-x64-glibc@2.5.0': + resolution: {integrity: sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] @@ -987,8 +937,8 @@ packages: cpu: [x64] os: [linux] - '@parcel/watcher-linux-x64-musl@2.4.1': - resolution: {integrity: sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==} + '@parcel/watcher-linux-x64-musl@2.5.0': + resolution: {integrity: sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] @@ -999,14 +949,14 @@ packages: cpu: [arm64] os: [win32] - '@parcel/watcher-win32-arm64@2.4.1': - resolution: {integrity: sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==} + '@parcel/watcher-win32-arm64@2.5.0': + resolution: {integrity: sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [win32] - '@parcel/watcher-win32-ia32@2.4.1': - resolution: {integrity: sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==} + '@parcel/watcher-win32-ia32@2.5.0': + resolution: {integrity: sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA==} engines: {node: '>= 10.0.0'} cpu: [ia32] os: [win32] @@ -1017,8 +967,8 @@ packages: cpu: [x64] os: [win32] - '@parcel/watcher-win32-x64@2.4.1': - resolution: {integrity: sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==} + '@parcel/watcher-win32-x64@2.5.0': + resolution: {integrity: sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [win32] @@ -1027,8 +977,8 @@ packages: resolution: {integrity: sha512-71S4TF+IMyAn24PK4KSkdKtqJDR3zRzb0HE3yXpacItqTM7XfF2f5q9NEGLEVl0dAaBAGfNwDCjH120y25F6Tg==} engines: {node: '>= 10.0.0'} - '@parcel/watcher@2.4.1': - resolution: {integrity: sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==} + '@parcel/watcher@2.5.0': + resolution: {integrity: sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ==} engines: {node: '>= 10.0.0'} '@parcel/workers@2.8.3': @@ -1205,8 +1155,8 @@ packages: '@plasmohq/parcel-config@0.41.1': resolution: {integrity: sha512-peNpm+F1tVIZmDx8Mca8b3769cxc2IWS7q0+0Y4BLT1+2kis7X4b46IAYgOXtsDRZCb9pvxQhRhrVHpwGtdVLg==} - '@plasmohq/parcel-core@0.1.9': - resolution: {integrity: sha512-xuWfArWo4O9+RCb8mdvxf+hFH5lldLnufXGFCXnqBMGvL/A/l1NvQjXjVKYoTnPeX+9iZd534rb/7v49BPayCg==} + '@plasmohq/parcel-core@0.1.10': + resolution: {integrity: sha512-XbJrqlgPNo+uQaukWayfRDZnAvdkYrmcydCOz0wfmuksTjDisyGkL3ZbWeX86QPN65CXFyou11/9h3+U9IsHfA==} engines: {parcel: '>= 2.7.0'} '@plasmohq/parcel-namer-manifest@0.3.12': @@ -1269,8 +1219,8 @@ packages: resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} - '@remix-run/router@1.20.0': - resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} + '@remix-run/router@1.21.0': + resolution: {integrity: sha512-xfSkCAchbdG5PnbrKqFWwia4Bi61nH+wm8wLEqfHDyp7Y3dZzgqS2itV8i4gAq9pC2HsTpwyBC6Ds8VHZ96JlA==} engines: {node: '>=14.0.0'} '@sindresorhus/is@5.6.0': @@ -1357,8 +1307,8 @@ packages: cpu: [arm64] os: [darwin] - '@swc/core-darwin-arm64@1.7.40': - resolution: {integrity: sha512-LRRrCiRJLb1kpQtxMNNsr5W82Inr0dy5Imho+4HQzVx/Ismi0qX4hQBgzJAnyOBNLK1+OBVb/912UVhKXppdfQ==} + '@swc/core-darwin-arm64@1.9.1': + resolution: {integrity: sha512-2/ncHSCdAh5OHem1fMITrWEzzl97OdMK1PHc9CkxSJnphLjRubfxB5sbc5tDhcO68a5tVy+DxwaBgDec3PXnOg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] @@ -1369,8 +1319,8 @@ packages: cpu: [x64] os: [darwin] - '@swc/core-darwin-x64@1.7.40': - resolution: {integrity: sha512-Lpl0XK/4fLzS5jsK48opUuGXrqJXwqJckYYPwyGbCfCXm4MsBe+7dX2hq/Kc4YMY25+NeTmzAXhla8TT4WYD/g==} + '@swc/core-darwin-x64@1.9.1': + resolution: {integrity: sha512-4MDOFC5zmNqRJ9RGFOH95oYf27J9HniLVpB1pYm2gGeNHdl2QvDMtx2QTuMHQ6+OTn/3y1BHYuhBGp7d405oLA==} engines: {node: '>=10'} cpu: [x64] os: [darwin] @@ -1381,8 +1331,8 @@ packages: cpu: [arm] os: [linux] - '@swc/core-linux-arm-gnueabihf@1.7.40': - resolution: {integrity: sha512-4bEvvjptpoc5BRPr/R419h6fXTEuub+frpxxlxBOEKxgXjAF/S3xdxyPijUAakmW/xXBF0u7OC4KYI+38yQp6g==} + '@swc/core-linux-arm-gnueabihf@1.9.1': + resolution: {integrity: sha512-eVW/BjRW8/HpLe3+1jRU7w7PdRLBgnEEYTkHJISU8805/EKT03xNZn6CfaBpKfeAloY4043hbGzE/NP9IahdpQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] @@ -1393,8 +1343,8 @@ packages: cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.40': - resolution: {integrity: sha512-v2fBlHJ/6Ovz0L2xFAI9TRiKyl9DTdx139PuAHD9gyzp16Utl/W0MPd4t2cYdkI6hPXE9PsJCSzMOrduh+YoDg==} + '@swc/core-linux-arm64-gnu@1.9.1': + resolution: {integrity: sha512-8m3u1v8R8NgI/9+cHMkzk14w87blSy3OsQPWPfhOL+XPwhyLPvat+ahQJb2nZmltjTgkB4IbzKFSfbuA34LmNA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1405,8 +1355,8 @@ packages: cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.40': - resolution: {integrity: sha512-uMkduQuU4LFVkW6txv8AVArT8GjJVJ5IHoWloXaUBMT447iE8NALmpePdZWhMyj6KV7j0y23CM5rzV/I2eNGLg==} + '@swc/core-linux-arm64-musl@1.9.1': + resolution: {integrity: sha512-hpT0sQAZnW8l02I289yeyFfT9llGO9PzKDxUq8pocKtioEHiElRqR53juCWoSmzuWi+6KX7zUJ0NKCBrc8pmDg==} engines: {node: '>=10'} cpu: [arm64] os: [linux] @@ -1417,8 +1367,8 @@ packages: cpu: [x64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.40': - resolution: {integrity: sha512-4LZdY1MBSnXyTpW5fpBU/+JGAhkuHT+VnFTDNegRboN5nSPh7y0Yvn4LmIioESV+sWzjKkEXujJPGjrp+oSp5w==} + '@swc/core-linux-x64-gnu@1.9.1': + resolution: {integrity: sha512-sGFdpdAYusk/ropHiwtXom2JrdaKPxl8MqemRv6dvxZq1Gm/GdmOowxdXIPjCgBGMgoXVcgNviH6CgiO5q+UtA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1429,8 +1379,8 @@ packages: cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.40': - resolution: {integrity: sha512-FPjOwT3SgI6PAwH1O8bhOGBPzuvzOlzKeCtxLaCjruHJu9V8KKBrMTWOZT/FJyYC9mX5Ip1+l9j30UqUZdQxtA==} + '@swc/core-linux-x64-musl@1.9.1': + resolution: {integrity: sha512-YtNLNwIWs0Z2+XgBs6+LrCIGtfCDtNr4S4b6Q5HDOreEIGzSvhkef8eyBI5L+fJ2eGov4b7iEo61C4izDJS5RA==} engines: {node: '>=10'} cpu: [x64] os: [linux] @@ -1441,8 +1391,8 @@ packages: cpu: [arm64] os: [win32] - '@swc/core-win32-arm64-msvc@1.7.40': - resolution: {integrity: sha512-//ovXdD9GsTmhPmXJlXnIbRQkeuL6PSrYSr7uCMNcclrUdJG0YkO0GMM2afUKYbdJcunylDDWsSS8PFWn0QxmA==} + '@swc/core-win32-arm64-msvc@1.9.1': + resolution: {integrity: sha512-qSxD3uZW2vSiHqUt30vUi0PB92zDh9bjqh5YKpfhhVa7h1vt/xXhlid8yMvSNToTfzhRrTEffOAPUr7WVoyQUA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] @@ -1453,8 +1403,8 @@ packages: cpu: [ia32] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.40': - resolution: {integrity: sha512-iD/1auVhHGlhWAPrWmfRWL3w4AvXIWGVXZiSA109/xnRIPiHKb/HqqTp/qB94E/ZHMPRgLKkLTNwamlkueUs8g==} + '@swc/core-win32-ia32-msvc@1.9.1': + resolution: {integrity: sha512-C3fPEwyX/WRPlX6zIToNykJuz1JkZX0sk8H1QH2vpnKuySUkt/Ur5K2FzLgSWzJdbfxstpgS151/es0VGAD+ZA==} engines: {node: '>=10'} cpu: [ia32] os: [win32] @@ -1465,8 +1415,8 @@ packages: cpu: [x64] os: [win32] - '@swc/core-win32-x64-msvc@1.7.40': - resolution: {integrity: sha512-ZlFAV1WFPhhWQ/8esiygmetkb905XIcMMtHRRG0FBGCllO+HVL5nikUaLDgTClz1onmEY9sMXUFQeoPtvliV+w==} + '@swc/core-win32-x64-msvc@1.9.1': + resolution: {integrity: sha512-2XZ+U1AyVsOAXeH6WK1syDm7+gwTjA8fShs93WcbxnK7HV+NigDlvr4124CeJLTHyh3fMh1o7+CnQnaBJhlysQ==} engines: {node: '>=10'} cpu: [x64] os: [win32] @@ -1480,8 +1430,8 @@ packages: '@swc/helpers': optional: true - '@swc/core@1.7.40': - resolution: {integrity: sha512-0HIzM5vigVT5IvNum+pPuST9p8xFhN6mhdIKju7qYYeNuZG78lwms/2d8WgjTJJlzp6JlPguXGrMMNzjQw0qNg==} + '@swc/core@1.9.1': + resolution: {integrity: sha512-OnPc+Kt5oy3xTvr/KCUOqE9ptJcWbyQgAUr1ydh9EmbBcmJTaO1kfQCxm/axzJi6sKeDTxL9rX5zvLOhoYIaQw==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1498,8 +1448,8 @@ packages: '@swc/types@0.1.12': resolution: {integrity: sha512-wBJA+SdtkbFhHjTMYH+dEH1y4VpfGdAc2Kw/LK09i9bXd/K6j6PkDcFCEzb6iVfZMkPRrl/q0e3toqTAJdkIVA==} - '@swc/types@0.1.13': - resolution: {integrity: sha512-JL7eeCk6zWCbiYQg2xQSdLXQJl8Qoc9rXmG2cEKvHe3CKwMHwHGpfOb8frzNLmbycOo6I51qxnLnn9ESf4I20Q==} + '@swc/types@0.1.14': + resolution: {integrity: sha512-PbSmTiYCN+GMrvfjrMo9bdY+f2COnwbdnoMw7rqU/PI5jXpKjxOGZ0qqZCImxnT81NkNsKnmEpvu+hRXLBeCJg==} '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} @@ -1509,8 +1459,8 @@ packages: resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} - '@types/chrome@0.0.279': - resolution: {integrity: sha512-wl0IxQ2OQiMazPZM5LimHQ7Jwd72/O8UvvzyptplXT2S4eUqXH5C0n8S+v8PtKhyX89p0igCPpNy3Bwksyk57g==} + '@types/chrome@0.0.280': + resolution: {integrity: sha512-AotSmZrL9bcZDDmSI1D9dE7PGbhOur5L0cKxXd7IqbVizQWCY4gcvupPUVsQ4FfDj3V2tt/iOpomT9EY0s+w1g==} '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -1542,8 +1492,8 @@ packages: '@types/react-dom@18.3.1': resolution: {integrity: sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==} - '@types/react@18.3.11': - resolution: {integrity: sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} '@types/trusted-types@2.0.7': resolution: {integrity: sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==} @@ -1592,6 +1542,9 @@ packages: abortcontroller-polyfill@1.7.5: resolution: {integrity: sha512-JMJ5soJWP18htbbxJjG7bG6yuI6pRhgJ0scHHTfkUjf6wjP912xZWvM+A4sJK3gqd9E8fcPbDnOefbA9Th/FIQ==} + abortcontroller-polyfill@1.7.6: + resolution: {integrity: sha512-Zypm+LjYdWAzvuypZvDN0smUJrhOurcuBWhhMRBExqVLRvdjp3Z9mASxKyq19K+meZMshwjjy5S0lkm388zE4Q==} + acorn@8.14.0: resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} @@ -1746,8 +1699,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001675: - resolution: {integrity: sha512-/wV1bQwPrkLiQMjaJF5yUMVM/VdRPOCU8QZ+PmG6uW6DvYSrNY1bpwHI/3mOcUosLaJCzYDi5o91IQB51ft6cg==} + caniuse-lite@1.0.30001678: + resolution: {integrity: sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -1869,6 +1822,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.5: + resolution: {integrity: sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==} + engines: {node: '>= 8'} + crypto-js@4.2.0: resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} @@ -1992,8 +1949,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.49: - resolution: {integrity: sha512-ZXfs1Of8fDb6z7WEYZjXpgIRF6MEu8JdeGA0A40aZq6OQbS+eJpnnV49epZRna2DU/YsEjSQuGtQPPtvt6J65A==} + electron-to-chromium@1.5.53: + resolution: {integrity: sha512-7F6qFMWzBArEFK4PLE+c+nWzhS1kIoNkQvGnNDogofxQAym+roQ0GUIdw6C/4YdJ6JKGp19c2a/DLcfKTi4wRQ==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2432,8 +2389,8 @@ packages: cpu: [arm64] os: [darwin] - lightningcss-darwin-arm64@1.27.0: - resolution: {integrity: sha512-Gl/lqIXY+d+ySmMbgDf0pgaWSqrWYxVHoc88q+Vhf2YNzZ8DwoRzGt5NZDVqqIW5ScpSnmmjcgXP87Dn2ylSSQ==} + lightningcss-darwin-arm64@1.28.1: + resolution: {integrity: sha512-VG3vvzM0m/rguCdm76DdobNeNJnHK+jWcdkNLFWHLh9YCotRvbRIt45JxwcHlIF8TDqWStVLTdghq5NaigVCBQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] @@ -2444,8 +2401,8 @@ packages: cpu: [x64] os: [darwin] - lightningcss-darwin-x64@1.27.0: - resolution: {integrity: sha512-0+mZa54IlcNAoQS9E0+niovhyjjQWEMrwW0p2sSdLRhLDc8LMQ/b67z7+B5q4VmjYCMSfnFi3djAAQFIDuj/Tg==} + lightningcss-darwin-x64@1.28.1: + resolution: {integrity: sha512-O7ORdislvKfMohFl4Iq7fxKqdJOuuxArcglVI3amuFO5DJ0wfV3Gxgi1JRo49slfr7OVzJQEHLG4muTWYM5cTQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] @@ -2456,8 +2413,8 @@ packages: cpu: [x64] os: [freebsd] - lightningcss-freebsd-x64@1.27.0: - resolution: {integrity: sha512-n1sEf85fePoU2aDN2PzYjoI8gbBqnmLGEhKq7q0DKLj0UTVmOTwDC7PtLcy/zFxzASTSBlVQYJUhwIStQMIpRA==} + lightningcss-freebsd-x64@1.28.1: + resolution: {integrity: sha512-b7sF89B31kYYijxVcFO7l5u6UNA862YstNu+3YbLl/IQKzveL4a5cwR5cdpG+OOhErg/c2u9WCmzZoX2I5GBvw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] @@ -2468,8 +2425,8 @@ packages: cpu: [arm] os: [linux] - lightningcss-linux-arm-gnueabihf@1.27.0: - resolution: {integrity: sha512-MUMRmtdRkOkd5z3h986HOuNBD1c2lq2BSQA1Jg88d9I7bmPGx08bwGcnB75dvr17CwxjxD6XPi3Qh8ArmKFqCA==} + lightningcss-linux-arm-gnueabihf@1.28.1: + resolution: {integrity: sha512-p61kXwvhUDLLzkWHjzSFfUBW/F0iy3jr3CWi3k8SKULtJEsJXTI9DqRm9EixxMSe2AMBQBt4auTYiQL4B1N51A==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] @@ -2480,8 +2437,8 @@ packages: cpu: [arm64] os: [linux] - lightningcss-linux-arm64-gnu@1.27.0: - resolution: {integrity: sha512-cPsxo1QEWq2sfKkSq2Bq5feQDHdUEwgtA9KaB27J5AX22+l4l0ptgjMZZtYtUnteBofjee+0oW1wQ1guv04a7A==} + lightningcss-linux-arm64-gnu@1.28.1: + resolution: {integrity: sha512-iO+fN9hOMmzfwqcG2/BgUtMKD48H2JO/SXU44fyIwpY2veb65QF5xiRrQ9l1FwIxbGK3231KBYCtAqv+xf+NsQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] @@ -2492,8 +2449,8 @@ packages: cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.27.0: - resolution: {integrity: sha512-rCGBm2ax7kQ9pBSeITfCW9XSVF69VX+fm5DIpvDZQl4NnQoMQyRwhZQm9pd59m8leZ1IesRqWk2v/DntMo26lg==} + lightningcss-linux-arm64-musl@1.28.1: + resolution: {integrity: sha512-dnMHeXEmCUzHHZjaDpQBYuBKcN9nPC3nPFKl70bcj5Bkn5EmkcgEqm5p035LKOgvAwk1XwLpQCML6pXmCwz0NQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] @@ -2504,8 +2461,8 @@ packages: cpu: [x64] os: [linux] - lightningcss-linux-x64-gnu@1.27.0: - resolution: {integrity: sha512-Dk/jovSI7qqhJDiUibvaikNKI2x6kWPN79AQiD/E/KeQWMjdGe9kw51RAgoWFDi0coP4jinaH14Nrt/J8z3U4A==} + lightningcss-linux-x64-gnu@1.28.1: + resolution: {integrity: sha512-7vWDISaMUn+oo2TwRdf2hl/BLdPxvywv9JKEqNZB/0K7bXwV4XE9wN/C2sAp1gGuh6QBA8lpjF4JIPt3HNlCHA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] @@ -2516,14 +2473,14 @@ packages: cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.27.0: - resolution: {integrity: sha512-QKjTxXm8A9s6v9Tg3Fk0gscCQA1t/HMoF7Woy1u68wCk5kS4fR+q3vXa1p3++REW784cRAtkYKrPy6JKibrEZA==} + lightningcss-linux-x64-musl@1.28.1: + resolution: {integrity: sha512-IHCu9tVGP+x5BCpA2rF3D04DBokcBza/a8AuHQU+1AiMKubuMegPwcL7RatBgK4ztFHeYnnD5NdhwhRfYMAtNA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.27.0: - resolution: {integrity: sha512-/wXegPS1hnhkeG4OXQKEMQeJd48RDC3qdh+OA8pCuOPCyvnm/yEayrJdJVqzBsqpy1aJklRCVxscpFur80o6iQ==} + lightningcss-win32-arm64-msvc@1.28.1: + resolution: {integrity: sha512-Erm72kHmMg/3h350PTseskz+eEGBM17Fuu79WW2Qqt0BfWSF1jHHc12lkJCWMYl5jcBHPs5yZdgNHtJ7IJS3Uw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] @@ -2534,8 +2491,8 @@ packages: cpu: [x64] os: [win32] - lightningcss-win32-x64-msvc@1.27.0: - resolution: {integrity: sha512-/OJLj94Zm/waZShL8nB5jsNj3CfNATLCTyFxZyouilfTmSoLDX7VlVAmhPHoZWVFp4vdmoiEbPEYC8HID3m6yw==} + lightningcss-win32-x64-msvc@1.28.1: + resolution: {integrity: sha512-ZPQtvx+uQBzrSdHH8p4H3M9Alue+x369TPZAA3b4K3d92FPhpZCuBG04+HQzspam9sVeID9mI6f3VRAs2ezaEA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] @@ -2544,8 +2501,8 @@ packages: resolution: {integrity: sha512-jEqaL7m/ZckZJjlMAfycr1Kpz7f93k6n7KGF5SJjuPSm6DWI6h3ayLZmgRHgy1OfrwoCed6h4C/gHYPOd1OFMA==} engines: {node: '>= 12.0.0'} - lightningcss@1.27.0: - resolution: {integrity: sha512-8f7aNmS1+etYSLHht0fQApPc2kNO8qGRutifN5rVIc6Xo6ABsEbqOr758UwI7ALVbTt4x1fllKt0PYgzD9S3yQ==} + lightningcss@1.28.1: + resolution: {integrity: sha512-KRDkHlLlNj3DWh79CDt93fPlRJh2W1AuHV0ZSZAMMuN7lqlsZTV5842idfS1urWG8q9tc17velp1gCXhY7sLnQ==} engines: {node: '>= 12.0.0'} lilconfig@2.1.0: @@ -2671,8 +2628,8 @@ packages: resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} hasBin: true - msgpackr@1.11.0: - resolution: {integrity: sha512-I8qXuuALqJe5laEBYoFykChhSXLikZmUhccjGsPuSJ/7uPip2TJ7lwdIQwWSAi0jGZDXv4WOP8Qg65QZRuXxXw==} + msgpackr@1.11.2: + resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==} msgpackr@1.8.5: resolution: {integrity: sha512-mpPs3qqTug6ahbblkThoUY2DQdNXcm4IapwOS3Vm/87vmpzLVelvp9h3It1y9l1VPpiFLV11vfOXnmeEwiIXwg==} @@ -2773,8 +2730,8 @@ packages: resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} engines: {node: '>=10'} - ordered-binary@1.5.2: - resolution: {integrity: sha512-JTo+4+4Fw7FreyAvlSLjb1BBVaxEQAacmjD3jjuyPZclpbEghTvQZbXBb2qPd2LeIMxiHwXBZUcpmG2Gl/mDEA==} + ordered-binary@1.5.3: + resolution: {integrity: sha512-oGFr3T+pYdTGJ+YFEILMpS3es+GiIbs9h/XQrclBXUtd44ey7XwfsMzM31f64I1SQOawDoDr/D823kNCADI8TA==} os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} @@ -2840,8 +2797,8 @@ packages: resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} engines: {node: '>= 6'} - plasmo@0.89.3: - resolution: {integrity: sha512-rBOv1fbNnhdfsDmI5XAMCvNmPwZsXWdcPU4lLH8I1PqXNDeyXCEJdiCLC+4LvB8V262a2UhHgvPwTW9Au4qAmQ==} + plasmo@0.89.4: + resolution: {integrity: sha512-vsoMe8ts0tyW27fZxwQLqWR/58NKqRepLFrZMVBH4ceSIyPDryfPpXzVxmBDH43odbiUVFdh8BGAt2ri2vQuGw==} hasBin: true postcss-import@15.1.0: @@ -2881,8 +2838,8 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.47: - resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} engines: {node: ^10 || ^12 || >=14} posthtml-parser@0.10.2: @@ -3024,15 +2981,15 @@ packages: resolution: {integrity: sha512-Gvzk7OZpiqKSkxsQvO/mbTN1poglhmAV7gR/DdIrRrSMXraRQQlfikRJOr3Nb9GTMPC5kof948Zy6jJZIFtDvQ==} engines: {node: '>=0.10.0'} - react-router-dom@6.27.0: - resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} + react-router-dom@6.28.0: + resolution: {integrity: sha512-kQ7Unsl5YdyOltsPGl31zOjLrDv+m2VcIEcIHqYYD3Lp0UppLjrzcfJqDJwXxFw3TH/yvapbnUvPlAj7Kx5nbg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' react-dom: '>=16.8' - react-router@6.27.0: - resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} + react-router@6.28.0: + resolution: {integrity: sha512-HrYdIFqdrnhDw0PqG/AKjAqEqM7AvxCz0DQ4h2W8k6nqmc5uRBYDag0SBxx9iYz5G8gnuNVLzUe13wl9eAsXXg==} engines: {node: '>=14.0.0'} peerDependencies: react: '>=16.8' @@ -3118,8 +3075,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sass@1.80.5: - resolution: {integrity: sha512-TQd2aoQl/+zsxRMEDSxVdpPIqeq9UFc6pr7PzkugiTx3VYCFPUaa3P4RrBQsqok4PO200Vkz0vXQBNlg7W907g==} + sass@1.80.6: + resolution: {integrity: sha512-ccZgdHNiBF1NHBsWvacvT5rju3y1d/Eu+8Ex6c21nHp2lZGLBEtuwc415QfiI1PJa1TpCo3iXwwSRjRpn2Ckjg==} engines: {node: '>=14.0.0'} hasBin: true @@ -3341,8 +3298,8 @@ packages: tslib@2.4.1: resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} - tslib@2.8.0: - resolution: {integrity: sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} tsup@7.2.0: resolution: {integrity: sha512-vDHlczXbgUvY3rWvqFEbSqmC1L7woozbzngMqTtL2PGBODTtWlRwGDDawhvWzr5c1QjKe4OAKqJGfE1xeXUvtQ==} @@ -3588,11 +3545,11 @@ snapshots: '@babel/helper-string-parser': 7.25.9 '@babel/helper-validator-identifier': 7.25.9 - '@clerk/chrome-extension@file:../../packages/chrome-extension(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/chrome-extension@file:../../packages/chrome-extension(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/clerk-js': 5.29.1(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/clerk-react': 5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/shared': 2.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/clerk-js': 5.31.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/clerk-react': 5.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/shared': 2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) webextension-polyfill: 0.10.0 @@ -3600,41 +3557,17 @@ snapshots: - '@types/react' - supports-color - '@clerk/clerk-js@5.29.1(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@clerk/localizations': 3.4.0 - '@clerk/shared': 2.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/types': 4.28.0 - '@coinbase/wallet-sdk': 4.0.4 - '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.1(@types/react@18.3.11)(react@18.3.1) - '@floating-ui/react': 0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@formkit/auto-animate': 0.8.2 - '@zxcvbn-ts/core': 3.0.4 - '@zxcvbn-ts/language-common': 3.0.4 - browser-tabs-lock: 1.2.15 - copy-to-clipboard: 3.3.3 - core-js: 3.26.1 - crypto-js: 4.2.0 - dequal: 2.0.3 - qrcode.react: 3.1.0(react@18.3.1) - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - regenerator-runtime: 0.13.11 - transitivePeerDependencies: - - '@types/react' - - supports-color - - '@clerk/clerk-js@file:../../packages/clerk-js(@types/react@18.3.11)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/clerk-js@5.31.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/localizations': 3.4.0 - '@clerk/shared': 2.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/types': 4.28.0 + '@clerk/localizations': 3.5.0 + '@clerk/shared': 2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.30.0 '@coinbase/wallet-sdk': 4.0.4 '@emotion/cache': 11.11.0 - '@emotion/react': 11.11.1(@types/react@18.3.11)(react@18.3.1) + '@emotion/react': 11.11.1(@types/react@18.3.12)(react@18.3.1) '@floating-ui/react': 0.25.4(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@formkit/auto-animate': 0.8.2 + '@swc/helpers': 0.5.13 '@zxcvbn-ts/core': 3.0.4 '@zxcvbn-ts/language-common': 3.0.4 browser-tabs-lock: 1.2.15 @@ -3650,33 +3583,21 @@ snapshots: - '@types/react' - supports-color - '@clerk/clerk-react@5.13.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@clerk/shared': 2.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/types': 4.28.0 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - tslib: 2.4.1 - - '@clerk/clerk-react@file:../../packages/react(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/clerk-react@5.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/shared': 2.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/types': 4.28.0 + '@clerk/shared': 2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.30.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.4.1 - '@clerk/localizations@3.4.0': - dependencies: - '@clerk/types': 4.28.0 - - '@clerk/localizations@file:../../packages/localizations': + '@clerk/localizations@3.5.0': dependencies: - '@clerk/types': 4.28.0 + '@clerk/types': 4.30.0 - '@clerk/shared@2.10.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/shared@2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/types': 4.28.0 + '@clerk/types': 4.30.0 glob-to-regexp: 0.4.1 js-cookie: 3.0.5 std-env: 3.7.0 @@ -3685,27 +3606,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@clerk/shared@file:../../packages/shared(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': - dependencies: - '@clerk/types': 4.28.0 - glob-to-regexp: 0.4.1 - js-cookie: 3.0.5 - std-env: 3.7.0 - swr: 2.2.5(react@18.3.1) - optionalDependencies: - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - - '@clerk/themes@file:../../packages/themes': - dependencies: - '@clerk/types': 4.28.0 - tslib: 2.4.1 - - '@clerk/types@4.28.0': - dependencies: - csstype: 3.1.1 - - '@clerk/types@file:../../packages/types': + '@clerk/types@4.30.0': dependencies: csstype: 3.1.1 @@ -3748,7 +3649,7 @@ snapshots: '@emotion/memoize@0.9.0': {} - '@emotion/react@11.11.1(@types/react@18.3.11)(react@18.3.1)': + '@emotion/react@11.11.1(@types/react@18.3.12)(react@18.3.1)': dependencies: '@babel/runtime': 7.26.0 '@emotion/babel-plugin': 11.12.0 @@ -3760,7 +3661,7 @@ snapshots: hoist-non-react-statics: 3.3.2 react: 18.3.1 optionalDependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 transitivePeerDependencies: - supports-color @@ -3852,7 +3753,7 @@ snapshots: '@expo/spawn-async@1.7.2': dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 '@floating-ui/core@1.6.8': dependencies: @@ -4044,14 +3945,14 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/config-default@2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)(postcss@8.4.47)(typescript@5.2.2)': + '@parcel/config-default@2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)(postcss@8.4.49)(typescript@5.2.2)': dependencies: '@parcel/bundler-default': 2.9.3(@parcel/core@2.9.3) '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) '@parcel/core': 2.9.3 '@parcel/namer-default': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-css': 2.9.3(@parcel/core@2.9.3) - '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3)(postcss@8.4.47)(typescript@5.2.2) + '@parcel/optimizer-htmlnano': 2.9.3(@parcel/core@2.9.3)(postcss@8.4.49)(typescript@5.2.2) '@parcel/optimizer-image': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-svgo': 2.9.3(@parcel/core@2.9.3) '@parcel/optimizer-swc': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13) @@ -4105,14 +4006,14 @@ snapshots: '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 '@parcel/workers': 2.9.3(@parcel/core@2.9.3) - abortcontroller-polyfill: 1.7.5 + abortcontroller-polyfill: 1.7.6 base-x: 3.0.10 browserslist: 4.24.2 clone: 2.1.2 dotenv: 7.0.0 dotenv-expand: 5.1.0 json5: 2.2.3 - msgpackr: 1.11.0 + msgpackr: 1.11.2 nullthrows: 1.1.1 semver: 7.5.4 @@ -4142,7 +4043,7 @@ snapshots: '@parcel/fs-search': 2.8.3 '@parcel/types': 2.8.3(@parcel/core@2.9.3) '@parcel/utils': 2.8.3 - '@parcel/watcher': 2.2.0 + '@parcel/watcher': 2.5.0 '@parcel/workers': 2.8.3(@parcel/core@2.9.3) '@parcel/fs@2.9.3(@parcel/core@2.9.3)': @@ -4151,7 +4052,7 @@ snapshots: '@parcel/fs-search': 2.9.3 '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 - '@parcel/watcher': 2.2.0 + '@parcel/watcher': 2.5.0 '@parcel/workers': 2.9.3(@parcel/core@2.9.3) '@parcel/graph@2.9.3': @@ -4211,7 +4112,7 @@ snapshots: '@parcel/source-map': 2.1.1 '@parcel/utils': 2.9.3 browserslist: 4.24.2 - lightningcss: 1.27.0 + lightningcss: 1.28.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' @@ -4225,10 +4126,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3)(postcss@8.4.47)(typescript@5.2.2)': + '@parcel/optimizer-htmlnano@2.9.3(@parcel/core@2.9.3)(postcss@8.4.49)(typescript@5.2.2)': dependencies: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) - htmlnano: 2.1.1(postcss@8.4.47)(svgo@2.8.0)(typescript@5.2.2) + htmlnano: 2.1.1(postcss@8.4.49)(svgo@2.8.0)(typescript@5.2.2) nullthrows: 1.1.1 posthtml: 0.16.6 svgo: 2.8.0 @@ -4266,7 +4167,7 @@ snapshots: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.9.3 - '@swc/core': 1.7.40(@swc/helpers@0.5.13) + '@swc/core': 1.9.1(@swc/helpers@0.5.13) nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' @@ -4445,7 +4346,7 @@ snapshots: '@parcel/source-map': 2.1.1 '@parcel/utils': 2.9.3 browserslist: 4.24.2 - lightningcss: 1.27.0 + lightningcss: 1.28.1 nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' @@ -4558,7 +4459,7 @@ snapshots: dependencies: '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/source-map': 2.1.1 - sass: 1.80.5 + sass: 1.80.6 transitivePeerDependencies: - '@parcel/core' @@ -4639,67 +4540,70 @@ snapshots: '@parcel/watcher-android-arm64@2.2.0': optional: true - '@parcel/watcher-android-arm64@2.4.1': + '@parcel/watcher-android-arm64@2.5.0': optional: true '@parcel/watcher-darwin-arm64@2.2.0': optional: true - '@parcel/watcher-darwin-arm64@2.4.1': + '@parcel/watcher-darwin-arm64@2.5.0': optional: true '@parcel/watcher-darwin-x64@2.2.0': optional: true - '@parcel/watcher-darwin-x64@2.4.1': + '@parcel/watcher-darwin-x64@2.5.0': optional: true - '@parcel/watcher-freebsd-x64@2.4.1': + '@parcel/watcher-freebsd-x64@2.5.0': optional: true '@parcel/watcher-linux-arm-glibc@2.2.0': optional: true - '@parcel/watcher-linux-arm-glibc@2.4.1': + '@parcel/watcher-linux-arm-glibc@2.5.0': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.0': optional: true '@parcel/watcher-linux-arm64-glibc@2.2.0': optional: true - '@parcel/watcher-linux-arm64-glibc@2.4.1': + '@parcel/watcher-linux-arm64-glibc@2.5.0': optional: true '@parcel/watcher-linux-arm64-musl@2.2.0': optional: true - '@parcel/watcher-linux-arm64-musl@2.4.1': + '@parcel/watcher-linux-arm64-musl@2.5.0': optional: true '@parcel/watcher-linux-x64-glibc@2.2.0': optional: true - '@parcel/watcher-linux-x64-glibc@2.4.1': + '@parcel/watcher-linux-x64-glibc@2.5.0': optional: true '@parcel/watcher-linux-x64-musl@2.2.0': optional: true - '@parcel/watcher-linux-x64-musl@2.4.1': + '@parcel/watcher-linux-x64-musl@2.5.0': optional: true '@parcel/watcher-win32-arm64@2.2.0': optional: true - '@parcel/watcher-win32-arm64@2.4.1': + '@parcel/watcher-win32-arm64@2.5.0': optional: true - '@parcel/watcher-win32-ia32@2.4.1': + '@parcel/watcher-win32-ia32@2.5.0': optional: true '@parcel/watcher-win32-x64@2.2.0': optional: true - '@parcel/watcher-win32-x64@2.4.1': + '@parcel/watcher-win32-x64@2.5.0': optional: true '@parcel/watcher@2.2.0': @@ -4720,25 +4624,26 @@ snapshots: '@parcel/watcher-win32-arm64': 2.2.0 '@parcel/watcher-win32-x64': 2.2.0 - '@parcel/watcher@2.4.1': + '@parcel/watcher@2.5.0': dependencies: detect-libc: 1.0.3 is-glob: 4.0.3 micromatch: 4.0.8 node-addon-api: 7.1.1 optionalDependencies: - '@parcel/watcher-android-arm64': 2.4.1 - '@parcel/watcher-darwin-arm64': 2.4.1 - '@parcel/watcher-darwin-x64': 2.4.1 - '@parcel/watcher-freebsd-x64': 2.4.1 - '@parcel/watcher-linux-arm-glibc': 2.4.1 - '@parcel/watcher-linux-arm64-glibc': 2.4.1 - '@parcel/watcher-linux-arm64-musl': 2.4.1 - '@parcel/watcher-linux-x64-glibc': 2.4.1 - '@parcel/watcher-linux-x64-musl': 2.4.1 - '@parcel/watcher-win32-arm64': 2.4.1 - '@parcel/watcher-win32-ia32': 2.4.1 - '@parcel/watcher-win32-x64': 2.4.1 + '@parcel/watcher-android-arm64': 2.5.0 + '@parcel/watcher-darwin-arm64': 2.5.0 + '@parcel/watcher-darwin-x64': 2.5.0 + '@parcel/watcher-freebsd-x64': 2.5.0 + '@parcel/watcher-linux-arm-glibc': 2.5.0 + '@parcel/watcher-linux-arm-musl': 2.5.0 + '@parcel/watcher-linux-arm64-glibc': 2.5.0 + '@parcel/watcher-linux-arm64-musl': 2.5.0 + '@parcel/watcher-linux-x64-glibc': 2.5.0 + '@parcel/watcher-linux-x64-musl': 2.5.0 + '@parcel/watcher-win32-arm64': 2.5.0 + '@parcel/watcher-win32-ia32': 2.5.0 + '@parcel/watcher-win32-x64': 2.5.0 '@parcel/workers@2.8.3(@parcel/core@2.9.3)': dependencies: @@ -4789,10 +4694,10 @@ snapshots: transitivePeerDependencies: - '@parcel/core' - '@plasmohq/parcel-config@0.41.1(@swc/core@1.7.40(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@plasmohq/parcel-config@0.41.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: '@parcel/compressor-raw': 2.9.3(@parcel/core@2.9.3) - '@parcel/config-default': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)(postcss@8.4.47)(typescript@5.2.2) + '@parcel/config-default': 2.9.3(@parcel/core@2.9.3)(@swc/helpers@0.5.13)(postcss@8.4.49)(typescript@5.2.2) '@parcel/core': 2.9.3 '@parcel/optimizer-data-url': 2.9.3(@parcel/core@2.9.3) '@parcel/reporter-bundle-buddy': 2.9.3(@parcel/core@2.9.3) @@ -4819,7 +4724,7 @@ snapshots: '@plasmohq/parcel-optimizer-es': 0.4.1(@swc/helpers@0.5.13) '@plasmohq/parcel-packager': 0.6.15 '@plasmohq/parcel-resolver': 0.14.1 - '@plasmohq/parcel-resolver-post': 0.4.5(@swc/core@1.7.40(@swc/helpers@0.5.13))(postcss@8.4.47) + '@plasmohq/parcel-resolver-post': 0.4.5(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49) '@plasmohq/parcel-runtime': 0.25.1 '@plasmohq/parcel-transformer-inject-env': 0.2.12 '@plasmohq/parcel-transformer-inline-css': 0.3.11 @@ -4886,7 +4791,7 @@ snapshots: - walrus - whiskers - '@plasmohq/parcel-core@0.1.9': + '@plasmohq/parcel-core@0.1.10': dependencies: '@parcel/cache': 2.9.3(@parcel/core@2.9.3) '@parcel/core': 2.9.3 @@ -4939,14 +4844,14 @@ snapshots: '@parcel/utils': 2.9.3 nullthrows: 1.1.1 - '@plasmohq/parcel-resolver-post@0.4.5(@swc/core@1.7.40(@swc/helpers@0.5.13))(postcss@8.4.47)': + '@plasmohq/parcel-resolver-post@0.4.5(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49)': dependencies: '@parcel/core': 2.9.3 '@parcel/hash': 2.9.3 '@parcel/plugin': 2.9.3(@parcel/core@2.9.3) '@parcel/types': 2.9.3(@parcel/core@2.9.3) '@parcel/utils': 2.9.3 - tsup: 7.2.0(@swc/core@1.7.40(@swc/helpers@0.5.13))(postcss@8.4.47)(typescript@5.2.2) + tsup: 7.2.0(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@swc/core' @@ -5080,7 +4985,7 @@ snapshots: '@pnpm/network.ca-file': 1.0.2 config-chain: 1.1.13 - '@remix-run/router@1.20.0': {} + '@remix-run/router@1.21.0': {} '@sindresorhus/is@5.6.0': {} @@ -5163,61 +5068,61 @@ snapshots: '@swc/core-darwin-arm64@1.3.96': optional: true - '@swc/core-darwin-arm64@1.7.40': + '@swc/core-darwin-arm64@1.9.1': optional: true '@swc/core-darwin-x64@1.3.96': optional: true - '@swc/core-darwin-x64@1.7.40': + '@swc/core-darwin-x64@1.9.1': optional: true '@swc/core-linux-arm-gnueabihf@1.3.96': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.40': + '@swc/core-linux-arm-gnueabihf@1.9.1': optional: true '@swc/core-linux-arm64-gnu@1.3.96': optional: true - '@swc/core-linux-arm64-gnu@1.7.40': + '@swc/core-linux-arm64-gnu@1.9.1': optional: true '@swc/core-linux-arm64-musl@1.3.96': optional: true - '@swc/core-linux-arm64-musl@1.7.40': + '@swc/core-linux-arm64-musl@1.9.1': optional: true '@swc/core-linux-x64-gnu@1.3.96': optional: true - '@swc/core-linux-x64-gnu@1.7.40': + '@swc/core-linux-x64-gnu@1.9.1': optional: true '@swc/core-linux-x64-musl@1.3.96': optional: true - '@swc/core-linux-x64-musl@1.7.40': + '@swc/core-linux-x64-musl@1.9.1': optional: true '@swc/core-win32-arm64-msvc@1.3.96': optional: true - '@swc/core-win32-arm64-msvc@1.7.40': + '@swc/core-win32-arm64-msvc@1.9.1': optional: true '@swc/core-win32-ia32-msvc@1.3.96': optional: true - '@swc/core-win32-ia32-msvc@1.7.40': + '@swc/core-win32-ia32-msvc@1.9.1': optional: true '@swc/core-win32-x64-msvc@1.3.96': optional: true - '@swc/core-win32-x64-msvc@1.7.40': + '@swc/core-win32-x64-msvc@1.9.1': optional: true '@swc/core@1.3.96(@swc/helpers@0.5.13)': @@ -5237,34 +5142,34 @@ snapshots: '@swc/core-win32-x64-msvc': 1.3.96 '@swc/helpers': 0.5.13 - '@swc/core@1.7.40(@swc/helpers@0.5.13)': + '@swc/core@1.9.1(@swc/helpers@0.5.13)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.13 + '@swc/types': 0.1.14 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.40 - '@swc/core-darwin-x64': 1.7.40 - '@swc/core-linux-arm-gnueabihf': 1.7.40 - '@swc/core-linux-arm64-gnu': 1.7.40 - '@swc/core-linux-arm64-musl': 1.7.40 - '@swc/core-linux-x64-gnu': 1.7.40 - '@swc/core-linux-x64-musl': 1.7.40 - '@swc/core-win32-arm64-msvc': 1.7.40 - '@swc/core-win32-ia32-msvc': 1.7.40 - '@swc/core-win32-x64-msvc': 1.7.40 + '@swc/core-darwin-arm64': 1.9.1 + '@swc/core-darwin-x64': 1.9.1 + '@swc/core-linux-arm-gnueabihf': 1.9.1 + '@swc/core-linux-arm64-gnu': 1.9.1 + '@swc/core-linux-arm64-musl': 1.9.1 + '@swc/core-linux-x64-gnu': 1.9.1 + '@swc/core-linux-x64-musl': 1.9.1 + '@swc/core-win32-arm64-msvc': 1.9.1 + '@swc/core-win32-ia32-msvc': 1.9.1 + '@swc/core-win32-x64-msvc': 1.9.1 '@swc/helpers': 0.5.13 '@swc/counter@0.1.3': {} '@swc/helpers@0.5.13': dependencies: - tslib: 2.8.0 + tslib: 2.8.1 '@swc/types@0.1.12': dependencies: '@swc/counter': 0.1.3 - '@swc/types@0.1.13': + '@swc/types@0.1.14': dependencies: '@swc/counter': 0.1.3 @@ -5274,7 +5179,7 @@ snapshots: '@trysound/sax@0.2.0': {} - '@types/chrome@0.0.279': + '@types/chrome@0.0.280': dependencies: '@types/filesystem': 0.0.36 '@types/har-format': 1.2.16 @@ -5303,9 +5208,9 @@ snapshots: '@types/react-dom@18.3.1': dependencies: - '@types/react': 18.3.11 + '@types/react': 18.3.12 - '@types/react@18.3.11': + '@types/react@18.3.12': dependencies: '@types/prop-types': 15.7.13 csstype: 3.1.3 @@ -5336,7 +5241,7 @@ snapshots: '@vue/shared': 3.3.4 estree-walker: 2.0.2 magic-string: 0.30.12 - postcss: 8.4.47 + postcss: 8.4.49 source-map-js: 1.2.1 '@vue/compiler-ssr@3.3.4': @@ -5383,6 +5288,8 @@ snapshots: abortcontroller-polyfill@1.7.5: {} + abortcontroller-polyfill@1.7.6: {} + acorn@8.14.0: {} ansi-escapes@4.3.2: @@ -5481,15 +5388,15 @@ snapshots: browserslist@4.22.1: dependencies: - caniuse-lite: 1.0.30001675 - electron-to-chromium: 1.5.49 + caniuse-lite: 1.0.30001678 + electron-to-chromium: 1.5.53 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.22.1) browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001675 - electron-to-chromium: 1.5.49 + caniuse-lite: 1.0.30001678 + electron-to-chromium: 1.5.53 node-releases: 2.0.18 update-browserslist-db: 1.1.1(browserslist@4.24.2) @@ -5536,7 +5443,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001675: {} + caniuse-lite@1.0.30001678: {} chalk@4.1.2: dependencies: @@ -5657,6 +5564,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.5: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + crypto-js@4.2.0: {} crypto-random-string@4.0.0: @@ -5759,7 +5672,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.49: {} + electron-to-chromium@1.5.53: {} emoji-regex@8.0.0: {} @@ -5835,7 +5748,7 @@ snapshots: execa@5.1.1: dependencies: - cross-spawn: 7.0.3 + cross-spawn: 7.0.5 get-stream: 6.0.1 human-signals: 2.1.0 is-stream: 2.0.1 @@ -6012,13 +5925,13 @@ snapshots: dependencies: react-is: 16.13.1 - htmlnano@2.1.1(postcss@8.4.47)(svgo@2.8.0)(typescript@5.2.2): + htmlnano@2.1.1(postcss@8.4.49)(svgo@2.8.0)(typescript@5.2.2): dependencies: cosmiconfig: 9.0.0(typescript@5.2.2) posthtml: 0.16.6 timsort: 0.3.0 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.49 svgo: 2.8.0 transitivePeerDependencies: - typescript @@ -6182,7 +6095,7 @@ snapshots: dependencies: copy-anything: 2.0.6 parse-node-version: 1.0.1 - tslib: 2.8.0 + tslib: 2.8.1 optionalDependencies: errno: 0.1.8 graceful-fs: 4.2.11 @@ -6195,58 +6108,58 @@ snapshots: lightningcss-darwin-arm64@1.21.8: optional: true - lightningcss-darwin-arm64@1.27.0: + lightningcss-darwin-arm64@1.28.1: optional: true lightningcss-darwin-x64@1.21.8: optional: true - lightningcss-darwin-x64@1.27.0: + lightningcss-darwin-x64@1.28.1: optional: true lightningcss-freebsd-x64@1.21.8: optional: true - lightningcss-freebsd-x64@1.27.0: + lightningcss-freebsd-x64@1.28.1: optional: true lightningcss-linux-arm-gnueabihf@1.21.8: optional: true - lightningcss-linux-arm-gnueabihf@1.27.0: + lightningcss-linux-arm-gnueabihf@1.28.1: optional: true lightningcss-linux-arm64-gnu@1.21.8: optional: true - lightningcss-linux-arm64-gnu@1.27.0: + lightningcss-linux-arm64-gnu@1.28.1: optional: true lightningcss-linux-arm64-musl@1.21.8: optional: true - lightningcss-linux-arm64-musl@1.27.0: + lightningcss-linux-arm64-musl@1.28.1: optional: true lightningcss-linux-x64-gnu@1.21.8: optional: true - lightningcss-linux-x64-gnu@1.27.0: + lightningcss-linux-x64-gnu@1.28.1: optional: true lightningcss-linux-x64-musl@1.21.8: optional: true - lightningcss-linux-x64-musl@1.27.0: + lightningcss-linux-x64-musl@1.28.1: optional: true - lightningcss-win32-arm64-msvc@1.27.0: + lightningcss-win32-arm64-msvc@1.28.1: optional: true lightningcss-win32-x64-msvc@1.21.8: optional: true - lightningcss-win32-x64-msvc@1.27.0: + lightningcss-win32-x64-msvc@1.28.1: optional: true lightningcss@1.21.8: @@ -6263,20 +6176,20 @@ snapshots: lightningcss-linux-x64-musl: 1.21.8 lightningcss-win32-x64-msvc: 1.21.8 - lightningcss@1.27.0: + lightningcss@1.28.1: dependencies: detect-libc: 1.0.3 optionalDependencies: - lightningcss-darwin-arm64: 1.27.0 - lightningcss-darwin-x64: 1.27.0 - lightningcss-freebsd-x64: 1.27.0 - lightningcss-linux-arm-gnueabihf: 1.27.0 - lightningcss-linux-arm64-gnu: 1.27.0 - lightningcss-linux-arm64-musl: 1.27.0 - lightningcss-linux-x64-gnu: 1.27.0 - lightningcss-linux-x64-musl: 1.27.0 - lightningcss-win32-arm64-msvc: 1.27.0 - lightningcss-win32-x64-msvc: 1.27.0 + lightningcss-darwin-arm64: 1.28.1 + lightningcss-darwin-x64: 1.28.1 + lightningcss-freebsd-x64: 1.28.1 + lightningcss-linux-arm-gnueabihf: 1.28.1 + lightningcss-linux-arm64-gnu: 1.28.1 + lightningcss-linux-arm64-musl: 1.28.1 + lightningcss-linux-x64-gnu: 1.28.1 + lightningcss-linux-x64-musl: 1.28.1 + lightningcss-win32-arm64-msvc: 1.28.1 + lightningcss-win32-x64-msvc: 1.28.1 lilconfig@2.1.0: {} @@ -6286,10 +6199,10 @@ snapshots: lmdb@2.5.2: dependencies: - msgpackr: 1.11.0 + msgpackr: 1.11.2 node-addon-api: 4.3.0 node-gyp-build-optional-packages: 5.0.3 - ordered-binary: 1.5.2 + ordered-binary: 1.5.3 weak-lru-cache: 1.2.2 optionalDependencies: '@lmdb/lmdb-darwin-arm64': 2.5.2 @@ -6304,7 +6217,7 @@ snapshots: msgpackr: 1.8.5 node-addon-api: 4.3.0 node-gyp-build-optional-packages: 5.0.6 - ordered-binary: 1.5.2 + ordered-binary: 1.5.3 weak-lru-cache: 1.2.2 optionalDependencies: '@lmdb/lmdb-darwin-arm64': 2.7.11 @@ -6403,7 +6316,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 optional: true - msgpackr@1.11.0: + msgpackr@1.11.2: optionalDependencies: msgpackr-extract: 3.0.3 @@ -6494,7 +6407,7 @@ snapshots: strip-ansi: 6.0.1 wcwidth: 1.0.1 - ordered-binary@1.5.2: {} + ordered-binary@1.5.3: {} os-tmpdir@1.0.2: {} @@ -6550,7 +6463,7 @@ snapshots: pirates@4.0.6: {} - plasmo@0.89.3(@swc/core@1.7.40(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + plasmo@0.89.4(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: '@expo/spawn-async': 1.7.2 '@parcel/core': 2.9.3 @@ -6558,8 +6471,8 @@ snapshots: '@parcel/package-manager': 2.9.3(@parcel/core@2.9.3) '@parcel/watcher': 2.2.0 '@plasmohq/init': 0.7.0 - '@plasmohq/parcel-config': 0.41.1(@swc/core@1.7.40(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.47)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@plasmohq/parcel-core': 0.1.9 + '@plasmohq/parcel-config': 0.41.1(@swc/core@1.9.1(@swc/helpers@0.5.13))(@swc/helpers@0.5.13)(lodash@4.17.21)(postcss@8.4.49)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@plasmohq/parcel-core': 0.1.10 buffer: 6.0.3 chalk: 5.3.0 change-case: 5.1.2 @@ -6641,28 +6554,28 @@ snapshots: - walrus - whiskers - postcss-import@15.1.0(postcss@8.4.47): + postcss-import@15.1.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.47): + postcss-js@4.0.1(postcss@8.4.49): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.47 + postcss: 8.4.49 - postcss-load-config@4.0.2(postcss@8.4.47): + postcss-load-config@4.0.2(postcss@8.4.49): dependencies: lilconfig: 3.1.2 yaml: 2.6.0 optionalDependencies: - postcss: 8.4.47 + postcss: 8.4.49 - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@6.2.0(postcss@8.4.49): dependencies: - postcss: 8.4.47 + postcss: 8.4.49 postcss-selector-parser: 6.1.2 postcss-selector-parser@6.1.2: @@ -6672,7 +6585,7 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.4.47: + postcss@8.4.49: dependencies: nanoid: 3.3.7 picocolors: 1.1.1 @@ -6763,16 +6676,16 @@ snapshots: react-refresh@0.9.0: {} - react-router-dom@6.27.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + react-router-dom@6.28.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@remix-run/router': 1.20.0 + '@remix-run/router': 1.21.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-router: 6.27.0(react@18.3.1) + react-router: 6.28.0(react@18.3.1) - react-router@6.27.0(react@18.3.1): + react-router@6.28.0(react@18.3.1): dependencies: - '@remix-run/router': 1.20.0 + '@remix-run/router': 1.21.0 react: 18.3.1 react@18.3.1: @@ -6842,18 +6755,19 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.8.0 + tslib: 2.8.1 safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} - sass@1.80.5: + sass@1.80.6: dependencies: - '@parcel/watcher': 2.4.1 chokidar: 4.0.1 immutable: 4.3.7 source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.0 sax@1.4.1: optional: true @@ -7041,11 +6955,11 @@ snapshots: normalize-path: 3.0.0 object-hash: 3.0.0 picocolors: 1.1.1 - postcss: 8.4.47 - postcss-import: 15.1.0(postcss@8.4.47) - postcss-js: 4.0.1(postcss@8.4.47) - postcss-load-config: 4.0.2(postcss@8.4.47) - postcss-nested: 6.2.0(postcss@8.4.47) + postcss: 8.4.49 + postcss-import: 15.1.0(postcss@8.4.49) + postcss-js: 4.0.1(postcss@8.4.49) + postcss-load-config: 4.0.2(postcss@8.4.49) + postcss-nested: 6.2.0(postcss@8.4.49) postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 @@ -7124,9 +7038,9 @@ snapshots: tslib@2.4.1: {} - tslib@2.8.0: {} + tslib@2.8.1: {} - tsup@7.2.0(@swc/core@1.7.40(@swc/helpers@0.5.13))(postcss@8.4.47)(typescript@5.2.2): + tsup@7.2.0(@swc/core@1.9.1(@swc/helpers@0.5.13))(postcss@8.4.49)(typescript@5.2.2): dependencies: bundle-require: 4.2.1(esbuild@0.18.20) cac: 6.7.14 @@ -7136,15 +7050,15 @@ snapshots: execa: 5.1.1 globby: 11.1.0 joycon: 3.1.1 - postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.49) resolve-from: 5.0.0 rollup: 3.29.5 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tree-kill: 1.2.2 optionalDependencies: - '@swc/core': 1.7.40(@swc/helpers@0.5.13) - postcss: 8.4.47 + '@swc/core': 1.9.1(@swc/helpers@0.5.13) + postcss: 8.4.49 typescript: 5.2.2 transitivePeerDependencies: - supports-color diff --git a/playground/browser-extension/src/background/index.ts b/playground/browser-extension/src/background/index.ts index 8417d7ac393..fc21ac1910b 100644 --- a/playground/browser-extension/src/background/index.ts +++ b/playground/browser-extension/src/background/index.ts @@ -1,17 +1,22 @@ import { createClerkClient } from '@clerk/chrome-extension/background'; -console.log('Background Script w/ Clerk createClerkClient() demo loaded') +console.log('Background Script w/ Clerk createClerkClient() demo loaded'); -const publishableKey = process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY +const publishableKey = process.env.PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY; if (!publishableKey) { - throw new Error('Please add the PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY to the .env.development file') + throw new Error('Please add the PLASMO_PUBLIC_CLERK_PUBLISHABLE_KEY to the .env.development file'); } async function getToken() { const clerk = await createClerkClient({ publishableKey, - syncHost: process.env.PLASMO_PUBLIC_CLERK_SYNC_HOST + syncHost: process.env.PLASMO_PUBLIC_CLERK_SYNC_HOST, }); + + if (!clerk.session) { + console.warn('No session found'); + } + return await clerk.session?.getToken(); } @@ -19,11 +24,9 @@ async function getToken() { // NOTE: A runtime listener cannot be async. // It must return true, in order to keep the connection open and send a response later. chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { - if (request.greeting === "get-token") { - console.log('Handling request for the user\'s current token') + if (request.greeting === 'get-token') { + console.log('Handling request for the user\'s current token'); getToken().then((token) => sendResponse({ token })).catch((error) => console.error(JSON.stringify(error))); } return true; }); - - diff --git a/playground/browser-extension/src/popup/index.tsx b/playground/browser-extension/src/popup/index.tsx index cdf4214799b..cb3eef6c4a7 100644 --- a/playground/browser-extension/src/popup/index.tsx +++ b/playground/browser-extension/src/popup/index.tsx @@ -1,16 +1,15 @@ - -import "../style.css"; -import { RouterProvider, createMemoryRouter } from "react-router-dom"; +import '../style.css'; +import { RouterProvider, createMemoryRouter } from 'react-router-dom'; // Import the layouts -import { RootLayout } from "./layouts/root-layout"; +import { RootLayout } from './layouts/root-layout'; // Import the components -import { SignInPage } from "./routes/sign-in"; -import { SignUpPage } from "./routes/sign-up"; -import { Index } from "./routes"; -import { Settings } from "./routes/settings"; -import { SDKFeatures } from "./routes/sdk-features"; +import { SignInPage } from './routes/sign-in'; +import { SignUpPage } from './routes/sign-up'; +import { Index } from './routes'; +import { Settings } from './routes/settings'; +import { SDKFeatures } from './routes/sdk-features'; // Create the router // This removes the need for an App.tsx file @@ -18,17 +17,15 @@ const router = createMemoryRouter([ { element: , children: [ - { path: "/", element: }, - { path: "/sign-in", element: }, - { path: "/sign-up", element: }, - { path: "/settings", element: }, - { path: "/sdk-features", element: } + { path: '/', element: }, + { path: '/sign-in', element: }, + { path: '/sign-up', element: }, + { path: '/settings', element: }, + { path: '/sdk-features', element: }, ], }, ]); export default function PopupIndex() { - return ( - - ) + return ; } From 77ab04e2f90e25ff8d00d7ad3d362ecd0f3db560 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Wed, 13 Nov 2024 14:10:48 -0500 Subject: [PATCH 2/9] chore: Remove RSpack build --- packages/clerk-js/rspack.config.js | 6 ------ 1 file changed, 6 deletions(-) diff --git a/packages/clerk-js/rspack.config.js b/packages/clerk-js/rspack.config.js index 16f9d29b2a4..ba30d5c2a28 100644 --- a/packages/clerk-js/rspack.config.js +++ b/packages/clerk-js/rspack.config.js @@ -545,12 +545,6 @@ const devConfig = ({ mode, env }) => { commonForDev(), // externalsForHeadless(), ), - [variants.clerkHeadlessNoRHC]: merge( - entryForVariant(variants.clerkHeadlessNoRHC), - common({ mode, rhc: false }), - commonForDev(), - // externalsForHeadless(), - ), [variants.clerkHeadlessBrowser]: merge( entryForVariant(variants.clerkHeadlessBrowser), common({ mode }), From f152c42e1946c5d5dd90f435484cc9026b9639f6 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Wed, 13 Nov 2024 18:34:27 -0500 Subject: [PATCH 3/9] chore(clerk-js,clerk-react): Clean up warnings --- packages/clerk-js/src/core/clerk.ts | 20 +++++-- packages/clerk-js/src/core/errors.ts | 14 ++++- .../clerk-js/src/core/resources/SignIn.ts | 19 ++++--- .../clerk-js/src/core/resources/SignUp.ts | 19 ++++--- .../components/GoogleOneTap/one-tap-start.tsx | 3 +- packages/react/src/isomorphicClerk.ts | 44 +++++---------- playground/browser-extension/pnpm-lock.yaml | 55 ++++++++++--------- 7 files changed, 92 insertions(+), 82 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index a1e5b06eae4..404a34b944c 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -109,6 +109,7 @@ import { clerkMissingSignInUrlAsSatellite, clerkOAuthCallbackDidNotCompleteSignInSignUp, clerkRedirectUrlIsMissingScheme, + clerkUnsupportedEnvironmentWarning, } from './errors'; import { eventBus, events } from './events'; import type { FapiClient, FapiRequestCallback } from './fapiClient'; @@ -1502,17 +1503,26 @@ export class Clerk implements ClerkInterface { } throw err; }) as Promise; - } else { - throw new Error('Google One Tap authentication is not supported in this environment'); } + + clerkUnsupportedEnvironmentWarning('Google One Tap'); + return this.client!.signIn; // TODO: Remove not null assertion }; public authenticateWithMetamask = async (props: AuthenticateWithMetamaskParams = {}): Promise => { - await this.authenticateWithWeb3({ ...props, strategy: 'web3_metamask_signature' }); + if (__BUILD_ENABLE_RHC__) { + await this.authenticateWithWeb3({ ...props, strategy: 'web3_metamask_signature' }); + } else { + clerkUnsupportedEnvironmentWarning('Metamask'); + } }; public authenticateWithCoinbaseWallet = async (props: AuthenticateWithCoinbaseWalletParams = {}): Promise => { - await this.authenticateWithWeb3({ ...props, strategy: 'web3_coinbase_wallet_signature' }); + if (__BUILD_ENABLE_RHC__) { + await this.authenticateWithWeb3({ ...props, strategy: 'web3_coinbase_wallet_signature' }); + } else { + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + } }; public authenticateWithWeb3 = async ({ @@ -1567,7 +1577,7 @@ export class Clerk implements ClerkInterface { }); } } else { - throw new Error('Web3 authentication is not supported in this environment'); + clerkUnsupportedEnvironmentWarning('Web3'); } }; diff --git a/packages/clerk-js/src/core/errors.ts b/packages/clerk-js/src/core/errors.ts index b917db134c4..304a1716dde 100644 --- a/packages/clerk-js/src/core/errors.ts +++ b/packages/clerk-js/src/core/errors.ts @@ -1,5 +1,17 @@ const errorPrefix = 'ClerkJS:'; +/** + * Used to log a warning when a Clerk feature is used in an unsupported environment. + * (Development Only) + * + * @param strategy The strategy that is not supported in the current environment. + * @returns void + * @note This is a warning and not an error because the application will still work, but the feature will not be available. + */ +export function clerkUnsupportedEnvironmentWarning(strategy: string) { + console.warn(`${errorPrefix} ${strategy} is not supported in this environment.`); +} + export function clerkNetworkError(url: string, e: Error): never { throw new Error(`${errorPrefix} Network error at "${url}" - ${e}. Please try again.`); } @@ -8,7 +20,7 @@ export function clerkErrorInitFailed(): never { throw new Error(`${errorPrefix} Something went wrong initializing Clerk.`); } -export function clerkErrorDevInitFailed(msg: string = ''): never { +export function clerkErrorDevInitFailed(msg = ''): never { throw new Error(`${errorPrefix} Something went wrong initializing Clerk in development mode.${msg && ` ${msg}`}`); } diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 211527bd39c..9ea61028985 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -55,6 +55,7 @@ import { clerkInvalidStrategy, clerkMissingOptionError, clerkMissingWebAuthnPublicKeyOptions, + clerkUnsupportedEnvironmentWarning, clerkVerifyEmailAddressCalledBeforeCreate, clerkVerifyPasskeyCalledBeforeCreate, clerkVerifyWeb3WalletCalledBeforeCreate, @@ -281,10 +282,10 @@ export class SignIn extends BaseResource implements SignInResource { signature, strategy, }); - } else { - console.warn('Web3 is not supported in this environment'); - return this; } + + clerkUnsupportedEnvironmentWarning('Web3'); + return this; }; public authenticateWithMetamask = async (): Promise => { @@ -295,10 +296,10 @@ export class SignIn extends BaseResource implements SignInResource { generateSignature: generateSignatureWithMetamask, strategy: 'web3_metamask_signature', }); - } else { - console.warn('Metamask is not supported in this environment'); - return this; } + + clerkUnsupportedEnvironmentWarning('Metamask'); + return this; }; public authenticateWithCoinbaseWallet = async (): Promise => { @@ -309,10 +310,10 @@ export class SignIn extends BaseResource implements SignInResource { generateSignature: generateSignatureWithCoinbaseWallet, strategy: 'web3_coinbase_wallet_signature', }); - } else { - console.warn('Coinbase Wallet is not supported in this environment'); - return this; } + + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return this; }; public authenticateWithPasskey = async (params?: AuthenticateWithPasskeyParams): Promise => { diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 53d9e1dfb57..72b7891d5ff 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -37,6 +37,7 @@ import { normalizeUnsafeMetadata } from '../../utils/resourceParams'; import { clerkInvalidFAPIResponse, clerkMissingOptionError, + clerkUnsupportedEnvironmentWarning, clerkVerifyEmailAddressCalledBeforeCreate, clerkVerifyWeb3WalletCalledBeforeCreate, } from '../errors'; @@ -248,10 +249,10 @@ export class SignUp extends BaseResource implements SignUpResource { } return this.attemptWeb3WalletVerification({ signature, strategy }); - } else { - console.warn('Web3 is not enabled in this environment'); - return this; } + + clerkUnsupportedEnvironmentWarning('Web3'); + return this; }; public authenticateWithMetamask = async ( @@ -268,10 +269,10 @@ export class SignUp extends BaseResource implements SignUpResource { strategy: 'web3_metamask_signature', legalAccepted: params?.legalAccepted, }); - } else { - console.warn('Metamask is not enabled in this environment'); - return this; } + + clerkUnsupportedEnvironmentWarning('Metamask'); + return this; }; public authenticateWithCoinbaseWallet = async ( @@ -288,10 +289,10 @@ export class SignUp extends BaseResource implements SignUpResource { strategy: 'web3_coinbase_wallet_signature', legalAccepted: params?.legalAccepted, }); - } else { - console.warn('Coinbase Wallet is not enabled in this environment'); - return this; } + + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return this; }; public authenticateWithRedirect = async ({ diff --git a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx index e43f42a0a78..ccac9334dd8 100644 --- a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx +++ b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx @@ -1,6 +1,7 @@ import { useClerk, useUser } from '@clerk/shared/react'; import { useEffect, useRef } from 'react'; +import { clerkUnsupportedEnvironmentWarning } from '../../../core/errors'; import type { GISCredentialResponse } from '../../../utils/one-tap'; import { loadGIS } from '../../../utils/one-tap'; import { useEnvironment, useGoogleOneTapContext } from '../../contexts'; @@ -48,7 +49,7 @@ function _OneTapStart(): JSX.Element | null { return google; } - console.warn('Google Identity Services is not enabled in this environment'); + clerkUnsupportedEnvironmentWarning('Google Identity Services'); return undefined; } diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index a1c6d71206f..3e12678b648 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -1125,53 +1125,37 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { }; authenticateWithMetamask = async (params: AuthenticateWithMetamaskParams): Promise => { - if (__BUILD_ENABLE_RHC__) { - const callback = () => this.clerkjs?.authenticateWithMetamask(params); - if (this.clerkjs && this.#loaded) { - return callback() as Promise; - } else { - this.premountMethodCalls.set('authenticateWithMetamask', callback); - } + const callback = () => this.clerkjs?.authenticateWithMetamask(params); + if (this.clerkjs && this.#loaded) { + return callback() as Promise; } else { - console.warn('Metamask authentication is not supported in this environment'); + this.premountMethodCalls.set('authenticateWithMetamask', callback); } }; authenticateWithCoinbaseWallet = async (params: AuthenticateWithCoinbaseWalletParams): Promise => { - if (__BUILD_ENABLE_RHC__) { - const callback = () => this.clerkjs?.authenticateWithCoinbaseWallet(params); - if (this.clerkjs && this.#loaded) { - return callback() as Promise; - } else { - this.premountMethodCalls.set('authenticateWithCoinbaseWallet', callback); - } + const callback = () => this.clerkjs?.authenticateWithCoinbaseWallet(params); + if (this.clerkjs && this.#loaded) { + return callback() as Promise; } else { - console.warn('Coinbase Wallet authentication is not supported in this environment'); + this.premountMethodCalls.set('authenticateWithCoinbaseWallet', callback); } }; authenticateWithWeb3 = async (params: ClerkAuthenticateWithWeb3Params): Promise => { - if (__BUILD_ENABLE_RHC__) { - const callback = () => this.clerkjs?.authenticateWithWeb3(params); - if (this.clerkjs && this.#loaded) { - return callback() as Promise; - } else { - this.premountMethodCalls.set('authenticateWithWeb3', callback); - } + const callback = () => this.clerkjs?.authenticateWithWeb3(params); + if (this.clerkjs && this.#loaded) { + return callback() as Promise; } else { - console.warn('Web3 authentication is not supported in this environment'); + this.premountMethodCalls.set('authenticateWithWeb3', callback); } }; authenticateWithGoogleOneTap = async ( params: AuthenticateWithGoogleOneTapParams, ): Promise => { - if (__BUILD_ENABLE_RHC__) { - const clerkjs = await this.#waitForClerkJS(); - return clerkjs.authenticateWithGoogleOneTap(params); - } else { - console.warn('Google One Tap authentication is not supported in this environment'); - } + const clerkjs = await this.#waitForClerkJS(); + return clerkjs.authenticateWithGoogleOneTap(params); }; createOrganization = async (params: CreateOrganizationParams): Promise => { diff --git a/playground/browser-extension/pnpm-lock.yaml b/playground/browser-extension/pnpm-lock.yaml index b31ca857855..5a22a73612d 100644 --- a/playground/browser-extension/pnpm-lock.yaml +++ b/playground/browser-extension/pnpm-lock.yaml @@ -142,38 +142,38 @@ packages: react: '>=18' react-dom: '>=18' - '@clerk/clerk-js@5.31.2': - resolution: {integrity: sha512-+pPQSQD9I0C/802wL7d8sFiDqtZl2ZM2WbD7vJ3CYBANjI93iUAwPYH+cqvq1X5QusjCyUQUH/bvIGh/rdSXuw==} + '@clerk/clerk-js@5.33.1': + resolution: {integrity: sha512-zwAuBtqo7b1vDHCn5tC6/W9iJ1s0FAJr5MRLsvTDraU7ntTw0UPgVMljtJqyo6ruYJbWPiFt6/vAUpLa/9rtxg==} engines: {node: '>=18.17.0'} peerDependencies: react: '>=18' react-dom: '>=18' - '@clerk/clerk-react@5.15.1': - resolution: {integrity: sha512-p6PLh6SBREEknCzi4I2pyYXRy0OLS7bJ4X9flW1877evYJgyJuirBf8j/RTWg5YzCbVx+GPiZhdlZSCNzH+5Cg==} + '@clerk/clerk-react@5.15.3': + resolution: {integrity: sha512-Ha7Cjiffk3GT0+lJgrtJfeTC9P1kIdmErjQc0t6+lcx12qZwnO1fsf5fp6GND6+P+VtjbgGOPrQmPoJoEcI3cA==} engines: {node: '>=18.17.0'} peerDependencies: react: ^18 || ^19.0.0-0 react-dom: ^18 || ^19.0.0-0 - '@clerk/localizations@3.5.0': - resolution: {integrity: sha512-YlAYE1020N1qvVDdHZ97H9P0y0UTf4pEzE6gWNiWc53UPvlLfe3oKZaG+In56zpMIM2qf3zJJThNEu3ODTauSQ==} + '@clerk/localizations@3.6.2': + resolution: {integrity: sha512-CAP0jAgWP4hjco6hm+KoDan376Co/5ZUyJjAEgh+bs0JoHLIBkK+bML62XHPQgzHUdHHoNUn5pydXvsvaPFNvA==} engines: {node: '>=18.17.0'} - '@clerk/shared@2.11.5': - resolution: {integrity: sha512-GQiqKgIBhqnXfLmohNbDvTz8GNK/nYRSWciGArdezaB+w2q+QpQyo2v1Y7Bh6j608iKZCnc4jG4yxcAI/pRQDA==} + '@clerk/shared@2.12.1': + resolution: {integrity: sha512-ezX/BXnMJ1rH7vX4H3nXpZ3WW8m1lbyri5dHOoDlREUOe/zr9lawUgVx+75aTxrVPtK7u8XwzMj/rT2cMfMmqw==} engines: {node: '>=18.17.0'} peerDependencies: - react: '>=18 || >=19.0.0-beta' - react-dom: '>=18 || >=19.0.0-beta' + react: ^18 || ^19.0.0-0 + react-dom: ^18 || ^19.0.0-0 peerDependenciesMeta: react: optional: true react-dom: optional: true - '@clerk/types@4.30.0': - resolution: {integrity: sha512-/RLWXsz4yp9uFvJhDZDyZGRDyx3VdHRyPYQS7onhGVTY846X6iCzJVlMFzdpzW3PITxMBgCI9MjgKdH50vBPBA==} + '@clerk/types@4.32.0': + resolution: {integrity: sha512-6oqRJsQE8GIThVyPBAO0kJP0pZJ1c11Hz0qabDk9lStoxjHy7fRIcIm/JX5xlA6rjilWBMEgJr4C0a36mJvVXg==} engines: {node: '>=18.17.0'} '@coinbase/wallet-sdk@4.0.4': @@ -3547,9 +3547,9 @@ snapshots: '@clerk/chrome-extension@file:../../packages/chrome-extension(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/clerk-js': 5.31.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/clerk-react': 5.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/shared': 2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/clerk-js': 5.33.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/clerk-react': 5.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/shared': 2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) webextension-polyfill: 0.10.0 @@ -3557,11 +3557,11 @@ snapshots: - '@types/react' - supports-color - '@clerk/clerk-js@5.31.2(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/clerk-js@5.33.1(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/localizations': 3.5.0 - '@clerk/shared': 2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/types': 4.30.0 + '@clerk/localizations': 3.6.2 + '@clerk/shared': 2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.32.0 '@coinbase/wallet-sdk': 4.0.4 '@emotion/cache': 11.11.0 '@emotion/react': 11.11.1(@types/react@18.3.12)(react@18.3.1) @@ -3583,21 +3583,22 @@ snapshots: - '@types/react' - supports-color - '@clerk/clerk-react@5.15.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/clerk-react@5.15.3(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/shared': 2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@clerk/types': 4.30.0 + '@clerk/shared': 2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@clerk/types': 4.32.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) tslib: 2.4.1 - '@clerk/localizations@3.5.0': + '@clerk/localizations@3.6.2': dependencies: - '@clerk/types': 4.30.0 + '@clerk/types': 4.32.0 - '@clerk/shared@2.11.5(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@clerk/shared@2.12.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@clerk/types': 4.30.0 + '@clerk/types': 4.32.0 + dequal: 2.0.3 glob-to-regexp: 0.4.1 js-cookie: 3.0.5 std-env: 3.7.0 @@ -3606,7 +3607,7 @@ snapshots: react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - '@clerk/types@4.30.0': + '@clerk/types@4.32.0': dependencies: csstype: 3.1.1 From a3c320bc09327eac3ee76d07ed8e4f80cf5b699b Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Thu, 14 Nov 2024 11:48:16 -0500 Subject: [PATCH 4/9] chore(clerk-js,clerk-react,chrome-extension): Prefer guard clauses --- packages/clerk-js/src/core/clerk.ts | 180 ++++++++++-------- .../clerk-js/src/core/resources/SignIn.ts | 110 +++++------ .../clerk-js/src/core/resources/SignUp.ts | 120 ++++++------ .../components/GoogleOneTap/one-tap-start.tsx | 28 +-- .../src/utils/captcha/getCaptchaToken.ts | 8 +- packages/react/src/isomorphicClerk.ts | 32 ++-- 6 files changed, 245 insertions(+), 233 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 404a34b944c..3f0f386432e 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -176,7 +176,7 @@ export class Clerk implements ClerkInterface { // converted to protected environment to support `updateEnvironment` type assertion protected environment?: EnvironmentResource | null; - #publishableKey: string = ''; + #publishableKey = ''; #domain: DomainOrProxyUrl['domain']; #proxyUrl: DomainOrProxyUrl['proxyUrl']; #authService?: AuthCookieService; @@ -283,22 +283,24 @@ export class Clerk implements ClerkInterface { } public constructor(key: string, options?: DomainOrProxyUrl) { - key = (key || '').trim(); + const trimmedKey = (key || '').trim(); this.#domain = options?.domain; this.#proxyUrl = options?.proxyUrl; - if (!key) { - return errorThrower.throwMissingPublishableKeyError(); + if (!trimmedKey) { + errorThrower.throwMissingPublishableKeyError(); + return; } const publishableKey = parsePublishableKey(key); if (!publishableKey) { - return errorThrower.throwInvalidPublishableKeyError({ key }); + errorThrower.throwInvalidPublishableKeyError({ key: trimmedKey }); + return; } - this.#publishableKey = key; + this.#publishableKey = trimmedKey; this.#instanceType = publishableKey.instanceType; this.#fapiClient = createFapiClient(this); @@ -558,7 +560,7 @@ export class Clerk implements ClerkInterface { }; public mountSignIn = (node: HTMLDivElement, props?: SignInProps): void => { - if (props && props.__experimental?.newComponents && this.__experimental_ui) { + if (props?.__experimental?.newComponents && this.__experimental_ui) { this.__experimental_ui.mount('SignIn', node, props); } else { this.assertComponentsReady(this.#componentControls); @@ -584,7 +586,7 @@ export class Clerk implements ClerkInterface { }; public mountSignUp = (node: HTMLDivElement, props?: SignUpProps): void => { - if (props && props.__experimental?.newComponents && this.__experimental_ui) { + if (props?.__experimental?.newComponents && this.__experimental_ui) { this.__experimental_ui.mount('SignUp', node, props); } else { this.assertComponentsReady(this.#componentControls); @@ -931,7 +933,7 @@ export class Clerk implements ClerkInterface { }; public addListener = (listener: ListenerCallback): UnsubscribeCallback => { - listener = memoizeListenerCallback(listener); + const memoizedListener = memoizeListenerCallback(listener); this.#listeners.push(listener); // emit right away if (this.client) { @@ -944,7 +946,7 @@ export class Clerk implements ClerkInterface { } const unsubscribe = () => { - this.#listeners = this.#listeners.filter(l => l !== listener); + this.#listeners = this.#listeners.filter(l => l !== memoizedListener); }; return unsubscribe; }; @@ -1052,7 +1054,7 @@ export class Clerk implements ClerkInterface { return ''; } - const waitlistUrl = this.#options['waitlistUrl'] || this.environment.displayConfig.waitlistUrl; + const waitlistUrl = this.#options.waitlistUrl || this.environment.displayConfig.waitlistUrl; return buildURL({ base: waitlistUrl }, { stringify: true }); } @@ -1187,12 +1189,13 @@ export class Clerk implements ClerkInterface { } const verificationStatus = getClerkQueryParam('__clerk_status'); - if (verificationStatus === 'expired') { - throw new EmailLinkError(EmailLinkErrorCode.Expired); - } else if (verificationStatus === 'client_mismatch') { - throw new EmailLinkError(EmailLinkErrorCode.ClientMismatch); - } else if (verificationStatus !== 'verified') { - throw new EmailLinkError(EmailLinkErrorCode.Failed); + switch (verificationStatus) { + case 'verified': + throw new EmailLinkError(EmailLinkErrorCode.Failed); + case 'client_mismatch': + throw new EmailLinkError(EmailLinkErrorCode.ClientMismatch); + case 'expired': + throw new EmailLinkError(EmailLinkErrorCode.Expired); } const newSessionId = getClerkQueryParam('__clerk_created_session'); @@ -1212,7 +1215,9 @@ export class Clerk implements ClerkInterface { session: newSessionId, redirectUrl: params.redirectUrlComplete, }); - } else if (shouldContinueOnThisDevice) { + } + + if (shouldContinueOnThisDevice) { return redirectContinue(); } @@ -1487,42 +1492,50 @@ export class Clerk implements ClerkInterface { public authenticateWithGoogleOneTap = async ( params: AuthenticateWithGoogleOneTapParams, ): Promise => { - if (__BUILD_ENABLE_RHC__) { - return this.client?.signIn - .create({ - strategy: 'google_one_tap', - token: params.token, - }) - .catch(err => { - if (isClerkAPIResponseError(err) && err.errors[0].code === 'external_account_not_found') { - return this.client?.signUp.create({ - strategy: 'google_one_tap', - token: params.token, - legalAccepted: params.legalAccepted, - }); - } - throw err; - }) as Promise; - } - - clerkUnsupportedEnvironmentWarning('Google One Tap'); - return this.client!.signIn; // TODO: Remove not null assertion + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Google One Tap'); + return this.client!.signIn; // TODO: Remove not null assertion + } + + return this.client?.signIn + .create({ + strategy: 'google_one_tap', + token: params.token, + }) + .catch(err => { + if (isClerkAPIResponseError(err) && err.errors[0].code === 'external_account_not_found') { + return this.client?.signUp.create({ + strategy: 'google_one_tap', + token: params.token, + legalAccepted: params.legalAccepted, + }); + } + throw err; + }) as Promise; }; public authenticateWithMetamask = async (props: AuthenticateWithMetamaskParams = {}): Promise => { - if (__BUILD_ENABLE_RHC__) { - await this.authenticateWithWeb3({ ...props, strategy: 'web3_metamask_signature' }); - } else { + if (!__BUILD_ENABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Metamask'); + return Promise.reject(); } + + await this.authenticateWithWeb3({ + ...props, + strategy: 'web3_metamask_signature', + }); }; public authenticateWithCoinbaseWallet = async (props: AuthenticateWithCoinbaseWalletParams = {}): Promise => { - if (__BUILD_ENABLE_RHC__) { - await this.authenticateWithWeb3({ ...props, strategy: 'web3_coinbase_wallet_signature' }); - } else { + if (!__BUILD_ENABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return; } + + await this.authenticateWithWeb3({ + ...props, + strategy: 'web3_coinbase_wallet_signature', + }); }; public authenticateWithWeb3 = async ({ @@ -1533,51 +1546,52 @@ export class Clerk implements ClerkInterface { strategy, legalAccepted, }: ClerkAuthenticateWithWeb3Params): Promise => { - if (__BUILD_ENABLE_RHC__) { - if (!this.client || !this.environment) { - return; - } - const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - const identifier = await getWeb3Identifier({ provider }); - const generateSignature = - provider === 'metamask' ? generateSignatureWithMetamask : generateSignatureWithCoinbaseWallet; + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Web3'); + return; + } - const navigate = (to: string) => - customNavigate && typeof customNavigate === 'function' ? customNavigate(to) : this.navigate(to); + if (!this.client || !this.environment) { + return; + } + const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; + const identifier = await getWeb3Identifier({ provider }); + const generateSignature = + provider === 'metamask' ? generateSignatureWithMetamask : generateSignatureWithCoinbaseWallet; - let signInOrSignUp: SignInResource | SignUpResource; - try { - signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ identifier, generateSignature, strategy }); - } catch (err) { - if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { - signInOrSignUp = await this.client.signUp.authenticateWithWeb3({ - identifier, - generateSignature, - unsafeMetadata, - strategy, - legalAccepted, - }); + const navigate = (to: string) => + customNavigate && typeof customNavigate === 'function' ? customNavigate(to) : this.navigate(to); - if ( - signUpContinueUrl && - signInOrSignUp.status === 'missing_requirements' && - signInOrSignUp.verifications.web3Wallet.status === 'verified' - ) { - await navigate(signUpContinueUrl); - } - } else { - throw err; + let signInOrSignUp: SignInResource | SignUpResource; + try { + signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ identifier, generateSignature, strategy }); + } catch (err) { + if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { + signInOrSignUp = await this.client.signUp.authenticateWithWeb3({ + identifier, + generateSignature, + unsafeMetadata, + strategy, + legalAccepted, + }); + + if ( + signUpContinueUrl && + signInOrSignUp.status === 'missing_requirements' && + signInOrSignUp.verifications.web3Wallet.status === 'verified' + ) { + await navigate(signUpContinueUrl); } + } else { + throw err; } + } - if (signInOrSignUp.createdSessionId) { - await this.setActive({ - session: signInOrSignUp.createdSessionId, - redirectUrl, - }); - } - } else { - clerkUnsupportedEnvironmentWarning('Web3'); + if (signInOrSignUp.createdSessionId) { + await this.setActive({ + session: signInOrSignUp.createdSessionId, + redirectUrl, + }); } }; diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index 9ea61028985..ad803cbb78a 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -238,82 +238,82 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithWeb3 = async (params: AuthenticateWithWeb3Params): Promise => { - if (__BUILD_ENABLE_RHC__) { - const { identifier, generateSignature, strategy = 'web3_metamask_signature' } = params || {}; - const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Web3'); + return this; + } - if (!(typeof generateSignature === 'function')) { - clerkMissingOptionError('generateSignature'); - } + const { identifier, generateSignature, strategy = 'web3_metamask_signature' } = params || {}; + const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; - await this.create({ identifier }); + if (!(typeof generateSignature === 'function')) { + clerkMissingOptionError('generateSignature'); + } - const web3FirstFactor = this.supportedFirstFactors?.find(f => f.strategy === strategy) as Web3SignatureFactor; + await this.create({ identifier }); - if (!web3FirstFactor) { - clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); - } + const web3FirstFactor = this.supportedFirstFactors?.find(f => f.strategy === strategy) as Web3SignatureFactor; + + if (!web3FirstFactor) { + clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); + } - await this.prepareFirstFactor(web3FirstFactor); + await this.prepareFirstFactor(web3FirstFactor); - const { message } = this.firstFactorVerification; - if (!message) { - clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); - } + const { message } = this.firstFactorVerification; + if (!message) { + clerkVerifyWeb3WalletCalledBeforeCreate('SignIn'); + } - let signature: string; - try { + let signature: string; + try { + signature = await generateSignature({ identifier, nonce: message, 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 + // reason we retry the request once more in order for the flow to be able to be completed successfully. + // + // 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 }); - } 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 - // reason we retry the request once more in order for the flow to be able to be completed successfully. - // - // 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 }); - } else { - throw err; - } + } else { + throw err; } - - return this.attemptFirstFactor({ - signature, - strategy, - }); } - clerkUnsupportedEnvironmentWarning('Web3'); - return this; + return this.attemptFirstFactor({ + signature, + strategy, + }); }; public authenticateWithMetamask = async (): Promise => { - if (__BUILD_ENABLE_RHC__) { - const identifier = await getMetamaskIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithMetamask, - strategy: 'web3_metamask_signature', - }); + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Metamask'); + return this; } - clerkUnsupportedEnvironmentWarning('Metamask'); - return this; + const identifier = await getMetamaskIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithMetamask, + strategy: 'web3_metamask_signature', + }); }; public authenticateWithCoinbaseWallet = async (): Promise => { - if (__BUILD_ENABLE_RHC__) { - const identifier = await getCoinbaseWalletIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithCoinbaseWallet, - strategy: 'web3_coinbase_wallet_signature', - }); + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return this; } - clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); - return this; + const identifier = await getCoinbaseWalletIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithCoinbaseWallet, + strategy: 'web3_coinbase_wallet_signature', + }); }; public authenticateWithPasskey = async (params?: AuthenticateWithPasskeyParams): Promise => { diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index 72b7891d5ff..f58f6a2c602 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -207,52 +207,52 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - if (__BUILD_ENABLE_RHC__) { - const { - generateSignature, - identifier, - unsafeMetadata, - strategy = 'web3_metamask_signature', - legalAccepted, - } = params || {}; - const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Web3'); + return this; + } - if (!(typeof generateSignature === 'function')) { - clerkMissingOptionError('generateSignature'); - } + const { + generateSignature, + identifier, + unsafeMetadata, + strategy = 'web3_metamask_signature', + legalAccepted, + } = params || {}; + const provider = strategy.replace('web3_', '').replace('_signature', '') as Web3Provider; + + if (!(typeof generateSignature === 'function')) { + clerkMissingOptionError('generateSignature'); + } - const web3Wallet = identifier || this.web3wallet!; - await this.create({ web3Wallet, unsafeMetadata, legalAccepted }); - await this.prepareWeb3WalletVerification({ strategy }); + const web3Wallet = identifier || this.web3wallet!; + await this.create({ web3Wallet, unsafeMetadata, legalAccepted }); + await this.prepareWeb3WalletVerification({ strategy }); - const { message } = this.verifications.web3Wallet; - if (!message) { - clerkVerifyWeb3WalletCalledBeforeCreate('SignUp'); - } + const { message } = this.verifications.web3Wallet; + if (!message) { + clerkVerifyWeb3WalletCalledBeforeCreate('SignUp'); + } - let signature: string; - try { + let signature: string; + try { + signature = await generateSignature({ identifier, nonce: message, provider }); + } 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 + // signature request to be rejected. For this reason we retry the request once more + // in order for the flow to be able to be completed successfully. + // + // 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 }); - } 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 - // signature request to be rejected. For this reason we retry the request once more - // in order for the flow to be able to be completed successfully. - // - // 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 }); - } else { - throw err; - } + } else { + throw err; } - - return this.attemptWeb3WalletVerification({ signature, strategy }); } - clerkUnsupportedEnvironmentWarning('Web3'); - return this; + return this.attemptWeb3WalletVerification({ signature, strategy }); }; public authenticateWithMetamask = async ( @@ -260,19 +260,19 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - if (__BUILD_ENABLE_RHC__) { - const identifier = await getMetamaskIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithMetamask, - unsafeMetadata: params?.unsafeMetadata, - strategy: 'web3_metamask_signature', - legalAccepted: params?.legalAccepted, - }); + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Metamask'); + return this; } - clerkUnsupportedEnvironmentWarning('Metamask'); - return this; + const identifier = await getMetamaskIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithMetamask, + unsafeMetadata: params?.unsafeMetadata, + strategy: 'web3_metamask_signature', + legalAccepted: params?.legalAccepted, + }); }; public authenticateWithCoinbaseWallet = async ( @@ -280,19 +280,19 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - if (__BUILD_ENABLE_RHC__) { - const identifier = await getCoinbaseWalletIdentifier(); - return this.authenticateWithWeb3({ - identifier, - generateSignature: generateSignatureWithCoinbaseWallet, - unsafeMetadata: params?.unsafeMetadata, - strategy: 'web3_coinbase_wallet_signature', - legalAccepted: params?.legalAccepted, - }); + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); + return this; } - clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); - return this; + const identifier = await getCoinbaseWalletIdentifier(); + return this.authenticateWithWeb3({ + identifier, + generateSignature: generateSignatureWithCoinbaseWallet, + unsafeMetadata: params?.unsafeMetadata, + strategy: 'web3_coinbase_wallet_signature', + legalAccepted: params?.legalAccepted, + }); }; public authenticateWithRedirect = async ({ diff --git a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx index ccac9334dd8..e3ab2d052b0 100644 --- a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx +++ b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx @@ -34,23 +34,23 @@ function _OneTapStart(): JSX.Element | null { const shouldLoadGIS = !user?.id && !!environmentClientID; async function initializeGIS() { - if (__BUILD_ENABLE_RHC__) { - const google = await loadGIS(); + if (!__BUILD_ENABLE_RHC__) { + clerkUnsupportedEnvironmentWarning('Google Identity Services'); + return undefined; + } - google.accounts.id.initialize({ - client_id: environmentClientID!, - callback: oneTapCallback, - itp_support: ctx.itpSupport, - cancel_on_tap_outside: ctx.cancelOnTapOutside, - auto_select: false, - use_fedcm_for_prompt: ctx.fedCmSupport, - }); + const google = await loadGIS(); - return google; - } + google.accounts.id.initialize({ + client_id: environmentClientID!, + callback: oneTapCallback, + itp_support: ctx.itpSupport, + cancel_on_tap_outside: ctx.cancelOnTapOutside, + auto_select: false, + use_fedcm_for_prompt: ctx.fedCmSupport, + }); - clerkUnsupportedEnvironmentWarning('Google Identity Services'); - return undefined; + return google; } /** diff --git a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts index d95e834bd84..9406fdb75ad 100644 --- a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts +++ b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts @@ -2,9 +2,9 @@ import { getTurnstileToken } from './turnstile'; import type { CaptchaOptions } from './types'; export const getCaptchaToken = (opts: CaptchaOptions) => { - if (__BUILD_ENABLE_RHC__) { - return getTurnstileToken(opts); - } else { - throw new Error('Captcha is not supported in this environment'); + if (!__BUILD_ENABLE_RHC__) { + return Promise.reject(); } + + return getTurnstileToken(opts); }; diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 3e12678b648..68d7906088c 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -466,25 +466,23 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { } global.Clerk = c; - } else { - if (__BUILD_ENABLE_RHC__) { - // Hot-load latest ClerkJS from Clerk CDN - if (!global.Clerk) { - await loadClerkJsScript({ - ...this.options, - publishableKey: this.#publishableKey, - proxyUrl: this.proxyUrl, - domain: this.domain, - nonce: this.options.nonce, - }); - } - - if (!global.Clerk) { - throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.'); - } + } else if (__BUILD_ENABLE_RHC__) { + // Hot-load latest ClerkJS from Clerk CDN + if (!global.Clerk) { + await loadClerkJsScript({ + ...this.options, + publishableKey: this.#publishableKey, + proxyUrl: this.proxyUrl, + domain: this.domain, + nonce: this.options.nonce, + }); + } - await global.Clerk.load(this.options); + if (!global.Clerk) { + throw new Error('Failed to download latest ClerkJS. Contact support@clerk.com.'); } + + await global.Clerk.load(this.options); } if (global.Clerk?.loaded) { From a9d334a6a143e2beab3c4fc34fd0da8977a39b52 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Thu, 14 Nov 2024 11:56:05 -0500 Subject: [PATCH 5/9] chore: Clean up --- packages/clerk-js/src/core/clerk.ts | 60 +++++++++++-------- .../browser-extension/src/background/index.ts | 8 ++- 2 files changed, 40 insertions(+), 28 deletions(-) diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index 3f0f386432e..b705eb74541 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -264,7 +264,9 @@ export class Clerk implements ClerkInterface { const publishableKey = parsePublishableKey(this.publishableKey); if (!publishableKey) { - return errorThrower.throwInvalidPublishableKeyError({ key: this.publishableKey }); + return errorThrower.throwInvalidPublishableKeyError({ + key: this.publishableKey, + }); } return publishableKey.frontendApi; @@ -283,24 +285,22 @@ export class Clerk implements ClerkInterface { } public constructor(key: string, options?: DomainOrProxyUrl) { - const trimmedKey = (key || '').trim(); + key = (key || '').trim(); this.#domain = options?.domain; this.#proxyUrl = options?.proxyUrl; - if (!trimmedKey) { - errorThrower.throwMissingPublishableKeyError(); - return; + if (!key) { + return errorThrower.throwMissingPublishableKeyError(); } const publishableKey = parsePublishableKey(key); if (!publishableKey) { - errorThrower.throwInvalidPublishableKeyError({ key: trimmedKey }); - return; + return errorThrower.throwInvalidPublishableKeyError({ key }); } - this.#publishableKey = trimmedKey; + this.#publishableKey = key; this.#instanceType = publishableKey.instanceType; this.#fapiClient = createFapiClient(this); @@ -933,7 +933,7 @@ export class Clerk implements ClerkInterface { }; public addListener = (listener: ListenerCallback): UnsubscribeCallback => { - const memoizedListener = memoizeListenerCallback(listener); + listener = memoizeListenerCallback(listener); this.#listeners.push(listener); // emit right away if (this.client) { @@ -946,7 +946,7 @@ export class Clerk implements ClerkInterface { } const unsubscribe = () => { - this.#listeners = this.#listeners.filter(l => l !== memoizedListener); + this.#listeners = this.#listeners.filter(l => l !== listener); }; return unsubscribe; }; @@ -1054,7 +1054,7 @@ export class Clerk implements ClerkInterface { return ''; } - const waitlistUrl = this.#options.waitlistUrl || this.environment.displayConfig.waitlistUrl; + const waitlistUrl = this.#options['waitlistUrl'] || this.environment.displayConfig.waitlistUrl; return buildURL({ base: waitlistUrl }, { stringify: true }); } @@ -1189,13 +1189,12 @@ export class Clerk implements ClerkInterface { } const verificationStatus = getClerkQueryParam('__clerk_status'); - switch (verificationStatus) { - case 'verified': - throw new EmailLinkError(EmailLinkErrorCode.Failed); - case 'client_mismatch': - throw new EmailLinkError(EmailLinkErrorCode.ClientMismatch); - case 'expired': - throw new EmailLinkError(EmailLinkErrorCode.Expired); + if (verificationStatus === 'expired') { + throw new EmailLinkError(EmailLinkErrorCode.Expired); + } else if (verificationStatus === 'client_mismatch') { + throw new EmailLinkError(EmailLinkErrorCode.ClientMismatch); + } else if (verificationStatus !== 'verified') { + throw new EmailLinkError(EmailLinkErrorCode.Failed); } const newSessionId = getClerkQueryParam('__clerk_created_session'); @@ -1215,9 +1214,7 @@ export class Clerk implements ClerkInterface { session: newSessionId, redirectUrl: params.redirectUrlComplete, }); - } - - if (shouldContinueOnThisDevice) { + } else if (shouldContinueOnThisDevice) { return redirectContinue(); } @@ -1331,7 +1328,13 @@ export class Clerk implements ClerkInterface { signUp, verifyEmailPath: params.verifyEmailAddressUrl || - buildURL({ base: displayConfig.signUpUrl, hashPath: '/verify-email-address' }, { stringify: true }), + buildURL( + { + base: displayConfig.signUpUrl, + hashPath: '/verify-email-address', + }, + { stringify: true }, + ), verifyPhonePath: params.verifyPhoneNumberUrl || buildURL({ base: displayConfig.signUpUrl, hashPath: '/verify-phone-number' }, { stringify: true }), @@ -1517,7 +1520,7 @@ export class Clerk implements ClerkInterface { public authenticateWithMetamask = async (props: AuthenticateWithMetamaskParams = {}): Promise => { if (!__BUILD_ENABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Metamask'); - return Promise.reject(); + return; } await this.authenticateWithWeb3({ @@ -1564,7 +1567,11 @@ export class Clerk implements ClerkInterface { let signInOrSignUp: SignInResource | SignUpResource; try { - signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ identifier, generateSignature, strategy }); + signInOrSignUp = await this.client.signIn.authenticateWithWeb3({ + identifier, + generateSignature, + strategy, + }); } catch (err) { if (isError(err, ERROR_CODES.FORM_IDENTIFIER_NOT_FOUND)) { signInOrSignUp = await this.client.signUp.authenticateWithWeb3({ @@ -1674,7 +1681,10 @@ export class Clerk implements ClerkInterface { // 2. clerk-js initializes propA with a default value // 3. The customer update propB independently of propA and window.Clerk.updateProps is called // 4. If we don't merge the new props with the current options, propA will be reset to undefined - const props = { ..._props, options: this.#initOptions({ ...this.#options, ..._props.options }) }; + const props = { + ..._props, + options: this.#initOptions({ ...this.#options, ..._props.options }), + }; return this.#componentControls?.ensureMounted().then(controls => controls.updateProps(props)); }; diff --git a/playground/browser-extension/src/background/index.ts b/playground/browser-extension/src/background/index.ts index fc21ac1910b..229e330bdc0 100644 --- a/playground/browser-extension/src/background/index.ts +++ b/playground/browser-extension/src/background/index.ts @@ -14,7 +14,7 @@ async function getToken() { }); if (!clerk.session) { - console.warn('No session found'); + return null; } return await clerk.session?.getToken(); @@ -25,8 +25,10 @@ async function getToken() { // It must return true, in order to keep the connection open and send a response later. chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { if (request.greeting === 'get-token') { - console.log('Handling request for the user\'s current token'); - getToken().then((token) => sendResponse({ token })).catch((error) => console.error(JSON.stringify(error))); + console.log("Handling request for the user's current token"); + getToken() + .then(token => sendResponse({ token })) + .catch(error => console.error(JSON.stringify(error))); } return true; }); From 7daa1d73467938fdd5dd807e4fc51f635f258c63 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Thu, 14 Nov 2024 12:17:57 -0500 Subject: [PATCH 6/9] chore: Invert __BUILD_ENABLE_RHC__ --- packages/chrome-extension/tsup.config.ts | 2 +- packages/clerk-js/rspack.config.js | 12 ++++++------ packages/clerk-js/src/core/clerk.ts | 8 ++++---- packages/clerk-js/src/core/resources/SignIn.ts | 6 +++--- packages/clerk-js/src/core/resources/SignUp.ts | 8 ++++---- packages/clerk-js/src/globals.d.ts | 2 +- .../src/ui/components/GoogleOneTap/one-tap-start.tsx | 2 +- .../clerk-js/src/utils/captcha/getCaptchaToken.ts | 2 +- packages/react/src/globals.d.ts | 2 +- packages/react/src/isomorphicClerk.ts | 6 +++--- 10 files changed, 25 insertions(+), 25 deletions(-) diff --git a/packages/chrome-extension/tsup.config.ts b/packages/chrome-extension/tsup.config.ts index 0f8d5d72ae7..317efbfa3c8 100644 --- a/packages/chrome-extension/tsup.config.ts +++ b/packages/chrome-extension/tsup.config.ts @@ -22,7 +22,7 @@ export default defineConfig(overrideOptions => { PACKAGE_NAME: `"${name}"`, PACKAGE_VERSION: `"${version}"`, __DEV__: `${isWatch}`, - __BUILD_ENABLE_RHC__: 'false', + __BUILD_DISABLE_RHC__: 'true', }, }; diff --git a/packages/clerk-js/rspack.config.js b/packages/clerk-js/rspack.config.js index ba30d5c2a28..91bddaa0915 100644 --- a/packages/clerk-js/rspack.config.js +++ b/packages/clerk-js/rspack.config.js @@ -29,10 +29,10 @@ const variantToSourceFile = { * * @param {object} config * @param {'development'|'production'} config.mode - * @param {boolean} [config.rhc=true] + * @param {boolean} [config.disableRHC=false] * @returns { import('@rspack/cli').Configuration } */ -const common = ({ mode, rhc = true }) => { +const common = ({ mode, disableRHC = false }) => { return { mode, resolve: { @@ -42,7 +42,7 @@ const common = ({ mode, rhc = true }) => { }, plugins: [ new rspack.DefinePlugin({ - __BUILD_ENABLE_RHC__: JSON.stringify(rhc), + __BUILD_DISABLE_RHC__: JSON.stringify(disableRHC), __DEV__: isDevelopment(mode), __PKG_VERSION__: JSON.stringify(packageJSON.version), __PKG_NAME__: JSON.stringify(packageJSON.name), @@ -406,7 +406,7 @@ const prodConfig = ({ mode, env, analysis }) => { const clerkEsmNoRHC = merge( entryForVariant(variants.clerkNoRHC), - common({ mode, rhc: false }), + common({ mode, disableRHC: true }), commonForProd(), commonForProdBundled(), { @@ -433,7 +433,7 @@ const prodConfig = ({ mode, env, analysis }) => { const clerkCjsNoRHC = merge( entryForVariant(variants.clerkNoRHC), - common({ mode, rhc: false }), + common({ mode, disableRHC: true }), commonForProd(), commonForProdBundled(), { @@ -536,7 +536,7 @@ const devConfig = ({ mode, env }) => { // prettier-ignore [variants.clerkBrowserNoRHC]: merge( entryForVariant(variants.clerkBrowserNoRHC), - common({ mode, rhc: false }), + common({ mode, disableRHC: true }), commonForDev(), ), [variants.clerkHeadless]: merge( diff --git a/packages/clerk-js/src/core/clerk.ts b/packages/clerk-js/src/core/clerk.ts index b705eb74541..516ce741dcd 100644 --- a/packages/clerk-js/src/core/clerk.ts +++ b/packages/clerk-js/src/core/clerk.ts @@ -1495,7 +1495,7 @@ export class Clerk implements ClerkInterface { public authenticateWithGoogleOneTap = async ( params: AuthenticateWithGoogleOneTapParams, ): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Google One Tap'); return this.client!.signIn; // TODO: Remove not null assertion } @@ -1518,7 +1518,7 @@ export class Clerk implements ClerkInterface { }; public authenticateWithMetamask = async (props: AuthenticateWithMetamaskParams = {}): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Metamask'); return; } @@ -1530,7 +1530,7 @@ export class Clerk implements ClerkInterface { }; public authenticateWithCoinbaseWallet = async (props: AuthenticateWithCoinbaseWalletParams = {}): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); return; } @@ -1549,7 +1549,7 @@ export class Clerk implements ClerkInterface { strategy, legalAccepted, }: ClerkAuthenticateWithWeb3Params): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Web3'); return; } diff --git a/packages/clerk-js/src/core/resources/SignIn.ts b/packages/clerk-js/src/core/resources/SignIn.ts index ad803cbb78a..ce9efceead4 100644 --- a/packages/clerk-js/src/core/resources/SignIn.ts +++ b/packages/clerk-js/src/core/resources/SignIn.ts @@ -238,7 +238,7 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithWeb3 = async (params: AuthenticateWithWeb3Params): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Web3'); return this; } @@ -289,7 +289,7 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithMetamask = async (): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Metamask'); return this; } @@ -303,7 +303,7 @@ export class SignIn extends BaseResource implements SignInResource { }; public authenticateWithCoinbaseWallet = async (): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); return this; } diff --git a/packages/clerk-js/src/core/resources/SignUp.ts b/packages/clerk-js/src/core/resources/SignUp.ts index f58f6a2c602..be227ce3c81 100644 --- a/packages/clerk-js/src/core/resources/SignUp.ts +++ b/packages/clerk-js/src/core/resources/SignUp.ts @@ -81,7 +81,7 @@ export class SignUp extends BaseResource implements SignUpResource { create = async (params: SignUpCreateParams): Promise => { const paramsWithCaptcha: Record = params; - if (__BUILD_ENABLE_RHC__) { + if (!__BUILD_DISABLE_RHC__) { const { captchaSiteKey, canUseCaptcha, @@ -207,7 +207,7 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Web3'); return this; } @@ -260,7 +260,7 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Metamask'); return this; } @@ -280,7 +280,7 @@ export class SignUp extends BaseResource implements SignUpResource { legalAccepted?: boolean; }, ): Promise => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Coinbase Wallet'); return this; } diff --git a/packages/clerk-js/src/globals.d.ts b/packages/clerk-js/src/globals.d.ts index 97632ce2f46..4cd691f52f6 100644 --- a/packages/clerk-js/src/globals.d.ts +++ b/packages/clerk-js/src/globals.d.ts @@ -2,7 +2,7 @@ declare global { const __DEV__: boolean; const __PKG_NAME__: string; const __PKG_VERSION__: string; - const __BUILD_ENABLE_RHC__: string; + const __BUILD_DISABLE_RHC__: string; interface Window { __unstable__onBeforeSetActive: () => Promise | void; diff --git a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx index e3ab2d052b0..a06db08f630 100644 --- a/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx +++ b/packages/clerk-js/src/ui/components/GoogleOneTap/one-tap-start.tsx @@ -34,7 +34,7 @@ function _OneTapStart(): JSX.Element | null { const shouldLoadGIS = !user?.id && !!environmentClientID; async function initializeGIS() { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { clerkUnsupportedEnvironmentWarning('Google Identity Services'); return undefined; } diff --git a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts index 9406fdb75ad..1c38f5f1735 100644 --- a/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts +++ b/packages/clerk-js/src/utils/captcha/getCaptchaToken.ts @@ -2,7 +2,7 @@ import { getTurnstileToken } from './turnstile'; import type { CaptchaOptions } from './types'; export const getCaptchaToken = (opts: CaptchaOptions) => { - if (!__BUILD_ENABLE_RHC__) { + if (__BUILD_DISABLE_RHC__) { return Promise.reject(); } diff --git a/packages/react/src/globals.d.ts b/packages/react/src/globals.d.ts index 61103655a8c..148a5212af8 100644 --- a/packages/react/src/globals.d.ts +++ b/packages/react/src/globals.d.ts @@ -5,5 +5,5 @@ declare global { const PACKAGE_VERSION: string; const JS_PACKAGE_VERSION: string; const __DEV__: boolean; - const __BUILD_ENABLE_RHC__: string; + const __BUILD_DISABLE_RHC__: string; } diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 68d7906088c..41033e128e1 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -60,9 +60,9 @@ import type { } from './types'; import { isConstructor } from './utils'; -if (typeof __BUILD_ENABLE_RHC__ === 'undefined') { +if (typeof __BUILD_DISABLE_RHC__ === 'undefined') { // @ts-expect-error -- TODO: Fix typing - globalThis.__BUILD_ENABLE_RHC__ = true; + globalThis.__BUILD_DISABLE_RHC__ = false; } const SDK_METADATA = { @@ -466,7 +466,7 @@ export class IsomorphicClerk implements IsomorphicLoadedClerk { } global.Clerk = c; - } else if (__BUILD_ENABLE_RHC__) { + } else if (!__BUILD_DISABLE_RHC__) { // Hot-load latest ClerkJS from Clerk CDN if (!global.Clerk) { await loadClerkJsScript({ From e87b21a08b2e3c98092bbc1508fb6caf85e5e22e Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Fri, 22 Nov 2024 09:34:19 -0500 Subject: [PATCH 7/9] chore: Fix globalThis typing --- packages/react/src/globals.d.ts | 2 +- packages/react/src/isomorphicClerk.ts | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/react/src/globals.d.ts b/packages/react/src/globals.d.ts index 148a5212af8..af26a664708 100644 --- a/packages/react/src/globals.d.ts +++ b/packages/react/src/globals.d.ts @@ -5,5 +5,5 @@ declare global { const PACKAGE_VERSION: string; const JS_PACKAGE_VERSION: string; const __DEV__: boolean; - const __BUILD_DISABLE_RHC__: string; + var __BUILD_DISABLE_RHC__: boolean; // eslint-disable-line no-var } diff --git a/packages/react/src/isomorphicClerk.ts b/packages/react/src/isomorphicClerk.ts index 41033e128e1..cabf975d4cf 100644 --- a/packages/react/src/isomorphicClerk.ts +++ b/packages/react/src/isomorphicClerk.ts @@ -61,7 +61,6 @@ import type { import { isConstructor } from './utils'; if (typeof __BUILD_DISABLE_RHC__ === 'undefined') { - // @ts-expect-error -- TODO: Fix typing globalThis.__BUILD_DISABLE_RHC__ = false; } From e4ac04dfa2718858e7dac2378059cc052d5c4023 Mon Sep 17 00:00:00 2001 From: Tom Milewski Date: Fri, 22 Nov 2024 09:37:45 -0500 Subject: [PATCH 8/9] chore: Optimize Extention playground icon file size --- playground/browser-extension/assets/icon.png | Bin 79750 -> 14295 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/playground/browser-extension/assets/icon.png b/playground/browser-extension/assets/icon.png index cfd931be9f3312acf4042d8dfe6be4d4f2b74b87..df3eaad5939e903789c09285a98dc3ced1a54e46 100644 GIT binary patch literal 14295 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 R|M~e!OHE(3UfD7F{{RNg1h@bI literal 79750 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®#@um)NH>6r=Ese1ao~VfxaI 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 Date: Fri, 22 Nov 2024 09:43:37 -0500 Subject: [PATCH 9/9] chore: Update global in changeset --- .changeset/afraid-toes-sin.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/afraid-toes-sin.md b/.changeset/afraid-toes-sin.md index 874fa3039bd..20fe12183ae 100644 --- a/.changeset/afraid-toes-sin.md +++ b/.changeset/afraid-toes-sin.md @@ -3,4 +3,4 @@ '@clerk/clerk-react': patch --- -Include **BUILD_ENABLE_RHC** to allow for builds which remove remotely hosted code as it is a requirement for browser extensions. +Include **BUILD_DISABLE_RHC** to allow for builds which remove remotely hosted code as it is a requirement for browser extensions.