@dynamic-labs-wallet/browser 0.0.0-beta.232.7 → 0.0.0-beta.232.8
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 +135 -49
- package/index.esm.js +132 -49
- package/package.json +2 -2
- package/src/backup/encryption.d.ts +42 -2
- package/src/backup/encryption.d.ts.map +1 -1
- package/src/client.d.ts +6 -1
- package/src/client.d.ts.map +1 -1
- package/src/index.d.ts +2 -0
- package/src/index.d.ts.map +1 -1
- package/src/services/logger.d.ts +1 -1
- package/src/services/logger.d.ts.map +1 -1
- package/src/utils.d.ts +2 -8
- package/src/utils.d.ts.map +1 -1
package/index.cjs.js
CHANGED
|
@@ -223,29 +223,44 @@ const createBackupData = ({ encryptedKeyShares, accountAddress, thresholdSignatu
|
|
|
223
223
|
return {
|
|
224
224
|
keyShares: encryptedKeyShares,
|
|
225
225
|
metadata: {
|
|
226
|
-
version: '1.0',
|
|
227
226
|
createdAt: new Date().toISOString(),
|
|
228
227
|
accountAddress,
|
|
229
228
|
thresholdSignatureScheme,
|
|
230
229
|
hasPassword,
|
|
231
|
-
encryption:
|
|
232
|
-
|
|
233
|
-
keyDerivation: PBKDF2_ALGORITHM,
|
|
234
|
-
iterations: PBKDF2_ITERATIONS,
|
|
235
|
-
hashAlgorithm: PBKDF2_HASH_ALGORITHM,
|
|
236
|
-
algorithmLength: AES_GCM_LENGTH
|
|
237
|
-
},
|
|
230
|
+
encryption: getEncryptionMetadataForVersion(ENCRYPTION_VERSION_CURRENT),
|
|
231
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
238
232
|
shareCount: encryptedKeyShares.length
|
|
239
233
|
}
|
|
240
234
|
};
|
|
241
235
|
};
|
|
242
236
|
|
|
237
|
+
const ENCRYPTION_VERSION_LEGACY = 'v1';
|
|
238
|
+
const ENCRYPTION_VERSION_CURRENT = 'v2';
|
|
243
239
|
const PBKDF2_ALGORITHM = 'PBKDF2';
|
|
244
|
-
const PBKDF2_ITERATIONS = 100000;
|
|
245
240
|
const PBKDF2_HASH_ALGORITHM = 'SHA-256';
|
|
246
241
|
const AES_GCM_ALGORITHM = 'AES-GCM';
|
|
247
242
|
const AES_GCM_LENGTH = 256;
|
|
248
|
-
const
|
|
243
|
+
const ENCRYPTION_VERSIONS = {
|
|
244
|
+
[ENCRYPTION_VERSION_LEGACY]: {
|
|
245
|
+
version: ENCRYPTION_VERSION_LEGACY,
|
|
246
|
+
algorithm: AES_GCM_ALGORITHM,
|
|
247
|
+
keyDerivation: PBKDF2_ALGORITHM,
|
|
248
|
+
iterations: 100000,
|
|
249
|
+
hashAlgorithm: PBKDF2_HASH_ALGORITHM,
|
|
250
|
+
algorithmLength: AES_GCM_LENGTH
|
|
251
|
+
},
|
|
252
|
+
[ENCRYPTION_VERSION_CURRENT]: {
|
|
253
|
+
version: ENCRYPTION_VERSION_CURRENT,
|
|
254
|
+
algorithm: AES_GCM_ALGORITHM,
|
|
255
|
+
keyDerivation: PBKDF2_ALGORITHM,
|
|
256
|
+
iterations: 1000000,
|
|
257
|
+
hashAlgorithm: PBKDF2_HASH_ALGORITHM,
|
|
258
|
+
algorithmLength: AES_GCM_LENGTH
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
ENCRYPTION_VERSIONS[ENCRYPTION_VERSION_CURRENT].iterations;
|
|
262
|
+
ENCRYPTION_VERSIONS[ENCRYPTION_VERSION_LEGACY].iterations;
|
|
263
|
+
const getKey = async ({ password, salt, encryptionConfig })=>{
|
|
249
264
|
const passwordBytes = stringToBytes(password);
|
|
250
265
|
const initialKey = await crypto.subtle.importKey('raw', passwordBytes, {
|
|
251
266
|
name: 'PBKDF2'
|
|
@@ -253,26 +268,34 @@ const getKey = async ({ password, salt })=>{
|
|
|
253
268
|
'deriveKey'
|
|
254
269
|
]);
|
|
255
270
|
return crypto.subtle.deriveKey({
|
|
256
|
-
name:
|
|
257
|
-
salt,
|
|
258
|
-
iterations:
|
|
259
|
-
hash:
|
|
271
|
+
name: encryptionConfig.keyDerivation,
|
|
272
|
+
salt: salt,
|
|
273
|
+
iterations: encryptionConfig.iterations,
|
|
274
|
+
hash: encryptionConfig.hashAlgorithm
|
|
260
275
|
}, initialKey, {
|
|
261
|
-
name:
|
|
262
|
-
length:
|
|
276
|
+
name: encryptionConfig.algorithm,
|
|
277
|
+
length: encryptionConfig.algorithmLength
|
|
263
278
|
}, false, [
|
|
264
279
|
'encrypt',
|
|
265
280
|
'decrypt'
|
|
266
281
|
]);
|
|
267
282
|
};
|
|
268
|
-
|
|
283
|
+
/**
|
|
284
|
+
* Encrypts data using the specified encryption version.
|
|
285
|
+
* Always uses the latest encryption configuration for new encryptions by default.
|
|
286
|
+
*/ const encryptData = async ({ data, password, version = ENCRYPTION_VERSION_CURRENT })=>{
|
|
287
|
+
const encryptionConfig = ENCRYPTION_VERSIONS[version];
|
|
288
|
+
if (!encryptionConfig) {
|
|
289
|
+
throw new Error(`Unsupported encryption version: ${version}`);
|
|
290
|
+
}
|
|
269
291
|
try {
|
|
270
292
|
// Generate a random salt and IV
|
|
271
293
|
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
272
294
|
const iv = crypto.getRandomValues(new Uint8Array(12)); // AES-GCM requires 12 bytes
|
|
273
295
|
const key = await getKey({
|
|
274
296
|
password,
|
|
275
|
-
salt
|
|
297
|
+
salt,
|
|
298
|
+
encryptionConfig
|
|
276
299
|
});
|
|
277
300
|
// Convert the input string to bytes
|
|
278
301
|
const dataBytes = new TextEncoder().encode(data);
|
|
@@ -285,25 +308,39 @@ const encryptData = async ({ data, password })=>{
|
|
|
285
308
|
return {
|
|
286
309
|
salt: bytesToBase64(salt),
|
|
287
310
|
iv: bytesToBase64(iv),
|
|
288
|
-
cipher: bytesToBase64(new Uint8Array(encryptedData))
|
|
311
|
+
cipher: bytesToBase64(new Uint8Array(encryptedData)),
|
|
312
|
+
version
|
|
289
313
|
};
|
|
290
314
|
} catch (error) {
|
|
291
315
|
throw new Error('Error encrypting data');
|
|
292
316
|
}
|
|
293
317
|
};
|
|
294
|
-
|
|
318
|
+
/**
|
|
319
|
+
* Decrypts data with version-based configuration.
|
|
320
|
+
* Uses the version field from the data to determine encryption parameters.
|
|
321
|
+
* Falls back to legacy version for backward compatibility if no version is specified.
|
|
322
|
+
*/ const decryptData = async ({ data, password })=>{
|
|
323
|
+
const { salt, iv, cipher, version } = data;
|
|
324
|
+
// Ensure proper base64 padding for all values
|
|
325
|
+
const paddedSalt = ensureBase64Padding(salt);
|
|
326
|
+
const paddedIv = ensureBase64Padding(iv);
|
|
327
|
+
const paddedCipher = ensureBase64Padding(cipher);
|
|
328
|
+
const saltBytes = base64ToBytes(paddedSalt);
|
|
329
|
+
const ivBytes = base64ToBytes(paddedIv);
|
|
330
|
+
const cipherBytes = base64ToBytes(paddedCipher);
|
|
331
|
+
let encryptionConfig;
|
|
332
|
+
// Use version-based configuration if available, otherwise fallback to legacy
|
|
333
|
+
if (version && ENCRYPTION_VERSIONS[version]) {
|
|
334
|
+
encryptionConfig = ENCRYPTION_VERSIONS[version];
|
|
335
|
+
} else {
|
|
336
|
+
// Fallback to legacy version for backward compatibility
|
|
337
|
+
encryptionConfig = ENCRYPTION_VERSIONS[ENCRYPTION_VERSION_LEGACY];
|
|
338
|
+
}
|
|
295
339
|
try {
|
|
296
|
-
const { salt, iv, cipher } = data;
|
|
297
|
-
// Ensure proper base64 padding for all values
|
|
298
|
-
const paddedSalt = ensureBase64Padding(salt);
|
|
299
|
-
const paddedIv = ensureBase64Padding(iv);
|
|
300
|
-
const paddedCipher = ensureBase64Padding(cipher);
|
|
301
|
-
const saltBytes = base64ToBytes(paddedSalt);
|
|
302
|
-
const ivBytes = base64ToBytes(paddedIv);
|
|
303
|
-
const cipherBytes = base64ToBytes(paddedCipher);
|
|
304
340
|
const key = await getKey({
|
|
305
341
|
password,
|
|
306
|
-
salt: saltBytes
|
|
342
|
+
salt: saltBytes,
|
|
343
|
+
encryptionConfig
|
|
307
344
|
});
|
|
308
345
|
const decryptedData = await crypto.subtle.decrypt({
|
|
309
346
|
name: AES_GCM_ALGORITHM,
|
|
@@ -311,8 +348,24 @@ const decryptData = async ({ data, password })=>{
|
|
|
311
348
|
}, key, cipherBytes);
|
|
312
349
|
return new TextDecoder().decode(decryptedData);
|
|
313
350
|
} catch (error) {
|
|
314
|
-
throw new Error('Decryption failed');
|
|
351
|
+
throw new Error('Decryption failed: ' + error);
|
|
352
|
+
}
|
|
353
|
+
};
|
|
354
|
+
/**
|
|
355
|
+
* Gets encryption metadata for a specific version.
|
|
356
|
+
* Used when we need to include metadata in legacy systems or APIs that require it.
|
|
357
|
+
*/ const getEncryptionMetadataForVersion = (version)=>{
|
|
358
|
+
const encryptionConfig = ENCRYPTION_VERSIONS[version];
|
|
359
|
+
if (!encryptionConfig) {
|
|
360
|
+
throw new Error(`Unsupported encryption version: ${version}`);
|
|
315
361
|
}
|
|
362
|
+
return {
|
|
363
|
+
algorithm: encryptionConfig.algorithm,
|
|
364
|
+
keyDerivation: encryptionConfig.keyDerivation,
|
|
365
|
+
iterations: encryptionConfig.iterations,
|
|
366
|
+
hashAlgorithm: encryptionConfig.hashAlgorithm,
|
|
367
|
+
algorithmLength: encryptionConfig.algorithmLength
|
|
368
|
+
};
|
|
316
369
|
};
|
|
317
370
|
|
|
318
371
|
const GOOGLE_DRIVE_UPLOAD_API = 'https://www.googleapis.com';
|
|
@@ -1322,6 +1375,7 @@ class DynamicWalletClient {
|
|
|
1322
1375
|
walletId: this.walletMap[accountAddress].walletId,
|
|
1323
1376
|
encryptedKeyShares: dynamicClientKeyShares,
|
|
1324
1377
|
passwordEncrypted: Boolean(password) && password !== this.environmentId,
|
|
1378
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
1325
1379
|
signedSessionId
|
|
1326
1380
|
});
|
|
1327
1381
|
await this.apiClient.markKeySharesAsBackedUp({
|
|
@@ -1853,24 +1907,47 @@ class DynamicWalletClient {
|
|
|
1853
1907
|
/**
|
|
1854
1908
|
* check if the operation requires restoring backup shares
|
|
1855
1909
|
*/ async requiresRestoreBackupSharesForOperation({ accountAddress, walletOperation = core.WalletOperation.REACH_THRESHOLD }) {
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1910
|
+
try {
|
|
1911
|
+
const clientKeySharesBackupInfo = await this.getWalletClientKeyShareBackupInfo({
|
|
1912
|
+
accountAddress
|
|
1913
|
+
});
|
|
1914
|
+
const clientKeyShares = await this.getClientKeySharesFromLocalStorage({
|
|
1915
|
+
accountAddress
|
|
1916
|
+
});
|
|
1917
|
+
if (!clientKeyShares || clientKeyShares.length === 0) {
|
|
1918
|
+
logError({
|
|
1919
|
+
message: '[DynamicWaasWalletClient] No client key shares found in requiresRestoreBackupSharesForOperation',
|
|
1920
|
+
error: new Error('No client key shares available'),
|
|
1921
|
+
context: {
|
|
1922
|
+
accountAddress,
|
|
1923
|
+
walletOperation
|
|
1924
|
+
}
|
|
1925
|
+
});
|
|
1926
|
+
throw new Error('No client key shares available');
|
|
1927
|
+
}
|
|
1928
|
+
if (walletOperation === core.WalletOperation.REACH_ALL_PARTIES || walletOperation === core.WalletOperation.REFRESH || walletOperation === core.WalletOperation.RESHARE) {
|
|
1929
|
+
return true;
|
|
1930
|
+
}
|
|
1931
|
+
const { requiredShareCount } = this.recoverStrategy({
|
|
1932
|
+
clientKeyShareBackupInfo: clientKeySharesBackupInfo,
|
|
1933
|
+
thresholdSignatureScheme: this.walletMap[accountAddress].thresholdSignatureScheme,
|
|
1934
|
+
walletOperation
|
|
1935
|
+
});
|
|
1936
|
+
if (clientKeyShares.length >= requiredShareCount) {
|
|
1937
|
+
return false;
|
|
1938
|
+
}
|
|
1863
1939
|
return true;
|
|
1940
|
+
} catch (error) {
|
|
1941
|
+
logError({
|
|
1942
|
+
message: '[DynamicWaasWalletClient] Error in requiresRestoreBackupSharesForOperation',
|
|
1943
|
+
error: error,
|
|
1944
|
+
context: {
|
|
1945
|
+
accountAddress,
|
|
1946
|
+
walletOperation
|
|
1947
|
+
}
|
|
1948
|
+
});
|
|
1949
|
+
throw error;
|
|
1864
1950
|
}
|
|
1865
|
-
const { requiredShareCount } = this.recoverStrategy({
|
|
1866
|
-
clientKeyShareBackupInfo: clientKeySharesBackupInfo,
|
|
1867
|
-
thresholdSignatureScheme: this.walletMap[accountAddress].thresholdSignatureScheme,
|
|
1868
|
-
walletOperation
|
|
1869
|
-
});
|
|
1870
|
-
if (clientKeyShares.length >= requiredShareCount) {
|
|
1871
|
-
return false;
|
|
1872
|
-
}
|
|
1873
|
-
return true;
|
|
1874
1951
|
}
|
|
1875
1952
|
async getWalletClientKeyShareBackupInfo({ accountAddress }) {
|
|
1876
1953
|
try {
|
|
@@ -2008,7 +2085,13 @@ class DynamicWalletClient {
|
|
|
2008
2085
|
throw error;
|
|
2009
2086
|
}
|
|
2010
2087
|
}
|
|
2011
|
-
|
|
2088
|
+
/**
|
|
2089
|
+
* sync auth token with api client
|
|
2090
|
+
* @param authToken - auth token to sync
|
|
2091
|
+
*/ syncAuthToken(authToken) {
|
|
2092
|
+
this.apiClient.syncAuthToken(authToken);
|
|
2093
|
+
}
|
|
2094
|
+
constructor({ environmentId, authToken, baseApiUrl, baseMPCRelayApiUrl, storageKey, debug }){
|
|
2012
2095
|
this.initializePromise = null;
|
|
2013
2096
|
this.logger = logger;
|
|
2014
2097
|
this.walletMap = {} // todo: store in session storage
|
|
@@ -2021,8 +2104,7 @@ class DynamicWalletClient {
|
|
|
2021
2104
|
this.apiClient = new core.DynamicApiClient({
|
|
2022
2105
|
environmentId,
|
|
2023
2106
|
authToken,
|
|
2024
|
-
baseApiUrl
|
|
2025
|
-
baseClientRelayApiUrl
|
|
2107
|
+
baseApiUrl
|
|
2026
2108
|
});
|
|
2027
2109
|
this.debug = Boolean(debug);
|
|
2028
2110
|
this.logger.setLogLevel(this.debug ? logger$1.LogLevel.DEBUG : DEFAULT_LOG_LEVEL);
|
|
@@ -2101,6 +2183,10 @@ Object.defineProperty(exports, "MessageHash", {
|
|
|
2101
2183
|
enumerable: true,
|
|
2102
2184
|
get: function () { return web.MessageHash; }
|
|
2103
2185
|
});
|
|
2186
|
+
Object.defineProperty(exports, "Logger", {
|
|
2187
|
+
enumerable: true,
|
|
2188
|
+
get: function () { return logger$1.Logger; }
|
|
2189
|
+
});
|
|
2104
2190
|
exports.DynamicWalletClient = DynamicWalletClient;
|
|
2105
2191
|
exports.ERROR_ACCOUNT_ADDRESS_REQUIRED = ERROR_ACCOUNT_ADDRESS_REQUIRED;
|
|
2106
2192
|
exports.ERROR_CREATE_WALLET_ACCOUNT = ERROR_CREATE_WALLET_ACCOUNT;
|
package/index.esm.js
CHANGED
|
@@ -3,6 +3,7 @@ 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';
|
|
5
5
|
import { LogLevel, Logger } from '@dynamic-labs/logger';
|
|
6
|
+
export { Logger } from '@dynamic-labs/logger';
|
|
6
7
|
import { ProviderEnum } from '@dynamic-labs/sdk-api-core';
|
|
7
8
|
import { AxiosError } from 'axios';
|
|
8
9
|
import createHttpError from 'http-errors';
|
|
@@ -223,29 +224,44 @@ const createBackupData = ({ encryptedKeyShares, accountAddress, thresholdSignatu
|
|
|
223
224
|
return {
|
|
224
225
|
keyShares: encryptedKeyShares,
|
|
225
226
|
metadata: {
|
|
226
|
-
version: '1.0',
|
|
227
227
|
createdAt: new Date().toISOString(),
|
|
228
228
|
accountAddress,
|
|
229
229
|
thresholdSignatureScheme,
|
|
230
230
|
hasPassword,
|
|
231
|
-
encryption:
|
|
232
|
-
|
|
233
|
-
keyDerivation: PBKDF2_ALGORITHM,
|
|
234
|
-
iterations: PBKDF2_ITERATIONS,
|
|
235
|
-
hashAlgorithm: PBKDF2_HASH_ALGORITHM,
|
|
236
|
-
algorithmLength: AES_GCM_LENGTH
|
|
237
|
-
},
|
|
231
|
+
encryption: getEncryptionMetadataForVersion(ENCRYPTION_VERSION_CURRENT),
|
|
232
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
238
233
|
shareCount: encryptedKeyShares.length
|
|
239
234
|
}
|
|
240
235
|
};
|
|
241
236
|
};
|
|
242
237
|
|
|
238
|
+
const ENCRYPTION_VERSION_LEGACY = 'v1';
|
|
239
|
+
const ENCRYPTION_VERSION_CURRENT = 'v2';
|
|
243
240
|
const PBKDF2_ALGORITHM = 'PBKDF2';
|
|
244
|
-
const PBKDF2_ITERATIONS = 100000;
|
|
245
241
|
const PBKDF2_HASH_ALGORITHM = 'SHA-256';
|
|
246
242
|
const AES_GCM_ALGORITHM = 'AES-GCM';
|
|
247
243
|
const AES_GCM_LENGTH = 256;
|
|
248
|
-
const
|
|
244
|
+
const ENCRYPTION_VERSIONS = {
|
|
245
|
+
[ENCRYPTION_VERSION_LEGACY]: {
|
|
246
|
+
version: ENCRYPTION_VERSION_LEGACY,
|
|
247
|
+
algorithm: AES_GCM_ALGORITHM,
|
|
248
|
+
keyDerivation: PBKDF2_ALGORITHM,
|
|
249
|
+
iterations: 100000,
|
|
250
|
+
hashAlgorithm: PBKDF2_HASH_ALGORITHM,
|
|
251
|
+
algorithmLength: AES_GCM_LENGTH
|
|
252
|
+
},
|
|
253
|
+
[ENCRYPTION_VERSION_CURRENT]: {
|
|
254
|
+
version: ENCRYPTION_VERSION_CURRENT,
|
|
255
|
+
algorithm: AES_GCM_ALGORITHM,
|
|
256
|
+
keyDerivation: PBKDF2_ALGORITHM,
|
|
257
|
+
iterations: 1000000,
|
|
258
|
+
hashAlgorithm: PBKDF2_HASH_ALGORITHM,
|
|
259
|
+
algorithmLength: AES_GCM_LENGTH
|
|
260
|
+
}
|
|
261
|
+
};
|
|
262
|
+
ENCRYPTION_VERSIONS[ENCRYPTION_VERSION_CURRENT].iterations;
|
|
263
|
+
ENCRYPTION_VERSIONS[ENCRYPTION_VERSION_LEGACY].iterations;
|
|
264
|
+
const getKey = async ({ password, salt, encryptionConfig })=>{
|
|
249
265
|
const passwordBytes = stringToBytes(password);
|
|
250
266
|
const initialKey = await crypto.subtle.importKey('raw', passwordBytes, {
|
|
251
267
|
name: 'PBKDF2'
|
|
@@ -253,26 +269,34 @@ const getKey = async ({ password, salt })=>{
|
|
|
253
269
|
'deriveKey'
|
|
254
270
|
]);
|
|
255
271
|
return crypto.subtle.deriveKey({
|
|
256
|
-
name:
|
|
257
|
-
salt,
|
|
258
|
-
iterations:
|
|
259
|
-
hash:
|
|
272
|
+
name: encryptionConfig.keyDerivation,
|
|
273
|
+
salt: salt,
|
|
274
|
+
iterations: encryptionConfig.iterations,
|
|
275
|
+
hash: encryptionConfig.hashAlgorithm
|
|
260
276
|
}, initialKey, {
|
|
261
|
-
name:
|
|
262
|
-
length:
|
|
277
|
+
name: encryptionConfig.algorithm,
|
|
278
|
+
length: encryptionConfig.algorithmLength
|
|
263
279
|
}, false, [
|
|
264
280
|
'encrypt',
|
|
265
281
|
'decrypt'
|
|
266
282
|
]);
|
|
267
283
|
};
|
|
268
|
-
|
|
284
|
+
/**
|
|
285
|
+
* Encrypts data using the specified encryption version.
|
|
286
|
+
* Always uses the latest encryption configuration for new encryptions by default.
|
|
287
|
+
*/ const encryptData = async ({ data, password, version = ENCRYPTION_VERSION_CURRENT })=>{
|
|
288
|
+
const encryptionConfig = ENCRYPTION_VERSIONS[version];
|
|
289
|
+
if (!encryptionConfig) {
|
|
290
|
+
throw new Error(`Unsupported encryption version: ${version}`);
|
|
291
|
+
}
|
|
269
292
|
try {
|
|
270
293
|
// Generate a random salt and IV
|
|
271
294
|
const salt = crypto.getRandomValues(new Uint8Array(16));
|
|
272
295
|
const iv = crypto.getRandomValues(new Uint8Array(12)); // AES-GCM requires 12 bytes
|
|
273
296
|
const key = await getKey({
|
|
274
297
|
password,
|
|
275
|
-
salt
|
|
298
|
+
salt,
|
|
299
|
+
encryptionConfig
|
|
276
300
|
});
|
|
277
301
|
// Convert the input string to bytes
|
|
278
302
|
const dataBytes = new TextEncoder().encode(data);
|
|
@@ -285,25 +309,39 @@ const encryptData = async ({ data, password })=>{
|
|
|
285
309
|
return {
|
|
286
310
|
salt: bytesToBase64(salt),
|
|
287
311
|
iv: bytesToBase64(iv),
|
|
288
|
-
cipher: bytesToBase64(new Uint8Array(encryptedData))
|
|
312
|
+
cipher: bytesToBase64(new Uint8Array(encryptedData)),
|
|
313
|
+
version
|
|
289
314
|
};
|
|
290
315
|
} catch (error) {
|
|
291
316
|
throw new Error('Error encrypting data');
|
|
292
317
|
}
|
|
293
318
|
};
|
|
294
|
-
|
|
319
|
+
/**
|
|
320
|
+
* Decrypts data with version-based configuration.
|
|
321
|
+
* Uses the version field from the data to determine encryption parameters.
|
|
322
|
+
* Falls back to legacy version for backward compatibility if no version is specified.
|
|
323
|
+
*/ const decryptData = async ({ data, password })=>{
|
|
324
|
+
const { salt, iv, cipher, version } = data;
|
|
325
|
+
// Ensure proper base64 padding for all values
|
|
326
|
+
const paddedSalt = ensureBase64Padding(salt);
|
|
327
|
+
const paddedIv = ensureBase64Padding(iv);
|
|
328
|
+
const paddedCipher = ensureBase64Padding(cipher);
|
|
329
|
+
const saltBytes = base64ToBytes(paddedSalt);
|
|
330
|
+
const ivBytes = base64ToBytes(paddedIv);
|
|
331
|
+
const cipherBytes = base64ToBytes(paddedCipher);
|
|
332
|
+
let encryptionConfig;
|
|
333
|
+
// Use version-based configuration if available, otherwise fallback to legacy
|
|
334
|
+
if (version && ENCRYPTION_VERSIONS[version]) {
|
|
335
|
+
encryptionConfig = ENCRYPTION_VERSIONS[version];
|
|
336
|
+
} else {
|
|
337
|
+
// Fallback to legacy version for backward compatibility
|
|
338
|
+
encryptionConfig = ENCRYPTION_VERSIONS[ENCRYPTION_VERSION_LEGACY];
|
|
339
|
+
}
|
|
295
340
|
try {
|
|
296
|
-
const { salt, iv, cipher } = data;
|
|
297
|
-
// Ensure proper base64 padding for all values
|
|
298
|
-
const paddedSalt = ensureBase64Padding(salt);
|
|
299
|
-
const paddedIv = ensureBase64Padding(iv);
|
|
300
|
-
const paddedCipher = ensureBase64Padding(cipher);
|
|
301
|
-
const saltBytes = base64ToBytes(paddedSalt);
|
|
302
|
-
const ivBytes = base64ToBytes(paddedIv);
|
|
303
|
-
const cipherBytes = base64ToBytes(paddedCipher);
|
|
304
341
|
const key = await getKey({
|
|
305
342
|
password,
|
|
306
|
-
salt: saltBytes
|
|
343
|
+
salt: saltBytes,
|
|
344
|
+
encryptionConfig
|
|
307
345
|
});
|
|
308
346
|
const decryptedData = await crypto.subtle.decrypt({
|
|
309
347
|
name: AES_GCM_ALGORITHM,
|
|
@@ -311,9 +349,25 @@ const decryptData = async ({ data, password })=>{
|
|
|
311
349
|
}, key, cipherBytes);
|
|
312
350
|
return new TextDecoder().decode(decryptedData);
|
|
313
351
|
} catch (error) {
|
|
314
|
-
throw new Error('Decryption failed');
|
|
352
|
+
throw new Error('Decryption failed: ' + error);
|
|
315
353
|
}
|
|
316
354
|
};
|
|
355
|
+
/**
|
|
356
|
+
* Gets encryption metadata for a specific version.
|
|
357
|
+
* Used when we need to include metadata in legacy systems or APIs that require it.
|
|
358
|
+
*/ const getEncryptionMetadataForVersion = (version)=>{
|
|
359
|
+
const encryptionConfig = ENCRYPTION_VERSIONS[version];
|
|
360
|
+
if (!encryptionConfig) {
|
|
361
|
+
throw new Error(`Unsupported encryption version: ${version}`);
|
|
362
|
+
}
|
|
363
|
+
return {
|
|
364
|
+
algorithm: encryptionConfig.algorithm,
|
|
365
|
+
keyDerivation: encryptionConfig.keyDerivation,
|
|
366
|
+
iterations: encryptionConfig.iterations,
|
|
367
|
+
hashAlgorithm: encryptionConfig.hashAlgorithm,
|
|
368
|
+
algorithmLength: encryptionConfig.algorithmLength
|
|
369
|
+
};
|
|
370
|
+
};
|
|
317
371
|
|
|
318
372
|
const GOOGLE_DRIVE_UPLOAD_API = 'https://www.googleapis.com';
|
|
319
373
|
const uploadFileToGoogleDriveAppStorage = async ({ accessToken, fileName, jsonData })=>{
|
|
@@ -1322,6 +1376,7 @@ class DynamicWalletClient {
|
|
|
1322
1376
|
walletId: this.walletMap[accountAddress].walletId,
|
|
1323
1377
|
encryptedKeyShares: dynamicClientKeyShares,
|
|
1324
1378
|
passwordEncrypted: Boolean(password) && password !== this.environmentId,
|
|
1379
|
+
encryptionVersion: ENCRYPTION_VERSION_CURRENT,
|
|
1325
1380
|
signedSessionId
|
|
1326
1381
|
});
|
|
1327
1382
|
await this.apiClient.markKeySharesAsBackedUp({
|
|
@@ -1853,24 +1908,47 @@ class DynamicWalletClient {
|
|
|
1853
1908
|
/**
|
|
1854
1909
|
* check if the operation requires restoring backup shares
|
|
1855
1910
|
*/ async requiresRestoreBackupSharesForOperation({ accountAddress, walletOperation = WalletOperation.REACH_THRESHOLD }) {
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1911
|
+
try {
|
|
1912
|
+
const clientKeySharesBackupInfo = await this.getWalletClientKeyShareBackupInfo({
|
|
1913
|
+
accountAddress
|
|
1914
|
+
});
|
|
1915
|
+
const clientKeyShares = await this.getClientKeySharesFromLocalStorage({
|
|
1916
|
+
accountAddress
|
|
1917
|
+
});
|
|
1918
|
+
if (!clientKeyShares || clientKeyShares.length === 0) {
|
|
1919
|
+
logError({
|
|
1920
|
+
message: '[DynamicWaasWalletClient] No client key shares found in requiresRestoreBackupSharesForOperation',
|
|
1921
|
+
error: new Error('No client key shares available'),
|
|
1922
|
+
context: {
|
|
1923
|
+
accountAddress,
|
|
1924
|
+
walletOperation
|
|
1925
|
+
}
|
|
1926
|
+
});
|
|
1927
|
+
throw new Error('No client key shares available');
|
|
1928
|
+
}
|
|
1929
|
+
if (walletOperation === WalletOperation.REACH_ALL_PARTIES || walletOperation === WalletOperation.REFRESH || walletOperation === WalletOperation.RESHARE) {
|
|
1930
|
+
return true;
|
|
1931
|
+
}
|
|
1932
|
+
const { requiredShareCount } = this.recoverStrategy({
|
|
1933
|
+
clientKeyShareBackupInfo: clientKeySharesBackupInfo,
|
|
1934
|
+
thresholdSignatureScheme: this.walletMap[accountAddress].thresholdSignatureScheme,
|
|
1935
|
+
walletOperation
|
|
1936
|
+
});
|
|
1937
|
+
if (clientKeyShares.length >= requiredShareCount) {
|
|
1938
|
+
return false;
|
|
1939
|
+
}
|
|
1863
1940
|
return true;
|
|
1941
|
+
} catch (error) {
|
|
1942
|
+
logError({
|
|
1943
|
+
message: '[DynamicWaasWalletClient] Error in requiresRestoreBackupSharesForOperation',
|
|
1944
|
+
error: error,
|
|
1945
|
+
context: {
|
|
1946
|
+
accountAddress,
|
|
1947
|
+
walletOperation
|
|
1948
|
+
}
|
|
1949
|
+
});
|
|
1950
|
+
throw error;
|
|
1864
1951
|
}
|
|
1865
|
-
const { requiredShareCount } = this.recoverStrategy({
|
|
1866
|
-
clientKeyShareBackupInfo: clientKeySharesBackupInfo,
|
|
1867
|
-
thresholdSignatureScheme: this.walletMap[accountAddress].thresholdSignatureScheme,
|
|
1868
|
-
walletOperation
|
|
1869
|
-
});
|
|
1870
|
-
if (clientKeyShares.length >= requiredShareCount) {
|
|
1871
|
-
return false;
|
|
1872
|
-
}
|
|
1873
|
-
return true;
|
|
1874
1952
|
}
|
|
1875
1953
|
async getWalletClientKeyShareBackupInfo({ accountAddress }) {
|
|
1876
1954
|
try {
|
|
@@ -2008,7 +2086,13 @@ class DynamicWalletClient {
|
|
|
2008
2086
|
throw error;
|
|
2009
2087
|
}
|
|
2010
2088
|
}
|
|
2011
|
-
|
|
2089
|
+
/**
|
|
2090
|
+
* sync auth token with api client
|
|
2091
|
+
* @param authToken - auth token to sync
|
|
2092
|
+
*/ syncAuthToken(authToken) {
|
|
2093
|
+
this.apiClient.syncAuthToken(authToken);
|
|
2094
|
+
}
|
|
2095
|
+
constructor({ environmentId, authToken, baseApiUrl, baseMPCRelayApiUrl, storageKey, debug }){
|
|
2012
2096
|
this.initializePromise = null;
|
|
2013
2097
|
this.logger = logger;
|
|
2014
2098
|
this.walletMap = {} // todo: store in session storage
|
|
@@ -2021,8 +2105,7 @@ class DynamicWalletClient {
|
|
|
2021
2105
|
this.apiClient = new DynamicApiClient({
|
|
2022
2106
|
environmentId,
|
|
2023
2107
|
authToken,
|
|
2024
|
-
baseApiUrl
|
|
2025
|
-
baseClientRelayApiUrl
|
|
2108
|
+
baseApiUrl
|
|
2026
2109
|
});
|
|
2027
2110
|
this.debug = Boolean(debug);
|
|
2028
2111
|
this.logger.setLogLevel(this.debug ? LogLevel.DEBUG : DEFAULT_LOG_LEVEL);
|
package/package.json
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamic-labs-wallet/browser",
|
|
3
|
-
"version": "0.0.0-beta.232.
|
|
3
|
+
"version": "0.0.0-beta.232.8",
|
|
4
4
|
"license": "Licensed under the Dynamic Labs, Inc. Terms Of Service (https://www.dynamic.xyz/terms-conditions)",
|
|
5
5
|
"dependencies": {
|
|
6
|
-
"@dynamic-labs-wallet/core": "0.0.0-beta.232.
|
|
6
|
+
"@dynamic-labs-wallet/core": "0.0.0-beta.232.8",
|
|
7
7
|
"@dynamic-labs/logger": "^4.9.9",
|
|
8
8
|
"@dynamic-labs/sdk-api-core": "^0.0.663",
|
|
9
9
|
"axios": "1.9.0",
|
|
@@ -1,22 +1,62 @@
|
|
|
1
|
+
import { EncryptionMetadata } from '@dynamic-labs-wallet/core';
|
|
2
|
+
export declare const ENCRYPTION_VERSION_LEGACY = "v1";
|
|
3
|
+
export declare const ENCRYPTION_VERSION_CURRENT = "v2";
|
|
1
4
|
export declare const PBKDF2_ALGORITHM = "PBKDF2";
|
|
2
|
-
export declare const PBKDF2_ITERATIONS = 100000;
|
|
3
5
|
export declare const PBKDF2_HASH_ALGORITHM = "SHA-256";
|
|
4
6
|
export declare const AES_GCM_ALGORITHM = "AES-GCM";
|
|
5
7
|
export declare const AES_GCM_LENGTH = 256;
|
|
6
|
-
export declare const
|
|
8
|
+
export declare const ENCRYPTION_VERSIONS: {
|
|
9
|
+
readonly v1: {
|
|
10
|
+
readonly version: "v1";
|
|
11
|
+
readonly algorithm: "AES-GCM";
|
|
12
|
+
readonly keyDerivation: "PBKDF2";
|
|
13
|
+
readonly iterations: 100000;
|
|
14
|
+
readonly hashAlgorithm: "SHA-256";
|
|
15
|
+
readonly algorithmLength: 256;
|
|
16
|
+
};
|
|
17
|
+
readonly v2: {
|
|
18
|
+
readonly version: "v2";
|
|
19
|
+
readonly algorithm: "AES-GCM";
|
|
20
|
+
readonly keyDerivation: "PBKDF2";
|
|
21
|
+
readonly iterations: 1000000;
|
|
22
|
+
readonly hashAlgorithm: "SHA-256";
|
|
23
|
+
readonly algorithmLength: 256;
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
export declare const PBKDF2_ITERATIONS: 1000000;
|
|
27
|
+
export declare const PBKDF2_ITERATIONS_LEGACY: 100000;
|
|
28
|
+
export type EncryptionVersion = (typeof ENCRYPTION_VERSIONS)[keyof typeof ENCRYPTION_VERSIONS];
|
|
29
|
+
/**
|
|
30
|
+
* Encrypts data using the specified encryption version.
|
|
31
|
+
* Always uses the latest encryption configuration for new encryptions by default.
|
|
32
|
+
*/
|
|
33
|
+
export declare const encryptData: ({ data, password, version, }: {
|
|
7
34
|
data: string;
|
|
8
35
|
password: string;
|
|
36
|
+
version?: string;
|
|
9
37
|
}) => Promise<{
|
|
10
38
|
salt: string;
|
|
11
39
|
iv: string;
|
|
12
40
|
cipher: string;
|
|
41
|
+
version: string;
|
|
13
42
|
}>;
|
|
43
|
+
/**
|
|
44
|
+
* Decrypts data with version-based configuration.
|
|
45
|
+
* Uses the version field from the data to determine encryption parameters.
|
|
46
|
+
* Falls back to legacy version for backward compatibility if no version is specified.
|
|
47
|
+
*/
|
|
14
48
|
export declare const decryptData: ({ data, password, }: {
|
|
15
49
|
data: {
|
|
16
50
|
salt: string;
|
|
17
51
|
iv: string;
|
|
18
52
|
cipher: string;
|
|
53
|
+
version?: string;
|
|
19
54
|
};
|
|
20
55
|
password: string;
|
|
21
56
|
}) => Promise<string>;
|
|
57
|
+
/**
|
|
58
|
+
* Gets encryption metadata for a specific version.
|
|
59
|
+
* Used when we need to include metadata in legacy systems or APIs that require it.
|
|
60
|
+
*/
|
|
61
|
+
export declare const getEncryptionMetadataForVersion: (version: string) => EncryptionMetadata;
|
|
22
62
|
//# sourceMappingURL=encryption.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/backup/encryption.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"encryption.d.ts","sourceRoot":"","sources":["../../src/backup/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAQ/D,eAAO,MAAM,yBAAyB,OAAO,CAAC;AAC9C,eAAO,MAAM,0BAA0B,OAAO,CAAC;AAE/C,eAAO,MAAM,gBAAgB,WAAW,CAAC;AACzC,eAAO,MAAM,qBAAqB,YAAY,CAAC;AAC/C,eAAO,MAAM,iBAAiB,YAAY,CAAC;AAC3C,eAAO,MAAM,cAAc,MAAM,CAAC;AAElC,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAiBtB,CAAC;AAEX,eAAO,MAAM,iBAAiB,SAC8B,CAAC;AAC7D,eAAO,MAAM,wBAAwB,QACsB,CAAC;AAE5D,MAAM,MAAM,iBAAiB,GAC3B,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,OAAO,mBAAmB,CAAC,CAAC;AAsCjE;;;GAGG;AACH,eAAO,MAAM,WAAW,iCAIrB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;;;;;EAkCA,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,WAAW,wBAGrB;IACD,IAAI,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACrE,QAAQ,EAAE,MAAM,CAAC;CAClB,oBA2CA,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,+BAA+B,YACjC,MAAM,KACd,kBAcF,CAAC"}
|
package/src/client.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare class DynamicWalletClient {
|
|
|
19
19
|
protected iframe: HTMLIFrameElement | null;
|
|
20
20
|
readonly instanceId: string;
|
|
21
21
|
readonly iframeDomain: string;
|
|
22
|
-
constructor({ environmentId, authToken, baseApiUrl, baseMPCRelayApiUrl, storageKey, debug,
|
|
22
|
+
constructor({ environmentId, authToken, baseApiUrl, baseMPCRelayApiUrl, storageKey, debug, }: DynamicWalletClientProps);
|
|
23
23
|
initLoggerContext(authToken: string): Promise<void>;
|
|
24
24
|
initialize(): Promise<InitializeResult>;
|
|
25
25
|
/**
|
|
@@ -348,5 +348,10 @@ export declare class DynamicWalletClient {
|
|
|
348
348
|
signedSessionId?: string;
|
|
349
349
|
}): Promise<WalletProperties>;
|
|
350
350
|
getWallets(): Promise<any>;
|
|
351
|
+
/**
|
|
352
|
+
* sync auth token with api client
|
|
353
|
+
* @param authToken - auth token to sync
|
|
354
|
+
*/
|
|
355
|
+
syncAuthToken(authToken: string): void;
|
|
351
356
|
}
|
|
352
357
|
//# sourceMappingURL=client.d.ts.map
|
package/src/client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,cAAc,EACd,gBAAgB,EAChB,KAAK,wBAAwB,EAO7B,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EAEvB,wBAAwB,EAExB,eAAe,EAChB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAEL,kBAAkB,EAElB,iBAAiB,EACjB,KAAK,cAAc,EACnB,KAAK,cAAc,EACnB,iBAAiB,EAGlB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../packages/src/client.ts"],"names":[],"mappings":"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"}
|
package/src/index.d.ts
CHANGED
package/src/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAE1C,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AAExB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../packages/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAE1C,cAAc,UAAU,CAAC;AACzB,cAAc,SAAS,CAAC;AAExB,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,kBAAkB,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,MAAM,EAAE,CAAC"}
|
package/src/services/logger.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,sBAAsB,CAAC;AAIxD,eAAO,MAAM,MAAM,QAAwD,CAAC;AAE5E,QAAA,MAAM,gBAAgB,0CAInB;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,SAYA,CAAC;AAEF,QAAA,MAAM,QAAQ,iCAIX;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,KAAG,IAQH,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/services/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAY,MAAM,sBAAsB,CAAC;AAIxD,eAAO,MAAM,MAAM,QAAwD,CAAC;AAE5E,QAAA,MAAM,gBAAgB,0CAInB;IACD,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,SAYA,CAAC;AAEF,QAAA,MAAM,QAAQ,iCAIX;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC,KAAG,IAQH,CAAC;AAEF,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC"}
|
package/src/utils.d.ts
CHANGED
|
@@ -52,18 +52,12 @@ export declare const createBackupData: ({ encryptedKeyShares, accountAddress, th
|
|
|
52
52
|
}) => {
|
|
53
53
|
keyShares: string[];
|
|
54
54
|
metadata: {
|
|
55
|
-
version: string;
|
|
56
55
|
createdAt: string;
|
|
57
56
|
accountAddress: string;
|
|
58
57
|
thresholdSignatureScheme: ThresholdSignatureScheme;
|
|
59
58
|
hasPassword: boolean;
|
|
60
|
-
encryption:
|
|
61
|
-
|
|
62
|
-
keyDerivation: string;
|
|
63
|
-
iterations: number;
|
|
64
|
-
hashAlgorithm: string;
|
|
65
|
-
algorithmLength: number;
|
|
66
|
-
};
|
|
59
|
+
encryption: import("@dynamic-labs-wallet/core").EncryptionMetadata;
|
|
60
|
+
encryptionVersion: string;
|
|
67
61
|
shareCount: number;
|
|
68
62
|
};
|
|
69
63
|
};
|
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,EAEL,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;
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../packages/src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,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;AAM5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,eAAO,MAAM,aAAa,QAAS,UAAU,WAE5C,CAAC;AAEF,eAAO,MAAM,aAAa,QAAS,MAAM,eAExC,CAAC;AAEF,eAAO,MAAM,aAAa,WAAY,MAAM,eAE3C,CAAC;AAGF,eAAO,MAAM,mBAAmB,QAAS,MAAM,KAAG,MAEjD,CAAC;AAEF,eAAO,MAAM,SAAS,eAAsC,CAAC;AAE7D,eAAO,MAAM,WAAW,QAAS,MAAM,YAKtC,CAAC;AAEF,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,kBAgCH,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,CA6BZ;AAED,eAAO,MAAM,gBAAgB,YAAa,MAAM,GAAG,UAAU,gBAS5D,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"}
|