@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 +266 -75
- package/index.esm.js +267 -76
- package/package.json +3 -3
- package/src/client.d.ts +24 -5
- package/src/client.d.ts.map +1 -1
- package/src/httpStatus.d.ts +8 -0
- package/src/httpStatus.d.ts.map +1 -0
- package/src/services/signedSession.d.ts +51 -0
- package/src/services/signedSession.d.ts.map +1 -0
- package/src/utils.d.ts +2 -7
- package/src/utils.d.ts.map +1 -1
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
|
-
|
|
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.
|
|
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
|
-
|
|
5357
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
}
|
|
5366
|
-
|
|
5367
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
5922
|
-
|
|
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.
|
|
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
|
-
|
|
6140
|
-
|
|
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.
|
|
7030
|
+
const data = await this.recoverEncryptedSharesWithNonceRetry({
|
|
6850
7031
|
walletId: walletData.walletId,
|
|
6851
7032
|
shareSetId: walletData.shareSetId,
|
|
6852
7033
|
externalKeyShareIds: dynamicKeyShareIds,
|
|
6853
|
-
signedSessionId
|
|
6854
|
-
|
|
6855
|
-
|
|
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.
|
|
7175
|
+
const data = await this.recoverEncryptedSharesWithNonceRetry({
|
|
6993
7176
|
walletId: walletData.walletId,
|
|
6994
7177
|
externalKeyShareIds,
|
|
6995
7178
|
signedSessionId,
|
|
6996
|
-
mfaToken
|
|
6997
|
-
|
|
6998
|
-
|
|
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,
|
|
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
|
-
|
|
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.
|
|
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
|
-
|
|
5358
|
-
|
|
5359
|
-
|
|
5360
|
-
|
|
5361
|
-
|
|
5362
|
-
|
|
5363
|
-
|
|
5364
|
-
|
|
5365
|
-
|
|
5366
|
-
}
|
|
5367
|
-
|
|
5368
|
-
|
|
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.
|
|
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.
|
|
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
|
-
|
|
5923
|
-
|
|
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.
|
|
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
|
-
|
|
6141
|
-
|
|
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.
|
|
7031
|
+
const data = await this.recoverEncryptedSharesWithNonceRetry({
|
|
6851
7032
|
walletId: walletData.walletId,
|
|
6852
7033
|
shareSetId: walletData.shareSetId,
|
|
6853
7034
|
externalKeyShareIds: dynamicKeyShareIds,
|
|
6854
|
-
signedSessionId
|
|
6855
|
-
|
|
6856
|
-
|
|
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.
|
|
7176
|
+
const data = await this.recoverEncryptedSharesWithNonceRetry({
|
|
6994
7177
|
walletId: walletData.walletId,
|
|
6995
7178
|
externalKeyShareIds,
|
|
6996
7179
|
signedSessionId,
|
|
6997
|
-
mfaToken
|
|
6998
|
-
|
|
6999
|
-
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
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
|
/**
|
package/src/client.d.ts.map
CHANGED
|
@@ -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
|
package/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACjE,OAAO,EACL,cAAc,EAId,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"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"}
|