@dynamic-labs-sdk/client 0.9.0 → 0.12.0

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.
Files changed (118) hide show
  1. package/dist/{InvalidParamError-DMz6QY8e.esm.js → InvalidParamError-DNXaHtXP.esm.js} +3 -3
  2. package/dist/{InvalidParamError-DMz6QY8e.esm.js.map → InvalidParamError-DNXaHtXP.esm.js.map} +1 -1
  3. package/dist/{InvalidParamError-D1yNl3r1.cjs.js → InvalidParamError-Dj1fpM2M.cjs.js} +4 -4
  4. package/dist/{InvalidParamError-D1yNl3r1.cjs.js.map → InvalidParamError-Dj1fpM2M.cjs.js.map} +1 -1
  5. package/dist/{NotWaasWalletAccountError-s2J7fQHr.cjs.js → NotWaasWalletAccountError-Cy_46Mkg.cjs.js} +3 -3
  6. package/dist/{NotWaasWalletAccountError-s2J7fQHr.cjs.js.map → NotWaasWalletAccountError-Cy_46Mkg.cjs.js.map} +1 -1
  7. package/dist/{NotWaasWalletAccountError-Cp3qfAxw.esm.js → NotWaasWalletAccountError-DVph5-w8.esm.js} +3 -3
  8. package/dist/{NotWaasWalletAccountError-Cp3qfAxw.esm.js.map → NotWaasWalletAccountError-DVph5-w8.esm.js.map} +1 -1
  9. package/dist/core.cjs.js +6 -5
  10. package/dist/core.cjs.js.map +1 -1
  11. package/dist/core.esm.js +8 -8
  12. package/dist/core.esm.js.map +1 -1
  13. package/dist/errors/FeeEstimationFailedError.d.ts +8 -0
  14. package/dist/errors/FeeEstimationFailedError.d.ts.map +1 -0
  15. package/dist/errors/SimulationFailedError.d.ts +8 -0
  16. package/dist/errors/SimulationFailedError.d.ts.map +1 -0
  17. package/dist/exports/core.d.ts +2 -0
  18. package/dist/exports/core.d.ts.map +1 -1
  19. package/dist/exports/index.d.ts +9 -0
  20. package/dist/exports/index.d.ts.map +1 -1
  21. package/dist/{getNetworkProviderFromNetworkId-CmLsKY7E.esm.js → getNetworkProviderFromNetworkId-27Zwy4je.esm.js} +10 -8
  22. package/dist/{getNetworkProviderFromNetworkId-CmLsKY7E.esm.js.map → getNetworkProviderFromNetworkId-27Zwy4je.esm.js.map} +1 -1
  23. package/dist/{getNetworkProviderFromNetworkId-BXGwNlcZ.cjs.js → getNetworkProviderFromNetworkId-Dvi65YCc.cjs.js} +7 -5
  24. package/dist/{getNetworkProviderFromNetworkId-BXGwNlcZ.cjs.js.map → getNetworkProviderFromNetworkId-Dvi65YCc.cjs.js.map} +1 -1
  25. package/dist/{getSignedSessionId-BO9omMlI.cjs.js → getSignedSessionId-1yP68jni.cjs.js} +24 -7
  26. package/dist/getSignedSessionId-1yP68jni.cjs.js.map +1 -0
  27. package/dist/{getSignedSessionId-BvQ4i928.esm.js → getSignedSessionId-BEjBh8ML.esm.js} +24 -7
  28. package/dist/getSignedSessionId-BEjBh8ML.esm.js.map +1 -0
  29. package/dist/{getVerifiedCredentialForWalletAccount-BW8iluei.cjs.js → getVerifiedCredentialForWalletAccount-CnHwYXVQ.cjs.js} +11 -8
  30. package/dist/getVerifiedCredentialForWalletAccount-CnHwYXVQ.cjs.js.map +1 -0
  31. package/dist/{getVerifiedCredentialForWalletAccount-54lCppnJ.esm.js → getVerifiedCredentialForWalletAccount-DsCAOgMb.esm.js} +10 -7
  32. package/dist/getVerifiedCredentialForWalletAccount-DsCAOgMb.esm.js.map +1 -0
  33. package/dist/index.cjs.js +162 -13
  34. package/dist/index.cjs.js.map +1 -1
  35. package/dist/index.esm.js +160 -17
  36. package/dist/index.esm.js.map +1 -1
  37. package/dist/{isMfaRequiredForAction-DIvUT6_k.esm.js → isMfaRequiredForAction-BG_7iYqV.esm.js} +2 -2
  38. package/dist/{isMfaRequiredForAction-DIvUT6_k.esm.js.map → isMfaRequiredForAction-BG_7iYqV.esm.js.map} +1 -1
  39. package/dist/{isMfaRequiredForAction-DmYvEIJH.cjs.js → isMfaRequiredForAction-zmF7uoM7.cjs.js} +2 -2
  40. package/dist/{isMfaRequiredForAction-DmYvEIJH.cjs.js.map → isMfaRequiredForAction-zmF7uoM7.cjs.js.map} +1 -1
  41. package/dist/modules/auth/decodeJwt/decodeJwt.d.ts +4 -4
  42. package/dist/modules/auth/decodeJwt/decodeJwt.d.ts.map +1 -1
  43. package/dist/modules/auth/logout/logout.d.ts.map +1 -1
  44. package/dist/modules/auth/state.d.ts +1 -1
  45. package/dist/modules/auth/state.d.ts.map +1 -1
  46. package/dist/modules/auth/updateAuthFromVerifyResponse/elevatedAccessTokens/parseElevatedAccessToken/parseElevatedAccessToken.d.ts.map +1 -1
  47. package/dist/modules/auth/updateAuthFromVerifyResponse/updateAuthFromVerifyResponse.d.ts.map +1 -1
  48. package/dist/modules/balances/getMultichainBalances/getMultichainBalances.d.ts +8 -2
  49. package/dist/modules/balances/getMultichainBalances/getMultichainBalances.d.ts.map +1 -1
  50. package/dist/modules/crossTabEventSync/index.d.ts +2 -0
  51. package/dist/modules/crossTabEventSync/index.d.ts.map +1 -0
  52. package/dist/modules/crossTabEventSync/setupCrossTabEventSync/index.d.ts +2 -0
  53. package/dist/modules/crossTabEventSync/setupCrossTabEventSync/index.d.ts.map +1 -0
  54. package/dist/modules/crossTabEventSync/setupCrossTabEventSync/setupCrossTabEventSync.d.ts +19 -0
  55. package/dist/modules/crossTabEventSync/setupCrossTabEventSync/setupCrossTabEventSync.d.ts.map +1 -0
  56. package/dist/modules/deviceRegistration/completeDeviceRegistration/completeDeviceRegistration.d.ts +7 -0
  57. package/dist/modules/deviceRegistration/completeDeviceRegistration/completeDeviceRegistration.d.ts.map +1 -0
  58. package/dist/modules/deviceRegistration/completeDeviceRegistration/index.d.ts +2 -0
  59. package/dist/modules/deviceRegistration/completeDeviceRegistration/index.d.ts.map +1 -0
  60. package/dist/modules/deviceRegistration/events.d.ts +21 -0
  61. package/dist/modules/deviceRegistration/events.d.ts.map +1 -0
  62. package/dist/modules/initializeClient/initializeClient.d.ts.map +1 -1
  63. package/dist/modules/otp/verifyOTP/verifyOTP.d.ts +3 -2
  64. package/dist/modules/otp/verifyOTP/verifyOTP.d.ts.map +1 -1
  65. package/dist/modules/otp/verifyOTP/verifyOTPForUserUpdate/verifyOTPForUserUpdate.d.ts +1 -1
  66. package/dist/modules/otp/verifyOTP/verifyOTPForUserUpdate/verifyOTPForUserUpdate.d.ts.map +1 -1
  67. package/dist/modules/sessionKeys/generateNonceSignature/generateNonceSignature.d.ts +9 -0
  68. package/dist/modules/sessionKeys/generateNonceSignature/generateNonceSignature.d.ts.map +1 -0
  69. package/dist/modules/sessionKeys/generateNonceSignature/index.d.ts +2 -0
  70. package/dist/modules/sessionKeys/generateNonceSignature/index.d.ts.map +1 -0
  71. package/dist/modules/sessionKeys/getSignedSessionId/getSignedSessionId.d.ts.map +1 -1
  72. package/dist/modules/simulation/simulation.types.d.ts +75 -0
  73. package/dist/modules/simulation/simulation.types.d.ts.map +1 -0
  74. package/dist/modules/storageSync/hydrateStateWithStorage/hydrateStateWithStorage.d.ts.map +1 -1
  75. package/dist/modules/storageSync/schema.d.ts +7 -0
  76. package/dist/modules/storageSync/schema.d.ts.map +1 -1
  77. package/dist/modules/storageSync/syncStateWithStorage/syncStateWithStorage.d.ts.map +1 -1
  78. package/dist/modules/wallets/connectAndVerifyWithWalletProvider/connectAndVerifyWithWalletProvider.d.ts +4 -1
  79. package/dist/modules/wallets/connectAndVerifyWithWalletProvider/connectAndVerifyWithWalletProvider.d.ts.map +1 -1
  80. package/dist/modules/wallets/connectWithWalletProvider/connectWithWalletProvider.d.ts +4 -1
  81. package/dist/modules/wallets/connectWithWalletProvider/connectWithWalletProvider.d.ts.map +1 -1
  82. package/dist/modules/wallets/hardwareWallet/canConnectWithHardwareWallet/canConnectWithHardwareWallet.d.ts +16 -0
  83. package/dist/modules/wallets/hardwareWallet/canConnectWithHardwareWallet/canConnectWithHardwareWallet.d.ts.map +1 -0
  84. package/dist/modules/wallets/hardwareWallet/canConnectWithHardwareWallet/index.d.ts +2 -0
  85. package/dist/modules/wallets/hardwareWallet/canConnectWithHardwareWallet/index.d.ts.map +1 -0
  86. package/dist/modules/wallets/hardwareWallet/formatSignatureForHardwareWallet/formatSignatureForHardwareWallet.d.ts +15 -0
  87. package/dist/modules/wallets/hardwareWallet/formatSignatureForHardwareWallet/formatSignatureForHardwareWallet.d.ts.map +1 -0
  88. package/dist/modules/wallets/hardwareWallet/formatSignatureForHardwareWallet/index.d.ts +2 -0
  89. package/dist/modules/wallets/hardwareWallet/formatSignatureForHardwareWallet/index.d.ts.map +1 -0
  90. package/dist/modules/wallets/hardwareWallet/hardwareWallet.types.d.ts +5 -0
  91. package/dist/modules/wallets/hardwareWallet/hardwareWallet.types.d.ts.map +1 -0
  92. package/dist/modules/wallets/hardwareWallet/isHardwareWalletAccount/index.d.ts +2 -0
  93. package/dist/modules/wallets/hardwareWallet/isHardwareWalletAccount/index.d.ts.map +1 -0
  94. package/dist/modules/wallets/hardwareWallet/isHardwareWalletAccount/isHardwareWalletAccount.d.ts +13 -0
  95. package/dist/modules/wallets/hardwareWallet/isHardwareWalletAccount/isHardwareWalletAccount.d.ts.map +1 -0
  96. package/dist/modules/wallets/unverifiedWalletAccounts/schema.d.ts +1 -0
  97. package/dist/modules/wallets/unverifiedWalletAccounts/schema.d.ts.map +1 -1
  98. package/dist/modules/wallets/utils/convertVerifiedCredentialToWalletAccount/convertVerifiedCredentialToWalletAccount.d.ts.map +1 -1
  99. package/dist/modules/wallets/verifyMessageSignatureOwnership/verifyMessageSignatureOwnership.d.ts +3 -2
  100. package/dist/modules/wallets/verifyMessageSignatureOwnership/verifyMessageSignatureOwnership.d.ts.map +1 -1
  101. package/dist/modules/wallets/verifyWalletAccount/verifyWalletAccount.d.ts +3 -1
  102. package/dist/modules/wallets/verifyWalletAccount/verifyWalletAccount.d.ts.map +1 -1
  103. package/dist/modules/wallets/verifyWalletAccountForSignInOrTransfer/verifyWalletAccountForSignInOrTransfer.d.ts +3 -1
  104. package/dist/modules/wallets/verifyWalletAccountForSignInOrTransfer/verifyWalletAccountForSignInOrTransfer.d.ts.map +1 -1
  105. package/dist/modules/wallets/walletAccount/walletAccount.types.d.ts +2 -0
  106. package/dist/modules/wallets/walletAccount/walletAccount.types.d.ts.map +1 -1
  107. package/dist/modules/wallets/walletProvider/walletProvider.types.d.ts +5 -0
  108. package/dist/modules/wallets/walletProvider/walletProvider.types.d.ts.map +1 -1
  109. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  110. package/dist/waas.cjs.js +4 -4
  111. package/dist/waas.esm.js +3 -3
  112. package/dist/waasCore.cjs.js +4 -4
  113. package/dist/waasCore.esm.js +3 -3
  114. package/package.json +3 -3
  115. package/dist/getSignedSessionId-BO9omMlI.cjs.js.map +0 -1
  116. package/dist/getSignedSessionId-BvQ4i928.esm.js.map +0 -1
  117. package/dist/getVerifiedCredentialForWalletAccount-54lCppnJ.esm.js.map +0 -1
  118. package/dist/getVerifiedCredentialForWalletAccount-BW8iluei.cjs.js.map +0 -1
