@dynamic-labs-sdk/client 0.18.1 → 0.20.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 (113) hide show
  1. package/dist/{InvalidParamError-CGBIFNgP.esm.js → InvalidParamError-C8i6ExCF.esm.js} +3 -3
  2. package/dist/{InvalidParamError-CGBIFNgP.esm.js.map → InvalidParamError-C8i6ExCF.esm.js.map} +1 -1
  3. package/dist/{InvalidParamError-0w8-q2f3.cjs.js → InvalidParamError-C9egR24p.cjs.js} +4 -4
  4. package/dist/{InvalidParamError-0w8-q2f3.cjs.js.map → InvalidParamError-C9egR24p.cjs.js.map} +1 -1
  5. package/dist/{NotWaasWalletAccountError-CT_IUD-3.esm.js → NotWaasWalletAccountError-BI9ZiEz_.esm.js} +3 -3
  6. package/dist/{NotWaasWalletAccountError-CT_IUD-3.esm.js.map → NotWaasWalletAccountError-BI9ZiEz_.esm.js.map} +1 -1
  7. package/dist/{NotWaasWalletAccountError-CyvI1KtC.cjs.js → NotWaasWalletAccountError-DoCmrSvg.cjs.js} +3 -3
  8. package/dist/{NotWaasWalletAccountError-CyvI1KtC.cjs.js.map → NotWaasWalletAccountError-DoCmrSvg.cjs.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 -7
  12. package/dist/core.esm.js.map +1 -1
  13. package/dist/errors/TokenSwapError.d.ts +10 -0
  14. package/dist/errors/TokenSwapError.d.ts.map +1 -0
  15. package/dist/exports/core.d.ts +1 -1
  16. package/dist/exports/core.d.ts.map +1 -1
  17. package/dist/exports/index.d.ts +18 -5
  18. package/dist/exports/index.d.ts.map +1 -1
  19. package/dist/{getNetworkProviderFromNetworkId-KrwFxKlq.cjs.js → getNetworkProviderFromNetworkId-Bd5KJOTp.cjs.js} +58 -27
  20. package/dist/getNetworkProviderFromNetworkId-Bd5KJOTp.cjs.js.map +1 -0
  21. package/dist/{getNetworkProviderFromNetworkId-C9PJejYH.esm.js → getNetworkProviderFromNetworkId-CwHLK1vS.esm.js} +62 -31
  22. package/dist/getNetworkProviderFromNetworkId-CwHLK1vS.esm.js.map +1 -0
  23. package/dist/{getSignedSessionId-DhCbpycv.esm.js → getSignedSessionId-BMJxU50H.esm.js} +5 -7
  24. package/dist/{getSignedSessionId-DhCbpycv.esm.js.map → getSignedSessionId-BMJxU50H.esm.js.map} +1 -1
  25. package/dist/{getSignedSessionId-Cqp6g3pY.cjs.js → getSignedSessionId-CHIq5TnT.cjs.js} +5 -7
  26. package/dist/getSignedSessionId-CHIq5TnT.cjs.js.map +1 -0
  27. package/dist/{getVerifiedCredentialForWalletAccount-Bffr91SM.cjs.js → getVerifiedCredentialForWalletAccount-CsJEjM3D.cjs.js} +3 -3
  28. package/dist/{getVerifiedCredentialForWalletAccount-Bffr91SM.cjs.js.map → getVerifiedCredentialForWalletAccount-CsJEjM3D.cjs.js.map} +1 -1
  29. package/dist/{getVerifiedCredentialForWalletAccount-BdoPoNic.esm.js → getVerifiedCredentialForWalletAccount-DBJ_U78Y.esm.js} +2 -2
  30. package/dist/{getVerifiedCredentialForWalletAccount-BdoPoNic.esm.js.map → getVerifiedCredentialForWalletAccount-DBJ_U78Y.esm.js.map} +1 -1
  31. package/dist/index.cjs.js +239 -26
  32. package/dist/index.cjs.js.map +1 -1
  33. package/dist/index.esm.js +237 -30
  34. package/dist/index.esm.js.map +1 -1
  35. package/dist/{isMfaRequiredForAction-Vo0fCwzo.esm.js → isMfaRequiredForAction-Bc6KzFrM.esm.js} +2 -2
  36. package/dist/{isMfaRequiredForAction-Vo0fCwzo.esm.js.map → isMfaRequiredForAction-Bc6KzFrM.esm.js.map} +1 -1
  37. package/dist/{isMfaRequiredForAction-cPUOtGku.cjs.js → isMfaRequiredForAction-D5Mgfi6K.cjs.js} +2 -2
  38. package/dist/{isMfaRequiredForAction-cPUOtGku.cjs.js.map → isMfaRequiredForAction-D5Mgfi6K.cjs.js.map} +1 -1
  39. package/dist/modules/auth/events.d.ts +6 -2
  40. package/dist/modules/auth/events.d.ts.map +1 -1
  41. package/dist/modules/auth/handleSessionExpiration/handleSessionExpiration.d.ts +11 -0
  42. package/dist/modules/auth/handleSessionExpiration/handleSessionExpiration.d.ts.map +1 -0
  43. package/dist/modules/auth/handleSessionExpiration/index.d.ts +2 -0
  44. package/dist/modules/auth/handleSessionExpiration/index.d.ts.map +1 -0
  45. package/dist/modules/auth/logout/logout.d.ts +1 -1
  46. package/dist/modules/auth/logout/logout.d.ts.map +1 -1
  47. package/dist/modules/auth/logoutReason.d.ts +11 -0
  48. package/dist/modules/auth/logoutReason.d.ts.map +1 -0
  49. package/dist/modules/auth/performLogout/index.d.ts +2 -0
  50. package/dist/modules/auth/performLogout/index.d.ts.map +1 -0
  51. package/dist/modules/auth/performLogout/performLogout.d.ts +12 -0
  52. package/dist/modules/auth/performLogout/performLogout.d.ts.map +1 -0
  53. package/dist/modules/auth/social/oauth/completeSocialAuthentication/completeSocialAuthentication.d.ts +4 -1
  54. package/dist/modules/auth/social/oauth/completeSocialAuthentication/completeSocialAuthentication.d.ts.map +1 -1
  55. package/dist/modules/checkout/createCheckoutTransaction/createCheckoutTransaction.d.ts +11 -0
  56. package/dist/modules/checkout/createCheckoutTransaction/createCheckoutTransaction.d.ts.map +1 -1
  57. package/dist/modules/checkout/submitCheckoutTransaction/submitCheckoutTransaction.d.ts +2 -2
  58. package/dist/modules/checkout/submitCheckoutTransaction/submitCheckoutTransaction.d.ts.map +1 -1
  59. package/dist/modules/checkout/utils/requiresConversion/index.d.ts +2 -0
  60. package/dist/modules/checkout/utils/requiresConversion/index.d.ts.map +1 -0
  61. package/dist/modules/checkout/utils/requiresConversion/requiresConversion.d.ts +20 -0
  62. package/dist/modules/checkout/utils/requiresConversion/requiresConversion.d.ts.map +1 -0
  63. package/dist/modules/sessionKeys/getSignedSessionId/getSignedSessionId.d.ts.map +1 -1
  64. package/dist/modules/swap/constants.d.ts +2 -0
  65. package/dist/modules/swap/constants.d.ts.map +1 -0
  66. package/dist/modules/swap/executeSwapTransaction/executeSwapTransaction.d.ts +32 -0
  67. package/dist/modules/swap/executeSwapTransaction/executeSwapTransaction.d.ts.map +1 -0
  68. package/dist/modules/swap/executeSwapTransaction/index.d.ts +3 -0
  69. package/dist/modules/swap/executeSwapTransaction/index.d.ts.map +1 -0
  70. package/dist/modules/swap/getSwapQuote/getSwapQuote.d.ts +53 -0
  71. package/dist/modules/swap/getSwapQuote/getSwapQuote.d.ts.map +1 -0
  72. package/dist/modules/swap/getSwapQuote/index.d.ts +3 -0
  73. package/dist/modules/swap/getSwapQuote/index.d.ts.map +1 -0
  74. package/dist/modules/swap/getSwapStatus/getSwapStatus.d.ts +23 -0
  75. package/dist/modules/swap/getSwapStatus/getSwapStatus.d.ts.map +1 -0
  76. package/dist/modules/swap/getSwapStatus/index.d.ts +3 -0
  77. package/dist/modules/swap/getSwapStatus/index.d.ts.map +1 -0
  78. package/dist/modules/swap/swap.types.d.ts +14 -0
  79. package/dist/modules/swap/swap.types.d.ts.map +1 -0
  80. package/dist/modules/waas/createWaasProvider/createWaasProvider.d.ts.map +1 -1
  81. package/dist/modules/waas/waas.types.d.ts +4 -1
  82. package/dist/modules/waas/waas.types.d.ts.map +1 -1
  83. package/dist/modules/wallets/confirmTransaction/confirmTransaction.d.ts +17 -0
  84. package/dist/modules/wallets/confirmTransaction/confirmTransaction.d.ts.map +1 -0
  85. package/dist/modules/wallets/confirmTransaction/index.d.ts +2 -0
  86. package/dist/modules/wallets/confirmTransaction/index.d.ts.map +1 -0
  87. package/dist/modules/wallets/disconnectAndTerminateWalletProviders/disconnectAndTerminateWalletProviders.d.ts +5 -2
  88. package/dist/modules/wallets/disconnectAndTerminateWalletProviders/disconnectAndTerminateWalletProviders.d.ts.map +1 -1
  89. package/dist/modules/wallets/networks/createBaseNetworkProvider/createBaseNetworkProvider.d.ts.map +1 -1
  90. package/dist/modules/wallets/networks/getNetworksData/getNetworksData.d.ts +1 -1
  91. package/dist/modules/wallets/networks/getNetworksData/getNetworksData.d.ts.map +1 -1
  92. package/dist/modules/wallets/networks/networkProvider/networkProvider.types.d.ts +4 -0
  93. package/dist/modules/wallets/networks/networkProvider/networkProvider.types.d.ts.map +1 -1
  94. package/dist/modules/wallets/walletProvider/index.d.ts +1 -1
  95. package/dist/modules/wallets/walletProvider/index.d.ts.map +1 -1
  96. package/dist/modules/wallets/walletProvider/walletProvider.types.d.ts +17 -8
  97. package/dist/modules/wallets/walletProvider/walletProvider.types.d.ts.map +1 -1
  98. package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.d.ts.map +1 -1
  99. package/dist/services/keychain/createIndexedDBKeychainService/utils/withDatabase/index.d.ts +2 -0
  100. package/dist/services/keychain/createIndexedDBKeychainService/utils/withDatabase/index.d.ts.map +1 -0
  101. package/dist/services/keychain/createIndexedDBKeychainService/utils/withDatabase/withDatabase.d.ts +13 -0
  102. package/dist/services/keychain/createIndexedDBKeychainService/utils/withDatabase/withDatabase.d.ts.map +1 -0
  103. package/dist/tsconfig.lib.tsbuildinfo +1 -1
  104. package/dist/waas.cjs.js +4 -4
  105. package/dist/waas.esm.js +3 -3
  106. package/dist/waasCore.cjs.js +7 -6
  107. package/dist/waasCore.cjs.js.map +1 -1
  108. package/dist/waasCore.esm.js +6 -5
  109. package/dist/waasCore.esm.js.map +1 -1
  110. package/package.json +3 -3
  111. package/dist/getNetworkProviderFromNetworkId-C9PJejYH.esm.js.map +0 -1
  112. package/dist/getNetworkProviderFromNetworkId-KrwFxKlq.cjs.js.map +0 -1
  113. package/dist/getSignedSessionId-Cqp6g3pY.cjs.js.map +0 -1
package/dist/index.esm.js CHANGED
@@ -1,12 +1,12 @@
1
- import { A as NONCE_POOL_SIZE, D as randomString, E as ValueMustBeDefinedError, F as getCore, I as name, L as version, M as setDefaultClient, O as CLIENT_SDK_NAME, P as BaseError, S as getElevatedAccessToken, T as assertDefined, _ as MfaRateLimitedError, a as DYNAMIC_ICONIC_SPRITE_URL, b as InvalidExternalAuthError, c as CHAINS_INFO_MAP, d as UnauthorizedError, g as SandboxMaximumThresholdReachedError, h as getNonce, j as getDefaultClient, l as fetchAndStoreNonces, o as SDK_API_CORE_VERSION, s as getChainFromVerifiedCredentialChain, t as InvalidParamError, u as createApiClient, v as MfaInvalidOtpError, w as isCookieEnabled, x as APIError, y as LinkCredentialError } from "./InvalidParamError-CGBIFNgP.esm.js";
2
- import { A as getBuffer, C as CannotTrackError, D as INITIALIZE_STORAGE_SYNC_TRACKER_KEY, E as GENERATE_SESSION_KEYS_TRACKER_KEY, F as createLocalStorageAdapter, I as subscribeWithSelector, L as isEqualShallow, M as createStorageKeySchema, N as createStorage, O as REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY, T as FETCH_PROJECT_SETTINGS_TRACKER_KEY, _ as NoNetworkProvidersError, a as updateWalletProviderKeysForVerifiedCredentials, b as createLogger, c as createSignInMessageStatement, d as createVisit, f as hasExtension, g as WalletAlreadyLinkedToAnotherUserError, h as isCaptchaRequired, i as getNetworksData, j as generateSessionKeys, k as isServerSideRendering, l as formatSignInMessage, m as consumeCaptchaToken, o as verifyMessageSignatureOwnership, p as setCaptchaToken, s as removeUnverifiedWalletAccount, t as getNetworkProviderFromNetworkId, u as setUnverifiedWalletAccounts, v as createRealtimeService, w as createDeferredPromise, x as createCrossTabBroadcast, y as createIndexedDBKeychainService } from "./getNetworkProviderFromNetworkId-C9PJejYH.esm.js";
3
- import { A as setCookie, C as normalizeAddress, D as offEvent, E as emitEvent, O as onEvent, S as formatWalletAccountId, a as parseElevatedAccessToken, d as checkAndRaiseWalletAccountsChangedEvent, f as emitWalletAccountsChangedEvent, i as upsertElevatedAccessToken, k as onceEvent, m as getWalletProviderFromWalletAccount, n as getWalletProviderByKey, o as restoreUserSharesForAllWalletAccounts, p as DYNAMIC_AUTH_COOKIE_NAME, r as updateAuthFromVerifyResponse, t as getVerifiedCredentialForWalletAccount, u as getWalletProviders, v as NoWalletProviderFoundError, w as splitWalletProviderKey, y as getWalletAccounts } from "./getVerifiedCredentialForWalletAccount-BdoPoNic.esm.js";
4
- import { n as refreshAuth, t as NotWaasWalletAccountError } from "./NotWaasWalletAccountError-CT_IUD-3.esm.js";
5
- import { n as getMfaMethods, r as consumeMfaToken, t as isMfaRequiredForAction } from "./isMfaRequiredForAction-Vo0fCwzo.esm.js";
1
+ import { A as NONCE_POOL_SIZE, D as randomString, E as ValueMustBeDefinedError, F as getCore, I as name, L as version, M as setDefaultClient, O as CLIENT_SDK_NAME, P as BaseError, S as getElevatedAccessToken, T as assertDefined, _ as MfaRateLimitedError, a as DYNAMIC_ICONIC_SPRITE_URL, b as InvalidExternalAuthError, c as CHAINS_INFO_MAP, d as UnauthorizedError, g as SandboxMaximumThresholdReachedError, h as getNonce, j as getDefaultClient, l as fetchAndStoreNonces, o as SDK_API_CORE_VERSION, s as getChainFromVerifiedCredentialChain, t as InvalidParamError, u as createApiClient, v as MfaInvalidOtpError, w as isCookieEnabled, x as APIError, y as LinkCredentialError } from "./InvalidParamError-C8i6ExCF.esm.js";
2
+ import { A as getBuffer, C as CannotTrackError, D as INITIALIZE_STORAGE_SYNC_TRACKER_KEY, E as GENERATE_SESSION_KEYS_TRACKER_KEY, F as createLocalStorageAdapter, I as subscribeWithSelector, L as isEqualShallow, M as createStorageKeySchema, N as createStorage, O as REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY, T as FETCH_PROJECT_SETTINGS_TRACKER_KEY, _ as NoNetworkProvidersError, a as updateWalletProviderKeysForVerifiedCredentials, b as createLogger, c as createSignInMessageStatement, d as createVisit, f as hasExtension, g as WalletAlreadyLinkedToAnotherUserError, h as isCaptchaRequired, i as getNetworksData, j as generateSessionKeys, k as isServerSideRendering, l as formatSignInMessage, m as consumeCaptchaToken, o as verifyMessageSignatureOwnership, p as setCaptchaToken, s as removeUnverifiedWalletAccount, t as getNetworkProviderFromNetworkId, u as setUnverifiedWalletAccounts, v as createRealtimeService, w as createDeferredPromise, x as createCrossTabBroadcast, y as createIndexedDBKeychainService } from "./getNetworkProviderFromNetworkId-CwHLK1vS.esm.js";
3
+ import { A as setCookie, C as normalizeAddress, D as offEvent, E as emitEvent, O as onEvent, S as formatWalletAccountId, a as parseElevatedAccessToken, d as checkAndRaiseWalletAccountsChangedEvent, f as emitWalletAccountsChangedEvent, i as upsertElevatedAccessToken, k as onceEvent, m as getWalletProviderFromWalletAccount, n as getWalletProviderByKey, o as restoreUserSharesForAllWalletAccounts, p as DYNAMIC_AUTH_COOKIE_NAME, r as updateAuthFromVerifyResponse, t as getVerifiedCredentialForWalletAccount, u as getWalletProviders, v as NoWalletProviderFoundError, w as splitWalletProviderKey, y as getWalletAccounts } from "./getVerifiedCredentialForWalletAccount-DBJ_U78Y.esm.js";
4
+ import { n as refreshAuth, t as NotWaasWalletAccountError } from "./NotWaasWalletAccountError-BI9ZiEz_.esm.js";
5
+ import { n as getMfaMethods, r as consumeMfaToken, t as isMfaRequiredForAction } from "./isMfaRequiredForAction-Bc6KzFrM.esm.js";
6
6
  import { assertPackageVersion } from "@dynamic-labs-sdk/assert-package-version";
7
7
  import { AuthModeEnum, ExchangeKeyEnum, JwtVerifiedCredentialFormatEnum, MFAAction, MfaBackupCodeAcknowledgement, ProviderEnum, TokenScope, WaasBackupOptionsEnum, WalletProviderEnum } from "@dynamic-labs/sdk-api-core";
8
8
  import * as z from "zod/mini";
9
- import EventEmitter, { EventEmitter as EventEmitter$1 } from "eventemitter3";
9
+ import EventEmitter$1, { EventEmitter } from "eventemitter3";
10
10
  import { browserSupportsWebAuthn, startAuthentication, startRegistration } from "@simplewebauthn/browser";
11
11
 
12
12
  //#region src/modules/state/raiseStateEvents/events.ts
@@ -173,11 +173,11 @@ const getAvailableWalletProvidersFromWalletAccounts = (client) => {
173
173
  * Disconnect and terminate each wallet provider, if available.
174
174
  * @not-instrumented
175
175
  */
176
- const disconnectAndTerminateWalletProviders = async (client) => {
176
+ const disconnectAndTerminateWalletProviders = async ({ reason }, client) => {
177
177
  const core = getCore(client);
178
178
  const walletProviders = getAvailableWalletProvidersFromWalletAccounts(client);
179
179
  await Promise.all(walletProviders.map(async (walletProvider) => {
180
- if (walletProvider.terminate) await walletProvider.terminate();
180
+ if (walletProvider.terminate) await walletProvider.terminate({ reason });
181
181
  if (walletProvider.disconnect) try {
182
182
  await walletProvider.disconnect();
183
183
  } catch (err) {
@@ -187,18 +187,17 @@ const disconnectAndTerminateWalletProviders = async (client) => {
187
187
  };
188
188
 
189
189
  //#endregion
190
- //#region src/modules/auth/logout/logout.ts
190
+ //#region src/modules/auth/performLogout/performLogout.ts
191
191
  /**
192
- * Logs out the current user and clears all authentication data.
192
+ * Shared logout implementation that revokes the session, clears auth state,
193
+ * terminates wallet providers, and emits the logout event with the given reason.
193
194
  *
194
- * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
195
- * @returns A promise that resolves when the logout process is complete.
196
- * @instrumented
195
+ * @not-instrumented
197
196
  */
198
- const logout = async (client = getDefaultClient()) => {
197
+ const performLogout = async ({ reason }, client) => {
199
198
  const core = getCore(client);
200
199
  core.logger.debug("[logout] Logging out...");
201
- await disconnectAndTerminateWalletProviders(client);
200
+ await disconnectAndTerminateWalletProviders({ reason }, client);
202
201
  if (client.user !== null) {
203
202
  const apiClient = createApiClient({}, client);
204
203
  try {
@@ -224,11 +223,28 @@ const logout = async (client = getDefaultClient()) => {
224
223
  unverifiedWalletAccounts: [],
225
224
  user: null
226
225
  });
227
- emitEvent({ event: "logout" }, client);
226
+ emitEvent({
227
+ args: { reason },
228
+ event: "logout"
229
+ }, client);
228
230
  fetchProjectSettings(client);
229
231
  generateSessionKeys(client);
230
232
  };
231
233
 
234
+ //#endregion
235
+ //#region src/modules/auth/handleSessionExpiration/handleSessionExpiration.ts
236
+ /**
237
+ * Logs out due to session expiry with a token-expired reason,
238
+ * allowing downstream providers to decide their own cleanup behavior.
239
+ *
240
+ * @param client - The Dynamic client instance.
241
+ * @returns A promise that resolves when the logout process is complete.
242
+ * @instrumented
243
+ */
244
+ const handleSessionExpiration = async (client) => {
245
+ return performLogout({ reason: "token-expired" }, client);
246
+ };
247
+
232
248
  //#endregion
233
249
  //#region src/modules/auth/initializeAuth/setLongTimeout/setLongTimeout.ts
234
250
  /**
@@ -269,7 +285,7 @@ const initializeAuth = (client) => {
269
285
  const now = /* @__PURE__ */ new Date();
270
286
  const timeUntilExpiration = expiration.getTime() - now.getTime();
271
287
  if (timeUntilExpiration <= 0) {
272
- logout(client);
288
+ handleSessionExpiration(client);
273
289
  return;
274
290
  }
275
291
  clearExpirationTimeout = setLongTimeout(checkExpiration, timeUntilExpiration);
@@ -278,6 +294,19 @@ const initializeAuth = (client) => {
278
294
  checkExpiration();
279
295
  };
280
296
 
297
+ //#endregion
298
+ //#region src/modules/auth/logout/logout.ts
299
+ /**
300
+ * Logs out the current user and clears all authentication data.
301
+ *
302
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
303
+ * @returns A promise that resolves when the logout process is complete.
304
+ * @instrumented
305
+ */
306
+ const logout = async (client = getDefaultClient()) => {
307
+ return performLogout({ reason: "user-intent" }, client);
308
+ };
309
+
281
310
  //#endregion
282
311
  //#region src/modules/crossTabEventSync/setupCrossTabEventSync/setupCrossTabEventSync.ts
283
312
  /**
@@ -650,7 +679,7 @@ const createAsyncTrack = () => {
650
679
  * This ensures no process is missed (as it would throw when tracked on a different node tick).
651
680
  */
652
681
  let isTrackEnabled = true;
653
- const eventEmitter = new EventEmitter$1();
682
+ const eventEmitter = new EventEmitter();
654
683
  const allSettledPromise = createDeferredPromise();
655
684
  const tracker = /* @__PURE__ */ new Map();
656
685
  /**
@@ -697,7 +726,7 @@ const createAsyncTrack = () => {
697
726
  //#endregion
698
727
  //#region src/services/eventEmitter/createEventEmitter.ts
699
728
  /** @not-instrumented */
700
- const createEventEmitter = () => new EventEmitter();
729
+ const createEventEmitter = () => new EventEmitter$1();
701
730
 
702
731
  //#endregion
703
732
  //#region src/errors/UnavailableInServerSideError.ts
@@ -1466,6 +1495,21 @@ var SimulationFailedError = class extends BaseError {
1466
1495
  }
1467
1496
  };
1468
1497
 
1498
+ //#endregion
1499
+ //#region src/errors/TokenSwapError.ts
1500
+ var TokenSwapError = class extends BaseError {
1501
+ constructor({ message, originalError }) {
1502
+ const cause = originalError && originalError instanceof Error ? originalError : null;
1503
+ super({
1504
+ cause,
1505
+ code: "token_swap_error",
1506
+ docsUrl: null,
1507
+ name: "TokenSwapError",
1508
+ shortMessage: message
1509
+ });
1510
+ }
1511
+ };
1512
+
1469
1513
  //#endregion
1470
1514
  //#region src/errors/UnrecognizedNetworkError.ts
1471
1515
  var UnrecognizedNetworkError = class extends BaseError {
@@ -2016,13 +2060,14 @@ const authenticateWithSocial = async ({ provider, redirectUrl }, client = getDef
2016
2060
  * and completes the user authentication with the social provider.
2017
2061
  *
2018
2062
  * @param params.url - The callback URL containing OAuth response parameters.
2063
+ * @param [params.requestedScopes] - Optional scopes to request an elevated access token when verifying (linking) a social account.
2019
2064
  * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
2020
2065
  * @returns A promise that resolves to the authenticated user or null.
2021
2066
  * @throws MissingSocialUrlParamError If required OAuth parameters are missing.
2022
2067
  * @throws InvalidRedirectStorageStateError If the stored state doesn't match.
2023
2068
  * @instrumented
2024
2069
  */
2025
- const completeSocialAuthentication = async ({ url }, client = getDefaultClient()) => {
2070
+ const completeSocialAuthentication = async ({ url, requestedScopes }, client = getDefaultClient()) => {
2026
2071
  const core = getCore(client);
2027
2072
  const apiClient = createApiClient({}, client);
2028
2073
  await core.initTrack.waitForAll();
@@ -2041,6 +2086,7 @@ const completeSocialAuthentication = async ({ url }, client = getDefaultClient()
2041
2086
  oauthRequest: {
2042
2087
  code: dynamicOauthCode,
2043
2088
  codeVerifier,
2089
+ requestedScopes,
2044
2090
  state: dynamicOauthState
2045
2091
  },
2046
2092
  providerType: provider
@@ -2298,6 +2344,10 @@ const createCheckoutTransaction = async (params, client = getDefaultClient()) =>
2298
2344
  checkoutTransactionCreateRequest: {
2299
2345
  amount: params.amount,
2300
2346
  currency: params.currency,
2347
+ destinationAddresses: params.destinationAddresses?.map((address) => ({
2348
+ address: address.address,
2349
+ chainName: address.chain
2350
+ })),
2301
2351
  expiresIn: params.expiresIn,
2302
2352
  memo: params.memo
2303
2353
  },
@@ -2394,6 +2444,43 @@ function assertWalletProviderMethodDefined(walletProvider, methodName) {
2394
2444
  });
2395
2445
  }
2396
2446
 
2447
+ //#endregion
2448
+ //#region src/modules/swap/constants.ts
2449
+ const SWAP_SUPPORTED_CHAINS = [
2450
+ "BTC",
2451
+ "EVM",
2452
+ "SOL",
2453
+ "SUI",
2454
+ "TRON"
2455
+ ];
2456
+
2457
+ //#endregion
2458
+ //#region src/modules/swap/executeSwapTransaction/executeSwapTransaction.ts
2459
+ /**
2460
+ * Executes a swap transaction
2461
+ *
2462
+ * @param params ExecuteSwapTransactionParams - The parameters for the swap transaction.
2463
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
2464
+ * @returns The transaction hash.
2465
+ * @instrumented
2466
+ */
2467
+ const executeSwapTransaction = async ({ walletAccount, signingPayload, onStepChange }, client = getDefaultClient()) => {
2468
+ if (!SWAP_SUPPORTED_CHAINS.includes(walletAccount.chain)) throw new InvalidParamError(`Chain ${walletAccount.chain} is not supported for swap transactions`);
2469
+ const walletProvider = getWalletProviderFromWalletAccount({ walletAccount }, client);
2470
+ assertWalletProviderMethodDefined(walletProvider, "executeSwapTransaction");
2471
+ const requiredNetworkId = signingPayload.chainId;
2472
+ if (requiredNetworkId && walletProvider.switchActiveNetwork) {
2473
+ const { networkId: activeNetworkId } = await walletProvider.getActiveNetworkId();
2474
+ if (activeNetworkId !== requiredNetworkId) await walletProvider.switchActiveNetwork({ networkId: requiredNetworkId });
2475
+ }
2476
+ const { transactionHash } = await walletProvider.executeSwapTransaction({
2477
+ onStepChange,
2478
+ signingPayload,
2479
+ walletAccount
2480
+ });
2481
+ return { transactionHash };
2482
+ };
2483
+
2397
2484
  //#endregion
2398
2485
  //#region src/modules/checkout/submitCheckoutTransaction/submitCheckoutTransaction.ts
2399
2486
  /**
@@ -2402,7 +2489,7 @@ function assertWalletProviderMethodDefined(walletProvider, methodName) {
2402
2489
  * Orchestrates the full submission flow:
2403
2490
  * 1. Calls prepareCheckoutTransaction to advance to signing state and lock the quote
2404
2491
  * 2. Ensures the wallet is on the correct network for the transaction
2405
- * 3. Delegates on-chain signing to the wallet provider's executeCheckoutTransaction method
2492
+ * 3. Delegates on-chain signing to the wallet provider's executeSwapTransaction method
2406
2493
  * 4. Calls broadcastCheckoutTransaction with the resulting txHash
2407
2494
  *
2408
2495
  * @param params SubmitCheckoutTransactionParams - The transaction ID, wallet account, and optional step callback.
@@ -2413,14 +2500,7 @@ function assertWalletProviderMethodDefined(walletProvider, methodName) {
2413
2500
  const submitCheckoutTransaction = async ({ onStepChange, transactionId, walletAccount }, client = getDefaultClient()) => {
2414
2501
  const prepared = await prepareCheckoutTransaction({ transactionId }, client);
2415
2502
  assertDefined(prepared.signingPayload, "No signing payload returned from prepare — quote may be missing transaction data");
2416
- const walletProvider = getWalletProviderFromWalletAccount({ walletAccount }, client);
2417
- assertWalletProviderMethodDefined(walletProvider, "executeCheckoutTransaction");
2418
- const requiredNetworkId = prepared.signingPayload.chainId;
2419
- if (requiredNetworkId && walletProvider.switchActiveNetwork) {
2420
- const { networkId: activeNetworkId } = await walletProvider.getActiveNetworkId();
2421
- if (activeNetworkId !== requiredNetworkId) await walletProvider.switchActiveNetwork({ networkId: requiredNetworkId });
2422
- }
2423
- const { transactionHash } = await walletProvider.executeCheckoutTransaction({
2503
+ const { transactionHash } = await executeSwapTransaction({
2424
2504
  onStepChange,
2425
2505
  signingPayload: prepared.signingPayload,
2426
2506
  walletAccount
@@ -2431,6 +2511,29 @@ const submitCheckoutTransaction = async ({ onStepChange, transactionId, walletAc
2431
2511
  }, client);
2432
2512
  };
2433
2513
 
2514
+ //#endregion
2515
+ //#region src/modules/checkout/utils/requiresConversion/requiresConversion.ts
2516
+ /**
2517
+ * Determines whether a token conversion (swap/bridge) is required for a checkout transaction.
2518
+ *
2519
+ * Returns `true` when the from token does not match any settlement token defined in
2520
+ * the checkout's settlement config for the given chain — meaning the asset must be
2521
+ * converted before it can settle.
2522
+ * Returns `false` when the from token already matches a settlement token, so no
2523
+ * conversion is needed.
2524
+ *
2525
+ * @param params - The from token details and the checkout's settlement config.
2526
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
2527
+ * @returns Whether a token conversion is required
2528
+ * @instrumented
2529
+ */
2530
+ const requiresConversion = async ({ transaction }, client = getDefaultClient()) => {
2531
+ if (!transaction.fromChainId || !transaction.fromChainName || !transaction.fromToken) throw new InvalidParamError("Transaction is missing source information. Make sure that attachCheckoutTransactionSource has been called before calling this function.");
2532
+ const checkout = (await getCheckouts(client)).find((checkout$1) => checkout$1.id === transaction.checkoutId);
2533
+ assertDefined(checkout, "Could not find checkout associated with transaction.");
2534
+ return !checkout.settlementConfig.settlements.some((settlement) => settlement.chainName === transaction.fromChainName && settlement.chainId === transaction.fromChainId && settlement.tokenAddress === transaction.fromToken);
2535
+ };
2536
+
2434
2537
  //#endregion
2435
2538
  //#region src/modules/deviceRegistration/completeDeviceRegistration/completeDeviceRegistration.ts
2436
2539
  const DEVICE_REGISTRATION_TOKEN_HEADER = "x-dynamic-device-registration-token";
@@ -4678,6 +4781,85 @@ const verifyOTP = async ({ otpVerification, verificationToken, requestedScopes }
4678
4781
  return response;
4679
4782
  };
4680
4783
 
4784
+ //#endregion
4785
+ //#region src/modules/swap/getSwapQuote/getSwapQuote.ts
4786
+ /**
4787
+ * Gets a swap quote
4788
+ *
4789
+ * @param params GetSwapQuoteParams - The parameters for the swap quote.
4790
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
4791
+ * @returns The swap quote details. Use the `signingPayload` field to get the transaction data for the wallet to sign.
4792
+ * @instrumented
4793
+ */
4794
+ const getSwapQuote = async (params, client = getDefaultClient()) => {
4795
+ const core = getCore(client);
4796
+ const apiClient = createApiClient({}, client);
4797
+ if (!params.from.amount && !params.to.amount) throw new InvalidParamError("Either from.amount or to.amount is required");
4798
+ if (params.from.amount && params.to.amount) throw new InvalidParamError("Only one of from.amount or to.amount is allowed");
4799
+ return await apiClient.swapQuote({
4800
+ environmentId: core.environmentId,
4801
+ swapQuoteRequest: {
4802
+ from: {
4803
+ ...params.from,
4804
+ chainId: params.from.networkId,
4805
+ chainName: params.from.chain
4806
+ },
4807
+ maxPriceImpact: params.maxPriceImpact,
4808
+ order: params.order,
4809
+ slippage: params.slippage,
4810
+ to: {
4811
+ ...params.to,
4812
+ chainId: params.to.networkId,
4813
+ chainName: params.to.chain
4814
+ }
4815
+ }
4816
+ });
4817
+ };
4818
+
4819
+ //#endregion
4820
+ //#region src/modules/swap/getSwapStatus/getSwapStatus.ts
4821
+ /**
4822
+ * Gets the status of a swap
4823
+ *
4824
+ * @param params GetSwapStatusParams - The parameters for the swap status.
4825
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
4826
+ * @returns The swap status.
4827
+ * @instrumented
4828
+ */
4829
+ const getSwapStatus = async (params, client = getDefaultClient()) => {
4830
+ const core = getCore(client);
4831
+ const apiClient = createApiClient({}, client);
4832
+ let from;
4833
+ if (params.from) from = {
4834
+ chainId: params.from.networkId,
4835
+ chainName: params.from.chain
4836
+ };
4837
+ let to;
4838
+ if (params.to) to = {
4839
+ chainId: params.to.networkId,
4840
+ chainName: params.to.chain
4841
+ };
4842
+ try {
4843
+ const response = await apiClient.swapStatus({
4844
+ environmentId: core.environmentId,
4845
+ swapStatusRequest: {
4846
+ from,
4847
+ to,
4848
+ txHash: params.txHash
4849
+ }
4850
+ });
4851
+ return {
4852
+ status: response.status,
4853
+ substatus: response.substatus
4854
+ };
4855
+ } catch (error) {
4856
+ throw new TokenSwapError({
4857
+ message: "Failed to get swap status",
4858
+ originalError: error
4859
+ });
4860
+ }
4861
+ };
4862
+
4681
4863
  //#endregion
4682
4864
  //#region src/modules/user/deleteUser/deleteUser.ts
4683
4865
  /**
@@ -4765,6 +4947,31 @@ const assertWalletAccountSigningAvailability = async ({ walletAccount }, client
4765
4947
  });
4766
4948
  };
4767
4949
 
4950
+ //#endregion
4951
+ //#region src/modules/wallets/confirmTransaction/confirmTransaction.ts
4952
+ /**
4953
+ * Waits for a transaction to be confirmed on-chain.
4954
+ *
4955
+ * Delegates to the wallet provider's `confirmTransaction` implementation,
4956
+ * which polls the appropriate chain API until the transaction is included
4957
+ * in a block or the maximum wait time is exceeded.
4958
+ *
4959
+ * @param params.walletAccount - The wallet account that submitted the transaction.
4960
+ * @param params.transactionHash - The transaction hash to wait for.
4961
+ * @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
4962
+ * @returns A promise that resolves when the transaction is confirmed.
4963
+ * @throws If the wallet provider does not support the confirmTransaction method.
4964
+ * @instrumented
4965
+ */
4966
+ const confirmTransaction = async ({ walletAccount, transactionHash }, client = getDefaultClient()) => {
4967
+ const walletProvider = getWalletProviderFromWalletAccount({ walletAccount }, client);
4968
+ assertWalletProviderMethodDefined(walletProvider, "confirmTransaction");
4969
+ await walletProvider.confirmTransaction({
4970
+ transactionHash,
4971
+ walletAccount
4972
+ });
4973
+ };
4974
+
4768
4975
  //#endregion
4769
4976
  //#region src/utils/isMobile/isMobile.ts
4770
4977
  /**
@@ -5627,5 +5834,5 @@ const parseUserAgent = ({ userAgent }) => {
5627
5834
  assertPackageVersion(name, version);
5628
5835
 
5629
5836
  //#endregion
5630
- export { BaseError, CheckoutSessionTokenMissingError, ClientAlreadyInitializedError, DeeplinkConnectAndVerifyUnsupportedError, FeeEstimationFailedError, InvalidDeviceRegistrationRedirectError, InvalidExternalAuthError, InvalidParamError, InvalidRedirectStorageStateError, LinkCredentialError, MFAAction, MfaInvalidOtpError, MfaRateLimitedError, MissingRedirectStorageStateError, MissingSocialUrlParamError, MissingUserVerificationError, NetworkAddingUnavailableError, NetworkNotAddedError, NetworkSwitchingUnavailableError, NoAddressFoundError, NoNetworkProvidersError, NoPasskeyCredentialsFoundError, NoSmartWalletAccountSignerFoundError, NoWebAuthNSupportError, NotWaasWalletAccountError, SandboxMaximumThresholdReachedError, SimulationFailedError, UnauthorizedError, UnavailableInServerSideError, UnrecognizedNetworkError, UserNotAuthenticatedError, UserRejectedError, WalletAccountAlreadyVerifiedError, WalletAccountNotSelectedError, WalletAlreadyLinkedToAnotherUserError, WalletProviderMethodUnavailableError, acknowledgeRecoveryCodes, addCoinbaseOnrampOrderEventListener, addNetwork, assertWalletAccountSigningAvailability, assertWalletProviderMethodDefined, attachCheckoutTransactionSource, authenticateMfaRecoveryCode, authenticatePasskeyMFA, authenticateTotpMfaDevice, authenticateWithSocial, broadcastCheckoutTransaction, canConnectWithHardwareWallet, cancelCheckoutTransaction, checkStepUpAuth, completeDeviceRegistration, completeSocialAuthentication, connectAndVerifyWithWalletProvider, connectWithWalletProvider, consumeMfaToken, createCheckoutTransaction, createCoinbaseOnrampOrder, createCryptoDotComPayment, createDynamicClient, createKrakenExchangeTransfer, createNewMfaRecoveryCodes, deleteMfaDevice, deletePasskey, deleteUser, detectDeviceRegistrationRedirect, detectOAuthRedirect, fetchProjectSettings, getActiveNetworkData, getActiveNetworkId, getAvailableWalletProvidersData, getBalance, getBalanceForAddress, getBalances, getCheckoutTransaction, getCheckoutTransactionQuote, getCoinbaseBuyUrl, getConnectedAddresses, getDefaultClient, getDeviceRegistrationTokenFromUrl, getElevatedAccessToken, getKrakenAccounts, getKrakenWhitelistedAddresses, getMfaDevices, getMfaMethods, getMfaRecoveryCodes, getMissingVerificationForCoinbaseOnrampOrder, getMultichainBalances, getNetworksData, getOwnerWalletAccountForSmartWalletAccount, getPasskeys, getPrimaryWalletAccount, getRegisteredDevices, getTransactionHistory, getUserSocialAccounts, getWalletAccountAddressByType, getWalletAccountFromAddress, getWalletAccounts, getWalletConnectCatalog, getWalletConnectCatalogWalletByWalletProviderKey, getWalletProviderDataByKey, hasExtension, initializeClient, isCaptchaRequired, isDeeplinkWalletProvider, isDeviceRegistrationRequired, isHardwareWalletAccount, isMfaRequiredForAction, isMobile, isPendingRecoveryCodesAcknowledgment, isProgrammaticNetworkSwitchAvailable, isSignedIn, isUserMissingMfaAuth, isUserOnboardingComplete, isWalletAccountVerified, logout, offEvent, offWalletProviderEvent, onEvent, onWalletProviderEvent, onceEvent, parseUserAgent, prepareCheckoutTransaction, proveWalletAccountOwnership, refreshAuth, refreshUser, registerPasskey, registerTotpMfaDevice, removeWalletAccount, requestExternalAuthElevatedToken, revokeAllRegisteredDevices, revokeRegisteredDevice, selectPrimaryWalletAccount, sendEmailOTP, sendSmsOTP, setCaptchaToken, setDefaultMfaDevice, setInstrumentationEnabled, signInWithExternalJwt, signInWithPasskey, signMessage, submitCheckoutTransaction, supportedCountries, switchActiveNetwork, transferAmount, transferWalletAccount, unlinkSocialAccount, updateUser, verifyOTP, verifyWalletAccount, waitForClientInitialized };
5837
+ export { BaseError, CheckoutSessionTokenMissingError, ClientAlreadyInitializedError, DeeplinkConnectAndVerifyUnsupportedError, FeeEstimationFailedError, InvalidDeviceRegistrationRedirectError, InvalidExternalAuthError, InvalidParamError, InvalidRedirectStorageStateError, LinkCredentialError, MFAAction, MfaInvalidOtpError, MfaRateLimitedError, MissingRedirectStorageStateError, MissingSocialUrlParamError, MissingUserVerificationError, NetworkAddingUnavailableError, NetworkNotAddedError, NetworkSwitchingUnavailableError, NoAddressFoundError, NoNetworkProvidersError, NoPasskeyCredentialsFoundError, NoSmartWalletAccountSignerFoundError, NoWebAuthNSupportError, NotWaasWalletAccountError, SandboxMaximumThresholdReachedError, SimulationFailedError, TokenSwapError, UnauthorizedError, UnavailableInServerSideError, UnrecognizedNetworkError, UserNotAuthenticatedError, UserRejectedError, WalletAccountAlreadyVerifiedError, WalletAccountNotSelectedError, WalletAlreadyLinkedToAnotherUserError, WalletProviderMethodUnavailableError, acknowledgeRecoveryCodes, addCoinbaseOnrampOrderEventListener, addNetwork, assertWalletAccountSigningAvailability, assertWalletProviderMethodDefined, attachCheckoutTransactionSource, authenticateMfaRecoveryCode, authenticatePasskeyMFA, authenticateTotpMfaDevice, authenticateWithSocial, broadcastCheckoutTransaction, canConnectWithHardwareWallet, cancelCheckoutTransaction, checkStepUpAuth, completeDeviceRegistration, completeSocialAuthentication, confirmTransaction, connectAndVerifyWithWalletProvider, connectWithWalletProvider, consumeMfaToken, createCheckoutTransaction, createCoinbaseOnrampOrder, createCryptoDotComPayment, createDynamicClient, createKrakenExchangeTransfer, createNewMfaRecoveryCodes, deleteMfaDevice, deletePasskey, deleteUser, detectDeviceRegistrationRedirect, detectOAuthRedirect, executeSwapTransaction, fetchProjectSettings, getActiveNetworkData, getActiveNetworkId, getAvailableWalletProvidersData, getBalance, getBalanceForAddress, getBalances, getCheckoutTransaction, getCheckoutTransactionQuote, getCoinbaseBuyUrl, getConnectedAddresses, getDefaultClient, getDeviceRegistrationTokenFromUrl, getElevatedAccessToken, getKrakenAccounts, getKrakenWhitelistedAddresses, getMfaDevices, getMfaMethods, getMfaRecoveryCodes, getMissingVerificationForCoinbaseOnrampOrder, getMultichainBalances, getNetworksData, getOwnerWalletAccountForSmartWalletAccount, getPasskeys, getPrimaryWalletAccount, getRegisteredDevices, getSwapQuote, getSwapStatus, getTransactionHistory, getUserSocialAccounts, getWalletAccountAddressByType, getWalletAccountFromAddress, getWalletAccounts, getWalletConnectCatalog, getWalletConnectCatalogWalletByWalletProviderKey, getWalletProviderDataByKey, hasExtension, initializeClient, isCaptchaRequired, isDeeplinkWalletProvider, isDeviceRegistrationRequired, isHardwareWalletAccount, isMfaRequiredForAction, isMobile, isPendingRecoveryCodesAcknowledgment, isProgrammaticNetworkSwitchAvailable, isSignedIn, isUserMissingMfaAuth, isUserOnboardingComplete, isWalletAccountVerified, logout, offEvent, offWalletProviderEvent, onEvent, onWalletProviderEvent, onceEvent, parseUserAgent, prepareCheckoutTransaction, proveWalletAccountOwnership, refreshAuth, refreshUser, registerPasskey, registerTotpMfaDevice, removeWalletAccount, requestExternalAuthElevatedToken, requiresConversion, revokeAllRegisteredDevices, revokeRegisteredDevice, selectPrimaryWalletAccount, sendEmailOTP, sendSmsOTP, setCaptchaToken, setDefaultMfaDevice, setInstrumentationEnabled, signInWithExternalJwt, signInWithPasskey, signMessage, submitCheckoutTransaction, supportedCountries, switchActiveNetwork, transferAmount, transferWalletAccount, unlinkSocialAccount, updateUser, verifyOTP, verifyWalletAccount, waitForClientInitialized };
5631
5838
  //# sourceMappingURL=index.esm.js.map