@dynamic-labs-sdk/client 1.33.0 → 1.33.2
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/{apiClient-4r7VAsLC.native.esm.js → apiClient-B0eCQXEJ.native.esm.js} +3 -3
- package/dist/{apiClient-4r7VAsLC.native.esm.js.map → apiClient-B0eCQXEJ.native.esm.js.map} +1 -1
- package/dist/core.cjs +24 -5
- package/dist/core.cjs.map +1 -1
- package/dist/core.esm.js +9 -8
- package/dist/core.esm.js.map +1 -1
- package/dist/core.native.esm.js +9 -8
- package/dist/core.native.esm.js.map +1 -1
- package/dist/exports/core.d.ts +8 -0
- package/dist/exports/core.d.ts.map +1 -1
- package/dist/{getNetworkProviderFromNetworkId-D9oRzWA6.esm.js → getNetworkProviderFromNetworkId-CgxCy8qP.esm.js} +9 -8
- package/dist/getNetworkProviderFromNetworkId-CgxCy8qP.esm.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-DOrcvuFv.cjs → getNetworkProviderFromNetworkId-DaxDzIv4.cjs} +9 -2
- package/dist/getNetworkProviderFromNetworkId-DaxDzIv4.cjs.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-BV229QF3.native.esm.js → getNetworkProviderFromNetworkId-OXG2gPby.native.esm.js} +10 -9
- package/dist/getNetworkProviderFromNetworkId-OXG2gPby.native.esm.js.map +1 -0
- package/dist/{getSignedSessionId-Cd8CCp5d.native.esm.js → getSignedSessionId-B2s2UuwJ.native.esm.js} +3 -3
- package/dist/{getSignedSessionId-Cd8CCp5d.native.esm.js.map → getSignedSessionId-B2s2UuwJ.native.esm.js.map} +1 -1
- package/dist/{getSignedSessionId-DA-MMsJm.esm.js → getSignedSessionId-DdMeCIV-.esm.js} +3 -3
- package/dist/{getSignedSessionId-DA-MMsJm.esm.js.map → getSignedSessionId-DdMeCIV-.esm.js.map} +1 -1
- package/dist/{getSignedSessionId-4qHh_BOh.cjs → getSignedSessionId-KiBgLtda.cjs} +3 -3
- package/dist/{getSignedSessionId-4qHh_BOh.cjs.map → getSignedSessionId-KiBgLtda.cjs.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-Fr3bEKeU.esm.js → getVerifiedCredentialForWalletAccount-DzZ-0SaQ.esm.js} +2 -2
- package/dist/{getVerifiedCredentialForWalletAccount-Fr3bEKeU.esm.js.map → getVerifiedCredentialForWalletAccount-DzZ-0SaQ.esm.js.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-Bw5q7QZn.cjs → getVerifiedCredentialForWalletAccount-y2drOcyb.cjs} +2 -2
- package/dist/{getVerifiedCredentialForWalletAccount-Bw5q7QZn.cjs.map → getVerifiedCredentialForWalletAccount-y2drOcyb.cjs.map} +1 -1
- package/dist/index.cjs +56 -69
- package/dist/index.cjs.map +1 -1
- package/dist/index.esm.js +50 -63
- package/dist/index.esm.js.map +1 -1
- package/dist/index.native.esm.js +50 -63
- package/dist/index.native.esm.js.map +1 -1
- package/dist/{isMfaRequiredForAction-BdU62usM.esm.js → isMfaRequiredForAction-BLegdReE.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-BdU62usM.esm.js.map → isMfaRequiredForAction-BLegdReE.esm.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-Djd-jkSl.cjs → isMfaRequiredForAction-By7uHgpn.cjs} +2 -2
- package/dist/{isMfaRequiredForAction-Djd-jkSl.cjs.map → isMfaRequiredForAction-By7uHgpn.cjs.map} +1 -1
- package/dist/{isMfaRequiredForAction-DZfEkyIU.native.esm.js → isMfaRequiredForAction-CXuuO-wy.native.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-DZfEkyIU.native.esm.js.map → isMfaRequiredForAction-CXuuO-wy.native.esm.js.map} +1 -1
- package/dist/{isUserOnboardingComplete-BEZOYohA.esm.js → isUserOnboardingComplete-Bvh4NLBz.esm.js} +3 -3
- package/dist/{isUserOnboardingComplete-BEZOYohA.esm.js.map → isUserOnboardingComplete-Bvh4NLBz.esm.js.map} +1 -1
- package/dist/{isUserOnboardingComplete-Bwvv6Urs.cjs → isUserOnboardingComplete-DMefkHRY.cjs} +3 -3
- package/dist/{isUserOnboardingComplete-Bwvv6Urs.cjs.map → isUserOnboardingComplete-DMefkHRY.cjs.map} +1 -1
- package/dist/{isUserOnboardingComplete-CEUkAzCi.native.esm.js → isUserOnboardingComplete-hn1rWlA-.native.esm.js} +3 -3
- package/dist/{isUserOnboardingComplete-CEUkAzCi.native.esm.js.map → isUserOnboardingComplete-hn1rWlA-.native.esm.js.map} +1 -1
- package/dist/{logoutWithReason-I6vShLpA.esm.js → logoutWithReason-B-cf-dUs.esm.js} +62 -50
- package/dist/logoutWithReason-B-cf-dUs.esm.js.map +1 -0
- package/dist/{logoutWithReason-DvnEa2Uv.native.esm.js → logoutWithReason-C4AgSbjv.native.esm.js} +61 -49
- package/dist/logoutWithReason-C4AgSbjv.native.esm.js.map +1 -0
- package/dist/{logoutWithReason-B-ZF0VmN.cjs → logoutWithReason-c1DmyRBx.cjs} +73 -55
- package/dist/logoutWithReason-c1DmyRBx.cjs.map +1 -0
- package/dist/{migrateFromFireblocks-6I7lkraQ.native.esm.js → migrateFromFireblocks-B0pkwAaK.native.esm.js} +2 -2
- package/dist/{migrateFromFireblocks-6I7lkraQ.native.esm.js.map → migrateFromFireblocks-B0pkwAaK.native.esm.js.map} +1 -1
- package/dist/{migrateFromFireblocks-Dtk6t8hN.esm.js → migrateFromFireblocks-B76sFd7a.esm.js} +2 -2
- package/dist/{migrateFromFireblocks-Dtk6t8hN.esm.js.map → migrateFromFireblocks-B76sFd7a.esm.js.map} +1 -1
- package/dist/{migrateFromFireblocks-C23-24bK.cjs → migrateFromFireblocks-RCqy2qOG.cjs} +2 -2
- package/dist/{migrateFromFireblocks-C23-24bK.cjs.map → migrateFromFireblocks-RCqy2qOG.cjs.map} +1 -1
- package/dist/modules/initializeClient/consts.d.ts +1 -0
- package/dist/modules/initializeClient/consts.d.ts.map +1 -1
- package/dist/modules/initializeClient/initializeClient.d.ts.map +1 -1
- package/dist/modules/projectSettings/fetchProjectSettings/fetchProjectSettings.d.ts +4 -5
- package/dist/modules/projectSettings/fetchProjectSettings/fetchProjectSettings.d.ts.map +1 -1
- package/dist/modules/waas/businessAccounts/addBusinessAccountMember/addBusinessAccountMember.d.ts +8 -3
- package/dist/modules/waas/businessAccounts/addBusinessAccountMember/addBusinessAccountMember.d.ts.map +1 -1
- package/dist/modules/waas/businessAccounts/parseGovernedResponse.d.ts +34 -0
- package/dist/modules/waas/businessAccounts/parseGovernedResponse.d.ts.map +1 -0
- package/dist/modules/waas/businessAccounts/removeBusinessAccountMember/removeBusinessAccountMember.d.ts +4 -3
- package/dist/modules/waas/businessAccounts/removeBusinessAccountMember/removeBusinessAccountMember.d.ts.map +1 -1
- package/dist/modules/waas/businessAccounts/removeBusinessAccountSigner/removeBusinessAccountSigner.d.ts +4 -3
- package/dist/modules/waas/businessAccounts/removeBusinessAccountSigner/removeBusinessAccountSigner.d.ts.map +1 -1
- package/dist/modules/waas/businessAccounts/removeBusinessAccountWallet/removeBusinessAccountWallet.d.ts +4 -3
- package/dist/modules/waas/businessAccounts/removeBusinessAccountWallet/removeBusinessAccountWallet.d.ts.map +1 -1
- package/dist/modules/waas/businessAccounts/transferBusinessAccountOwnership/transferBusinessAccountOwnership.d.ts +4 -3
- package/dist/modules/waas/businessAccounts/transferBusinessAccountOwnership/transferBusinessAccountOwnership.d.ts.map +1 -1
- package/dist/modules/waas/businessAccounts/updateBusinessAccountMemberRole/updateBusinessAccountMemberRole.d.ts +4 -3
- package/dist/modules/waas/businessAccounts/updateBusinessAccountMemberRole/updateBusinessAccountMemberRole.d.ts.map +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/{waas-C0IDCf3u.cjs → waas-7vSYuH3H.cjs} +104 -30
- package/dist/waas-7vSYuH3H.cjs.map +1 -0
- package/dist/{waas-DJeW02-Y.native.esm.js → waas-DIlnOHm6.native.esm.js} +104 -30
- package/dist/waas-DIlnOHm6.native.esm.js.map +1 -0
- package/dist/{waas-D_alZrtb.esm.js → waas-H5xyBfTI.esm.js} +104 -30
- package/dist/waas-H5xyBfTI.esm.js.map +1 -0
- package/dist/waas.cjs +4 -4
- package/dist/waas.esm.js +4 -4
- package/dist/waas.native.esm.js +4 -4
- package/dist/waasCore.cjs +5 -5
- package/dist/waasCore.esm.js +5 -5
- package/dist/waasCore.native.esm.js +5 -5
- package/package.json +3 -3
- package/dist/getNetworkProviderFromNetworkId-BV229QF3.native.esm.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-D9oRzWA6.esm.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-DOrcvuFv.cjs.map +0 -1
- package/dist/logoutWithReason-B-ZF0VmN.cjs.map +0 -1
- package/dist/logoutWithReason-DvnEa2Uv.native.esm.js.map +0 -1
- package/dist/logoutWithReason-I6vShLpA.esm.js.map +0 -1
- package/dist/modules/projectSettings/fetchProjectSettings/projectSettingsExpirationScheme.d.ts +0 -5
- package/dist/modules/projectSettings/fetchProjectSettings/projectSettingsExpirationScheme.d.ts.map +0 -1
- package/dist/waas-C0IDCf3u.cjs.map +0 -1
- package/dist/waas-DJeW02-Y.native.esm.js.map +0 -1
- package/dist/waas-D_alZrtb.esm.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getNetworkProviderFromNetworkId-CgxCy8qP.esm.js","names":["item: StorageFormat<typeof value>","BufferPolyfill","resolve: (value: T) => void","reject: (reason?: unknown) => void","EventEmitter","LOG_LEVELS: Record<LogLevel, number>","eventEmitter: LoggerEventEmitter","minLevel: LogLevel","parsed: URL","request: IDBOpenDBRequest","createKeychainService: CreateKeychainService","entry: StoredKey","parsed: URL","ABLY_STATE_TO_REALTIME_STATE: Record<string, RealtimeConnectionState>","EventEmitter","ablyClient: BaseRealtime | undefined","connectionState: RealtimeConnectionState","connectedClient: DynamicClient | undefined","connect: RealtimeService['connect']","disconnect: RealtimeService['disconnect']","subscribe: RealtimeService['subscribe']","handler: messageCallback<InboundMessage>","unsubscribe: RealtimeService['unsubscribe']","publish: RealtimeService['publish']","connectRequest: ConnectRequest","filteredUnverifiedWalletAccounts: UnverifiedWalletAccount[]","newWalletAccounts: WalletAccount[]","unverifiedWalletAccountsToUpdate: WalletAccount[]","verifiedCredentialIdToWalletProviderKeyMap: Record<string, string>","reconciledWalletAccounts: WalletAccount[]","suffixFields: string[]","networkDataSchema: z.ZodMiniType<NetworkDataRuntime>","transformedNetworksData: NetworkData[]","networkProvider"],"sources":["../src/errors/UnavailableInServerSideError.ts","../src/utils/isServerSideRendering/isServerSideRendering.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/utils/isEqualShallow/isEqualShallow.ts","../src/utils/observable/subscribeWithSelector/subscribeWithSelector.ts","../src/utils/getBuffer/getBuffer.ts","../src/modules/initializeClient/consts.ts","../src/services/appForeground/createAppForegroundSubscriber/createAppForegroundSubscriber.ts","../src/utils/deferredPromise/createDeferredPromise.ts","../src/errors/CannotTrackError.ts","../src/services/crossTabBroadcast/crossTabBroadcast.schema.ts","../src/services/crossTabBroadcast/createCrossTabBroadcast/createCrossTabBroadcast.ts","../src/services/eventEmitter/createEventEmitter.ts","../src/services/logger/createLogger/createLogger.ts","../src/errors/UnsafeNavigationUrlError.ts","../src/utils/assertSafeNavigationUrl/assertSafeNavigationUrl.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/UnsafeDeeplinkUrlError.ts","../src/utils/assertSafeDeeplinkUrl/assertSafeDeeplinkUrl.ts","../src/errors/InvalidRealtimePublishError.ts","../src/errors/RealtimeNotConnectedError.ts","../src/services/realtime/createRealtimeService/createRealtimeService.ts","../src/utils/getKeychainIndexedDBName/getKeychainIndexedDBName.ts","../src/errors/MergeAccountsConfirmationError.ts","../src/errors/NoNetworkProvidersError.ts","../src/errors/WalletAlreadyLinkedToAnotherUserError.ts","../src/errors/WalletScreeningBlockedError.ts","../src/modules/captcha/isCaptchaRequired/isCaptchaRequired.ts","../src/modules/captcha/consumeCaptchaToken/consumeCaptchaToken.ts","../src/errors/MethodNotImplementedError.ts","../src/modules/captcha/setCaptchaToken/setCaptchaToken.ts","../src/modules/extension/hasExtension/hasExtension.ts","../src/modules/wallets/networks/networkProviderBuilderRegistry/createNetworkProviderBuilderRegistry/createNetworkProviderBuilderRegistry.ts","../src/modules/wallets/networks/networkProviderBuilderRegistry/getNetworkProviderBuilderRegistry/getNetworkProviderBuilderRegistry.ts","../src/modules/wallets/uriConnectionStarterRegistry/createUriConnectionStarterRegistry/createUriConnectionStarterRegistry.ts","../src/modules/wallets/uriConnectionStarterRegistry/getUriConnectionStarterRegistry/getUriConnectionStarterRegistry.ts","../src/modules/auth/createVisit/createVisit.ts","../src/modules/wallets/unverifiedWalletAccounts/setUnverifiedWalletAccounts/setUnverifiedWalletAccounts.ts","../src/modules/wallets/walletProvider/walletProviderKeyMap/updateWalletProviderKeysForVerifiedCredentials/updateWalletProviderKeysForVerifiedCredentials.ts","../src/modules/wallets/reconcileWalletAccountsAgainstClient/reconcileWalletAccountsAgainstClient.ts","../src/utils/getAppMetadata/getAppMetadata.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/utils/isScreeningBlockedError/isScreeningBlockedError.ts","../src/modules/wallets/verifyMessageSignatureOwnership/verifyMessageSignatureOwnership.ts","../src/modules/wallets/networks/getSdkChainFromApiChainName/getSdkChainFromApiChainName.ts","../src/modules/wallets/networks/networkDataSchema/networkDataSchema.ts","../src/modules/wallets/networks/getNetworksData/getNetworksData.ts","../src/modules/wallets/networks/getNetworkProviders/getNetworkProviders.ts","../src/modules/wallets/networks/getNetworkProviderFromNetworkId/getNetworkProviderFromNetworkId.ts"],"sourcesContent":["import { BaseError } from './base';\n\nexport class UnavailableInServerSideError extends BaseError {\n // eslint-disable-next-line custom-rules/require-single-object-param\n constructor(unavailableFeature: string) {\n super({\n cause: null,\n code: 'unavailable_in_server_side_error',\n docsUrl: null,\n name: 'UnavailableInServerSideError',\n shortMessage: `This function is not available in server-side rendering: ${unavailableFeature}`,\n });\n }\n}\n","/**\n * Indicates if the code is running in a server-side environment.\n * @notInstrumented\n */\nexport const isServerSideRendering = (): boolean =>\n // eslint-disable-next-line no-restricted-globals\n typeof window === 'undefined';\n","/* eslint-disable no-restricted-globals -- this is the abstraction for localStorage */\nimport { UnavailableInServerSideError } from '../../../errors/UnavailableInServerSideError';\nimport { isServerSideRendering } from '../../../utils/isServerSideRendering';\nimport type { StorageAdapter } from '../storage.types';\n\n/**\n * Creates a localStorage adapter.\n * @notInstrumented\n */\nexport const createLocalStorageAdapter = (): StorageAdapter => {\n if (isServerSideRendering()) {\n return {\n getItem: (_key) =>\n Promise.reject(\n new UnavailableInServerSideError('createLocalStorageAdapter')\n ),\n removeItem: (_key) =>\n Promise.reject(\n new UnavailableInServerSideError('createLocalStorageAdapter')\n ),\n setItem: (_key, _value) =>\n Promise.reject(\n new UnavailableInServerSideError('createLocalStorageAdapter')\n ),\n };\n }\n\n return {\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};\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 * @notInstrumented\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/** @notInstrumented */\nexport const formatForStorage = (value: unknown): string => {\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/** @notInstrumented */\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 * @notInstrumented\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","/**\n * Shallow compare two objects.\n *\n * Source: https://github.com/pmndrs/zustand/blob/main/src/vanilla/shallow.ts\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const isEqualShallow = <T>(objA: T, objB: T): boolean => {\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 * @notInstrumented\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 ): ((callback: (slice: Slice) => void) => VoidFunction) =>\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","/* eslint-disable no-restricted-globals */\nimport { Buffer as BufferPolyfill } from 'buffer';\n\n/** @notInstrumented */\nexport const getBuffer = (): BufferConstructor =>\n typeof Buffer !== 'undefined' ? Buffer : BufferPolyfill;\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 MIGRATE_SESSION_KEY_TRACKER_KEY = 'migrate-session-key';\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 { isServerSideRendering } from '../../../utils/isServerSideRendering';\nimport type { SubscribeToAppForeground } from '../appForeground.types';\n\n/**\n * Creates a subscriber for \"the app returned to the foreground\" events.\n *\n * This is the default (web) implementation. React Native builds resolve\n * `createAppForegroundSubscriber.native.ts` instead, which uses `AppState`\n * since there is no `document` on device.\n *\n * @notInstrumented\n */\nexport const createAppForegroundSubscriber = (): SubscribeToAppForeground => {\n // Unlike the other core services (fetch/deeplink/storage), a foreground\n // subscription has no meaningful SSR behaviour to throw about — there is\n // simply never a foreground transition on the server. Returning a no-op\n // unsubscribe keeps `initializeClient` working for server-rendered\n // consumers instead of throwing.\n if (isServerSideRendering()) {\n return () => () => {};\n }\n\n return (listener) => {\n // Listen for visibilitychange only, and only fire on the transition to\n // 'visible'. Deliberately not also listening to window's 'focus' event:\n // focus fires whenever the tab is re-focused while already visible\n // (e.g. clicking back into an already-visible window), which would\n // double-fire the listener alongside visibilitychange.\n const handleVisibilityChange = () => {\n // eslint-disable-next-line no-restricted-globals -- this is the abstraction for observing document visibility\n if (document.visibilityState === 'visible') {\n listener();\n }\n };\n\n // eslint-disable-next-line no-restricted-globals -- this is the abstraction for observing document visibility\n document.addEventListener('visibilitychange', handleVisibilityChange);\n\n return () => {\n // eslint-disable-next-line no-restricted-globals -- this is the abstraction for observing document visibility\n document.removeEventListener('visibilitychange', handleVisibilityChange);\n };\n };\n};\n","import type { DeferredPromise } from './deferredPromise.types';\n\n/** @notInstrumented */\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 * @notInstrumented\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 EventEmitter3 from 'eventemitter3';\n\nexport type EventEmitter<\n EventTypes extends EventEmitter3.ValidEventTypes = string | symbol,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint -- any is used to allow any type of context\n Context extends any = any\n> = EventEmitter3<EventTypes, Context>;\n\n/** @notInstrumented */\nexport const createEventEmitter = <\n EventTypes extends EventEmitter3.ValidEventTypes = string | symbol,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-unnecessary-type-constraint -- any is used to allow any type of context\n Context extends any = any\n>(): EventEmitter<EventTypes, Context> => new EventEmitter3<EventTypes, Context>();\n","import { EventEmitter } from 'eventemitter3';\n\nimport type { LogLevel, Logger, LoggerEventEmitter } from '../logger.types';\n\n/**\n * Configuration options for the logger\n * @notInstrumented\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 * @notInstrumented\n */\nexport const createLogger = (options: CreateLoggerOptions = {}): Logger => {\n const eventEmitter: LoggerEventEmitter = new EventEmitter();\n\n // Default to 'warn' 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 isEnabled: (level) => shouldLog(level),\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","import { BaseError } from './base';\n\ntype UnsafeNavigationUrlErrorParams = {\n scheme: string;\n};\n\n/**\n * Thrown when navigation is attempted to a URL whose scheme is not in the\n * allowlist (only `http:` and `https:` are permitted). Guards against DOM XSS\n * (`javascript:` URIs) and other dangerous schemes (`data:`, `blob:`, etc.)\n * that could originate from a poisoned server response or cached project\n * settings flowing into `window.location.href`.\n */\nexport class UnsafeNavigationUrlError extends BaseError {\n constructor({ scheme }: UnsafeNavigationUrlErrorParams) {\n super({\n cause: null,\n code: 'unsafe_navigation_url_error',\n docsUrl: null,\n name: 'UnsafeNavigationUrlError',\n shortMessage: `Refusing to navigate to a URL with an unsafe scheme \"${scheme}\". Only http: and https: URLs are allowed. This may indicate a compromised or misconfigured auth URL.`,\n });\n }\n}\n","import { UnsafeNavigationUrlError } from '../../errors/UnsafeNavigationUrlError';\n\n/**\n * The only URL schemes permitted for navigation. Everything else — most\n * importantly `javascript:` (DOM XSS) as well as `data:`, `blob:`, `file:`,\n * etc. — is rejected.\n */\nconst ALLOWED_NAVIGATION_SCHEMES = new Set(['http:', 'https:']);\n\n/**\n * Asserts that the given URL is safe to navigate to, i.e. its scheme is in the\n * allowlist (`http:`/`https:`). Used as a defense-in-depth guard wherever a\n * server-supplied or cached URL flows into navigation, preventing DOM XSS via\n * `javascript:` URIs and open redirects via other dangerous schemes.\n *\n * @param url - The URL string or parsed URL to validate.\n * @throws {UnsafeNavigationUrlError} If the URL cannot be parsed or its scheme is not allowed.\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const assertSafeNavigationUrl = (url: string | URL): void => {\n let parsed: URL;\n\n try {\n parsed = url instanceof URL ? url : new URL(url);\n } catch {\n // An unparseable URL is treated as unsafe rather than allowed through.\n throw new UnsafeNavigationUrlError({ scheme: 'unknown' });\n }\n\n if (!ALLOWED_NAVIGATION_SCHEMES.has(parsed.protocol)) {\n throw new UnsafeNavigationUrlError({ scheme: parsed.protocol });\n }\n};\n","/**\n * Converts an ArrayBuffer or Uint8Array to a hex-encoded string\n * @notInstrumented\n */\nexport const bufferToHex = (buffer: ArrayBufferLike | Uint8Array): string =>\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 * @notInstrumented\n */\nexport const compressRawPublicKey = (\n rawPublicKey: ArrayBuffer\n): ArrayBufferLike => {\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/** @notInstrumented */\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/** @notInstrumented */\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/** @notInstrumented */\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\nconst createStoreIfMissing = (db: IDBDatabase): void => {\n if (!db.objectStoreNames.contains(STORE_NAME)) {\n db.createObjectStore(STORE_NAME, { keyPath: 'keyName' });\n }\n};\n\n/** @notInstrumented */\n// eslint-disable-next-line custom-rules/require-single-object-param\nconst openConnection = (\n dbName: string,\n version?: number\n): Promise<IDBDatabase> =>\n new Promise((resolve, reject) => {\n const shouldUseCurrentVersion = version === undefined;\n\n let request: IDBOpenDBRequest;\n if (shouldUseCurrentVersion) {\n request = indexedDB.open(dbName);\n } else {\n request = indexedDB.open(dbName, version);\n }\n\n request.onupgradeneeded = () => createStoreIfMissing(request.result);\n\n request.onsuccess = () => resolve(request.result);\n request.onerror = () => reject(request.error as Error);\n });\n\n/**\n * Opens the keychain IndexedDB connection, recovering from a corrupted schema.\n * If the database exists but is missing the expected object store (e.g. an\n * upgrade interrupted by a reload on iOS WebKit leaves the DB committed at its\n * version with the store creation rolled back), it reopens at the next version\n * so onupgradeneeded fires and recreates only the missing store. Existing data\n * is preserved — the database is never deleted.\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param, custom-rules/one-function-per-file\nexport const openDatabase = async (dbName: string): Promise<IDBDatabase> => {\n const db = await openConnection(dbName);\n\n if (db.objectStoreNames.contains(STORE_NAME)) {\n return db;\n }\n\n // The database exists but is missing the object store. Reopening at the same\n // version won't re-run onupgradeneeded, so any transaction would keep\n // throwing NotFoundError. Bump the version to trigger an upgrade that\n // recreates the store, leaving any other stored data intact.\n const nextVersion = db.version + 1;\n db.close();\n\n return openConnection(dbName, nextVersion);\n};\n","import { openDatabase } from '../openDatabase';\n\ntype WithDatabaseParams<T> = {\n dbName: string;\n operation: (db: IDBDatabase) => Promise<T>;\n};\n\n// DOMException names for transient IndexedDB failures. These commonly occur on\n// iOS WebKit when a webview reload closes the connection mid-operation; opening\n// a fresh connection and retrying once usually succeeds.\nconst RETRYABLE_ERROR_NAMES = new Set([\n 'InvalidStateError',\n 'UnknownError',\n 'AbortError',\n 'TransactionInactiveError',\n]);\n\nconst isRetryableError = (error: unknown): boolean =>\n error instanceof DOMException && RETRYABLE_ERROR_NAMES.has(error.name);\n\nconst runInDatabase = 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\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 * Retries once on transient IndexedDB errors with a fresh connection.\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/one-function-per-file\nexport const withDatabase = async <T>(\n params: WithDatabaseParams<T>\n): Promise<T> => {\n try {\n return await runInDatabase(params);\n } catch (error) {\n if (!isRetryableError(error)) {\n throw error;\n }\n\n return runInDatabase(params);\n }\n};\n","import { bufferToHex } from '../../../utils/bufferToHex';\nimport { compressRawPublicKey } from '../../../utils/compressRawPublicKey';\nimport type {\n CreateKeychainService,\n StoredKey,\n} 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/** @notInstrumented */\nexport const createKeychainService: CreateKeychainService = (params) => {\n const dbName = params?.dbName ?? DEFAULT_DB_NAME;\n\n // In-memory key cache, keyed by keyName. sign() prefers this over IndexedDB\n // so that a cross-tab key rotation in the shared IndexedDB does not silently\n // swap the signing key out from under the current session.\n const memoryKeys = new Map<string, StoredKey>();\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 const entry: StoredKey = {\n keyName,\n privateKey: keyPair.privateKey,\n publicKeyHex,\n };\n\n memoryKeys.set(keyName, entry);\n\n await withDatabase({\n dbName,\n operation: (db) => setIndexedDBItem({ db, entry }),\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 const entry: StoredKey = { keyName, privateKey, publicKeyHex };\n\n memoryKeys.set(keyName, entry);\n\n await withDatabase({\n dbName,\n operation: (db) => setIndexedDBItem({ db, entry }),\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 cached = memoryKeys.get(keyName);\n if (cached) {\n return cached.publicKeyHex;\n }\n\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 // Prefer the in-memory key so that a cross-tab IndexedDB key rotation\n // does not cause this tab to sign with a foreign private key.\n const entry =\n memoryKeys.get(keyName) ??\n (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 if (memoryKeys.has(keyName)) {\n return true;\n }\n\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 memoryKeys.delete(keyName);\n\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 UnsafeDeeplinkUrlErrorParams = {\n scheme: string;\n};\n\n/**\n * Thrown when a deeplink is opened with a URL whose scheme can execute script\n * in the current origin (`javascript:`, `data:`, `vbscript:`). Unlike\n * navigation, deeplinks legitimately use custom app schemes (e.g. `phantom:`,\n * `metamask:`), so this guards via a denylist of dangerous schemes rather than\n * an `http(s)` allowlist, preventing DOM XSS through the `window.location.assign`\n * sink while leaving valid wallet deeplinks untouched.\n */\nexport class UnsafeDeeplinkUrlError extends BaseError {\n constructor({ scheme }: UnsafeDeeplinkUrlErrorParams) {\n super({\n cause: null,\n code: 'unsafe_deeplink_url_error',\n docsUrl: null,\n name: 'UnsafeDeeplinkUrlError',\n shortMessage: `Refusing to open a deeplink with an unsafe scheme \"${scheme}\". Script-executing schemes (javascript:, data:, vbscript:) are not allowed. This may indicate a compromised or misconfigured deeplink URL.`,\n });\n }\n}\n","import { UnsafeDeeplinkUrlError } from '../../errors/UnsafeDeeplinkUrlError';\n\n/**\n * Schemes that can execute script in the current origin and must never reach a\n * deeplink navigation sink. Deeplinks legitimately use arbitrary custom app\n * schemes (e.g. `phantom:`, `metamask:`), so a denylist of dangerous schemes is\n * used here instead of the `http(s)` allowlist applied to standard navigation.\n */\nconst DANGEROUS_DEEPLINK_SCHEMES = new Set([\n 'javascript:',\n 'data:',\n 'vbscript:',\n 'blob:',\n]);\n\n/**\n * Asserts that the given deeplink URL is safe to open, i.e. its scheme is not\n * one that can execute script (`javascript:`, `data:`, `vbscript:`, `blob:`). Used as a\n * defense-in-depth guard on the `window.location.assign` deeplink sink to\n * prevent DOM XSS, while still permitting custom wallet app schemes.\n *\n * @param url - The deeplink URL string to validate.\n * @throws {UnsafeDeeplinkUrlError} If the URL cannot be parsed or its scheme can execute script.\n * @notInstrumented\n */\n// eslint-disable-next-line custom-rules/require-single-object-param\nexport const assertSafeDeeplinkUrl = (url: string): void => {\n let parsed: URL;\n\n try {\n parsed = new URL(url);\n } catch {\n // An unparseable deeplink is treated as unsafe rather than allowed through.\n throw new UnsafeDeeplinkUrlError({ scheme: 'unknown' });\n }\n\n if (DANGEROUS_DEEPLINK_SCHEMES.has(parsed.protocol)) {\n throw new UnsafeDeeplinkUrlError({ scheme: parsed.protocol });\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 type { DynamicClient } from '../../../client/types';\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 * @notInstrumented\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 let connectedClient: DynamicClient | undefined;\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 connectedClient = 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 || !connectedClient) {\n return;\n }\n\n const { logger } = getCore(connectedClient);\n\n for (const channel of channels.values()) {\n channel\n .detach()\n .catch((error: unknown) =>\n logger.error('[realtime] Failed to detach channel during disconnect', error)\n );\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 * @notInstrumented\n */\nexport const getKeychainIndexedDBName = ({\n environmentId,\n}: GetKeychainIndexedDBNameParams): string =>\n `dynamic_${environmentId}_keychain`;\n","import type { MergeConflicts } from '../modules/auth/mergeUserAccounts/mergeUserAccounts.types';\nimport { BaseError, type BaseErrorParameters } from './base';\n\nexport type MergeAccountsConfirmationErrorParameters =\n Pick<BaseErrorParameters, 'cause'> & {\n /**\n * The field-level conflicts between the current user and the user that owns\n * the credential being linked, when the two accounts hold different values\n * for the same profile field. `undefined` when the merge has no conflicts\n * to resolve.\n */\n mergeConflicts?: MergeConflicts;\n /**\n * The address of the wallet whose verification triggered the merge, when\n * the merge was triggered by a wallet link.\n */\n walletAddress?: string;\n };\n\n/**\n * Thrown during credential verification when the credential already belongs to\n * a different existing user, and the backend is offering to merge the two users\n * into one.\n *\n * Unlike {@link WalletAlreadyLinkedToAnotherUserError} (a hard rejection), this\n * is a recoverable prompt: the caller can complete the merge with\n * `mergeUserAccounts`. When the two accounts hold different values for the same\n * profile field, those differences are surfaced on {@link mergeConflicts} so\n * the caller can ask the user which value to keep and pass the resolutions to\n * `mergeUserAccounts`.\n *\n * @example\n * ```ts\n * try {\n * await verifyWalletAccount({ walletAccount });\n * } catch (error) {\n * if (error instanceof MergeAccountsConfirmationError) {\n * // No conflicts: complete the merge directly.\n * // With conflicts: let the user resolve error.mergeConflicts first.\n * await mergeUserAccounts();\n * }\n * }\n * ```\n * @see MergeConflicts\n * @see WalletAlreadyLinkedToAnotherUserError\n */\nexport class MergeAccountsConfirmationError extends BaseError {\n mergeConflicts: MergeConflicts | undefined;\n\n walletAddress: string | undefined;\n\n constructor({\n cause,\n mergeConflicts,\n walletAddress,\n }: MergeAccountsConfirmationErrorParameters) {\n super({\n cause,\n code: 'merge_accounts_confirmation',\n docsUrl: null,\n name: 'MergeAccountsConfirmationError',\n shortMessage:\n 'This credential is already linked to another user; confirm to merge the accounts',\n });\n\n this.mergeConflicts = mergeConflicts;\n this.walletAddress = walletAddress;\n }\n}\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 { BaseError, type BaseErrorParameters } from './base';\n\n/**\n * Thrown when a wallet is rejected during verification because it failed the\n * project's compliance screening (e.g. it appears on a sanctions list).\n *\n * The screening runs server-side and is enabled per environment in the Dynamic\n * dashboard. This typed error lets consumers detect the blocked-wallet case and\n * render an \"access denied\" experience without having to inspect the raw API\n * error code themselves.\n *\n * @example\n * ```ts\n * try {\n * await verifyWalletAccount({ walletAccount });\n * } catch (error) {\n * if (error instanceof WalletScreeningBlockedError) {\n * showAccessDeniedScreen();\n * }\n * }\n * ```\n * @see verifyWalletAccount\n * @see connectAndVerifyWithWalletProvider\n */\nexport class WalletScreeningBlockedError extends BaseError {\n constructor({ cause }: Pick<BaseErrorParameters, 'cause'>) {\n super({\n cause,\n code: 'wallet_screening_blocked',\n docsUrl: null,\n name: 'WalletScreeningBlockedError',\n shortMessage:\n 'This wallet was blocked by compliance screening and cannot be used',\n });\n }\n}\n","import { getDefaultClient } from '../../../client/defaultClient';\nimport { assertDefined } from '../../../utils/assertDefined';\n\n/** @notInstrumented */\nexport const isCaptchaRequired = (client = getDefaultClient()): boolean => {\n const projectSettings = client.projectSettings;\n\n assertDefined(projectSettings, 'Project settings are not available');\n\n const { security } = projectSettings;\n\n // Prefer the provider-agnostic captcha field; fall back to the legacy hCaptcha field.\n return security.captcha?.enabled ?? 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 * @notInstrumented\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 { 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 { 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): void => {\n const core = getCore(client);\n\n core.state.set({\n captchaToken,\n });\n};\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 * @notInstrumented\n */\nexport const hasExtension = (\n { extensionKey }: HasExtensionParams,\n client = getDefaultClient()\n): boolean => {\n const core = getCore(client);\n\n return core.extensions.has(extensionKey);\n};\n","import type { DynamicClient } from '../../../../../client/types';\nimport type { Chain } from '../../../../chain';\nimport { emitEvent } from '../../../../clientEvents';\nimport type {\n NetworkProviderBuilder,\n NetworkProviderBuilderRegistry,\n} from '../networkProviderBuilderRegistry.types';\n\n/** @notInstrumented */\nexport const createNetworkProviderBuilderRegistry = (\n client: DynamicClient\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 emitEvent(\n {\n args: { chain: networkProviderBuilder.chain },\n event: 'networkProviderBuilderRegistered',\n },\n client\n );\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 type { Chain } from '../../../chain';\nimport { emitEvent } from '../../../clientEvents';\nimport type { UriConnectionType } from '../../walletProviderUriConnection.types';\nimport type {\n UriConnectionStarter,\n UriConnectionStarterRegistry,\n} from '../uriConnectionStarterRegistry.types';\n\nconst formatRegistryKey = ({\n chain,\n type,\n}: {\n chain: Chain;\n type: UriConnectionType;\n}): string => `${chain}:${type}`;\n\n/**\n * Creates the client-scoped registry of URI connection starters, holding one\n * starter per chain and URI protocol pair.\n *\n * Access it through `getUriConnectionStarterRegistry` rather than calling this\n * directly, so a single instance is shared per client.\n *\n * @example\n * ```ts\n * const registry = createUriConnectionStarterRegistry(client);\n * ```\n *\n * @param client - The Dynamic client instance the registry belongs to.\n * @returns The registry of URI connection starters for the given client.\n * @see getUriConnectionStarterRegistry\n * @see UriConnectionStarter\n * @notInstrumented\n */\nexport const createUriConnectionStarterRegistry = (\n client: DynamicClient\n): UriConnectionStarterRegistry => {\n const registry = new Map<string, UriConnectionStarter>();\n\n return {\n get: ({ chain, type }) => registry.get(formatRegistryKey({ chain, type })),\n getAll: () => Array.from(registry.values()),\n register: (uriConnectionStarter) => {\n const { chain, type } = uriConnectionStarter;\n\n registry.set(formatRegistryKey({ chain, type }), uriConnectionStarter);\n\n emitEvent(\n {\n args: { chain, type },\n event: 'uriConnectionStarterRegistered',\n },\n client\n );\n },\n };\n};\n","import { createRuntimeServiceAccessKey } from '../../../../services/runtimeServices';\nimport { createUriConnectionStarterRegistry } from '../createUriConnectionStarterRegistry';\n\n/**\n * Returns the client's registry of URI connection starters, one per chain and\n * URI protocol pair, creating it on first access.\n *\n * Chain extensions register their starters here so higher level connection\n * APIs can mint a pairing URI without depending on the chain packages.\n *\n * @example\n * ```ts\n * const { uri, approval } = await getUriConnectionStarterRegistry(client)\n * .get({ chain: 'EVM', type: 'walletConnect' })\n * ?.start({});\n * ```\n *\n * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.\n * @returns The registry of URI connection starters for the given client.\n * @see UriConnectionStarter\n * @see UriConnectionType\n * @notInstrumented\n */\nexport const getUriConnectionStarterRegistry = createRuntimeServiceAccessKey(\n 'uriConnectionStarterRegistry',\n createUriConnectionStarterRegistry\n);\n","import {\n AuthModeEnum,\n type ChainEnum,\n type ConnectRequest,\n type WalletProviderEnum,\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/** @notInstrumented */\nexport const createVisit = async (\n { walletAccount, authMode = AuthModeEnum.Only }: CreateVisitParams,\n client: DynamicClient\n): Promise<void> => {\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 as WalletProviderEnum,\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 * @notInstrumented\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","import { getCore } from '../../../../../client/core/getCore';\nimport type { DynamicClient } from '../../../../../client/types';\n\ntype updateWalletProviderKeysForVerifiedCredentialsParams = {\n keysToUpdate: Record<string, string>;\n};\n\n/** @notInstrumented */\nexport const updateWalletProviderKeysForVerifiedCredentials = (\n { keysToUpdate }: updateWalletProviderKeysForVerifiedCredentialsParams,\n client: DynamicClient\n): void => {\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 { DynamicClient } from '../../../client/types';\nimport { createVisit } from '../../auth/createVisit';\nimport { emitWalletAccountsChangedEvent } from '../emitWalletAccountsChangedEvent';\nimport { getWalletAccounts } from '../getWalletAccounts';\nimport { setUnverifiedWalletAccounts } from '../unverifiedWalletAccounts/setUnverifiedWalletAccounts';\nimport type { WalletAccount } from '../walletAccount';\nimport { updateWalletProviderKeysForVerifiedCredentials } from '../walletProvider/walletProviderKeyMap/updateWalletProviderKeysForVerifiedCredentials';\n\ntype ReconcileWalletAccountsAgainstClientParams = {\n /** Whether to write new or updated unverified accounts to client state. Defaults to `true`. */\n addToDynamicWalletAccounts?: boolean;\n /** Freshly-connected wallet account candidates to reconcile. */\n walletAccounts: WalletAccount[];\n /** Wallet provider key these candidates were connected through. */\n walletProviderKey: string;\n};\n\n/**\n * Reconciles freshly-connected wallet accounts against the client state. For\n * each candidate it classifies as new, a re-connect of an existing unverified\n * account, or a re-connect of an already-verified account, then runs the\n * appropriate state mutation (`setUnverifiedWalletAccounts`,\n * `updateWalletProviderKeysForVerifiedCredentials`, `createVisit` for truly-new\n * entries) and emits a single `walletAccountsChanged` event if anything\n * actually changed. Returns the candidates with `verifiedCredentialId`\n * populated when the address already corresponded to a verified credential.\n *\n * @notInstrumented\n */\nexport const reconcileWalletAccountsAgainstClient = (\n {\n addToDynamicWalletAccounts = true,\n walletAccounts,\n walletProviderKey,\n }: ReconcileWalletAccountsAgainstClientParams,\n client: DynamicClient\n): WalletAccount[] => {\n if (walletAccounts.length === 0) {\n return [];\n }\n\n const existingWalletAccounts = getWalletAccounts(client);\n\n const newWalletAccounts: WalletAccount[] = [];\n const unverifiedWalletAccountsToUpdate: WalletAccount[] = [];\n const verifiedCredentialIdToWalletProviderKeyMap: Record<string, string> = {};\n\n const reconciledWalletAccounts: WalletAccount[] = walletAccounts.map(\n (candidate) => {\n const matchingExistingWalletAccount = existingWalletAccounts.find(\n (existingWalletAccount) => existingWalletAccount.id === candidate.id\n );\n\n if (!matchingExistingWalletAccount) {\n newWalletAccounts.push(candidate);\n return candidate;\n }\n\n const isWalletProviderKeyChanged =\n matchingExistingWalletAccount.walletProviderKey !== walletProviderKey;\n\n if (matchingExistingWalletAccount.verifiedCredentialId) {\n if (isWalletProviderKeyChanged) {\n verifiedCredentialIdToWalletProviderKeyMap[\n matchingExistingWalletAccount.verifiedCredentialId\n ] = walletProviderKey;\n }\n\n return {\n ...candidate,\n verifiedCredentialId:\n matchingExistingWalletAccount.verifiedCredentialId,\n };\n }\n\n if (isWalletProviderKeyChanged) {\n unverifiedWalletAccountsToUpdate.push(candidate);\n }\n\n return candidate;\n }\n );\n\n let walletAccountsChanged = false;\n\n if (Object.keys(verifiedCredentialIdToWalletProviderKeyMap).length > 0) {\n updateWalletProviderKeysForVerifiedCredentials(\n { keysToUpdate: verifiedCredentialIdToWalletProviderKeyMap },\n client\n );\n\n walletAccountsChanged = true;\n }\n\n if (addToDynamicWalletAccounts) {\n const accountsToWrite = [\n ...unverifiedWalletAccountsToUpdate,\n ...newWalletAccounts,\n ];\n\n if (accountsToWrite.length > 0) {\n setUnverifiedWalletAccounts(\n { unverifiedWalletAccountsToUpdate: accountsToWrite },\n client\n );\n\n walletAccountsChanged = true;\n\n for (const newWalletAccount of newWalletAccounts) {\n void createVisit({ walletAccount: newWalletAccount }, client);\n }\n }\n }\n\n if (walletAccountsChanged) {\n emitWalletAccountsChangedEvent(client);\n }\n\n return reconciledWalletAccounts;\n};\n","import { getCore } from '../../client/core/getCore';\nimport type { DynamicClient } from '../../client/types';\n\nexport type AppMetadata = {\n appLogoUrl: string | undefined;\n appName: string;\n appNativeLink?: string;\n appUniversalLink?: string;\n};\n\n/**\n * Reads the customer-supplied app name, logo, native link, and universal link.\n * — preferring `core.metadata` (set on the client) over project-settings fallbacks.\n *\n * @param client - The Dynamic client whose configuration drives the result.\n * @notInstrumented\n */\nexport const getAppMetadata = (client: DynamicClient): AppMetadata => {\n const core = getCore(client);\n const generalSettings = client.projectSettings?.general;\n\n return {\n appLogoUrl: core.metadata?.iconUrl ?? generalSettings?.appLogo ?? undefined,\n appName: core.metadata?.name ?? generalSettings?.displayName ?? '',\n appNativeLink: core.metadata?.nativeLink,\n appUniversalLink: core.metadata?.universalLink,\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 * @notInstrumented\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): Promise<string> => {\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 type { DynamicClient } from '../../../../../client/types';\nimport { getAppMetadata } from '../../../../../utils/getAppMetadata';\n\n/** @notInstrumented */\nexport const createSignInMessageStatement = (client: DynamicClient): string => {\n const { appName } = getAppMetadata(client);\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 * @notInstrumented\n */\nexport const removeUnverifiedWalletAccount = (\n { unverifiedWalletAccount }: RemoveUnverifiedWalletAccountParams,\n client: DynamicClient\n): void => {\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 * @notInstrumented\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 * @notInstrumented\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 { SCREENING_BLOCKED_WALLET_ERROR_CODES } from '../../constants';\nimport { isError } from '../isError';\nimport { isErrorWithCode } from '../isErrorWithCode';\n\n/**\n * Check if the given value is an Error raised because compliance screening\n * blocked the wallet, under any of the error codes the backend may return for\n * that outcome.\n *\n * @example\n * ```ts\n * try {\n * await verifyMessageSignatureOwnership(params, client);\n * } catch (error) {\n * if (isScreeningBlockedError(error)) {\n * throw new WalletScreeningBlockedError({ cause: error });\n * }\n * }\n * ```\n *\n * @param error - The value to check.\n * @returns True when the value is an Error carrying a screening block code.\n * @see SCREENING_BLOCKED_WALLET_ERROR_CODES\n * @see isErrorWithCode\n * @notInstrumented\n */\nexport const isScreeningBlockedError = (error: unknown): error is Error =>\n isError(error) &&\n SCREENING_BLOCKED_WALLET_ERROR_CODES.some((code) =>\n isErrorWithCode(error, code)\n );\n","import type {\n ChainEnum,\n MergeConflicts,\n WalletProviderEnum as SdkWalletProviderEnum,\n WalletAddressType,\n} from '@dynamic-labs/sdk-api-core';\n\nimport { getCore } from '../../../client/core/getCore';\nimport type { DynamicClient } from '../../../client/types';\nimport { APIError } from '../../../errors/APIError';\nimport { isErrorWithCode } from '../../../utils/isErrorWithCode';\nimport { isScreeningBlockedError } from '../../../utils/isScreeningBlockedError';\nimport { createApiClient } from '../../apiClient';\nimport { consumeCaptchaToken } from '../../captcha/consumeCaptchaToken';\nimport type { Chain } from '../../chain';\nimport type { VerifyResponse } from '../../auth/auth.types';\nimport type { TokenScope } from '../../auth/consts';\nimport { normalizeWalletNameWithChain } from '../utils/normalizeWalletNameWithChain';\nimport type { WalletAddressWithType } from '../walletAccount/walletAccount.types';\nimport { MergeAccountsConfirmationError } from './../../../errors/MergeAccountsConfirmationError';\nimport { WalletAlreadyLinkedToAnotherUserError } from './../../../errors/WalletAlreadyLinkedToAnotherUserError';\nimport { WalletScreeningBlockedError } from './../../../errors/WalletScreeningBlockedError';\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: `${SdkWalletProviderEnum}`;\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 * @throws MergeAccountsConfirmationError If the credential belongs to another user and the backend is offering to merge the accounts.\n * @throws WalletAlreadyLinkedToAnotherUserError If the wallet is already linked to another user.\n * @throws WalletScreeningBlockedError If the wallet was blocked by the project's compliance screening.\n * @notInstrumented\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 as SdkWalletProviderEnum,\n },\n });\n } catch (error) {\n core.logger.error('Failed to verify message signature ownership', error);\n\n if (isErrorWithCode(error, 'merge_accounts_confirmation')) {\n // The credential belongs to another user and the backend is offering to\n // merge the two accounts. Surface the field-level conflicts (carried on\n // the API error payload) so the caller can resolve them and complete the\n // merge via `mergeUserAccounts`.\n const mergeConflicts =\n error instanceof APIError\n ? (error.payload?.mergeConflicts as MergeConflicts | undefined)\n : undefined;\n\n throw new MergeAccountsConfirmationError({\n cause: error,\n mergeConflicts,\n walletAddress,\n });\n }\n\n if (isErrorWithCode(error, 'reassign_wallet_confirm')) {\n throw new WalletAlreadyLinkedToAnotherUserError({\n cause: error,\n });\n }\n\n if (isScreeningBlockedError(error)) {\n throw new WalletScreeningBlockedError({\n cause: error,\n });\n }\n\n throw error;\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 * @notInstrumented\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 * as z from 'zod/mini';\n\nimport type { Chain } from '../../../chain';\nimport { CHAINS_INFO_MAP } from '../../constants';\nimport type { NetworkData } from '../networkProvider/networkProvider.types';\n\n/**\n * Runtime shape of {@link NetworkData}. Identical to the declared type except\n * `iconUrl`, which the type declares as required but is legitimately\n * `undefined` at runtime for networks without configured icons.\n */\ntype NetworkDataRuntime = Omit<NetworkData, 'iconUrl'> & {\n iconUrl?: string;\n};\n\n/**\n * Runtime schema mirroring the {@link NetworkData} type, used to validate the\n * output of the `transformers.networksData` callback before it is handed to the\n * rest of the SDK.\n *\n * The explicit `z.ZodMiniType<NetworkDataRuntime>` annotation pins the schema\n * to the type at compile time: a field added to or changed on `NetworkData`\n * without a matching schema update fails compilation, so the two cannot\n * silently drift apart. Unknown extra properties are accepted and preserved.\n */\nexport const networkDataSchema: z.ZodMiniType<NetworkDataRuntime> = z.object({\n blockExplorerUrls: z.array(z.string()),\n // Derived from the canonical runtime chain map so newly supported chains are\n // accepted without having to update this schema.\n chain: z.custom<Chain>(\n (value) => typeof value === 'string' && value in CHAINS_INFO_MAP\n ),\n cluster: z.optional(z.string()),\n displayName: z.string(),\n genesisHash: z.optional(z.string()),\n iconUrl: z.optional(z.string()),\n name: z.string(),\n nativeCurrency: z.object({\n decimals: z.number(),\n denom: z.optional(z.string()),\n iconUrl: z.optional(z.string()),\n name: z.string(),\n symbol: z.string(),\n }),\n networkId: z.string(),\n rpcUrls: z.object({\n http: z.array(z.string()),\n }),\n testnet: z.boolean(),\n});\n","import * as z from 'zod/mini';\n\nimport { getCore } from '../../../../client/core/getCore';\nimport { getDefaultClient } from '../../../../client/defaultClient';\nimport { assertDefined } from '../../../../utils/assertDefined';\nimport { getSdkChainFromApiChainName } from '../getSdkChainFromApiChainName';\nimport { networkDataSchema } from '../networkDataSchema';\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 * If a `transformers.networksData` callback was provided, it then receives the full\n * flattened list and its (validated) return value is what the SDK uses, allowing\n * networks to be rewritten, filtered, reordered, or added.\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 * @notInstrumented\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 // Fall back to an empty list (rather than returning early) so the\n // transformers.networksData callback still runs and can bootstrap a fully\n // custom network list even when the project has no configured networks.\n const networks = projectSettings.networks ?? [];\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 if (!transformers?.networksData) {\n return networksData;\n }\n\n let transformedNetworksData: NetworkData[];\n try {\n transformedNetworksData = transformers.networksData(networksData);\n } catch (cause) {\n // A throwing callback leaves no transformed output to use, so fall back\n // to the untransformed list rather than letting the exception block\n // whichever SDK operation happened to read networks first.\n core.logger.error(\n 'The transformers.networksData callback threw an error. Falling back to the untransformed network list.',\n cause\n );\n return networksData;\n }\n\n // Only transformer output is validated: untransformed project-settings data\n // must keep working exactly as before, so absent a transformer this is a\n // no-op. Validation is advisory: failures are logged but the transformer's\n // own objects are still used, so a too-strict schema (e.g. after an API\n // shape change on an older SDK version) can never silently disable a\n // customer's transformer, and extra properties are preserved.\n const validation = z.safeParse(\n z.array(networkDataSchema),\n transformedNetworksData\n );\n\n if (!validation.success) {\n core.logger.error(\n 'The transformers.networksData callback returned an invalid network list. The transformed list will still be used, but network operations relying on the invalid fields may misbehave.',\n z.prettifyError(validation.error)\n );\n }\n\n return transformedNetworksData;\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 * @notInstrumented\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/** @notInstrumented */\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,4 +1,4 @@
|
|
|
1
|
-
const require_logoutWithReason = require('./logoutWithReason-
|
|
1
|
+
const require_logoutWithReason = require('./logoutWithReason-c1DmyRBx.cjs');
|
|
2
2
|
let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
|
|
3
3
|
let zod_mini = require("zod/mini");
|
|
4
4
|
zod_mini = require_logoutWithReason.__toESM(zod_mini);
|
|
@@ -203,6 +203,7 @@ const getBuffer = () => typeof Buffer !== "undefined" ? Buffer : buffer.Buffer;
|
|
|
203
203
|
//#region src/modules/initializeClient/consts.ts
|
|
204
204
|
const REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY = "refresh-user-state-from-cookie";
|
|
205
205
|
const INITIALIZE_STORAGE_SYNC_TRACKER_KEY = "initialize-storage-sync";
|
|
206
|
+
const MIGRATE_SESSION_KEY_TRACKER_KEY = "migrate-session-key";
|
|
206
207
|
const FETCH_PROJECT_SETTINGS_TRACKER_KEY = "fetch-project-settings";
|
|
207
208
|
const GENERATE_SESSION_KEYS_TRACKER_KEY = "generate-session-keys";
|
|
208
209
|
const REFRESH_USER_STATE_FROM_VALID_TOKEN_TRACKER_KEY = "refresh-user-state-from-valid-token";
|
|
@@ -1613,6 +1614,12 @@ Object.defineProperty(exports, 'InvalidStorageSet', {
|
|
|
1613
1614
|
return InvalidStorageSet;
|
|
1614
1615
|
}
|
|
1615
1616
|
});
|
|
1617
|
+
Object.defineProperty(exports, 'MIGRATE_SESSION_KEY_TRACKER_KEY', {
|
|
1618
|
+
enumerable: true,
|
|
1619
|
+
get: function () {
|
|
1620
|
+
return MIGRATE_SESSION_KEY_TRACKER_KEY;
|
|
1621
|
+
}
|
|
1622
|
+
});
|
|
1616
1623
|
Object.defineProperty(exports, 'MergeAccountsConfirmationError', {
|
|
1617
1624
|
enumerable: true,
|
|
1618
1625
|
get: function () {
|
|
@@ -1871,4 +1878,4 @@ Object.defineProperty(exports, 'verifyMessageSignatureOwnership', {
|
|
|
1871
1878
|
return verifyMessageSignatureOwnership;
|
|
1872
1879
|
}
|
|
1873
1880
|
});
|
|
1874
|
-
//# sourceMappingURL=getNetworkProviderFromNetworkId-
|
|
1881
|
+
//# sourceMappingURL=getNetworkProviderFromNetworkId-DaxDzIv4.cjs.map
|