@dynamic-labs-wallet/browser 0.0.164 → 0.0.166
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.js +153 -179
- package/index.esm.js +154 -180
- package/package.json +2 -2
- package/src/client.d.ts +3 -17
- package/src/client.d.ts.map +1 -1
- package/src/mpc/index.d.ts +1 -1
- package/src/mpc/mpc.d.ts +1 -1
- package/src/mpc/types.d.ts +2 -2
- package/src/services/encryption.d.ts +19 -0
- package/src/services/encryption.d.ts.map +1 -0
- package/src/utils.d.ts +1 -1
- package/src/utils.d.ts.map +1 -1
package/index.cjs.js
CHANGED
|
@@ -475,7 +475,8 @@ const getClientKeyShareBackupInfo = (params)=>{
|
|
|
475
475
|
[core.BackupLocation.GOOGLE_DRIVE]: [],
|
|
476
476
|
[core.BackupLocation.ICLOUD]: [],
|
|
477
477
|
[core.BackupLocation.USER]: [],
|
|
478
|
-
[core.BackupLocation.EXTERNAL]: []
|
|
478
|
+
[core.BackupLocation.EXTERNAL]: [],
|
|
479
|
+
[core.BackupLocation.DELEGATED]: []
|
|
479
480
|
};
|
|
480
481
|
if (!(params == null ? void 0 : (_params_walletProperties = params.walletProperties) == null ? void 0 : _params_walletProperties.keyShares)) {
|
|
481
482
|
return {
|
|
@@ -720,6 +721,94 @@ const localStorageWriteTest = {
|
|
|
720
721
|
}
|
|
721
722
|
});
|
|
722
723
|
|
|
724
|
+
/** Algorithm label for the new hybrid encryption standard */ const ALG_LABEL_RSA = 'HYBRID-RSA-AES-256';
|
|
725
|
+
/**
|
|
726
|
+
* Convert base64 to base64url encoding
|
|
727
|
+
*/ const toBase64Url = (buffer)=>{
|
|
728
|
+
const base64 = Buffer.from(buffer).toString('base64');
|
|
729
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
730
|
+
};
|
|
731
|
+
/**
|
|
732
|
+
* Convert ArrayBuffer to base64url
|
|
733
|
+
*/ const arrayBufferToBase64Url = (buffer)=>{
|
|
734
|
+
return toBase64Url(buffer);
|
|
735
|
+
};
|
|
736
|
+
/**
|
|
737
|
+
* Import RSA public key from PEM format
|
|
738
|
+
*/ const importRSAPublicKey = async (publicKeyPem)=>{
|
|
739
|
+
// Remove PEM headers and decode base64
|
|
740
|
+
const pemHeader = '-----BEGIN PUBLIC KEY-----';
|
|
741
|
+
const pemFooter = '-----END PUBLIC KEY-----';
|
|
742
|
+
const pemContents = publicKeyPem.replace(pemHeader, '').replace(pemFooter, '').replace(/\s/g, '');
|
|
743
|
+
const binaryDer = Buffer.from(pemContents, 'base64').toString('binary');
|
|
744
|
+
const keyData = new Uint8Array(binaryDer.length);
|
|
745
|
+
for(let i = 0; i < binaryDer.length; i++){
|
|
746
|
+
keyData[i] = binaryDer.charCodeAt(i);
|
|
747
|
+
}
|
|
748
|
+
return await crypto.subtle.importKey('spki', keyData, {
|
|
749
|
+
name: 'RSA-OAEP',
|
|
750
|
+
hash: 'SHA-256'
|
|
751
|
+
}, false, [
|
|
752
|
+
'encrypt'
|
|
753
|
+
]);
|
|
754
|
+
};
|
|
755
|
+
/**
|
|
756
|
+
* Creates the encoded envelope bytes from the encrypted data components
|
|
757
|
+
*/ const createEncodedEnvelopeBytes = (iv, ciphertext, authTag, encryptedAesKey)=>{
|
|
758
|
+
const envelopeData = {
|
|
759
|
+
algorithm: ALG_LABEL_RSA,
|
|
760
|
+
iv: arrayBufferToBase64Url(iv.buffer),
|
|
761
|
+
encryptedData: arrayBufferToBase64Url(ciphertext.buffer),
|
|
762
|
+
authTag: arrayBufferToBase64Url(authTag.buffer),
|
|
763
|
+
encryptedKey: arrayBufferToBase64Url(encryptedAesKey)
|
|
764
|
+
};
|
|
765
|
+
return Buffer.from(new TextEncoder().encode(JSON.stringify(envelopeData))).toString('base64');
|
|
766
|
+
};
|
|
767
|
+
/**
|
|
768
|
+
* Encrypts data using HYBRID-RSA-AES-256 encryption scheme with Web Crypto API.
|
|
769
|
+
* 1. Generate random AES-256 key
|
|
770
|
+
* 2. Encrypt AES key with RSA public key
|
|
771
|
+
* 3. Encrypt data with AES-256-GCM
|
|
772
|
+
*/ const encryptDelegatedKeyShare = async (data, publicKeyPem)=>{
|
|
773
|
+
try {
|
|
774
|
+
// Step 1: Generate a random AES-256 key and 16-byte IV
|
|
775
|
+
const aesKey = await crypto.subtle.generateKey({
|
|
776
|
+
name: 'AES-GCM',
|
|
777
|
+
length: 256
|
|
778
|
+
}, true, [
|
|
779
|
+
'encrypt'
|
|
780
|
+
]);
|
|
781
|
+
const iv = crypto.getRandomValues(new Uint8Array(16)); // 128-bit IV for GCM
|
|
782
|
+
// Step 2: Encrypt the data with AES-256-GCM
|
|
783
|
+
const plaintext = new TextEncoder().encode(data);
|
|
784
|
+
const encryptedData = await crypto.subtle.encrypt({
|
|
785
|
+
name: 'AES-GCM',
|
|
786
|
+
iv: iv
|
|
787
|
+
}, aesKey, plaintext);
|
|
788
|
+
// Extract the auth tag from the encrypted data (last 16 bytes)
|
|
789
|
+
const encryptedDataArray = new Uint8Array(encryptedData);
|
|
790
|
+
const authTag = encryptedDataArray.slice(-16);
|
|
791
|
+
const ciphertext = encryptedDataArray.slice(0, -16);
|
|
792
|
+
// Step 3: Encrypt the AES key with RSA public key
|
|
793
|
+
const rsaPublicKey = await importRSAPublicKey(publicKeyPem);
|
|
794
|
+
// Export the AES key to encrypt it
|
|
795
|
+
const aesKeyData = await crypto.subtle.exportKey('raw', aesKey);
|
|
796
|
+
const encryptedAesKey = await crypto.subtle.encrypt({
|
|
797
|
+
name: 'RSA-OAEP'
|
|
798
|
+
}, rsaPublicKey, aesKeyData);
|
|
799
|
+
return {
|
|
800
|
+
algorithm: ALG_LABEL_RSA,
|
|
801
|
+
iv: arrayBufferToBase64Url(iv.buffer),
|
|
802
|
+
encryptedData: arrayBufferToBase64Url(ciphertext.buffer),
|
|
803
|
+
authTag: arrayBufferToBase64Url(authTag.buffer),
|
|
804
|
+
encryptedKey: arrayBufferToBase64Url(encryptedAesKey),
|
|
805
|
+
encodedEnvelopeBytes: createEncodedEnvelopeBytes(iv, ciphertext, authTag, encryptedAesKey)
|
|
806
|
+
};
|
|
807
|
+
} catch (error) {
|
|
808
|
+
throw new Error(`Encryption failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
809
|
+
}
|
|
810
|
+
};
|
|
811
|
+
|
|
723
812
|
class DynamicWalletClient {
|
|
724
813
|
getAuthMode() {
|
|
725
814
|
return this.authMode;
|
|
@@ -1256,6 +1345,7 @@ class DynamicWalletClient {
|
|
|
1256
1345
|
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, backupToGoogleDrive = false, delegateToProjectEnvironment = false, mfaToken }) {
|
|
1257
1346
|
const dynamicRequestId = uuid.v4();
|
|
1258
1347
|
try {
|
|
1348
|
+
var _publicKey_key, _publicKey_key1;
|
|
1259
1349
|
await this.verifyPassword({
|
|
1260
1350
|
accountAddress,
|
|
1261
1351
|
password,
|
|
@@ -1307,35 +1397,54 @@ class DynamicWalletClient {
|
|
|
1307
1397
|
chainName,
|
|
1308
1398
|
baseRelayUrl: this.baseMPCRelayApiUrl
|
|
1309
1399
|
});
|
|
1310
|
-
const
|
|
1311
|
-
|
|
1312
|
-
|
|
1400
|
+
const existingResharePromises = existingClientKeyShares.map((keyShare)=>mpcSigner.reshareRemainingParty(roomId, newMpcConfig.threshold, keyShare, allPartyKeygenIds));
|
|
1401
|
+
const newResharePromises = newClientInitKeygenResults.map((keygenResult)=>mpcSigner.reshareNewParty(roomId, oldMpcConfig.threshold, newMpcConfig.threshold, keygenResult, allPartyKeygenIds));
|
|
1402
|
+
// Run both share parties in parallel by group
|
|
1403
|
+
const [existingReshareResults, newReshareResults] = await Promise.all([
|
|
1404
|
+
Promise.all(existingResharePromises),
|
|
1405
|
+
Promise.all(newResharePromises)
|
|
1313
1406
|
]);
|
|
1407
|
+
const clientKeyshares = delegateToProjectEnvironment ? [
|
|
1408
|
+
...existingReshareResults
|
|
1409
|
+
] : [
|
|
1410
|
+
...existingReshareResults,
|
|
1411
|
+
...newReshareResults
|
|
1412
|
+
];
|
|
1314
1413
|
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
1315
1414
|
thresholdSignatureScheme: newThresholdSignatureScheme
|
|
1316
1415
|
});
|
|
1317
1416
|
await this.setClientKeySharesToLocalStorage({
|
|
1318
1417
|
accountAddress,
|
|
1319
|
-
clientKeyShares:
|
|
1418
|
+
clientKeyShares: clientKeyshares,
|
|
1320
1419
|
overwriteOrMerge: 'overwrite'
|
|
1321
1420
|
});
|
|
1322
|
-
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1421
|
+
await this.storeEncryptedBackupByWallet({
|
|
1422
|
+
accountAddress,
|
|
1423
|
+
password,
|
|
1424
|
+
signedSessionId,
|
|
1425
|
+
backupToGoogleDrive,
|
|
1426
|
+
delegatedLocations: newReshareResults.map(()=>({
|
|
1427
|
+
location: core.BackupLocation.DELEGATED
|
|
1428
|
+
}))
|
|
1429
|
+
});
|
|
1430
|
+
const publicKey = await this.apiClient.getDelegatedEncryptionKey({
|
|
1431
|
+
environmentId: this.environmentId
|
|
1432
|
+
});
|
|
1433
|
+
if (!(publicKey == null ? void 0 : (_publicKey_key = publicKey.key) == null ? void 0 : _publicKey_key.publicKeyPemB64)) {
|
|
1434
|
+
throw new Error('Public key not found');
|
|
1335
1435
|
}
|
|
1436
|
+
const encryptedDelegatedKeyShareEnvelope = await encryptDelegatedKeyShare(JSON.stringify(clientKeyshares[0]), publicKey == null ? void 0 : (_publicKey_key1 = publicKey.key) == null ? void 0 : _publicKey_key1.publicKeyPemB64);
|
|
1437
|
+
await this.apiClient.publishDelegatedKeyShare({
|
|
1438
|
+
walletId: this.walletMap[accountAddress].walletId,
|
|
1439
|
+
encryptedKeyShare: encryptedDelegatedKeyShareEnvelope == null ? void 0 : encryptedDelegatedKeyShareEnvelope.encodedEnvelopeBytes,
|
|
1440
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
1441
|
+
signedSessionId,
|
|
1442
|
+
requiresSignedSessionId: this.requiresSignedSessionId(),
|
|
1443
|
+
dynamicRequestId
|
|
1444
|
+
});
|
|
1336
1445
|
} catch (error) {
|
|
1337
1446
|
logError({
|
|
1338
|
-
message: 'Error in reshare',
|
|
1447
|
+
message: 'Error in reshare, resetting wallet to previous state',
|
|
1339
1448
|
error: error,
|
|
1340
1449
|
context: {
|
|
1341
1450
|
accountAddress,
|
|
@@ -1346,36 +1455,14 @@ class DynamicWalletClient {
|
|
|
1346
1455
|
dynamicRequestId
|
|
1347
1456
|
}
|
|
1348
1457
|
});
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
async sendKeySharesToDelegatedAccess({ accountAddress, chainName, delegatedKeyShares, environmentId, userId, walletId }) {
|
|
1353
|
-
try {
|
|
1354
|
-
if (!this.delegatedAccessEndpoint) {
|
|
1355
|
-
throw new Error('Cannot send key shares to delegated access because delegated access endpoint is not set');
|
|
1356
|
-
}
|
|
1357
|
-
const delegatedAccessEndpoint = this.delegatedAccessEndpoint;
|
|
1358
|
-
const response = await fetch(delegatedAccessEndpoint, {
|
|
1359
|
-
method: 'POST',
|
|
1360
|
-
body: JSON.stringify({
|
|
1361
|
-
chainName,
|
|
1362
|
-
accountAddress,
|
|
1363
|
-
delegatedKeyShares,
|
|
1364
|
-
environmentId,
|
|
1365
|
-
userId,
|
|
1366
|
-
walletId
|
|
1367
|
-
})
|
|
1458
|
+
// reset user wallet when reshare fails, this would allow the client to recover wallets from an active state
|
|
1459
|
+
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
1460
|
+
thresholdSignatureScheme: oldThresholdSignatureScheme
|
|
1368
1461
|
});
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
message: 'Error in sendKeySharesToDelegatedAccess',
|
|
1374
|
-
error: error,
|
|
1375
|
-
context: {
|
|
1376
|
-
accountAddress,
|
|
1377
|
-
chainName
|
|
1378
|
-
}
|
|
1462
|
+
await this.setClientKeySharesToLocalStorage({
|
|
1463
|
+
accountAddress,
|
|
1464
|
+
clientKeyShares: [],
|
|
1465
|
+
overwriteOrMerge: 'overwrite'
|
|
1379
1466
|
});
|
|
1380
1467
|
throw error;
|
|
1381
1468
|
}
|
|
@@ -1386,12 +1473,6 @@ class DynamicWalletClient {
|
|
|
1386
1473
|
if (!delegateToProjectEnvironment) {
|
|
1387
1474
|
throw new Error('Delegation is not allowed for this project environment');
|
|
1388
1475
|
}
|
|
1389
|
-
const environmentSettings = await this.apiClient.getEnvironmentSettings();
|
|
1390
|
-
const delegatedAccessEndpoint = environmentSettings.sdk.waas.delegatedAccessEndpoint;
|
|
1391
|
-
if (!delegatedAccessEndpoint) {
|
|
1392
|
-
throw new Error('Cannot delegate key shares because verified access endpoint is not set in the environment settings');
|
|
1393
|
-
}
|
|
1394
|
-
this.delegatedAccessEndpoint = delegatedAccessEndpoint;
|
|
1395
1476
|
const wallet = await this.getWallet({
|
|
1396
1477
|
accountAddress,
|
|
1397
1478
|
walletOperation: core.WalletOperation.REACH_ALL_PARTIES,
|
|
@@ -1402,25 +1483,20 @@ class DynamicWalletClient {
|
|
|
1402
1483
|
throw new Error('Delegation is not allowed for SUI');
|
|
1403
1484
|
}
|
|
1404
1485
|
const currentThresholdSignatureScheme = this.walletMap[accountAddress].thresholdSignatureScheme;
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
const delegatedKeyShares = backupInfo.backups[core.BackupLocation.EXTERNAL] || [];
|
|
1420
|
-
return delegatedKeyShares;
|
|
1421
|
-
} else {
|
|
1422
|
-
throw new Error('Delegation is not allowed for this threshold signature scheme');
|
|
1423
|
-
}
|
|
1486
|
+
await this.reshare({
|
|
1487
|
+
chainName: this.walletMap[accountAddress].chainName,
|
|
1488
|
+
accountAddress,
|
|
1489
|
+
oldThresholdSignatureScheme: currentThresholdSignatureScheme,
|
|
1490
|
+
newThresholdSignatureScheme: core.ThresholdSignatureScheme.TWO_OF_THREE,
|
|
1491
|
+
password,
|
|
1492
|
+
signedSessionId,
|
|
1493
|
+
backupToGoogleDrive: false,
|
|
1494
|
+
delegateToProjectEnvironment: true,
|
|
1495
|
+
mfaToken
|
|
1496
|
+
});
|
|
1497
|
+
const backupInfo = this.walletMap[accountAddress].clientKeySharesBackupInfo;
|
|
1498
|
+
const delegatedKeyShares = backupInfo.backups[core.BackupLocation.EXTERNAL] || [];
|
|
1499
|
+
return delegatedKeyShares;
|
|
1424
1500
|
} catch (error) {
|
|
1425
1501
|
logError({
|
|
1426
1502
|
message: 'Error in delegateKeyShares',
|
|
@@ -1622,7 +1698,7 @@ class DynamicWalletClient {
|
|
|
1622
1698
|
* @param params.signedSessionId - Optional signed session ID for authentication
|
|
1623
1699
|
* @param params.backupToGoogleDrive - Whether to backup to Google Drive (defaults to false)
|
|
1624
1700
|
* @returns Promise with backup metadata including share locations and IDs
|
|
1625
|
-
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, backupToGoogleDrive = false }) {
|
|
1701
|
+
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, backupToGoogleDrive = false, delegatedLocations = [] }) {
|
|
1626
1702
|
const dynamicRequestId = uuid.v4();
|
|
1627
1703
|
try {
|
|
1628
1704
|
var _this_walletMap_accountAddress, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_GOOGLE_DRIVE, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups, _this_walletMap_accountAddress_clientKeySharesBackupInfo, _this_walletMap_accountAddress1;
|
|
@@ -1690,6 +1766,9 @@ class DynamicWalletClient {
|
|
|
1690
1766
|
location: core.BackupLocation.GOOGLE_DRIVE
|
|
1691
1767
|
});
|
|
1692
1768
|
}
|
|
1769
|
+
if ((delegatedLocations == null ? void 0 : delegatedLocations.length) > 0) {
|
|
1770
|
+
locations.push(...delegatedLocations);
|
|
1771
|
+
}
|
|
1693
1772
|
const backupData = await this.apiClient.markKeySharesAsBackedUp({
|
|
1694
1773
|
walletId: this.walletMap[accountAddress].walletId,
|
|
1695
1774
|
locations,
|
|
@@ -1724,110 +1803,6 @@ class DynamicWalletClient {
|
|
|
1724
1803
|
throw error;
|
|
1725
1804
|
}
|
|
1726
1805
|
}
|
|
1727
|
-
async storeEncryptedBackupByDelegatedWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId }) {
|
|
1728
|
-
const dynamicRequestId = uuid.v4();
|
|
1729
|
-
try {
|
|
1730
|
-
var _this_walletMap_accountAddress, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_EXTERNAL, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups, _this_walletMap_accountAddress_clientKeySharesBackupInfo, _this_walletMap_accountAddress1;
|
|
1731
|
-
const keySharesToBackup = clientKeyShares != null ? clientKeyShares : await this.getClientKeySharesFromLocalStorage({
|
|
1732
|
-
accountAddress
|
|
1733
|
-
});
|
|
1734
|
-
if (!((_this_walletMap_accountAddress = this.walletMap[accountAddress]) == null ? void 0 : _this_walletMap_accountAddress.walletId)) {
|
|
1735
|
-
const error = new Error(`WalletId not found for accountAddress ${accountAddress}`);
|
|
1736
|
-
logError({
|
|
1737
|
-
message: 'Error in storeEncryptedBackupByWallet, wallet or walletId not found from the wallet map',
|
|
1738
|
-
error,
|
|
1739
|
-
context: {
|
|
1740
|
-
accountAddress,
|
|
1741
|
-
walletMap: this.walletMap
|
|
1742
|
-
}
|
|
1743
|
-
});
|
|
1744
|
-
throw error;
|
|
1745
|
-
}
|
|
1746
|
-
let dynamicClientKeyShares = [];
|
|
1747
|
-
let delegatedKeyShares = [];
|
|
1748
|
-
const encryptedKeyShares = await Promise.all(keySharesToBackup.map((keyShare)=>this.encryptKeyShare({
|
|
1749
|
-
keyShare,
|
|
1750
|
-
password
|
|
1751
|
-
})));
|
|
1752
|
-
const hasExistingDelegatedBackup = ((_this_walletMap_accountAddress1 = this.walletMap[accountAddress]) == null ? void 0 : (_this_walletMap_accountAddress_clientKeySharesBackupInfo = _this_walletMap_accountAddress1.clientKeySharesBackupInfo) == null ? void 0 : (_this_walletMap_accountAddress_clientKeySharesBackupInfo_backups = _this_walletMap_accountAddress_clientKeySharesBackupInfo.backups) == null ? void 0 : (_this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_EXTERNAL = _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups[core.BackupLocation.EXTERNAL]) == null ? void 0 : _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_EXTERNAL.length) > 0;
|
|
1753
|
-
const shouldBackupToDelegated = hasExistingDelegatedBackup || keySharesToBackup.length >= 2;
|
|
1754
|
-
if (shouldBackupToDelegated) {
|
|
1755
|
-
// For 2 shares: 1 to backend, 1 to delegated
|
|
1756
|
-
// For 3+ shares: N-1 to backend, 1 to delegated
|
|
1757
|
-
dynamicClientKeyShares = encryptedKeyShares.slice(0, -core.DELEGATED_SHARE_COUNT);
|
|
1758
|
-
delegatedKeyShares = encryptedKeyShares.slice(-core.DELEGATED_SHARE_COUNT);
|
|
1759
|
-
} else {
|
|
1760
|
-
dynamicClientKeyShares = encryptedKeyShares;
|
|
1761
|
-
}
|
|
1762
|
-
const data = await this.apiClient.storeEncryptedBackupByWallet({
|
|
1763
|
-
walletId: this.walletMap[accountAddress].walletId,
|
|
1764
|
-
encryptedKeyShares: dynamicClientKeyShares,
|
|
1765
|
-
passwordEncrypted: Boolean(password) && password !== this.environmentId,
|
|
1766
|
-
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
1767
|
-
signedSessionId,
|
|
1768
|
-
authMode: this.authMode,
|
|
1769
|
-
requiresSignedSessionId: this.requiresSignedSessionId(),
|
|
1770
|
-
dynamicRequestId
|
|
1771
|
-
});
|
|
1772
|
-
await this.apiClient.markKeySharesAsBackedUp({
|
|
1773
|
-
walletId: this.walletMap[accountAddress].walletId,
|
|
1774
|
-
dynamicRequestId,
|
|
1775
|
-
locations: [
|
|
1776
|
-
{
|
|
1777
|
-
location: core.BackupLocation.DYNAMIC
|
|
1778
|
-
}
|
|
1779
|
-
]
|
|
1780
|
-
});
|
|
1781
|
-
if (delegatedKeyShares.length > 0) {
|
|
1782
|
-
const wallet = this.walletMap[accountAddress];
|
|
1783
|
-
var _this_userId;
|
|
1784
|
-
const delegatedKeyShareIds = await this.sendKeySharesToDelegatedAccess({
|
|
1785
|
-
accountAddress,
|
|
1786
|
-
chainName: wallet.chainName,
|
|
1787
|
-
environmentId: this.environmentId,
|
|
1788
|
-
walletId: wallet.walletId,
|
|
1789
|
-
userId: (_this_userId = this.userId) != null ? _this_userId : '',
|
|
1790
|
-
delegatedKeyShares: delegatedKeyShares
|
|
1791
|
-
});
|
|
1792
|
-
data.keyShares.push({
|
|
1793
|
-
backupLocation: core.BackupLocation.EXTERNAL,
|
|
1794
|
-
id: delegatedKeyShareIds
|
|
1795
|
-
});
|
|
1796
|
-
//todo: combine with user share service backup once other branch is merged
|
|
1797
|
-
await this.apiClient.markKeySharesAsBackedUp({
|
|
1798
|
-
walletId: this.walletMap[accountAddress].walletId,
|
|
1799
|
-
locations: [
|
|
1800
|
-
{
|
|
1801
|
-
location: core.BackupLocation.EXTERNAL
|
|
1802
|
-
}
|
|
1803
|
-
],
|
|
1804
|
-
dynamicRequestId
|
|
1805
|
-
});
|
|
1806
|
-
}
|
|
1807
|
-
const updatedBackupInfo = getClientKeyShareBackupInfo({
|
|
1808
|
-
walletProperties: {
|
|
1809
|
-
derivationPath: this.walletMap[accountAddress].derivationPath,
|
|
1810
|
-
keyShares: data.keyShares,
|
|
1811
|
-
thresholdSignatureScheme: this.walletMap[accountAddress].thresholdSignatureScheme
|
|
1812
|
-
}
|
|
1813
|
-
});
|
|
1814
|
-
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
1815
|
-
clientKeySharesBackupInfo: updatedBackupInfo
|
|
1816
|
-
});
|
|
1817
|
-
await this.storage.setItem(this.storageKey, JSON.stringify(this.walletMap));
|
|
1818
|
-
return data;
|
|
1819
|
-
} catch (error) {
|
|
1820
|
-
logError({
|
|
1821
|
-
message: 'Error in storeEncryptedBackupByDelegatedWallet',
|
|
1822
|
-
error: error,
|
|
1823
|
-
context: {
|
|
1824
|
-
accountAddress,
|
|
1825
|
-
dynamicRequestId
|
|
1826
|
-
}
|
|
1827
|
-
});
|
|
1828
|
-
throw error;
|
|
1829
|
-
}
|
|
1830
|
-
}
|
|
1831
1806
|
async storeEncryptedBackupByWalletWithRetry({ accountAddress, clientKeyShares, password, signedSessionId }) {
|
|
1832
1807
|
await retryPromise(()=>this.storeEncryptedBackupByWallet({
|
|
1833
1808
|
accountAddress,
|
|
@@ -2495,7 +2470,6 @@ class DynamicWalletClient {
|
|
|
2495
2470
|
sdkVersion }){
|
|
2496
2471
|
this.userId = undefined;
|
|
2497
2472
|
this.sessionId = undefined;
|
|
2498
|
-
this.delegatedAccessEndpoint = undefined;
|
|
2499
2473
|
this.initializePromise = null;
|
|
2500
2474
|
this.logger = logger;
|
|
2501
2475
|
this.walletMap = {} // todo: store in session storage
|
package/index.esm.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SigningAlgorithm, MPC_RELAY_PROD_API_URL, getMPCChainConfig, AuthMode, BackupLocation, parseNamespacedVersion, getClientThreshold, MPC_CONFIG, getTSSConfig, WalletOperation, getReshareConfig, FEATURE_FLAGS, ThresholdSignatureScheme,
|
|
1
|
+
import { SigningAlgorithm, MPC_RELAY_PROD_API_URL, getMPCChainConfig, AuthMode, BackupLocation, parseNamespacedVersion, getClientThreshold, MPC_CONFIG, getTSSConfig, WalletOperation, getReshareConfig, FEATURE_FLAGS, ThresholdSignatureScheme, verifiedCredentialNameToChainEnum, DynamicApiClient, getEnvironmentFromUrl, IFRAME_DOMAIN_MAP } from '@dynamic-labs-wallet/core';
|
|
2
2
|
export * from '@dynamic-labs-wallet/core';
|
|
3
3
|
import { BIP340, ExportableEd25519, Ecdsa, MessageHash, EcdsaKeygenResult, ExportableEd25519KeygenResult, BIP340KeygenResult } from './internal/web';
|
|
4
4
|
export { BIP340, BIP340InitKeygenResult, BIP340KeygenResult, Ecdsa, EcdsaInitKeygenResult, EcdsaKeygenResult, EcdsaPublicKey, EcdsaSignature, Ed25519, Ed25519InitKeygenResult, Ed25519KeygenResult, MessageHash } from './internal/web';
|
|
@@ -476,7 +476,8 @@ const getClientKeyShareBackupInfo = (params)=>{
|
|
|
476
476
|
[BackupLocation.GOOGLE_DRIVE]: [],
|
|
477
477
|
[BackupLocation.ICLOUD]: [],
|
|
478
478
|
[BackupLocation.USER]: [],
|
|
479
|
-
[BackupLocation.EXTERNAL]: []
|
|
479
|
+
[BackupLocation.EXTERNAL]: [],
|
|
480
|
+
[BackupLocation.DELEGATED]: []
|
|
480
481
|
};
|
|
481
482
|
if (!(params == null ? void 0 : (_params_walletProperties = params.walletProperties) == null ? void 0 : _params_walletProperties.keyShares)) {
|
|
482
483
|
return {
|
|
@@ -721,6 +722,94 @@ const localStorageWriteTest = {
|
|
|
721
722
|
}
|
|
722
723
|
});
|
|
723
724
|
|
|
725
|
+
/** Algorithm label for the new hybrid encryption standard */ const ALG_LABEL_RSA = 'HYBRID-RSA-AES-256';
|
|
726
|
+
/**
|
|
727
|
+
* Convert base64 to base64url encoding
|
|
728
|
+
*/ const toBase64Url = (buffer)=>{
|
|
729
|
+
const base64 = Buffer.from(buffer).toString('base64');
|
|
730
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '');
|
|
731
|
+
};
|
|
732
|
+
/**
|
|
733
|
+
* Convert ArrayBuffer to base64url
|
|
734
|
+
*/ const arrayBufferToBase64Url = (buffer)=>{
|
|
735
|
+
return toBase64Url(buffer);
|
|
736
|
+
};
|
|
737
|
+
/**
|
|
738
|
+
* Import RSA public key from PEM format
|
|
739
|
+
*/ const importRSAPublicKey = async (publicKeyPem)=>{
|
|
740
|
+
// Remove PEM headers and decode base64
|
|
741
|
+
const pemHeader = '-----BEGIN PUBLIC KEY-----';
|
|
742
|
+
const pemFooter = '-----END PUBLIC KEY-----';
|
|
743
|
+
const pemContents = publicKeyPem.replace(pemHeader, '').replace(pemFooter, '').replace(/\s/g, '');
|
|
744
|
+
const binaryDer = Buffer.from(pemContents, 'base64').toString('binary');
|
|
745
|
+
const keyData = new Uint8Array(binaryDer.length);
|
|
746
|
+
for(let i = 0; i < binaryDer.length; i++){
|
|
747
|
+
keyData[i] = binaryDer.charCodeAt(i);
|
|
748
|
+
}
|
|
749
|
+
return await crypto.subtle.importKey('spki', keyData, {
|
|
750
|
+
name: 'RSA-OAEP',
|
|
751
|
+
hash: 'SHA-256'
|
|
752
|
+
}, false, [
|
|
753
|
+
'encrypt'
|
|
754
|
+
]);
|
|
755
|
+
};
|
|
756
|
+
/**
|
|
757
|
+
* Creates the encoded envelope bytes from the encrypted data components
|
|
758
|
+
*/ const createEncodedEnvelopeBytes = (iv, ciphertext, authTag, encryptedAesKey)=>{
|
|
759
|
+
const envelopeData = {
|
|
760
|
+
algorithm: ALG_LABEL_RSA,
|
|
761
|
+
iv: arrayBufferToBase64Url(iv.buffer),
|
|
762
|
+
encryptedData: arrayBufferToBase64Url(ciphertext.buffer),
|
|
763
|
+
authTag: arrayBufferToBase64Url(authTag.buffer),
|
|
764
|
+
encryptedKey: arrayBufferToBase64Url(encryptedAesKey)
|
|
765
|
+
};
|
|
766
|
+
return Buffer.from(new TextEncoder().encode(JSON.stringify(envelopeData))).toString('base64');
|
|
767
|
+
};
|
|
768
|
+
/**
|
|
769
|
+
* Encrypts data using HYBRID-RSA-AES-256 encryption scheme with Web Crypto API.
|
|
770
|
+
* 1. Generate random AES-256 key
|
|
771
|
+
* 2. Encrypt AES key with RSA public key
|
|
772
|
+
* 3. Encrypt data with AES-256-GCM
|
|
773
|
+
*/ const encryptDelegatedKeyShare = async (data, publicKeyPem)=>{
|
|
774
|
+
try {
|
|
775
|
+
// Step 1: Generate a random AES-256 key and 16-byte IV
|
|
776
|
+
const aesKey = await crypto.subtle.generateKey({
|
|
777
|
+
name: 'AES-GCM',
|
|
778
|
+
length: 256
|
|
779
|
+
}, true, [
|
|
780
|
+
'encrypt'
|
|
781
|
+
]);
|
|
782
|
+
const iv = crypto.getRandomValues(new Uint8Array(16)); // 128-bit IV for GCM
|
|
783
|
+
// Step 2: Encrypt the data with AES-256-GCM
|
|
784
|
+
const plaintext = new TextEncoder().encode(data);
|
|
785
|
+
const encryptedData = await crypto.subtle.encrypt({
|
|
786
|
+
name: 'AES-GCM',
|
|
787
|
+
iv: iv
|
|
788
|
+
}, aesKey, plaintext);
|
|
789
|
+
// Extract the auth tag from the encrypted data (last 16 bytes)
|
|
790
|
+
const encryptedDataArray = new Uint8Array(encryptedData);
|
|
791
|
+
const authTag = encryptedDataArray.slice(-16);
|
|
792
|
+
const ciphertext = encryptedDataArray.slice(0, -16);
|
|
793
|
+
// Step 3: Encrypt the AES key with RSA public key
|
|
794
|
+
const rsaPublicKey = await importRSAPublicKey(publicKeyPem);
|
|
795
|
+
// Export the AES key to encrypt it
|
|
796
|
+
const aesKeyData = await crypto.subtle.exportKey('raw', aesKey);
|
|
797
|
+
const encryptedAesKey = await crypto.subtle.encrypt({
|
|
798
|
+
name: 'RSA-OAEP'
|
|
799
|
+
}, rsaPublicKey, aesKeyData);
|
|
800
|
+
return {
|
|
801
|
+
algorithm: ALG_LABEL_RSA,
|
|
802
|
+
iv: arrayBufferToBase64Url(iv.buffer),
|
|
803
|
+
encryptedData: arrayBufferToBase64Url(ciphertext.buffer),
|
|
804
|
+
authTag: arrayBufferToBase64Url(authTag.buffer),
|
|
805
|
+
encryptedKey: arrayBufferToBase64Url(encryptedAesKey),
|
|
806
|
+
encodedEnvelopeBytes: createEncodedEnvelopeBytes(iv, ciphertext, authTag, encryptedAesKey)
|
|
807
|
+
};
|
|
808
|
+
} catch (error) {
|
|
809
|
+
throw new Error(`Encryption failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
810
|
+
}
|
|
811
|
+
};
|
|
812
|
+
|
|
724
813
|
class DynamicWalletClient {
|
|
725
814
|
getAuthMode() {
|
|
726
815
|
return this.authMode;
|
|
@@ -1257,6 +1346,7 @@ class DynamicWalletClient {
|
|
|
1257
1346
|
async reshare({ chainName, accountAddress, oldThresholdSignatureScheme, newThresholdSignatureScheme, password = undefined, signedSessionId, backupToGoogleDrive = false, delegateToProjectEnvironment = false, mfaToken }) {
|
|
1258
1347
|
const dynamicRequestId = v4();
|
|
1259
1348
|
try {
|
|
1349
|
+
var _publicKey_key, _publicKey_key1;
|
|
1260
1350
|
await this.verifyPassword({
|
|
1261
1351
|
accountAddress,
|
|
1262
1352
|
password,
|
|
@@ -1308,35 +1398,54 @@ class DynamicWalletClient {
|
|
|
1308
1398
|
chainName,
|
|
1309
1399
|
baseRelayUrl: this.baseMPCRelayApiUrl
|
|
1310
1400
|
});
|
|
1311
|
-
const
|
|
1312
|
-
|
|
1313
|
-
|
|
1401
|
+
const existingResharePromises = existingClientKeyShares.map((keyShare)=>mpcSigner.reshareRemainingParty(roomId, newMpcConfig.threshold, keyShare, allPartyKeygenIds));
|
|
1402
|
+
const newResharePromises = newClientInitKeygenResults.map((keygenResult)=>mpcSigner.reshareNewParty(roomId, oldMpcConfig.threshold, newMpcConfig.threshold, keygenResult, allPartyKeygenIds));
|
|
1403
|
+
// Run both share parties in parallel by group
|
|
1404
|
+
const [existingReshareResults, newReshareResults] = await Promise.all([
|
|
1405
|
+
Promise.all(existingResharePromises),
|
|
1406
|
+
Promise.all(newResharePromises)
|
|
1314
1407
|
]);
|
|
1408
|
+
const clientKeyshares = delegateToProjectEnvironment ? [
|
|
1409
|
+
...existingReshareResults
|
|
1410
|
+
] : [
|
|
1411
|
+
...existingReshareResults,
|
|
1412
|
+
...newReshareResults
|
|
1413
|
+
];
|
|
1315
1414
|
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
1316
1415
|
thresholdSignatureScheme: newThresholdSignatureScheme
|
|
1317
1416
|
});
|
|
1318
1417
|
await this.setClientKeySharesToLocalStorage({
|
|
1319
1418
|
accountAddress,
|
|
1320
|
-
clientKeyShares:
|
|
1419
|
+
clientKeyShares: clientKeyshares,
|
|
1321
1420
|
overwriteOrMerge: 'overwrite'
|
|
1322
1421
|
});
|
|
1323
|
-
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1422
|
+
await this.storeEncryptedBackupByWallet({
|
|
1423
|
+
accountAddress,
|
|
1424
|
+
password,
|
|
1425
|
+
signedSessionId,
|
|
1426
|
+
backupToGoogleDrive,
|
|
1427
|
+
delegatedLocations: newReshareResults.map(()=>({
|
|
1428
|
+
location: BackupLocation.DELEGATED
|
|
1429
|
+
}))
|
|
1430
|
+
});
|
|
1431
|
+
const publicKey = await this.apiClient.getDelegatedEncryptionKey({
|
|
1432
|
+
environmentId: this.environmentId
|
|
1433
|
+
});
|
|
1434
|
+
if (!(publicKey == null ? void 0 : (_publicKey_key = publicKey.key) == null ? void 0 : _publicKey_key.publicKeyPemB64)) {
|
|
1435
|
+
throw new Error('Public key not found');
|
|
1336
1436
|
}
|
|
1437
|
+
const encryptedDelegatedKeyShareEnvelope = await encryptDelegatedKeyShare(JSON.stringify(clientKeyshares[0]), publicKey == null ? void 0 : (_publicKey_key1 = publicKey.key) == null ? void 0 : _publicKey_key1.publicKeyPemB64);
|
|
1438
|
+
await this.apiClient.publishDelegatedKeyShare({
|
|
1439
|
+
walletId: this.walletMap[accountAddress].walletId,
|
|
1440
|
+
encryptedKeyShare: encryptedDelegatedKeyShareEnvelope == null ? void 0 : encryptedDelegatedKeyShareEnvelope.encodedEnvelopeBytes,
|
|
1441
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
1442
|
+
signedSessionId,
|
|
1443
|
+
requiresSignedSessionId: this.requiresSignedSessionId(),
|
|
1444
|
+
dynamicRequestId
|
|
1445
|
+
});
|
|
1337
1446
|
} catch (error) {
|
|
1338
1447
|
logError({
|
|
1339
|
-
message: 'Error in reshare',
|
|
1448
|
+
message: 'Error in reshare, resetting wallet to previous state',
|
|
1340
1449
|
error: error,
|
|
1341
1450
|
context: {
|
|
1342
1451
|
accountAddress,
|
|
@@ -1347,36 +1456,14 @@ class DynamicWalletClient {
|
|
|
1347
1456
|
dynamicRequestId
|
|
1348
1457
|
}
|
|
1349
1458
|
});
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
async sendKeySharesToDelegatedAccess({ accountAddress, chainName, delegatedKeyShares, environmentId, userId, walletId }) {
|
|
1354
|
-
try {
|
|
1355
|
-
if (!this.delegatedAccessEndpoint) {
|
|
1356
|
-
throw new Error('Cannot send key shares to delegated access because delegated access endpoint is not set');
|
|
1357
|
-
}
|
|
1358
|
-
const delegatedAccessEndpoint = this.delegatedAccessEndpoint;
|
|
1359
|
-
const response = await fetch(delegatedAccessEndpoint, {
|
|
1360
|
-
method: 'POST',
|
|
1361
|
-
body: JSON.stringify({
|
|
1362
|
-
chainName,
|
|
1363
|
-
accountAddress,
|
|
1364
|
-
delegatedKeyShares,
|
|
1365
|
-
environmentId,
|
|
1366
|
-
userId,
|
|
1367
|
-
walletId
|
|
1368
|
-
})
|
|
1459
|
+
// reset user wallet when reshare fails, this would allow the client to recover wallets from an active state
|
|
1460
|
+
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
1461
|
+
thresholdSignatureScheme: oldThresholdSignatureScheme
|
|
1369
1462
|
});
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
message: 'Error in sendKeySharesToDelegatedAccess',
|
|
1375
|
-
error: error,
|
|
1376
|
-
context: {
|
|
1377
|
-
accountAddress,
|
|
1378
|
-
chainName
|
|
1379
|
-
}
|
|
1463
|
+
await this.setClientKeySharesToLocalStorage({
|
|
1464
|
+
accountAddress,
|
|
1465
|
+
clientKeyShares: [],
|
|
1466
|
+
overwriteOrMerge: 'overwrite'
|
|
1380
1467
|
});
|
|
1381
1468
|
throw error;
|
|
1382
1469
|
}
|
|
@@ -1387,12 +1474,6 @@ class DynamicWalletClient {
|
|
|
1387
1474
|
if (!delegateToProjectEnvironment) {
|
|
1388
1475
|
throw new Error('Delegation is not allowed for this project environment');
|
|
1389
1476
|
}
|
|
1390
|
-
const environmentSettings = await this.apiClient.getEnvironmentSettings();
|
|
1391
|
-
const delegatedAccessEndpoint = environmentSettings.sdk.waas.delegatedAccessEndpoint;
|
|
1392
|
-
if (!delegatedAccessEndpoint) {
|
|
1393
|
-
throw new Error('Cannot delegate key shares because verified access endpoint is not set in the environment settings');
|
|
1394
|
-
}
|
|
1395
|
-
this.delegatedAccessEndpoint = delegatedAccessEndpoint;
|
|
1396
1477
|
const wallet = await this.getWallet({
|
|
1397
1478
|
accountAddress,
|
|
1398
1479
|
walletOperation: WalletOperation.REACH_ALL_PARTIES,
|
|
@@ -1403,25 +1484,20 @@ class DynamicWalletClient {
|
|
|
1403
1484
|
throw new Error('Delegation is not allowed for SUI');
|
|
1404
1485
|
}
|
|
1405
1486
|
const currentThresholdSignatureScheme = this.walletMap[accountAddress].thresholdSignatureScheme;
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
const delegatedKeyShares = backupInfo.backups[BackupLocation.EXTERNAL] || [];
|
|
1421
|
-
return delegatedKeyShares;
|
|
1422
|
-
} else {
|
|
1423
|
-
throw new Error('Delegation is not allowed for this threshold signature scheme');
|
|
1424
|
-
}
|
|
1487
|
+
await this.reshare({
|
|
1488
|
+
chainName: this.walletMap[accountAddress].chainName,
|
|
1489
|
+
accountAddress,
|
|
1490
|
+
oldThresholdSignatureScheme: currentThresholdSignatureScheme,
|
|
1491
|
+
newThresholdSignatureScheme: ThresholdSignatureScheme.TWO_OF_THREE,
|
|
1492
|
+
password,
|
|
1493
|
+
signedSessionId,
|
|
1494
|
+
backupToGoogleDrive: false,
|
|
1495
|
+
delegateToProjectEnvironment: true,
|
|
1496
|
+
mfaToken
|
|
1497
|
+
});
|
|
1498
|
+
const backupInfo = this.walletMap[accountAddress].clientKeySharesBackupInfo;
|
|
1499
|
+
const delegatedKeyShares = backupInfo.backups[BackupLocation.EXTERNAL] || [];
|
|
1500
|
+
return delegatedKeyShares;
|
|
1425
1501
|
} catch (error) {
|
|
1426
1502
|
logError({
|
|
1427
1503
|
message: 'Error in delegateKeyShares',
|
|
@@ -1623,7 +1699,7 @@ class DynamicWalletClient {
|
|
|
1623
1699
|
* @param params.signedSessionId - Optional signed session ID for authentication
|
|
1624
1700
|
* @param params.backupToGoogleDrive - Whether to backup to Google Drive (defaults to false)
|
|
1625
1701
|
* @returns Promise with backup metadata including share locations and IDs
|
|
1626
|
-
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, backupToGoogleDrive = false }) {
|
|
1702
|
+
*/ async storeEncryptedBackupByWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId, backupToGoogleDrive = false, delegatedLocations = [] }) {
|
|
1627
1703
|
const dynamicRequestId = v4();
|
|
1628
1704
|
try {
|
|
1629
1705
|
var _this_walletMap_accountAddress, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_GOOGLE_DRIVE, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups, _this_walletMap_accountAddress_clientKeySharesBackupInfo, _this_walletMap_accountAddress1;
|
|
@@ -1691,6 +1767,9 @@ class DynamicWalletClient {
|
|
|
1691
1767
|
location: BackupLocation.GOOGLE_DRIVE
|
|
1692
1768
|
});
|
|
1693
1769
|
}
|
|
1770
|
+
if ((delegatedLocations == null ? void 0 : delegatedLocations.length) > 0) {
|
|
1771
|
+
locations.push(...delegatedLocations);
|
|
1772
|
+
}
|
|
1694
1773
|
const backupData = await this.apiClient.markKeySharesAsBackedUp({
|
|
1695
1774
|
walletId: this.walletMap[accountAddress].walletId,
|
|
1696
1775
|
locations,
|
|
@@ -1725,110 +1804,6 @@ class DynamicWalletClient {
|
|
|
1725
1804
|
throw error;
|
|
1726
1805
|
}
|
|
1727
1806
|
}
|
|
1728
|
-
async storeEncryptedBackupByDelegatedWallet({ accountAddress, clientKeyShares = undefined, password = undefined, signedSessionId }) {
|
|
1729
|
-
const dynamicRequestId = v4();
|
|
1730
|
-
try {
|
|
1731
|
-
var _this_walletMap_accountAddress, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_EXTERNAL, _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups, _this_walletMap_accountAddress_clientKeySharesBackupInfo, _this_walletMap_accountAddress1;
|
|
1732
|
-
const keySharesToBackup = clientKeyShares != null ? clientKeyShares : await this.getClientKeySharesFromLocalStorage({
|
|
1733
|
-
accountAddress
|
|
1734
|
-
});
|
|
1735
|
-
if (!((_this_walletMap_accountAddress = this.walletMap[accountAddress]) == null ? void 0 : _this_walletMap_accountAddress.walletId)) {
|
|
1736
|
-
const error = new Error(`WalletId not found for accountAddress ${accountAddress}`);
|
|
1737
|
-
logError({
|
|
1738
|
-
message: 'Error in storeEncryptedBackupByWallet, wallet or walletId not found from the wallet map',
|
|
1739
|
-
error,
|
|
1740
|
-
context: {
|
|
1741
|
-
accountAddress,
|
|
1742
|
-
walletMap: this.walletMap
|
|
1743
|
-
}
|
|
1744
|
-
});
|
|
1745
|
-
throw error;
|
|
1746
|
-
}
|
|
1747
|
-
let dynamicClientKeyShares = [];
|
|
1748
|
-
let delegatedKeyShares = [];
|
|
1749
|
-
const encryptedKeyShares = await Promise.all(keySharesToBackup.map((keyShare)=>this.encryptKeyShare({
|
|
1750
|
-
keyShare,
|
|
1751
|
-
password
|
|
1752
|
-
})));
|
|
1753
|
-
const hasExistingDelegatedBackup = ((_this_walletMap_accountAddress1 = this.walletMap[accountAddress]) == null ? void 0 : (_this_walletMap_accountAddress_clientKeySharesBackupInfo = _this_walletMap_accountAddress1.clientKeySharesBackupInfo) == null ? void 0 : (_this_walletMap_accountAddress_clientKeySharesBackupInfo_backups = _this_walletMap_accountAddress_clientKeySharesBackupInfo.backups) == null ? void 0 : (_this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_EXTERNAL = _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups[BackupLocation.EXTERNAL]) == null ? void 0 : _this_walletMap_accountAddress_clientKeySharesBackupInfo_backups_BackupLocation_EXTERNAL.length) > 0;
|
|
1754
|
-
const shouldBackupToDelegated = hasExistingDelegatedBackup || keySharesToBackup.length >= 2;
|
|
1755
|
-
if (shouldBackupToDelegated) {
|
|
1756
|
-
// For 2 shares: 1 to backend, 1 to delegated
|
|
1757
|
-
// For 3+ shares: N-1 to backend, 1 to delegated
|
|
1758
|
-
dynamicClientKeyShares = encryptedKeyShares.slice(0, -DELEGATED_SHARE_COUNT);
|
|
1759
|
-
delegatedKeyShares = encryptedKeyShares.slice(-DELEGATED_SHARE_COUNT);
|
|
1760
|
-
} else {
|
|
1761
|
-
dynamicClientKeyShares = encryptedKeyShares;
|
|
1762
|
-
}
|
|
1763
|
-
const data = await this.apiClient.storeEncryptedBackupByWallet({
|
|
1764
|
-
walletId: this.walletMap[accountAddress].walletId,
|
|
1765
|
-
encryptedKeyShares: dynamicClientKeyShares,
|
|
1766
|
-
passwordEncrypted: Boolean(password) && password !== this.environmentId,
|
|
1767
|
-
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
1768
|
-
signedSessionId,
|
|
1769
|
-
authMode: this.authMode,
|
|
1770
|
-
requiresSignedSessionId: this.requiresSignedSessionId(),
|
|
1771
|
-
dynamicRequestId
|
|
1772
|
-
});
|
|
1773
|
-
await this.apiClient.markKeySharesAsBackedUp({
|
|
1774
|
-
walletId: this.walletMap[accountAddress].walletId,
|
|
1775
|
-
dynamicRequestId,
|
|
1776
|
-
locations: [
|
|
1777
|
-
{
|
|
1778
|
-
location: BackupLocation.DYNAMIC
|
|
1779
|
-
}
|
|
1780
|
-
]
|
|
1781
|
-
});
|
|
1782
|
-
if (delegatedKeyShares.length > 0) {
|
|
1783
|
-
const wallet = this.walletMap[accountAddress];
|
|
1784
|
-
var _this_userId;
|
|
1785
|
-
const delegatedKeyShareIds = await this.sendKeySharesToDelegatedAccess({
|
|
1786
|
-
accountAddress,
|
|
1787
|
-
chainName: wallet.chainName,
|
|
1788
|
-
environmentId: this.environmentId,
|
|
1789
|
-
walletId: wallet.walletId,
|
|
1790
|
-
userId: (_this_userId = this.userId) != null ? _this_userId : '',
|
|
1791
|
-
delegatedKeyShares: delegatedKeyShares
|
|
1792
|
-
});
|
|
1793
|
-
data.keyShares.push({
|
|
1794
|
-
backupLocation: BackupLocation.EXTERNAL,
|
|
1795
|
-
id: delegatedKeyShareIds
|
|
1796
|
-
});
|
|
1797
|
-
//todo: combine with user share service backup once other branch is merged
|
|
1798
|
-
await this.apiClient.markKeySharesAsBackedUp({
|
|
1799
|
-
walletId: this.walletMap[accountAddress].walletId,
|
|
1800
|
-
locations: [
|
|
1801
|
-
{
|
|
1802
|
-
location: BackupLocation.EXTERNAL
|
|
1803
|
-
}
|
|
1804
|
-
],
|
|
1805
|
-
dynamicRequestId
|
|
1806
|
-
});
|
|
1807
|
-
}
|
|
1808
|
-
const updatedBackupInfo = getClientKeyShareBackupInfo({
|
|
1809
|
-
walletProperties: {
|
|
1810
|
-
derivationPath: this.walletMap[accountAddress].derivationPath,
|
|
1811
|
-
keyShares: data.keyShares,
|
|
1812
|
-
thresholdSignatureScheme: this.walletMap[accountAddress].thresholdSignatureScheme
|
|
1813
|
-
}
|
|
1814
|
-
});
|
|
1815
|
-
this.walletMap[accountAddress] = _extends({}, this.walletMap[accountAddress], {
|
|
1816
|
-
clientKeySharesBackupInfo: updatedBackupInfo
|
|
1817
|
-
});
|
|
1818
|
-
await this.storage.setItem(this.storageKey, JSON.stringify(this.walletMap));
|
|
1819
|
-
return data;
|
|
1820
|
-
} catch (error) {
|
|
1821
|
-
logError({
|
|
1822
|
-
message: 'Error in storeEncryptedBackupByDelegatedWallet',
|
|
1823
|
-
error: error,
|
|
1824
|
-
context: {
|
|
1825
|
-
accountAddress,
|
|
1826
|
-
dynamicRequestId
|
|
1827
|
-
}
|
|
1828
|
-
});
|
|
1829
|
-
throw error;
|
|
1830
|
-
}
|
|
1831
|
-
}
|
|
1832
1807
|
async storeEncryptedBackupByWalletWithRetry({ accountAddress, clientKeyShares, password, signedSessionId }) {
|
|
1833
1808
|
await retryPromise(()=>this.storeEncryptedBackupByWallet({
|
|
1834
1809
|
accountAddress,
|
|
@@ -2496,7 +2471,6 @@ class DynamicWalletClient {
|
|
|
2496
2471
|
sdkVersion }){
|
|
2497
2472
|
this.userId = undefined;
|
|
2498
2473
|
this.sessionId = undefined;
|
|
2499
|
-
this.delegatedAccessEndpoint = undefined;
|
|
2500
2474
|
this.initializePromise = null;
|
|
2501
2475
|
this.logger = logger;
|
|
2502
2476
|
this.walletMap = {} // todo: store in session storage
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/browser",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.166",
|
|
4
4
|
"license": "Licensed under the Dynamic Labs, Inc. Terms Of Service (https://www.dynamic.xyz/terms-conditions)",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dynamic-labs-wallet/core": "0.0.
|
|
7
|
+
"@dynamic-labs-wallet/core": "0.0.166",
|
|
8
8
|
"@dynamic-labs/logger": "^4.25.3",
|
|
9
9
|
"@dynamic-labs/sdk-api-core": "^0.0.764",
|
|
10
10
|
"argon2id": "1.0.1",
|
package/src/client.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AuthMode, BackupLocation, type BackupLocationWithExternalKeyShareId, DynamicApiClient, type DynamicWalletClientProps, FeatureFlags, type InitializeResult, type KeyShareBackupInfo, ThresholdSignatureScheme, WalletOperation } from '@dynamic-labs-wallet/core';
|
|
2
|
-
import { BIP340KeygenResult, EcdsaKeygenResult, type EcdsaPublicKey, type EcdsaSignature, ExportableEd25519KeygenResult } from '
|
|
2
|
+
import { BIP340KeygenResult, EcdsaKeygenResult, type EcdsaPublicKey, type EcdsaSignature, ExportableEd25519KeygenResult } from '../internal/web';
|
|
3
3
|
import type { SignMessageContext } from '@dynamic-labs/sdk-api-core';
|
|
4
4
|
import type { ClientInitKeygenResult, ClientKeyShare } from './mpc/types';
|
|
5
5
|
import { type SupportedStorage } from './services/localStorage';
|
|
@@ -10,7 +10,6 @@ export declare class DynamicWalletClient {
|
|
|
10
10
|
debug: boolean;
|
|
11
11
|
protected userId: string | undefined;
|
|
12
12
|
protected sessionId: string | undefined;
|
|
13
|
-
protected delegatedAccessEndpoint: string | undefined;
|
|
14
13
|
protected initializePromise: Promise<InitializeResult> | null;
|
|
15
14
|
protected logger: import("@dynamic-labs/logger").Logger;
|
|
16
15
|
protected apiClient: DynamicApiClient;
|
|
@@ -163,14 +162,6 @@ export declare class DynamicWalletClient {
|
|
|
163
162
|
delegateToProjectEnvironment?: boolean;
|
|
164
163
|
mfaToken?: string;
|
|
165
164
|
}): Promise<void>;
|
|
166
|
-
sendKeySharesToDelegatedAccess({ accountAddress, chainName, delegatedKeyShares, environmentId, userId, walletId, }: {
|
|
167
|
-
accountAddress: string;
|
|
168
|
-
chainName: string;
|
|
169
|
-
delegatedKeyShares: string[];
|
|
170
|
-
environmentId: string;
|
|
171
|
-
userId: string;
|
|
172
|
-
walletId: string;
|
|
173
|
-
}): Promise<any>;
|
|
174
165
|
delegateKeyShares({ accountAddress, password, signedSessionId, mfaToken, }: {
|
|
175
166
|
accountAddress: string;
|
|
176
167
|
password?: string;
|
|
@@ -239,18 +230,13 @@ export declare class DynamicWalletClient {
|
|
|
239
230
|
* @param params.backupToGoogleDrive - Whether to backup to Google Drive (defaults to false)
|
|
240
231
|
* @returns Promise with backup metadata including share locations and IDs
|
|
241
232
|
*/
|
|
242
|
-
storeEncryptedBackupByWallet({ accountAddress, clientKeyShares, password, signedSessionId, backupToGoogleDrive, }: {
|
|
233
|
+
storeEncryptedBackupByWallet({ accountAddress, clientKeyShares, password, signedSessionId, backupToGoogleDrive, delegatedLocations, }: {
|
|
243
234
|
accountAddress: string;
|
|
244
235
|
clientKeyShares?: ClientKeyShare[];
|
|
245
236
|
password?: string;
|
|
246
237
|
signedSessionId: string;
|
|
247
238
|
backupToGoogleDrive?: boolean;
|
|
248
|
-
|
|
249
|
-
storeEncryptedBackupByDelegatedWallet({ accountAddress, clientKeyShares, password, signedSessionId, }: {
|
|
250
|
-
accountAddress: string;
|
|
251
|
-
clientKeyShares?: ClientKeyShare[];
|
|
252
|
-
password?: string;
|
|
253
|
-
signedSessionId: string;
|
|
239
|
+
delegatedLocations?: any[];
|
|
254
240
|
}): Promise<any>;
|
|
255
241
|
storeEncryptedBackupByWalletWithRetry({ accountAddress, clientKeyShares, password, signedSessionId, }: {
|
|
256
242
|
accountAddress: 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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"}
|
package/src/mpc/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Ecdsa, Ed25519, BIP340, BIP340KeygenResult, EcdsaPublicKey, Ed25519KeygenResult, EcdsaKeygenResult, MessageHash, EcdsaInitKeygenResult, Ed25519InitKeygenResult, BIP340InitKeygenResult, EcdsaSignature } from '
|
|
1
|
+
import { Ecdsa, Ed25519, BIP340, BIP340KeygenResult, EcdsaPublicKey, Ed25519KeygenResult, EcdsaKeygenResult, MessageHash, EcdsaInitKeygenResult, Ed25519InitKeygenResult, BIP340InitKeygenResult, EcdsaSignature } from '../../internal/web';
|
|
2
2
|
export { Ecdsa, Ed25519, BIP340, EcdsaPublicKey, EcdsaKeygenResult, Ed25519KeygenResult, BIP340KeygenResult, MessageHash, EcdsaInitKeygenResult, Ed25519InitKeygenResult, BIP340InitKeygenResult, EcdsaSignature, };
|
|
3
3
|
export * from './mpc';
|
|
4
4
|
export * from './types';
|
package/src/mpc/mpc.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { SigningAlgorithm } from '@dynamic-labs-wallet/core';
|
|
2
|
-
import { Ecdsa, ExportableEd25519, BIP340 } from '
|
|
2
|
+
import { Ecdsa, ExportableEd25519, BIP340 } from '../../internal/web';
|
|
3
3
|
export declare const getMPCSignatureScheme: ({ signingAlgorithm, baseRelayUrl, }: {
|
|
4
4
|
signingAlgorithm: SigningAlgorithm;
|
|
5
5
|
baseRelayUrl?: string;
|
package/src/mpc/types.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { BIP340InitKeygenResult, BIP340KeygenResult, ExportableEd25519InitKeygenResult, EcdsaInitKeygenResult, EcdsaKeygenResult, ExportableEd25519KeygenResult } from '
|
|
1
|
+
import type { BIP340InitKeygenResult, BIP340KeygenResult, ExportableEd25519InitKeygenResult, EcdsaInitKeygenResult, EcdsaKeygenResult, ExportableEd25519KeygenResult } from '../../internal/web';
|
|
2
2
|
export type ClientInitKeygenResult = EcdsaInitKeygenResult | ExportableEd25519InitKeygenResult | BIP340InitKeygenResult;
|
|
3
3
|
export type ClientKeyShare = EcdsaKeygenResult | ExportableEd25519KeygenResult | BIP340KeygenResult;
|
|
4
|
-
export type { Ecdsa, BIP340, EcdsaPublicKey, EcdsaKeygenResult, ExportableEd25519InitKeygenResult, ExportableEd25519KeygenResult, BIP340KeygenResult, MessageHash, EcdsaSignature, } from '
|
|
4
|
+
export type { Ecdsa, BIP340, EcdsaPublicKey, EcdsaKeygenResult, ExportableEd25519InitKeygenResult, ExportableEd25519KeygenResult, BIP340KeygenResult, MessageHash, EcdsaSignature, } from '../../internal/web';
|
|
5
5
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** Algorithm label for the new hybrid encryption standard */
|
|
2
|
+
export declare const ALG_LABEL_RSA = "HYBRID-RSA-AES-256";
|
|
3
|
+
/** Envelope returned for encrypted delegated key share */
|
|
4
|
+
export type EncryptedDelegatedKeyShareEnvelope = {
|
|
5
|
+
algorithm: typeof ALG_LABEL_RSA;
|
|
6
|
+
iv: string;
|
|
7
|
+
encryptedData: string;
|
|
8
|
+
authTag: string;
|
|
9
|
+
encryptedKey: string;
|
|
10
|
+
encodedEnvelopeBytes: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Encrypts data using HYBRID-RSA-AES-256 encryption scheme with Web Crypto API.
|
|
14
|
+
* 1. Generate random AES-256 key
|
|
15
|
+
* 2. Encrypt AES key with RSA public key
|
|
16
|
+
* 3. Encrypt data with AES-256-GCM
|
|
17
|
+
*/
|
|
18
|
+
export declare const encryptDelegatedKeyShare: (data: string, publicKeyPem: string) => Promise<EncryptedDelegatedKeyShareEnvelope>;
|
|
19
|
+
//# sourceMappingURL=encryption.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/services/encryption.ts"],"names":[],"mappings":"AAAA,6DAA6D;AAC7D,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD,0DAA0D;AAC1D,MAAM,MAAM,kCAAkC,GAAG;IAC/C,SAAS,EAAE,OAAO,aAAa,CAAC;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,oBAAoB,EAAE,MAAM,CAAC;CAC9B,CAAC;AAqEF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,SAC7B,MAAM,gBACE,MAAM,KACnB,OAAO,CAAC,kCAAkC,CA+D5C,CAAC"}
|
package/src/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type KeyShareBackupInfo, type ThresholdSignatureScheme, type WaasWalletProperties } from '@dynamic-labs-wallet/core';
|
|
2
2
|
import type { JwtVerifiedCredential } from '@dynamic-labs/sdk-api-core';
|
|
3
|
-
import { MessageHash } from '
|
|
3
|
+
import { MessageHash } from '../internal/web';
|
|
4
4
|
import type { ClientKeyShare } from './mpc/types';
|
|
5
5
|
export declare const isBrowser: () => boolean;
|
|
6
6
|
export declare const getClientKeyShareExportFileName: ({ thresholdSignatureScheme, accountAddress, }: {
|
package/src/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,eAAO,MAAM,SAAS,eAAsC,CAAC;AAE7D,eAAO,MAAM,+BAA+B,kDAGzC;IACD,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC;CACxB,WAEA,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAAa;IACnD,gBAAgB,EAAE,oBAAoB,CAAC;CACxC,KAAG,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,kBAAkB,EACvB,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,EAC1B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,4BAA4B,CAAC;AAExE,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAIlD,eAAO,MAAM,SAAS,eAAsC,CAAC;AAE7D,eAAO,MAAM,+BAA+B,kDAGzC;IACD,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,cAAc,EAAE,MAAM,CAAC;CACxB,WAEA,CAAC;AAEF,eAAO,MAAM,2BAA2B,YAAa;IACnD,gBAAgB,EAAE,oBAAoB,CAAC;CACxC,KAAG,kBA4CH,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,sBACZ,cAAc,EAAE,gBACrB,cAAc,EAAE,KAC7B,cAAc,EAchB,CAAC;AAEF,eAAO,MAAM,cAAc,4BAGxB;IACD,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,qBAOA,CAAC;AAEF,UAAU,WAAW;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,CAAC,EAClC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EAC3B,EACE,WAAe,EACf,aAAmB,EACnB,aAA2B,EAC3B,UAAe,GAChB,GAAE,WAAgB,GAClB,OAAO,CAAC,CAAC,CAAC,CAmCZ;AAED,eAAO,MAAM,gBAAgB,YAAa,MAAM,GAAG,UAAU,gBAS5D,CAAC;AAEF,eAAO,MAAM,WAAW,QAAS,MAAM,YAKtC,CAAC;AAgBF,eAAO,MAAM,aAAa,cACb,MAAM,WACR,MAAM,GAAG,UAAU,KAC3B,MAAM,GAAG,UAAU,GAAG,WAWxB,CAAC;AAEF,eAAO,MAAM,uBAAuB,wBACb,qBAAqB,EAAE,KAC3C,MAAM,GAAG,SAOX,CAAC;AAEF,eAAO,MAAM,gBAAgB,mFAK1B;IACD,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;IACvB,wBAAwB,EAAE,wBAAwB,CAAC;IACnD,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;;;;;;;;;;;CAaA,CAAC"}
|