@dynamic-labs-wallet/core 1.1.44 → 1.1.46

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
@@ -1442,7 +1442,7 @@ const getRequiredExternalKeyShareId = (ks)=>{
1442
1442
  * before it is posted and surfaces in Datadog exactly as the recovery path does.
1443
1443
  */ const assertDynamicLocationsHaveExternalKeyShareId = (locations)=>locations.filter((location)=>location.location === BackupLocation.DYNAMIC).forEach((location)=>getRequiredExternalKeyShareId(location));
1444
1444
 
1445
- var version = "1.1.44";
1445
+ var version = "1.1.46";
1446
1446
 
1447
1447
  /**
1448
1448
  * Reads the Authorization header off an axios request config, which stores
@@ -1578,6 +1578,7 @@ class BaseClient {
1578
1578
  // so we need to pass the backupServiceAuthToken to the clientRelayApiClient
1579
1579
  // This was requested from the backend during initWaasWalletClient
1580
1580
  if (authMode === AuthMode.COOKIE && backupServiceAuthToken && !authToken) {
1581
+ this.backupServiceAuthToken = backupServiceAuthToken;
1581
1582
  headers['Authorization'] = `Bearer ${backupServiceAuthToken}`;
1582
1583
  }
1583
1584
  this.clientRelayApiClient = axios.create({
@@ -1593,7 +1594,7 @@ class BaseClient {
1593
1594
  }
1594
1595
  }
1595
1596
 
1596
- const createWalletAccountRequestBody = ({ chainName, clientKeygenIds, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId })=>{
1597
+ const createWalletAccountRequestBody = ({ chainName, clientKeygenIds, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey })=>{
1597
1598
  const { addressType } = bitcoinConfig || {};
1598
1599
  return _extends({
1599
1600
  chain: chainName,
@@ -1605,6 +1606,8 @@ const createWalletAccountRequestBody = ({ chainName, clientKeygenIds, thresholdS
1605
1606
  addressType
1606
1607
  } : {}, businessAccountId ? {
1607
1608
  businessAccountId
1609
+ } : {}, returnEncryptedWalletApiKey ? {
1610
+ delegateToProjectEnvironment: true
1608
1611
  } : {});
1609
1612
  };
1610
1613
  const MAX_SERVER_MESSAGE_LENGTH = 200;
@@ -1641,6 +1644,51 @@ class DynamicApiClient extends BaseClient {
1641
1644
  });
1642
1645
  return data.token;
1643
1646
  }
1647
+ /**
1648
+ * In cookie mode the relay token is fetched once at iframe boot and never
1649
+ * refreshed, so session rotation or token expiry leaves it stale (DYNT-2309).
1650
+ * Wraps each relay call: re-mint only when the pinned token is missing or
1651
+ * expiring, and retry once with a fresh token when the relay rejects the call
1652
+ * with 403 (revoked session after rotation). The API client authenticates via
1653
+ * cookie, so the new token always carries the live session. A 401 is left to
1654
+ * the existing onUnauthorized handling — session genuinely invalid.
1655
+ */ async withBackupTokenRefresh(call) {
1656
+ if (this.authMode !== AuthMode.COOKIE) {
1657
+ return call();
1658
+ }
1659
+ if (this.isBackupTokenExpiringSoon()) {
1660
+ await this.mintBackupRelayToken();
1661
+ }
1662
+ try {
1663
+ return await call();
1664
+ } catch (error) {
1665
+ var _error_response;
1666
+ const status = axios.isAxiosError(error) ? (_error_response = error.response) == null ? void 0 : _error_response.status : undefined;
1667
+ if (status !== 403) {
1668
+ throw error;
1669
+ }
1670
+ }
1671
+ await this.mintBackupRelayToken();
1672
+ return call();
1673
+ }
1674
+ isBackupTokenExpiringSoon() {
1675
+ if (!this.backupServiceAuthToken) {
1676
+ return true;
1677
+ }
1678
+ try {
1679
+ const payload = JSON.parse(Buffer.from(this.backupServiceAuthToken.split('.')[1], 'base64').toString('utf-8'));
1680
+ return typeof payload.exp !== 'number' || payload.exp * 1000 < Date.now() + 30000;
1681
+ } catch (e) {
1682
+ return true;
1683
+ }
1684
+ }
1685
+ async mintBackupRelayToken() {
1686
+ var _this_backupRelayTokenRefresh;
1687
+ (_this_backupRelayTokenRefresh = this.backupRelayTokenRefresh) != null ? _this_backupRelayTokenRefresh : this.backupRelayTokenRefresh = this.getBackupRelayToken({}).then((token)=>this.syncBackupServiceAuthToken(token)).finally(()=>{
1688
+ this.backupRelayTokenRefresh = undefined;
1689
+ });
1690
+ await this.backupRelayTokenRefresh;
1691
+ }
1644
1692
  async authenticateApiToken({ environmentId, signingPublicKey }) {
1645
1693
  return this.apiClient.post(`/api/v0/environments/${environmentId}/waas/authenticate`, undefined, {
1646
1694
  headers: _extends({
@@ -1650,14 +1698,15 @@ class DynamicApiClient extends BaseClient {
1650
1698
  } : {})
1651
1699
  });
1652
1700
  }
1653
- async createWalletAccount({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, onError, onCeremonyComplete, onSlowDelivery, traceContext }) {
1701
+ async createWalletAccount({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey, onError, onCeremonyComplete, onSlowDelivery, traceContext }) {
1654
1702
  const requestBody = createWalletAccountRequestBody({
1655
1703
  chainName,
1656
1704
  clientKeygenIds,
1657
1705
  thresholdSignatureScheme,
1658
1706
  skipLock,
1659
1707
  bitcoinConfig,
1660
- businessAccountId});
1708
+ businessAccountId,
1709
+ returnEncryptedWalletApiKey});
1661
1710
  return createEventStreamPromise({
1662
1711
  apiClient: this.apiClient,
1663
1712
  dynamicRequestId,
@@ -1678,14 +1727,15 @@ class DynamicApiClient extends BaseClient {
1678
1727
  * serverKeygenIds }`. With `poll: true` it instead reads the in-flight ceremony,
1679
1728
  * returning the wallet identity (`walletId`/`accountAddress`/`shareSetId`) once the
1680
1729
  * worker has finished. The wallet is the product of the full ceremony, not this call.
1681
- */ async requestWalletCreationJson({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, idempotencyKey, timeoutMs, traceContext, poll }) {
1730
+ */ async requestWalletCreationJson({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey, idempotencyKey, timeoutMs, traceContext, poll }) {
1682
1731
  const requestBody = _extends({}, createWalletAccountRequestBody({
1683
1732
  chainName,
1684
1733
  clientKeygenIds,
1685
1734
  thresholdSignatureScheme,
1686
1735
  skipLock,
1687
1736
  bitcoinConfig,
1688
- businessAccountId}), poll ? {
1737
+ businessAccountId,
1738
+ returnEncryptedWalletApiKey}), poll ? {
1689
1739
  poll: true
1690
1740
  } : {});
1691
1741
  return requestJson({
@@ -2144,34 +2194,36 @@ class DynamicApiClient extends BaseClient {
2144
2194
  if (requiresSignedSessionId && !signedSessionId) {
2145
2195
  throw new Error('Signed session ID is required');
2146
2196
  }
2147
- const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, _extends({
2148
- // TODO: decide on whether to store encryptedAccountCredentials or encryptedKeyShares as backup
2149
- encryptedAccountCredentials: encryptedKeyShares,
2150
- passwordEncrypted
2151
- }, passwordSetByBA !== undefined ? {
2152
- passwordSetByBA
2153
- } : {}, {
2154
- encryptionVersion
2155
- }, sendLocation ? _extends({
2156
- sendLocation
2157
- }, shareSetId ? {
2158
- shareSetId
2159
- } : {}, businessAccountId ? {
2160
- businessAccountId
2161
- } : {}, passwordUpdateBatchId ? {
2162
- passwordUpdateBatchId
2163
- } : {}) : {}), {
2164
- headers: _extends({
2165
- [DynamicRequestIdHeader]: dynamicRequestId,
2166
- [DynamicClientSessionSignature]: signedSessionId
2167
- }, sessionPublicKey ? {
2168
- [DynamicSessionPublicKeyHeader]: sessionPublicKey
2197
+ return this.withBackupTokenRefresh(async ()=>{
2198
+ const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, _extends({
2199
+ // TODO: decide on whether to store encryptedAccountCredentials or encryptedKeyShares as backup
2200
+ encryptedAccountCredentials: encryptedKeyShares,
2201
+ passwordEncrypted
2202
+ }, passwordSetByBA !== undefined ? {
2203
+ passwordSetByBA
2169
2204
  } : {}, {
2170
- [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2171
- [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2172
- })
2205
+ encryptionVersion
2206
+ }, sendLocation ? _extends({
2207
+ sendLocation
2208
+ }, shareSetId ? {
2209
+ shareSetId
2210
+ } : {}, businessAccountId ? {
2211
+ businessAccountId
2212
+ } : {}, passwordUpdateBatchId ? {
2213
+ passwordUpdateBatchId
2214
+ } : {}) : {}), {
2215
+ headers: _extends({
2216
+ [DynamicRequestIdHeader]: dynamicRequestId,
2217
+ [DynamicClientSessionSignature]: signedSessionId
2218
+ }, sessionPublicKey ? {
2219
+ [DynamicSessionPublicKeyHeader]: sessionPublicKey
2220
+ } : {}, {
2221
+ [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2222
+ [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2223
+ })
2224
+ });
2225
+ return data;
2173
2226
  });
2174
- return data;
2175
2227
  }
2176
2228
  async markKeySharesAsBackedUp({ walletId, shareSetId, locations, dynamicRequestId, traceContext, passwordUpdateBatchId, businessAccountId }) {
2177
2229
  assertDynamicLocationsHaveExternalKeyShareId(locations);
@@ -2214,27 +2266,29 @@ class DynamicApiClient extends BaseClient {
2214
2266
  const recoverBody = externalKeyShareIds ? {
2215
2267
  keyShareIds: externalKeyShareIds
2216
2268
  } : undefined;
2217
- const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/recover`, recoverBody, {
2218
- headers: {
2219
- [DynamicRequestIdHeader]: dynamicRequestId,
2220
- [DynamicClientSessionSignature]: signedSessionId,
2221
- [DynamicMfaTokenHeader]: mfaToken,
2222
- [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2223
- [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2224
- }
2225
- });
2226
- if (data.keyShares && data.keyShares.length > 1) {
2227
- this.logger.warn('Recover encrypted backup by wallet returning more than 1 share', {
2228
- context: {
2229
- dynamicRequestId,
2230
- environmentId: this.environmentId,
2231
- keyShareCount: data.keyShares.length,
2232
- walletId,
2233
- userId
2269
+ return this.withBackupTokenRefresh(async ()=>{
2270
+ const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/recover`, recoverBody, {
2271
+ headers: {
2272
+ [DynamicRequestIdHeader]: dynamicRequestId,
2273
+ [DynamicClientSessionSignature]: signedSessionId,
2274
+ [DynamicMfaTokenHeader]: mfaToken,
2275
+ [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2276
+ [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2234
2277
  }
2235
2278
  });
2236
- }
2237
- return data;
2279
+ if (data.keyShares && data.keyShares.length > 1) {
2280
+ this.logger.warn('Recover encrypted backup by wallet returning more than 1 share', {
2281
+ context: {
2282
+ dynamicRequestId,
2283
+ environmentId: this.environmentId,
2284
+ keyShareCount: data.keyShares.length,
2285
+ walletId,
2286
+ userId
2287
+ }
2288
+ });
2289
+ }
2290
+ return data;
2291
+ });
2238
2292
  }
2239
2293
  async getAccessToken({ oauthAccountId, traceContext }) {
2240
2294
  const { data } = await this.apiClient.get(`${this.sdkRoutePrefix}/${this.environmentId}/oauthAccounts/${oauthAccountId}/accessToken`, {
@@ -2476,24 +2530,26 @@ class DynamicApiClient extends BaseClient {
2476
2530
  * to thread as `externalKeyShareId` into `markKeySharesAsBackedUp`.
2477
2531
  * Hardened auth (scoped grant token) is the follow-up — DYNT-1071/1072.
2478
2532
  */ async backupOnBehalfOfAddedSigner({ walletId, targetUserId, encryptedAccountCredentials, passwordEncrypted, encryptionVersion, clientKeyshareBackupGrant, signedSessionId, dynamicRequestId, traceContext }) {
2479
- const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, {
2480
- encryptedAccountCredentials,
2481
- passwordEncrypted,
2482
- passwordSetByBA: true,
2483
- encryptionVersion,
2484
- targetUserId
2485
- }, {
2486
- headers: _extends({
2487
- [DynamicRequestIdHeader]: dynamicRequestId,
2488
- [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2489
- [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2490
- }, signedSessionId && {
2491
- [DynamicClientSessionSignature]: signedSessionId
2492
- }, clientKeyshareBackupGrant && {
2493
- Authorization: `Bearer ${clientKeyshareBackupGrant}`
2494
- })
2533
+ return this.withBackupTokenRefresh(async ()=>{
2534
+ const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, {
2535
+ encryptedAccountCredentials,
2536
+ passwordEncrypted,
2537
+ passwordSetByBA: true,
2538
+ encryptionVersion,
2539
+ targetUserId
2540
+ }, {
2541
+ headers: _extends({
2542
+ [DynamicRequestIdHeader]: dynamicRequestId,
2543
+ [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2544
+ [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2545
+ }, signedSessionId && {
2546
+ [DynamicClientSessionSignature]: signedSessionId
2547
+ }, clientKeyshareBackupGrant && {
2548
+ Authorization: `Bearer ${clientKeyshareBackupGrant}`
2549
+ })
2550
+ });
2551
+ return data;
2495
2552
  });
2496
- return data;
2497
2553
  }
2498
2554
  async delegatedSignMessage({ walletId, shareSetId, message, isFormatted, dynamicRequestId, onError, context, traceContext }) {
2499
2555
  return createEventStreamPromise({
@@ -3113,6 +3169,64 @@ const RECOVERED_CONNECTION_CHURN_CODES = new Set([
3113
3169
  * protocol breakage and must stay at `error` so monitors can page on them.
3114
3170
  */ const isRecoveredForwardMpcConnectionChurn = (classification)=>classification.errorType === 'RATE_LIMITED' || classification.errorCode !== undefined && RECOVERED_CONNECTION_CHURN_CODES.has(classification.errorCode);
3115
3171
 
3172
+ /**
3173
+ * True when the forward enclave may already be in the room. The enclave gets
3174
+ * the room only inside a request sent over an established session, so only a
3175
+ * failure after the session, or an unrecognised error (no code), can follow a join.
3176
+ */ const forwardMpcMayHaveJoinedRoom = ({ sessionEstablished, errorCode })=>sessionEstablished || errorCode === undefined;
3177
+ const throwIfAborted = (signal)=>{
3178
+ if (signal == null ? void 0 : signal.aborted) {
3179
+ throw signal.reason instanceof Error ? signal.reason : new Error('Operation aborted');
3180
+ }
3181
+ };
3182
+ // Observers are telemetry only; their failures must not change the fallback.
3183
+ const notify = (observer, value)=>{
3184
+ try {
3185
+ observer == null ? void 0 : observer(value);
3186
+ } catch (e) {
3187
+ // Ignored on purpose.
3188
+ }
3189
+ };
3190
+ /**
3191
+ * Runs an MPC ceremony over forward MPC, falling back to relay MPC on a
3192
+ * fallback-eligible failure.
3193
+ *
3194
+ * Invariant: relay never runs in a room the forward enclave may have joined.
3195
+ * That would put the same party in the room twice and fail with
3196
+ * "Mismatch between the public keys of the server and the ones provided".
3197
+ * When the enclave may have joined, relay runs in a room from `refreshRoom`;
3198
+ * without `refreshRoom`, the forward error is rethrown.
3199
+ *
3200
+ * `signal` stops the fallback when the operation already failed elsewhere
3201
+ * (for example, a server policy denial). A forward ceremony already in flight
3202
+ * cannot be cancelled.
3203
+ */ const runWithForwardMpcFallback = async ({ room, forward, relay, refreshRoom, signal, onForwardFailure, onRoomRefreshed })=>{
3204
+ throwIfAborted(signal);
3205
+ if (!forward) {
3206
+ return relay(room);
3207
+ }
3208
+ let relayRoom = room;
3209
+ try {
3210
+ return await forward(room);
3211
+ } catch (error) {
3212
+ const errorInfo = utils.classifyForwardMpcError(error);
3213
+ notify(onForwardFailure, errorInfo);
3214
+ if (!errorInfo.shouldFallback) {
3215
+ throw error;
3216
+ }
3217
+ throwIfAborted(signal);
3218
+ if (forwardMpcMayHaveJoinedRoom(errorInfo)) {
3219
+ if (!refreshRoom) {
3220
+ throw error;
3221
+ }
3222
+ relayRoom = await refreshRoom();
3223
+ throwIfAborted(signal);
3224
+ notify(onRoomRefreshed, relayRoom);
3225
+ }
3226
+ }
3227
+ return relay(relayRoom);
3228
+ };
3229
+
3116
3230
  /**
3117
3231
  * Appends `envId` to the ForwardMPC enclave WebSocket URL.
3118
3232
  *
@@ -3305,6 +3419,7 @@ exports.createSigningIntent = createSigningIntent;
3305
3419
  exports.extractServerErrorCode = extractServerErrorCode;
3306
3420
  exports.formatNamespacedVersion = formatNamespacedVersion;
3307
3421
  exports.formatRawMessageForSigning = formatRawMessageForSigning;
3422
+ exports.forwardMpcMayHaveJoinedRoom = forwardMpcMayHaveJoinedRoom;
3308
3423
  exports.getBitcoinChainConfig = getBitcoinChainConfig;
3309
3424
  exports.getClientThreshold = getClientThreshold;
3310
3425
  exports.getDynamicServerThreshold = getDynamicServerThreshold;
@@ -3324,6 +3439,7 @@ exports.isRecoveredForwardMpcConnectionChurn = isRecoveredForwardMpcConnectionCh
3324
3439
  exports.normalizeAndValidatePrivateKey = normalizeAndValidatePrivateKey;
3325
3440
  exports.parseNamespacedVersion = parseNamespacedVersion;
3326
3441
  exports.prepareRawMessageSigningPayload = prepareRawMessageSigningPayload;
3442
+ exports.runWithForwardMpcFallback = runWithForwardMpcFallback;
3327
3443
  exports.sanitizeBusinessAccountSignedIntent = sanitizeBusinessAccountSignedIntent;
3328
3444
  exports.serializeError = serializeError;
3329
3445
  exports.serializeMessageForForwardMPC = serializeMessageForForwardMPC;
package/index.esm.js CHANGED
@@ -7,6 +7,7 @@ export { WaasPolicyConstraintCondition } from '@dynamic-labs/sdk-api-core/models
7
7
  export { WaasPolicyRuleType } from '@dynamic-labs/sdk-api-core/models/WaasPolicyRuleType';
8
8
  import axios, { isAxiosError } from 'axios';
9
9
  export { isAxiosError } from 'axios';
10
+ import { classifyForwardMpcError } from '@dynamic-labs-wallet/forward-mpc-client/utils';
10
11
  export { classifyForwardMpcError, isAttestationError, isForwardMpcError } from '@dynamic-labs-wallet/forward-mpc-client/utils';
11
12
 
12
13
  var ENVIRONMENT_ENUM = /*#__PURE__*/ function(ENVIRONMENT_ENUM) {
@@ -1443,7 +1444,7 @@ const getRequiredExternalKeyShareId = (ks)=>{
1443
1444
  * before it is posted and surfaces in Datadog exactly as the recovery path does.
1444
1445
  */ const assertDynamicLocationsHaveExternalKeyShareId = (locations)=>locations.filter((location)=>location.location === BackupLocation.DYNAMIC).forEach((location)=>getRequiredExternalKeyShareId(location));
1445
1446
 
1446
- var version = "1.1.44";
1447
+ var version = "1.1.46";
1447
1448
 
1448
1449
  /**
1449
1450
  * Reads the Authorization header off an axios request config, which stores
@@ -1579,6 +1580,7 @@ class BaseClient {
1579
1580
  // so we need to pass the backupServiceAuthToken to the clientRelayApiClient
1580
1581
  // This was requested from the backend during initWaasWalletClient
1581
1582
  if (authMode === AuthMode.COOKIE && backupServiceAuthToken && !authToken) {
1583
+ this.backupServiceAuthToken = backupServiceAuthToken;
1582
1584
  headers['Authorization'] = `Bearer ${backupServiceAuthToken}`;
1583
1585
  }
1584
1586
  this.clientRelayApiClient = axios.create({
@@ -1594,7 +1596,7 @@ class BaseClient {
1594
1596
  }
1595
1597
  }
1596
1598
 
1597
- const createWalletAccountRequestBody = ({ chainName, clientKeygenIds, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId })=>{
1599
+ const createWalletAccountRequestBody = ({ chainName, clientKeygenIds, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey })=>{
1598
1600
  const { addressType } = bitcoinConfig || {};
1599
1601
  return _extends({
1600
1602
  chain: chainName,
@@ -1606,6 +1608,8 @@ const createWalletAccountRequestBody = ({ chainName, clientKeygenIds, thresholdS
1606
1608
  addressType
1607
1609
  } : {}, businessAccountId ? {
1608
1610
  businessAccountId
1611
+ } : {}, returnEncryptedWalletApiKey ? {
1612
+ delegateToProjectEnvironment: true
1609
1613
  } : {});
1610
1614
  };
1611
1615
  const MAX_SERVER_MESSAGE_LENGTH = 200;
@@ -1642,6 +1646,51 @@ class DynamicApiClient extends BaseClient {
1642
1646
  });
1643
1647
  return data.token;
1644
1648
  }
1649
+ /**
1650
+ * In cookie mode the relay token is fetched once at iframe boot and never
1651
+ * refreshed, so session rotation or token expiry leaves it stale (DYNT-2309).
1652
+ * Wraps each relay call: re-mint only when the pinned token is missing or
1653
+ * expiring, and retry once with a fresh token when the relay rejects the call
1654
+ * with 403 (revoked session after rotation). The API client authenticates via
1655
+ * cookie, so the new token always carries the live session. A 401 is left to
1656
+ * the existing onUnauthorized handling — session genuinely invalid.
1657
+ */ async withBackupTokenRefresh(call) {
1658
+ if (this.authMode !== AuthMode.COOKIE) {
1659
+ return call();
1660
+ }
1661
+ if (this.isBackupTokenExpiringSoon()) {
1662
+ await this.mintBackupRelayToken();
1663
+ }
1664
+ try {
1665
+ return await call();
1666
+ } catch (error) {
1667
+ var _error_response;
1668
+ const status = isAxiosError(error) ? (_error_response = error.response) == null ? void 0 : _error_response.status : undefined;
1669
+ if (status !== 403) {
1670
+ throw error;
1671
+ }
1672
+ }
1673
+ await this.mintBackupRelayToken();
1674
+ return call();
1675
+ }
1676
+ isBackupTokenExpiringSoon() {
1677
+ if (!this.backupServiceAuthToken) {
1678
+ return true;
1679
+ }
1680
+ try {
1681
+ const payload = JSON.parse(Buffer.from(this.backupServiceAuthToken.split('.')[1], 'base64').toString('utf-8'));
1682
+ return typeof payload.exp !== 'number' || payload.exp * 1000 < Date.now() + 30000;
1683
+ } catch (e) {
1684
+ return true;
1685
+ }
1686
+ }
1687
+ async mintBackupRelayToken() {
1688
+ var _this_backupRelayTokenRefresh;
1689
+ (_this_backupRelayTokenRefresh = this.backupRelayTokenRefresh) != null ? _this_backupRelayTokenRefresh : this.backupRelayTokenRefresh = this.getBackupRelayToken({}).then((token)=>this.syncBackupServiceAuthToken(token)).finally(()=>{
1690
+ this.backupRelayTokenRefresh = undefined;
1691
+ });
1692
+ await this.backupRelayTokenRefresh;
1693
+ }
1645
1694
  async authenticateApiToken({ environmentId, signingPublicKey }) {
1646
1695
  return this.apiClient.post(`/api/v0/environments/${environmentId}/waas/authenticate`, undefined, {
1647
1696
  headers: _extends({
@@ -1651,14 +1700,15 @@ class DynamicApiClient extends BaseClient {
1651
1700
  } : {})
1652
1701
  });
1653
1702
  }
1654
- async createWalletAccount({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, onError, onCeremonyComplete, onSlowDelivery, traceContext }) {
1703
+ async createWalletAccount({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey, onError, onCeremonyComplete, onSlowDelivery, traceContext }) {
1655
1704
  const requestBody = createWalletAccountRequestBody({
1656
1705
  chainName,
1657
1706
  clientKeygenIds,
1658
1707
  thresholdSignatureScheme,
1659
1708
  skipLock,
1660
1709
  bitcoinConfig,
1661
- businessAccountId});
1710
+ businessAccountId,
1711
+ returnEncryptedWalletApiKey});
1662
1712
  return createEventStreamPromise({
1663
1713
  apiClient: this.apiClient,
1664
1714
  dynamicRequestId,
@@ -1679,14 +1729,15 @@ class DynamicApiClient extends BaseClient {
1679
1729
  * serverKeygenIds }`. With `poll: true` it instead reads the in-flight ceremony,
1680
1730
  * returning the wallet identity (`walletId`/`accountAddress`/`shareSetId`) once the
1681
1731
  * worker has finished. The wallet is the product of the full ceremony, not this call.
1682
- */ async requestWalletCreationJson({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, idempotencyKey, timeoutMs, traceContext, poll }) {
1732
+ */ async requestWalletCreationJson({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey, idempotencyKey, timeoutMs, traceContext, poll }) {
1683
1733
  const requestBody = _extends({}, createWalletAccountRequestBody({
1684
1734
  chainName,
1685
1735
  clientKeygenIds,
1686
1736
  thresholdSignatureScheme,
1687
1737
  skipLock,
1688
1738
  bitcoinConfig,
1689
- businessAccountId}), poll ? {
1739
+ businessAccountId,
1740
+ returnEncryptedWalletApiKey}), poll ? {
1690
1741
  poll: true
1691
1742
  } : {});
1692
1743
  return requestJson({
@@ -2145,34 +2196,36 @@ class DynamicApiClient extends BaseClient {
2145
2196
  if (requiresSignedSessionId && !signedSessionId) {
2146
2197
  throw new Error('Signed session ID is required');
2147
2198
  }
2148
- const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, _extends({
2149
- // TODO: decide on whether to store encryptedAccountCredentials or encryptedKeyShares as backup
2150
- encryptedAccountCredentials: encryptedKeyShares,
2151
- passwordEncrypted
2152
- }, passwordSetByBA !== undefined ? {
2153
- passwordSetByBA
2154
- } : {}, {
2155
- encryptionVersion
2156
- }, sendLocation ? _extends({
2157
- sendLocation
2158
- }, shareSetId ? {
2159
- shareSetId
2160
- } : {}, businessAccountId ? {
2161
- businessAccountId
2162
- } : {}, passwordUpdateBatchId ? {
2163
- passwordUpdateBatchId
2164
- } : {}) : {}), {
2165
- headers: _extends({
2166
- [DynamicRequestIdHeader]: dynamicRequestId,
2167
- [DynamicClientSessionSignature]: signedSessionId
2168
- }, sessionPublicKey ? {
2169
- [DynamicSessionPublicKeyHeader]: sessionPublicKey
2199
+ return this.withBackupTokenRefresh(async ()=>{
2200
+ const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, _extends({
2201
+ // TODO: decide on whether to store encryptedAccountCredentials or encryptedKeyShares as backup
2202
+ encryptedAccountCredentials: encryptedKeyShares,
2203
+ passwordEncrypted
2204
+ }, passwordSetByBA !== undefined ? {
2205
+ passwordSetByBA
2170
2206
  } : {}, {
2171
- [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2172
- [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2173
- })
2207
+ encryptionVersion
2208
+ }, sendLocation ? _extends({
2209
+ sendLocation
2210
+ }, shareSetId ? {
2211
+ shareSetId
2212
+ } : {}, businessAccountId ? {
2213
+ businessAccountId
2214
+ } : {}, passwordUpdateBatchId ? {
2215
+ passwordUpdateBatchId
2216
+ } : {}) : {}), {
2217
+ headers: _extends({
2218
+ [DynamicRequestIdHeader]: dynamicRequestId,
2219
+ [DynamicClientSessionSignature]: signedSessionId
2220
+ }, sessionPublicKey ? {
2221
+ [DynamicSessionPublicKeyHeader]: sessionPublicKey
2222
+ } : {}, {
2223
+ [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2224
+ [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2225
+ })
2226
+ });
2227
+ return data;
2174
2228
  });
2175
- return data;
2176
2229
  }
2177
2230
  async markKeySharesAsBackedUp({ walletId, shareSetId, locations, dynamicRequestId, traceContext, passwordUpdateBatchId, businessAccountId }) {
2178
2231
  assertDynamicLocationsHaveExternalKeyShareId(locations);
@@ -2215,27 +2268,29 @@ class DynamicApiClient extends BaseClient {
2215
2268
  const recoverBody = externalKeyShareIds ? {
2216
2269
  keyShareIds: externalKeyShareIds
2217
2270
  } : undefined;
2218
- const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/recover`, recoverBody, {
2219
- headers: {
2220
- [DynamicRequestIdHeader]: dynamicRequestId,
2221
- [DynamicClientSessionSignature]: signedSessionId,
2222
- [DynamicMfaTokenHeader]: mfaToken,
2223
- [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2224
- [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2225
- }
2226
- });
2227
- if (data.keyShares && data.keyShares.length > 1) {
2228
- this.logger.warn('Recover encrypted backup by wallet returning more than 1 share', {
2229
- context: {
2230
- dynamicRequestId,
2231
- environmentId: this.environmentId,
2232
- keyShareCount: data.keyShares.length,
2233
- walletId,
2234
- userId
2271
+ return this.withBackupTokenRefresh(async ()=>{
2272
+ const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/recover`, recoverBody, {
2273
+ headers: {
2274
+ [DynamicRequestIdHeader]: dynamicRequestId,
2275
+ [DynamicClientSessionSignature]: signedSessionId,
2276
+ [DynamicMfaTokenHeader]: mfaToken,
2277
+ [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2278
+ [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2235
2279
  }
2236
2280
  });
2237
- }
2238
- return data;
2281
+ if (data.keyShares && data.keyShares.length > 1) {
2282
+ this.logger.warn('Recover encrypted backup by wallet returning more than 1 share', {
2283
+ context: {
2284
+ dynamicRequestId,
2285
+ environmentId: this.environmentId,
2286
+ keyShareCount: data.keyShares.length,
2287
+ walletId,
2288
+ userId
2289
+ }
2290
+ });
2291
+ }
2292
+ return data;
2293
+ });
2239
2294
  }
2240
2295
  async getAccessToken({ oauthAccountId, traceContext }) {
2241
2296
  const { data } = await this.apiClient.get(`${this.sdkRoutePrefix}/${this.environmentId}/oauthAccounts/${oauthAccountId}/accessToken`, {
@@ -2477,24 +2532,26 @@ class DynamicApiClient extends BaseClient {
2477
2532
  * to thread as `externalKeyShareId` into `markKeySharesAsBackedUp`.
2478
2533
  * Hardened auth (scoped grant token) is the follow-up — DYNT-1071/1072.
2479
2534
  */ async backupOnBehalfOfAddedSigner({ walletId, targetUserId, encryptedAccountCredentials, passwordEncrypted, encryptionVersion, clientKeyshareBackupGrant, signedSessionId, dynamicRequestId, traceContext }) {
2480
- const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, {
2481
- encryptedAccountCredentials,
2482
- passwordEncrypted,
2483
- passwordSetByBA: true,
2484
- encryptionVersion,
2485
- targetUserId
2486
- }, {
2487
- headers: _extends({
2488
- [DynamicRequestIdHeader]: dynamicRequestId,
2489
- [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2490
- [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2491
- }, signedSessionId && {
2492
- [DynamicClientSessionSignature]: signedSessionId
2493
- }, clientKeyshareBackupGrant && {
2494
- Authorization: `Bearer ${clientKeyshareBackupGrant}`
2495
- })
2535
+ return this.withBackupTokenRefresh(async ()=>{
2536
+ const { data } = await this.clientRelayApiClient.post(`${this.waasRoutePrefix}/${walletId}/keyShares/backup`, {
2537
+ encryptedAccountCredentials,
2538
+ passwordEncrypted,
2539
+ passwordSetByBA: true,
2540
+ encryptionVersion,
2541
+ targetUserId
2542
+ }, {
2543
+ headers: _extends({
2544
+ [DynamicRequestIdHeader]: dynamicRequestId,
2545
+ [DynamicTraceIdHeader]: traceContext == null ? void 0 : traceContext.traceId,
2546
+ [DynamicTraceElapsedTimeHeader]: getElapsedTime(traceContext == null ? void 0 : traceContext.startTime)
2547
+ }, signedSessionId && {
2548
+ [DynamicClientSessionSignature]: signedSessionId
2549
+ }, clientKeyshareBackupGrant && {
2550
+ Authorization: `Bearer ${clientKeyshareBackupGrant}`
2551
+ })
2552
+ });
2553
+ return data;
2496
2554
  });
2497
- return data;
2498
2555
  }
2499
2556
  async delegatedSignMessage({ walletId, shareSetId, message, isFormatted, dynamicRequestId, onError, context, traceContext }) {
2500
2557
  return createEventStreamPromise({
@@ -3114,6 +3171,64 @@ const RECOVERED_CONNECTION_CHURN_CODES = new Set([
3114
3171
  * protocol breakage and must stay at `error` so monitors can page on them.
3115
3172
  */ const isRecoveredForwardMpcConnectionChurn = (classification)=>classification.errorType === 'RATE_LIMITED' || classification.errorCode !== undefined && RECOVERED_CONNECTION_CHURN_CODES.has(classification.errorCode);
3116
3173
 
3174
+ /**
3175
+ * True when the forward enclave may already be in the room. The enclave gets
3176
+ * the room only inside a request sent over an established session, so only a
3177
+ * failure after the session, or an unrecognised error (no code), can follow a join.
3178
+ */ const forwardMpcMayHaveJoinedRoom = ({ sessionEstablished, errorCode })=>sessionEstablished || errorCode === undefined;
3179
+ const throwIfAborted = (signal)=>{
3180
+ if (signal == null ? void 0 : signal.aborted) {
3181
+ throw signal.reason instanceof Error ? signal.reason : new Error('Operation aborted');
3182
+ }
3183
+ };
3184
+ // Observers are telemetry only; their failures must not change the fallback.
3185
+ const notify = (observer, value)=>{
3186
+ try {
3187
+ observer == null ? void 0 : observer(value);
3188
+ } catch (e) {
3189
+ // Ignored on purpose.
3190
+ }
3191
+ };
3192
+ /**
3193
+ * Runs an MPC ceremony over forward MPC, falling back to relay MPC on a
3194
+ * fallback-eligible failure.
3195
+ *
3196
+ * Invariant: relay never runs in a room the forward enclave may have joined.
3197
+ * That would put the same party in the room twice and fail with
3198
+ * "Mismatch between the public keys of the server and the ones provided".
3199
+ * When the enclave may have joined, relay runs in a room from `refreshRoom`;
3200
+ * without `refreshRoom`, the forward error is rethrown.
3201
+ *
3202
+ * `signal` stops the fallback when the operation already failed elsewhere
3203
+ * (for example, a server policy denial). A forward ceremony already in flight
3204
+ * cannot be cancelled.
3205
+ */ const runWithForwardMpcFallback = async ({ room, forward, relay, refreshRoom, signal, onForwardFailure, onRoomRefreshed })=>{
3206
+ throwIfAborted(signal);
3207
+ if (!forward) {
3208
+ return relay(room);
3209
+ }
3210
+ let relayRoom = room;
3211
+ try {
3212
+ return await forward(room);
3213
+ } catch (error) {
3214
+ const errorInfo = classifyForwardMpcError(error);
3215
+ notify(onForwardFailure, errorInfo);
3216
+ if (!errorInfo.shouldFallback) {
3217
+ throw error;
3218
+ }
3219
+ throwIfAborted(signal);
3220
+ if (forwardMpcMayHaveJoinedRoom(errorInfo)) {
3221
+ if (!refreshRoom) {
3222
+ throw error;
3223
+ }
3224
+ relayRoom = await refreshRoom();
3225
+ throwIfAborted(signal);
3226
+ notify(onRoomRefreshed, relayRoom);
3227
+ }
3228
+ }
3229
+ return relay(relayRoom);
3230
+ };
3231
+
3117
3232
  /**
3118
3233
  * Appends `envId` to the ForwardMPC enclave WebSocket URL.
3119
3234
  *
@@ -3193,4 +3308,4 @@ const prepareRawMessageSigningPayload = (chainName, message)=>{
3193
3308
  (_requestId = (_target1 = target).requestId) != null ? _requestId : _target1.requestId = requestId;
3194
3309
  };
3195
3310
 
3196
- export { AuthMode, BITCOIN_ADDRESS_TYPE_CONFIG, BITCOIN_DERIVATION_PATHS, BROWSER_SDK_ROUTE_PREFIX, BackupLocation, BitcoinAddressType, BitcoinNetwork, BusinessAccountClient, BusinessAccountMemberRole, BusinessAccountSignerType, CreateRoomPartiesOptions, DEFAULT_ED25519_VARIANT, DELEGATED_SHARE_COUNT, DYNAMIC_AUTH_BASE_API_URL_MAP, DYNAMIC_AUTH_DEV_BASE_API_URL, DYNAMIC_AUTH_PREPROD_BASE_API_URL, DYNAMIC_AUTH_PROD_BASE_API_URL, DYNAMIC_CLIENT_RELAY_REDCOAST_API_KEY_MAP, DYNAMIC_CLIENT_RELAY_REDCOAST_APP_ID_MAP, DYNAMIC_FORWARD_MPC_DEV_ENCLAVE_URL, DYNAMIC_FORWARD_MPC_ENCLAVE_ATTESTATION_CONFIG_MAP, DYNAMIC_FORWARD_MPC_ENCLAVE_URL_MAP, DYNAMIC_FORWARD_MPC_PREPROD_ENCLAVE_URL, DYNAMIC_FORWARD_MPC_PROD_ENCLAVE_URL, DYNAMIC_KEYSHARES_RELAY_MAP, DYNAMIC_KEYSHARES_RELAY_PREPROD_BASE_API_URL, DYNAMIC_KEYSHARES_RELAY_PROD_BASE_API_URL, DynamicApiClient, DynamicClientSessionSignature, DynamicElevatedAccessTokenHeader, DynamicForwardMPCHeader, DynamicMfaTokenHeader, DynamicRequestIdHeader, DynamicSessionPublicKeyHeader, DynamicTraceElapsedTimeHeader, DynamicTraceIdHeader, ENCRYPTED_SHARES_STORAGE_SUFFIX, ENVIRONMENT_ENUM, EVM_COMPATIBLE_CHAINS, FEATURE_FLAGS, IFRAME_DOMAIN_MAP, Logger, MIDNIGHT_DERIVATION_PATHS, MPC_CHAIN_CONFIG, MPC_CONFIG, MPC_RELAY_DEV_API_URL, MPC_RELAY_PREPROD_API_URL, MPC_RELAY_PROD_API_URL, MPC_RELAY_URL_MAP, NETWORK_ERROR_CODE, NETWORK_ERROR_STATUS, NoopLogger, PREPROD_RELAY_API_KEY, PREPROD_RELAY_APP_ID, PROD_RELAY_API_KEY, PROD_RELAY_APP_ID, RELAY_API_KEY_HEADER, RELAY_APP_ID_HEADER, SDK_NAMESPACE, SERVER_SDK_ROUTE_PREFIX, SOLANA_RPC_URL, SignAndBroadcastRequestTooLargeError, SigningConsentRequiredError, SuccessEventType, ThresholdSignatureScheme, URL_PATTERNS, WAAS_EXPORT_INTENT_ACTION, WalletApiError, WalletOperation, WalletReadyState, assertDynamicLocationsHaveExternalKeyShareId, attachRequestIds, buildForwardMpcEnclaveUrl, chain, chainEnumToVerifiedCredentialName, createExportIntent, createRejectablePromise, createSigningIntent, extractServerErrorCode, formatNamespacedVersion, formatRawMessageForSigning, getBitcoinChainConfig, getClientThreshold, getDynamicServerThreshold, getEnvironmentFromUrl, getMPCChainConfig, getRequiredExternalKeyShareId, getReshareConfig, getServerWalletReshareConfig, getTSSConfig, getVersionNamespace, getVersionWithoutNamespace, handleAxiosError, invokeCeremonyComplete, isBusinessAccountActionRequired, isEvmCompatibleChain, isRecoveredForwardMpcConnectionChurn, normalizeAndValidatePrivateKey, parseNamespacedVersion, prepareRawMessageSigningPayload, sanitizeBusinessAccountSignedIntent, serializeError, serializeMessageForForwardMPC, toJsonSafeContext, verifiedCredentialNameToChainEnum, withTraceId };
3311
+ export { AuthMode, BITCOIN_ADDRESS_TYPE_CONFIG, BITCOIN_DERIVATION_PATHS, BROWSER_SDK_ROUTE_PREFIX, BackupLocation, BitcoinAddressType, BitcoinNetwork, BusinessAccountClient, BusinessAccountMemberRole, BusinessAccountSignerType, CreateRoomPartiesOptions, DEFAULT_ED25519_VARIANT, DELEGATED_SHARE_COUNT, DYNAMIC_AUTH_BASE_API_URL_MAP, DYNAMIC_AUTH_DEV_BASE_API_URL, DYNAMIC_AUTH_PREPROD_BASE_API_URL, DYNAMIC_AUTH_PROD_BASE_API_URL, DYNAMIC_CLIENT_RELAY_REDCOAST_API_KEY_MAP, DYNAMIC_CLIENT_RELAY_REDCOAST_APP_ID_MAP, DYNAMIC_FORWARD_MPC_DEV_ENCLAVE_URL, DYNAMIC_FORWARD_MPC_ENCLAVE_ATTESTATION_CONFIG_MAP, DYNAMIC_FORWARD_MPC_ENCLAVE_URL_MAP, DYNAMIC_FORWARD_MPC_PREPROD_ENCLAVE_URL, DYNAMIC_FORWARD_MPC_PROD_ENCLAVE_URL, DYNAMIC_KEYSHARES_RELAY_MAP, DYNAMIC_KEYSHARES_RELAY_PREPROD_BASE_API_URL, DYNAMIC_KEYSHARES_RELAY_PROD_BASE_API_URL, DynamicApiClient, DynamicClientSessionSignature, DynamicElevatedAccessTokenHeader, DynamicForwardMPCHeader, DynamicMfaTokenHeader, DynamicRequestIdHeader, DynamicSessionPublicKeyHeader, DynamicTraceElapsedTimeHeader, DynamicTraceIdHeader, ENCRYPTED_SHARES_STORAGE_SUFFIX, ENVIRONMENT_ENUM, EVM_COMPATIBLE_CHAINS, FEATURE_FLAGS, IFRAME_DOMAIN_MAP, Logger, MIDNIGHT_DERIVATION_PATHS, MPC_CHAIN_CONFIG, MPC_CONFIG, MPC_RELAY_DEV_API_URL, MPC_RELAY_PREPROD_API_URL, MPC_RELAY_PROD_API_URL, MPC_RELAY_URL_MAP, NETWORK_ERROR_CODE, NETWORK_ERROR_STATUS, NoopLogger, PREPROD_RELAY_API_KEY, PREPROD_RELAY_APP_ID, PROD_RELAY_API_KEY, PROD_RELAY_APP_ID, RELAY_API_KEY_HEADER, RELAY_APP_ID_HEADER, SDK_NAMESPACE, SERVER_SDK_ROUTE_PREFIX, SOLANA_RPC_URL, SignAndBroadcastRequestTooLargeError, SigningConsentRequiredError, SuccessEventType, ThresholdSignatureScheme, URL_PATTERNS, WAAS_EXPORT_INTENT_ACTION, WalletApiError, WalletOperation, WalletReadyState, assertDynamicLocationsHaveExternalKeyShareId, attachRequestIds, buildForwardMpcEnclaveUrl, chain, chainEnumToVerifiedCredentialName, createExportIntent, createRejectablePromise, createSigningIntent, extractServerErrorCode, formatNamespacedVersion, formatRawMessageForSigning, forwardMpcMayHaveJoinedRoom, getBitcoinChainConfig, getClientThreshold, getDynamicServerThreshold, getEnvironmentFromUrl, getMPCChainConfig, getRequiredExternalKeyShareId, getReshareConfig, getServerWalletReshareConfig, getTSSConfig, getVersionNamespace, getVersionWithoutNamespace, handleAxiosError, invokeCeremonyComplete, isBusinessAccountActionRequired, isEvmCompatibleChain, isRecoveredForwardMpcConnectionChurn, normalizeAndValidatePrivateKey, parseNamespacedVersion, prepareRawMessageSigningPayload, runWithForwardMpcFallback, sanitizeBusinessAccountSignedIntent, serializeError, serializeMessageForForwardMPC, toJsonSafeContext, verifiedCredentialNameToChainEnum, withTraceId };
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "@dynamic-labs-wallet/core",
3
- "version": "1.1.44",
3
+ "version": "1.1.46",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
7
7
  "@dynamic-labs/sdk-api-core": "0.50.0",
8
- "@dynamic-labs-wallet/primitives": "1.1.44",
8
+ "@dynamic-labs-wallet/primitives": "1.1.46",
9
9
  "axios": "1.20.0",
10
10
  "uuid": "11.1.0"
11
11
  },
package/src/api/api.d.ts CHANGED
@@ -30,6 +30,8 @@ export type CreateWalletAccountApiRequest = Omit<CreateWaasAccountRequest, 'chai
30
30
  thresholdSignatureScheme: ThresholdSignatureScheme;
31
31
  bitcoinConfig?: BitcoinConfig;
32
32
  traceContext?: TraceContext;
33
+ /** Opt in to an `encryptedWalletApiKey` in the response. Sent as the `delegateToProjectEnvironment` request field. */
34
+ returnEncryptedWalletApiKey?: boolean;
33
35
  };
34
36
  type SignMessageApiRequest = Omit<SignMessageWithWaasRequest, 'context' | 'approvalQuorum'> & {
35
37
  dynamicRequestId?: string;
@@ -76,12 +78,25 @@ export declare class DynamicApiClient extends BaseClient {
76
78
  getBackupRelayToken({ traceContext }: {
77
79
  traceContext?: TraceContext;
78
80
  }): Promise<any>;
81
+ /**
82
+ * In cookie mode the relay token is fetched once at iframe boot and never
83
+ * refreshed, so session rotation or token expiry leaves it stale (DYNT-2309).
84
+ * Wraps each relay call: re-mint only when the pinned token is missing or
85
+ * expiring, and retry once with a fresh token when the relay rejects the call
86
+ * with 403 (revoked session after rotation). The API client authenticates via
87
+ * cookie, so the new token always carries the live session. A 401 is left to
88
+ * the existing onUnauthorized handling — session genuinely invalid.
89
+ */
90
+ private withBackupTokenRefresh;
91
+ private isBackupTokenExpiringSoon;
92
+ private backupRelayTokenRefresh?;
93
+ private mintBackupRelayToken;
79
94
  authenticateApiToken({ environmentId, signingPublicKey, }: {
80
95
  environmentId: string;
81
96
  /** Hex-encoded raw P-256 public key, bound into the resulting JWT's session_public_key claim. */
82
97
  signingPublicKey?: string;
83
98
  }): Promise<import("axios").AxiosResponse<any, undefined, {}, any>>;
84
- createWalletAccount({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, onError, onCeremonyComplete, onSlowDelivery, traceContext, }: CreateWalletAccountApiRequest & {
99
+ createWalletAccount({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey, onError, onCeremonyComplete, onSlowDelivery, traceContext, }: CreateWalletAccountApiRequest & {
85
100
  onError?: (error: Error) => void;
86
101
  onCeremonyComplete?: CeremonyCompleteCallback;
87
102
  /** Diagnostic: fires once if keygen_complete hasn't arrived within the watchdog window. */
@@ -95,7 +110,7 @@ export declare class DynamicApiClient extends BaseClient {
95
110
  * returning the wallet identity (`walletId`/`accountAddress`/`shareSetId`) once the
96
111
  * worker has finished. The wallet is the product of the full ceremony, not this call.
97
112
  */
98
- requestWalletCreationJson({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, idempotencyKey, timeoutMs, traceContext, poll, }: CreateWalletAccountApiRequest & {
113
+ requestWalletCreationJson({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, skipLock, bitcoinConfig, businessAccountId, returnEncryptedWalletApiKey, idempotencyKey, timeoutMs, traceContext, poll, }: CreateWalletAccountApiRequest & {
99
114
  idempotencyKey: string;
100
115
  timeoutMs?: number;
101
116
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/api/api.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAWlD,OAAO,EAAE,QAAQ,EAAc,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAqBlF,qBAAa,UAAU;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B,EAAE,MAAM,CAAC;IACvC,oBAAoB,EAAE,aAAa,CAAC;IACpC,iBAAiB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAClD,MAAM,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAC1C,sEAAsE;IACtE,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,yEAAyE;IACzE,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAEzB,EACV,aAAa,EACb,UAAU,EACV,SAAS,EACT,sBAAsB,EACtB,8BAA8B,EAC9B,QAA0B,EAE1B,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,cAAc,GACf,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;QACtC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;KAC7B;IAoDD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,8BAA8B;IA8BtC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAa9B,IAAI,gBAAgB,IAAI,kBAAkB,CAKzC;IAED,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,SAAS,EAEpE;IAED,aAAa,CAAC,SAAS,EAAE,MAAM;IA4B/B,0BAA0B,CAAC,sBAAsB,EAAE,MAAM;CAW1D"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/api/client.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,KAAK,aAAa,EAAE,MAAM,OAAO,CAAC;AAWlD,OAAO,EAAE,QAAQ,EAAc,KAAK,OAAO,EAAE,MAAM,aAAa,CAAC;AACjE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAqBlF,qBAAa,UAAU;IACd,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,8BAA8B,EAAE,MAAM,CAAC;IACvC,oBAAoB,EAAE,aAAa,CAAC;IACpC,iBAAiB,EAAE,kBAAkB,GAAG,SAAS,CAAC;IAClD,MAAM,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC7B,SAAS,CAAC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAC1C,sEAAsE;IACtE,SAAS,CAAC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IACtC,yEAAyE;IACzE,SAAS,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAC;gBAEzB,EACV,aAAa,EACb,UAAU,EACV,SAAS,EACT,sBAAsB,EACtB,8BAA8B,EAC9B,QAA0B,EAE1B,UAAU,EACV,gBAAgB,EAChB,MAAM,EACN,cAAc,GACf,EAAE;QACD,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,8BAA8B,CAAC,EAAE,MAAM,CAAC;QACxC,QAAQ,CAAC,EAAE,QAAQ,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,kBAAkB,CAAC;QACtC,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB;;;;WAIG;QACH,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;KAC7B;IAqDD;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,8BAA8B;IA8BtC;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAa9B,IAAI,gBAAgB,IAAI,kBAAkB,CAKzC;IAED,IAAI,gBAAgB,CAAC,gBAAgB,EAAE,kBAAkB,GAAG,SAAS,EAEpE;IAED,aAAa,CAAC,SAAS,EAAE,MAAM;IA4B/B,0BAA0B,CAAC,sBAAsB,EAAE,MAAM;CAW1D"}
@@ -0,0 +1,33 @@
1
+ import { type ForwardMpcErrorClassification } from './forwardMpcErrorHandling.js';
2
+ /**
3
+ * True when the forward enclave may already be in the room. The enclave gets
4
+ * the room only inside a request sent over an established session, so only a
5
+ * failure after the session, or an unrecognised error (no code), can follow a join.
6
+ */
7
+ export declare const forwardMpcMayHaveJoinedRoom: ({ sessionEstablished, errorCode, }: ForwardMpcErrorClassification) => boolean;
8
+ /**
9
+ * Runs an MPC ceremony over forward MPC, falling back to relay MPC on a
10
+ * fallback-eligible failure.
11
+ *
12
+ * Invariant: relay never runs in a room the forward enclave may have joined.
13
+ * That would put the same party in the room twice and fail with
14
+ * "Mismatch between the public keys of the server and the ones provided".
15
+ * When the enclave may have joined, relay runs in a room from `refreshRoom`;
16
+ * without `refreshRoom`, the forward error is rethrown.
17
+ *
18
+ * `signal` stops the fallback when the operation already failed elsewhere
19
+ * (for example, a server policy denial). A forward ceremony already in flight
20
+ * cannot be cancelled.
21
+ */
22
+ export declare const runWithForwardMpcFallback: <TRoom, TResult>({ room, forward, relay, refreshRoom, signal, onForwardFailure, onRoomRefreshed, }: {
23
+ room: TRoom;
24
+ /** Omit when forward MPC is disabled or unsupported for the chain. */
25
+ forward?: (room: TRoom) => Promise<TResult>;
26
+ relay: (room: TRoom) => Promise<TResult>;
27
+ /** Mints a new room that the server has joined. */
28
+ refreshRoom?: () => Promise<TRoom>;
29
+ signal?: AbortSignal;
30
+ onForwardFailure?: (errorInfo: ForwardMpcErrorClassification) => void;
31
+ onRoomRefreshed?: (room: TRoom) => void;
32
+ }) => Promise<TResult>;
33
+ //# sourceMappingURL=forwardMpcFallback.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"forwardMpcFallback.d.ts","sourceRoot":"","sources":["../../src/utils/forwardMpcFallback.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,6BAA6B,EAAE,MAAM,8BAA8B,CAAC;AAE3G;;;;GAIG;AACH,eAAO,MAAM,2BAA2B,uCAGrC,6BAA6B,KAAG,OAAwD,CAAC;AAiB5F;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,yBAAyB,GAAU,KAAK,EAAE,OAAO,qFAQ3D;IACD,IAAI,EAAE,KAAK,CAAC;IACZ,sEAAsE;IACtE,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IAC5C,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;IACzC,mDAAmD;IACnD,WAAW,CAAC,EAAE,MAAM,OAAO,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,6BAA6B,KAAK,IAAI,CAAC;IACtE,eAAe,CAAC,EAAE,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,CAAC;CACzC,KAAG,OAAO,CAAC,OAAO,CA0BlB,CAAC"}
@@ -2,6 +2,7 @@ export * from './sdkVersion.js';
2
2
  export * from './messageSerialization.js';
3
3
  export * from './keyShare.js';
4
4
  export * from './forwardMpcErrorHandling.js';
5
+ export { forwardMpcMayHaveJoinedRoom, runWithForwardMpcFallback } from './forwardMpcFallback.js';
5
6
  export { buildForwardMpcEnclaveUrl } from './forwardMpcEnclaveUrl.js';
6
7
  export { serializeError, type SerializedError } from './serializeError.js';
7
8
  export { formatRawMessageForSigning, prepareRawMessageSigningPayload, type RawMessageChain } from './rawMessage.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,eAAe,CAAC;AAC9B,cAAc,8BAA8B,CAAC;AAC7C,OAAO,EAAE,2BAA2B,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AACjG,OAAO,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACtE,OAAO,EAAE,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,0BAA0B,EAAE,+BAA+B,EAAE,KAAK,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACpH,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACvH,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,uBAAuB,CAAC"}