@dynamic-labs-wallet/browser 1.0.20 → 1.0.22

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/index.cjs CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  var core = require('@dynamic-labs-wallet/core');
4
4
  var web = require('#internal/web');
5
- var semver = require('semver');
6
5
  var uuid = require('uuid');
7
6
  var primitives = require('@dynamic-labs-wallet/primitives');
8
7
  var sdkApiCore = require('@dynamic-labs/sdk-api-core');
9
8
  var loadArgon2idWasm = require('argon2id');
10
9
  var axios = require('axios');
11
10
  var PQueue = require('p-queue');
11
+ var semver = require('semver');
12
12
 
13
13
  function _extends() {
14
14
  _extends = Object.assign || function assign(target) {
@@ -997,6 +997,16 @@ const downloadFileFromGoogleDrive = async ({ accessToken, fileName })=>{
997
997
  }
998
998
  };
999
999
 
1000
+ /**
1001
+ * Extracts the HTTP status from an `AxiosError`, or `undefined` for non-HTTP
1002
+ * errors. Lives in its own leaf module (no `#internal/web` / WASM imports) so
1003
+ * lightweight consumers like `services/signedSession.ts` can use it without
1004
+ * pulling the MPC WASM bundle that `utils.ts` loads.
1005
+ */ const getHttpStatus = (error)=>{
1006
+ var _error_response;
1007
+ return error instanceof axios.AxiosError ? (_error_response = error.response) == null ? void 0 : _error_response.status : undefined;
1008
+ };
1009
+
1000
1010
  const STORAGE_KEY = 'dynamic-waas-wallet-client';
1001
1011
  const BACKUP_FILENAME = 'dynamicWalletKeyShareBackup.json';
1002
1012
  const CLIENT_KEYSHARE_EXPORT_FILENAME_PREFIX = 'dynamicWalletKeyShareBackup';
@@ -1076,14 +1086,6 @@ const getClientKeyShareBackupInfo = (params)=>{
1076
1086
  const timeoutPromise = ({ timeInMs, activity = 'Ceremony' })=>{
1077
1087
  return new Promise((_, reject)=>setTimeout(()=>reject(new Error(`${activity} did not complete in ${timeInMs}ms`)), timeInMs));
1078
1088
  };
1079
- /**
1080
- * Extracts the HTTP status code from an error, returning undefined for non-HTTP
1081
- * failures (network errors, DNS, aborts) which retry logic typically treats
1082
- * the same as 5xx.
1083
- */ const getHttpStatus = (error)=>{
1084
- var _error_response;
1085
- return error instanceof axios.AxiosError ? (_error_response = error.response) == null ? void 0 : _error_response.status : undefined;
1086
- };
1087
1089
  const buildErrorContext = (error)=>{
1088
1090
  var _error_response, _error_response1;
1089
1091
  return {
@@ -2463,6 +2465,84 @@ const readEnvironmentSettings = ()=>{
2463
2465
  }
2464
2466
  });
2465
2467
 
2468
+ /**
2469
+ * Owns everything about signed sessions and their single-use replay nonces:
2470
+ * resolving a session from an explicit value or the host reverse channel,
2471
+ * deciding whether the SDK version requires one, and building the
2472
+ * refresh-on-replay-400 retry predicate shared by the backup and recovery
2473
+ * flows.
2474
+ *
2475
+ * Extracted from `DynamicWalletClient` so this logic can be exercised in
2476
+ * isolation. The host callback is read lazily (`getCallback`) so it stays in
2477
+ * sync with the owning client even if reassigned after construction.
2478
+ */ class SignedSessionManager {
2479
+ /** True when a reverse channel is configured to mint fresh signed sessions. */ get canRefresh() {
2480
+ return this.getCallback() !== undefined;
2481
+ }
2482
+ /**
2483
+ * Resolves the signed session ID from an explicit value or falls back to the
2484
+ * host reverse channel. Throws if neither source provides a value.
2485
+ */ async resolve(signedSessionId) {
2486
+ const callback = this.getCallback();
2487
+ const resolved = signedSessionId != null ? signedSessionId : await (callback == null ? void 0 : callback());
2488
+ if (!resolved) {
2489
+ throw new Error(signedSessionId === undefined && callback ? 'signedSessionId callback returned an invalid value' : 'signedSessionId is required for backup but was not provided and no callback is configured');
2490
+ }
2491
+ return resolved;
2492
+ }
2493
+ /** Whether the configured SDK version requires a signed session ID. */ isRequired() {
2494
+ return this.required;
2495
+ }
2496
+ computeIsRequired(sdkVersion) {
2497
+ if (!sdkVersion) {
2498
+ return false;
2499
+ }
2500
+ try {
2501
+ const parsedVersion = core.parseNamespacedVersion(sdkVersion);
2502
+ if (!parsedVersion) {
2503
+ return false;
2504
+ }
2505
+ const { namespace, version } = parsedVersion;
2506
+ const namespaceMinVersion = SIGNED_SESSION_ID_MIN_VERSION_BY_NAMESPACE[namespace];
2507
+ if (namespaceMinVersion) {
2508
+ return semver.gte(version, namespaceMinVersion);
2509
+ }
2510
+ return semver.gte(version, SIGNED_SESSION_ID_MIN_VERSION);
2511
+ } catch (error) {
2512
+ this.logger.warn(`[DynamicWaasWalletClient] Error checking if requiresSignedSessionId should be set to true for version ${sdkVersion}`, {
2513
+ error: error instanceof Error ? error.message : String(error)
2514
+ });
2515
+ return false;
2516
+ }
2517
+ }
2518
+ /**
2519
+ * Builds a `retryPromise` `shouldRetry` predicate that refreshes a consumed
2520
+ * single-use nonce via the reverse channel on a replay 400 and retries once.
2521
+ * The signed session carries a single-use replay nonce: it is valid on its
2522
+ * first use, but once consumed (e.g. by a preceding operation) the server
2523
+ * rejects with a 400, at which point a fresh session is fetched and the call
2524
+ * retried. `alsoRetry` lets callers opt into additional retryable statuses
2525
+ * (e.g. 429 / 5xx) on top of the nonce refresh.
2526
+ */ refreshShouldRetry({ onRefreshed, operationName, logContext, alsoRetry }) {
2527
+ return async (error, attempt)=>{
2528
+ const status = getHttpStatus(error);
2529
+ if (status === 400 && attempt === 1 && this.canRefresh) {
2530
+ onRefreshed(await this.resolve());
2531
+ this.logger.info(`[${operationName}] refreshed signed session, retrying`, _extends({
2532
+ status
2533
+ }, logContext));
2534
+ return true;
2535
+ }
2536
+ return alsoRetry ? alsoRetry(status) : false;
2537
+ };
2538
+ }
2539
+ constructor({ logger, sdkVersion, getCallback }){
2540
+ this.logger = logger;
2541
+ this.getCallback = getCallback;
2542
+ this.required = this.computeIsRequired(sdkVersion);
2543
+ }
2544
+ }
2545
+
2466
2546
  /**
2467
2547
  * Determines the recovery state of a wallet based on backup info and local shares.
2468
2548
  *
@@ -2512,17 +2592,6 @@ const KNOWN_SHARE_SET_TYPES = new Set([
2512
2592
  ]);
2513
2593
  class DynamicWalletClient {
2514
2594
  /**
2515
- * Resolves the signed session ID from an explicit value or falls back to the callback.
2516
- * Throws if neither source provides a value.
2517
- */ async resolveSignedSessionId(signedSessionId) {
2518
- const resolved = signedSessionId != null ? signedSessionId : await (this.getSignedSessionIdCallback == null ? void 0 : this.getSignedSessionIdCallback.call(this));
2519
- if (!resolved) {
2520
- const errorMsg = signedSessionId === undefined && this.getSignedSessionIdCallback ? 'signedSessionId callback returned an invalid value' : 'signedSessionId is required for backup but was not provided and no callback is configured';
2521
- throw new Error(errorMsg);
2522
- }
2523
- return resolved;
2524
- }
2525
- /**
2526
2595
  * Check if wallet has heavy operations in progress
2527
2596
  */ static isHeavyOpInProgress(accountAddress) {
2528
2597
  return WalletQueueManager.isHeavyOpInProgress(accountAddress);
@@ -2608,29 +2677,8 @@ class DynamicWalletClient {
2608
2677
  * Check if the SDK version meets the requirement for signed session ID
2609
2678
  * Uses namespace-specific version requirements when available
2610
2679
  * @returns boolean indicating if requireSignedSessionId should be set to true
2611
- */ requiresSignedSessionId() {
2612
- if (!this.sdkVersion) {
2613
- return false;
2614
- }
2615
- try {
2616
- const parsedVersion = core.parseNamespacedVersion(this.sdkVersion);
2617
- if (!parsedVersion) {
2618
- return false;
2619
- }
2620
- const { namespace, version } = parsedVersion;
2621
- // Check if we have a namespace-specific version requirement
2622
- const namespaceMinVersion = SIGNED_SESSION_ID_MIN_VERSION_BY_NAMESPACE[namespace];
2623
- if (namespaceMinVersion) {
2624
- return semver.gte(version, namespaceMinVersion);
2625
- }
2626
- // Fall back to default version requirement
2627
- return semver.gte(version, SIGNED_SESSION_ID_MIN_VERSION);
2628
- } catch (error) {
2629
- this.logger.warn(`[DynamicWaasWalletClient] Error checking if requiresSignedSessionId should be set to true for version ${this.sdkVersion}`, {
2630
- error: error instanceof Error ? error.message : String(error)
2631
- });
2632
- return false;
2633
- }
2680
+ */ /** @see SignedSessionManager.isRequired */ requiresSignedSessionId() {
2681
+ return this.signedSession.isRequired();
2634
2682
  }
2635
2683
  async initLoggerContext(authToken) {
2636
2684
  // only decode jwt token in header auth mode
@@ -4888,6 +4936,95 @@ class DynamicWalletClient {
4888
4936
  });
4889
4937
  }
4890
4938
  }
4939
+ /**
4940
+ * Post-backup recoverability check (feature-flagged). Where
4941
+ * `assertEncryptionRoundTrip` only proves the cipher decrypts in-process,
4942
+ * this fetches the just-stored share back from the keyshare service and
4943
+ * confirms it decrypts to the same secret we hold in memory — exercising the
4944
+ * real store → fetch → decrypt path the user will rely on to recover.
4945
+ *
4946
+ * The local share is never deleted: a failed/flaky fetch must not be able to
4947
+ * lose the only client copy. A genuine decrypt failure or a value mismatch is
4948
+ * terminal (`EncryptionSelfTestFailedError`, aborting the backup). A transient
4949
+ * fetch failure means the check couldn't run — it is rethrown as-is so it
4950
+ * stays visible and retryable rather than masquerading as "unrecoverable".
4951
+ */ async assertServerCopyRecoverable({ walletId, shareSetId, externalKeyShareIds, expectedShares, password, signedSessionId, accountAddress }) {
4952
+ if (externalKeyShareIds.length === 0 || expectedShares.length === 0) return;
4953
+ // The preceding `/backup` upload consumed this signed session's single-use
4954
+ // nonce, so the verify fetch below is guaranteed to hit a replay-400 and can
4955
+ // only succeed by minting a fresh nonce over the reverse channel. Without a
4956
+ // reverse channel there's no way to run the check, so skip it (with a
4957
+ // warning) rather than abort an otherwise-successful backup.
4958
+ if (!this.getSignedSessionIdCallback) {
4959
+ this.logger.warn('[keyshare-recovery-verify] skipped: no reverse channel to mint a fresh nonce for the verify fetch', {
4960
+ walletId,
4961
+ accountAddress
4962
+ });
4963
+ return;
4964
+ }
4965
+ let data;
4966
+ try {
4967
+ data = await this.recoverEncryptedSharesWithNonceRetry({
4968
+ walletId,
4969
+ shareSetId,
4970
+ externalKeyShareIds,
4971
+ signedSessionId
4972
+ }, {
4973
+ walletId,
4974
+ accountAddress,
4975
+ context: 'verify-backup-recoverable'
4976
+ });
4977
+ } catch (error) {
4978
+ // The verification fetch itself failed (network / nonce / server). This is
4979
+ // not proof the backup is bad — rethrow as-is so it stays retryable.
4980
+ this.logger.warn('[keyshare-recovery-verify] could not fetch stored share to verify, rethrowing', {
4981
+ walletId,
4982
+ accountAddress,
4983
+ errorName: error instanceof Error ? error.name : undefined
4984
+ });
4985
+ throw error;
4986
+ }
4987
+ try {
4988
+ var _data_keyShares;
4989
+ const dynamicShares = ((_data_keyShares = data == null ? void 0 : data.keyShares) != null ? _data_keyShares : []).filter((ks)=>ks.encryptedAccountCredential !== null && ks.backupLocation === core.BackupLocation.DYNAMIC);
4990
+ const decrypted = await Promise.all(dynamicShares.map((ks)=>this.decryptKeyShare({
4991
+ keyShare: ks.encryptedAccountCredential,
4992
+ password
4993
+ })));
4994
+ // Compare on the secret material only (never logged). The pubkey survives
4995
+ // transport as a plain object, so secretShare is the meaningful identity.
4996
+ const recoveredSecrets = new Set(decrypted.map((s)=>s.secretShare));
4997
+ const allRecoverable = expectedShares.every((s)=>recoveredSecrets.has(s.secretShare));
4998
+ if (!allRecoverable) {
4999
+ throw new EncryptionSelfTestFailedError({
5000
+ walletId,
5001
+ accountAddress
5002
+ });
5003
+ }
5004
+ this.logger.info('[keyshare-recovery-verify] stored share verified recoverable', {
5005
+ walletId,
5006
+ accountAddress,
5007
+ sharesVerified: expectedShares.length
5008
+ });
5009
+ } catch (error) {
5010
+ // A genuine decrypt failure or value mismatch means the stored copy is not
5011
+ // recoverable — terminal. Anything else is unexpected and surfaced as-is.
5012
+ if (error instanceof InvalidPasswordError || error instanceof KeyShareDecryptionError || error instanceof EncryptionSelfTestFailedError) {
5013
+ this.logger.error('[keyshare-recovery-verify] stored share is NOT recoverable, aborting backup', {
5014
+ walletId,
5015
+ accountAddress,
5016
+ // Always an Error subclass here (guarded by the instanceof checks above).
5017
+ causeName: error.name
5018
+ });
5019
+ throw error instanceof EncryptionSelfTestFailedError ? error : new EncryptionSelfTestFailedError({
5020
+ walletId,
5021
+ accountAddress,
5022
+ cause: error
5023
+ });
5024
+ }
5025
+ throw error;
5026
+ }
5027
+ }
4891
5028
  async encryptKeyShare({ keyShare, password, onRawKey }) {
4892
5029
  const serializedKeyShare = JSON.stringify(keyShare);
4893
5030
  const encryptedKeyShare = await encryptData({
@@ -5259,8 +5396,7 @@ class DynamicWalletClient {
5259
5396
  try {
5260
5397
  var _preEncryptedCloudShares_, _this_getWalletFromMap, _backupData_locationsWithKeyShares, _backupData_locationsWithKeyShares1;
5261
5398
  // `let` so the retry path can swap in a freshly-signed session via the reverse channel on 400.
5262
- let resolvedSignedSessionId = await this.resolveSignedSessionId(signedSessionId);
5263
- const canRefreshSignedSessionId = this.getSignedSessionIdCallback !== undefined;
5399
+ let resolvedSignedSessionId = await this.signedSession.resolve(signedSessionId);
5264
5400
  if (!(walletData == null ? void 0 : walletData.walletId)) {
5265
5401
  const error = new Error(`WalletId not found for accountAddress ${accountAddress}`);
5266
5402
  logError({
@@ -5353,19 +5489,18 @@ class DynamicWalletClient {
5353
5489
  passwordUpdateBatchId
5354
5490
  }), {
5355
5491
  operationName,
5356
- shouldRetry: async (error, attempt)=>{
5357
- const status = getHttpStatus(error);
5358
- if (status === 400 && attempt === 1 && canRefreshSignedSessionId) {
5359
- resolvedSignedSessionId = await this.resolveSignedSessionId();
5360
- this.logger.info(`[${operationName}] refreshed signed session, retrying`, {
5361
- dynamicRequestId,
5362
- status
5363
- });
5364
- return true;
5365
- }
5366
- // 429 (rate limit) is the textbook back-off-and-retry status.
5367
- return status === undefined || status === 429 || status >= 500;
5368
- }
5492
+ // Refresh a consumed nonce on a 400; otherwise back off and retry
5493
+ // transient statuses (undefined / 429 / 5xx).
5494
+ shouldRetry: this.signedSession.refreshShouldRetry({
5495
+ onRefreshed: (id)=>{
5496
+ resolvedSignedSessionId = id;
5497
+ },
5498
+ operationName,
5499
+ logContext: {
5500
+ dynamicRequestId
5501
+ },
5502
+ alsoRetry: (status)=>status === undefined || status === 429 || status !== undefined && status >= 500
5503
+ })
5369
5504
  }));
5370
5505
  }
5371
5506
  // Cloud providers already have internal retries (Google Drive and iCloud),
@@ -5425,6 +5560,24 @@ class DynamicWalletClient {
5425
5560
  });
5426
5561
  locations.push(location);
5427
5562
  }
5563
+ // Feature-flagged: after the share is uploaded (`/backup`) but before it is
5564
+ // activated (`/backup/locations`), prove it is actually recoverable —
5565
+ // fetch it back from the keyshare service and decrypt it, rather than rely
5566
+ // only on a local encrypt→decrypt round-trip. A failed check throws and
5567
+ // aborts the backup before activation, so an unrecoverable share is never
5568
+ // marked active; the local share is never touched.
5569
+ if (this.featureFlags[core.FEATURE_FLAGS.VERIFY_BACKUP_RECOVERABILITY_FLAG] === true) {
5570
+ const dynamicKeyShareIds = locations.filter((loc)=>loc.location === core.BackupLocation.DYNAMIC && loc.externalKeyShareId).map((loc)=>loc.externalKeyShareId);
5571
+ await this.assertServerCopyRecoverable({
5572
+ walletId: walletData.walletId,
5573
+ shareSetId: targetShareSetId,
5574
+ externalKeyShareIds: dynamicKeyShareIds,
5575
+ expectedShares: distribution.clientShares,
5576
+ password,
5577
+ signedSessionId: resolvedSignedSessionId,
5578
+ accountAddress
5579
+ });
5580
+ }
5428
5581
  // Step 2: Activate server shares. No refresh path here: this endpoint doesn't use
5429
5582
  // the signed session, and its 400 is a server-side share-state mismatch a retry
5430
5583
  // won't fix.
@@ -5555,7 +5708,7 @@ class DynamicWalletClient {
5555
5708
  // still throw — the host can re-auth from the error.
5556
5709
  let resolvedSessionId;
5557
5710
  try {
5558
- resolvedSessionId = await this.resolveSignedSessionId(signedSessionId);
5711
+ resolvedSessionId = await this.signedSession.resolve(signedSessionId);
5559
5712
  } catch (e) {
5560
5713
  resolvedSessionId = undefined;
5561
5714
  }
@@ -5913,13 +6066,14 @@ class DynamicWalletClient {
5913
6066
  externalKeyShareIds: shares[core.BackupLocation.DYNAMIC] || []
5914
6067
  }
5915
6068
  });
5916
- const result = await this.apiClient.recoverEncryptedBackupByWallet({
6069
+ const result = await this.recoverEncryptedSharesWithNonceRetry({
5917
6070
  walletId: wallet.walletId,
5918
6071
  shareSetId: wallet.shareSetId,
5919
6072
  externalKeyShareIds: shares[core.BackupLocation.DYNAMIC] || [],
5920
- signedSessionId,
5921
- requiresSignedSessionId: this.requiresSignedSessionId(),
5922
- userId: this.userId
6073
+ signedSessionId
6074
+ }, {
6075
+ walletId: wallet.walletId,
6076
+ context: 'validatePasswordAgainstEncryptedShares'
5923
6077
  });
5924
6078
  if (!result) {
5925
6079
  throw new Error('Failed to retrieve encrypted backup from API for password validation');
@@ -6110,6 +6264,32 @@ class DynamicWalletClient {
6110
6264
  mfaToken
6111
6265
  }));
6112
6266
  }
6267
+ /**
6268
+ * Fetches encrypted backup shares from the server, transparently refreshing
6269
+ * the signed session on a single-use-nonce rejection. Recovery is otherwise
6270
+ * non-retrying, so other errors surface immediately. When no reverse channel
6271
+ * is configured the provided session is used unchanged.
6272
+ */ async recoverEncryptedSharesWithNonceRetry(params, logContext) {
6273
+ let resolvedSignedSessionId = params.signedSessionId;
6274
+ return retryPromise(()=>this.apiClient.recoverEncryptedBackupByWallet(_extends({}, params, {
6275
+ signedSessionId: resolvedSignedSessionId,
6276
+ requiresSignedSessionId: this.requiresSignedSessionId(),
6277
+ userId: this.userId
6278
+ })), {
6279
+ operationName: 'recoverEncryptedBackupByWallet',
6280
+ // At most one retry — the nonce refresh — and no back-off before it,
6281
+ // since a consumed-nonce 400 is deterministic, not a transient error.
6282
+ maxAttempts: 2,
6283
+ retryInterval: 0,
6284
+ shouldRetry: this.signedSession.refreshShouldRetry({
6285
+ onRefreshed: (id)=>{
6286
+ resolvedSignedSessionId = id;
6287
+ },
6288
+ operationName: 'recoverEncryptedBackupByWallet',
6289
+ logContext
6290
+ })
6291
+ });
6292
+ }
6113
6293
  async internalRecoverEncryptedBackupByWallet({ accountAddress, password, walletOperation, signedSessionId, shareCount = undefined, storeRecoveredShares = true, mfaToken }) {
6114
6294
  try {
6115
6295
  const wallet = this.getWalletFromMap(accountAddress);
@@ -6130,14 +6310,15 @@ class DynamicWalletClient {
6130
6310
  thresholdSignatureScheme: wallet.thresholdSignatureScheme
6131
6311
  }
6132
6312
  });
6133
- const data = await this.apiClient.recoverEncryptedBackupByWallet({
6313
+ const data = await this.recoverEncryptedSharesWithNonceRetry({
6134
6314
  walletId: wallet.walletId,
6135
6315
  shareSetId: wallet.shareSetId,
6136
6316
  externalKeyShareIds: dynamicKeyShareIds,
6137
6317
  signedSessionId,
6138
- mfaToken,
6139
- requiresSignedSessionId: this.requiresSignedSessionId(),
6140
- userId: this.userId
6318
+ mfaToken
6319
+ }, {
6320
+ walletId: wallet.walletId,
6321
+ walletOperation
6141
6322
  });
6142
6323
  const dynamicKeyShares = data.keyShares.filter((keyShare)=>keyShare.encryptedAccountCredential !== null && keyShare.backupLocation === core.BackupLocation.DYNAMIC);
6143
6324
  const decryptedKeyShares = await Promise.all(dynamicKeyShares.map((keyShare)=>// `decryptKeyShare` owns the `environmentId` fallback; passing
@@ -6846,13 +7027,15 @@ class DynamicWalletClient {
6846
7027
  walletOperation
6847
7028
  }
6848
7029
  });
6849
- const data = await this.apiClient.recoverEncryptedBackupByWallet({
7030
+ const data = await this.recoverEncryptedSharesWithNonceRetry({
6850
7031
  walletId: walletData.walletId,
6851
7032
  shareSetId: walletData.shareSetId,
6852
7033
  externalKeyShareIds: dynamicKeyShareIds,
6853
- signedSessionId,
6854
- requiresSignedSessionId: this.requiresSignedSessionId(),
6855
- userId: this.userId
7034
+ signedSessionId
7035
+ }, {
7036
+ walletId: walletData.walletId,
7037
+ context: 'getWallet:eagerLoad',
7038
+ dynamicRequestId
6856
7039
  });
6857
7040
  // Cache encrypted shares for later decryption by unlockWallet
6858
7041
  const encryptedStorageKey = `${normalizeAddress(accountAddress)}${core.ENCRYPTED_SHARES_STORAGE_SUFFIX}`;
@@ -6989,13 +7172,14 @@ class DynamicWalletClient {
6989
7172
  externalKeyShareIds
6990
7173
  }
6991
7174
  });
6992
- const data = await this.apiClient.recoverEncryptedBackupByWallet({
7175
+ const data = await this.recoverEncryptedSharesWithNonceRetry({
6993
7176
  walletId: walletData.walletId,
6994
7177
  externalKeyShareIds,
6995
7178
  signedSessionId,
6996
- mfaToken,
6997
- requiresSignedSessionId: this.requiresSignedSessionId(),
6998
- userId: this.userId
7179
+ mfaToken
7180
+ }, {
7181
+ walletId: walletData.walletId,
7182
+ context: 'fetchAndCacheEncryptedShares'
6999
7183
  });
7000
7184
  if (!data) {
7001
7185
  return null;
@@ -7443,6 +7627,13 @@ class DynamicWalletClient {
7443
7627
  if (internalOptions == null ? void 0 : internalOptions.getSignedSessionId) {
7444
7628
  this.getSignedSessionIdCallback = internalOptions.getSignedSessionId;
7445
7629
  }
7630
+ // Read the callback lazily so it tracks `getSignedSessionIdCallback` even
7631
+ // when tests reassign it after construction.
7632
+ this.signedSession = new SignedSessionManager({
7633
+ logger: this.logger,
7634
+ sdkVersion: this.sdkVersion,
7635
+ getCallback: ()=>this.getSignedSessionIdCallback
7636
+ });
7446
7637
  this.apiClient = new core.DynamicApiClient({
7447
7638
  environmentId,
7448
7639
  authToken,
package/index.esm.js CHANGED
@@ -1,15 +1,15 @@
1
- import { BitcoinAddressType, MPC_RELAY_PROD_API_URL, getMPCChainConfig, BackupLocation, ENCRYPTED_SHARES_STORAGE_SUFFIX, Logger, WalletApiError, handleAxiosError, WalletOperation, WalletReadyState, parseNamespacedVersion, FEATURE_FLAGS, ThresholdSignatureScheme, getClientThreshold, MPC_CONFIG, classifyForwardMpcError, getTSSConfig, serializeMessageForForwardMPC, isEvmCompatibleChain, getReshareConfig, getRequiredExternalKeyShareId, verifiedCredentialNameToChainEnum, AuthMode, NoopLogger, DynamicApiClient, getEnvironmentFromUrl, IFRAME_DOMAIN_MAP } from '@dynamic-labs-wallet/core';
1
+ import { BitcoinAddressType, MPC_RELAY_PROD_API_URL, getMPCChainConfig, BackupLocation, ENCRYPTED_SHARES_STORAGE_SUFFIX, Logger, WalletApiError, handleAxiosError, WalletOperation, parseNamespacedVersion, WalletReadyState, FEATURE_FLAGS, ThresholdSignatureScheme, getClientThreshold, MPC_CONFIG, classifyForwardMpcError, getTSSConfig, serializeMessageForForwardMPC, isEvmCompatibleChain, getReshareConfig, getRequiredExternalKeyShareId, verifiedCredentialNameToChainEnum, AuthMode, NoopLogger, DynamicApiClient, getEnvironmentFromUrl, IFRAME_DOMAIN_MAP } from '@dynamic-labs-wallet/core';
2
2
  export * from '@dynamic-labs-wallet/core';
3
3
  export { Logger } from '@dynamic-labs-wallet/core';
4
4
  import { EdBls12377, BIP340, ExportableEd25519, Ecdsa, MessageHash, EcdsaSignature, EcdsaKeygenResult, ExportableEd25519KeygenResult, BIP340KeygenResult } from '#internal/web';
5
5
  export { BIP340, BIP340InitKeygenResult, BIP340KeygenResult, Ecdsa, EcdsaInitKeygenResult, EcdsaKeygenResult, EcdsaPublicKey, EcdsaSignature, Ed25519, Ed25519InitKeygenResult, Ed25519KeygenResult, EdBls12377, EdBls12377KeygenResult, MessageHash } from '#internal/web';
6
- import { gte } from 'semver';
7
6
  import { v4, validate } from 'uuid';
8
7
  import { SigningAlgorithm } from '@dynamic-labs-wallet/primitives';
9
8
  import { ProviderEnum, RoomTypeEnum } from '@dynamic-labs/sdk-api-core';
10
9
  import loadArgon2idWasm from 'argon2id';
11
10
  import { AxiosError } from 'axios';
12
11
  import PQueue from 'p-queue';
12
+ import { gte } from 'semver';
13
13
 
14
14
  function _extends() {
15
15
  _extends = Object.assign || function assign(target) {
@@ -998,6 +998,16 @@ const downloadFileFromGoogleDrive = async ({ accessToken, fileName })=>{
998
998
  }
999
999
  };
1000
1000
 
1001
+ /**
1002
+ * Extracts the HTTP status from an `AxiosError`, or `undefined` for non-HTTP
1003
+ * errors. Lives in its own leaf module (no `#internal/web` / WASM imports) so
1004
+ * lightweight consumers like `services/signedSession.ts` can use it without
1005
+ * pulling the MPC WASM bundle that `utils.ts` loads.
1006
+ */ const getHttpStatus = (error)=>{
1007
+ var _error_response;
1008
+ return error instanceof AxiosError ? (_error_response = error.response) == null ? void 0 : _error_response.status : undefined;
1009
+ };
1010
+
1001
1011
  const STORAGE_KEY = 'dynamic-waas-wallet-client';
1002
1012
  const BACKUP_FILENAME = 'dynamicWalletKeyShareBackup.json';
1003
1013
  const CLIENT_KEYSHARE_EXPORT_FILENAME_PREFIX = 'dynamicWalletKeyShareBackup';
@@ -1077,14 +1087,6 @@ const getClientKeyShareBackupInfo = (params)=>{
1077
1087
  const timeoutPromise = ({ timeInMs, activity = 'Ceremony' })=>{
1078
1088
  return new Promise((_, reject)=>setTimeout(()=>reject(new Error(`${activity} did not complete in ${timeInMs}ms`)), timeInMs));
1079
1089
  };
1080
- /**
1081
- * Extracts the HTTP status code from an error, returning undefined for non-HTTP
1082
- * failures (network errors, DNS, aborts) which retry logic typically treats
1083
- * the same as 5xx.
1084
- */ const getHttpStatus = (error)=>{
1085
- var _error_response;
1086
- return error instanceof AxiosError ? (_error_response = error.response) == null ? void 0 : _error_response.status : undefined;
1087
- };
1088
1090
  const buildErrorContext = (error)=>{
1089
1091
  var _error_response, _error_response1;
1090
1092
  return {
@@ -2464,6 +2466,84 @@ const readEnvironmentSettings = ()=>{
2464
2466
  }
2465
2467
  });
2466
2468
 
2469
+ /**
2470
+ * Owns everything about signed sessions and their single-use replay nonces:
2471
+ * resolving a session from an explicit value or the host reverse channel,
2472
+ * deciding whether the SDK version requires one, and building the
2473
+ * refresh-on-replay-400 retry predicate shared by the backup and recovery
2474
+ * flows.
2475
+ *
2476
+ * Extracted from `DynamicWalletClient` so this logic can be exercised in
2477
+ * isolation. The host callback is read lazily (`getCallback`) so it stays in
2478
+ * sync with the owning client even if reassigned after construction.
2479
+ */ class SignedSessionManager {
2480
+ /** True when a reverse channel is configured to mint fresh signed sessions. */ get canRefresh() {
2481
+ return this.getCallback() !== undefined;
2482
+ }
2483
+ /**
2484
+ * Resolves the signed session ID from an explicit value or falls back to the
2485
+ * host reverse channel. Throws if neither source provides a value.
2486
+ */ async resolve(signedSessionId) {
2487
+ const callback = this.getCallback();
2488
+ const resolved = signedSessionId != null ? signedSessionId : await (callback == null ? void 0 : callback());
2489
+ if (!resolved) {
2490
+ throw new Error(signedSessionId === undefined && callback ? 'signedSessionId callback returned an invalid value' : 'signedSessionId is required for backup but was not provided and no callback is configured');
2491
+ }
2492
+ return resolved;
2493
+ }
2494
+ /** Whether the configured SDK version requires a signed session ID. */ isRequired() {
2495
+ return this.required;
2496
+ }
2497
+ computeIsRequired(sdkVersion) {
2498
+ if (!sdkVersion) {
2499
+ return false;
2500
+ }
2501
+ try {
2502
+ const parsedVersion = parseNamespacedVersion(sdkVersion);
2503
+ if (!parsedVersion) {
2504
+ return false;
2505
+ }
2506
+ const { namespace, version } = parsedVersion;
2507
+ const namespaceMinVersion = SIGNED_SESSION_ID_MIN_VERSION_BY_NAMESPACE[namespace];
2508
+ if (namespaceMinVersion) {
2509
+ return gte(version, namespaceMinVersion);
2510
+ }
2511
+ return gte(version, SIGNED_SESSION_ID_MIN_VERSION);
2512
+ } catch (error) {
2513
+ this.logger.warn(`[DynamicWaasWalletClient] Error checking if requiresSignedSessionId should be set to true for version ${sdkVersion}`, {
2514
+ error: error instanceof Error ? error.message : String(error)
2515
+ });
2516
+ return false;
2517
+ }
2518
+ }
2519
+ /**
2520
+ * Builds a `retryPromise` `shouldRetry` predicate that refreshes a consumed
2521
+ * single-use nonce via the reverse channel on a replay 400 and retries once.
2522
+ * The signed session carries a single-use replay nonce: it is valid on its
2523
+ * first use, but once consumed (e.g. by a preceding operation) the server
2524
+ * rejects with a 400, at which point a fresh session is fetched and the call
2525
+ * retried. `alsoRetry` lets callers opt into additional retryable statuses
2526
+ * (e.g. 429 / 5xx) on top of the nonce refresh.
2527
+ */ refreshShouldRetry({ onRefreshed, operationName, logContext, alsoRetry }) {
2528
+ return async (error, attempt)=>{
2529
+ const status = getHttpStatus(error);
2530
+ if (status === 400 && attempt === 1 && this.canRefresh) {
2531
+ onRefreshed(await this.resolve());
2532
+ this.logger.info(`[${operationName}] refreshed signed session, retrying`, _extends({
2533
+ status
2534
+ }, logContext));
2535
+ return true;
2536
+ }
2537
+ return alsoRetry ? alsoRetry(status) : false;
2538
+ };
2539
+ }
2540
+ constructor({ logger, sdkVersion, getCallback }){
2541
+ this.logger = logger;
2542
+ this.getCallback = getCallback;
2543
+ this.required = this.computeIsRequired(sdkVersion);
2544
+ }
2545
+ }
2546
+
2467
2547
  /**
2468
2548
  * Determines the recovery state of a wallet based on backup info and local shares.
2469
2549
  *
@@ -2513,17 +2593,6 @@ const KNOWN_SHARE_SET_TYPES = new Set([
2513
2593
  ]);
2514
2594
  class DynamicWalletClient {
2515
2595
  /**
2516
- * Resolves the signed session ID from an explicit value or falls back to the callback.
2517
- * Throws if neither source provides a value.
2518
- */ async resolveSignedSessionId(signedSessionId) {
2519
- const resolved = signedSessionId != null ? signedSessionId : await (this.getSignedSessionIdCallback == null ? void 0 : this.getSignedSessionIdCallback.call(this));
2520
- if (!resolved) {
2521
- const errorMsg = signedSessionId === undefined && this.getSignedSessionIdCallback ? 'signedSessionId callback returned an invalid value' : 'signedSessionId is required for backup but was not provided and no callback is configured';
2522
- throw new Error(errorMsg);
2523
- }
2524
- return resolved;
2525
- }
2526
- /**
2527
2596
  * Check if wallet has heavy operations in progress
2528
2597
  */ static isHeavyOpInProgress(accountAddress) {
2529
2598
  return WalletQueueManager.isHeavyOpInProgress(accountAddress);
@@ -2609,29 +2678,8 @@ class DynamicWalletClient {
2609
2678
  * Check if the SDK version meets the requirement for signed session ID
2610
2679
  * Uses namespace-specific version requirements when available
2611
2680
  * @returns boolean indicating if requireSignedSessionId should be set to true
2612
- */ requiresSignedSessionId() {
2613
- if (!this.sdkVersion) {
2614
- return false;
2615
- }
2616
- try {
2617
- const parsedVersion = parseNamespacedVersion(this.sdkVersion);
2618
- if (!parsedVersion) {
2619
- return false;
2620
- }
2621
- const { namespace, version } = parsedVersion;
2622
- // Check if we have a namespace-specific version requirement
2623
- const namespaceMinVersion = SIGNED_SESSION_ID_MIN_VERSION_BY_NAMESPACE[namespace];
2624
- if (namespaceMinVersion) {
2625
- return gte(version, namespaceMinVersion);
2626
- }
2627
- // Fall back to default version requirement
2628
- return gte(version, SIGNED_SESSION_ID_MIN_VERSION);
2629
- } catch (error) {
2630
- this.logger.warn(`[DynamicWaasWalletClient] Error checking if requiresSignedSessionId should be set to true for version ${this.sdkVersion}`, {
2631
- error: error instanceof Error ? error.message : String(error)
2632
- });
2633
- return false;
2634
- }
2681
+ */ /** @see SignedSessionManager.isRequired */ requiresSignedSessionId() {
2682
+ return this.signedSession.isRequired();
2635
2683
  }
2636
2684
  async initLoggerContext(authToken) {
2637
2685
  // only decode jwt token in header auth mode
@@ -4889,6 +4937,95 @@ class DynamicWalletClient {
4889
4937
  });
4890
4938
  }
4891
4939
  }
4940
+ /**
4941
+ * Post-backup recoverability check (feature-flagged). Where
4942
+ * `assertEncryptionRoundTrip` only proves the cipher decrypts in-process,
4943
+ * this fetches the just-stored share back from the keyshare service and
4944
+ * confirms it decrypts to the same secret we hold in memory — exercising the
4945
+ * real store → fetch → decrypt path the user will rely on to recover.
4946
+ *
4947
+ * The local share is never deleted: a failed/flaky fetch must not be able to
4948
+ * lose the only client copy. A genuine decrypt failure or a value mismatch is
4949
+ * terminal (`EncryptionSelfTestFailedError`, aborting the backup). A transient
4950
+ * fetch failure means the check couldn't run — it is rethrown as-is so it
4951
+ * stays visible and retryable rather than masquerading as "unrecoverable".
4952
+ */ async assertServerCopyRecoverable({ walletId, shareSetId, externalKeyShareIds, expectedShares, password, signedSessionId, accountAddress }) {
4953
+ if (externalKeyShareIds.length === 0 || expectedShares.length === 0) return;
4954
+ // The preceding `/backup` upload consumed this signed session's single-use
4955
+ // nonce, so the verify fetch below is guaranteed to hit a replay-400 and can
4956
+ // only succeed by minting a fresh nonce over the reverse channel. Without a
4957
+ // reverse channel there's no way to run the check, so skip it (with a
4958
+ // warning) rather than abort an otherwise-successful backup.
4959
+ if (!this.getSignedSessionIdCallback) {
4960
+ this.logger.warn('[keyshare-recovery-verify] skipped: no reverse channel to mint a fresh nonce for the verify fetch', {
4961
+ walletId,
4962
+ accountAddress
4963
+ });
4964
+ return;
4965
+ }
4966
+ let data;
4967
+ try {
4968
+ data = await this.recoverEncryptedSharesWithNonceRetry({
4969
+ walletId,
4970
+ shareSetId,
4971
+ externalKeyShareIds,
4972
+ signedSessionId
4973
+ }, {
4974
+ walletId,
4975
+ accountAddress,
4976
+ context: 'verify-backup-recoverable'
4977
+ });
4978
+ } catch (error) {
4979
+ // The verification fetch itself failed (network / nonce / server). This is
4980
+ // not proof the backup is bad — rethrow as-is so it stays retryable.
4981
+ this.logger.warn('[keyshare-recovery-verify] could not fetch stored share to verify, rethrowing', {
4982
+ walletId,
4983
+ accountAddress,
4984
+ errorName: error instanceof Error ? error.name : undefined
4985
+ });
4986
+ throw error;
4987
+ }
4988
+ try {
4989
+ var _data_keyShares;
4990
+ const dynamicShares = ((_data_keyShares = data == null ? void 0 : data.keyShares) != null ? _data_keyShares : []).filter((ks)=>ks.encryptedAccountCredential !== null && ks.backupLocation === BackupLocation.DYNAMIC);
4991
+ const decrypted = await Promise.all(dynamicShares.map((ks)=>this.decryptKeyShare({
4992
+ keyShare: ks.encryptedAccountCredential,
4993
+ password
4994
+ })));
4995
+ // Compare on the secret material only (never logged). The pubkey survives
4996
+ // transport as a plain object, so secretShare is the meaningful identity.
4997
+ const recoveredSecrets = new Set(decrypted.map((s)=>s.secretShare));
4998
+ const allRecoverable = expectedShares.every((s)=>recoveredSecrets.has(s.secretShare));
4999
+ if (!allRecoverable) {
5000
+ throw new EncryptionSelfTestFailedError({
5001
+ walletId,
5002
+ accountAddress
5003
+ });
5004
+ }
5005
+ this.logger.info('[keyshare-recovery-verify] stored share verified recoverable', {
5006
+ walletId,
5007
+ accountAddress,
5008
+ sharesVerified: expectedShares.length
5009
+ });
5010
+ } catch (error) {
5011
+ // A genuine decrypt failure or value mismatch means the stored copy is not
5012
+ // recoverable — terminal. Anything else is unexpected and surfaced as-is.
5013
+ if (error instanceof InvalidPasswordError || error instanceof KeyShareDecryptionError || error instanceof EncryptionSelfTestFailedError) {
5014
+ this.logger.error('[keyshare-recovery-verify] stored share is NOT recoverable, aborting backup', {
5015
+ walletId,
5016
+ accountAddress,
5017
+ // Always an Error subclass here (guarded by the instanceof checks above).
5018
+ causeName: error.name
5019
+ });
5020
+ throw error instanceof EncryptionSelfTestFailedError ? error : new EncryptionSelfTestFailedError({
5021
+ walletId,
5022
+ accountAddress,
5023
+ cause: error
5024
+ });
5025
+ }
5026
+ throw error;
5027
+ }
5028
+ }
4892
5029
  async encryptKeyShare({ keyShare, password, onRawKey }) {
4893
5030
  const serializedKeyShare = JSON.stringify(keyShare);
4894
5031
  const encryptedKeyShare = await encryptData({
@@ -5260,8 +5397,7 @@ class DynamicWalletClient {
5260
5397
  try {
5261
5398
  var _preEncryptedCloudShares_, _this_getWalletFromMap, _backupData_locationsWithKeyShares, _backupData_locationsWithKeyShares1;
5262
5399
  // `let` so the retry path can swap in a freshly-signed session via the reverse channel on 400.
5263
- let resolvedSignedSessionId = await this.resolveSignedSessionId(signedSessionId);
5264
- const canRefreshSignedSessionId = this.getSignedSessionIdCallback !== undefined;
5400
+ let resolvedSignedSessionId = await this.signedSession.resolve(signedSessionId);
5265
5401
  if (!(walletData == null ? void 0 : walletData.walletId)) {
5266
5402
  const error = new Error(`WalletId not found for accountAddress ${accountAddress}`);
5267
5403
  logError({
@@ -5354,19 +5490,18 @@ class DynamicWalletClient {
5354
5490
  passwordUpdateBatchId
5355
5491
  }), {
5356
5492
  operationName,
5357
- shouldRetry: async (error, attempt)=>{
5358
- const status = getHttpStatus(error);
5359
- if (status === 400 && attempt === 1 && canRefreshSignedSessionId) {
5360
- resolvedSignedSessionId = await this.resolveSignedSessionId();
5361
- this.logger.info(`[${operationName}] refreshed signed session, retrying`, {
5362
- dynamicRequestId,
5363
- status
5364
- });
5365
- return true;
5366
- }
5367
- // 429 (rate limit) is the textbook back-off-and-retry status.
5368
- return status === undefined || status === 429 || status >= 500;
5369
- }
5493
+ // Refresh a consumed nonce on a 400; otherwise back off and retry
5494
+ // transient statuses (undefined / 429 / 5xx).
5495
+ shouldRetry: this.signedSession.refreshShouldRetry({
5496
+ onRefreshed: (id)=>{
5497
+ resolvedSignedSessionId = id;
5498
+ },
5499
+ operationName,
5500
+ logContext: {
5501
+ dynamicRequestId
5502
+ },
5503
+ alsoRetry: (status)=>status === undefined || status === 429 || status !== undefined && status >= 500
5504
+ })
5370
5505
  }));
5371
5506
  }
5372
5507
  // Cloud providers already have internal retries (Google Drive and iCloud),
@@ -5426,6 +5561,24 @@ class DynamicWalletClient {
5426
5561
  });
5427
5562
  locations.push(location);
5428
5563
  }
5564
+ // Feature-flagged: after the share is uploaded (`/backup`) but before it is
5565
+ // activated (`/backup/locations`), prove it is actually recoverable —
5566
+ // fetch it back from the keyshare service and decrypt it, rather than rely
5567
+ // only on a local encrypt→decrypt round-trip. A failed check throws and
5568
+ // aborts the backup before activation, so an unrecoverable share is never
5569
+ // marked active; the local share is never touched.
5570
+ if (this.featureFlags[FEATURE_FLAGS.VERIFY_BACKUP_RECOVERABILITY_FLAG] === true) {
5571
+ const dynamicKeyShareIds = locations.filter((loc)=>loc.location === BackupLocation.DYNAMIC && loc.externalKeyShareId).map((loc)=>loc.externalKeyShareId);
5572
+ await this.assertServerCopyRecoverable({
5573
+ walletId: walletData.walletId,
5574
+ shareSetId: targetShareSetId,
5575
+ externalKeyShareIds: dynamicKeyShareIds,
5576
+ expectedShares: distribution.clientShares,
5577
+ password,
5578
+ signedSessionId: resolvedSignedSessionId,
5579
+ accountAddress
5580
+ });
5581
+ }
5429
5582
  // Step 2: Activate server shares. No refresh path here: this endpoint doesn't use
5430
5583
  // the signed session, and its 400 is a server-side share-state mismatch a retry
5431
5584
  // won't fix.
@@ -5556,7 +5709,7 @@ class DynamicWalletClient {
5556
5709
  // still throw — the host can re-auth from the error.
5557
5710
  let resolvedSessionId;
5558
5711
  try {
5559
- resolvedSessionId = await this.resolveSignedSessionId(signedSessionId);
5712
+ resolvedSessionId = await this.signedSession.resolve(signedSessionId);
5560
5713
  } catch (e) {
5561
5714
  resolvedSessionId = undefined;
5562
5715
  }
@@ -5914,13 +6067,14 @@ class DynamicWalletClient {
5914
6067
  externalKeyShareIds: shares[BackupLocation.DYNAMIC] || []
5915
6068
  }
5916
6069
  });
5917
- const result = await this.apiClient.recoverEncryptedBackupByWallet({
6070
+ const result = await this.recoverEncryptedSharesWithNonceRetry({
5918
6071
  walletId: wallet.walletId,
5919
6072
  shareSetId: wallet.shareSetId,
5920
6073
  externalKeyShareIds: shares[BackupLocation.DYNAMIC] || [],
5921
- signedSessionId,
5922
- requiresSignedSessionId: this.requiresSignedSessionId(),
5923
- userId: this.userId
6074
+ signedSessionId
6075
+ }, {
6076
+ walletId: wallet.walletId,
6077
+ context: 'validatePasswordAgainstEncryptedShares'
5924
6078
  });
5925
6079
  if (!result) {
5926
6080
  throw new Error('Failed to retrieve encrypted backup from API for password validation');
@@ -6111,6 +6265,32 @@ class DynamicWalletClient {
6111
6265
  mfaToken
6112
6266
  }));
6113
6267
  }
6268
+ /**
6269
+ * Fetches encrypted backup shares from the server, transparently refreshing
6270
+ * the signed session on a single-use-nonce rejection. Recovery is otherwise
6271
+ * non-retrying, so other errors surface immediately. When no reverse channel
6272
+ * is configured the provided session is used unchanged.
6273
+ */ async recoverEncryptedSharesWithNonceRetry(params, logContext) {
6274
+ let resolvedSignedSessionId = params.signedSessionId;
6275
+ return retryPromise(()=>this.apiClient.recoverEncryptedBackupByWallet(_extends({}, params, {
6276
+ signedSessionId: resolvedSignedSessionId,
6277
+ requiresSignedSessionId: this.requiresSignedSessionId(),
6278
+ userId: this.userId
6279
+ })), {
6280
+ operationName: 'recoverEncryptedBackupByWallet',
6281
+ // At most one retry — the nonce refresh — and no back-off before it,
6282
+ // since a consumed-nonce 400 is deterministic, not a transient error.
6283
+ maxAttempts: 2,
6284
+ retryInterval: 0,
6285
+ shouldRetry: this.signedSession.refreshShouldRetry({
6286
+ onRefreshed: (id)=>{
6287
+ resolvedSignedSessionId = id;
6288
+ },
6289
+ operationName: 'recoverEncryptedBackupByWallet',
6290
+ logContext
6291
+ })
6292
+ });
6293
+ }
6114
6294
  async internalRecoverEncryptedBackupByWallet({ accountAddress, password, walletOperation, signedSessionId, shareCount = undefined, storeRecoveredShares = true, mfaToken }) {
6115
6295
  try {
6116
6296
  const wallet = this.getWalletFromMap(accountAddress);
@@ -6131,14 +6311,15 @@ class DynamicWalletClient {
6131
6311
  thresholdSignatureScheme: wallet.thresholdSignatureScheme
6132
6312
  }
6133
6313
  });
6134
- const data = await this.apiClient.recoverEncryptedBackupByWallet({
6314
+ const data = await this.recoverEncryptedSharesWithNonceRetry({
6135
6315
  walletId: wallet.walletId,
6136
6316
  shareSetId: wallet.shareSetId,
6137
6317
  externalKeyShareIds: dynamicKeyShareIds,
6138
6318
  signedSessionId,
6139
- mfaToken,
6140
- requiresSignedSessionId: this.requiresSignedSessionId(),
6141
- userId: this.userId
6319
+ mfaToken
6320
+ }, {
6321
+ walletId: wallet.walletId,
6322
+ walletOperation
6142
6323
  });
6143
6324
  const dynamicKeyShares = data.keyShares.filter((keyShare)=>keyShare.encryptedAccountCredential !== null && keyShare.backupLocation === BackupLocation.DYNAMIC);
6144
6325
  const decryptedKeyShares = await Promise.all(dynamicKeyShares.map((keyShare)=>// `decryptKeyShare` owns the `environmentId` fallback; passing
@@ -6847,13 +7028,15 @@ class DynamicWalletClient {
6847
7028
  walletOperation
6848
7029
  }
6849
7030
  });
6850
- const data = await this.apiClient.recoverEncryptedBackupByWallet({
7031
+ const data = await this.recoverEncryptedSharesWithNonceRetry({
6851
7032
  walletId: walletData.walletId,
6852
7033
  shareSetId: walletData.shareSetId,
6853
7034
  externalKeyShareIds: dynamicKeyShareIds,
6854
- signedSessionId,
6855
- requiresSignedSessionId: this.requiresSignedSessionId(),
6856
- userId: this.userId
7035
+ signedSessionId
7036
+ }, {
7037
+ walletId: walletData.walletId,
7038
+ context: 'getWallet:eagerLoad',
7039
+ dynamicRequestId
6857
7040
  });
6858
7041
  // Cache encrypted shares for later decryption by unlockWallet
6859
7042
  const encryptedStorageKey = `${normalizeAddress(accountAddress)}${ENCRYPTED_SHARES_STORAGE_SUFFIX}`;
@@ -6990,13 +7173,14 @@ class DynamicWalletClient {
6990
7173
  externalKeyShareIds
6991
7174
  }
6992
7175
  });
6993
- const data = await this.apiClient.recoverEncryptedBackupByWallet({
7176
+ const data = await this.recoverEncryptedSharesWithNonceRetry({
6994
7177
  walletId: walletData.walletId,
6995
7178
  externalKeyShareIds,
6996
7179
  signedSessionId,
6997
- mfaToken,
6998
- requiresSignedSessionId: this.requiresSignedSessionId(),
6999
- userId: this.userId
7180
+ mfaToken
7181
+ }, {
7182
+ walletId: walletData.walletId,
7183
+ context: 'fetchAndCacheEncryptedShares'
7000
7184
  });
7001
7185
  if (!data) {
7002
7186
  return null;
@@ -7444,6 +7628,13 @@ class DynamicWalletClient {
7444
7628
  if (internalOptions == null ? void 0 : internalOptions.getSignedSessionId) {
7445
7629
  this.getSignedSessionIdCallback = internalOptions.getSignedSessionId;
7446
7630
  }
7631
+ // Read the callback lazily so it tracks `getSignedSessionIdCallback` even
7632
+ // when tests reassign it after construction.
7633
+ this.signedSession = new SignedSessionManager({
7634
+ logger: this.logger,
7635
+ sdkVersion: this.sdkVersion,
7636
+ getCallback: ()=>this.getSignedSessionIdCallback
7637
+ });
7447
7638
  this.apiClient = new DynamicApiClient({
7448
7639
  environmentId,
7449
7640
  authToken,
package/package.json CHANGED
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/browser",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "license": "Licensed under the Dynamic Labs, Inc. Terms Of Service (https://www.dynamic.xyz/terms-conditions)",
5
5
  "type": "module",
6
6
  "dependencies": {
7
- "@dynamic-labs-wallet/core": "1.0.20",
7
+ "@dynamic-labs-wallet/core": "1.0.22",
8
8
  "@dynamic-labs-wallet/forward-mpc-client": "0.10.1",
9
- "@dynamic-labs-wallet/primitives": "1.0.20",
9
+ "@dynamic-labs-wallet/primitives": "1.0.22",
10
10
  "@dynamic-labs/sdk-api-core": "^0.0.984",
11
11
  "argon2id": "1.0.1",
12
12
  "axios": "1.16.0",
package/src/client.d.ts CHANGED
@@ -65,11 +65,8 @@ export declare class DynamicWalletClient {
65
65
  * This is NOT part of the public API.
66
66
  */
67
67
  private readonly getSignedSessionIdCallback?;
68
- /**
69
- * Resolves the signed session ID from an explicit value or falls back to the callback.
70
- * Throws if neither source provides a value.
71
- */
72
- private resolveSignedSessionId;
68
+ /** Owns signed-session resolution, version-gating, and nonce-refresh retries. */
69
+ private readonly signedSession;
73
70
  constructor({ environmentId, baseApiUrl, baseMPCRelayApiUrl, storageKey, debug, featureFlags, authMode, authToken, backupServiceAuthToken, sdkVersion, forwardMPCClient, baseClientKeysharesRelayApiUrl, iCloudConfig, logger, }: DynamicWalletClientProps, internalOptions?: DynamicWalletClientInternalOptions);
74
71
  /**
75
72
  * Check if wallet has heavy operations in progress
@@ -126,6 +123,7 @@ export declare class DynamicWalletClient {
126
123
  * Uses namespace-specific version requirements when available
127
124
  * @returns boolean indicating if requireSignedSessionId should be set to true
128
125
  */
126
+ /** @see SignedSessionManager.isRequired */
129
127
  private requiresSignedSessionId;
130
128
  initLoggerContext(authToken: string): Promise<void>;
131
129
  initialize(traceContext?: TraceContext): Promise<InitializeResult>;
@@ -439,6 +437,20 @@ export declare class DynamicWalletClient {
439
437
  * material, and the raw keys are never logged.
440
438
  */
441
439
  private logSelfTestDiagnostics;
440
+ /**
441
+ * Post-backup recoverability check (feature-flagged). Where
442
+ * `assertEncryptionRoundTrip` only proves the cipher decrypts in-process,
443
+ * this fetches the just-stored share back from the keyshare service and
444
+ * confirms it decrypts to the same secret we hold in memory — exercising the
445
+ * real store → fetch → decrypt path the user will rely on to recover.
446
+ *
447
+ * The local share is never deleted: a failed/flaky fetch must not be able to
448
+ * lose the only client copy. A genuine decrypt failure or a value mismatch is
449
+ * terminal (`EncryptionSelfTestFailedError`, aborting the backup). A transient
450
+ * fetch failure means the check couldn't run — it is rethrown as-is so it
451
+ * stays visible and retryable rather than masquerading as "unrecoverable".
452
+ */
453
+ private assertServerCopyRecoverable;
442
454
  encryptKeyShare({ keyShare, password, onRawKey, }: {
443
455
  keyShare: ClientKeyShare;
444
456
  password?: string;
@@ -687,6 +699,13 @@ export declare class DynamicWalletClient {
687
699
  storeRecoveredShares?: boolean;
688
700
  mfaToken?: string;
689
701
  }): Promise<ClientKeyShare[]>;
702
+ /**
703
+ * Fetches encrypted backup shares from the server, transparently refreshing
704
+ * the signed session on a single-use-nonce rejection. Recovery is otherwise
705
+ * non-retrying, so other errors surface immediately. When no reverse channel
706
+ * is configured the provided session is used unchanged.
707
+ */
708
+ private recoverEncryptedSharesWithNonceRetry;
690
709
  private internalRecoverEncryptedBackupByWallet;
691
710
  restoreWallets(): Promise<void>;
692
711
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Extracts the HTTP status from an `AxiosError`, or `undefined` for non-HTTP
3
+ * errors. Lives in its own leaf module (no `#internal/web` / WASM imports) so
4
+ * lightweight consumers like `services/signedSession.ts` can use it without
5
+ * pulling the MPC WASM bundle that `utils.ts` loads.
6
+ */
7
+ export declare const getHttpStatus: (error: unknown) => number | undefined;
8
+ //# sourceMappingURL=httpStatus.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"httpStatus.d.ts","sourceRoot":"","sources":["../../packages/src/httpStatus.ts"],"names":[],"mappings":"AAEA;;;;;GAKG;AACH,eAAO,MAAM,aAAa,UAAW,OAAO,KAAG,MAAM,GAAG,SACU,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { type ILogger } from '@dynamic-labs-wallet/core';
2
+ /** Predicate matching `retryPromise`'s `shouldRetry` option. */
3
+ type ShouldRetry = (error: unknown, attempt: number) => boolean | Promise<boolean>;
4
+ /**
5
+ * Owns everything about signed sessions and their single-use replay nonces:
6
+ * resolving a session from an explicit value or the host reverse channel,
7
+ * deciding whether the SDK version requires one, and building the
8
+ * refresh-on-replay-400 retry predicate shared by the backup and recovery
9
+ * flows.
10
+ *
11
+ * Extracted from `DynamicWalletClient` so this logic can be exercised in
12
+ * isolation. The host callback is read lazily (`getCallback`) so it stays in
13
+ * sync with the owning client even if reassigned after construction.
14
+ */
15
+ export declare class SignedSessionManager {
16
+ private readonly logger;
17
+ private readonly getCallback;
18
+ private readonly required;
19
+ constructor({ logger, sdkVersion, getCallback, }: {
20
+ logger: ILogger;
21
+ sdkVersion?: string;
22
+ getCallback: () => (() => Promise<string>) | undefined;
23
+ });
24
+ /** True when a reverse channel is configured to mint fresh signed sessions. */
25
+ get canRefresh(): boolean;
26
+ /**
27
+ * Resolves the signed session ID from an explicit value or falls back to the
28
+ * host reverse channel. Throws if neither source provides a value.
29
+ */
30
+ resolve(signedSessionId?: string): Promise<string>;
31
+ /** Whether the configured SDK version requires a signed session ID. */
32
+ isRequired(): boolean;
33
+ private computeIsRequired;
34
+ /**
35
+ * Builds a `retryPromise` `shouldRetry` predicate that refreshes a consumed
36
+ * single-use nonce via the reverse channel on a replay 400 and retries once.
37
+ * The signed session carries a single-use replay nonce: it is valid on its
38
+ * first use, but once consumed (e.g. by a preceding operation) the server
39
+ * rejects with a 400, at which point a fresh session is fetched and the call
40
+ * retried. `alsoRetry` lets callers opt into additional retryable statuses
41
+ * (e.g. 429 / 5xx) on top of the nonce refresh.
42
+ */
43
+ refreshShouldRetry({ onRefreshed, operationName, logContext, alsoRetry, }: {
44
+ onRefreshed: (signedSessionId: string) => void;
45
+ operationName: string;
46
+ logContext?: Record<string, unknown>;
47
+ alsoRetry?: (status: number | undefined) => boolean;
48
+ }): ShouldRetry;
49
+ }
50
+ export {};
51
+ //# sourceMappingURL=signedSession.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signedSession.d.ts","sourceRoot":"","sources":["../../src/services/signedSession.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAA0B,MAAM,2BAA2B,CAAC;AAKjF,gEAAgE;AAChE,KAAK,WAAW,GAAG,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAEnF;;;;;;;;;;GAUG;AACH,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAU;IACjC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA4C;IAGxE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAU;gBAEvB,EACV,MAAM,EACN,UAAU,EACV,WAAW,GACZ,EAAE;QACD,MAAM,EAAE,OAAO,CAAC;QAChB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS,CAAC;KACxD;IAMD,+EAA+E;IAC/E,IAAI,UAAU,IAAI,OAAO,CAExB;IAED;;;OAGG;IACG,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAaxD,uEAAuE;IACvE,UAAU,IAAI,OAAO;IAIrB,OAAO,CAAC,iBAAiB;IAwBzB;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EACjB,WAAW,EACX,aAAa,EACb,UAAU,EACV,SAAS,GACV,EAAE;QACD,WAAW,EAAE,CAAC,eAAe,EAAE,MAAM,KAAK,IAAI,CAAC;QAC/C,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACrC,SAAS,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC;KACrD,GAAG,WAAW;CAWhB"}
package/src/utils.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { MessageHash, type EcdsaPublicKey } from '#internal/web';
2
2
  import { BackupLocation, type KeyShareBackupInfo, type ThresholdSignatureScheme, type WaasWalletProperties } from '@dynamic-labs-wallet/core';
3
3
  import type { JwtVerifiedCredential } from '@dynamic-labs/sdk-api-core';
4
+ import { getHttpStatus } from './httpStatus.js';
4
5
  export declare const isBrowser: () => boolean;
5
6
  /**
6
7
  * Helper function to extract pubkey from potentially nested structure
@@ -19,12 +20,7 @@ export declare const timeoutPromise: ({ timeInMs, activity }: {
19
20
  timeInMs: number;
20
21
  activity?: string;
21
22
  }) => Promise<unknown>;
22
- /**
23
- * Extracts the HTTP status code from an error, returning undefined for non-HTTP
24
- * failures (network errors, DNS, aborts) which retry logic typically treats
25
- * the same as 5xx.
26
- */
27
- export declare const getHttpStatus: (error: unknown) => number | undefined;
23
+ export { getHttpStatus };
28
24
  interface RetryConfig {
29
25
  maxAttempts?: number;
30
26
  retryInterval?: number;
@@ -138,5 +134,4 @@ export declare const shouldReshareToSameBackups: ({ oldThresholdSignatureScheme,
138
134
  cloudProviders?: BackupLocation[];
139
135
  delegateToProjectEnvironment?: boolean;
140
136
  }) => boolean;
141
- export {};
142
137
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"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"}