package/dist/index.esm.js CHANGED
@@ -1,12 +1,12 @@
1
- import { A as version, D as BaseError, O as getCore, S as CLIENT_SDK_NAME, T as setDefaultClient, _ as getBuffer, a as DYNAMIC_ICONIC_SPRITE_URL, b as ValueMustBeDefinedError, c as CHAINS_INFO_MAP, d as MfaRateLimitedError, f as MfaInvalidOtpError, h as APIError, k as name, l as createApiClient, m as InvalidExternalAuthError, o as SDK_API_CORE_VERSION, p as LinkCredentialError, s as getChainFromVerifiedCredentialChain, t as InvalidParamError, u as SandboxMaximumThresholdReachedError, v as isCookieEnabled, w as getDefaultClient, x as randomString, y as assertDefined } from "./InvalidParamError-DMz6QY8e.esm.js";
2
- import { C as isServerSideRendering, D as REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY, E as INITIALIZE_STORAGE_SYNC_TRACKER_KEY, M as subscribeWithSelector, N as isEqualShallow, O as createStorageKeySchema, S as createDeferredPromise, T as GENERATE_SESSION_KEYS_TRACKER_KEY, _ as NoNetworkProvidersError, a as updateWalletProviderKeysForVerifiedCredentials, c as createSignInMessageStatement, d as createVisit, f as hasExtension, g as WalletAlreadyLinkedToAnotherUserError, h as isCaptchaRequired, i as getNetworksData, j as createLocalStorageAdapter, k as createStorage, l as formatSignInMessage, m as consumeCaptchaToken, o as verifyMessageSignatureOwnership, p as setCaptchaToken, s as removeUnverifiedWalletAccount, t as getNetworkProviderFromNetworkId, u as setUnverifiedWalletAccounts, v as createLogger, w as FETCH_PROJECT_SETTINGS_TRACKER_KEY, x as CannotTrackError, y as createCrossTabBroadcast } from "./getNetworkProviderFromNetworkId-CmLsKY7E.esm.js";
3
- import { D as onceEvent, E as onEvent, O as setCookie, S as splitWalletProviderKey, T as offEvent, _ as getWalletAccounts, b as formatWalletAccountId, c as getWalletProviders, d as DYNAMIC_AUTH_COOKIE_NAME, f as getWalletProviderFromWalletAccount, g as NoWalletProviderFoundError, i as restoreUserSharesForAllWalletAccounts, l as checkAndRaiseWalletAccountsChangedEvent, n as getWalletProviderByKey, r as updateAuthFromVerifyResponse, t as getVerifiedCredentialForWalletAccount, u as emitWalletAccountsChangedEvent, w as emitEvent, x as normalizeAddress } from "./getVerifiedCredentialForWalletAccount-54lCppnJ.esm.js";
4
- import { i as bufferToHex, n as getMfaMethods, r as consumeMfaToken, t as isMfaRequiredForAction } from "./isMfaRequiredForAction-DIvUT6_k.esm.js";
5
- import { n as refreshAuth, t as NotWaasWalletAccountError } from "./NotWaasWalletAccountError-Cp3qfAxw.esm.js";
1
+ import { A as version, D as BaseError, O as getCore, S as CLIENT_SDK_NAME, T as setDefaultClient, _ as getBuffer, a as DYNAMIC_ICONIC_SPRITE_URL, b as ValueMustBeDefinedError, c as CHAINS_INFO_MAP, d as MfaRateLimitedError, f as MfaInvalidOtpError, h as APIError, k as name, l as createApiClient, m as InvalidExternalAuthError, o as SDK_API_CORE_VERSION, p as LinkCredentialError, s as getChainFromVerifiedCredentialChain, t as InvalidParamError, u as SandboxMaximumThresholdReachedError, v as isCookieEnabled, w as getDefaultClient, x as randomString, y as assertDefined } from "./InvalidParamError-DNXaHtXP.esm.js";
2
+ import { C as isServerSideRendering, D as REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY, E as INITIALIZE_STORAGE_SYNC_TRACKER_KEY, M as subscribeWithSelector, N as isEqualShallow, O as createStorageKeySchema, S as createDeferredPromise, T as GENERATE_SESSION_KEYS_TRACKER_KEY, _ as NoNetworkProvidersError, a as updateWalletProviderKeysForVerifiedCredentials, c as createSignInMessageStatement, d as createVisit, f as hasExtension, g as WalletAlreadyLinkedToAnotherUserError, h as isCaptchaRequired, i as getNetworksData, j as createLocalStorageAdapter, k as createStorage, l as formatSignInMessage, m as consumeCaptchaToken, o as verifyMessageSignatureOwnership, p as setCaptchaToken, s as removeUnverifiedWalletAccount, t as getNetworkProviderFromNetworkId, u as setUnverifiedWalletAccounts, v as createLogger, w as FETCH_PROJECT_SETTINGS_TRACKER_KEY, x as CannotTrackError, y as createCrossTabBroadcast } from "./getNetworkProviderFromNetworkId-27Zwy4je.esm.js";
3
+ import { D as onceEvent, E as onEvent, O as setCookie, S as splitWalletProviderKey, T as offEvent, _ as getWalletAccounts, b as formatWalletAccountId, c as getWalletProviders, d as DYNAMIC_AUTH_COOKIE_NAME, f as getWalletProviderFromWalletAccount, g as NoWalletProviderFoundError, i as restoreUserSharesForAllWalletAccounts, l as checkAndRaiseWalletAccountsChangedEvent, n as getWalletProviderByKey, r as updateAuthFromVerifyResponse, t as getVerifiedCredentialForWalletAccount, u as emitWalletAccountsChangedEvent, w as emitEvent, x as normalizeAddress } from "./getVerifiedCredentialForWalletAccount-DsCAOgMb.esm.js";
4
+ import { i as bufferToHex, n as getMfaMethods, r as consumeMfaToken, t as isMfaRequiredForAction } from "./isMfaRequiredForAction-BG_7iYqV.esm.js";
5
+ import { n as refreshAuth, t as NotWaasWalletAccountError } from "./NotWaasWalletAccountError-DVph5-w8.esm.js";
6
6
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
7
7
  import { AuthModeEnum, ExchangeKeyEnum, JwtVerifiedCredentialFormatEnum, MFAAction, MfaBackupCodeAcknowledgement, ProviderEnum, WaasBackupOptionsEnum } from "@dynamic-labs/sdk-api-core";
