@dynamic-labs-sdk/client 0.26.3 → 0.26.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{InvalidParamError-lzmyACdu.native.esm.js → InvalidParamError-CB0LQwcO.native.esm.js} +2 -2
- package/dist/{InvalidParamError-lzmyACdu.native.esm.js.map → InvalidParamError-CB0LQwcO.native.esm.js.map} +1 -1
- package/dist/{InvalidParamError-D70dsAPf.esm.js → InvalidParamError-CaO8zuAt.esm.js} +2 -2
- package/dist/{InvalidParamError-D70dsAPf.esm.js.map → InvalidParamError-CaO8zuAt.esm.js.map} +1 -1
- package/dist/{InvalidParamError-BVuNzsXN.cjs → InvalidParamError-D745dtMS.cjs} +3 -3
- package/dist/{InvalidParamError-BVuNzsXN.cjs.map → InvalidParamError-D745dtMS.cjs.map} +1 -1
- package/dist/{NotWaasWalletAccountError-Ba1US7YQ.esm.js → NotWaasWalletAccountError-D9HOBza_.esm.js} +3 -3
- package/dist/{NotWaasWalletAccountError-Ba1US7YQ.esm.js.map → NotWaasWalletAccountError-D9HOBza_.esm.js.map} +1 -1
- package/dist/{NotWaasWalletAccountError-DAthnj1O.cjs → NotWaasWalletAccountError-DEZeNnLy.cjs} +3 -3
- package/dist/{NotWaasWalletAccountError-DAthnj1O.cjs.map → NotWaasWalletAccountError-DEZeNnLy.cjs.map} +1 -1
- package/dist/{NotWaasWalletAccountError-DA_3rPzY.native.esm.js → NotWaasWalletAccountError-VxTJzIUw.native.esm.js} +3 -3
- package/dist/{NotWaasWalletAccountError-DA_3rPzY.native.esm.js.map → NotWaasWalletAccountError-VxTJzIUw.native.esm.js.map} +1 -1
- package/dist/core.cjs +5 -5
- package/dist/core.esm.js +7 -7
- package/dist/core.esm.js.map +1 -1
- package/dist/core.native.esm.js +5 -5
- package/dist/{getNetworkProviderFromNetworkId-CCzPLH2P.cjs → getNetworkProviderFromNetworkId-C0hhJBuw.cjs} +5 -4
- package/dist/getNetworkProviderFromNetworkId-C0hhJBuw.cjs.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-D-5y3cSc.esm.js → getNetworkProviderFromNetworkId-DS1xtXK3.esm.js} +9 -8
- package/dist/getNetworkProviderFromNetworkId-DS1xtXK3.esm.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-BHlnzW2_.native.esm.js → getNetworkProviderFromNetworkId-De1Y__cK.native.esm.js} +5 -4
- package/dist/getNetworkProviderFromNetworkId-De1Y__cK.native.esm.js.map +1 -0
- package/dist/{getSignedSessionId-BmFAsio4.cjs → getSignedSessionId-BEHO1AHh.cjs} +3 -3
- package/dist/{getSignedSessionId-BmFAsio4.cjs.map → getSignedSessionId-BEHO1AHh.cjs.map} +1 -1
- package/dist/{getSignedSessionId-AtcPEeBb.native.esm.js → getSignedSessionId-Dez0C64D.native.esm.js} +3 -3
- package/dist/{getSignedSessionId-AtcPEeBb.native.esm.js.map → getSignedSessionId-Dez0C64D.native.esm.js.map} +1 -1
- package/dist/{getSignedSessionId-rgb8ovcE.esm.js → getSignedSessionId-DrqGRbMx.esm.js} +3 -3
- package/dist/{getSignedSessionId-rgb8ovcE.esm.js.map → getSignedSessionId-DrqGRbMx.esm.js.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-2KeNZPyG.esm.js → getVerifiedCredentialForWalletAccount-BHVopHZ0.esm.js} +2 -2
- package/dist/{getVerifiedCredentialForWalletAccount-2KeNZPyG.esm.js.map → getVerifiedCredentialForWalletAccount-BHVopHZ0.esm.js.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-DlaMYdQB.cjs → getVerifiedCredentialForWalletAccount-C-21KB51.cjs} +3 -3
- package/dist/{getVerifiedCredentialForWalletAccount-DlaMYdQB.cjs.map → getVerifiedCredentialForWalletAccount-C-21KB51.cjs.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-DnkqOcDi.native.esm.js → getVerifiedCredentialForWalletAccount-DPdNYxR1.native.esm.js} +2 -2
- package/dist/{getVerifiedCredentialForWalletAccount-DnkqOcDi.native.esm.js.map → getVerifiedCredentialForWalletAccount-DPdNYxR1.native.esm.js.map} +1 -1
- package/dist/index.cjs +5 -5
- package/dist/index.esm.js +8 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/index.native.esm.js +5 -5
- package/dist/{isMfaRequiredForAction-CpucxOPi.native.esm.js → isMfaRequiredForAction-BCmIa8zG.native.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-CpucxOPi.native.esm.js.map → isMfaRequiredForAction-BCmIa8zG.native.esm.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-nMwLvQ_T.esm.js → isMfaRequiredForAction-CUnqNQlh.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-nMwLvQ_T.esm.js.map → isMfaRequiredForAction-CUnqNQlh.esm.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-BkOri8C4.cjs → isMfaRequiredForAction-DQPdh-pT.cjs} +2 -2
- package/dist/{isMfaRequiredForAction-BkOri8C4.cjs.map → isMfaRequiredForAction-DQPdh-pT.cjs.map} +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/waas.cjs +4 -4
- package/dist/waas.esm.js +3 -3
- package/dist/waas.native.esm.js +3 -3
- package/dist/waasCore.cjs +4 -4
- package/dist/waasCore.esm.js +3 -3
- package/dist/waasCore.native.esm.js +3 -3
- package/package.json +2 -2
- package/dist/getNetworkProviderFromNetworkId-BHlnzW2_.native.esm.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-CCzPLH2P.cjs.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-D-5y3cSc.esm.js.map +0 -1
package/dist/core.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"core.esm.js","names":["createStorageKeySchema","getNetworkId: LastKnownNetworkRegistry['getNetworkId']","getNetworkProviders","setNetworkId: LastKnownNetworkRegistry['setNetworkId']","createRuntimeServiceAccessKey","target: unknown","providers: T[]","target: unknown","getActiveNetworkIdFromLastKnownRegistry: GetActiveNetworkIdFromLastKnownRegistry","switchActiveNetworkInLastKnownRegistry: SwitchActiveNetworkInLastKnownRegistry","packageName","packageVersion"],"sources":["../src/errors/ClientsDoNotMatchError.ts","../src/errors/MethodNotImplementedError.ts","../src/errors/MultipleClientsFoundError.ts","../src/modules/extension/registerExtension/registerExtension.ts","../src/modules/initializeClient/waitForProjectSettings/waitForProjectSettings.ts","../src/modules/wallets/networks/createBaseNetworkProvider/createBaseNetworkProvider.ts","../src/modules/wallets/networks/getNetworkDataForNetworkId/getNetworkDataForNetworkId.ts","../src/modules/wallets/networks/lastKnownNetworkRegistry/createLastKnownNetworkRegistry/schema.ts","../src/modules/wallets/networks/lastKnownNetworkRegistry/createLastKnownNetworkRegistry/createLastKnownNetworkRegistry.ts","../src/modules/wallets/networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry/getLastKnownNetworkRegistry.ts","../src/modules/wallets/utils/formatWalletProviderGroupKey/formatWalletProviderGroupKey.ts","../src/modules/wallets/utils/getAllProvidersFromWindow/getAllProvidersFromWindow.ts","../src/modules/wallets/utils/getInjectedProviderFromWindow/getInjectedProviderFromWindow.ts","../src/modules/wallets/walletProvider/defaultImplementations/getActiveNetworkIdFromLastKnownRegistry/getActiveNetworkIdFromLastKnownRegistry.ts","../src/modules/wallets/walletProvider/defaultImplementations/switchActiveNetworkInLastKnownRegistry/switchActiveNetworkInLastKnownRegistry.ts","../src/modules/wallets/walletProvider/events/createWalletProviderEventEmitter/createWalletProviderEventEmitter.ts","../src/utils/bufferToBase64/bufferToBase64.ts","../src/utils/filterDuplicates/filterDuplicates.ts","../src/utils/parseAmountToSmallestUnit/parseAmountToSmallestUnit.ts","../src/errors/ReactNativeOnlyError.ts","../src/services/nativeManifest/getReactNativeManifest/getReactNativeManifest.ts","../src/exports/core.ts"],"sourcesContent":["import { BaseError } from './base';\n\nexport class ClientsDoNotMatchError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'clients_do_not_match_error',\n docsUrl: null,\n name: 'ClientsDoNotMatchError',\n shortMessage: 'Clients do not match',\n });\n }\n}\n","import { BaseError } from './base';\n\nexport class MethodNotImplementedError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(methodName: string) {\n super({\n cause: null,\n code: 'method_not_implemented_error',\n docsUrl: null,\n name: 'MethodNotImplementedError',\n shortMessage: `This method is not implemented: ${methodName}`,\n });\n }\n}\n","import { BaseError } from './base';\n\nexport class MultipleClientsFoundError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'multiple_clients_found_error',\n docsUrl: null,\n name: 'MultipleClientsFoundError',\n shortMessage:\n 'Multiple Dynamic clients have been initialized. Please provide the intended client for this action explicitly',\n });\n }\n}\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\n\ntype RegisterExtensionParams = {\n extensionKey: string;\n};\n\n/**\n * Registers an extension to the client.\n *\n * Other extensions can be aware of which extensions are present,\n * and allows creating dependencies between extensions.\n *\n * @param client - The client instance.\n * @param extensionKey - The key of the extension to register.\n * @returns The client instance.\n * @instrumented\n */\nexport const registerExtension = (\n { extensionKey }: RegisterExtensionParams,\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n core.extensions.add(extensionKey);\n};\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { assertDefined } from '../../../utils/assertDefined';\nimport { FETCH_PROJECT_SETTINGS_TRACKER_KEY } from '../consts';\n\n/** @instrumented */\nexport const waitForProjectSettings = async (client: DynamicClient) => {\n const core = getCore(client);\n\n const projectSettingsTracker = core.initTrack.getTracker<void>(\n FETCH_PROJECT_SETTINGS_TRACKER_KEY\n );\n\n assertDefined(projectSettingsTracker, 'Project settings tracker not found');\n\n await projectSettingsTracker.promise;\n\n assertDefined(\n client.projectSettings,\n 'Project settings still not available after awaiting its tracker'\n );\n\n return client.projectSettings;\n};\n","import type { Chain } from '../../../chain';\nimport type {\n BaseNetworkProvider,\n NetworkData,\n} from '../networkProvider/networkProvider.types';\n\n/** @instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const createBaseNetworkProvider = <TChain extends Chain = Chain>(\n chain: TChain,\n networkData: NetworkData\n): Omit<BaseNetworkProvider<TChain>, 'getBalance'> => ({\n blockExplorerUrls: networkData.blockExplorerUrls,\n chain,\n displayName: networkData.displayName,\n iconUrl: networkData.iconUrl,\n id: `${chain}-${networkData.networkId}`,\n name: networkData.name,\n nativeCurrency: networkData.nativeCurrency,\n networkId: networkData.networkId,\n rpcUrls: networkData.rpcUrls,\n testnet: networkData.testnet,\n});\n","import type { DynamicClient } from '../../../../client/types';\nimport type { Chain } from '../../../chain';\nimport { getNetworksData } from '../getNetworksData';\nimport type { NetworkData } from '../networkProvider/networkProvider.types';\n\ntype GetNetworkDataForNetworkIdProps = {\n chain: Chain;\n networkId: string;\n};\n\n/** @instrumented */\nexport const getNetworkDataForNetworkId = (\n { networkId, chain }: GetNetworkDataForNetworkIdProps,\n client: DynamicClient\n): NetworkData | undefined => {\n const networksData = getNetworksData(client);\n\n const networkData = networksData.find(\n (networkData) =>\n networkData.networkId === networkId && networkData.chain === chain\n );\n\n return networkData;\n};\n","import * as z from 'zod/mini';\n\nimport { createStorageKeySchema } from '../../../../../services/storage';\n\nexport const networkRegistryStorageKeySchema = createStorageKeySchema({\n key: 'lastKnownNetworkRegistry',\n schema: z.record(z.string(), z.string()),\n});\n","import { getCore } from '../../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../../client/types';\nimport { NoNetworkProvidersError } from '../../../../../errors/NoNetworkProvidersError';\nimport { assertDefined } from '../../../../../utils/assertDefined';\nimport { getWalletProviderByKey } from '../../../getWalletProviderByKey';\nimport { getNetworkProviders } from '../../getNetworkProviders';\nimport type { LastKnownNetworkRegistry } from '../LastKnownNetworkRegistry.types';\nimport { networkRegistryStorageKeySchema } from './schema';\n\n/**\n * Creates the registry that keeps tabs on which wallet provider is\n * connected to which network.\n *\n * Reminder that this will not be used for chains that have an internal way to\n * switch networks (ex EVM).\n * @not-instrumented\n */\nexport const createLastKnownNetworkRegistry = (\n client: DynamicClient\n): LastKnownNetworkRegistry => {\n const core = getCore(client);\n\n const walletProviderKeyToNetworkId = new Map<string, string>();\n\n const getNetworkId: LastKnownNetworkRegistry['getNetworkId'] = async ({\n walletProviderKey,\n }) => {\n // Priorities:\n // 1. In memory\n // 2. Storage\n // 3. First available network for this wallet's chain\n\n if (walletProviderKeyToNetworkId.has(walletProviderKey)) {\n return {\n networkId: walletProviderKeyToNetworkId.get(\n walletProviderKey\n ) as string,\n };\n }\n\n const storageRecords = await core.storage.getItem(\n networkRegistryStorageKeySchema\n );\n\n if (storageRecords && storageRecords[walletProviderKey]) {\n const networkId = storageRecords[walletProviderKey];\n\n walletProviderKeyToNetworkId.set(walletProviderKey, networkId);\n\n return { networkId };\n }\n\n const walletProvider = getWalletProviderByKey(\n { walletProviderKey },\n client\n );\n\n const networkProviders = getNetworkProviders(client);\n\n if (networkProviders.length === 0) {\n throw new NoNetworkProvidersError();\n }\n\n const defaultNetworkProvider = networkProviders.find(\n (networkProvider) => networkProvider.chain === walletProvider.chain\n );\n\n assertDefined(\n defaultNetworkProvider,\n `No networks found for chain ${walletProvider.chain}`\n );\n\n walletProviderKeyToNetworkId.set(\n walletProviderKey,\n defaultNetworkProvider.networkId\n );\n\n // No need to set in storage, as we're just falling back to the default\n return { networkId: defaultNetworkProvider.networkId };\n };\n\n const setNetworkId: LastKnownNetworkRegistry['setNetworkId'] = async ({\n networkId,\n walletProviderKey,\n }) => {\n walletProviderKeyToNetworkId.set(walletProviderKey, networkId);\n\n await core.storage.setItem(\n networkRegistryStorageKeySchema,\n Object.fromEntries(walletProviderKeyToNetworkId.entries())\n );\n };\n\n return { getNetworkId, setNetworkId };\n};\n","import { createRuntimeServiceAccessKey } from '../../../../../services/runtimeServices';\nimport { createLastKnownNetworkRegistry } from '../createLastKnownNetworkRegistry';\n\nexport const getLastKnownNetworkRegistry = createRuntimeServiceAccessKey(\n 'last-known-network-registry',\n (client) => createLastKnownNetworkRegistry(client)\n);\n","/** @not-instrumented */\nexport const formatWalletProviderGroupKey = (walletName: string): string =>\n walletName.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n","/* eslint-disable no-restricted-globals */\n\n/**\n * Retrieves all providers from a window path.\n *\n * Unlike getInjectedProviderFromWindow which returns only the first provider,\n * this function returns ALL providers found at the path, including those\n * in a .providers array if present.\n *\n * This is particularly useful for detecting wallet providers in wallet app\n * in-app browsers, where wallets inject their provider into the window object.\n *\n * @param path - Dot-separated path to traverse (e.g., \"ethereum\")\n * @returns Array of all providers found, or empty array if none\n * @not-instrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const getAllProvidersFromWindow = <T = unknown>(path: string): T[] => {\n if (typeof window === 'undefined') {\n return [];\n }\n\n // Traverse the path safely\n const target: unknown = path.split('.').reduce<unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (acc, key) => (acc == null ? null : (acc as any)[key]),\n window\n );\n\n if (typeof target !== 'object' || target === null) {\n return [];\n }\n\n if (Array.isArray(target)) {\n return target as T[];\n }\n\n const providers: T[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const providersArray = (target as any).providers;\n\n // If target has a .providers array, return all providers from it\n if (providersArray && Array.isArray(providersArray)) {\n providers.push(...(providersArray as T[]));\n }\n\n // Always include the target itself as a provider (if it's not just a container)\n // This handles the case where window.ethereum is both a provider AND has a providers array\n providers.push(target as T);\n\n return providers;\n};\n","/* eslint-disable no-restricted-globals */\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const getInjectedProviderFromWindow = <T = unknown>(\n path: string\n): T | null => {\n if (typeof window === 'undefined') {\n return null;\n }\n\n // Traverse the path safely\n const target: unknown = path.split('.').reduce<unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (acc, key) => (acc == null ? null : (acc as any)[key]),\n window\n );\n\n if (typeof target !== 'object' || target === null) {\n return null;\n }\n\n if (Array.isArray(target)) {\n return target.length > 0 ? (target[0] as T) : null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const providersArray = (target as any).providers;\n\n if (providersArray && Array.isArray(providersArray)) {\n return providersArray.length > 0 ? (providersArray[0] as T) : null;\n }\n\n return target as T;\n};\n","import type { DynamicClient } from '../../../../../client/types/DynamicClient';\nimport { getLastKnownNetworkRegistry } from '../../../networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry/getLastKnownNetworkRegistry';\nimport type { WalletProvider } from '../../walletProvider.types';\n\ntype GetActiveNetworkIdFromLastKnownRegistry = (args: {\n client: DynamicClient;\n walletProviderKey: string;\n}) => ReturnType<WalletProvider['getActiveNetworkId']>;\n\n/** @instrumented */\nexport const getActiveNetworkIdFromLastKnownRegistry: GetActiveNetworkIdFromLastKnownRegistry =\n async ({ client, walletProviderKey }) => {\n const networkRegistry = getLastKnownNetworkRegistry(client);\n\n return networkRegistry.getNetworkId({ walletProviderKey });\n };\n","import type { DynamicClient } from '../../../../../client/types/DynamicClient';\nimport { getLastKnownNetworkRegistry } from '../../../networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry/getLastKnownNetworkRegistry';\nimport type { WalletProvider } from '../../walletProvider.types';\n\ntype SwitchActiveNetworkInLastKnownRegistry = (args: {\n client: DynamicClient;\n networkId: string;\n walletProviderKey: string;\n}) => ReturnType<NonNullable<WalletProvider['switchActiveNetwork']>>;\n\n/** @instrumented */\nexport const switchActiveNetworkInLastKnownRegistry: SwitchActiveNetworkInLastKnownRegistry =\n async ({ client, networkId, walletProviderKey }) => {\n const networkRegistry = getLastKnownNetworkRegistry(client);\n\n await networkRegistry.setNetworkId({\n networkId,\n walletProviderKey,\n });\n };\n","import EventEmitter from 'eventemitter3';\n\nimport { assertDefined } from '../../../../../utils/assertDefined';\nimport type { WalletProvider } from '../../walletProvider.types';\nimport type { WalletProviderEvents } from '../walletProviderEvents.types';\n\ntype CreateWalletProviderEventEmitterParams<R = void> = {\n /**\n * Callback responsible for removing the listeners from the external wallet provider event emitters\n * to the the Dynamic handlers that will emit the wallet provider events.\n * @instrumented\n */\n removeEventListeners: (params: {\n handleAccountsChanged: (params: { addresses: string[] }) => void;\n handleDisconnected: () => void;\n handleNetworkChanged: (params: { networkId: string }) => void;\n /**\n * Value returned by setupEventListeners, particularly useful for cleaning up the event listeners\n */\n setupReturnValue: R;\n }) => void;\n /**\n * Callback responsible for connecting the external wallet provider event emitters\n * to the the Dynamic handlers that will emit the wallet provider events.\n *\n * @returns May return a value that will be later passed to removeEventListeners as `setupReturnValue`\n */\n setupEventListeners: (params: {\n handleAccountsChanged: (params: { addresses: string[] }) => void;\n handleDisconnected: () => void;\n handleNetworkChanged: (params: { networkId: string }) => void;\n }) => R;\n /**\n * List of events that the wallet provider supports listening to.\n * Defaults to all events.\n */\n supportedEvents?: (keyof WalletProviderEvents)[];\n};\n\n/**\n * Takes a callback that registers handlers for the external wallet provider.\n * Returns both a getter of an eventEmitter that can be exposed via the wallet provider\n * and a callback that will be used to destroy the listeners.\n * @not-instrumented\n */\nexport const createWalletProviderEventEmitter = <R = void>({\n removeEventListeners,\n setupEventListeners,\n supportedEvents = ['accountsChanged', 'disconnected', 'networkChanged'],\n}: CreateWalletProviderEventEmitterParams<R>) => {\n let eventEmitter: EventEmitter<WalletProviderEvents> | undefined;\n\n /** Value returned by setupEventListeners */\n let setupReturnValue: R;\n\n const handleAccountsChanged = (params: { addresses: string[] }) => {\n assertDefined(eventEmitter, 'Event emitter not defined');\n eventEmitter.emit('accountsChanged', params);\n };\n\n const handleDisconnected = () => {\n assertDefined(eventEmitter, 'Event emitter not defined');\n eventEmitter.emit('disconnected');\n };\n\n const handleNetworkChanged = (params: { networkId: string }) => {\n assertDefined(eventEmitter, 'Event emitter not defined');\n eventEmitter.emit('networkChanged', params);\n };\n\n const cleanupEventEmitter = () => {\n if (!eventEmitter) {\n return;\n }\n\n removeEventListeners({\n handleAccountsChanged,\n handleDisconnected,\n handleNetworkChanged,\n setupReturnValue,\n });\n\n eventEmitter = undefined;\n };\n\n const getEventEmitter = (): WalletProvider['events'] => {\n if (!eventEmitter) {\n eventEmitter = new EventEmitter<WalletProviderEvents>();\n\n setupReturnValue = setupEventListeners({\n handleAccountsChanged,\n handleDisconnected,\n handleNetworkChanged,\n });\n }\n\n return Object.assign(eventEmitter, { supportedEvents });\n };\n\n return {\n cleanupEventEmitter,\n getEventEmitter,\n };\n};\n","import { getBuffer } from \"../getBuffer\";\n\n/** @not-instrumented */\nexport const bufferToBase64 = (buf: Uint8Array): string => {\n const binstr = Array.prototype.map\n .call(buf, (ch: number) => String.fromCharCode(ch))\n .join('');\n return getBuffer().from(binstr, 'binary').toString('base64');\n};\n","/**\n * Filter duplicates from an array by equality.\n * Uses a Set internally.\n * @not-instrumented\n */\nexport const filterDuplicates = <T>(array: T[]): T[] =>\n Array.from(new Set(array));\n","type ParseAmountToSmallestUnitParams = {\n amount: string;\n decimals: number;\n};\n\n/**\n * Converts a human-readable decimal amount string to the smallest unit\n * representation as a bigint, using string-based arithmetic to avoid\n * floating-point precision loss.\n *\n * @example\n * parseAmountToSmallestUnit({ amount: '1.5', decimals: 9 }) // 1500000000n (1.5 SOL in lamports)\n * parseAmountToSmallestUnit({ amount: '1.5', decimals: 8 }) // 150000000n (1.5 BTC in satoshis)\n * parseAmountToSmallestUnit({ amount: '10.5', decimals: 6 }) // 10500000n (10.5 USDC)\n * parseAmountToSmallestUnit({ amount: '0.1', decimals: 9 }) // 100000000n (no float error)\n *\n * @param params.amount - The amount as a decimal string (e.g. \"1.5\").\n * @param params.decimals - The number of decimal places for the token.\n * @returns The amount in smallest units as a bigint.\n * @not-instrumented\n */\nexport const parseAmountToSmallestUnit = ({\n amount,\n decimals,\n}: ParseAmountToSmallestUnitParams): bigint => {\n const [whole = '0', fraction = ''] = amount.split('.');\n const paddedFraction = fraction.padEnd(decimals, '0').slice(0, decimals);\n return BigInt(whole + paddedFraction);\n};\n","import { BaseError } from './base';\n\ntype ReactNativeOnlyErrorParams = {\n apiName: string;\n};\n\nexport class ReactNativeOnlyError extends BaseError {\n constructor({ apiName }: ReactNativeOnlyErrorParams) {\n super({\n cause: null,\n code: 'react_native_only_error',\n docsUrl: null,\n name: 'ReactNativeOnlyError',\n shortMessage: `${apiName} is only available in React Native environments.`,\n });\n }\n}\n","import { ReactNativeOnlyError } from '../../../errors/ReactNativeOnlyError';\nimport type { ReactNativeManifest } from '../nativeManifest.types';\n\n/**\n * Returns the React Native manifest containing native SDK metadata.\n *\n * This function is only available in React Native environments.\n * On web, it throws a `ReactNativeOnlyError`.\n *\n * @not-instrumented\n */\nexport const getReactNativeManifest = (): ReactNativeManifest => {\n throw new ReactNativeOnlyError({ apiName: 'getReactNativeManifest' });\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\n/**\n * @categoryDescription Extension Development\n * Core utilities and functions for building Dynamic SDK extensions.\n * These APIs provide low-level access to the SDK internals and are intended\n * for advanced use cases and extension development. Most applications should\n * use the higher-level APIs exported from the main SDK package instead.\n */\n\n/** @category Extension Development */\nexport { getCore } from '../client/core/getCore';\n/** @category Extension Development */\nexport type { DynamicCore, DynamicCoreState } from '../client/core/types';\n/** @category Extension Development */\nexport { getDefaultClient } from '../client/defaultClient';\n/** @category Extension Development */\nexport { APIError } from '../errors/APIError';\n/** @category Extension Development */\nexport { CannotTrackError } from '../errors/CannotTrackError';\n/** @category Extension Development */\nexport { ClientNotFoundError } from '../errors/ClientNotFoundError';\n/** @category Extension Development */\nexport { ClientsDoNotMatchError } from '../errors/ClientsDoNotMatchError';\n/** @category Extension Development */\nexport { InvalidStorageSet } from '../errors/InvalidStorageSet';\n/** @category Extension Development */\nexport { InvalidWalletProviderKeyError } from '../errors/InvalidWalletProviderKeyError';\n/** @category Extension Development */\nexport { MethodNotImplementedError } from '../errors/MethodNotImplementedError';\n/** @category Extension Development */\nexport { MultipleClientsFoundError } from '../errors/MultipleClientsFoundError';\n/** @category Extension Development */\nexport { NoWalletProviderFoundError } from '../errors/NoWalletProviderFoundError';\n/** @category Extension Development */\nexport { ValueMustBeDefinedError } from '../errors/ValueMustBeDefinedError';\n/** @category Extension Development */\nexport { createApiClient, DYNAMIC_SDK_API_VERSION } from '../modules/apiClient';\n/** @category Extension Development */\nexport { createVisit } from '../modules/auth/createVisit';\n/** @category Extension Development */\nexport { logoutWithReason } from '../modules/auth/logoutWithReason';\n/** @category Extension Development */\nexport { updateAuthFromVerifyResponse } from '../modules/auth/updateAuthFromVerifyResponse';\n/** @category Extension Development */\nexport { consumeCaptchaToken } from '../modules/captcha/consumeCaptchaToken';\n/** @category Extension Development */\nexport { setCaptchaToken } from '../modules/captcha/setCaptchaToken';\n/** @category Extension Development */\nexport { emitEvent } from '../modules/clientEvents';\n/** @category Extension Development */\nexport { hasExtension } from '../modules/extension/hasExtension';\n/** @category Extension Development */\nexport { registerExtension } from '../modules/extension/registerExtension';\n/** @category Extension Development */\nexport { waitForProjectSettings } from '../modules/initializeClient/waitForProjectSettings';\n/** @category Extension Development */\nexport { consumeMfaTokenIfRequiredForAction } from '../modules/mfa/consumeMfaTokenIfRequiredForAction';\n/** @category Extension Development */\nexport { isCookieEnabled } from '../modules/projectSettings/isCookieEnabled';\n/** @category Extension Development */\nexport { generateSessionKeys } from '../modules/sessionKeys/generateSessionKeys/generateSessionKeys';\n/** @category Extension Development */\nexport { getSessionKeys } from '../modules/sessionKeys/getSessionKeys';\n/** @category Extension Development */\nexport { getSignedSessionId } from '../modules/sessionKeys/getSignedSessionId';\n/** @category Extension Development */\nexport type { SessionKeys } from '../modules/sessionKeys/sessionKeys.types';\n/** @category Extension Development */\nexport { CHAINS_INFO_MAP } from '../modules/wallets/constants';\n/** @category Extension Development */\nexport { emitWalletAccountsChangedEvent } from '../modules/wallets/emitWalletAccountsChangedEvent';\n/** @category Extension Development */\nexport { getWalletProviders } from '../modules/wallets/getWalletProviders';\n/** @category Extension Development */\nexport { createBaseNetworkProvider } from '../modules/wallets/networks/createBaseNetworkProvider';\n/** @category Extension Development */\nexport { getNetworkDataForNetworkId } from '../modules/wallets/networks/getNetworkDataForNetworkId';\n/** @category Extension Development */\nexport { getNetworkProviderFromNetworkId } from '../modules/wallets/networks/getNetworkProviderFromNetworkId';\n/** @category Extension Development */\nexport { getNetworkProviders } from '../modules/wallets/networks/getNetworkProviders';\n/** @category Extension Development */\nexport { getLastKnownNetworkRegistry } from '../modules/wallets/networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry';\n/** @category Extension Development */\nexport type { LastKnownNetworkRegistry } from '../modules/wallets/networks/lastKnownNetworkRegistry/LastKnownNetworkRegistry.types';\n/** @category Extension Development */\nexport type { BaseNetworkProvider } from '../modules/wallets/networks/networkProvider/networkProvider.types';\n/** @category Extension Development */\nexport {\n getNetworkProviderBuilderRegistry,\n type NetworkProviderBuilder,\n type NetworkProviderBuilderRegistry,\n} from '../modules/wallets/networks/networkProviderBuilderRegistry';\n/** @category Extension Development */\nexport { removeUnverifiedWalletAccount } from '../modules/wallets/unverifiedWalletAccounts/removeUnverifiedWalletAccount';\nexport { setUnverifiedWalletAccounts } from '../modules/wallets/unverifiedWalletAccounts/setUnverifiedWalletAccounts';\n/** @category Extension Development */\nexport { formatSignInMessage } from '../modules/wallets/utils/formatSignInMessage';\n/** @category Extension Development */\nexport { formatWalletAccountId } from '../modules/wallets/utils/formatWalletAccountId';\n/** @category Extension Development */\nexport { formatWalletProviderGroupKey } from '../modules/wallets/utils/formatWalletProviderGroupKey';\n/** @category Extension Development */\nexport { formatWalletProviderKey } from '../modules/wallets/utils/formatWalletProviderKey';\n/** @category Extension Development */\nexport { getAllProvidersFromWindow } from '../modules/wallets/utils/getAllProvidersFromWindow';\n/** @category Extension Development */\nexport { getInjectedProviderFromWindow } from '../modules/wallets/utils/getInjectedProviderFromWindow';\n/** @category Extension Development */\nexport { getVerifiedCredentialForWalletAccount } from '../modules/wallets/utils/getVerifiedCredentialForWalletAccount';\n/** @category Extension Development */\nexport { getWalletProviderFromWalletAccount } from '../modules/wallets/utils/getWalletProviderFromWalletAccount';\n/** @category Extension Development */\nexport { normalizeWalletNameWithChain } from '../modules/wallets/utils/normalizeWalletNameWithChain';\n/** @category Extension Development */\nexport { verifyMessageSignatureOwnership } from '../modules/wallets/verifyMessageSignatureOwnership';\n/** @category Extension Development */\nexport type { BaseWalletAccount } from '../modules/wallets/walletAccount';\n/** @category Extension Development */\nexport type {\n ConfirmTransactionParams,\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n TransferAmountParams,\n WalletProvider,\n WalletProviderConnectAddress,\n} from '../modules/wallets/walletProvider';\n/** @category Extension Development */\nexport { getActiveNetworkIdFromLastKnownRegistry } from '../modules/wallets/walletProvider/defaultImplementations/getActiveNetworkIdFromLastKnownRegistry';\n/** @category Extension Development */\nexport { switchActiveNetworkInLastKnownRegistry } from '../modules/wallets/walletProvider/defaultImplementations/switchActiveNetworkInLastKnownRegistry';\n/** @category Extension Development */\nexport { createWalletProviderEventEmitter } from '../modules/wallets/walletProvider/events/createWalletProviderEventEmitter';\n/** @category Extension Development */\nexport { splitWalletProviderKey } from '../modules/wallets/walletProvider/splitWalletProviderKey';\n/** @category Extension Development */\nexport {\n getWalletProviderRegistry,\n WalletProviderPriority,\n} from '../modules/wallets/walletProviderRegistry';\n/** @category Extension Development */\nexport type {\n AsyncProcessEntry,\n AsyncProcessStatus,\n AsyncTrack,\n AsyncTrackEmitter,\n} from '../services/asyncTrack/asyncTrack.types';\n/** @category Extension Development */\nexport { createCrossTabBroadcast } from '../services/crossTabBroadcast/createCrossTabBroadcast';\n/** @category Extension Development */\nexport type {\n CrossTabBroadcast,\n CrossTabBroadcastMessage,\n} from '../services/crossTabBroadcast';\n/** @category Extension Development */\nexport { CrossTabBroadcastMessageSchema } from '../services/crossTabBroadcast';\n/** @category Extension Development */\nexport { createRealtimeChannelSchema } from '../services/realtime/createRealtimeChannelSchema';\n/** @category Extension Development */\nexport { createRealtimeService } from '../services/realtime/createRealtimeService';\n/** @category Extension Development */\nexport type {\n RealtimeChannelSchema,\n RealtimeConnectionState,\n RealtimeService,\n} from '../services/realtime';\n/** @category Extension Development */\nexport { createLogger } from '../services/logger/createLogger';\n/** @category Extension Development */\nexport type { Logger, LogLevel } from '../services/logger/logger.types';\n/** @category Extension Development */\nexport { createKeychainService } from '../services/keychain';\n/** @category Extension Development */\nexport type { KeychainService } from '../services/keychain';\n/** @category Extension Development */\nexport type { PasskeyService } from '../services/passkey';\n/** @category Extension Development */\nexport {\n createRuntimeServiceAccessKey,\n type RuntimeServices,\n} from '../services/runtimeServices';\n/** @category Extension Development */\nexport {\n createLocalStorageAdapter,\n createStorage,\n createStorageKeySchema,\n type Storage,\n type StorageAdapter,\n type StorageAdapterOptions,\n type StorageKeySchema,\n type StorageKeySchemaConfig,\n type StorageTier,\n} from '../services/storage';\n/** @category Extension Development */\nexport type { ExtendParameters } from '../types/ExtendParameters';\n/** @category Extension Development */\nexport { assertDefined } from '../utils/assertDefined';\n/** @category Extension Development */\nexport { bufferToBase64 } from '../utils/bufferToBase64';\n/** @category Extension Development */\nexport type { DebouncedMutex } from '../utils/debouncedMutex/debouncedMutex.types';\n/** @category Extension Development */\nexport { filterDuplicates } from '../utils/filterDuplicates';\n/** @category Extension Development */\nexport { getBuffer } from '../utils/getBuffer';\n/** @category Extension Development */\nexport { getChainFromVerifiedCredentialChain } from '../utils/getChainFromVerifiedCredentialChain';\n/** @category Extension Development */\nexport { getKeychainIndexedDBName } from '../utils/getKeychainIndexedDBName';\n/** @category Extension Development */\nexport { getNonce } from '../utils/getNonce';\n/** @category Extension Development */\nexport { parseAmountToSmallestUnit } from '../utils/parseAmountToSmallestUnit';\n/** @category Extension Development */\nexport type { ObservableState } from '../utils/observable/observable.types';\n/** @category Extension Development */\nexport { createSignInMessageStatement } from '../modules/wallets/utils/getSignInMessage/createSignInMessageStatement';\n/** @category Extension Development */\nexport { subscribeWithSelector } from '../utils/observable/subscribeWithSelector';\n/** @category Extension Development */\nexport { updateWalletProviderKeysForVerifiedCredentials } from '../modules/wallets/walletProvider/walletProviderKeyMap/updateWalletProviderKeysForVerifiedCredentials';\n/** @category Extension Development */\nexport { DYNAMIC_ICONIC_SPRITE_URL } from '../constants';\n/** @category Extension Development */\nexport { createDeferredPromise } from '../utils/deferredPromise';\n/** @category Extension Development */\nexport { getDeviceSigner } from '../modules/deviceRegistration/getDeviceSigner';\n/** @category Extension Development */\nexport { getHeadersForNonceSignedByDeviceSigners } from '../modules/deviceRegistration/getHeadersForNonceSignedByDeviceSigners';\n/** @category Extension Development */\nexport { createDeviceSignatureHeadersMiddleware } from '../modules/apiClient/utils/deviceSignatureHeadersMiddleware/createDeviceSignatureHeadersMiddleware';\n/** @category Extension Development */\nexport { randomString } from '../utils/randomString';\n/** @category Extension Development */\nexport { getReactNativeManifest } from '../services/nativeManifest/getReactNativeManifest';\n/** @category Extension Development */\nexport type { ReactNativeManifest } from '../services/nativeManifest/nativeManifest.types';\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"core.esm.js","names":["createStorageKeySchema","getNetworkId: LastKnownNetworkRegistry['getNetworkId']","getNetworkProviders","setNetworkId: LastKnownNetworkRegistry['setNetworkId']","createRuntimeServiceAccessKey","target: unknown","providers: T[]","target: unknown","getActiveNetworkIdFromLastKnownRegistry: GetActiveNetworkIdFromLastKnownRegistry","switchActiveNetworkInLastKnownRegistry: SwitchActiveNetworkInLastKnownRegistry","packageName","packageVersion"],"sources":["../src/errors/ClientsDoNotMatchError.ts","../src/errors/MethodNotImplementedError.ts","../src/errors/MultipleClientsFoundError.ts","../src/modules/extension/registerExtension/registerExtension.ts","../src/modules/initializeClient/waitForProjectSettings/waitForProjectSettings.ts","../src/modules/wallets/networks/createBaseNetworkProvider/createBaseNetworkProvider.ts","../src/modules/wallets/networks/getNetworkDataForNetworkId/getNetworkDataForNetworkId.ts","../src/modules/wallets/networks/lastKnownNetworkRegistry/createLastKnownNetworkRegistry/schema.ts","../src/modules/wallets/networks/lastKnownNetworkRegistry/createLastKnownNetworkRegistry/createLastKnownNetworkRegistry.ts","../src/modules/wallets/networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry/getLastKnownNetworkRegistry.ts","../src/modules/wallets/utils/formatWalletProviderGroupKey/formatWalletProviderGroupKey.ts","../src/modules/wallets/utils/getAllProvidersFromWindow/getAllProvidersFromWindow.ts","../src/modules/wallets/utils/getInjectedProviderFromWindow/getInjectedProviderFromWindow.ts","../src/modules/wallets/walletProvider/defaultImplementations/getActiveNetworkIdFromLastKnownRegistry/getActiveNetworkIdFromLastKnownRegistry.ts","../src/modules/wallets/walletProvider/defaultImplementations/switchActiveNetworkInLastKnownRegistry/switchActiveNetworkInLastKnownRegistry.ts","../src/modules/wallets/walletProvider/events/createWalletProviderEventEmitter/createWalletProviderEventEmitter.ts","../src/utils/bufferToBase64/bufferToBase64.ts","../src/utils/filterDuplicates/filterDuplicates.ts","../src/utils/parseAmountToSmallestUnit/parseAmountToSmallestUnit.ts","../src/errors/ReactNativeOnlyError.ts","../src/services/nativeManifest/getReactNativeManifest/getReactNativeManifest.ts","../src/exports/core.ts"],"sourcesContent":["import { BaseError } from './base';\n\nexport class ClientsDoNotMatchError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'clients_do_not_match_error',\n docsUrl: null,\n name: 'ClientsDoNotMatchError',\n shortMessage: 'Clients do not match',\n });\n }\n}\n","import { BaseError } from './base';\n\nexport class MethodNotImplementedError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(methodName: string) {\n super({\n cause: null,\n code: 'method_not_implemented_error',\n docsUrl: null,\n name: 'MethodNotImplementedError',\n shortMessage: `This method is not implemented: ${methodName}`,\n });\n }\n}\n","import { BaseError } from './base';\n\nexport class MultipleClientsFoundError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'multiple_clients_found_error',\n docsUrl: null,\n name: 'MultipleClientsFoundError',\n shortMessage:\n 'Multiple Dynamic clients have been initialized. Please provide the intended client for this action explicitly',\n });\n }\n}\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\n\ntype RegisterExtensionParams = {\n extensionKey: string;\n};\n\n/**\n * Registers an extension to the client.\n *\n * Other extensions can be aware of which extensions are present,\n * and allows creating dependencies between extensions.\n *\n * @param client - The client instance.\n * @param extensionKey - The key of the extension to register.\n * @returns The client instance.\n * @instrumented\n */\nexport const registerExtension = (\n { extensionKey }: RegisterExtensionParams,\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n core.extensions.add(extensionKey);\n};\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { assertDefined } from '../../../utils/assertDefined';\nimport { FETCH_PROJECT_SETTINGS_TRACKER_KEY } from '../consts';\n\n/** @instrumented */\nexport const waitForProjectSettings = async (client: DynamicClient) => {\n const core = getCore(client);\n\n const projectSettingsTracker = core.initTrack.getTracker<void>(\n FETCH_PROJECT_SETTINGS_TRACKER_KEY\n );\n\n assertDefined(projectSettingsTracker, 'Project settings tracker not found');\n\n await projectSettingsTracker.promise;\n\n assertDefined(\n client.projectSettings,\n 'Project settings still not available after awaiting its tracker'\n );\n\n return client.projectSettings;\n};\n","import type { Chain } from '../../../chain';\nimport type {\n BaseNetworkProvider,\n NetworkData,\n} from '../networkProvider/networkProvider.types';\n\n/** @instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const createBaseNetworkProvider = <TChain extends Chain = Chain>(\n chain: TChain,\n networkData: NetworkData\n): Omit<BaseNetworkProvider<TChain>, 'getBalance'> => ({\n blockExplorerUrls: networkData.blockExplorerUrls,\n chain,\n displayName: networkData.displayName,\n iconUrl: networkData.iconUrl,\n id: `${chain}-${networkData.networkId}`,\n name: networkData.name,\n nativeCurrency: networkData.nativeCurrency,\n networkId: networkData.networkId,\n rpcUrls: networkData.rpcUrls,\n testnet: networkData.testnet,\n});\n","import type { DynamicClient } from '../../../../client/types';\nimport type { Chain } from '../../../chain';\nimport { getNetworksData } from '../getNetworksData';\nimport type { NetworkData } from '../networkProvider/networkProvider.types';\n\ntype GetNetworkDataForNetworkIdProps = {\n chain: Chain;\n networkId: string;\n};\n\n/** @instrumented */\nexport const getNetworkDataForNetworkId = (\n { networkId, chain }: GetNetworkDataForNetworkIdProps,\n client: DynamicClient\n): NetworkData | undefined => {\n const networksData = getNetworksData(client);\n\n const networkData = networksData.find(\n (networkData) =>\n networkData.networkId === networkId && networkData.chain === chain\n );\n\n return networkData;\n};\n","import * as z from 'zod/mini';\n\nimport { createStorageKeySchema } from '../../../../../services/storage';\n\nexport const networkRegistryStorageKeySchema = createStorageKeySchema({\n key: 'lastKnownNetworkRegistry',\n schema: z.record(z.string(), z.string()),\n});\n","import { getCore } from '../../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../../client/types';\nimport { NoNetworkProvidersError } from '../../../../../errors/NoNetworkProvidersError';\nimport { assertDefined } from '../../../../../utils/assertDefined';\nimport { getWalletProviderByKey } from '../../../getWalletProviderByKey';\nimport { getNetworkProviders } from '../../getNetworkProviders';\nimport type { LastKnownNetworkRegistry } from '../LastKnownNetworkRegistry.types';\nimport { networkRegistryStorageKeySchema } from './schema';\n\n/**\n * Creates the registry that keeps tabs on which wallet provider is\n * connected to which network.\n *\n * Reminder that this will not be used for chains that have an internal way to\n * switch networks (ex EVM).\n * @not-instrumented\n */\nexport const createLastKnownNetworkRegistry = (\n client: DynamicClient\n): LastKnownNetworkRegistry => {\n const core = getCore(client);\n\n const walletProviderKeyToNetworkId = new Map<string, string>();\n\n const getNetworkId: LastKnownNetworkRegistry['getNetworkId'] = async ({\n walletProviderKey,\n }) => {\n // Priorities:\n // 1. In memory\n // 2. Storage\n // 3. First available network for this wallet's chain\n\n if (walletProviderKeyToNetworkId.has(walletProviderKey)) {\n return {\n networkId: walletProviderKeyToNetworkId.get(\n walletProviderKey\n ) as string,\n };\n }\n\n const storageRecords = await core.storage.getItem(\n networkRegistryStorageKeySchema\n );\n\n if (storageRecords && storageRecords[walletProviderKey]) {\n const networkId = storageRecords[walletProviderKey];\n\n walletProviderKeyToNetworkId.set(walletProviderKey, networkId);\n\n return { networkId };\n }\n\n const walletProvider = getWalletProviderByKey(\n { walletProviderKey },\n client\n );\n\n const networkProviders = getNetworkProviders(client);\n\n if (networkProviders.length === 0) {\n throw new NoNetworkProvidersError();\n }\n\n const defaultNetworkProvider = networkProviders.find(\n (networkProvider) => networkProvider.chain === walletProvider.chain\n );\n\n assertDefined(\n defaultNetworkProvider,\n `No networks found for chain ${walletProvider.chain}`\n );\n\n walletProviderKeyToNetworkId.set(\n walletProviderKey,\n defaultNetworkProvider.networkId\n );\n\n // No need to set in storage, as we're just falling back to the default\n return { networkId: defaultNetworkProvider.networkId };\n };\n\n const setNetworkId: LastKnownNetworkRegistry['setNetworkId'] = async ({\n networkId,\n walletProviderKey,\n }) => {\n walletProviderKeyToNetworkId.set(walletProviderKey, networkId);\n\n await core.storage.setItem(\n networkRegistryStorageKeySchema,\n Object.fromEntries(walletProviderKeyToNetworkId.entries())\n );\n };\n\n return { getNetworkId, setNetworkId };\n};\n","import { createRuntimeServiceAccessKey } from '../../../../../services/runtimeServices';\nimport { createLastKnownNetworkRegistry } from '../createLastKnownNetworkRegistry';\n\nexport const getLastKnownNetworkRegistry = createRuntimeServiceAccessKey(\n 'last-known-network-registry',\n (client) => createLastKnownNetworkRegistry(client)\n);\n","/** @not-instrumented */\nexport const formatWalletProviderGroupKey = (walletName: string): string =>\n walletName.replace(/[^a-zA-Z0-9]/g, '').toLowerCase();\n","/* eslint-disable no-restricted-globals */\n\n/**\n * Retrieves all providers from a window path.\n *\n * Unlike getInjectedProviderFromWindow which returns only the first provider,\n * this function returns ALL providers found at the path, including those\n * in a .providers array if present.\n *\n * This is particularly useful for detecting wallet providers in wallet app\n * in-app browsers, where wallets inject their provider into the window object.\n *\n * @param path - Dot-separated path to traverse (e.g., \"ethereum\")\n * @returns Array of all providers found, or empty array if none\n * @not-instrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const getAllProvidersFromWindow = <T = unknown>(path: string): T[] => {\n if (typeof window === 'undefined') {\n return [];\n }\n\n // Traverse the path safely\n const target: unknown = path.split('.').reduce<unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (acc, key) => (acc == null ? null : (acc as any)[key]),\n window\n );\n\n if (typeof target !== 'object' || target === null) {\n return [];\n }\n\n if (Array.isArray(target)) {\n return target as T[];\n }\n\n const providers: T[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const providersArray = (target as any).providers;\n\n // If target has a .providers array, return all providers from it\n if (providersArray && Array.isArray(providersArray)) {\n providers.push(...(providersArray as T[]));\n }\n\n // Always include the target itself as a provider (if it's not just a container)\n // This handles the case where window.ethereum is both a provider AND has a providers array\n providers.push(target as T);\n\n return providers;\n};\n","/* eslint-disable no-restricted-globals */\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const getInjectedProviderFromWindow = <T = unknown>(\n path: string\n): T | null => {\n if (typeof window === 'undefined') {\n return null;\n }\n\n // Traverse the path safely\n const target: unknown = path.split('.').reduce<unknown>(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (acc, key) => (acc == null ? null : (acc as any)[key]),\n window\n );\n\n if (typeof target !== 'object' || target === null) {\n return null;\n }\n\n if (Array.isArray(target)) {\n return target.length > 0 ? (target[0] as T) : null;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const providersArray = (target as any).providers;\n\n if (providersArray && Array.isArray(providersArray)) {\n return providersArray.length > 0 ? (providersArray[0] as T) : null;\n }\n\n return target as T;\n};\n","import type { DynamicClient } from '../../../../../client/types/DynamicClient';\nimport { getLastKnownNetworkRegistry } from '../../../networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry/getLastKnownNetworkRegistry';\nimport type { WalletProvider } from '../../walletProvider.types';\n\ntype GetActiveNetworkIdFromLastKnownRegistry = (args: {\n client: DynamicClient;\n walletProviderKey: string;\n}) => ReturnType<WalletProvider['getActiveNetworkId']>;\n\n/** @instrumented */\nexport const getActiveNetworkIdFromLastKnownRegistry: GetActiveNetworkIdFromLastKnownRegistry =\n async ({ client, walletProviderKey }) => {\n const networkRegistry = getLastKnownNetworkRegistry(client);\n\n return networkRegistry.getNetworkId({ walletProviderKey });\n };\n","import type { DynamicClient } from '../../../../../client/types/DynamicClient';\nimport { getLastKnownNetworkRegistry } from '../../../networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry/getLastKnownNetworkRegistry';\nimport type { WalletProvider } from '../../walletProvider.types';\n\ntype SwitchActiveNetworkInLastKnownRegistry = (args: {\n client: DynamicClient;\n networkId: string;\n walletProviderKey: string;\n}) => ReturnType<NonNullable<WalletProvider['switchActiveNetwork']>>;\n\n/** @instrumented */\nexport const switchActiveNetworkInLastKnownRegistry: SwitchActiveNetworkInLastKnownRegistry =\n async ({ client, networkId, walletProviderKey }) => {\n const networkRegistry = getLastKnownNetworkRegistry(client);\n\n await networkRegistry.setNetworkId({\n networkId,\n walletProviderKey,\n });\n };\n","import EventEmitter from 'eventemitter3';\n\nimport { assertDefined } from '../../../../../utils/assertDefined';\nimport type { WalletProvider } from '../../walletProvider.types';\nimport type { WalletProviderEvents } from '../walletProviderEvents.types';\n\ntype CreateWalletProviderEventEmitterParams<R = void> = {\n /**\n * Callback responsible for removing the listeners from the external wallet provider event emitters\n * to the the Dynamic handlers that will emit the wallet provider events.\n * @instrumented\n */\n removeEventListeners: (params: {\n handleAccountsChanged: (params: { addresses: string[] }) => void;\n handleDisconnected: () => void;\n handleNetworkChanged: (params: { networkId: string }) => void;\n /**\n * Value returned by setupEventListeners, particularly useful for cleaning up the event listeners\n */\n setupReturnValue: R;\n }) => void;\n /**\n * Callback responsible for connecting the external wallet provider event emitters\n * to the the Dynamic handlers that will emit the wallet provider events.\n *\n * @returns May return a value that will be later passed to removeEventListeners as `setupReturnValue`\n */\n setupEventListeners: (params: {\n handleAccountsChanged: (params: { addresses: string[] }) => void;\n handleDisconnected: () => void;\n handleNetworkChanged: (params: { networkId: string }) => void;\n }) => R;\n /**\n * List of events that the wallet provider supports listening to.\n * Defaults to all events.\n */\n supportedEvents?: (keyof WalletProviderEvents)[];\n};\n\n/**\n * Takes a callback that registers handlers for the external wallet provider.\n * Returns both a getter of an eventEmitter that can be exposed via the wallet provider\n * and a callback that will be used to destroy the listeners.\n * @not-instrumented\n */\nexport const createWalletProviderEventEmitter = <R = void>({\n removeEventListeners,\n setupEventListeners,\n supportedEvents = ['accountsChanged', 'disconnected', 'networkChanged'],\n}: CreateWalletProviderEventEmitterParams<R>) => {\n let eventEmitter: EventEmitter<WalletProviderEvents> | undefined;\n\n /** Value returned by setupEventListeners */\n let setupReturnValue: R;\n\n const handleAccountsChanged = (params: { addresses: string[] }) => {\n assertDefined(eventEmitter, 'Event emitter not defined');\n eventEmitter.emit('accountsChanged', params);\n };\n\n const handleDisconnected = () => {\n assertDefined(eventEmitter, 'Event emitter not defined');\n eventEmitter.emit('disconnected');\n };\n\n const handleNetworkChanged = (params: { networkId: string }) => {\n assertDefined(eventEmitter, 'Event emitter not defined');\n eventEmitter.emit('networkChanged', params);\n };\n\n const cleanupEventEmitter = () => {\n if (!eventEmitter) {\n return;\n }\n\n removeEventListeners({\n handleAccountsChanged,\n handleDisconnected,\n handleNetworkChanged,\n setupReturnValue,\n });\n\n eventEmitter = undefined;\n };\n\n const getEventEmitter = (): WalletProvider['events'] => {\n if (!eventEmitter) {\n eventEmitter = new EventEmitter<WalletProviderEvents>();\n\n setupReturnValue = setupEventListeners({\n handleAccountsChanged,\n handleDisconnected,\n handleNetworkChanged,\n });\n }\n\n return Object.assign(eventEmitter, { supportedEvents });\n };\n\n return {\n cleanupEventEmitter,\n getEventEmitter,\n };\n};\n","import { getBuffer } from \"../getBuffer\";\n\n/** @not-instrumented */\nexport const bufferToBase64 = (buf: Uint8Array): string => {\n const binstr = Array.prototype.map\n .call(buf, (ch: number) => String.fromCharCode(ch))\n .join('');\n return getBuffer().from(binstr, 'binary').toString('base64');\n};\n","/**\n * Filter duplicates from an array by equality.\n * Uses a Set internally.\n * @not-instrumented\n */\nexport const filterDuplicates = <T>(array: T[]): T[] =>\n Array.from(new Set(array));\n","type ParseAmountToSmallestUnitParams = {\n amount: string;\n decimals: number;\n};\n\n/**\n * Converts a human-readable decimal amount string to the smallest unit\n * representation as a bigint, using string-based arithmetic to avoid\n * floating-point precision loss.\n *\n * @example\n * parseAmountToSmallestUnit({ amount: '1.5', decimals: 9 }) // 1500000000n (1.5 SOL in lamports)\n * parseAmountToSmallestUnit({ amount: '1.5', decimals: 8 }) // 150000000n (1.5 BTC in satoshis)\n * parseAmountToSmallestUnit({ amount: '10.5', decimals: 6 }) // 10500000n (10.5 USDC)\n * parseAmountToSmallestUnit({ amount: '0.1', decimals: 9 }) // 100000000n (no float error)\n *\n * @param params.amount - The amount as a decimal string (e.g. \"1.5\").\n * @param params.decimals - The number of decimal places for the token.\n * @returns The amount in smallest units as a bigint.\n * @not-instrumented\n */\nexport const parseAmountToSmallestUnit = ({\n amount,\n decimals,\n}: ParseAmountToSmallestUnitParams): bigint => {\n const [whole = '0', fraction = ''] = amount.split('.');\n const paddedFraction = fraction.padEnd(decimals, '0').slice(0, decimals);\n return BigInt(whole + paddedFraction);\n};\n","import { BaseError } from './base';\n\ntype ReactNativeOnlyErrorParams = {\n apiName: string;\n};\n\nexport class ReactNativeOnlyError extends BaseError {\n constructor({ apiName }: ReactNativeOnlyErrorParams) {\n super({\n cause: null,\n code: 'react_native_only_error',\n docsUrl: null,\n name: 'ReactNativeOnlyError',\n shortMessage: `${apiName} is only available in React Native environments.`,\n });\n }\n}\n","import { ReactNativeOnlyError } from '../../../errors/ReactNativeOnlyError';\nimport type { ReactNativeManifest } from '../nativeManifest.types';\n\n/**\n * Returns the React Native manifest containing native SDK metadata.\n *\n * This function is only available in React Native environments.\n * On web, it throws a `ReactNativeOnlyError`.\n *\n * @not-instrumented\n */\nexport const getReactNativeManifest = (): ReactNativeManifest => {\n throw new ReactNativeOnlyError({ apiName: 'getReactNativeManifest' });\n};\n","import { assertPackageVersion } from '@dynamic-labs-sdk/assert-package-version';\n\nimport {\n name as packageName,\n version as packageVersion,\n} from '../../package.json';\nassertPackageVersion(packageName, packageVersion);\n\n/**\n * @categoryDescription Extension Development\n * Core utilities and functions for building Dynamic SDK extensions.\n * These APIs provide low-level access to the SDK internals and are intended\n * for advanced use cases and extension development. Most applications should\n * use the higher-level APIs exported from the main SDK package instead.\n */\n\n/** @category Extension Development */\nexport { getCore } from '../client/core/getCore';\n/** @category Extension Development */\nexport type { DynamicCore, DynamicCoreState } from '../client/core/types';\n/** @category Extension Development */\nexport { getDefaultClient } from '../client/defaultClient';\n/** @category Extension Development */\nexport { APIError } from '../errors/APIError';\n/** @category Extension Development */\nexport { CannotTrackError } from '../errors/CannotTrackError';\n/** @category Extension Development */\nexport { ClientNotFoundError } from '../errors/ClientNotFoundError';\n/** @category Extension Development */\nexport { ClientsDoNotMatchError } from '../errors/ClientsDoNotMatchError';\n/** @category Extension Development */\nexport { InvalidStorageSet } from '../errors/InvalidStorageSet';\n/** @category Extension Development */\nexport { InvalidWalletProviderKeyError } from '../errors/InvalidWalletProviderKeyError';\n/** @category Extension Development */\nexport { MethodNotImplementedError } from '../errors/MethodNotImplementedError';\n/** @category Extension Development */\nexport { MultipleClientsFoundError } from '../errors/MultipleClientsFoundError';\n/** @category Extension Development */\nexport { NoWalletProviderFoundError } from '../errors/NoWalletProviderFoundError';\n/** @category Extension Development */\nexport { ValueMustBeDefinedError } from '../errors/ValueMustBeDefinedError';\n/** @category Extension Development */\nexport { createApiClient, DYNAMIC_SDK_API_VERSION } from '../modules/apiClient';\n/** @category Extension Development */\nexport { createVisit } from '../modules/auth/createVisit';\n/** @category Extension Development */\nexport { logoutWithReason } from '../modules/auth/logoutWithReason';\n/** @category Extension Development */\nexport { updateAuthFromVerifyResponse } from '../modules/auth/updateAuthFromVerifyResponse';\n/** @category Extension Development */\nexport { consumeCaptchaToken } from '../modules/captcha/consumeCaptchaToken';\n/** @category Extension Development */\nexport { setCaptchaToken } from '../modules/captcha/setCaptchaToken';\n/** @category Extension Development */\nexport { emitEvent } from '../modules/clientEvents';\n/** @category Extension Development */\nexport { hasExtension } from '../modules/extension/hasExtension';\n/** @category Extension Development */\nexport { registerExtension } from '../modules/extension/registerExtension';\n/** @category Extension Development */\nexport { waitForProjectSettings } from '../modules/initializeClient/waitForProjectSettings';\n/** @category Extension Development */\nexport { consumeMfaTokenIfRequiredForAction } from '../modules/mfa/consumeMfaTokenIfRequiredForAction';\n/** @category Extension Development */\nexport { isCookieEnabled } from '../modules/projectSettings/isCookieEnabled';\n/** @category Extension Development */\nexport { generateSessionKeys } from '../modules/sessionKeys/generateSessionKeys/generateSessionKeys';\n/** @category Extension Development */\nexport { getSessionKeys } from '../modules/sessionKeys/getSessionKeys';\n/** @category Extension Development */\nexport { getSignedSessionId } from '../modules/sessionKeys/getSignedSessionId';\n/** @category Extension Development */\nexport type { SessionKeys } from '../modules/sessionKeys/sessionKeys.types';\n/** @category Extension Development */\nexport { CHAINS_INFO_MAP } from '../modules/wallets/constants';\n/** @category Extension Development */\nexport { emitWalletAccountsChangedEvent } from '../modules/wallets/emitWalletAccountsChangedEvent';\n/** @category Extension Development */\nexport { getWalletProviders } from '../modules/wallets/getWalletProviders';\n/** @category Extension Development */\nexport { createBaseNetworkProvider } from '../modules/wallets/networks/createBaseNetworkProvider';\n/** @category Extension Development */\nexport { getNetworkDataForNetworkId } from '../modules/wallets/networks/getNetworkDataForNetworkId';\n/** @category Extension Development */\nexport { getNetworkProviderFromNetworkId } from '../modules/wallets/networks/getNetworkProviderFromNetworkId';\n/** @category Extension Development */\nexport { getNetworkProviders } from '../modules/wallets/networks/getNetworkProviders';\n/** @category Extension Development */\nexport { getLastKnownNetworkRegistry } from '../modules/wallets/networks/lastKnownNetworkRegistry/getLastKnownNetworkRegistry';\n/** @category Extension Development */\nexport type { LastKnownNetworkRegistry } from '../modules/wallets/networks/lastKnownNetworkRegistry/LastKnownNetworkRegistry.types';\n/** @category Extension Development */\nexport type { BaseNetworkProvider } from '../modules/wallets/networks/networkProvider/networkProvider.types';\n/** @category Extension Development */\nexport {\n getNetworkProviderBuilderRegistry,\n type NetworkProviderBuilder,\n type NetworkProviderBuilderRegistry,\n} from '../modules/wallets/networks/networkProviderBuilderRegistry';\n/** @category Extension Development */\nexport { removeUnverifiedWalletAccount } from '../modules/wallets/unverifiedWalletAccounts/removeUnverifiedWalletAccount';\nexport { setUnverifiedWalletAccounts } from '../modules/wallets/unverifiedWalletAccounts/setUnverifiedWalletAccounts';\n/** @category Extension Development */\nexport { formatSignInMessage } from '../modules/wallets/utils/formatSignInMessage';\n/** @category Extension Development */\nexport { formatWalletAccountId } from '../modules/wallets/utils/formatWalletAccountId';\n/** @category Extension Development */\nexport { formatWalletProviderGroupKey } from '../modules/wallets/utils/formatWalletProviderGroupKey';\n/** @category Extension Development */\nexport { formatWalletProviderKey } from '../modules/wallets/utils/formatWalletProviderKey';\n/** @category Extension Development */\nexport { getAllProvidersFromWindow } from '../modules/wallets/utils/getAllProvidersFromWindow';\n/** @category Extension Development */\nexport { getInjectedProviderFromWindow } from '../modules/wallets/utils/getInjectedProviderFromWindow';\n/** @category Extension Development */\nexport { getVerifiedCredentialForWalletAccount } from '../modules/wallets/utils/getVerifiedCredentialForWalletAccount';\n/** @category Extension Development */\nexport { getWalletProviderFromWalletAccount } from '../modules/wallets/utils/getWalletProviderFromWalletAccount';\n/** @category Extension Development */\nexport { normalizeWalletNameWithChain } from '../modules/wallets/utils/normalizeWalletNameWithChain';\n/** @category Extension Development */\nexport { verifyMessageSignatureOwnership } from '../modules/wallets/verifyMessageSignatureOwnership';\n/** @category Extension Development */\nexport type { BaseWalletAccount } from '../modules/wallets/walletAccount';\n/** @category Extension Development */\nexport type {\n ConfirmTransactionParams,\n ExecuteSwapTransactionParams,\n ExecuteSwapTransactionResult,\n TransferAmountParams,\n WalletProvider,\n WalletProviderConnectAddress,\n} from '../modules/wallets/walletProvider';\n/** @category Extension Development */\nexport { getActiveNetworkIdFromLastKnownRegistry } from '../modules/wallets/walletProvider/defaultImplementations/getActiveNetworkIdFromLastKnownRegistry';\n/** @category Extension Development */\nexport { switchActiveNetworkInLastKnownRegistry } from '../modules/wallets/walletProvider/defaultImplementations/switchActiveNetworkInLastKnownRegistry';\n/** @category Extension Development */\nexport { createWalletProviderEventEmitter } from '../modules/wallets/walletProvider/events/createWalletProviderEventEmitter';\n/** @category Extension Development */\nexport { splitWalletProviderKey } from '../modules/wallets/walletProvider/splitWalletProviderKey';\n/** @category Extension Development */\nexport {\n getWalletProviderRegistry,\n WalletProviderPriority,\n} from '../modules/wallets/walletProviderRegistry';\n/** @category Extension Development */\nexport type {\n AsyncProcessEntry,\n AsyncProcessStatus,\n AsyncTrack,\n AsyncTrackEmitter,\n} from '../services/asyncTrack/asyncTrack.types';\n/** @category Extension Development */\nexport { createCrossTabBroadcast } from '../services/crossTabBroadcast/createCrossTabBroadcast';\n/** @category Extension Development */\nexport type {\n CrossTabBroadcast,\n CrossTabBroadcastMessage,\n} from '../services/crossTabBroadcast';\n/** @category Extension Development */\nexport { CrossTabBroadcastMessageSchema } from '../services/crossTabBroadcast';\n/** @category Extension Development */\nexport { createRealtimeChannelSchema } from '../services/realtime/createRealtimeChannelSchema';\n/** @category Extension Development */\nexport { createRealtimeService } from '../services/realtime/createRealtimeService';\n/** @category Extension Development */\nexport type {\n RealtimeChannelSchema,\n RealtimeConnectionState,\n RealtimeService,\n} from '../services/realtime';\n/** @category Extension Development */\nexport { createLogger } from '../services/logger/createLogger';\n/** @category Extension Development */\nexport type { Logger, LogLevel } from '../services/logger/logger.types';\n/** @category Extension Development */\nexport { createKeychainService } from '../services/keychain';\n/** @category Extension Development */\nexport type { KeychainService } from '../services/keychain';\n/** @category Extension Development */\nexport type { PasskeyService } from '../services/passkey';\n/** @category Extension Development */\nexport {\n createRuntimeServiceAccessKey,\n type RuntimeServices,\n} from '../services/runtimeServices';\n/** @category Extension Development */\nexport {\n createLocalStorageAdapter,\n createStorage,\n createStorageKeySchema,\n type Storage,\n type StorageAdapter,\n type StorageAdapterOptions,\n type StorageKeySchema,\n type StorageKeySchemaConfig,\n type StorageTier,\n} from '../services/storage';\n/** @category Extension Development */\nexport type { ExtendParameters } from '../types/ExtendParameters';\n/** @category Extension Development */\nexport { assertDefined } from '../utils/assertDefined';\n/** @category Extension Development */\nexport { bufferToBase64 } from '../utils/bufferToBase64';\n/** @category Extension Development */\nexport type { DebouncedMutex } from '../utils/debouncedMutex/debouncedMutex.types';\n/** @category Extension Development */\nexport { filterDuplicates } from '../utils/filterDuplicates';\n/** @category Extension Development */\nexport { getBuffer } from '../utils/getBuffer';\n/** @category Extension Development */\nexport { getChainFromVerifiedCredentialChain } from '../utils/getChainFromVerifiedCredentialChain';\n/** @category Extension Development */\nexport { getKeychainIndexedDBName } from '../utils/getKeychainIndexedDBName';\n/** @category Extension Development */\nexport { getNonce } from '../utils/getNonce';\n/** @category Extension Development */\nexport { parseAmountToSmallestUnit } from '../utils/parseAmountToSmallestUnit';\n/** @category Extension Development */\nexport type { ObservableState } from '../utils/observable/observable.types';\n/** @category Extension Development */\nexport { createSignInMessageStatement } from '../modules/wallets/utils/getSignInMessage/createSignInMessageStatement';\n/** @category Extension Development */\nexport { subscribeWithSelector } from '../utils/observable/subscribeWithSelector';\n/** @category Extension Development */\nexport { updateWalletProviderKeysForVerifiedCredentials } from '../modules/wallets/walletProvider/walletProviderKeyMap/updateWalletProviderKeysForVerifiedCredentials';\n/** @category Extension Development */\nexport { DYNAMIC_ICONIC_SPRITE_URL } from '../constants';\n/** @category Extension Development */\nexport { createDeferredPromise } from '../utils/deferredPromise';\n/** @category Extension Development */\nexport { getDeviceSigner } from '../modules/deviceRegistration/getDeviceSigner';\n/** @category Extension Development */\nexport { getHeadersForNonceSignedByDeviceSigners } from '../modules/deviceRegistration/getHeadersForNonceSignedByDeviceSigners';\n/** @category Extension Development */\nexport { createDeviceSignatureHeadersMiddleware } from '../modules/apiClient/utils/deviceSignatureHeadersMiddleware/createDeviceSignatureHeadersMiddleware';\n/** @category Extension Development */\nexport { randomString } from '../utils/randomString';\n/** @category Extension Development */\nexport { getReactNativeManifest } from '../services/nativeManifest/getReactNativeManifest';\n/** @category Extension Development */\nexport type { ReactNativeManifest } from '../services/nativeManifest/nativeManifest.types';\n"],"mappings":"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"}
|
package/dist/core.native.esm.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { B as name, C as isCookieEnabled, D as instrumentFunction, F as getDefaultClient, L as ClientNotFoundError, N as DYNAMIC_SDK_API_VERSION, R as BaseError, S as __getSessionKeys_wrapped, T as ValueMustBeDefinedError, V as version, a as DYNAMIC_ICONIC_SPRITE_URL, c as CHAINS_INFO_MAP, f as __createDeviceSignatureHeadersMiddleware_wrapped, h as __getNonce_wrapped, j as randomString, m as __getDeviceSigner_wrapped, p as __getHeadersForNonceSignedByDeviceSigners_wrapped, s as __getChainFromVerifiedCredentialChain_wrapped, u as __createApiClient_wrapped, w as assertDefined, x as APIError, z as getCore } from "./InvalidParamError-
|
|
2
|
-
import { B as __createStorage_wrapped, C as NativeModuleNotLinkedError, D as CannotTrackError, E as CrossTabBroadcastMessageSchema, F as getBuffer, G as __subscribeWithSelector_wrapped, H as __createLocalStorageAdapter_wrapped, I as __logoutWithReason_wrapped, L as __generateSessionKeys_wrapped, O as __createDeferredPromise_wrapped, S as createKeychainService, T as __createCrossTabBroadcast_wrapped, V as InvalidStorageSet, _ as MethodNotImplementedError, a as __updateWalletProviderKeysForVerifiedCredentials_wrapped, b as getKeychainIndexedDBName, c as __createSignInMessageStatement_wrapped, d as __createVisit_wrapped, f as __consumeCaptchaToken_wrapped, h as __setCaptchaToken_wrapped, i as __getNetworksData_wrapped, k as FETCH_PROJECT_SETTINGS_TRACKER_KEY, l as formatSignInMessage, m as __createRealtimeChannelSchema_wrapped, n as __getNetworkProviders_wrapped, o as __verifyMessageSignatureOwnership_wrapped, p as hasExtension, r as getNetworkProviderBuilderRegistry, s as __removeUnverifiedWalletAccount_wrapped, t as __getNetworkProviderFromNetworkId_wrapped, u as __setUnverifiedWalletAccounts_wrapped, w as __createLogger_wrapped, x as __createRealtimeService_wrapped, y as NoNetworkProvidersError, z as __createStorageKeySchema_wrapped } from "./getNetworkProviderFromNetworkId-
|
|
3
|
-
import { A as emitEvent, C as formatWalletAccountId, E as InvalidWalletProviderKeyError, S as normalizeWalletNameWithChain, T as splitWalletProviderKey, _ as getWalletProviderRegistry, g as WalletProviderPriority, h as __getWalletProviderFromWalletAccount_wrapped, n as getWalletProviderByKey, p as emitWalletAccountsChangedEvent, r as __updateAuthFromVerifyResponse_wrapped, t as __getVerifiedCredentialForWalletAccount_wrapped, u as __getWalletProviders_wrapped, v as __createRuntimeServiceAccessKey_wrapped, x as formatWalletProviderKey, y as NoWalletProviderFoundError } from "./getVerifiedCredentialForWalletAccount-
|
|
4
|
-
import "./isMfaRequiredForAction-
|
|
5
|
-
import { n as __consumeMfaTokenIfRequiredForAction_wrapped, t as __getSignedSessionId_wrapped } from "./getSignedSessionId-
|
|
1
|
+
import { B as name, C as isCookieEnabled, D as instrumentFunction, F as getDefaultClient, L as ClientNotFoundError, N as DYNAMIC_SDK_API_VERSION, R as BaseError, S as __getSessionKeys_wrapped, T as ValueMustBeDefinedError, V as version, a as DYNAMIC_ICONIC_SPRITE_URL, c as CHAINS_INFO_MAP, f as __createDeviceSignatureHeadersMiddleware_wrapped, h as __getNonce_wrapped, j as randomString, m as __getDeviceSigner_wrapped, p as __getHeadersForNonceSignedByDeviceSigners_wrapped, s as __getChainFromVerifiedCredentialChain_wrapped, u as __createApiClient_wrapped, w as assertDefined, x as APIError, z as getCore } from "./InvalidParamError-CB0LQwcO.native.esm.js";
|
|
2
|
+
import { B as __createStorage_wrapped, C as NativeModuleNotLinkedError, D as CannotTrackError, E as CrossTabBroadcastMessageSchema, F as getBuffer, G as __subscribeWithSelector_wrapped, H as __createLocalStorageAdapter_wrapped, I as __logoutWithReason_wrapped, L as __generateSessionKeys_wrapped, O as __createDeferredPromise_wrapped, S as createKeychainService, T as __createCrossTabBroadcast_wrapped, V as InvalidStorageSet, _ as MethodNotImplementedError, a as __updateWalletProviderKeysForVerifiedCredentials_wrapped, b as getKeychainIndexedDBName, c as __createSignInMessageStatement_wrapped, d as __createVisit_wrapped, f as __consumeCaptchaToken_wrapped, h as __setCaptchaToken_wrapped, i as __getNetworksData_wrapped, k as FETCH_PROJECT_SETTINGS_TRACKER_KEY, l as formatSignInMessage, m as __createRealtimeChannelSchema_wrapped, n as __getNetworkProviders_wrapped, o as __verifyMessageSignatureOwnership_wrapped, p as hasExtension, r as getNetworkProviderBuilderRegistry, s as __removeUnverifiedWalletAccount_wrapped, t as __getNetworkProviderFromNetworkId_wrapped, u as __setUnverifiedWalletAccounts_wrapped, w as __createLogger_wrapped, x as __createRealtimeService_wrapped, y as NoNetworkProvidersError, z as __createStorageKeySchema_wrapped } from "./getNetworkProviderFromNetworkId-De1Y__cK.native.esm.js";
|
|
3
|
+
import { A as emitEvent, C as formatWalletAccountId, E as InvalidWalletProviderKeyError, S as normalizeWalletNameWithChain, T as splitWalletProviderKey, _ as getWalletProviderRegistry, g as WalletProviderPriority, h as __getWalletProviderFromWalletAccount_wrapped, n as getWalletProviderByKey, p as emitWalletAccountsChangedEvent, r as __updateAuthFromVerifyResponse_wrapped, t as __getVerifiedCredentialForWalletAccount_wrapped, u as __getWalletProviders_wrapped, v as __createRuntimeServiceAccessKey_wrapped, x as formatWalletProviderKey, y as NoWalletProviderFoundError } from "./getVerifiedCredentialForWalletAccount-DPdNYxR1.native.esm.js";
|
|
4
|
+
import "./isMfaRequiredForAction-BCmIa8zG.native.esm.js";
|
|
5
|
+
import { n as __consumeMfaTokenIfRequiredForAction_wrapped, t as __getSignedSessionId_wrapped } from "./getSignedSessionId-Dez0C64D.native.esm.js";
|
|
6
6
|
import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
|
|
7
7
|
import * as z from "zod/mini";
|
|
8
8
|
import EventEmitter from "eventemitter3";
|
|
@@ -25,8 +25,8 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
25
25
|
}) : target, mod));
|
|
26
26
|
|
|
27
27
|
//#endregion
|
|
28
|
-
const require_InvalidParamError = require('./InvalidParamError-
|
|
29
|
-
const require_getVerifiedCredentialForWalletAccount = require('./getVerifiedCredentialForWalletAccount-
|
|
28
|
+
const require_InvalidParamError = require('./InvalidParamError-D745dtMS.cjs');
|
|
29
|
+
const require_getVerifiedCredentialForWalletAccount = require('./getVerifiedCredentialForWalletAccount-C-21KB51.cjs');
|
|
30
30
|
let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
|
|
31
31
|
let zod_mini = require("zod/mini");
|
|
32
32
|
zod_mini = __toESM(zod_mini);
|
|
@@ -360,7 +360,8 @@ const __fetchProjectSettings_wrapped = require_InvalidParamError.instrumentFunct
|
|
|
360
360
|
/** @instrumented */
|
|
361
361
|
const generateSessionKeys = async (client) => {
|
|
362
362
|
const core = require_InvalidParamError.getCore(client);
|
|
363
|
-
|
|
363
|
+
await core.keychain.removeKey("session");
|
|
364
|
+
const publicKey = await core.keychain.generateKey("session");
|
|
364
365
|
require_InvalidParamError.assertDefined(publicKey, "Public key not found");
|
|
365
366
|
core.state.set({ sessionKeys: publicKey });
|
|
366
367
|
return { publicKey };
|
|
@@ -1838,4 +1839,4 @@ Object.defineProperty(exports, 'retryOnFail', {
|
|
|
1838
1839
|
return retryOnFail;
|
|
1839
1840
|
}
|
|
1840
1841
|
});
|
|
1841
|
-
//# sourceMappingURL=getNetworkProviderFromNetworkId-
|
|
1842
|
+
//# sourceMappingURL=getNetworkProviderFromNetworkId-C0hhJBuw.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNetworkProviderFromNetworkId-C0hhJBuw.cjs","names":["BaseError","getDefaultClient","getWalletAccounts","BaseError","item: StorageFormat<typeof value>","createStorageKeySchema","z","getCore","walletProvidersMap: Map<string, WalletProvider>","getWalletAccounts","getWalletProviderFromWalletAccount","getCore","BufferPolyfill","BaseError","z","buffer","BaseError","createKeychainService: CreateKeychainService","BaseError","BaseError","BaseError","BaseError","getDefaultClient","getDefaultClient","getCore","suffixFields: string[]","CHAINS_INFO_MAP","createRuntimeServiceAccessKey"],"sources":["../src/utils/isEqualShallow/isEqualShallow.ts","../src/utils/observable/subscribeWithSelector/subscribeWithSelector.ts","../src/utils/retryOnFail/InvalidRetryOnFailCallError.ts","../src/utils/retryOnFail/retryOnFail.ts","../src/modules/auth/isSignedIn/isSignedIn.ts","../src/services/storage/createLocalStorageAdapter/createLocalStorageAdapter.ts","../src/errors/InvalidStorageSet.ts","../src/services/storage/createStorage/formatForStorage/isValidDateISOString/isValidDateISOString.ts","../src/services/storage/createStorage/formatForStorage/storageFormat.ts","../src/services/storage/createStorage/createStorage.ts","../src/services/storage/createStorageKeySchema/createStorageKeySchema.ts","../src/modules/projectSettings/fetchProjectSettings/projectSettingsExpirationScheme.ts","../src/modules/projectSettings/fetchProjectSettings/fetchProjectSettings.ts","../src/modules/sessionKeys/generateSessionKeys/generateSessionKeys.ts","../src/modules/wallets/utils/getAvailableWalletProvidersFromWalletAccounts/getAvailableWalletProvidersFromWalletAccounts.ts","../src/modules/wallets/disconnectAndTerminateWalletProviders/disconnectAndTerminateWalletProviders.ts","../src/modules/auth/logoutWithReason/logoutWithReason.ts","../src/utils/getBuffer/getBuffer.ts","../src/utils/isServerSideRendering/isServerSideRendering.ts","../src/modules/initializeClient/consts.ts","../src/utils/deferredPromise/createDeferredPromise.ts","../src/errors/CannotTrackError.ts","../src/services/crossTabBroadcast/crossTabBroadcast.schema.ts","../src/services/crossTabBroadcast/createCrossTabBroadcast/createCrossTabBroadcast.ts","../src/services/logger/createLogger/createLogger.ts","../src/utils/bufferToHex/bufferToHex.ts","../src/utils/compressRawPublicKey/compressRawPublicKey.ts","../src/services/keychain/createKeychainService/KeyNotFoundError.ts","../src/services/keychain/createKeychainService/utils/constants.ts","../src/services/keychain/createKeychainService/utils/deleteIndexedDBItem.ts","../src/services/keychain/createKeychainService/utils/getIndexedDBItem.ts","../src/services/keychain/createKeychainService/utils/setIndexedDBItem.ts","../src/services/keychain/createKeychainService/utils/openDatabase.ts","../src/services/keychain/createKeychainService/utils/withDatabase/withDatabase.ts","../src/services/keychain/createKeychainService/createKeychainService.ts","../src/errors/InvalidRealtimePublishError.ts","../src/errors/RealtimeNotConnectedError.ts","../src/services/realtime/createRealtimeService/createRealtimeService.ts","../src/utils/getKeychainIndexedDBName/getKeychainIndexedDBName.ts","../src/errors/NoNetworkProvidersError.ts","../src/errors/WalletAlreadyLinkedToAnotherUserError.ts","../src/modules/captcha/isCaptchaRequired/isCaptchaRequired.ts","../src/modules/captcha/consumeCaptchaToken/consumeCaptchaToken.ts","../src/modules/captcha/setCaptchaToken/setCaptchaToken.ts","../src/services/realtime/createRealtimeChannelSchema/createRealtimeChannelSchema.ts","../src/modules/extension/hasExtension/hasExtension.ts","../src/modules/auth/createVisit/createVisit.ts","../src/modules/wallets/unverifiedWalletAccounts/setUnverifiedWalletAccounts/setUnverifiedWalletAccounts.ts","../src/modules/wallets/utils/formatSignInMessage/formatSignInMessage.ts","../src/modules/wallets/utils/getSignInMessage/createSignInMessageStatement/createSignInMessageStatement.ts","../src/modules/wallets/unverifiedWalletAccounts/removeUnverifiedWalletAccount/removeUnverifiedWalletAccount.ts","../src/utils/isError/isError.ts","../src/utils/isErrorWithCode/isErrorWithCode.ts","../src/modules/wallets/verifyMessageSignatureOwnership/verifyMessageSignatureOwnership.ts","../src/modules/wallets/walletProvider/walletProviderKeyMap/updateWalletProviderKeysForVerifiedCredentials/updateWalletProviderKeysForVerifiedCredentials.ts","../src/modules/wallets/networks/getSdkChainFromApiChainName/getSdkChainFromApiChainName.ts","../src/modules/wallets/networks/getNetworksData/getNetworksData.ts","../src/modules/wallets/networks/networkProviderBuilderRegistry/createNetworkProviderBuilderRegistry/createNetworkProviderBuilderRegistry.ts","../src/modules/wallets/networks/networkProviderBuilderRegistry/getNetworkProviderBuilderRegistry/getNetworkProviderBuilderRegistry.ts","../src/modules/wallets/networks/getNetworkProviders/getNetworkProviders.ts","../src/modules/wallets/networks/getNetworkProviderFromNetworkId/getNetworkProviderFromNetworkId.ts"],"sourcesContent":["/**\n * Shallow compare two objects.\n *\n * Source: https://github.com/pmndrs/zustand/blob/main/src/vanilla/shallow.ts\n * @not-instrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isEqualShallow = <T>(objA: T, objB: T) => {\n if (Object.is(objA, objB)) return true;\n\n if (\n typeof objA !== 'object' ||\n objA === null ||\n typeof objB !== 'object' ||\n objB === null\n ) {\n return objA === objB;\n }\n\n if (objA instanceof Map && objB instanceof Map) {\n if (objA.size !== objB.size) return false;\n\n for (const [key, value] of objA) {\n if (!Object.is(value, objB.get(key))) return false;\n }\n\n return true;\n }\n\n if (objA instanceof Set && objB instanceof Set) {\n if (objA.size !== objB.size) return false;\n\n for (const value of objA) {\n if (!objB.has(value)) return false;\n }\n return true;\n }\n\n const keysA = Object.keys(objA);\n\n if (keysA.length !== Object.keys(objB).length) return false;\n\n for (const keyA of keysA) {\n if (\n !Object.prototype.hasOwnProperty.call(objB, keyA as string) ||\n !Object.is(objA[keyA as keyof T], objB[keyA as keyof T])\n ) {\n return false;\n }\n }\n\n if (objA.constructor !== objB.constructor) return false;\n\n return true;\n};\n","import { isEqualShallow } from '../../isEqualShallow';\nimport type { ObservableState } from '../observable.types';\n\n/**\n * Allows subscribing to a slice of the state.\n * The slice is a computation of the states.\n *\n * The callback will only be called when the slice has changed.\n * Change is determined by shallow comparison.\n *\n * Returns a function to unsubscribe the callback.\n * @instrumented\n */\nexport const subscribeWithSelector =\n // eslint-disable-next-line custom-rules/require-single-object-param\n <T extends Record<string, unknown>, Slice>(\n observable: ObservableState<T>,\n selector: (value: T) => Slice\n ) =>\n // eslint-disable-next-line custom-rules/require-single-object-param\n (callback: (slice: Slice) => void) => {\n let lastSlice = selector(observable.get());\n\n return observable.subscribe((value) => {\n const nextSlice = selector(value);\n\n if (isEqualShallow(nextSlice, lastSlice)) return;\n\n lastSlice = nextSlice;\n\n callback(nextSlice);\n });\n };\n","import { BaseError } from '../../errors/base';\n\n/**\n * This error is thrown when the `retryOnFail` function is called with an invalid\n * number of retries (i.e. less than 0).\n */\nexport class InvalidRetryOnFailCallError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(maxRetries: number) {\n super({\n cause: null,\n code: 'invalid_retry_on_fail_call_error',\n docsUrl: null,\n name: 'InvalidRetryOnFailCallError',\n shortMessage: `Invalid retries parameter for retryOnFail call: ${maxRetries}`,\n });\n }\n}\n","import { InvalidRetryOnFailCallError } from './InvalidRetryOnFailCallError';\n\nexport type RetryOnFailParams<T> = {\n /**\n * The delay between retries in milliseconds.\n */\n delay?: number;\n /**\n * The function to call.\n */\n fn: () => Promise<T>;\n /**\n * The maximum number of retries.\n *\n * When set to 0, the function will be called only once and is\n * therefore equivalent to calling the function directly.\n */\n maxRetries: number;\n};\n\n/** @not-instrumented */\nexport const retryOnFail = async <T>({\n delay = 0,\n fn,\n maxRetries,\n}: RetryOnFailParams<T>) => {\n for (let retry = 0; retry <= maxRetries; retry++) {\n try {\n return await fn();\n } catch (error) {\n if (retry >= maxRetries) {\n throw error;\n }\n\n if (delay > 0) {\n await new Promise((resolve) => setTimeout(resolve, delay));\n }\n }\n }\n\n /**\n * Reaching this point should never happen and this\n * error is thrown to help us debug the issue.\n */\n throw new InvalidRetryOnFailCallError(maxRetries);\n};\n","import { getDefaultClient } from '../../../client/defaultClient';\nimport { getWalletAccounts } from '../../wallets/getWalletAccounts';\n\n/**\n * Checks if the user is currently signed in to the Dynamic client.\n *\n * The client is considered to be in a signed in state if a user has\n * authenticated or if the client has at least one wallet connected.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns True if the user is signed in, false otherwise.\n * @not-instrumented\n */\nexport const isSignedIn = (client = getDefaultClient()) =>\n Boolean(client.user || getWalletAccounts(client).length > 0);\n","/* eslint-disable no-restricted-globals -- this is the abstraction for localStorage */\nimport type { StorageAdapter } from '../storage.types';\n\n/**\n * Creates a localStorage adapter.\n * @instrumented\n */\nexport const createLocalStorageAdapter = (): StorageAdapter => ({\n getItem: async (key) => localStorage.getItem(key),\n removeItem: async (key) => localStorage.removeItem(key),\n setItem: async (key, value) => localStorage.setItem(key, value),\n});\n","import { BaseError } from './base';\n\ntype InvalidStorageSetParams = {\n key: string;\n value: string;\n};\n\nexport class InvalidStorageSet extends BaseError {\n constructor({ key, value }: InvalidStorageSetParams) {\n super({\n cause: null,\n code: 'invalid_storage_set',\n docsUrl: null,\n metaMessages: [`key: ${key}`, value],\n name: 'InvalidStorageSet',\n shortMessage: 'Tried to store a value that does not match the schema',\n });\n }\n}\n","/**\n * Returns whether the given string is a valid ISO date string.\n *\n * Does not support timezone offsets.\n * @not-instrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isValidDateISOString = (value: string): boolean => {\n const date = new Date(value);\n\n return !isNaN(date.getTime()) && date.toISOString() === value;\n};\n","/* eslint-disable custom-rules/function-name-matches-filename */\nimport type { StorageFormat } from '../../storage.types';\nimport { isValidDateISOString } from './isValidDateISOString';\n\nconst DATE_PREFIX = '__DATE__';\n\n/** @not-instrumented */\nexport const formatForStorage = (value: unknown) => {\n const item: StorageFormat<typeof value> = { value };\n\n return JSON.stringify(item, (_, entry) => {\n // You might think that entry here would be a Date and one could simply do \"entry instanceof Date\",\n // but actually it will be a string already (no idea why JSON.stringify does this)\n if (isValidDateISOString(entry)) {\n return `${DATE_PREFIX}${entry}`;\n }\n\n return entry;\n });\n};\n\n/** @not-instrumented */\n// eslint-disable-next-line custom-rules/one-function-per-file, custom-rules/require-single-object-param\nexport const parseFromStorage = <T>(value: string): StorageFormat<T> | null => {\n try {\n const parsed = JSON.parse(value, (_, entry) => {\n if (typeof entry === 'string' && entry.startsWith(DATE_PREFIX)) {\n return new Date(entry.slice(DATE_PREFIX.length));\n }\n\n return entry;\n }) as StorageFormat<T>;\n\n return parsed;\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n } catch (error) {\n return null;\n }\n};\n","import type { Storage, StorageAdapter, StorageAdapterOptions, StorageTier } from '../storage.types';\nimport { InvalidStorageSet } from './../../../errors/InvalidStorageSet';\nimport { formatForStorage } from './formatForStorage';\nimport { parseFromStorage } from './formatForStorage/storageFormat';\n\ntype CreateWebStorageParams = {\n prefix?: string;\n storageAdapter: StorageAdapter;\n};\n\n/**\n * Creates a Storage service to interact with storage adapter.\n * Reads the `storageTier` from each key's config and passes it\n * to the adapter on every operation, defaulting to `'default'`.\n * @instrumented\n */\nexport const createStorage = ({\n prefix = '',\n storageAdapter,\n}: CreateWebStorageParams): Storage => {\n const getPrefixedKey = (key: string) => (prefix ? `${prefix}_${key}` : key);\n\n const getAdapterOptions = (storageTier?: StorageTier): StorageAdapterOptions => ({\n storageTier: storageTier ?? 'default',\n });\n\n return {\n getItem: async (storageKeySchema) => {\n const prefixedKey = getPrefixedKey(storageKeySchema.key);\n const options = getAdapterOptions(storageKeySchema.config?.storageTier);\n\n const rawItem = await storageAdapter.getItem(prefixedKey, options);\n\n const parsedItem = rawItem ? parseFromStorage(rawItem) : null;\n\n /**\n * The item saved to localStorage may be malformed.\n * In this case, we remove it and return null.\n */\n if (parsedItem !== null) {\n const parsed = storageKeySchema.schema.safeParse(parsedItem.value);\n\n if (parsed.success) {\n return parsed.data;\n }\n }\n\n /**\n * The item saved to localStorage may be malformed.\n * In this case, we remove it and return null.\n */\n\n await storageAdapter.removeItem(prefixedKey, options);\n\n return null;\n },\n\n removeItem: async (storageKeySchema) => {\n await storageAdapter.removeItem(\n getPrefixedKey(storageKeySchema.key),\n getAdapterOptions(storageKeySchema.config?.storageTier),\n );\n },\n\n setItem: async (storageKeySchema, value) => {\n const parsed = storageKeySchema.schema.safeParse(value);\n\n if (!parsed.success) {\n throw new InvalidStorageSet({\n key: storageKeySchema.key,\n value: JSON.stringify(value),\n });\n }\n\n const item = formatForStorage(parsed.data);\n\n await storageAdapter.setItem(\n getPrefixedKey(storageKeySchema.key),\n item,\n getAdapterOptions(storageKeySchema.config?.storageTier),\n );\n },\n };\n};\n","import type * as z from 'zod/mini';\n\nimport type { StorageKeySchema, StorageKeySchemaConfig } from '../storage.types';\n\n/** @instrumented */\nexport const createStorageKeySchema = <T>(params: {\n config?: StorageKeySchemaConfig;\n key: string;\n schema: z.ZodMiniType<T>;\n}): StorageKeySchema<T> => {\n return params;\n};\n","import * as z from 'zod/mini';\n\nimport { createStorageKeySchema } from '../../../services/storage';\n\n/**\n * The schema to track the expiration time of the project settings.\n */\nexport const projectSettingsExpirationStorageKeySchema = createStorageKeySchema(\n {\n key: 'projectSettingsExpiration',\n schema: z.number(),\n }\n);\n","import { getCore } from '../../../client/core/getCore';\nimport { getDefaultClient } from '../../../client/defaultClient';\nimport { retryOnFail } from '../../../utils/retryOnFail';\nimport { createApiClient } from '../../apiClient';\nimport { CLIENT_SDK_NAME } from '../../apiClient/constants';\nimport { isSignedIn } from '../../auth/isSignedIn';\nimport { projectSettingsExpirationStorageKeySchema } from './projectSettingsExpirationScheme';\n\n/**\n * Expiration time of the project settings in milliseconds.\n */\nexport const PROJECT_SETTINGS_EXPIRATION_TIME = 1000 * 60 * 5; // 5 minutes\n\n/**\n * Fetches and updates the project settings from the API.\n *\n * This function retrieves the latest project configuration settings\n * from Dynamic's servers, including authentication options, enabled chains,\n * and security configurations. The settings are cached for performance.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns A promise that resolves to the updated project settings.\n * @instrumented\n */\nexport const fetchProjectSettings = async (client = getDefaultClient()) => {\n const core = getCore(client);\n\n const currentExpiration = await core.storage.getItem(\n projectSettingsExpirationStorageKeySchema\n );\n\n const hasProjectSettings = Boolean(client.projectSettings);\n const isExpired = currentExpiration && currentExpiration < Date.now();\n\n // We want to cache the project settings if its valid and user is connected.\n // This avoids unnecessary API calls and speeds up the initial load.\n if (hasProjectSettings && !isExpired && isSignedIn(client)) {\n return client.projectSettings;\n }\n\n const apiClient = createApiClient({}, client);\n\n core.logger.debug('[fetchProjectSettings] Fetching project settings...');\n\n const doFetch = async () =>\n apiClient.getEnvironmentSettings(\n {\n environmentId: core.environmentId,\n sdkVersion: `${CLIENT_SDK_NAME}/${core.version}`,\n },\n {\n credentials: 'omit',\n }\n );\n\n const projectSettings = await retryOnFail({\n fn: doFetch,\n maxRetries: 2,\n });\n\n core.state.set({ projectSettings: projectSettings ?? null });\n\n await core.storage.setItem(\n projectSettingsExpirationStorageKeySchema,\n Date.now() + PROJECT_SETTINGS_EXPIRATION_TIME\n );\n\n return projectSettings;\n};\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { assertDefined } from '../../../utils/assertDefined';\nimport type { SessionKeys } from '../sessionKeys.types';\n\n/** @instrumented */\nexport const generateSessionKeys = async (\n client: DynamicClient\n): Promise<SessionKeys> => {\n const core = getCore(client);\n\n await core.keychain.removeKey('session');\n\n const publicKey = await core.keychain.generateKey('session');\n\n assertDefined(publicKey, 'Public key not found');\n\n core.state.set({\n sessionKeys: publicKey,\n });\n\n return { publicKey };\n};\n","import { getCore } from '../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../client/types';\nimport { getWalletAccounts } from '../../getWalletAccounts';\nimport type { WalletProvider } from '../../walletProvider';\nimport { getWalletProviderFromWalletAccount } from '../getWalletProviderFromWalletAccount';\n\n/** @not-instrumented */\nexport const getAvailableWalletProvidersFromWalletAccounts = (\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n const walletProvidersMap: Map<string, WalletProvider> = new Map();\n\n const walletAccounts = getWalletAccounts(client);\n\n walletAccounts.forEach((walletAccount) => {\n if (walletProvidersMap.has(walletAccount.walletProviderKey)) {\n return;\n }\n\n try {\n const walletProvider = getWalletProviderFromWalletAccount(\n {\n walletAccount,\n },\n client\n );\n\n walletProvidersMap.set(walletAccount.walletProviderKey, walletProvider);\n } catch (error) {\n core.logger.debug('Wallet provider not found for wallet account', {\n error,\n walletAccount: walletAccount.address,\n });\n }\n });\n\n return Array.from(walletProvidersMap.values());\n};\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types/DynamicClient';\nimport type { LogoutReason } from '../../auth/logoutReason';\nimport { getAvailableWalletProvidersFromWalletAccounts } from '../utils/getAvailableWalletProvidersFromWalletAccounts';\n\n/**\n * Disconnect and terminate each wallet provider, if available.\n * @not-instrumented\n */\nexport const disconnectAndTerminateWalletProviders = async (\n { reason }: { reason?: LogoutReason },\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n const walletProviders = getAvailableWalletProvidersFromWalletAccounts(client);\n\n await Promise.all(\n walletProviders.map(async (walletProvider) => {\n if (walletProvider.terminate) {\n await walletProvider.terminate({ reason });\n }\n\n if (walletProvider.disconnect) {\n try {\n await walletProvider.disconnect();\n } catch (err) {\n core.logger.error(\n `Error disconnecting from wallet ${walletProvider.key}`,\n err\n );\n }\n }\n })\n );\n};\n","import type { DynamicClient } from '../../../client/types';\nimport { getCore } from '../../../client/core/getCore';\nimport { setCookie } from '../../../utils/setCookie';\nimport { createApiClient } from '../../apiClient';\nimport { emitEvent } from '../../clientEvents';\nimport { fetchProjectSettings } from '../../projectSettings/fetchProjectSettings';\nimport { isCookieEnabled } from '../../projectSettings/isCookieEnabled';\nimport { generateSessionKeys } from '../../sessionKeys/generateSessionKeys';\nimport { disconnectAndTerminateWalletProviders } from '../../wallets/disconnectAndTerminateWalletProviders';\nimport { DYNAMIC_AUTH_COOKIE_NAME } from '../consts';\nimport type { LogoutReason } from '../logoutReason';\n\n/**\n * Logs the user out with an explicit reason.\n *\n * Revokes the session, clears auth state, terminates wallet providers, and\n * emits the `logout` client event with the given reason. The reason is also\n * captured as an argument on the function-instrumentation event, which is\n * how Datadog distinguishes between different logout causes.\n *\n * Use this instead of the public `logout` when triggering a logout from\n * internal or extension code — the caller owns the reason string, so the\n * telemetry correctly attributes *why* the logout happened.\n *\n * @param params - The logout params.\n * @param params.reason - Why the logout is being triggered. Extension authors\n * needing a reason outside the SDK catalog can cast with `as LogoutReason`.\n * @param client - The Dynamic client instance.\n * @instrumented\n */\nexport const logoutWithReason = async (\n { reason }: { reason: LogoutReason },\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n core.logger.debug('[logoutWithReason] Logging out...', { reason });\n\n await disconnectAndTerminateWalletProviders({ reason }, client);\n\n if (client.user !== null) {\n const apiClient = createApiClient({}, client);\n\n try {\n await apiClient.revokeSession({\n environmentId: core.environmentId,\n });\n } catch (error) {\n core.logger.error('Failed to revoke session', error);\n }\n\n /**\n * This deletes the auth cookie if it exists.\n * If the cookie doesn't exist, this sets a new cookie that expires immediately.\n */\n if (isCookieEnabled(client)) {\n setCookie(\n `${DYNAMIC_AUTH_COOKIE_NAME}=; Max-Age=-99999999; path=/; SameSite=Lax`\n );\n }\n }\n\n await core.keychain.removeKey('session');\n\n core.state.set({\n captchaToken: null,\n elevatedAccessTokens: [],\n legacyToken: null,\n mfaToken: null,\n sessionExpiresAt: null,\n sessionKeys: null,\n token: null,\n unverifiedWalletAccounts: [],\n user: null,\n });\n\n emitEvent({ args: { reason }, event: 'logout' }, client);\n\n // Refetch project settings\n void fetchProjectSettings(client);\n\n // Regenerate session keys\n void generateSessionKeys(client);\n};\n","/* eslint-disable no-restricted-globals */\nimport { Buffer as BufferPolyfill } from 'buffer';\n\n/** @not-instrumented */\nexport const getBuffer = () =>\n typeof Buffer !== 'undefined' ? Buffer : BufferPolyfill;\n","/**\n * Indicates if the code is running in a server-side environment.\n * @not-instrumented\n */\n// eslint-disable-next-line no-restricted-globals\nexport const isServerSideRendering = () => typeof window === 'undefined';\n","export const REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY =\n 'refresh-user-state-from-cookie';\n\nexport const INITIALIZE_STORAGE_SYNC_TRACKER_KEY = 'initialize-storage-sync';\n\nexport const FETCH_PROJECT_SETTINGS_TRACKER_KEY = 'fetch-project-settings';\n\nexport const GENERATE_SESSION_KEYS_TRACKER_KEY = 'generate-session-keys';\n\nexport const REFRESH_USER_STATE_FROM_VALID_TOKEN_TRACKER_KEY =\n 'refresh-user-state-from-valid-token';\n","import type { DeferredPromise } from './deferredPromise.types';\n\n/** @instrumented */\nexport const createDeferredPromise = <T>(): DeferredPromise<T> => {\n let resolve: (value: T) => void;\n let reject: (reason?: unknown) => void;\n\n const promise = new Promise<T>((_resolve, _reject) => {\n resolve = _resolve;\n reject = _reject;\n });\n\n return {\n promise,\n reject: (reason?: unknown) => reject?.(reason),\n resolve: (value: T) => resolve?.(value),\n };\n};\n","import { BaseError } from './base';\n\nexport class CannotTrackError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'cannot_track_error',\n docsUrl: null,\n name: 'CannotTrackError',\n shortMessage: 'All track calls must be performed in the same node tick',\n });\n }\n}\n","import * as z from 'zod/mini';\n\n/**\n * Schema for validating cross-tab broadcast messages.\n */\nexport const CrossTabBroadcastMessageSchema = z.object({\n args: z.optional(z.unknown()),\n event: z.string(),\n});\n","import EventEmitter from 'eventemitter3';\n\nimport { isServerSideRendering } from '../../../utils/isServerSideRendering';\nimport { CrossTabBroadcastMessageSchema } from '../crossTabBroadcast.schema';\nimport type { CrossTabBroadcast } from '../crossTabBroadcast.types';\n\ntype CreateCrossTabBroadcastParams = {\n channelName: string;\n};\n\n/**\n * Creates a cross-tab broadcast service instance using the BroadcastChannel API.\n *\n * Enables communication between multiple tabs/windows of the same application.\n * Messages are validated against the schema and invalid messages are silently ignored.\n *\n * In SSR or when BroadcastChannel is unavailable, returns a no-op implementation.\n *\n * @param params - Configuration parameters\n * @param params.channelName - The name of the broadcast channel to use\n * @returns A cross-tab broadcast service instance\n * @instrumented\n */\nexport const createCrossTabBroadcast = ({\n channelName,\n}: CreateCrossTabBroadcastParams): CrossTabBroadcast => {\n // SSR check - return no-op implementation\n // eslint-disable-next-line no-restricted-globals\n if (isServerSideRendering() || typeof BroadcastChannel === 'undefined') {\n return {\n off: () => {},\n on: () => {},\n send: () => {},\n };\n }\n\n // eslint-disable-next-line no-restricted-globals\n const channel = new BroadcastChannel(channelName);\n const eventEmitter = new EventEmitter();\n\n // Message handler with validation\n const handleMessage = (messageEvent: MessageEvent) => {\n const parsed = CrossTabBroadcastMessageSchema.safeParse(messageEvent.data);\n\n if (!parsed.success) {\n // Silently ignore invalid messages (consistent with storage patterns)\n return;\n }\n\n const { args, event } = parsed.data;\n eventEmitter.emit(event, args);\n };\n\n channel.addEventListener('message', handleMessage);\n\n return {\n off: (event, callback) => {\n eventEmitter.off(event, callback);\n },\n\n on: (event, callback) => {\n eventEmitter.on(event, callback);\n },\n\n send: ({ args, event }) => {\n channel.postMessage({ args, event });\n },\n };\n};\n","import { EventEmitter } from 'eventemitter3';\n\nimport type { LogLevel, Logger, LoggerEventEmitter } from '../logger.types';\n\n/**\n * Configuration options for the logger\n * @instrumented\n */\ntype CreateLoggerOptions = {\n level?: LogLevel;\n};\n\n/**\n * Log levels and their corresponding numeric values\n */\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n error: 3,\n info: 1,\n warn: 2,\n};\n\n// Assign to avoid lint errors\nconst defaultConsole = console;\n\n/**\n * Creates a logger instance with configurable log level and event emission capabilities.\n * @returns A logger instance with debug, info, warn, and error methods\n * @not-instrumented\n */\nexport const createLogger = (options: CreateLoggerOptions = {}): Logger => {\n const eventEmitter: LoggerEventEmitter = new EventEmitter();\n\n // Default to 'debug' if no level is provided\n const minLevel: LogLevel = options.level ?? 'warn';\n\n // Helper to decide if we should log based on current log level\n // eslint-disable-next-line custom-rules/require-single-object-param\n const shouldLog = (level: LogLevel): boolean => {\n return LOG_LEVELS[level] >= LOG_LEVELS[minLevel];\n };\n\n // Helper to format the log message\n // eslint-disable-next-line custom-rules/require-single-object-param\n const formatMessage = (level: LogLevel, message: string): string => {\n const timestamp = new Date().toISOString();\n\n return `[${timestamp}] ${level.toUpperCase()}: ${message}`;\n };\n\n // Unified logger function that checks the level and calls the appropriate console method\n // eslint-disable-next-line custom-rules/require-single-object-param\n const log = (\n level: LogLevel,\n consoleMethod: (...data: unknown[]) => void,\n message: string,\n ...args: unknown[]\n ) => {\n eventEmitter.emit('log', level, message, ...args);\n\n if (!shouldLog(level)) return;\n\n consoleMethod(formatMessage(level, message), ...args);\n };\n\n return {\n debug: (message, ...args) =>\n log('debug', defaultConsole.debug, message, ...args),\n\n error: (message, ...args) =>\n log('error', defaultConsole.error, message, ...args),\n\n info: (message, ...args) =>\n log('info', defaultConsole.info, message, ...args),\n\n off: eventEmitter.off.bind(eventEmitter),\n\n on: eventEmitter.on.bind(eventEmitter),\n warn: (message, ...args) =>\n log('warn', defaultConsole.warn, message, ...args),\n };\n};\n","/**\n * Converts an ArrayBuffer or Uint8Array to a hex-encoded string\n * @not-instrumented\n */\nexport const bufferToHex = (buffer: ArrayBufferLike | Uint8Array) =>\n [...(buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer))]\n .map((x) => x.toString(16).padStart(2, '0'))\n .join('');\n","/**\n * Accepts a public key array buffer, and returns a buffer with the compressed version of the public key\n * @not-instrumented\n */\nexport const compressRawPublicKey = (rawPublicKey: ArrayBuffer) => {\n const rawPublicKeyBytes = new Uint8Array(rawPublicKey);\n const len = rawPublicKeyBytes.byteLength;\n\n // Drop the y coordinate\n const compressedBytes = rawPublicKeyBytes.slice(0, (1 + len) >>> 1);\n\n // Encode the parity of `y` in first bit\n compressedBytes[0] = 0x2 | (rawPublicKeyBytes[len - 1] & 0x01);\n return compressedBytes.buffer;\n};\n","import { BaseError } from '../../../errors/base';\n\nexport class KeyNotFoundError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(keyName: string) {\n super({\n cause: null,\n code: 'key_not_found',\n docsUrl: null,\n name: 'KeyNotFoundError',\n shortMessage: `Key \"${keyName}\" not found in keychain`,\n });\n }\n}\n","export const STORE_NAME = 'keys';\n","import { STORE_NAME } from './constants';\n\nexport type DeleteIndexedDBItemOptions = {\n /** The IndexedDB database handle. */\n db: IDBDatabase;\n\n /** The key name to delete. */\n keyName: string;\n};\n\n/** @not-instrumented */\nexport const deleteIndexedDBItem = ({\n db,\n keyName,\n}: DeleteIndexedDBItemOptions): Promise<void> =>\n new Promise((resolve, reject) => {\n const transaction = db.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.delete(keyName);\n\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error as Error);\n });\n","import type { StoredKey } from '../createKeychainService.types';\nimport { STORE_NAME } from './constants';\n\nexport type GetIndexedDBItemOptions = {\n /** The IndexedDB database handle. */\n db: IDBDatabase;\n\n /** The key name to look up. */\n keyName: string;\n};\n\n/** @not-instrumented */\nexport const getIndexedDBItem = ({\n db,\n keyName,\n}: GetIndexedDBItemOptions): Promise<StoredKey | undefined> =>\n new Promise((resolve, reject) => {\n const transaction = db.transaction(STORE_NAME, 'readonly');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.get(keyName);\n\n request.onsuccess = () => resolve(request.result as StoredKey | undefined);\n request.onerror = () => reject(request.error as Error);\n });\n","import type { StoredKey } from '../createKeychainService.types';\nimport { STORE_NAME } from './constants';\n\nexport type SetIndexedDBItemOptions = {\n /** The IndexedDB database handle. */\n db: IDBDatabase;\n\n /** The stored key entry to write. */\n entry: StoredKey;\n};\n\n/** @not-instrumented */\nexport const setIndexedDBItem = ({\n db,\n entry,\n}: SetIndexedDBItemOptions): Promise<void> =>\n new Promise((resolve, reject) => {\n const transaction = db.transaction(STORE_NAME, 'readwrite');\n const store = transaction.objectStore(STORE_NAME);\n const request = store.put(entry);\n\n request.onsuccess = () => resolve();\n request.onerror = () => reject(request.error as Error);\n });\n","import { STORE_NAME } from './constants';\n\n/** @not-instrumented */\nexport const openDatabase = (dbName: string): Promise<IDBDatabase> =>\n new Promise((resolve, reject) => {\n const request = indexedDB.open(dbName, 1);\n\n request.onupgradeneeded = () => {\n const db = request.result;\n\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME, { keyPath: 'keyName' });\n }\n };\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error as Error);\n });\n","import { openDatabase } from '../openDatabase';\n\ntype WithDatabaseParams<T> = {\n dbName: string;\n operation: (db: IDBDatabase) => Promise<T>;\n};\n\n/**\n * Scopes a database connection to the lifetime of a callback.\n * Opens a connection, passes it to the operation, and guarantees\n * the connection is closed when the operation completes or throws.\n * @not-instrumented\n */\nexport const withDatabase = async <T>({\n dbName,\n operation,\n}: WithDatabaseParams<T>): Promise<T> => {\n const db = await openDatabase(dbName);\n try {\n const result = await operation(db);\n\n return result;\n } finally {\n db.close();\n }\n};\n","import { bufferToHex } from '../../../utils/bufferToHex';\nimport { compressRawPublicKey } from '../../../utils/compressRawPublicKey';\nimport type { CreateKeychainService } from './createKeychainService.types';\nimport { KeyNotFoundError } from './KeyNotFoundError';\nimport { deleteIndexedDBItem } from './utils/deleteIndexedDBItem';\nimport { getIndexedDBItem } from './utils/getIndexedDBItem';\nimport { setIndexedDBItem } from './utils/setIndexedDBItem';\nimport { withDatabase } from './utils/withDatabase';\n\nconst DEFAULT_DB_NAME = 'dynamic_keychain';\n\n/** @instrumented */\nexport const createKeychainService: CreateKeychainService = (params) => {\n const dbName = params?.dbName ?? DEFAULT_DB_NAME;\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const generateKey = async (keyName: string): Promise<string> => {\n const keyPair = await crypto.subtle.generateKey(\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['sign']\n );\n\n const rawPublicKey = await crypto.subtle.exportKey(\n 'raw',\n keyPair.publicKey\n );\n\n const compressedPublicKey = compressRawPublicKey(rawPublicKey);\n const publicKeyHex = bufferToHex(compressedPublicKey);\n\n await withDatabase({\n dbName,\n operation: (db) =>\n setIndexedDBItem({\n db,\n entry: {\n keyName,\n privateKey: keyPair.privateKey,\n publicKeyHex,\n },\n }),\n });\n\n return publicKeyHex;\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const importKey = async (\n keyName: string,\n jwk: JsonWebKey\n ): Promise<string> => {\n const privateKey = await crypto.subtle.importKey(\n 'jwk',\n jwk,\n { name: 'ECDSA', namedCurve: 'P-256' },\n false,\n ['sign']\n );\n\n const publicJwk = { crv: jwk.crv, kty: jwk.kty, x: jwk.x, y: jwk.y };\n\n const publicCryptoKey = await crypto.subtle.importKey(\n 'jwk',\n publicJwk,\n { name: 'ECDSA', namedCurve: 'P-256' },\n true,\n ['verify']\n );\n\n const rawPublicKey = await crypto.subtle.exportKey('raw', publicCryptoKey);\n const compressedPublicKey = compressRawPublicKey(rawPublicKey);\n const publicKeyHex = bufferToHex(compressedPublicKey);\n\n await withDatabase({\n dbName,\n operation: (db) =>\n setIndexedDBItem({\n db,\n entry: {\n keyName,\n privateKey,\n publicKeyHex,\n },\n }),\n });\n\n return publicKeyHex;\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const getPublicKey = async (keyName: string): Promise<string | null> => {\n const entry = await withDatabase({\n dbName,\n operation: (db) => getIndexedDBItem({ db, keyName }),\n });\n\n return entry?.publicKeyHex ?? null;\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const sign = async (keyName: string, message: string): Promise<string> => {\n const entry = await withDatabase({\n dbName,\n operation: (db) => getIndexedDBItem({ db, keyName }),\n });\n\n if (!entry) {\n throw new KeyNotFoundError(keyName);\n }\n\n const encoder = new TextEncoder();\n const data = encoder.encode(message);\n\n const signature = await crypto.subtle.sign(\n { hash: { name: 'SHA-256' }, name: 'ECDSA' },\n entry.privateKey,\n data\n );\n\n return bufferToHex(signature);\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const hasKey = async (keyName: string): Promise<boolean> => {\n const entry = await withDatabase({\n dbName,\n operation: (db) => getIndexedDBItem({ db, keyName }),\n });\n\n return entry !== undefined;\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const removeKey = async (keyName: string): Promise<void> => {\n await withDatabase({\n dbName,\n operation: (db) => deleteIndexedDBItem({ db, keyName }),\n });\n };\n\n return {\n generateKey,\n getPublicKey,\n hasKey,\n importKey,\n removeKey,\n sign,\n };\n};\n","import { BaseError } from './base';\n\ntype InvalidRealtimePublishParams = {\n channel: string;\n};\n\nexport class InvalidRealtimePublishError extends BaseError {\n constructor({ channel }: InvalidRealtimePublishParams) {\n super({\n cause: null,\n code: 'invalid_realtime_publish',\n docsUrl: null,\n metaMessages: [`channel: ${channel}`],\n name: 'InvalidRealtimePublishError',\n shortMessage:\n 'Tried to publish data that does not match the channel schema',\n });\n }\n}\n","import { BaseError } from './base';\n\nexport class RealtimeNotConnectedError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'realtime_not_connected_error',\n docsUrl: null,\n name: 'RealtimeNotConnectedError',\n shortMessage:\n 'Realtime service is not connected. Call connect() before subscribing or publishing.',\n });\n }\n}\n","import type { InboundMessage, RealtimeChannel, messageCallback } from 'ably';\nimport type { BaseRealtime } from 'ably/modular';\nimport EventEmitter from 'eventemitter3';\n\nimport { getCore } from '../../../client/core/getCore';\nimport { InvalidRealtimePublishError } from '../../../errors/InvalidRealtimePublishError';\nimport { RealtimeNotConnectedError } from '../../../errors/RealtimeNotConnectedError';\nimport { createApiClient } from '../../../modules/apiClient';\nimport { isServerSideRendering } from '../../../utils/isServerSideRendering';\nimport type {\n RealtimeChannelSchema,\n RealtimeConnectionState,\n RealtimeEventMap,\n RealtimeService,\n} from '../realtime.types';\n\nconst ABLY_STATE_TO_REALTIME_STATE: Record<string, RealtimeConnectionState> = {\n closed: 'closed',\n closing: 'closing',\n connected: 'connected',\n connecting: 'connecting',\n disconnected: 'disconnected',\n failed: 'failed',\n initialized: 'idle',\n suspended: 'suspended',\n};\n\nconst mapAblyState = (ablyState: string): RealtimeConnectionState =>\n ABLY_STATE_TO_REALTIME_STATE[ablyState] ?? 'idle';\n\n/**\n * Creates a realtime pub/sub service backed by Ably.\n *\n * The service starts idle. Call `connect({ client })` to establish\n * a connection, passing the DynamicClient explicitly.\n *\n * SSR environments receive a no-op implementation.\n * @instrumented\n */\n \nexport const createRealtimeService = (): RealtimeService => {\n if (isServerSideRendering()) {\n return {\n connect: () => Promise.resolve(),\n disconnect: () => {},\n getConnectionState: () => 'idle',\n off: () => {},\n on: () => {},\n publish: () => Promise.resolve(),\n subscribe: () => Promise.resolve(),\n unsubscribe: () => {},\n };\n }\n\n const eventEmitter = new EventEmitter<RealtimeEventMap>();\n const channels = new Map<string, RealtimeChannel>();\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const handlerMap = new WeakMap<(message: { data: any }) => void, messageCallback<InboundMessage>>();\n\n let ablyClient: BaseRealtime | undefined;\n let connectionState: RealtimeConnectionState = 'idle';\n let isConnecting = false;\n\n const setConnectionState = (state: RealtimeConnectionState) => {\n connectionState = state;\n eventEmitter.emit('connectionStateChange', state);\n };\n\n // eslint-disable-next-line custom-rules/require-single-object-param\n const getOrCreateChannel = (channelName: string): RealtimeChannel => {\n const existing = channels.get(channelName);\n\n if (existing) {\n return existing;\n }\n\n if (!ablyClient) {\n throw new RealtimeNotConnectedError();\n }\n\n const channel = ablyClient.channels.get(channelName);\n channels.set(channelName, channel);\n\n return channel;\n };\n\n const connect: RealtimeService['connect'] = async ({ client, headers }) => {\n if (isConnecting) {\n return;\n }\n\n isConnecting = true;\n\n try {\n const core = getCore(client);\n\n if (ablyClient) {\n ablyClient.close();\n channels.clear();\n }\n\n // Dynamic import to keep the module tree-shakeable\n // and avoid loading Ably in SSR environments\n const {\n BaseRealtime: AblyBaseRealtime,\n FetchRequest,\n WebSocketTransport,\n } = await import('ably/modular');\n\n ablyClient = new AblyBaseRealtime({\n // authCallback must return void (not Promise<void>), so we use\n // .then().catch() instead of async/await to avoid returning a Promise\n // to Ably's callback-style auth handler.\n authCallback: (_tokenParams, callback) => {\n const apiClient = createApiClient({ headers }, client);\n\n apiClient\n .getRealtimeAuthToken({ environmentId: core.environmentId })\n .then((response) => {\n callback(null, response.token);\n })\n .catch((err: unknown) => {\n const message = err instanceof Error ? err.message : String(err);\n callback(message, null);\n });\n },\n autoConnect: false,\n plugins: { FetchRequest, WebSocketTransport },\n });\n\n ablyClient.connection.on((stateChange) => {\n setConnectionState(mapAblyState(stateChange.current));\n });\n\n ablyClient.connect();\n } finally {\n isConnecting = false;\n }\n };\n\n const disconnect: RealtimeService['disconnect'] = () => {\n if (!ablyClient) {\n return;\n }\n\n for (const channel of channels.values()) {\n channel.detach().catch(() => {});\n }\n\n channels.clear();\n ablyClient.close();\n ablyClient = undefined;\n };\n\n const subscribe: RealtimeService['subscribe'] = async <T>({\n channelSchema,\n callback,\n }: {\n callback: (message: { data: T }) => void;\n channelSchema: RealtimeChannelSchema<T>;\n }) => {\n const channel = getOrCreateChannel(channelSchema.channel);\n\n const handler: messageCallback<InboundMessage> = (message) => {\n const parsed = channelSchema.schema.safeParse(message.data);\n\n if (!parsed.success) {\n return;\n }\n\n callback({ data: parsed.data });\n };\n\n handlerMap.set(callback, handler);\n\n await channel.subscribe(handler);\n };\n\n const unsubscribe: RealtimeService['unsubscribe'] = <T>({\n channelSchema,\n callback,\n }: {\n callback: (message: { data: T }) => void;\n channelSchema: RealtimeChannelSchema<T>;\n }) => {\n const channel = channels.get(channelSchema.channel);\n\n if (!channel) {\n return;\n }\n\n const handler = handlerMap.get(callback);\n\n if (handler) {\n channel.unsubscribe(handler);\n handlerMap.delete(callback);\n }\n };\n\n const publish: RealtimeService['publish'] = async <T>({\n channelSchema,\n data,\n }: {\n channelSchema: RealtimeChannelSchema<T>;\n data: T;\n }) => {\n const parsed = channelSchema.schema.safeParse(data);\n\n if (!parsed.success) {\n throw new InvalidRealtimePublishError({ channel: channelSchema.channel });\n }\n\n const channel = getOrCreateChannel(channelSchema.channel);\n await channel.publish('message', parsed.data);\n };\n\n return {\n connect,\n disconnect,\n getConnectionState: () => connectionState,\n off: (event, callback) => {\n eventEmitter.off(event, callback);\n },\n on: (event, callback) => {\n eventEmitter.on(event, callback);\n },\n publish,\n subscribe,\n unsubscribe,\n };\n};\n","type GetKeychainIndexedDBNameParams = {\n environmentId: string;\n};\n\n/**\n * Builds the IndexedDB database name used by the keychain service for a given\n * environment. Centralizing this avoids drift between the SDK and any\n * extension code that needs to read or migrate the same database.\n *\n * @param params.environmentId - The Dynamic environment id.\n * @returns The IndexedDB database name for the keychain.\n * @not-instrumented\n */\nexport const getKeychainIndexedDBName = ({\n environmentId,\n}: GetKeychainIndexedDBNameParams): string =>\n `dynamic_${environmentId}_keychain`;\n","import { BaseError } from './base';\n\nexport class NoNetworkProvidersError extends BaseError {\n constructor() {\n super({\n cause: null,\n code: 'no_network_providers',\n docsUrl: null,\n name: 'NoNetworkProvidersError',\n shortMessage: 'No networks were registered in the client',\n });\n }\n}\n","import { BaseError, type BaseErrorParameters } from './base';\n\nexport class WalletAlreadyLinkedToAnotherUserError extends BaseError {\n constructor({ cause }: Pick<BaseErrorParameters, 'cause'>) {\n super({\n cause,\n code: 'wallet_already_linked_to_another_user_error',\n docsUrl: null,\n name: 'WalletAlreadyLinkedToAnotherUserError',\n shortMessage: 'This wallet is already linked to another user',\n });\n }\n}\n","import { getDefaultClient } from '../../../client/defaultClient';\nimport { assertDefined } from '../../../utils/assertDefined';\n\n/** @not-instrumented */\nexport const isCaptchaRequired = (client = getDefaultClient()) => {\n const projectSettings = client.projectSettings;\n\n assertDefined(projectSettings, 'Project settings are not available');\n\n return projectSettings.security.hCaptcha?.enabled ?? false;\n};\n","import { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { assertDefined } from '../../../utils/assertDefined';\nimport { isCaptchaRequired } from '../isCaptchaRequired';\n\n/**\n * Retrieves the current captcha token from the client state and sets it to null.\n * @instrumented\n */\nexport const consumeCaptchaToken = (\n client: DynamicClient\n): string | undefined => {\n const core = getCore(client);\n\n const captchaToken = core.state.get().captchaToken;\n\n if (isCaptchaRequired(client)) {\n assertDefined(captchaToken, 'Captcha token is required');\n }\n\n core.state.set({\n captchaToken: null,\n });\n\n return captchaToken ?? undefined;\n};\n","import { getCore } from '../../../client/core/getCore';\nimport { getDefaultClient } from '../../../client/defaultClient';\n\ntype SetCaptchaTokenProps = {\n captchaToken: string;\n};\n\n/**\n * Sets the given captcha token in the client state.\n *\n * @param params.captchaToken - The captcha token to set.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @instrumented\n */\nexport const setCaptchaToken = (\n { captchaToken }: SetCaptchaTokenProps,\n client = getDefaultClient()\n) => {\n const core = getCore(client);\n\n core.state.set({\n captchaToken,\n });\n};\n","import type * as z from 'zod/mini';\n\nimport type { RealtimeChannelSchema } from '../realtime.types';\n\n/**\n * Defines a typed schema for a realtime channel — analogous to `createStorageKeySchema`\n * for storage. Pairs a channel name with a Zod schema that validates the shape of\n * messages sent and received on that channel. Pass the result to the realtime service's\n * `subscribe` / `unsubscribe` / `publish` methods to get end-to-end type safety.\n * @instrumented\n */\nexport const createRealtimeChannelSchema = <T>(params: {\n channel: string;\n schema: z.ZodMiniType<T>;\n}): RealtimeChannelSchema<T> => params;\n","import { getCore } from '../../../client/core/getCore';\nimport { getDefaultClient } from '../../../client/defaultClient';\n\ntype HasExtensionParams = {\n extensionKey: string;\n};\n\n/**\n * Checks if a specific extension has been applied to the Dynamic client.\n *\n * Extensions add optional features to the Dynamic SDK,\n * such as EVM, Solana, or other chain support.\n *\n * @param params.extensionKey - The unique key identifying the extension to check for.\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns True if the extension is applied, false otherwise.\n * @not-instrumented\n */\nexport const hasExtension = (\n { extensionKey }: HasExtensionParams,\n client = getDefaultClient()\n) => {\n const core = getCore(client);\n\n return core.extensions.has(extensionKey);\n};\n","import {\n AuthModeEnum,\n type ChainEnum,\n type ConnectRequest,\n} from '@dynamic-labs/sdk-api-core';\n\nimport { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { createApiClient } from '../../apiClient';\nimport { getWalletProviderFromWalletAccount } from '../../wallets/utils/getWalletProviderFromWalletAccount';\nimport { normalizeWalletNameWithChain } from '../../wallets/utils/normalizeWalletNameWithChain';\nimport type { WalletAccount } from '../../wallets/walletAccount';\n\ntype CreateVisitParams = {\n authMode?: AuthModeEnum;\n walletAccount: WalletAccount;\n};\n\n/* \n In older SDK versions we used to have the concept of \"connect-only\" vs \"connect-and-sign\". \n The only difference in backend is it stores some extra data for connect-only, \n so we can just default to using it.\n*/\n/** @instrumented */\nexport const createVisit = async (\n { walletAccount, authMode = AuthModeEnum.Only }: CreateVisitParams,\n client: DynamicClient\n) => {\n const core = getCore(client);\n const apiClient = createApiClient({}, client);\n\n const walletProvider = getWalletProviderFromWalletAccount(\n { walletAccount },\n client\n );\n\n try {\n const walletName = normalizeWalletNameWithChain({\n chain: walletProvider.chain,\n displayName: walletProvider.metadata.displayName,\n });\n\n const connectRequest: ConnectRequest = {\n address: walletAccount.address,\n authMode,\n // eslint-disable-next-line custom-rules/ban-chain-enum\n chain: walletProvider.chain as ChainEnum,\n provider: walletProvider.walletProviderType,\n walletName,\n };\n\n await apiClient.createVisit({\n connectRequest,\n environmentId: core.environmentId,\n });\n } catch (error) {\n core.logger.error('Error creating visit', { error });\n }\n};\n","import { getCore } from '../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../client/types';\nimport type { UnverifiedWalletAccount } from '../unverifiedWalletAccounts.types';\n\ntype SetUnverifiedWalletAccountsParams = {\n unverifiedWalletAccountsToUpdate: UnverifiedWalletAccount[];\n};\n\n/**\n * Updates the unverified wallet account in the client state.\n * This will add new wallet accounts and override those with matching ids,\n * but will leave other preexisting wallet accounts unchanged.\n * @instrumented\n */\nexport const setUnverifiedWalletAccounts = (\n { unverifiedWalletAccountsToUpdate }: SetUnverifiedWalletAccountsParams,\n client: DynamicClient\n): void => {\n if (unverifiedWalletAccountsToUpdate.length === 0) {\n return;\n }\n\n const core = getCore(client);\n\n const unverifiedWalletAccountsToUpdateIds =\n unverifiedWalletAccountsToUpdate.map(({ id }) => id);\n\n const filteredUnverifiedWalletAccounts: UnverifiedWalletAccount[] = core.state\n .get()\n .unverifiedWalletAccounts.filter(\n (unverifiedWalletAccount) =>\n !unverifiedWalletAccountsToUpdateIds.includes(\n unverifiedWalletAccount.id\n )\n );\n\n core.state.set({\n unverifiedWalletAccounts: [\n ...filteredUnverifiedWalletAccounts,\n ...unverifiedWalletAccountsToUpdate,\n ],\n });\n};\n","type FormatSignInMessageParams = {\n address: string;\n blockchainName: string;\n chainId?: string;\n domain: string;\n issuedAt?: string;\n nonce: string;\n requestId?: string;\n resources?: string[];\n statement?: string;\n uri: string;\n};\n\n/**\n * Formats a sign in message to prove ownership of an address.\n * @not-instrumented\n */\nexport const formatSignInMessage = async ({\n domain,\n blockchainName,\n address,\n uri,\n chainId,\n nonce,\n issuedAt,\n requestId,\n statement,\n resources,\n}: FormatSignInMessageParams) => {\n // This format follows the sign-in with ethereum (SIWE) standard,\n // but we are using it also for non-ethereum wallets for now (eg. Solana)\n // for more context on format and fields, please see:\n // https://docs.login.xyz/general-information/siwe-overview/eip-4361\n const header = `${domain} wants you to sign in with your ${blockchainName} account:`;\n const prefix = [header, address].join('\\n');\n\n // If there is a statement, we want to add a gap between the prefix and the statement\n // two times '\\n', first to move statement to next line and second to add a gap between prefix and statement\n const prefixWithStatementGap = statement ? '\\n\\n' : '\\n';\n const prefixWithStatement = `${[prefix, statement].join(\n prefixWithStatementGap\n )}\\n`;\n\n const suffixFields: string[] = [];\n suffixFields.push(`URI: ${uri}`);\n suffixFields.push('Version: 1');\n if (chainId) {\n suffixFields.push(`Chain ID: ${chainId}`);\n }\n\n suffixFields.push(`Nonce: ${nonce}`);\n\n if (issuedAt) {\n suffixFields.push(`Issued At: ${issuedAt}`);\n }\n\n if (requestId) {\n suffixFields.push(`Request ID: ${requestId}`);\n }\n\n if (resources?.length) {\n suffixFields.push(\n `Resources:${resources.map((resource) => '\\n- ' + resource).join()}`\n );\n }\n\n const suffix = suffixFields.join('\\n');\n\n return [prefixWithStatement, suffix].join('\\n');\n};\n","import { getCore } from '../../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../../client/types';\n\n/** @instrumented */\nexport const createSignInMessageStatement = (client: DynamicClient) => {\n const core = getCore(client);\n\n const appName =\n core.metadata?.name ?? client.projectSettings?.general.displayName;\n\n return `Welcome to ${appName}. Signing is the only way we can truly know that you are the owner of the wallet you are connecting. Signing is a safe, gas-less transaction that does not in any way give ${appName} permission to perform any transactions with your wallet.`;\n};\n","import { getCore } from '../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../client/types';\nimport { checkAndRaiseWalletAccountsChangedEvent } from '../../../auth/updateAuthFromVerifyResponse/checkAndRaiseWalletAccountsChangedEvent';\nimport type { UnverifiedWalletAccount } from '../unverifiedWalletAccounts.types';\n\ntype RemoveUnverifiedWalletAccountParams = {\n unverifiedWalletAccount: UnverifiedWalletAccount;\n};\n\n/**\n * Removes an unverified wallet account from the client's state.\n * @instrumented\n */\nexport const removeUnverifiedWalletAccount = (\n { unverifiedWalletAccount }: RemoveUnverifiedWalletAccountParams,\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n const previousState = core.state.get();\n\n const { unverifiedWalletAccounts } = core.state.get();\n\n const filteredUnverifiedWalletAccounts = unverifiedWalletAccounts.filter(\n (account) => account.id !== unverifiedWalletAccount.id\n );\n\n core.state.set({\n unverifiedWalletAccounts: filteredUnverifiedWalletAccounts,\n });\n\n /**\n * We check before raising because the wallet account we are removing might still\n * be present in wallet accounts due to having been moved to verified credentials.\n */\n checkAndRaiseWalletAccountsChangedEvent({ previousState }, client);\n};\n","/**\n * Check if the given value is an Error object\n * @not-instrumented\n */\nexport const isError = (error: unknown): error is Error =>\n error instanceof Error;\n","import { isError } from '../isError';\n\n/**\n * Check if the given value is an Error object with a specific code\n * @not-instrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isErrorWithCode = <T extends string>(\n error: unknown,\n code: T\n): error is Error & { code: T } => {\n if (!isError(error)) return false;\n\n return 'code' in error && error.code === code;\n};\n","import type {\n ChainEnum,\n TokenScope,\n VerifyResponse,\n WalletAddressType,\n WalletProviderEnum,\n} from '@dynamic-labs/sdk-api-core';\n\nimport { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { isErrorWithCode } from '../../../utils/isErrorWithCode';\nimport { createApiClient } from '../../apiClient';\nimport { consumeCaptchaToken } from '../../captcha/consumeCaptchaToken';\nimport type { Chain } from '../../chain';\nimport { normalizeWalletNameWithChain } from '../utils/normalizeWalletNameWithChain';\nimport type { WalletAddressWithType } from '../walletAccount/walletAccount.types';\nimport { WalletAlreadyLinkedToAnotherUserError } from './../../../errors/WalletAlreadyLinkedToAnotherUserError';\n\ntype VerifyMessageSignatureOwnershipParams = {\n addressesWithTypes?: WalletAddressWithType[];\n chain: Chain;\n isTransfer?: boolean;\n messageToSign: string;\n networkId?: string;\n requestedScopes?: TokenScope[];\n signature: string;\n walletAddress: string;\n walletDisplayName: string;\n walletProviderType: WalletProviderEnum;\n};\n\n/**\n * Verifies a signed message by calling either the verifyLink, verifyTransfer or verify API function,\n * depending on whether the user is signing in, linking or transferring a wallet.\n *\n * Does NOT call updateAuthFromVerifyResponse, it should be called from the return of this function.\n * @instrumented\n */\nexport const verifyMessageSignatureOwnership = async (\n {\n messageToSign,\n walletAddress,\n addressesWithTypes,\n signature,\n chain,\n isTransfer = false,\n walletDisplayName,\n walletProviderType,\n networkId,\n requestedScopes,\n }: VerifyMessageSignatureOwnershipParams,\n client: DynamicClient\n): Promise<VerifyResponse> => {\n const core = getCore(client);\n const apiClient = createApiClient({}, client);\n\n const walletName = normalizeWalletNameWithChain({\n chain,\n displayName: walletDisplayName,\n });\n\n let verifyApiFunction;\n\n if (!client.user) {\n // If the user is not authenticated, call the walletsSignin API function to sign in\n verifyApiFunction = apiClient.walletsSignin.bind(apiClient);\n } else if (isTransfer) {\n // If the user is authenticated and is transferring a wallet, call the verifyTransfer API function\n verifyApiFunction = apiClient.verifyTransfer.bind(apiClient);\n } else if (client.user && requestedScopes) {\n // Scopes = step-up auth: user requests permission for a sensitive op (e.g. wallet export).\n // We grant it only if they prove they own an existing credential (walletsVerify).\n // Must use walletsVerify: user is already logged in (not signin) and credential exists (not transfer/link).\n // If the user is authenticated and requested scopes are provided, call the walletsVerify API function\n verifyApiFunction = apiClient.walletsVerify.bind(apiClient);\n } else {\n // If the user is authenticated and is signing in, call the verifyLink API function\n verifyApiFunction = apiClient.verifyLink.bind(apiClient);\n }\n\n try {\n return await verifyApiFunction({\n environmentId: core.environmentId,\n verifyRequest: {\n // mapping to handle typecasting for address type\n additionalWalletAddresses: addressesWithTypes?.map((address) => ({\n address: address.address,\n publicKey: address.publicKey,\n type: address.type as WalletAddressType,\n })),\n captchaToken: consumeCaptchaToken(client),\n // eslint-disable-next-line custom-rules/ban-chain-enum\n chain: chain as ChainEnum,\n messageToSign,\n network: networkId,\n publicWalletAddress: walletAddress,\n requestedScopes,\n signedMessage: signature,\n walletName,\n walletProvider: walletProviderType,\n },\n });\n } catch (error) {\n core.logger.error('Failed to verify message signature ownership', error);\n\n if (\n isErrorWithCode(error, 'reassign_wallet_confirm') ||\n isErrorWithCode(error, 'merge_accounts_confirmation')\n ) {\n throw new WalletAlreadyLinkedToAnotherUserError({\n cause: error,\n });\n }\n\n throw error;\n }\n};\n","import { getCore } from '../../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../../client/types';\n\ntype updateWalletProviderKeysForVerifiedCredentialsParams = {\n keysToUpdate: Record<string, string>;\n};\n\n/** @instrumented */\nexport const updateWalletProviderKeysForVerifiedCredentials = (\n { keysToUpdate }: updateWalletProviderKeysForVerifiedCredentialsParams,\n client: DynamicClient\n) => {\n const core = getCore(client);\n\n core.state.set({\n walletProviderKeyMap: {\n ...core.state.get().walletProviderKeyMap,\n ...keysToUpdate,\n },\n });\n};\n","import type { Chain } from '../../../chain';\nimport { CHAINS_INFO_MAP } from '../../constants';\n\n/**\n * Maps the chain name from the API to the SDK chain name\n * @not-instrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const getSdkChainFromApiChainName = (\n chainName: string\n): Chain | null => {\n const chains = Object.keys(CHAINS_INFO_MAP) as Chain[];\n\n const chain = chains.find(\n (chain) => CHAINS_INFO_MAP[chain].apiChainName === chainName\n );\n\n return chain || null;\n};\n","import { getCore } from '../../../../client/core/getCore';\nimport { getDefaultClient } from '../../../../client/defaultClient';\nimport { assertDefined } from '../../../../utils/assertDefined';\nimport { getSdkChainFromApiChainName } from '../getSdkChainFromApiChainName';\nimport type { NetworkData } from '../networkProvider/networkProvider.types';\n\n/**\n * Retrieves all available network configurations from project settings.\n *\n * This function returns detailed configuration data for all networks enabled\n * in your Dynamic project, including RPC URLs, native currencies, and metadata.\n *\n * If a `transformers.networkData` callback was provided in the client configuration,\n * it will be applied to each network before returning the data. This allows you to\n * customize network properties (such as RPC URLs) in a centralized way.\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns An array of network configuration data for all enabled networks.\n * @instrumented\n */\nexport const getNetworksData = (client = getDefaultClient()): NetworkData[] => {\n const core = getCore(client);\n const { state, transformers } = core;\n\n const networkDataTransformer =\n transformers?.networkData ?? ((networkData) => networkData);\n\n const { projectSettings } = state.get();\n\n assertDefined(projectSettings, 'projectSettings not found');\n\n const networks = projectSettings.networks;\n\n if (!networks) {\n return [];\n }\n\n const networksData = networks\n .map((network) => {\n if (!network.chainName) return [];\n\n const chain = getSdkChainFromApiChainName(network.chainName);\n\n if (!network?.networks?.length || !chain) return [];\n\n return network.networks.map((networkConfiguration) => {\n const networkData: NetworkData = {\n blockExplorerUrls: networkConfiguration.blockExplorerUrls,\n chain,\n cluster: networkConfiguration.cluster,\n displayName:\n networkConfiguration.vanityName || networkConfiguration.name,\n genesisHash: networkConfiguration.genesisHash,\n iconUrl: networkConfiguration.iconUrls[0],\n name: networkConfiguration.name,\n nativeCurrency: {\n decimals: networkConfiguration.nativeCurrency.decimals,\n iconUrl: networkConfiguration.nativeCurrency.iconUrl,\n name: networkConfiguration.nativeCurrency.name,\n symbol: networkConfiguration.nativeCurrency.symbol,\n },\n networkId: networkConfiguration.networkId,\n rpcUrls: {\n http: [\n ...(networkConfiguration.privateCustomerRpcUrls ?? []),\n ...(networkConfiguration.rpcUrls ?? []),\n ],\n },\n testnet: networkConfiguration.isTestnet ?? false,\n };\n\n return networkDataTransformer(networkData);\n });\n })\n .flat();\n\n return networksData;\n};\n","import type { Chain } from '../../../../chain';\nimport type {\n NetworkProviderBuilder,\n NetworkProviderBuilderRegistry,\n} from '../networkProviderBuilderRegistry.types';\n\n/** @not-instrumented */\nexport const createNetworkProviderBuilderRegistry =\n (): NetworkProviderBuilderRegistry => {\n const registry = new Map<Chain, NetworkProviderBuilder>();\n\n return {\n get: () => registry,\n register: (networkProviderBuilder) => {\n registry.set(networkProviderBuilder.chain, networkProviderBuilder);\n },\n };\n };\n","import { createRuntimeServiceAccessKey } from '../../../../../services/runtimeServices';\nimport { createNetworkProviderBuilderRegistry } from '../createNetworkProviderBuilderRegistry';\n\nexport const getNetworkProviderBuilderRegistry = createRuntimeServiceAccessKey(\n 'networkProviderBuilderRegistry',\n createNetworkProviderBuilderRegistry\n);\n","import type { DynamicClient } from '../../../../client/types';\nimport { getNetworksData } from '../getNetworksData';\nimport type { NetworkProvider } from '../networkProvider';\nimport { getNetworkProviderBuilderRegistry } from '../networkProviderBuilderRegistry';\n\n/**\n * Retrieves all registered network providers for enabled chains.\n * @instrumented\n */\nexport const getNetworkProviders = (\n client: DynamicClient\n): NetworkProvider[] => {\n const networkProviderBuilderRegistry =\n getNetworkProviderBuilderRegistry(client);\n\n const registeredNetworkProviderBuilders = Array.from(\n networkProviderBuilderRegistry.get().values()\n );\n\n const networksData = getNetworksData(client);\n\n const networkProviders = registeredNetworkProviderBuilders.map(\n ({ builder, chain }) => {\n const networksDataForChain = networksData.filter(\n (networkData) => networkData.chain === chain\n );\n\n return networksDataForChain.map(builder);\n }\n );\n\n return networkProviders.flat();\n};\n","import type { DynamicClient } from '../../../../client/types';\nimport { NoNetworkProvidersError } from '../../../../errors/NoNetworkProvidersError';\nimport { assertDefined } from '../../../../utils/assertDefined';\nimport type { Chain } from '../../../chain';\nimport { getNetworkProviders } from '../getNetworkProviders';\nimport type { NetworkProvider } from '../networkProvider/networkProvider.types';\n\ntype GetNetworkProviderFromNetworkIdProps = {\n chain: Chain;\n networkId: string;\n};\n\n/** @instrumented */\nexport const getNetworkProviderFromNetworkId = (\n { networkId, chain }: GetNetworkProviderFromNetworkIdProps,\n client: DynamicClient\n): NetworkProvider => {\n const networkProviders = getNetworkProviders(client);\n\n if (networkProviders.length === 0) {\n throw new NoNetworkProvidersError();\n }\n\n const networkProvider = networkProviders.find(\n (networkProvider) =>\n networkProvider.networkId === networkId && networkProvider.chain === chain\n );\n\n assertDefined(\n networkProvider,\n `No network provider found for chain ${chain} with network id ${networkId}`\n );\n\n return networkProvider;\n};\n"],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { C as isCookieEnabled, D as instrumentFunction, F as getDefaultClient, M as CLIENT_SDK_NAME, R as BaseError, c as CHAINS_INFO_MAP, u as __createApiClient_wrapped, w as assertDefined, z as getCore } from "./InvalidParamError-
|
|
2
|
-
import { A as emitEvent, S as normalizeWalletNameWithChain, b as __getWalletAccounts_wrapped, f as checkAndRaiseWalletAccountsChangedEvent, h as __getWalletProviderFromWalletAccount_wrapped, j as setCookie, m as DYNAMIC_AUTH_COOKIE_NAME, v as __createRuntimeServiceAccessKey_wrapped } from "./getVerifiedCredentialForWalletAccount-
|
|
1
|
+
import { C as isCookieEnabled, D as instrumentFunction, F as getDefaultClient, M as CLIENT_SDK_NAME, R as BaseError, c as CHAINS_INFO_MAP, u as __createApiClient_wrapped, w as assertDefined, z as getCore } from "./InvalidParamError-CaO8zuAt.esm.js";
|
|
2
|
+
import { A as emitEvent, S as normalizeWalletNameWithChain, b as __getWalletAccounts_wrapped, f as checkAndRaiseWalletAccountsChangedEvent, h as __getWalletProviderFromWalletAccount_wrapped, j as setCookie, m as DYNAMIC_AUTH_COOKIE_NAME, v as __createRuntimeServiceAccessKey_wrapped } from "./getVerifiedCredentialForWalletAccount-BHVopHZ0.esm.js";
|
|
3
3
|
import { AuthModeEnum } from "@dynamic-labs/sdk-api-core";
|
|
4
4
|
import * as z from "zod/mini";
|
|
5
5
|
import { Buffer as Buffer$1 } from "buffer";
|
|
6
|
-
import EventEmitter, { EventEmitter
|
|
6
|
+
import EventEmitter$1, { EventEmitter } from "eventemitter3";
|
|
7
7
|
|
|
8
8
|
//#region src/utils/isEqualShallow/isEqualShallow.ts
|
|
9
9
|
/**
|
|
@@ -331,7 +331,8 @@ const __fetchProjectSettings_wrapped = instrumentFunction({
|
|
|
331
331
|
/** @instrumented */
|
|
332
332
|
const generateSessionKeys = async (client) => {
|
|
333
333
|
const core = getCore(client);
|
|
334
|
-
|
|
334
|
+
await core.keychain.removeKey("session");
|
|
335
|
+
const publicKey = await core.keychain.generateKey("session");
|
|
335
336
|
assertDefined(publicKey, "Public key not found");
|
|
336
337
|
core.state.set({ sessionKeys: publicKey });
|
|
337
338
|
return { publicKey };
|
|
@@ -553,7 +554,7 @@ const createCrossTabBroadcast = ({ channelName }) => {
|
|
|
553
554
|
send: () => {}
|
|
554
555
|
};
|
|
555
556
|
const channel = new BroadcastChannel(channelName);
|
|
556
|
-
const eventEmitter = new EventEmitter();
|
|
557
|
+
const eventEmitter = new EventEmitter$1();
|
|
557
558
|
const handleMessage = (messageEvent) => {
|
|
558
559
|
const parsed = CrossTabBroadcastMessageSchema.safeParse(messageEvent.data);
|
|
559
560
|
if (!parsed.success) return;
|
|
@@ -607,7 +608,7 @@ const defaultConsole = console;
|
|
|
607
608
|
* @not-instrumented
|
|
608
609
|
*/
|
|
609
610
|
const createLogger = (options = {}) => {
|
|
610
|
-
const eventEmitter = new EventEmitter
|
|
611
|
+
const eventEmitter = new EventEmitter();
|
|
611
612
|
const minLevel = options.level ?? "warn";
|
|
612
613
|
const shouldLog = (level) => {
|
|
613
614
|
return LOG_LEVELS[level] >= LOG_LEVELS[minLevel];
|
|
@@ -907,7 +908,7 @@ const createRealtimeService = () => {
|
|
|
907
908
|
subscribe: () => Promise.resolve(),
|
|
908
909
|
unsubscribe: () => {}
|
|
909
910
|
};
|
|
910
|
-
const eventEmitter = new EventEmitter();
|
|
911
|
+
const eventEmitter = new EventEmitter$1();
|
|
911
912
|
const channels = /* @__PURE__ */ new Map();
|
|
912
913
|
const handlerMap = /* @__PURE__ */ new WeakMap();
|
|
913
914
|
let ablyClient;
|
|
@@ -1540,4 +1541,4 @@ const __getNetworkProviderFromNetworkId_wrapped = instrumentFunction({
|
|
|
1540
1541
|
|
|
1541
1542
|
//#endregion
|
|
1542
1543
|
export { REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY as A, __createLocalStorageAdapter_wrapped as B, __createCrossTabBroadcast_wrapped as C, FETCH_PROJECT_SETTINGS_TRACKER_KEY as D, __createDeferredPromise_wrapped as E, __generateSessionKeys_wrapped as F, retryOnFail as H, __fetchProjectSettings_wrapped as I, __createStorageKeySchema_wrapped as L, isServerSideRendering as M, getBuffer as N, GENERATE_SESSION_KEYS_TRACKER_KEY as O, __logoutWithReason_wrapped as P, __createStorage_wrapped as R, __createLogger_wrapped as S, CannotTrackError as T, __subscribeWithSelector_wrapped as U, isSignedIn as V, isEqualShallow as W, WalletAlreadyLinkedToAnotherUserError as _, __updateWalletProviderKeysForVerifiedCredentials_wrapped as a, __createRealtimeService_wrapped as b, __createSignInMessageStatement_wrapped as c, __createVisit_wrapped as d, hasExtension as f, isCaptchaRequired as g, __consumeCaptchaToken_wrapped as h, __getNetworksData_wrapped as i, REFRESH_USER_STATE_FROM_VALID_TOKEN_TRACKER_KEY as j, INITIALIZE_STORAGE_SYNC_TRACKER_KEY as k, formatSignInMessage as l, __setCaptchaToken_wrapped as m, __getNetworkProviders_wrapped as n, __verifyMessageSignatureOwnership_wrapped as o, __createRealtimeChannelSchema_wrapped as p, getNetworkProviderBuilderRegistry as r, __removeUnverifiedWalletAccount_wrapped as s, __getNetworkProviderFromNetworkId_wrapped as t, __setUnverifiedWalletAccounts_wrapped as u, NoNetworkProvidersError as v, CrossTabBroadcastMessageSchema as w, createKeychainService as x, getKeychainIndexedDBName as y, InvalidStorageSet as z };
|
|
1543
|
-
//# sourceMappingURL=getNetworkProviderFromNetworkId-
|
|
1544
|
+
//# sourceMappingURL=getNetworkProviderFromNetworkId-DS1xtXK3.esm.js.map
|