@dynamic-labs-wallet/browser 1.0.27 → 1.0.29
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 +295 -41
- package/index.esm.js +296 -42
- package/package.json +4 -4
- package/src/client.d.ts +31 -5
- package/src/client.d.ts.map +1 -1
package/index.cjs
CHANGED
|
@@ -2760,7 +2760,7 @@ class DynamicWalletClient {
|
|
|
2760
2760
|
};
|
|
2761
2761
|
}
|
|
2762
2762
|
}
|
|
2763
|
-
async serverInitializeKeyGen({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, bitcoinConfig, onError, onCeremonyComplete }) {
|
|
2763
|
+
async serverInitializeKeyGen({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, bitcoinConfig, businessAccountId, onError, onCeremonyComplete }) {
|
|
2764
2764
|
// Initialize keygen, create room, and create the wallet account on the server
|
|
2765
2765
|
const data = await this.apiClient.createWalletAccount({
|
|
2766
2766
|
chainName,
|
|
@@ -2768,6 +2768,7 @@ class DynamicWalletClient {
|
|
|
2768
2768
|
dynamicRequestId,
|
|
2769
2769
|
thresholdSignatureScheme,
|
|
2770
2770
|
bitcoinConfig,
|
|
2771
|
+
businessAccountId,
|
|
2771
2772
|
onError,
|
|
2772
2773
|
onCeremonyComplete
|
|
2773
2774
|
});
|
|
@@ -2992,7 +2993,7 @@ class DynamicWalletClient {
|
|
|
2992
2993
|
shouldRetry: (error)=>!isNonRetryableCeremonyError(error)
|
|
2993
2994
|
});
|
|
2994
2995
|
}
|
|
2995
|
-
async runKeyGenAttempt({ chainName, thresholdSignatureScheme, bitcoinConfig, onCeremonyComplete, traceContext, password, signedSessionId }) {
|
|
2996
|
+
async runKeyGenAttempt({ chainName, thresholdSignatureScheme, bitcoinConfig, businessAccountId, onCeremonyComplete, traceContext, password, signedSessionId }) {
|
|
2996
2997
|
const dynamicRequestId = uuid.v4();
|
|
2997
2998
|
try {
|
|
2998
2999
|
this.assertPasswordRequired(password);
|
|
@@ -3022,6 +3023,7 @@ class DynamicWalletClient {
|
|
|
3022
3023
|
dynamicRequestId,
|
|
3023
3024
|
thresholdSignatureScheme,
|
|
3024
3025
|
bitcoinConfig,
|
|
3026
|
+
businessAccountId,
|
|
3025
3027
|
onCeremonyComplete
|
|
3026
3028
|
});
|
|
3027
3029
|
this.logger.info('[DynamicWaasWalletClient] Server key generation initialized', _extends({
|
|
@@ -3052,6 +3054,7 @@ class DynamicWalletClient {
|
|
|
3052
3054
|
dynamicRequestId,
|
|
3053
3055
|
thresholdSignatureScheme,
|
|
3054
3056
|
bitcoinConfig,
|
|
3057
|
+
businessAccountId,
|
|
3055
3058
|
onCeremonyComplete
|
|
3056
3059
|
})
|
|
3057
3060
|
});
|
|
@@ -3729,7 +3732,7 @@ class DynamicWalletClient {
|
|
|
3729
3732
|
// would race ceremony_complete and the atomic swap could target the stale
|
|
3730
3733
|
// row. refresh's API call returns on room_created (not the local MPC
|
|
3731
3734
|
// result), so the gate await sits between the local MPC and the backup.
|
|
3732
|
-
const ceremonyGate = this.createCeremonyTerminalGate((
|
|
3735
|
+
const ceremonyGate = this.createCeremonyTerminalGate(({ shareSetId, shareSetType })=>{
|
|
3733
3736
|
this.logger.info('[WaasRefresh] ceremony_complete received', {
|
|
3734
3737
|
context: {
|
|
3735
3738
|
walletId: wallet.walletId,
|
|
@@ -3932,7 +3935,7 @@ class DynamicWalletClient {
|
|
|
3932
3935
|
existingClientKeyShares
|
|
3933
3936
|
};
|
|
3934
3937
|
}
|
|
3935
|
-
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken }) {
|
|
3938
|
+
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
3936
3939
|
return WalletQueueManager.queueHeavyOperation(accountAddress, core.WalletOperation.RESHARE, ()=>this.internalReshare({
|
|
3937
3940
|
chainName,
|
|
3938
3941
|
accountAddress,
|
|
@@ -3945,9 +3948,231 @@ class DynamicWalletClient {
|
|
|
3945
3948
|
mfaToken,
|
|
3946
3949
|
elevatedAccessToken,
|
|
3947
3950
|
revokeDelegation,
|
|
3948
|
-
googleDriveAccessToken
|
|
3951
|
+
googleDriveAccessToken,
|
|
3952
|
+
googleDriveTokenSource
|
|
3949
3953
|
}));
|
|
3950
3954
|
}
|
|
3955
|
+
/** Reshare into a new 2/2 share set for the target signer; seed it to CKS
|
|
3956
|
+
* on their behalf via a single-use grant. Does not touch the caller's set. */ async reshareToNewSignerShareSet({ chainName, accountAddress, businessAccountId, signerType = 'endUser', targetSignerIdentity, password = undefined, signedSessionId }) {
|
|
3957
|
+
var _backup_keyShareIds;
|
|
3958
|
+
const dynamicRequestId = uuid.v4();
|
|
3959
|
+
const ceremonyStartTime = Date.now();
|
|
3960
|
+
// Log identifier shape only — value may be email/phone.
|
|
3961
|
+
const logContext = {
|
|
3962
|
+
dynamicRequestId,
|
|
3963
|
+
businessAccountId,
|
|
3964
|
+
chainName,
|
|
3965
|
+
accountAddress,
|
|
3966
|
+
signerType,
|
|
3967
|
+
identityMode: targetSignerIdentity.userId ? 'userId' : 'identifier',
|
|
3968
|
+
identifierType: targetSignerIdentity.identifierType
|
|
3969
|
+
};
|
|
3970
|
+
this.logger.info('[BusinessAccountAddSigner] start reshareToNewSignerShareSet', {
|
|
3971
|
+
context: logContext
|
|
3972
|
+
});
|
|
3973
|
+
const wallet = await this.getWallet({
|
|
3974
|
+
accountAddress,
|
|
3975
|
+
walletOperation: core.WalletOperation.REACH_ALL_PARTIES,
|
|
3976
|
+
password,
|
|
3977
|
+
signedSessionId
|
|
3978
|
+
});
|
|
3979
|
+
const walletId = wallet.walletId;
|
|
3980
|
+
const currentScheme = this.getWalletFromMap(accountAddress).thresholdSignatureScheme;
|
|
3981
|
+
const bitcoinConfig = this.getBitcoinConfigForChain(chainName, accountAddress);
|
|
3982
|
+
// Same-parties reshare — only the caller's share participates.
|
|
3983
|
+
const [existingClientShare] = await this.ensureClientShare(accountAddress);
|
|
3984
|
+
const existingClientKeygenId = await this.getExportId({
|
|
3985
|
+
chainName,
|
|
3986
|
+
clientKeyShare: existingClientShare,
|
|
3987
|
+
bitcoinConfig
|
|
3988
|
+
});
|
|
3989
|
+
// Gate matches internalRefresh/Reshare — SSE error rejects awaitTerminal.
|
|
3990
|
+
let newShareSetId;
|
|
3991
|
+
let resolvedTargetUserId;
|
|
3992
|
+
let clientKeyshareBackupGrant;
|
|
3993
|
+
const ceremonyGate = this.createCeremonyTerminalGate((payload)=>{
|
|
3994
|
+
newShareSetId = payload.shareSetId;
|
|
3995
|
+
resolvedTargetUserId = payload.targetUserId;
|
|
3996
|
+
clientKeyshareBackupGrant = payload.clientKeyshareBackupGrant;
|
|
3997
|
+
this.logger.info('[BusinessAccountAddSigner] ceremony_complete received', {
|
|
3998
|
+
context: _extends({}, logContext, {
|
|
3999
|
+
walletId,
|
|
4000
|
+
newShareSetId: payload.shareSetId,
|
|
4001
|
+
shareSetType: payload.shareSetType,
|
|
4002
|
+
hasTargetUserId: !!payload.targetUserId,
|
|
4003
|
+
hasClientKeyshareBackupGrant: !!payload.clientKeyshareBackupGrant
|
|
4004
|
+
})
|
|
4005
|
+
});
|
|
4006
|
+
});
|
|
4007
|
+
const data = await this.apiClient.addBusinessAccountSignerCeremony({
|
|
4008
|
+
businessAccountId,
|
|
4009
|
+
walletId,
|
|
4010
|
+
clientKeygenIds: [
|
|
4011
|
+
existingClientKeygenId
|
|
4012
|
+
],
|
|
4013
|
+
oldThresholdSignatureScheme: currentScheme,
|
|
4014
|
+
signerType,
|
|
4015
|
+
userId: targetSignerIdentity.userId,
|
|
4016
|
+
identifier: targetSignerIdentity.identifier,
|
|
4017
|
+
identifierType: targetSignerIdentity.identifierType,
|
|
4018
|
+
dynamicRequestId,
|
|
4019
|
+
onError: ceremonyGate.onError,
|
|
4020
|
+
onCeremonyComplete: ceremonyGate.onCeremonyComplete
|
|
4021
|
+
});
|
|
4022
|
+
const { roomId, serverKeygenIds, newServerKeygenIds = [] } = data;
|
|
4023
|
+
const newMpcConfig = core.MPC_CONFIG[core.ThresholdSignatureScheme.TWO_OF_TWO];
|
|
4024
|
+
const allPartyKeygenIds = [
|
|
4025
|
+
existingClientKeygenId,
|
|
4026
|
+
...serverKeygenIds,
|
|
4027
|
+
...newServerKeygenIds
|
|
4028
|
+
];
|
|
4029
|
+
const mpcSigner = getMPCSigner({
|
|
4030
|
+
chainName,
|
|
4031
|
+
baseRelayUrl: this.baseMPCRelayApiUrl,
|
|
4032
|
+
bitcoinConfig
|
|
4033
|
+
});
|
|
4034
|
+
const newSignerClientShare = await mpcSigner.reshareRemainingParty(roomId, newMpcConfig.threshold, existingClientShare, allPartyKeygenIds);
|
|
4035
|
+
try {
|
|
4036
|
+
await ceremonyGate.awaitTerminal();
|
|
4037
|
+
} catch (streamError) {
|
|
4038
|
+
this.logger.error('[BusinessAccountAddSigner] ceremony stream error', {
|
|
4039
|
+
context: _extends({}, logContext, {
|
|
4040
|
+
walletId,
|
|
4041
|
+
roomId,
|
|
4042
|
+
error: streamError instanceof Error ? streamError.message : String(streamError),
|
|
4043
|
+
failure_reason: 'ceremony_stream_error'
|
|
4044
|
+
})
|
|
4045
|
+
});
|
|
4046
|
+
throw streamError;
|
|
4047
|
+
}
|
|
4048
|
+
if (!newShareSetId) {
|
|
4049
|
+
this.logger.error('[BusinessAccountAddSigner] ceremony_complete missing shareSetId', {
|
|
4050
|
+
context: _extends({}, logContext, {
|
|
4051
|
+
walletId,
|
|
4052
|
+
roomId,
|
|
4053
|
+
failure_reason: 'ceremony_complete_missing_share_set_id'
|
|
4054
|
+
})
|
|
4055
|
+
});
|
|
4056
|
+
throw new Error('addSigner reshare did not return a shareSetId');
|
|
4057
|
+
}
|
|
4058
|
+
// Target has no password yet — encryptKeyShare falls back to the env-default key.
|
|
4059
|
+
const encrypted = await this.encryptKeyShare({
|
|
4060
|
+
keyShare: newSignerClientShare
|
|
4061
|
+
});
|
|
4062
|
+
// Server contract: targetUserId is always set on successful ceremony_complete.
|
|
4063
|
+
if (!resolvedTargetUserId) {
|
|
4064
|
+
this.logger.error('[BusinessAccountAddSigner] no target userId resolved for on-behalf backup', {
|
|
4065
|
+
context: _extends({}, logContext, {
|
|
4066
|
+
walletId,
|
|
4067
|
+
newShareSetId,
|
|
4068
|
+
failure_reason: 'no_target_user_id_resolved'
|
|
4069
|
+
})
|
|
4070
|
+
});
|
|
4071
|
+
throw new Error('addSigner ceremony did not resolve a target userId for the on-behalf backup');
|
|
4072
|
+
}
|
|
4073
|
+
const targetUserId = resolvedTargetUserId;
|
|
4074
|
+
this.logger.info('[BusinessAccountAddSigner] backupOnBehalfOfAddedSigner -> client-keyshare-service', {
|
|
4075
|
+
context: _extends({}, logContext, {
|
|
4076
|
+
walletId,
|
|
4077
|
+
newShareSetId,
|
|
4078
|
+
hasClientKeyshareBackupGrant: !!clientKeyshareBackupGrant
|
|
4079
|
+
})
|
|
4080
|
+
});
|
|
4081
|
+
// Grant is primary auth; signedSession is belt-and-suspenders. Refresh-on-400
|
|
4082
|
+
// handles nonce reuse; transient 429/5xx retry via alsoRetry. 401/403 = grant
|
|
4083
|
+
// rejected (single-use, not replayable) → caller must re-run addSigner.
|
|
4084
|
+
let backup;
|
|
4085
|
+
try {
|
|
4086
|
+
let resolvedSignedSessionId = signedSessionId;
|
|
4087
|
+
backup = await retryPromise(()=>this.apiClient.backupOnBehalfOfAddedSigner({
|
|
4088
|
+
walletId,
|
|
4089
|
+
targetUserId,
|
|
4090
|
+
encryptedAccountCredentials: [
|
|
4091
|
+
encrypted
|
|
4092
|
+
],
|
|
4093
|
+
passwordEncrypted: false,
|
|
4094
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
4095
|
+
clientKeyshareBackupGrant,
|
|
4096
|
+
signedSessionId: resolvedSignedSessionId,
|
|
4097
|
+
dynamicRequestId
|
|
4098
|
+
}), {
|
|
4099
|
+
operationName: 'backupOnBehalfOfAddedSigner',
|
|
4100
|
+
shouldRetry: this.signedSession.refreshShouldRetry({
|
|
4101
|
+
onRefreshed: (id)=>{
|
|
4102
|
+
resolvedSignedSessionId = id;
|
|
4103
|
+
},
|
|
4104
|
+
operationName: 'backupOnBehalfOfAddedSigner',
|
|
4105
|
+
logContext: _extends({}, logContext, {
|
|
4106
|
+
walletId,
|
|
4107
|
+
dynamicRequestId
|
|
4108
|
+
}),
|
|
4109
|
+
alsoRetry: (status)=>status === undefined || status === 429 || status !== undefined && status >= 500
|
|
4110
|
+
})
|
|
4111
|
+
});
|
|
4112
|
+
} catch (err) {
|
|
4113
|
+
var _err_response;
|
|
4114
|
+
const status = err == null ? void 0 : (_err_response = err.response) == null ? void 0 : _err_response.status;
|
|
4115
|
+
if (clientKeyshareBackupGrant && (status === 401 || status === 403)) {
|
|
4116
|
+
this.logger.error('[BusinessAccountAddSigner] client_keyshare_backup_grant_exhausted', {
|
|
4117
|
+
context: _extends({}, logContext, {
|
|
4118
|
+
walletId,
|
|
4119
|
+
newShareSetId,
|
|
4120
|
+
status,
|
|
4121
|
+
failure_reason: 'grant_exhausted'
|
|
4122
|
+
})
|
|
4123
|
+
});
|
|
4124
|
+
}
|
|
4125
|
+
throw err;
|
|
4126
|
+
}
|
|
4127
|
+
const externalKeyShareId = (_backup_keyShareIds = backup.keyShareIds) == null ? void 0 : _backup_keyShareIds[0];
|
|
4128
|
+
if (!externalKeyShareId) {
|
|
4129
|
+
this.logger.error('[BusinessAccountAddSigner] on-behalf backup returned no keyShareId', {
|
|
4130
|
+
context: _extends({}, logContext, {
|
|
4131
|
+
walletId,
|
|
4132
|
+
newShareSetId,
|
|
4133
|
+
failure_reason: 'cks_write_no_keyshare_id'
|
|
4134
|
+
})
|
|
4135
|
+
});
|
|
4136
|
+
throw new Error('on-behalf backup did not return a keyShareId');
|
|
4137
|
+
}
|
|
4138
|
+
this.logger.info('[BusinessAccountAddSigner] on-behalf backup stored', {
|
|
4139
|
+
context: _extends({}, logContext, {
|
|
4140
|
+
walletId,
|
|
4141
|
+
newShareSetId,
|
|
4142
|
+
externalKeyShareId
|
|
4143
|
+
})
|
|
4144
|
+
});
|
|
4145
|
+
// Activate the share-set ↔ keyShareId mapping on redcoast.
|
|
4146
|
+
await retryPromise(()=>this.apiClient.markKeySharesAsBackedUp({
|
|
4147
|
+
walletId,
|
|
4148
|
+
shareSetId: newShareSetId,
|
|
4149
|
+
locations: [
|
|
4150
|
+
{
|
|
4151
|
+
location: core.BackupLocation.DYNAMIC,
|
|
4152
|
+
externalKeyShareId
|
|
4153
|
+
}
|
|
4154
|
+
],
|
|
4155
|
+
dynamicRequestId,
|
|
4156
|
+
businessAccountId
|
|
4157
|
+
}), {
|
|
4158
|
+
operationName: 'addSigner.markKeySharesAsBackedUp',
|
|
4159
|
+
shouldRetry: (error)=>{
|
|
4160
|
+
const status = getHttpStatus(error);
|
|
4161
|
+
return status === undefined || status === 429 || status !== undefined && status >= 500;
|
|
4162
|
+
}
|
|
4163
|
+
});
|
|
4164
|
+
this.logger.info('[BusinessAccountAddSigner] done — share set activated', {
|
|
4165
|
+
context: _extends({}, logContext, {
|
|
4166
|
+
walletId,
|
|
4167
|
+
newShareSetId,
|
|
4168
|
+
externalKeyShareId,
|
|
4169
|
+
ceremony_duration_ms: Date.now() - ceremonyStartTime
|
|
4170
|
+
})
|
|
4171
|
+
});
|
|
4172
|
+
return {
|
|
4173
|
+
shareSetId: newShareSetId
|
|
4174
|
+
};
|
|
4175
|
+
}
|
|
3951
4176
|
// Surfaces server-side bugs in the ceremony_complete payload without
|
|
3952
4177
|
// breaking the operation. The two cases:
|
|
3953
4178
|
//
|
|
@@ -4001,7 +4226,10 @@ class DynamicWalletClient {
|
|
|
4001
4226
|
// The reject handle is wired synchronously (Promise executors run inline)
|
|
4002
4227
|
// before the API call starts, so an immediate onError can never be dropped.
|
|
4003
4228
|
// The lost branch's rejection is swallowed so it never surfaces as unhandled.
|
|
4004
|
-
|
|
4229
|
+
/**
|
|
4230
|
+
* Ceremony-complete payload — typed object so addSigner-only fields are
|
|
4231
|
+
* namespaced and `clientKeyshareBackupGrant` never sits in a positional slot.
|
|
4232
|
+
*/ createCeremonyTerminalGate(onCeremonyComplete) {
|
|
4005
4233
|
let resolveComplete;
|
|
4006
4234
|
const completePromise = new Promise((resolve)=>{
|
|
4007
4235
|
resolveComplete = resolve;
|
|
@@ -4015,9 +4243,19 @@ class DynamicWalletClient {
|
|
|
4015
4243
|
let fired = false;
|
|
4016
4244
|
return {
|
|
4017
4245
|
onError: rejectOnError,
|
|
4018
|
-
|
|
4246
|
+
// Positional shape preserved at the wire boundary — eventStream/utils
|
|
4247
|
+
// invokes this with positional args. Translates to the typed object
|
|
4248
|
+
// for the caller-supplied cb.
|
|
4249
|
+
onCeremonyComplete: (accountAddress, walletId, shareSetId, shareSetType, targetUserId, clientKeyshareBackupGrant)=>{
|
|
4019
4250
|
fired = true;
|
|
4020
|
-
onCeremonyComplete == null ? void 0 : onCeremonyComplete(
|
|
4251
|
+
onCeremonyComplete == null ? void 0 : onCeremonyComplete({
|
|
4252
|
+
accountAddress,
|
|
4253
|
+
walletId,
|
|
4254
|
+
shareSetId,
|
|
4255
|
+
shareSetType,
|
|
4256
|
+
targetUserId,
|
|
4257
|
+
clientKeyshareBackupGrant
|
|
4258
|
+
});
|
|
4021
4259
|
resolveComplete();
|
|
4022
4260
|
},
|
|
4023
4261
|
awaitTerminal: ()=>Promise.race([
|
|
@@ -4189,7 +4427,7 @@ class DynamicWalletClient {
|
|
|
4189
4427
|
clientKeySharesBackupInfo: updatedBackupInfo
|
|
4190
4428
|
} : {}));
|
|
4191
4429
|
}
|
|
4192
|
-
async internalReshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken }) {
|
|
4430
|
+
async internalReshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
4193
4431
|
const dynamicRequestId = uuid.v4();
|
|
4194
4432
|
// Password validation - wrapped in try-catch for consistent error handling
|
|
4195
4433
|
// This path should NOT wipe key shares on failure (shares remain valid)
|
|
@@ -4265,7 +4503,7 @@ class DynamicWalletClient {
|
|
|
4265
4503
|
// walletMap.shareSetId rotation lands before storeEncryptedBackupByWallet
|
|
4266
4504
|
// reads it; without it, backup would race ceremony_complete and the atomic
|
|
4267
4505
|
// swap could target the stale row.
|
|
4268
|
-
const ceremonyGate = this.createCeremonyTerminalGate((
|
|
4506
|
+
const ceremonyGate = this.createCeremonyTerminalGate(({ shareSetId, shareSetType })=>{
|
|
4269
4507
|
this.logger.info('[WaasReshare] ceremony_complete received', {
|
|
4270
4508
|
context: {
|
|
4271
4509
|
walletId: wallet.walletId,
|
|
@@ -4445,7 +4683,8 @@ class DynamicWalletClient {
|
|
|
4445
4683
|
password,
|
|
4446
4684
|
signedSessionId,
|
|
4447
4685
|
distribution,
|
|
4448
|
-
googleDriveAccessToken
|
|
4686
|
+
googleDriveAccessToken,
|
|
4687
|
+
googleDriveTokenSource
|
|
4449
4688
|
})
|
|
4450
4689
|
});
|
|
4451
4690
|
// Store client key shares to storage (localStorage or secureStorage)
|
|
@@ -4986,21 +5225,10 @@ class DynamicWalletClient {
|
|
|
4986
5225
|
accountAddress,
|
|
4987
5226
|
shareCount: expectedShares.length
|
|
4988
5227
|
});
|
|
4989
|
-
// The preceding `/backup` upload consumed the caller's signed-session nonce, so
|
|
4990
|
-
// the verify fetch needs a freshly-minted one — only possible over the reverse
|
|
4991
|
-
// channel. Without one, skip the check (with a warning) rather than abort an
|
|
4992
|
-
// otherwise-successful backup.
|
|
4993
|
-
if (!this.getSignedSessionIdCallback) {
|
|
4994
|
-
this.logger.warn('[keyshare-recovery-verify] skipped: no reverse channel to mint a fresh nonce for the verify fetch', {
|
|
4995
|
-
walletId,
|
|
4996
|
-
accountAddress
|
|
4997
|
-
});
|
|
4998
|
-
return;
|
|
4999
|
-
}
|
|
5000
5228
|
let data;
|
|
5001
5229
|
try {
|
|
5002
|
-
//
|
|
5003
|
-
//
|
|
5230
|
+
// Mint a fresh session (the backup consumed the caller's). A missing reverse
|
|
5231
|
+
// channel is skipped below; any other failure rethrows.
|
|
5004
5232
|
const verifySignedSessionId = await this.signedSession.resolve();
|
|
5005
5233
|
data = await this.recoverEncryptedSharesWithNonceRetry({
|
|
5006
5234
|
walletId,
|
|
@@ -5013,13 +5241,18 @@ class DynamicWalletClient {
|
|
|
5013
5241
|
context: 'verify-backup-recoverable'
|
|
5014
5242
|
});
|
|
5015
5243
|
} catch (error) {
|
|
5016
|
-
//
|
|
5017
|
-
|
|
5244
|
+
// Only a missing reverse channel (no callback, or the host registered no
|
|
5245
|
+
// getSignedSessionId handler) is a benign "can't run" — skip without aborting a
|
|
5246
|
+
// successful backup. Anything else (fetch / transient) is rethrown.
|
|
5247
|
+
const message = error instanceof Error && error.message || '';
|
|
5248
|
+
const noReverseChannel = !this.getSignedSessionIdCallback || message.includes('No handlers were registered') || message.includes('no callback is configured');
|
|
5249
|
+
if (!noReverseChannel) throw error;
|
|
5250
|
+
this.logger.warn('[keyshare-recovery-verify] no reverse channel for verify nonce, skipping', {
|
|
5018
5251
|
walletId,
|
|
5019
5252
|
accountAddress,
|
|
5020
5253
|
errorName: error instanceof Error ? error.name : undefined
|
|
5021
5254
|
});
|
|
5022
|
-
|
|
5255
|
+
return;
|
|
5023
5256
|
}
|
|
5024
5257
|
try {
|
|
5025
5258
|
var _data_keyShares;
|
|
@@ -5341,7 +5574,7 @@ class DynamicWalletClient {
|
|
|
5341
5574
|
]);
|
|
5342
5575
|
}));
|
|
5343
5576
|
}
|
|
5344
|
-
async backupToCloudProvider({ provider, shares, accountAddress, password, chainName, bitcoinConfig, isPasswordEncrypted, preEncryptedShares, googleDriveAccessToken }) {
|
|
5577
|
+
async backupToCloudProvider({ provider, shares, accountAddress, password, chainName, bitcoinConfig, isPasswordEncrypted, preEncryptedShares, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
5345
5578
|
const encryptedCloudShares = preEncryptedShares != null ? preEncryptedShares : await Promise.all(shares.map((keyShare)=>this.encryptKeyShare({
|
|
5346
5579
|
keyShare,
|
|
5347
5580
|
password
|
|
@@ -5357,11 +5590,13 @@ class DynamicWalletClient {
|
|
|
5357
5590
|
clientKeyShare: shares[0],
|
|
5358
5591
|
bitcoinConfig
|
|
5359
5592
|
});
|
|
5360
|
-
return {
|
|
5593
|
+
return _extends({
|
|
5361
5594
|
location: provider,
|
|
5362
5595
|
passwordEncrypted: isPasswordEncrypted,
|
|
5363
5596
|
keygenId
|
|
5364
|
-
}
|
|
5597
|
+
}, provider === core.BackupLocation.GOOGLE_DRIVE && googleDriveTokenSource ? {
|
|
5598
|
+
tokenSource: googleDriveTokenSource
|
|
5599
|
+
} : {});
|
|
5365
5600
|
}
|
|
5366
5601
|
async publishDelegatedShare({ walletId, shareSetId, delegatedShare, signedSessionId, dynamicRequestId, chainName, bitcoinConfig, isPasswordEncrypted }) {
|
|
5367
5602
|
var _publicKey_key, _publicKey_key1, _publicKey_key2;
|
|
@@ -5408,7 +5643,7 @@ class DynamicWalletClient {
|
|
|
5408
5643
|
}
|
|
5409
5644
|
return location;
|
|
5410
5645
|
}
|
|
5411
|
-
async backupSharesWithDistribution({ accountAddress, password, signedSessionId, distribution, preserveDelegatedLocation = false, passwordUpdateBatchId, googleDriveAccessToken }) {
|
|
5646
|
+
async backupSharesWithDistribution({ accountAddress, password, signedSessionId, distribution, preserveDelegatedLocation = false, passwordUpdateBatchId, googleDriveAccessToken, googleDriveTokenSource, businessAccountId }) {
|
|
5412
5647
|
const dynamicRequestId = uuid.v4();
|
|
5413
5648
|
// Get wallet data early for logging context (also used in catch block)
|
|
5414
5649
|
const walletData = this.getWalletFromMap(accountAddress);
|
|
@@ -5552,7 +5787,8 @@ class DynamicWalletClient {
|
|
|
5552
5787
|
bitcoinConfig,
|
|
5553
5788
|
isPasswordEncrypted,
|
|
5554
5789
|
preEncryptedShares: encrypted,
|
|
5555
|
-
googleDriveAccessToken
|
|
5790
|
+
googleDriveAccessToken,
|
|
5791
|
+
googleDriveTokenSource
|
|
5556
5792
|
}));
|
|
5557
5793
|
}
|
|
5558
5794
|
// When this ceremony minted a separate `delegated` share set (FF=on
|
|
@@ -5625,7 +5861,8 @@ class DynamicWalletClient {
|
|
|
5625
5861
|
shareSetId: targetShareSetId,
|
|
5626
5862
|
locations,
|
|
5627
5863
|
dynamicRequestId,
|
|
5628
|
-
passwordUpdateBatchId
|
|
5864
|
+
passwordUpdateBatchId,
|
|
5865
|
+
businessAccountId
|
|
5629
5866
|
}), {
|
|
5630
5867
|
operationName: BACKUP_OPERATION.MarkBackedUp,
|
|
5631
5868
|
shouldRetry: (error)=>{
|
|
@@ -5816,7 +6053,7 @@ class DynamicWalletClient {
|
|
|
5816
6053
|
* @param params.signedSessionId - Optional signed session ID for authentication
|
|
5817
6054
|
* @param params.backupToGoogleDrive - Whether to backup to Google Drive (defaults to false)
|
|
5818
6055
|
* @returns Promise with backup metadata including share locations and IDs
|
|
5819
|
-
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, cloudProviders = [], delegatedKeyshare = undefined, passwordUpdateBatchId, googleDriveAccessToken }) {
|
|
6056
|
+
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, cloudProviders = [], delegatedKeyshare = undefined, passwordUpdateBatchId, googleDriveAccessToken, googleDriveTokenSource, businessAccountId }) {
|
|
5820
6057
|
var _backupData_locationsWithKeyShares, _backupData_locationsWithKeyShares1;
|
|
5821
6058
|
const hasProvidedShares = clientKeyShares !== undefined;
|
|
5822
6059
|
const keySharesToBackup = clientKeyShares != null ? clientKeyShares : await this.getClientKeySharesFromStorage({
|
|
@@ -5889,7 +6126,9 @@ class DynamicWalletClient {
|
|
|
5889
6126
|
distribution,
|
|
5890
6127
|
preserveDelegatedLocation,
|
|
5891
6128
|
passwordUpdateBatchId,
|
|
5892
|
-
googleDriveAccessToken
|
|
6129
|
+
googleDriveAccessToken,
|
|
6130
|
+
googleDriveTokenSource,
|
|
6131
|
+
businessAccountId
|
|
5893
6132
|
});
|
|
5894
6133
|
var _backupData_locationsWithKeyShares_map, _backupData_locationsWithKeyShares_map1;
|
|
5895
6134
|
return _extends({}, backupData, {
|
|
@@ -6425,7 +6664,7 @@ class DynamicWalletClient {
|
|
|
6425
6664
|
* Internal helper method that handles the complete flow for ensuring wallet key shares are backed up to a cloud provider.
|
|
6426
6665
|
* - For 2-of-2 wallets: Automatically reshares to 2-of-3 threshold, then distributes shares (1 to backend, 1 to cloud)
|
|
6427
6666
|
* - For 2-of-3 wallets: Call storeEncryptedBackupByWallet to backup for backend and cloud
|
|
6428
|
-
*/ async backupKeySharesToCloudProvider({ accountAddress, password, signedSessionId, backupLocation, googleDriveAccessToken }) {
|
|
6667
|
+
*/ async backupKeySharesToCloudProvider({ accountAddress, password, signedSessionId, backupLocation, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
6429
6668
|
try {
|
|
6430
6669
|
await this.getWallet({
|
|
6431
6670
|
accountAddress,
|
|
@@ -6447,7 +6686,8 @@ class DynamicWalletClient {
|
|
|
6447
6686
|
cloudProviders: [
|
|
6448
6687
|
backupLocation
|
|
6449
6688
|
],
|
|
6450
|
-
googleDriveAccessToken
|
|
6689
|
+
googleDriveAccessToken,
|
|
6690
|
+
googleDriveTokenSource
|
|
6451
6691
|
});
|
|
6452
6692
|
} else {
|
|
6453
6693
|
await this.storeEncryptedBackupByWallet({
|
|
@@ -6457,7 +6697,8 @@ class DynamicWalletClient {
|
|
|
6457
6697
|
cloudProviders: [
|
|
6458
6698
|
backupLocation
|
|
6459
6699
|
],
|
|
6460
|
-
googleDriveAccessToken
|
|
6700
|
+
googleDriveAccessToken,
|
|
6701
|
+
googleDriveTokenSource
|
|
6461
6702
|
});
|
|
6462
6703
|
}
|
|
6463
6704
|
} catch (error) {
|
|
@@ -6506,7 +6747,10 @@ class DynamicWalletClient {
|
|
|
6506
6747
|
backupLocation: core.BackupLocation.GOOGLE_DRIVE,
|
|
6507
6748
|
// Forward the resolved token so the downstream upload path doesn't
|
|
6508
6749
|
// re-fetch it via fetchGoogleDriveAccessToken.
|
|
6509
|
-
googleDriveAccessToken: resolvedAccessToken
|
|
6750
|
+
googleDriveAccessToken: resolvedAccessToken,
|
|
6751
|
+
// Persist which token source backed up the Google Drive location for
|
|
6752
|
+
// audit (enum only — never the token value).
|
|
6753
|
+
googleDriveTokenSource: tokenSource
|
|
6510
6754
|
});
|
|
6511
6755
|
success = true;
|
|
6512
6756
|
} finally{
|
|
@@ -7682,6 +7926,12 @@ class DynamicWalletClient {
|
|
|
7682
7926
|
logger: this.logger,
|
|
7683
7927
|
onUnauthorized: internalOptions == null ? void 0 : internalOptions.onUnauthorized
|
|
7684
7928
|
});
|
|
7929
|
+
// `reshare` left unbound until the signer-reshare flavor (reshare into a new
|
|
7930
|
+
// signer's pending share set) exists; addSigner is stubbed until then.
|
|
7931
|
+
this.businessAccounts = new core.BusinessAccountClient({
|
|
7932
|
+
apiClient: this.apiClient,
|
|
7933
|
+
logger: this.logger
|
|
7934
|
+
});
|
|
7685
7935
|
this.debug = Boolean(debug);
|
|
7686
7936
|
this.featureFlags = featureFlags || {};
|
|
7687
7937
|
// setup storage for walletMap metadata (used regardless of secureStorage)
|
|
@@ -7708,11 +7958,15 @@ class DynamicWalletClient {
|
|
|
7708
7958
|
durationMs: Date.now() - forwardMPCConnectStartedAt
|
|
7709
7959
|
});
|
|
7710
7960
|
}).catch((error)=>{
|
|
7711
|
-
|
|
7961
|
+
const errorInfo = core.classifyForwardMpcError(error);
|
|
7962
|
+
// A rate-limited upgrade falls back to relay → warn, not error, so the
|
|
7963
|
+
// recovered case doesn't pollute error triage.
|
|
7964
|
+
const level = errorInfo.errorType === 'RATE_LIMITED' ? 'warn' : 'error';
|
|
7965
|
+
this.logger[level]('Error connecting to ForwardMPC enclave optimistically', _extends({}, errorInfo, {
|
|
7712
7966
|
error,
|
|
7713
7967
|
environmentId: this.environmentId,
|
|
7714
7968
|
durationMs: Date.now() - forwardMPCConnectStartedAt
|
|
7715
|
-
});
|
|
7969
|
+
}));
|
|
7716
7970
|
});
|
|
7717
7971
|
}
|
|
7718
7972
|
}
|
package/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
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';
|
|
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, BusinessAccountClient, 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';
|
|
@@ -2761,7 +2761,7 @@ class DynamicWalletClient {
|
|
|
2761
2761
|
};
|
|
2762
2762
|
}
|
|
2763
2763
|
}
|
|
2764
|
-
async serverInitializeKeyGen({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, bitcoinConfig, onError, onCeremonyComplete }) {
|
|
2764
|
+
async serverInitializeKeyGen({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, bitcoinConfig, businessAccountId, onError, onCeremonyComplete }) {
|
|
2765
2765
|
// Initialize keygen, create room, and create the wallet account on the server
|
|
2766
2766
|
const data = await this.apiClient.createWalletAccount({
|
|
2767
2767
|
chainName,
|
|
@@ -2769,6 +2769,7 @@ class DynamicWalletClient {
|
|
|
2769
2769
|
dynamicRequestId,
|
|
2770
2770
|
thresholdSignatureScheme,
|
|
2771
2771
|
bitcoinConfig,
|
|
2772
|
+
businessAccountId,
|
|
2772
2773
|
onError,
|
|
2773
2774
|
onCeremonyComplete
|
|
2774
2775
|
});
|
|
@@ -2993,7 +2994,7 @@ class DynamicWalletClient {
|
|
|
2993
2994
|
shouldRetry: (error)=>!isNonRetryableCeremonyError(error)
|
|
2994
2995
|
});
|
|
2995
2996
|
}
|
|
2996
|
-
async runKeyGenAttempt({ chainName, thresholdSignatureScheme, bitcoinConfig, onCeremonyComplete, traceContext, password, signedSessionId }) {
|
|
2997
|
+
async runKeyGenAttempt({ chainName, thresholdSignatureScheme, bitcoinConfig, businessAccountId, onCeremonyComplete, traceContext, password, signedSessionId }) {
|
|
2997
2998
|
const dynamicRequestId = v4();
|
|
2998
2999
|
try {
|
|
2999
3000
|
this.assertPasswordRequired(password);
|
|
@@ -3023,6 +3024,7 @@ class DynamicWalletClient {
|
|
|
3023
3024
|
dynamicRequestId,
|
|
3024
3025
|
thresholdSignatureScheme,
|
|
3025
3026
|
bitcoinConfig,
|
|
3027
|
+
businessAccountId,
|
|
3026
3028
|
onCeremonyComplete
|
|
3027
3029
|
});
|
|
3028
3030
|
this.logger.info('[DynamicWaasWalletClient] Server key generation initialized', _extends({
|
|
@@ -3053,6 +3055,7 @@ class DynamicWalletClient {
|
|
|
3053
3055
|
dynamicRequestId,
|
|
3054
3056
|
thresholdSignatureScheme,
|
|
3055
3057
|
bitcoinConfig,
|
|
3058
|
+
businessAccountId,
|
|
3056
3059
|
onCeremonyComplete
|
|
3057
3060
|
})
|
|
3058
3061
|
});
|
|
@@ -3730,7 +3733,7 @@ class DynamicWalletClient {
|
|
|
3730
3733
|
// would race ceremony_complete and the atomic swap could target the stale
|
|
3731
3734
|
// row. refresh's API call returns on room_created (not the local MPC
|
|
3732
3735
|
// result), so the gate await sits between the local MPC and the backup.
|
|
3733
|
-
const ceremonyGate = this.createCeremonyTerminalGate((
|
|
3736
|
+
const ceremonyGate = this.createCeremonyTerminalGate(({ shareSetId, shareSetType })=>{
|
|
3734
3737
|
this.logger.info('[WaasRefresh] ceremony_complete received', {
|
|
3735
3738
|
context: {
|
|
3736
3739
|
walletId: wallet.walletId,
|
|
@@ -3933,7 +3936,7 @@ class DynamicWalletClient {
|
|
|
3933
3936
|
existingClientKeyShares
|
|
3934
3937
|
};
|
|
3935
3938
|
}
|
|
3936
|
-
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken }) {
|
|
3939
|
+
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
3937
3940
|
return WalletQueueManager.queueHeavyOperation(accountAddress, WalletOperation.RESHARE, ()=>this.internalReshare({
|
|
3938
3941
|
chainName,
|
|
3939
3942
|
accountAddress,
|
|
@@ -3946,9 +3949,231 @@ class DynamicWalletClient {
|
|
|
3946
3949
|
mfaToken,
|
|
3947
3950
|
elevatedAccessToken,
|
|
3948
3951
|
revokeDelegation,
|
|
3949
|
-
googleDriveAccessToken
|
|
3952
|
+
googleDriveAccessToken,
|
|
3953
|
+
googleDriveTokenSource
|
|
3950
3954
|
}));
|
|
3951
3955
|
}
|
|
3956
|
+
/** Reshare into a new 2/2 share set for the target signer; seed it to CKS
|
|
3957
|
+
* on their behalf via a single-use grant. Does not touch the caller's set. */ async reshareToNewSignerShareSet({ chainName, accountAddress, businessAccountId, signerType = 'endUser', targetSignerIdentity, password = undefined, signedSessionId }) {
|
|
3958
|
+
var _backup_keyShareIds;
|
|
3959
|
+
const dynamicRequestId = v4();
|
|
3960
|
+
const ceremonyStartTime = Date.now();
|
|
3961
|
+
// Log identifier shape only — value may be email/phone.
|
|
3962
|
+
const logContext = {
|
|
3963
|
+
dynamicRequestId,
|
|
3964
|
+
businessAccountId,
|
|
3965
|
+
chainName,
|
|
3966
|
+
accountAddress,
|
|
3967
|
+
signerType,
|
|
3968
|
+
identityMode: targetSignerIdentity.userId ? 'userId' : 'identifier',
|
|
3969
|
+
identifierType: targetSignerIdentity.identifierType
|
|
3970
|
+
};
|
|
3971
|
+
this.logger.info('[BusinessAccountAddSigner] start reshareToNewSignerShareSet', {
|
|
3972
|
+
context: logContext
|
|
3973
|
+
});
|
|
3974
|
+
const wallet = await this.getWallet({
|
|
3975
|
+
accountAddress,
|
|
3976
|
+
walletOperation: WalletOperation.REACH_ALL_PARTIES,
|
|
3977
|
+
password,
|
|
3978
|
+
signedSessionId
|
|
3979
|
+
});
|
|
3980
|
+
const walletId = wallet.walletId;
|
|
3981
|
+
const currentScheme = this.getWalletFromMap(accountAddress).thresholdSignatureScheme;
|
|
3982
|
+
const bitcoinConfig = this.getBitcoinConfigForChain(chainName, accountAddress);
|
|
3983
|
+
// Same-parties reshare — only the caller's share participates.
|
|
3984
|
+
const [existingClientShare] = await this.ensureClientShare(accountAddress);
|
|
3985
|
+
const existingClientKeygenId = await this.getExportId({
|
|
3986
|
+
chainName,
|
|
3987
|
+
clientKeyShare: existingClientShare,
|
|
3988
|
+
bitcoinConfig
|
|
3989
|
+
});
|
|
3990
|
+
// Gate matches internalRefresh/Reshare — SSE error rejects awaitTerminal.
|
|
3991
|
+
let newShareSetId;
|
|
3992
|
+
let resolvedTargetUserId;
|
|
3993
|
+
let clientKeyshareBackupGrant;
|
|
3994
|
+
const ceremonyGate = this.createCeremonyTerminalGate((payload)=>{
|
|
3995
|
+
newShareSetId = payload.shareSetId;
|
|
3996
|
+
resolvedTargetUserId = payload.targetUserId;
|
|
3997
|
+
clientKeyshareBackupGrant = payload.clientKeyshareBackupGrant;
|
|
3998
|
+
this.logger.info('[BusinessAccountAddSigner] ceremony_complete received', {
|
|
3999
|
+
context: _extends({}, logContext, {
|
|
4000
|
+
walletId,
|
|
4001
|
+
newShareSetId: payload.shareSetId,
|
|
4002
|
+
shareSetType: payload.shareSetType,
|
|
4003
|
+
hasTargetUserId: !!payload.targetUserId,
|
|
4004
|
+
hasClientKeyshareBackupGrant: !!payload.clientKeyshareBackupGrant
|
|
4005
|
+
})
|
|
4006
|
+
});
|
|
4007
|
+
});
|
|
4008
|
+
const data = await this.apiClient.addBusinessAccountSignerCeremony({
|
|
4009
|
+
businessAccountId,
|
|
4010
|
+
walletId,
|
|
4011
|
+
clientKeygenIds: [
|
|
4012
|
+
existingClientKeygenId
|
|
4013
|
+
],
|
|
4014
|
+
oldThresholdSignatureScheme: currentScheme,
|
|
4015
|
+
signerType,
|
|
4016
|
+
userId: targetSignerIdentity.userId,
|
|
4017
|
+
identifier: targetSignerIdentity.identifier,
|
|
4018
|
+
identifierType: targetSignerIdentity.identifierType,
|
|
4019
|
+
dynamicRequestId,
|
|
4020
|
+
onError: ceremonyGate.onError,
|
|
4021
|
+
onCeremonyComplete: ceremonyGate.onCeremonyComplete
|
|
4022
|
+
});
|
|
4023
|
+
const { roomId, serverKeygenIds, newServerKeygenIds = [] } = data;
|
|
4024
|
+
const newMpcConfig = MPC_CONFIG[ThresholdSignatureScheme.TWO_OF_TWO];
|
|
4025
|
+
const allPartyKeygenIds = [
|
|
4026
|
+
existingClientKeygenId,
|
|
4027
|
+
...serverKeygenIds,
|
|
4028
|
+
...newServerKeygenIds
|
|
4029
|
+
];
|
|
4030
|
+
const mpcSigner = getMPCSigner({
|
|
4031
|
+
chainName,
|
|
4032
|
+
baseRelayUrl: this.baseMPCRelayApiUrl,
|
|
4033
|
+
bitcoinConfig
|
|
4034
|
+
});
|
|
4035
|
+
const newSignerClientShare = await mpcSigner.reshareRemainingParty(roomId, newMpcConfig.threshold, existingClientShare, allPartyKeygenIds);
|
|
4036
|
+
try {
|
|
4037
|
+
await ceremonyGate.awaitTerminal();
|
|
4038
|
+
} catch (streamError) {
|
|
4039
|
+
this.logger.error('[BusinessAccountAddSigner] ceremony stream error', {
|
|
4040
|
+
context: _extends({}, logContext, {
|
|
4041
|
+
walletId,
|
|
4042
|
+
roomId,
|
|
4043
|
+
error: streamError instanceof Error ? streamError.message : String(streamError),
|
|
4044
|
+
failure_reason: 'ceremony_stream_error'
|
|
4045
|
+
})
|
|
4046
|
+
});
|
|
4047
|
+
throw streamError;
|
|
4048
|
+
}
|
|
4049
|
+
if (!newShareSetId) {
|
|
4050
|
+
this.logger.error('[BusinessAccountAddSigner] ceremony_complete missing shareSetId', {
|
|
4051
|
+
context: _extends({}, logContext, {
|
|
4052
|
+
walletId,
|
|
4053
|
+
roomId,
|
|
4054
|
+
failure_reason: 'ceremony_complete_missing_share_set_id'
|
|
4055
|
+
})
|
|
4056
|
+
});
|
|
4057
|
+
throw new Error('addSigner reshare did not return a shareSetId');
|
|
4058
|
+
}
|
|
4059
|
+
// Target has no password yet — encryptKeyShare falls back to the env-default key.
|
|
4060
|
+
const encrypted = await this.encryptKeyShare({
|
|
4061
|
+
keyShare: newSignerClientShare
|
|
4062
|
+
});
|
|
4063
|
+
// Server contract: targetUserId is always set on successful ceremony_complete.
|
|
4064
|
+
if (!resolvedTargetUserId) {
|
|
4065
|
+
this.logger.error('[BusinessAccountAddSigner] no target userId resolved for on-behalf backup', {
|
|
4066
|
+
context: _extends({}, logContext, {
|
|
4067
|
+
walletId,
|
|
4068
|
+
newShareSetId,
|
|
4069
|
+
failure_reason: 'no_target_user_id_resolved'
|
|
4070
|
+
})
|
|
4071
|
+
});
|
|
4072
|
+
throw new Error('addSigner ceremony did not resolve a target userId for the on-behalf backup');
|
|
4073
|
+
}
|
|
4074
|
+
const targetUserId = resolvedTargetUserId;
|
|
4075
|
+
this.logger.info('[BusinessAccountAddSigner] backupOnBehalfOfAddedSigner -> client-keyshare-service', {
|
|
4076
|
+
context: _extends({}, logContext, {
|
|
4077
|
+
walletId,
|
|
4078
|
+
newShareSetId,
|
|
4079
|
+
hasClientKeyshareBackupGrant: !!clientKeyshareBackupGrant
|
|
4080
|
+
})
|
|
4081
|
+
});
|
|
4082
|
+
// Grant is primary auth; signedSession is belt-and-suspenders. Refresh-on-400
|
|
4083
|
+
// handles nonce reuse; transient 429/5xx retry via alsoRetry. 401/403 = grant
|
|
4084
|
+
// rejected (single-use, not replayable) → caller must re-run addSigner.
|
|
4085
|
+
let backup;
|
|
4086
|
+
try {
|
|
4087
|
+
let resolvedSignedSessionId = signedSessionId;
|
|
4088
|
+
backup = await retryPromise(()=>this.apiClient.backupOnBehalfOfAddedSigner({
|
|
4089
|
+
walletId,
|
|
4090
|
+
targetUserId,
|
|
4091
|
+
encryptedAccountCredentials: [
|
|
4092
|
+
encrypted
|
|
4093
|
+
],
|
|
4094
|
+
passwordEncrypted: false,
|
|
4095
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
4096
|
+
clientKeyshareBackupGrant,
|
|
4097
|
+
signedSessionId: resolvedSignedSessionId,
|
|
4098
|
+
dynamicRequestId
|
|
4099
|
+
}), {
|
|
4100
|
+
operationName: 'backupOnBehalfOfAddedSigner',
|
|
4101
|
+
shouldRetry: this.signedSession.refreshShouldRetry({
|
|
4102
|
+
onRefreshed: (id)=>{
|
|
4103
|
+
resolvedSignedSessionId = id;
|
|
4104
|
+
},
|
|
4105
|
+
operationName: 'backupOnBehalfOfAddedSigner',
|
|
4106
|
+
logContext: _extends({}, logContext, {
|
|
4107
|
+
walletId,
|
|
4108
|
+
dynamicRequestId
|
|
4109
|
+
}),
|
|
4110
|
+
alsoRetry: (status)=>status === undefined || status === 429 || status !== undefined && status >= 500
|
|
4111
|
+
})
|
|
4112
|
+
});
|
|
4113
|
+
} catch (err) {
|
|
4114
|
+
var _err_response;
|
|
4115
|
+
const status = err == null ? void 0 : (_err_response = err.response) == null ? void 0 : _err_response.status;
|
|
4116
|
+
if (clientKeyshareBackupGrant && (status === 401 || status === 403)) {
|
|
4117
|
+
this.logger.error('[BusinessAccountAddSigner] client_keyshare_backup_grant_exhausted', {
|
|
4118
|
+
context: _extends({}, logContext, {
|
|
4119
|
+
walletId,
|
|
4120
|
+
newShareSetId,
|
|
4121
|
+
status,
|
|
4122
|
+
failure_reason: 'grant_exhausted'
|
|
4123
|
+
})
|
|
4124
|
+
});
|
|
4125
|
+
}
|
|
4126
|
+
throw err;
|
|
4127
|
+
}
|
|
4128
|
+
const externalKeyShareId = (_backup_keyShareIds = backup.keyShareIds) == null ? void 0 : _backup_keyShareIds[0];
|
|
4129
|
+
if (!externalKeyShareId) {
|
|
4130
|
+
this.logger.error('[BusinessAccountAddSigner] on-behalf backup returned no keyShareId', {
|
|
4131
|
+
context: _extends({}, logContext, {
|
|
4132
|
+
walletId,
|
|
4133
|
+
newShareSetId,
|
|
4134
|
+
failure_reason: 'cks_write_no_keyshare_id'
|
|
4135
|
+
})
|
|
4136
|
+
});
|
|
4137
|
+
throw new Error('on-behalf backup did not return a keyShareId');
|
|
4138
|
+
}
|
|
4139
|
+
this.logger.info('[BusinessAccountAddSigner] on-behalf backup stored', {
|
|
4140
|
+
context: _extends({}, logContext, {
|
|
4141
|
+
walletId,
|
|
4142
|
+
newShareSetId,
|
|
4143
|
+
externalKeyShareId
|
|
4144
|
+
})
|
|
4145
|
+
});
|
|
4146
|
+
// Activate the share-set ↔ keyShareId mapping on redcoast.
|
|
4147
|
+
await retryPromise(()=>this.apiClient.markKeySharesAsBackedUp({
|
|
4148
|
+
walletId,
|
|
4149
|
+
shareSetId: newShareSetId,
|
|
4150
|
+
locations: [
|
|
4151
|
+
{
|
|
4152
|
+
location: BackupLocation.DYNAMIC,
|
|
4153
|
+
externalKeyShareId
|
|
4154
|
+
}
|
|
4155
|
+
],
|
|
4156
|
+
dynamicRequestId,
|
|
4157
|
+
businessAccountId
|
|
4158
|
+
}), {
|
|
4159
|
+
operationName: 'addSigner.markKeySharesAsBackedUp',
|
|
4160
|
+
shouldRetry: (error)=>{
|
|
4161
|
+
const status = getHttpStatus(error);
|
|
4162
|
+
return status === undefined || status === 429 || status !== undefined && status >= 500;
|
|
4163
|
+
}
|
|
4164
|
+
});
|
|
4165
|
+
this.logger.info('[BusinessAccountAddSigner] done — share set activated', {
|
|
4166
|
+
context: _extends({}, logContext, {
|
|
4167
|
+
walletId,
|
|
4168
|
+
newShareSetId,
|
|
4169
|
+
externalKeyShareId,
|
|
4170
|
+
ceremony_duration_ms: Date.now() - ceremonyStartTime
|
|
4171
|
+
})
|
|
4172
|
+
});
|
|
4173
|
+
return {
|
|
4174
|
+
shareSetId: newShareSetId
|
|
4175
|
+
};
|
|
4176
|
+
}
|
|
3952
4177
|
// Surfaces server-side bugs in the ceremony_complete payload without
|
|
3953
4178
|
// breaking the operation. The two cases:
|
|
3954
4179
|
//
|
|
@@ -4002,7 +4227,10 @@ class DynamicWalletClient {
|
|
|
4002
4227
|
// The reject handle is wired synchronously (Promise executors run inline)
|
|
4003
4228
|
// before the API call starts, so an immediate onError can never be dropped.
|
|
4004
4229
|
// The lost branch's rejection is swallowed so it never surfaces as unhandled.
|
|
4005
|
-
|
|
4230
|
+
/**
|
|
4231
|
+
* Ceremony-complete payload — typed object so addSigner-only fields are
|
|
4232
|
+
* namespaced and `clientKeyshareBackupGrant` never sits in a positional slot.
|
|
4233
|
+
*/ createCeremonyTerminalGate(onCeremonyComplete) {
|
|
4006
4234
|
let resolveComplete;
|
|
4007
4235
|
const completePromise = new Promise((resolve)=>{
|
|
4008
4236
|
resolveComplete = resolve;
|
|
@@ -4016,9 +4244,19 @@ class DynamicWalletClient {
|
|
|
4016
4244
|
let fired = false;
|
|
4017
4245
|
return {
|
|
4018
4246
|
onError: rejectOnError,
|
|
4019
|
-
|
|
4247
|
+
// Positional shape preserved at the wire boundary — eventStream/utils
|
|
4248
|
+
// invokes this with positional args. Translates to the typed object
|
|
4249
|
+
// for the caller-supplied cb.
|
|
4250
|
+
onCeremonyComplete: (accountAddress, walletId, shareSetId, shareSetType, targetUserId, clientKeyshareBackupGrant)=>{
|
|
4020
4251
|
fired = true;
|
|
4021
|
-
onCeremonyComplete == null ? void 0 : onCeremonyComplete(
|
|
4252
|
+
onCeremonyComplete == null ? void 0 : onCeremonyComplete({
|
|
4253
|
+
accountAddress,
|
|
4254
|
+
walletId,
|
|
4255
|
+
shareSetId,
|
|
4256
|
+
shareSetType,
|
|
4257
|
+
targetUserId,
|
|
4258
|
+
clientKeyshareBackupGrant
|
|
4259
|
+
});
|
|
4022
4260
|
resolveComplete();
|
|
4023
4261
|
},
|
|
4024
4262
|
awaitTerminal: ()=>Promise.race([
|
|
@@ -4190,7 +4428,7 @@ class DynamicWalletClient {
|
|
|
4190
4428
|
clientKeySharesBackupInfo: updatedBackupInfo
|
|
4191
4429
|
} : {}));
|
|
4192
4430
|
}
|
|
4193
|
-
async internalReshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken }) {
|
|
4431
|
+
async internalReshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, cloudProviders = [], delegateToProjectEnvironment = false, mfaToken, elevatedAccessToken, revokeDelegation = false, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
4194
4432
|
const dynamicRequestId = v4();
|
|
4195
4433
|
// Password validation - wrapped in try-catch for consistent error handling
|
|
4196
4434
|
// This path should NOT wipe key shares on failure (shares remain valid)
|
|
@@ -4266,7 +4504,7 @@ class DynamicWalletClient {
|
|
|
4266
4504
|
// walletMap.shareSetId rotation lands before storeEncryptedBackupByWallet
|
|
4267
4505
|
// reads it; without it, backup would race ceremony_complete and the atomic
|
|
4268
4506
|
// swap could target the stale row.
|
|
4269
|
-
const ceremonyGate = this.createCeremonyTerminalGate((
|
|
4507
|
+
const ceremonyGate = this.createCeremonyTerminalGate(({ shareSetId, shareSetType })=>{
|
|
4270
4508
|
this.logger.info('[WaasReshare] ceremony_complete received', {
|
|
4271
4509
|
context: {
|
|
4272
4510
|
walletId: wallet.walletId,
|
|
@@ -4446,7 +4684,8 @@ class DynamicWalletClient {
|
|
|
4446
4684
|
password,
|
|
4447
4685
|
signedSessionId,
|
|
4448
4686
|
distribution,
|
|
4449
|
-
googleDriveAccessToken
|
|
4687
|
+
googleDriveAccessToken,
|
|
4688
|
+
googleDriveTokenSource
|
|
4450
4689
|
})
|
|
4451
4690
|
});
|
|
4452
4691
|
// Store client key shares to storage (localStorage or secureStorage)
|
|
@@ -4987,21 +5226,10 @@ class DynamicWalletClient {
|
|
|
4987
5226
|
accountAddress,
|
|
4988
5227
|
shareCount: expectedShares.length
|
|
4989
5228
|
});
|
|
4990
|
-
// The preceding `/backup` upload consumed the caller's signed-session nonce, so
|
|
4991
|
-
// the verify fetch needs a freshly-minted one — only possible over the reverse
|
|
4992
|
-
// channel. Without one, skip the check (with a warning) rather than abort an
|
|
4993
|
-
// otherwise-successful backup.
|
|
4994
|
-
if (!this.getSignedSessionIdCallback) {
|
|
4995
|
-
this.logger.warn('[keyshare-recovery-verify] skipped: no reverse channel to mint a fresh nonce for the verify fetch', {
|
|
4996
|
-
walletId,
|
|
4997
|
-
accountAddress
|
|
4998
|
-
});
|
|
4999
|
-
return;
|
|
5000
|
-
}
|
|
5001
5229
|
let data;
|
|
5002
5230
|
try {
|
|
5003
|
-
//
|
|
5004
|
-
//
|
|
5231
|
+
// Mint a fresh session (the backup consumed the caller's). A missing reverse
|
|
5232
|
+
// channel is skipped below; any other failure rethrows.
|
|
5005
5233
|
const verifySignedSessionId = await this.signedSession.resolve();
|
|
5006
5234
|
data = await this.recoverEncryptedSharesWithNonceRetry({
|
|
5007
5235
|
walletId,
|
|
@@ -5014,13 +5242,18 @@ class DynamicWalletClient {
|
|
|
5014
5242
|
context: 'verify-backup-recoverable'
|
|
5015
5243
|
});
|
|
5016
5244
|
} catch (error) {
|
|
5017
|
-
//
|
|
5018
|
-
|
|
5245
|
+
// Only a missing reverse channel (no callback, or the host registered no
|
|
5246
|
+
// getSignedSessionId handler) is a benign "can't run" — skip without aborting a
|
|
5247
|
+
// successful backup. Anything else (fetch / transient) is rethrown.
|
|
5248
|
+
const message = error instanceof Error && error.message || '';
|
|
5249
|
+
const noReverseChannel = !this.getSignedSessionIdCallback || message.includes('No handlers were registered') || message.includes('no callback is configured');
|
|
5250
|
+
if (!noReverseChannel) throw error;
|
|
5251
|
+
this.logger.warn('[keyshare-recovery-verify] no reverse channel for verify nonce, skipping', {
|
|
5019
5252
|
walletId,
|
|
5020
5253
|
accountAddress,
|
|
5021
5254
|
errorName: error instanceof Error ? error.name : undefined
|
|
5022
5255
|
});
|
|
5023
|
-
|
|
5256
|
+
return;
|
|
5024
5257
|
}
|
|
5025
5258
|
try {
|
|
5026
5259
|
var _data_keyShares;
|
|
@@ -5342,7 +5575,7 @@ class DynamicWalletClient {
|
|
|
5342
5575
|
]);
|
|
5343
5576
|
}));
|
|
5344
5577
|
}
|
|
5345
|
-
async backupToCloudProvider({ provider, shares, accountAddress, password, chainName, bitcoinConfig, isPasswordEncrypted, preEncryptedShares, googleDriveAccessToken }) {
|
|
5578
|
+
async backupToCloudProvider({ provider, shares, accountAddress, password, chainName, bitcoinConfig, isPasswordEncrypted, preEncryptedShares, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
5346
5579
|
const encryptedCloudShares = preEncryptedShares != null ? preEncryptedShares : await Promise.all(shares.map((keyShare)=>this.encryptKeyShare({
|
|
5347
5580
|
keyShare,
|
|
5348
5581
|
password
|
|
@@ -5358,11 +5591,13 @@ class DynamicWalletClient {
|
|
|
5358
5591
|
clientKeyShare: shares[0],
|
|
5359
5592
|
bitcoinConfig
|
|
5360
5593
|
});
|
|
5361
|
-
return {
|
|
5594
|
+
return _extends({
|
|
5362
5595
|
location: provider,
|
|
5363
5596
|
passwordEncrypted: isPasswordEncrypted,
|
|
5364
5597
|
keygenId
|
|
5365
|
-
}
|
|
5598
|
+
}, provider === BackupLocation.GOOGLE_DRIVE && googleDriveTokenSource ? {
|
|
5599
|
+
tokenSource: googleDriveTokenSource
|
|
5600
|
+
} : {});
|
|
5366
5601
|
}
|
|
5367
5602
|
async publishDelegatedShare({ walletId, shareSetId, delegatedShare, signedSessionId, dynamicRequestId, chainName, bitcoinConfig, isPasswordEncrypted }) {
|
|
5368
5603
|
var _publicKey_key, _publicKey_key1, _publicKey_key2;
|
|
@@ -5409,7 +5644,7 @@ class DynamicWalletClient {
|
|
|
5409
5644
|
}
|
|
5410
5645
|
return location;
|
|
5411
5646
|
}
|
|
5412
|
-
async backupSharesWithDistribution({ accountAddress, password, signedSessionId, distribution, preserveDelegatedLocation = false, passwordUpdateBatchId, googleDriveAccessToken }) {
|
|
5647
|
+
async backupSharesWithDistribution({ accountAddress, password, signedSessionId, distribution, preserveDelegatedLocation = false, passwordUpdateBatchId, googleDriveAccessToken, googleDriveTokenSource, businessAccountId }) {
|
|
5413
5648
|
const dynamicRequestId = v4();
|
|
5414
5649
|
// Get wallet data early for logging context (also used in catch block)
|
|
5415
5650
|
const walletData = this.getWalletFromMap(accountAddress);
|
|
@@ -5553,7 +5788,8 @@ class DynamicWalletClient {
|
|
|
5553
5788
|
bitcoinConfig,
|
|
5554
5789
|
isPasswordEncrypted,
|
|
5555
5790
|
preEncryptedShares: encrypted,
|
|
5556
|
-
googleDriveAccessToken
|
|
5791
|
+
googleDriveAccessToken,
|
|
5792
|
+
googleDriveTokenSource
|
|
5557
5793
|
}));
|
|
5558
5794
|
}
|
|
5559
5795
|
// When this ceremony minted a separate `delegated` share set (FF=on
|
|
@@ -5626,7 +5862,8 @@ class DynamicWalletClient {
|
|
|
5626
5862
|
shareSetId: targetShareSetId,
|
|
5627
5863
|
locations,
|
|
5628
5864
|
dynamicRequestId,
|
|
5629
|
-
passwordUpdateBatchId
|
|
5865
|
+
passwordUpdateBatchId,
|
|
5866
|
+
businessAccountId
|
|
5630
5867
|
}), {
|
|
5631
5868
|
operationName: BACKUP_OPERATION.MarkBackedUp,
|
|
5632
5869
|
shouldRetry: (error)=>{
|
|
@@ -5817,7 +6054,7 @@ class DynamicWalletClient {
|
|
|
5817
6054
|
* @param params.signedSessionId - Optional signed session ID for authentication
|
|
5818
6055
|
* @param params.backupToGoogleDrive - Whether to backup to Google Drive (defaults to false)
|
|
5819
6056
|
* @returns Promise with backup metadata including share locations and IDs
|
|
5820
|
-
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, cloudProviders = [], delegatedKeyshare = undefined, passwordUpdateBatchId, googleDriveAccessToken }) {
|
|
6057
|
+
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, cloudProviders = [], delegatedKeyshare = undefined, passwordUpdateBatchId, googleDriveAccessToken, googleDriveTokenSource, businessAccountId }) {
|
|
5821
6058
|
var _backupData_locationsWithKeyShares, _backupData_locationsWithKeyShares1;
|
|
5822
6059
|
const hasProvidedShares = clientKeyShares !== undefined;
|
|
5823
6060
|
const keySharesToBackup = clientKeyShares != null ? clientKeyShares : await this.getClientKeySharesFromStorage({
|
|
@@ -5890,7 +6127,9 @@ class DynamicWalletClient {
|
|
|
5890
6127
|
distribution,
|
|
5891
6128
|
preserveDelegatedLocation,
|
|
5892
6129
|
passwordUpdateBatchId,
|
|
5893
|
-
googleDriveAccessToken
|
|
6130
|
+
googleDriveAccessToken,
|
|
6131
|
+
googleDriveTokenSource,
|
|
6132
|
+
businessAccountId
|
|
5894
6133
|
});
|
|
5895
6134
|
var _backupData_locationsWithKeyShares_map, _backupData_locationsWithKeyShares_map1;
|
|
5896
6135
|
return _extends({}, backupData, {
|
|
@@ -6426,7 +6665,7 @@ class DynamicWalletClient {
|
|
|
6426
6665
|
* Internal helper method that handles the complete flow for ensuring wallet key shares are backed up to a cloud provider.
|
|
6427
6666
|
* - For 2-of-2 wallets: Automatically reshares to 2-of-3 threshold, then distributes shares (1 to backend, 1 to cloud)
|
|
6428
6667
|
* - For 2-of-3 wallets: Call storeEncryptedBackupByWallet to backup for backend and cloud
|
|
6429
|
-
*/ async backupKeySharesToCloudProvider({ accountAddress, password, signedSessionId, backupLocation, googleDriveAccessToken }) {
|
|
6668
|
+
*/ async backupKeySharesToCloudProvider({ accountAddress, password, signedSessionId, backupLocation, googleDriveAccessToken, googleDriveTokenSource }) {
|
|
6430
6669
|
try {
|
|
6431
6670
|
await this.getWallet({
|
|
6432
6671
|
accountAddress,
|
|
@@ -6448,7 +6687,8 @@ class DynamicWalletClient {
|
|
|
6448
6687
|
cloudProviders: [
|
|
6449
6688
|
backupLocation
|
|
6450
6689
|
],
|
|
6451
|
-
googleDriveAccessToken
|
|
6690
|
+
googleDriveAccessToken,
|
|
6691
|
+
googleDriveTokenSource
|
|
6452
6692
|
});
|
|
6453
6693
|
} else {
|
|
6454
6694
|
await this.storeEncryptedBackupByWallet({
|
|
@@ -6458,7 +6698,8 @@ class DynamicWalletClient {
|
|
|
6458
6698
|
cloudProviders: [
|
|
6459
6699
|
backupLocation
|
|
6460
6700
|
],
|
|
6461
|
-
googleDriveAccessToken
|
|
6701
|
+
googleDriveAccessToken,
|
|
6702
|
+
googleDriveTokenSource
|
|
6462
6703
|
});
|
|
6463
6704
|
}
|
|
6464
6705
|
} catch (error) {
|
|
@@ -6507,7 +6748,10 @@ class DynamicWalletClient {
|
|
|
6507
6748
|
backupLocation: BackupLocation.GOOGLE_DRIVE,
|
|
6508
6749
|
// Forward the resolved token so the downstream upload path doesn't
|
|
6509
6750
|
// re-fetch it via fetchGoogleDriveAccessToken.
|
|
6510
|
-
googleDriveAccessToken: resolvedAccessToken
|
|
6751
|
+
googleDriveAccessToken: resolvedAccessToken,
|
|
6752
|
+
// Persist which token source backed up the Google Drive location for
|
|
6753
|
+
// audit (enum only — never the token value).
|
|
6754
|
+
googleDriveTokenSource: tokenSource
|
|
6511
6755
|
});
|
|
6512
6756
|
success = true;
|
|
6513
6757
|
} finally{
|
|
@@ -7683,6 +7927,12 @@ class DynamicWalletClient {
|
|
|
7683
7927
|
logger: this.logger,
|
|
7684
7928
|
onUnauthorized: internalOptions == null ? void 0 : internalOptions.onUnauthorized
|
|
7685
7929
|
});
|
|
7930
|
+
// `reshare` left unbound until the signer-reshare flavor (reshare into a new
|
|
7931
|
+
// signer's pending share set) exists; addSigner is stubbed until then.
|
|
7932
|
+
this.businessAccounts = new BusinessAccountClient({
|
|
7933
|
+
apiClient: this.apiClient,
|
|
7934
|
+
logger: this.logger
|
|
7935
|
+
});
|
|
7686
7936
|
this.debug = Boolean(debug);
|
|
7687
7937
|
this.featureFlags = featureFlags || {};
|
|
7688
7938
|
// setup storage for walletMap metadata (used regardless of secureStorage)
|
|
@@ -7709,11 +7959,15 @@ class DynamicWalletClient {
|
|
|
7709
7959
|
durationMs: Date.now() - forwardMPCConnectStartedAt
|
|
7710
7960
|
});
|
|
7711
7961
|
}).catch((error)=>{
|
|
7712
|
-
|
|
7962
|
+
const errorInfo = classifyForwardMpcError(error);
|
|
7963
|
+
// A rate-limited upgrade falls back to relay → warn, not error, so the
|
|
7964
|
+
// recovered case doesn't pollute error triage.
|
|
7965
|
+
const level = errorInfo.errorType === 'RATE_LIMITED' ? 'warn' : 'error';
|
|
7966
|
+
this.logger[level]('Error connecting to ForwardMPC enclave optimistically', _extends({}, errorInfo, {
|
|
7713
7967
|
error,
|
|
7714
7968
|
environmentId: this.environmentId,
|
|
7715
7969
|
durationMs: Date.now() - forwardMPCConnectStartedAt
|
|
7716
|
-
});
|
|
7970
|
+
}));
|
|
7717
7971
|
});
|
|
7718
7972
|
}
|
|
7719
7973
|
}
|
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.29",
|
|
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.
|
|
8
|
-
"@dynamic-labs-wallet/forward-mpc-client": "0.
|
|
9
|
-
"@dynamic-labs-wallet/primitives": "1.0.
|
|
7
|
+
"@dynamic-labs-wallet/core": "1.0.29",
|
|
8
|
+
"@dynamic-labs-wallet/forward-mpc-client": "0.12.0",
|
|
9
|
+
"@dynamic-labs-wallet/primitives": "1.0.29",
|
|
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
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EcdsaSignature, MessageHash, type EcdsaPublicKey } from '#internal/web';
|
|
2
|
-
import { AuthMode, BackupLocation, DynamicApiClient, ThresholdSignatureScheme, WalletOperation, type BackupLocationWithExternalKeyShareId, type BitcoinConfig, type DynamicWalletClientProps, type FeatureFlags, type GetWalletResponse, type ILogger, type InitializeResult, type KeyShareBackupInfo, type SecureStorageAdapter, type ShareSet, type ShareSetType, type TraceContext, type WalletRecoveryState, type CreateWaasSDKContainer } from '@dynamic-labs-wallet/core';
|
|
2
|
+
import { AuthMode, BackupLocation, DynamicApiClient, BusinessAccountClient, type TargetSignerIdentity, type BusinessAccountSignerType, ThresholdSignatureScheme, WalletOperation, type BackupLocationWithExternalKeyShareId, type BitcoinConfig, type DynamicWalletClientProps, type FeatureFlags, type GetWalletResponse, type ILogger, type InitializeResult, type KeyShareBackupInfo, type SecureStorageAdapter, type ShareSet, type ShareSetType, type TraceContext, type WalletRecoveryState, type CreateWaasSDKContainer } from '@dynamic-labs-wallet/core';
|
|
3
3
|
import { RoomTypeEnum, type SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
4
4
|
import type { DerivationInputFingerprint } from './backup/encryption/types.js';
|
|
5
5
|
import type { ClientInitKeygenResult, ClientKeyShare, MPCSigner } from './mpc/types.js';
|
|
@@ -35,6 +35,8 @@ export declare class DynamicWalletClient {
|
|
|
35
35
|
protected initializePromise: Promise<InitializeResult> | null;
|
|
36
36
|
protected logger: ILogger;
|
|
37
37
|
protected apiClient: DynamicApiClient;
|
|
38
|
+
/** Business-account orchestration (create/list/get + member/signer ops). */
|
|
39
|
+
readonly businessAccounts: BusinessAccountClient;
|
|
38
40
|
protected walletMap: Record<string, WalletProperties>;
|
|
39
41
|
protected storage: SupportedStorage;
|
|
40
42
|
protected memoryStorage: {
|
|
@@ -131,12 +133,13 @@ export declare class DynamicWalletClient {
|
|
|
131
133
|
* Client initialization logic
|
|
132
134
|
*/
|
|
133
135
|
protected _initialize(traceContext?: TraceContext): Promise<InitializeResult>;
|
|
134
|
-
serverInitializeKeyGen({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, bitcoinConfig, onError, onCeremonyComplete, }: {
|
|
136
|
+
serverInitializeKeyGen({ chainName, clientKeygenIds, dynamicRequestId, thresholdSignatureScheme, bitcoinConfig, businessAccountId, onError, onCeremonyComplete, }: {
|
|
135
137
|
chainName: string;
|
|
136
138
|
clientKeygenIds: string[];
|
|
137
139
|
dynamicRequestId: string;
|
|
138
140
|
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
139
141
|
bitcoinConfig?: BitcoinConfig;
|
|
142
|
+
businessAccountId?: string;
|
|
140
143
|
onError?: (error: Error) => void;
|
|
141
144
|
onCeremonyComplete?: (accountAddress: string, walletId: string, shareSetId?: string) => void;
|
|
142
145
|
}): Promise<import("@dynamic-labs-wallet/core").KeygenCompleteResponse>;
|
|
@@ -209,6 +212,7 @@ export declare class DynamicWalletClient {
|
|
|
209
212
|
chainName: string;
|
|
210
213
|
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
211
214
|
bitcoinConfig?: BitcoinConfig;
|
|
215
|
+
businessAccountId?: string;
|
|
212
216
|
onError?: (error: Error) => void;
|
|
213
217
|
onCeremonyComplete?: (accountAddress: string, walletId: string) => void;
|
|
214
218
|
traceContext?: TraceContext;
|
|
@@ -365,7 +369,7 @@ export declare class DynamicWalletClient {
|
|
|
365
369
|
existingClientKeygenIds: string[];
|
|
366
370
|
existingClientKeyShares: ClientKeyShare[];
|
|
367
371
|
}>;
|
|
368
|
-
reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password, signedSessionId, cloudProviders, delegateToProjectEnvironment, mfaToken, elevatedAccessToken, revokeDelegation, googleDriveAccessToken, }: {
|
|
372
|
+
reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password, signedSessionId, cloudProviders, delegateToProjectEnvironment, mfaToken, elevatedAccessToken, revokeDelegation, googleDriveAccessToken, googleDriveTokenSource, }: {
|
|
369
373
|
chainName: string;
|
|
370
374
|
accountAddress: string;
|
|
371
375
|
oldThresholdSignatureScheme: ThresholdSignatureScheme;
|
|
@@ -378,8 +382,26 @@ export declare class DynamicWalletClient {
|
|
|
378
382
|
elevatedAccessToken?: string;
|
|
379
383
|
revokeDelegation?: boolean;
|
|
380
384
|
googleDriveAccessToken?: string;
|
|
385
|
+
googleDriveTokenSource?: 'external' | 'stored_oauth';
|
|
381
386
|
}): Promise<void>;
|
|
387
|
+
/** Reshare into a new 2/2 share set for the target signer; seed it to CKS
|
|
388
|
+
* on their behalf via a single-use grant. Does not touch the caller's set. */
|
|
389
|
+
reshareToNewSignerShareSet({ chainName, accountAddress, businessAccountId, signerType, targetSignerIdentity, password, signedSessionId, }: {
|
|
390
|
+
chainName: string;
|
|
391
|
+
accountAddress: string;
|
|
392
|
+
businessAccountId: string;
|
|
393
|
+
signerType?: BusinessAccountSignerType;
|
|
394
|
+
targetSignerIdentity: TargetSignerIdentity;
|
|
395
|
+
password?: string;
|
|
396
|
+
signedSessionId: string;
|
|
397
|
+
}): Promise<{
|
|
398
|
+
shareSetId: string;
|
|
399
|
+
}>;
|
|
382
400
|
private logOnMalformedCeremonyPayload;
|
|
401
|
+
/**
|
|
402
|
+
* Ceremony-complete payload — typed object so addSigner-only fields are
|
|
403
|
+
* namespaced and `clientKeyshareBackupGrant` never sits in a positional slot.
|
|
404
|
+
*/
|
|
383
405
|
private createCeremonyTerminalGate;
|
|
384
406
|
private runBackupWithRotationRollback;
|
|
385
407
|
private rotateRootUserShareSetIdIfChanged;
|
|
@@ -535,7 +557,7 @@ export declare class DynamicWalletClient {
|
|
|
535
557
|
private backupToCloudProvider;
|
|
536
558
|
private publishDelegatedShare;
|
|
537
559
|
private createPreservedDelegatedLocation;
|
|
538
|
-
backupSharesWithDistribution({ accountAddress, password, signedSessionId, distribution, preserveDelegatedLocation, passwordUpdateBatchId, googleDriveAccessToken, }: {
|
|
560
|
+
backupSharesWithDistribution({ accountAddress, password, signedSessionId, distribution, preserveDelegatedLocation, passwordUpdateBatchId, googleDriveAccessToken, googleDriveTokenSource, businessAccountId, }: {
|
|
539
561
|
accountAddress: string;
|
|
540
562
|
password?: string;
|
|
541
563
|
signedSessionId?: string;
|
|
@@ -543,6 +565,8 @@ export declare class DynamicWalletClient {
|
|
|
543
565
|
preserveDelegatedLocation?: boolean;
|
|
544
566
|
passwordUpdateBatchId?: string;
|
|
545
567
|
googleDriveAccessToken?: string;
|
|
568
|
+
googleDriveTokenSource?: 'external' | 'stored_oauth';
|
|
569
|
+
businessAccountId?: string;
|
|
546
570
|
}): Promise<{
|
|
547
571
|
message: string;
|
|
548
572
|
walletId: string;
|
|
@@ -586,7 +610,7 @@ export declare class DynamicWalletClient {
|
|
|
586
610
|
* @param params.backupToGoogleDrive - Whether to backup to Google Drive (defaults to false)
|
|
587
611
|
* @returns Promise with backup metadata including share locations and IDs
|
|
588
612
|
*/
|
|
589
|
-
storeEncryptedBackupByWallet({ accountAddress, clientKeyShares, password, signedSessionId, cloudProviders, delegatedKeyshare, passwordUpdateBatchId, googleDriveAccessToken, }: {
|
|
613
|
+
storeEncryptedBackupByWallet({ accountAddress, clientKeyShares, password, signedSessionId, cloudProviders, delegatedKeyshare, passwordUpdateBatchId, googleDriveAccessToken, googleDriveTokenSource, businessAccountId, }: {
|
|
590
614
|
accountAddress: string;
|
|
591
615
|
clientKeyShares?: ClientKeyShare[];
|
|
592
616
|
password?: string;
|
|
@@ -595,6 +619,8 @@ export declare class DynamicWalletClient {
|
|
|
595
619
|
delegatedKeyshare?: ClientKeyShare;
|
|
596
620
|
passwordUpdateBatchId?: string;
|
|
597
621
|
googleDriveAccessToken?: string;
|
|
622
|
+
googleDriveTokenSource?: 'external' | 'stored_oauth';
|
|
623
|
+
businessAccountId?: string;
|
|
598
624
|
}): Promise<{
|
|
599
625
|
keyShareIds: string[];
|
|
600
626
|
keygenIds: string[];
|
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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"}
|