8
8
  import * as z from "zod/mini";
9
- import EventEmitter$1, { EventEmitter } from "eventemitter3";
9
+ import EventEmitter, { EventEmitter as EventEmitter$1 } from "eventemitter3";
10
10
  import { browserSupportsWebAuthn, startAuthentication, startRegistration } from "@simplewebauthn/browser";
11
11
 
12
12
  //#region src/modules/state/raiseStateEvents/events.ts
@@ -259,6 +259,7 @@ const logout = async (client = getDefaultClient()) => {
259
259
  }
260
260
  core.state.set({
261
261
  captchaToken: null,
262
+ elevatedAccessTokens: [],
262
263
  legacyToken: null,
263
264
  mfaToken: null,
264
265
  sessionExpiresAt: null,
@@ -319,6 +320,36 @@ const initializeAuth = (client) => {
319
320
  checkExpiration();
320
321
  };
321
322
 
323
+ //#endregion
324
+ //#region src/modules/crossTabEventSync/setupCrossTabEventSync/setupCrossTabEventSync.ts
325
+ /**
326
+ * Sets up bidirectional event synchronization between the core event emitter
327
+ * and the CrossTabBroadcast service.
328
+ *
329
+ * This enables events fired in one tab to be received in other tabs.
330
+ *
331
+ * **Local → Cross-Tab (Forwarding)**
332
+ * - Listens to specific events on core.eventEmitter
333
+ * - Forwards them to other tabs via core.crossTabBroadcast.send()
334
+ *
335
+ * **Cross-Tab → Local (Receiving)**
336
+ * - Listens to cross-tab events via core.crossTabBroadcast.on()
337
+ * - Emits corresponding "*InAnotherTab" events on core.eventEmitter
338
+ *
339
+ * @param client - The Dynamic client instance
340
+ */
341
+ const setupCrossTabEventSync = (client) => {
342
+ const core = getCore(client);
343
+ const handleDeviceRegistrationCompleted = () => {
344
+ core.crossTabBroadcast.send({ event: "deviceRegistrationCompleted" });
345
+ };
346
+ core.eventEmitter.on("deviceRegistrationCompleted", handleDeviceRegistrationCompleted);
347
+ const handleCrossTabDeviceRegistrationCompleted = () => {
348
+ emitEvent({ event: "deviceRegistrationCompletedInAnotherTab" }, client);
349
+ };
350
+ core.crossTabBroadcast.on("deviceRegistrationCompleted", handleCrossTabDeviceRegistrationCompleted);
351
+ };
352
+
322
353
  //#endregion
323
354
  //#region src/modules/state/raiseStateEvents/raiseStateEvents.ts
324
355
  const raiseStateEvents = (client) => {
@@ -343,6 +374,7 @@ const unverifiedWalletAccountSchema = z.object({
343
374
  type: z.custom((val) => typeof val === "string")
344
375
  }))),
345
376
  chain: z.custom((val) => typeof val === "string"),
377
+ hardwareWalletVendor: z.optional(z.custom((val) => typeof val === "string")),
346
378
  id: z.string(),
347
379
  lastSelectedAt: z.nullable(z.date()),
348
380
  walletProviderKey: z.string()
@@ -368,6 +400,12 @@ const sessionStorageKeySchema = createStorageKeySchema({
368
400
  key: "session",
369
401
  schema: z.object({
370
402
  captchaToken: z.nullable(z.string()),
403
+ elevatedAccessTokens: z.array(z.object({
404
+ expiresAt: z.number(),
405
+ scopes: z.array(z.string()),
406
+ singleUse: z.nullable(z.boolean()),
407
+ token: z.string()
408
+ })),
371
409
  legacyToken: z.nullable(z.string()),
372
410
  mfaToken: z.nullable(z.string()),
373
411
  sessionExpiration: z.number(),
@@ -389,6 +427,12 @@ const hydrateStateWithStorage = async (client) => {
389
427
  stateChanges.legacyToken = session.legacyToken;
390
428
  stateChanges.sessionExpiresAt = new Date(session.sessionExpiration);
391
429
  stateChanges.mfaToken = session.mfaToken;
430
+ stateChanges.elevatedAccessTokens = session.elevatedAccessTokens.map((token) => ({
431
+ expiresAt: new Date(token.expiresAt),
432
+ scopes: token.scopes,
433
+ singleUse: token.singleUse ?? false,
434
+ token: token.token
435
+ }));
392
436
  stateChanges.captchaToken = session.captchaToken;
393
437
  stateChanges.sessionKeys = session.sessionKeys;
394
438
  }
@@ -411,6 +455,12 @@ const syncStateWithStorage = (client) => {
411
455
  if (state.sessionExpiresAt === null) core.storage.removeItem(sessionStorageKeySchema);
412
456
  else core.storage.setItem(sessionStorageKeySchema, {
413
457
  captchaToken: state.captchaToken,
458
+ elevatedAccessTokens: (state.elevatedAccessTokens || []).map((token) => ({
459
+ expiresAt: token.expiresAt.getTime(),
460
+ scopes: token.scopes,
461
+ singleUse: token.singleUse ?? null,
462
+ token: token.token
463
+ })),
414
464
  legacyToken: state.legacyToken,
415
465
  mfaToken: state.mfaToken,
416
466
  sessionExpiration: state.sessionExpiresAt.getTime(),
@@ -470,6 +520,7 @@ const initializeClient = async (client = getDefaultClient()) => {
470
520
  core.state.set({ initStatus: "in-progress" });
471
521
  initializeAuth(client);
472
522
  raiseStateEvents(client);
523
+ setupCrossTabEventSync(client);
473
524
  const initializeStorageSyncPromise = initializeStorageSync(client);
474
525
  const fetchProjectSettingsPromise = initializeStorageSyncPromise.then(async () => {
475
526
  if (!core.state.get().projectSettings) await fetchProjectSettings(client);
@@ -545,7 +596,7 @@ const createAsyncTrack = () => {
545
596
  * This ensures no process is missed (as it would throw when tracked on a different node tick).
546
597
  */
547
598
  let isTrackEnabled = true;
548
- const eventEmitter = new EventEmitter();
599
+ const eventEmitter = new EventEmitter$1();
549
600
  const allSettledPromise = createDeferredPromise();
550
601
  const tracker = /* @__PURE__ */ new Map();
551
602
  /**
@@ -591,7 +642,7 @@ const createAsyncTrack = () => {
591
642
 
592
643
  //#endregion
593
644
  //#region src/services/eventEmitter/createEventEmitter.ts
594
- const createEventEmitter = () => new EventEmitter$1();
645
+ const createEventEmitter = () => new EventEmitter();
595
646
 
596
647
  //#endregion
597
648
  //#region src/errors/UnavailableInServerSideError.ts
@@ -899,6 +950,20 @@ const createDynamicClient = (config) => {
899
950
  return client;
900
951
  };
901
952
 
953
+ //#endregion
954
+ //#region src/errors/FeeEstimationFailedError.ts
955
+ var FeeEstimationFailedError = class extends BaseError {
956
+ constructor(params) {
957
+ super({
958
+ cause: params.cause || null,
959
+ code: "fee_estimation_failed_error",
960
+ docsUrl: null,
961
+ name: "FeeEstimationFailedError",
962
+ shortMessage: params.message
963
+ });
964
+ }
965
+ };
966
+
902
967
  //#endregion
903
968
  //#region src/errors/InvalidDeviceRegistrationRedirectError.ts
904
969
  var InvalidDeviceRegistrationRedirectError = class extends BaseError {
@@ -1083,6 +1148,20 @@ var NoWebAuthNSupportError = class extends BaseError {
1083
1148
  }
1084
1149
  };
1085
1150
 
1151
+ //#endregion
1152
+ //#region src/errors/SimulationFailedError.ts
1153
+ var SimulationFailedError = class extends BaseError {
1154
+ constructor(params) {
1155
+ super({
1156
+ cause: params.cause || null,
1157
+ code: "simulation_failed_error",
1158
+ docsUrl: null,
1159
+ name: "SimulationFailedError",
1160
+ shortMessage: params.message
1161
+ });
1162
+ }
1163
+ };
1164
+
1086
1165
  //#endregion
1087
1166
  //#region src/errors/UnrecognizedNetworkError.ts
1088
1167
  var UnrecognizedNetworkError = class extends BaseError {
@@ -1683,6 +1762,18 @@ const getMultichainBalances = async ({ balanceRequest }, client = getDefaultClie
1683
1762
  })).chainBalances;
1684
1763
  };
1685
1764
 
1765
+ //#endregion
1766
+ //#region src/modules/deviceRegistration/completeDeviceRegistration/completeDeviceRegistration.ts
1767
+ const DEVICE_REGISTRATION_TOKEN_HEADER = "x-dynamic-device-registration-token";
1768
+ const completeDeviceRegistration = async ({ deviceToken }, client = getDefaultClient()) => {
1769
+ assertDefined(deviceToken, "deviceToken is required");
1770
+ const core = getCore(client);
1771
+ const response = await createApiClient({ headers: { [DEVICE_REGISTRATION_TOKEN_HEADER]: deviceToken } }, client).deviceRegistration({ environmentId: core.environmentId });
1772
+ updateAuthFromVerifyResponse({ response }, client);
1773
+ emitEvent({ event: "deviceRegistrationCompleted" }, client);
1774
+ return response;
1775
+ };
1776
+
1686
1777
  //#endregion
1687
1778
  //#region src/modules/deviceRegistration/getDeviceRegistrationTokenFromUrl/getDeviceRegistrationTokenFromUrl.ts
1688
1779
  /**
@@ -3753,13 +3844,14 @@ const verifyOTPForUserSignIn = async ({ otpVerification, verificationToken }, cl
3753
3844
 
3754
3845
  //#endregion
3755
3846
  //#region src/modules/otp/verifyOTP/verifyOTPForUserUpdate/verifyOTPForUserUpdate.ts
3756
- const verifyOTPForUserUpdate = async ({ otpVerification, verificationToken }, client) => {
3847
+ const verifyOTPForUserUpdate = async ({ otpVerification, verificationToken, requestedScopes }, client) => {
3757
3848
  const core = getCore(client);
3758
3849
  const apiClient = createApiClient({}, client);
3759
3850
  const verifyRequest = {
3760
3851
  verificationToken,
3761
3852
  verificationUUID: otpVerification.verificationUUID
3762
3853
  };
3854
+ if (requestedScopes) verifyRequest.requestedScopes = requestedScopes;
3763
3855
  if (otpVerification.email) return apiClient.verifyEmailVerification({
3764
3856
  emailVerificationVerifyRequest: verifyRequest,
3765
3857
  environmentId: core.environmentId
@@ -3783,8 +3875,14 @@ const verifyOTPForUserUpdate = async ({ otpVerification, verificationToken }, cl
3783
3875
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
3784
3876
  * @returns A promise that resolves to the verify response object upon successful verification.
3785
3877
  */
3786
- const verifyOTP = async ({ otpVerification, verificationToken }, client = getDefaultClient()) => {
3787
- const response = await (client.user ? verifyOTPForUserUpdate : verifyOTPForUserSignIn)({
3878
+ const verifyOTP = async ({ otpVerification, verificationToken, requestedScopes }, client = getDefaultClient()) => {
3879
+ let response;
3880
+ if (client.user) response = await verifyOTPForUserUpdate({
3881
+ otpVerification,
3882
+ requestedScopes,
3883
+ verificationToken
3884
+ }, client);
3885
+ else response = await verifyOTPForUserSignIn({
3788
3886
  otpVerification,
3789
3887
  verificationToken
3790
3888
  }, client);
@@ -3918,11 +4016,12 @@ const getAddressesWithTypesFromConnectionResult = (connectionResult) => {
3918
4016
  *
3919
4017
  * @param params.walletProviderKey - The unique key identifying the wallet provider to connect to (e.g. 'metamaskevm', 'phantomsol').
3920
4018
  * @param [params.addToDynamicWalletAccounts] - Whether to add the connected wallet account to the user's wallet accounts. Defaults to true.
4019
+ * @param [params.hardwareWalletVendor] - The hardware wallet vendor, if connecting via a hardware wallet (e.g. 'ledger').
3921
4020
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
3922
4021
  * @returns A promise that resolves to the connected wallet account.
3923
4022
  * @throws NoAddressFoundError If the request to connect was successful but no address is connected to your app.
3924
4023
  */
3925
- const connectWithWalletProvider = async ({ walletProviderKey, addToDynamicWalletAccounts = true }, client = getDefaultClient()) => {
4024
+ const connectWithWalletProvider = async ({ walletProviderKey, addToDynamicWalletAccounts = true, hardwareWalletVendor }, client = getDefaultClient()) => {
3926
4025
  const walletProvider = getWalletProviderByKey({ walletProviderKey }, client);
3927
4026
  assertWalletProviderMethodDefined(walletProvider, "connect");
3928
4027
  const { addresses } = await walletProvider.connect();
@@ -3938,6 +4037,7 @@ const connectWithWalletProvider = async ({ walletProviderKey, addToDynamicWallet
3938
4037
  address: mainAddress,
3939
4038
  addressesWithTypes: getAddressesWithTypesFromConnectionResult({ addresses }),
3940
4039
  chain: walletProvider.chain,
4040
+ hardwareWalletVendor,
3941
4041
  id: formatWalletAccountId({
3942
4042
  address: mainAddress,
3943
4043
  chain: walletProvider.chain,
@@ -3956,6 +4056,17 @@ const connectWithWalletProvider = async ({ walletProviderKey, addToDynamicWallet
3956
4056
  return walletAccount;
3957
4057
  };
3958
4058
 
4059
+ //#endregion
4060
+ //#region src/modules/wallets/hardwareWallet/formatSignatureForHardwareWallet/formatSignatureForHardwareWallet.ts
4061
+ /**
4062
+ * Wraps a raw signature in the JSON format expected by the backend for hardware wallet verification.
4063
+ *
4064
+ * @param params.hardwareWalletVendor - The hardware wallet vendor that produced the signature.
4065
+ * @param params.signature - The raw signature string to wrap.
4066
+ * @returns The signature wrapped in `{ signedTransaction: { data } }` JSON format.
4067
+ */
4068
+ const formatSignatureForHardwareWallet = ({ signature, hardwareWalletVendor: _ }) => JSON.stringify({ signedTransaction: { data: signature } });
4069
+
3959
4070
  //#endregion
3960
4071
  //#region src/modules/wallets/utils/getChainIdForAccountVerification/getChainIdForAccountVerification.ts
3961
4072
  const getChainIdForAccountVerification = async ({ walletProvider }) => {
@@ -4037,10 +4148,14 @@ const isSameAddress = (left, right, chain) => normalizeAddress(left, chain) ===
4037
4148
 
4038
4149
  //#endregion
4039
4150
  //#region src/modules/wallets/verifyWalletAccountForSignInOrTransfer/verifyWalletAccountForSignInOrTransfer.ts
4040
- const verifyWalletAccountForSignInOrTransfer = async ({ walletAccount, isTransfer }, client) => {
4151
+ const verifyWalletAccountForSignInOrTransfer = async ({ walletAccount, isTransfer, requestedScopes }, client) => {
4041
4152
  if (walletAccount.verifiedCredentialId) throw new WalletAccountAlreadyVerifiedError(walletAccount.address);
4042
4153
  const walletProvider = getWalletProviderFromWalletAccount({ walletAccount }, client);
4043
4154
  const { messageToSign, signature } = await proveWalletAccountOwnership({ walletAccount }, client);
4155
+ const formattedSignature = walletAccount.hardwareWalletVendor ? formatSignatureForHardwareWallet({
4156
+ hardwareWalletVendor: walletAccount.hardwareWalletVendor,
4157
+ signature
4158
+ }) : signature;
4044
4159
  const { networkId } = await walletProvider.getActiveNetworkId();
4045
4160
  const response = await verifyMessageSignatureOwnership({
4046
4161
  addressesWithTypes: walletAccount.addressesWithTypes,
@@ -4048,7 +4163,8 @@ const verifyWalletAccountForSignInOrTransfer = async ({ walletAccount, isTransfe
4048
4163
  isTransfer,
4049
4164
  messageToSign,
4050
4165
  networkId,
4051
- signature,
4166
+ requestedScopes,
4167
+ signature: formattedSignature,
4052
4168
  walletAddress: walletAccount.address,
4053
4169
  walletDisplayName: walletProvider.metadata.displayName,
4054
4170
  walletProviderType: walletProvider.walletProviderType
@@ -4084,9 +4200,10 @@ const verifyWalletAccountForSignInOrTransfer = async ({ walletAccount, isTransfe
4084
4200
  * @throws WalletAccountAlreadyVerifiedError If the wallet is already verified.
4085
4201
  * @throws WalletAlreadyLinkedToAnotherUserError If the wallet is linked to another user.
4086
4202
  */
4087
- const verifyWalletAccount = async ({ walletAccount }, client = getDefaultClient()) => {
4203
+ const verifyWalletAccount = async ({ walletAccount, requestedScopes }, client = getDefaultClient()) => {
4088
4204
  return verifyWalletAccountForSignInOrTransfer({
4089
4205
  isTransfer: false,
4206
+ requestedScopes,
4090
4207
  walletAccount
4091
4208
  }, client);
4092
4209
  };
@@ -4101,12 +4218,14 @@ const verifyWalletAccount = async ({ walletAccount }, client = getDefaultClient(
4101
4218
  * the wallet account is added to their profile.
4102
4219
  *
4103
4220
  * @param params.walletProviderKey - The unique key identifying the wallet provider to connect to.
4221
+ * @param [params.hardwareWalletVendor] - The hardware wallet vendor, if connecting via a hardware wallet (e.g. 'ledger').
4104
4222
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
4105
4223
  * @returns A promise that resolves to the connected and verified wallet account.
4106
4224
  */
4107
- const connectAndVerifyWithWalletProvider = async ({ walletProviderKey }, client = getDefaultClient()) => {
4225
+ const connectAndVerifyWithWalletProvider = async ({ walletProviderKey, hardwareWalletVendor }, client = getDefaultClient()) => {
4108
4226
  const walletAccount = await connectWithWalletProvider({
4109
4227
  addToDynamicWalletAccounts: false,
4228
+ hardwareWalletVendor,
4110
4229
  walletProviderKey
4111
4230
  }, client);
4112
4231
  await verifyWalletAccount({ walletAccount }, client);
@@ -4188,6 +4307,30 @@ const getWalletProviderDataByKey = ({ walletProviderKey }, client = getDefaultCl
4188
4307
  };
4189
4308
  };
4190
4309
 
4310
+ //#endregion
4311
+ //#region src/modules/wallets/hardwareWallet/canConnectWithHardwareWallet/canConnectWithHardwareWallet.ts
4312
+ /**
4313
+ * Checks whether a wallet provider supports connecting with a specific hardware wallet vendor.
4314
+ *
4315
+ * @param params.walletProviderKey - The key of the wallet provider to check.
4316
+ * @param params.hardwareWalletVendor - The hardware wallet vendor to check for.
4317
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
4318
+ * @returns Whether the wallet provider supports the specified hardware wallet vendor.
4319
+ */
4320
+ const canConnectWithHardwareWallet = ({ walletProviderKey, hardwareWalletVendor }, client = getDefaultClient()) => {
4321
+ return getWalletProviderByKey({ walletProviderKey }, client).metadata.supportedHardwareWalletVendors?.includes(hardwareWalletVendor) ?? false;
4322
+ };
4323
+
4324
+ //#endregion
4325
+ //#region src/modules/wallets/hardwareWallet/isHardwareWalletAccount/isHardwareWalletAccount.ts
4326
+ /**
4327
+ * Checks whether a wallet account was connected via a hardware wallet.
4328
+ *
4329
+ * @param params.walletAccount - The wallet account to check.
4330
+ * @returns Whether the wallet account has a hardware wallet vendor set.
4331
+ */
4332
+ const isHardwareWalletAccount = ({ walletAccount }) => walletAccount.hardwareWalletVendor !== void 0;
4333
+
4191
4334
  //#endregion
4192
4335
  //#region src/modules/wallets/isWalletAccountVerified/isWalletAccountVerified.ts
4193
4336
  /**
@@ -4556,5 +4699,5 @@ const isIPad = (maxTouchPointsOverride) => {
4556
4699
  assertPackageVersion(name, version);
4557
4700
 
4558
4701
  //#endregion
4559
- export { BaseError, ClientAlreadyInitializedError, InvalidDeviceRegistrationRedirectError, InvalidExternalAuthError, InvalidParamError, InvalidRedirectStorageStateError, LinkCredentialError, MFAAction, MfaInvalidOtpError, MfaRateLimitedError, MissingRedirectStorageStateError, MissingSocialUrlParamError, MissingUserVerificationError, NetworkAddingUnavailableError, NetworkNotAddedError, NetworkSwitchingUnavailableError, NoAddressFoundError, NoNetworkProvidersError, NoPasskeyCredentialsFoundError, NoSmartWalletAccountSignerFoundError, NoWebAuthNSupportError, NotWaasWalletAccountError, SandboxMaximumThresholdReachedError, UnavailableInServerSideError, UnrecognizedNetworkError, UserNotAuthenticatedError, UserRejectedError, WalletAccountAlreadyVerifiedError, WalletAccountNotSelectedError, WalletAlreadyLinkedToAnotherUserError, WalletProviderMethodUnavailableError, acknowledgeRecoveryCodes, addCoinbaseOnrampOrderEventListener, addNetwork, assertWalletAccountSigningAvailability, assertWalletProviderMethodDefined, authenticateMfaRecoveryCode, authenticatePasskeyMFA, authenticateTotpMfaDevice, authenticateWithSocial, completeSocialAuthentication, connectAndVerifyWithWalletProvider, connectWithWalletProvider, consumeMfaToken, createCoinbaseOnrampOrder, createCryptoDotComPayment, createDynamicClient, createKrakenExchangeTransfer, createNewMfaRecoveryCodes, deleteMfaDevice, deletePasskey, deleteUser, detectDeviceRegistrationRedirect, detectOAuthRedirect, fetchProjectSettings, getActiveNetworkData, getActiveNetworkId, getAvailableWalletProvidersData, getBalance, getBalanceForAddress, getCoinbaseBuyUrl, getConnectedAddresses, getDefaultClient, getDeviceRegistrationTokenFromUrl, getElevatedAccessToken, getKrakenAccounts, getKrakenWhitelistedAddresses, getMfaDevices, getMfaMethods, getMfaRecoveryCodes, getMissingVerificationForCoinbaseOnrampOrder, getMultichainBalances, getNetworksData, getOwnerWalletAccountForSmartWalletAccount, getPasskeys, getPrimaryWalletAccount, getTransactionHistory, getUserSocialAccounts, getWalletAccountAddressByType, getWalletAccountFromAddress, getWalletAccounts, getWalletConnectCatalog, getWalletConnectCatalogWalletByWalletProviderKey, getWalletProviderDataByKey, hasExtension, initializeClient, isCaptchaRequired, isDeviceRegistrationRequired, isMfaRequiredForAction, isMobile, isPendingRecoveryCodesAcknowledgment, isProgrammaticNetworkSwitchAvailable, isSignedIn, isUserMissingMfaAuth, isUserOnboardingComplete, isWalletAccountVerified, logout, offEvent, offWalletProviderEvent, onEvent, onWalletProviderEvent, onceEvent, proveWalletAccountOwnership, refreshAuth, refreshUser, registerPasskey, registerTotpMfaDevice, removeWalletAccount, selectPrimaryWalletAccount, sendEmailOTP, sendSmsOTP, setCaptchaToken, setDefaultMfaDevice, signInWithExternalJwt, signInWithPasskey, signMessage, switchActiveNetwork, transferWalletAccount, unlinkSocialAccount, updateUser, verifyOTP, verifyWalletAccount, waitForClientInitialized };
4702
+ export { BaseError, ClientAlreadyInitializedError, FeeEstimationFailedError, InvalidDeviceRegistrationRedirectError, InvalidExternalAuthError, InvalidParamError, InvalidRedirectStorageStateError, LinkCredentialError, MFAAction, MfaInvalidOtpError, MfaRateLimitedError, MissingRedirectStorageStateError, MissingSocialUrlParamError, MissingUserVerificationError, NetworkAddingUnavailableError, NetworkNotAddedError, NetworkSwitchingUnavailableError, NoAddressFoundError, NoNetworkProvidersError, NoPasskeyCredentialsFoundError, NoSmartWalletAccountSignerFoundError, NoWebAuthNSupportError, NotWaasWalletAccountError, SandboxMaximumThresholdReachedError, SimulationFailedError, UnavailableInServerSideError, UnrecognizedNetworkError, UserNotAuthenticatedError, UserRejectedError, WalletAccountAlreadyVerifiedError, WalletAccountNotSelectedError, WalletAlreadyLinkedToAnotherUserError, WalletProviderMethodUnavailableError, acknowledgeRecoveryCodes, addCoinbaseOnrampOrderEventListener, addNetwork, assertWalletAccountSigningAvailability, assertWalletProviderMethodDefined, authenticateMfaRecoveryCode, authenticatePasskeyMFA, authenticateTotpMfaDevice, authenticateWithSocial, canConnectWithHardwareWallet, completeDeviceRegistration, completeSocialAuthentication, connectAndVerifyWithWalletProvider, connectWithWalletProvider, consumeMfaToken, createCoinbaseOnrampOrder, createCryptoDotComPayment, createDynamicClient, createKrakenExchangeTransfer, createNewMfaRecoveryCodes, deleteMfaDevice, deletePasskey, deleteUser, detectDeviceRegistrationRedirect, detectOAuthRedirect, fetchProjectSettings, getActiveNetworkData, getActiveNetworkId, getAvailableWalletProvidersData, getBalance, getBalanceForAddress, getCoinbaseBuyUrl, getConnectedAddresses, getDefaultClient, getDeviceRegistrationTokenFromUrl, getElevatedAccessToken, getKrakenAccounts, getKrakenWhitelistedAddresses, getMfaDevices, getMfaMethods, getMfaRecoveryCodes, getMissingVerificationForCoinbaseOnrampOrder, getMultichainBalances, getNetworksData, getOwnerWalletAccountForSmartWalletAccount, getPasskeys, getPrimaryWalletAccount, getTransactionHistory, getUserSocialAccounts, getWalletAccountAddressByType, getWalletAccountFromAddress, getWalletAccounts, getWalletConnectCatalog, getWalletConnectCatalogWalletByWalletProviderKey, getWalletProviderDataByKey, hasExtension, initializeClient, isCaptchaRequired, isDeviceRegistrationRequired, isHardwareWalletAccount, isMfaRequiredForAction, isMobile, isPendingRecoveryCodesAcknowledgment, isProgrammaticNetworkSwitchAvailable, isSignedIn, isUserMissingMfaAuth, isUserOnboardingComplete, isWalletAccountVerified, logout, offEvent, offWalletProviderEvent, onEvent, onWalletProviderEvent, onceEvent, proveWalletAccountOwnership, refreshAuth, refreshUser, registerPasskey, registerTotpMfaDevice, removeWalletAccount, selectPrimaryWalletAccount, sendEmailOTP, sendSmsOTP, setCaptchaToken, setDefaultMfaDevice, signInWithExternalJwt, signInWithPasskey, signMessage, supportedCountries, switchActiveNetwork, transferWalletAccount, unlinkSocialAccount, updateUser, verifyOTP, verifyWalletAccount, waitForClientInitialized };
4560
4703
  //# sourceMappingURL=index.esm.js.map