@dynamic-labs-sdk/client 0.17.1 → 0.17.3
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/dist/{InvalidParamError-3-1rSNtf.esm.js → InvalidParamError-C8bqZx25.esm.js} +59 -130
- package/dist/InvalidParamError-C8bqZx25.esm.js.map +1 -0
- package/dist/{InvalidParamError-zIxsXkiH.cjs.js → InvalidParamError-DvFYOkxL.cjs.js} +65 -187
- package/dist/InvalidParamError-DvFYOkxL.cjs.js.map +1 -0
- package/dist/{NotWaasWalletAccountError-DVIcEgHJ.esm.js → NotWaasWalletAccountError-C-_6uyUM.esm.js} +3 -3
- package/dist/{NotWaasWalletAccountError-DVIcEgHJ.esm.js.map → NotWaasWalletAccountError-C-_6uyUM.esm.js.map} +1 -1
- package/dist/{NotWaasWalletAccountError-B_Wl6sTh.cjs.js → NotWaasWalletAccountError-CHSFUjd9.cjs.js} +3 -3
- package/dist/{NotWaasWalletAccountError-B_Wl6sTh.cjs.js.map → NotWaasWalletAccountError-CHSFUjd9.cjs.js.map} +1 -1
- package/dist/client/core/createCore/createCore.d.ts.map +1 -1
- package/dist/client/core/types/DynamicCore.d.ts +20 -0
- package/dist/client/core/types/DynamicCore.d.ts.map +1 -1
- package/dist/client/core/types/DynamicCoreConfig.d.ts +1 -1
- package/dist/client/core/types/DynamicCoreConfig.d.ts.map +1 -1
- package/dist/client/types/DynamicClientConfig.d.ts +5 -0
- package/dist/client/types/DynamicClientConfig.d.ts.map +1 -1
- package/dist/core.cjs.js +24 -11
- package/dist/core.cjs.js.map +1 -1
- package/dist/core.esm.js +16 -6
- package/dist/core.esm.js.map +1 -1
- package/dist/exports/core.d.ts +10 -0
- package/dist/exports/core.d.ts.map +1 -1
- package/dist/{getNetworkProviderFromNetworkId-BJR1GciB.cjs.js → getNetworkProviderFromNetworkId-DK9fnM_Y.cjs.js} +432 -69
- package/dist/getNetworkProviderFromNetworkId-DK9fnM_Y.cjs.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-C7jp--76.esm.js → getNetworkProviderFromNetworkId-n7VUDpn0.esm.js} +374 -68
- package/dist/getNetworkProviderFromNetworkId-n7VUDpn0.esm.js.map +1 -0
- package/dist/{getSignedSessionId-DVpOgsL9.cjs.js → getSignedSessionId-B2-EYPik.cjs.js} +7 -17
- package/dist/getSignedSessionId-B2-EYPik.cjs.js.map +1 -0
- package/dist/{getSignedSessionId-Alfz9eul.esm.js → getSignedSessionId-CM3X3R5t.esm.js} +7 -17
- package/dist/getSignedSessionId-CM3X3R5t.esm.js.map +1 -0
- package/dist/{getVerifiedCredentialForWalletAccount-DLtDL1Gl.esm.js → getVerifiedCredentialForWalletAccount-Cs7AcMKQ.esm.js} +2 -2
- package/dist/{getVerifiedCredentialForWalletAccount-DLtDL1Gl.esm.js.map → getVerifiedCredentialForWalletAccount-Cs7AcMKQ.esm.js.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-D25Vyxub.cjs.js → getVerifiedCredentialForWalletAccount-CyLnpS2G.cjs.js} +3 -2
- package/dist/{getVerifiedCredentialForWalletAccount-D25Vyxub.cjs.js.map → getVerifiedCredentialForWalletAccount-CyLnpS2G.cjs.js.map} +1 -1
- package/dist/index.cjs.js +182 -79
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +174 -71
- package/dist/index.esm.js.map +1 -1
- package/dist/{isMfaRequiredForAction-CYYU8V1B.cjs.js → isMfaRequiredForAction-BrRKwK_i.cjs.js} +2 -2
- package/dist/{isMfaRequiredForAction-CYYU8V1B.cjs.js.map → isMfaRequiredForAction-BrRKwK_i.cjs.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-CPTFDCJp.esm.js → isMfaRequiredForAction-CM26tbT2.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-CPTFDCJp.esm.js.map → isMfaRequiredForAction-CM26tbT2.esm.js.map} +1 -1
- package/dist/modules/apiClient/apiClient.types.d.ts +7 -0
- package/dist/modules/apiClient/apiClient.types.d.ts.map +1 -1
- package/dist/modules/apiClient/constants.d.ts +2 -0
- package/dist/modules/apiClient/constants.d.ts.map +1 -1
- package/dist/modules/apiClient/createApiClient.d.ts.map +1 -1
- package/dist/modules/auth/getElevatedAccessToken/getElevatedAccessToken.d.ts +15 -8
- package/dist/modules/auth/getElevatedAccessToken/getElevatedAccessToken.d.ts.map +1 -1
- package/dist/modules/auth/logout/logout.d.ts.map +1 -1
- package/dist/modules/auth/passkeys/deletePasskey/deletePasskey.d.ts.map +1 -1
- package/dist/modules/auth/passkeys/serverRegisterPasskey/serverRegisterPasskey.d.ts.map +1 -1
- package/dist/modules/deviceRegistration/getDeviceSigner/getDeviceSigner.d.ts.map +1 -1
- package/dist/modules/initializeClient/initializeClient.d.ts.map +1 -1
- package/dist/modules/keychainMigration/migrateSessionKeyToKeychain/KeyMigrationError.d.ts +5 -0
- package/dist/modules/keychainMigration/migrateSessionKeyToKeychain/KeyMigrationError.d.ts.map +1 -0
- package/dist/modules/keychainMigration/migrateSessionKeyToKeychain/migrateSessionKeyToKeychain.d.ts +24 -0
- package/dist/modules/keychainMigration/migrateSessionKeyToKeychain/migrateSessionKeyToKeychain.d.ts.map +1 -0
- package/dist/modules/mfa/deleteMfaDevice/deleteMfaDevice.d.ts +6 -4
- package/dist/modules/mfa/deleteMfaDevice/deleteMfaDevice.d.ts.map +1 -1
- package/dist/modules/mfa/registerTotpMfaDevice/registerTotpMfaDevice.d.ts.map +1 -1
- package/dist/modules/sessionKeys/generateNonceSignature/generateNonceSignature.d.ts.map +1 -1
- package/dist/modules/sessionKeys/generateSessionKeys/generateSessionKeys.d.ts.map +1 -1
- package/dist/modules/sessionKeys/generateSessionSignature/generateSessionSignature.d.ts.map +1 -1
- package/dist/modules/sessionKeys/getSessionKeys/getSessionKeys.d.ts.map +1 -1
- package/dist/modules/sessionKeys/sessionKeys.types.d.ts +0 -2
- package/dist/modules/sessionKeys/sessionKeys.types.d.ts.map +1 -1
- package/dist/services/instrumentation/constants.d.ts +17 -0
- package/dist/services/instrumentation/constants.d.ts.map +1 -0
- package/dist/services/instrumentation/createInstrumentation/createInstrumentation.d.ts +18 -0
- package/dist/services/instrumentation/createInstrumentation/createInstrumentation.d.ts.map +1 -0
- package/dist/services/instrumentation/createInstrumentation/index.d.ts +2 -0
- package/dist/services/instrumentation/createInstrumentation/index.d.ts.map +1 -0
- package/dist/services/instrumentation/instrumentation.types.d.ts +44 -0
- package/dist/services/instrumentation/instrumentation.types.d.ts.map +1 -0
- package/dist/services/instrumentation/scrubParameters/index.d.ts +2 -0
- package/dist/services/instrumentation/scrubParameters/index.d.ts.map +1 -0
- package/dist/services/instrumentation/scrubParameters/scrubParameters.d.ts +8 -0
- package/dist/services/instrumentation/scrubParameters/scrubParameters.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/KeyNotFoundError.d.ts +5 -0
- package/dist/services/keychain/createIndexedDBKeychainService/KeyNotFoundError.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.d.ts +7 -0
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.types.d.ts +6 -0
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.types.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/index.d.ts +2 -0
- package/dist/services/keychain/createIndexedDBKeychainService/index.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/constants.d.ts +2 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/constants.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/deleteIndexedDBItem.d.ts +2 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/deleteIndexedDBItem.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/getIndexedDBItem.d.ts +3 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/getIndexedDBItem.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/openDatabase.d.ts +2 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/openDatabase.d.ts.map +1 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/setIndexedDBItem.d.ts +3 -0
- package/dist/services/keychain/createIndexedDBKeychainService/utils/setIndexedDBItem.d.ts.map +1 -0
- package/dist/services/keychain/errors/KeychainNotConfiguredError.d.ts +5 -0
- package/dist/services/keychain/errors/KeychainNotConfiguredError.d.ts.map +1 -0
- package/dist/services/keychain/index.d.ts +3 -0
- package/dist/services/keychain/index.d.ts.map +1 -0
- package/dist/services/keychain/keychain.types.d.ts +9 -0
- package/dist/services/keychain/keychain.types.d.ts.map +1 -0
- package/dist/services/realtime/createRealtimeService/createRealtimeService.d.ts +11 -0
- package/dist/services/realtime/createRealtimeService/createRealtimeService.d.ts.map +1 -0
- package/dist/services/realtime/createRealtimeService/index.d.ts +2 -0
- package/dist/services/realtime/createRealtimeService/index.d.ts.map +1 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/waas.cjs.js +4 -3
- package/dist/waas.cjs.js.map +1 -1
- package/dist/waas.esm.js +3 -3
- package/dist/waasCore.cjs.js +4 -3
- package/dist/waasCore.cjs.js.map +1 -1
- package/dist/waasCore.esm.js +3 -3
- package/package.json +2 -2
- package/dist/InvalidParamError-3-1rSNtf.esm.js.map +0 -1
- package/dist/InvalidParamError-zIxsXkiH.cjs.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-BJR1GciB.cjs.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-C7jp--76.esm.js.map +0 -1
- package/dist/getSignedSessionId-Alfz9eul.esm.js.map +0 -1
- package/dist/getSignedSessionId-DVpOgsL9.cjs.js.map +0 -1
package/dist/index.cjs.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
const
|
|
2
|
-
const
|
|
3
|
-
const require_getVerifiedCredentialForWalletAccount = require('./getVerifiedCredentialForWalletAccount-
|
|
4
|
-
const require_NotWaasWalletAccountError = require('./NotWaasWalletAccountError-
|
|
5
|
-
const require_isMfaRequiredForAction = require('./isMfaRequiredForAction-
|
|
1
|
+
const require_getNetworkProviderFromNetworkId = require('./getNetworkProviderFromNetworkId-DK9fnM_Y.cjs.js');
|
|
2
|
+
const require_InvalidParamError = require('./InvalidParamError-DvFYOkxL.cjs.js');
|
|
3
|
+
const require_getVerifiedCredentialForWalletAccount = require('./getVerifiedCredentialForWalletAccount-CyLnpS2G.cjs.js');
|
|
4
|
+
const require_NotWaasWalletAccountError = require('./NotWaasWalletAccountError-CHSFUjd9.cjs.js');
|
|
5
|
+
const require_isMfaRequiredForAction = require('./isMfaRequiredForAction-BrRKwK_i.cjs.js');
|
|
6
6
|
let _dynamic_labs_sdk_assert_package_version = require("@dynamic-labs-sdk/assert-package-version");
|
|
7
7
|
let _dynamic_labs_sdk_api_core = require("@dynamic-labs/sdk-api-core");
|
|
8
8
|
let zod_mini = require("zod/mini");
|
|
9
|
-
zod_mini =
|
|
9
|
+
zod_mini = require_getNetworkProviderFromNetworkId.__toESM(zod_mini);
|
|
10
10
|
let eventemitter3 = require("eventemitter3");
|
|
11
|
-
eventemitter3 =
|
|
11
|
+
eventemitter3 = require_getNetworkProviderFromNetworkId.__toESM(eventemitter3);
|
|
12
12
|
let _simplewebauthn_browser = require("@simplewebauthn/browser");
|
|
13
13
|
|
|
14
14
|
//#region src/modules/state/raiseStateEvents/events.ts
|
|
@@ -86,7 +86,7 @@ const isSignedIn = (client = require_InvalidParamError.getDefaultClient()) => Bo
|
|
|
86
86
|
/**
|
|
87
87
|
* The schema to track the expiration time of the project settings.
|
|
88
88
|
*/
|
|
89
|
-
const projectSettingsExpirationStorageKeySchema =
|
|
89
|
+
const projectSettingsExpirationStorageKeySchema = require_getNetworkProviderFromNetworkId.createStorageKeySchema({
|
|
90
90
|
key: "projectSettingsExpiration",
|
|
91
91
|
schema: zod_mini.number()
|
|
92
92
|
});
|
|
@@ -205,6 +205,7 @@ const logout = async (client = require_InvalidParamError.getDefaultClient()) =>
|
|
|
205
205
|
*/
|
|
206
206
|
if (require_InvalidParamError.isCookieEnabled(client)) require_getVerifiedCredentialForWalletAccount.setCookie(`${require_getVerifiedCredentialForWalletAccount.DYNAMIC_AUTH_COOKIE_NAME}=; Max-Age=-99999999; path=/; SameSite=Lax`);
|
|
207
207
|
}
|
|
208
|
+
await core.keychain.removeKey("session");
|
|
208
209
|
core.state.set({
|
|
209
210
|
captchaToken: null,
|
|
210
211
|
elevatedAccessTokens: [],
|
|
@@ -298,20 +299,6 @@ const setupCrossTabEventSync = (client) => {
|
|
|
298
299
|
core.crossTabBroadcast.on("deviceRegistrationCompleted", handleCrossTabDeviceRegistrationCompleted);
|
|
299
300
|
};
|
|
300
301
|
|
|
301
|
-
//#endregion
|
|
302
|
-
//#region src/modules/state/raiseStateEvents/raiseStateEvents.ts
|
|
303
|
-
const raiseStateEvents = (client) => {
|
|
304
|
-
require_InvalidParamError.getCore(client).state.subscribe((value, previous) => {
|
|
305
|
-
Object.entries(stateChangeEvents).forEach(([key, event]) => {
|
|
306
|
-
if (require_getNetworkProviderFromNetworkId.isEqualShallow(value[key], previous[key])) return;
|
|
307
|
-
require_getVerifiedCredentialForWalletAccount.emitEvent({
|
|
308
|
-
args: { [key]: value[key] },
|
|
309
|
-
event
|
|
310
|
-
}, client);
|
|
311
|
-
});
|
|
312
|
-
});
|
|
313
|
-
};
|
|
314
|
-
|
|
315
302
|
//#endregion
|
|
316
303
|
//#region src/modules/wallets/unverifiedWalletAccounts/schema.ts
|
|
317
304
|
const unverifiedWalletAccountSchema = zod_mini.object({
|
|
@@ -334,7 +321,7 @@ const walletProviderKeyMapSchema = zod_mini.record(zod_mini.string(), zod_mini.s
|
|
|
334
321
|
|
|
335
322
|
//#endregion
|
|
336
323
|
//#region src/modules/storageSync/schema.ts
|
|
337
|
-
const stateStorageKeySchema =
|
|
324
|
+
const stateStorageKeySchema = require_getNetworkProviderFromNetworkId.createStorageKeySchema({
|
|
338
325
|
key: "state",
|
|
339
326
|
schema: zod_mini.object({
|
|
340
327
|
apiVersion: zod_mini.string(),
|
|
@@ -346,7 +333,7 @@ const stateStorageKeySchema = require_InvalidParamError.createStorageKeySchema({
|
|
|
346
333
|
walletProviderKeyMap: walletProviderKeyMapSchema
|
|
347
334
|
})
|
|
348
335
|
});
|
|
349
|
-
const sessionStorageKeySchema =
|
|
336
|
+
const sessionStorageKeySchema = require_getNetworkProviderFromNetworkId.createStorageKeySchema({
|
|
350
337
|
key: "session",
|
|
351
338
|
schema: zod_mini.object({
|
|
352
339
|
captchaToken: zod_mini.nullable(zod_mini.string()),
|
|
@@ -364,6 +351,87 @@ const sessionStorageKeySchema = require_InvalidParamError.createStorageKeySchema
|
|
|
364
351
|
})
|
|
365
352
|
});
|
|
366
353
|
|
|
354
|
+
//#endregion
|
|
355
|
+
//#region src/modules/keychainMigration/migrateSessionKeyToKeychain/KeyMigrationError.ts
|
|
356
|
+
var KeyMigrationError = class extends require_InvalidParamError.BaseError {
|
|
357
|
+
constructor(expectedPublicKey, importedPublicKey) {
|
|
358
|
+
super({
|
|
359
|
+
cause: null,
|
|
360
|
+
code: "key_migration_public_key_mismatch",
|
|
361
|
+
docsUrl: null,
|
|
362
|
+
name: "KeyMigrationError",
|
|
363
|
+
shortMessage: `Public key mismatch after import: expected "${expectedPublicKey}", got "${importedPublicKey}"`
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
};
|
|
367
|
+
|
|
368
|
+
//#endregion
|
|
369
|
+
//#region src/modules/keychainMigration/migrateSessionKeyToKeychain/migrateSessionKeyToKeychain.ts
|
|
370
|
+
/**
|
|
371
|
+
* Migrates legacy session keys from the hydrated state into the IndexedDB keychain
|
|
372
|
+
* as non-extractable CryptoKey objects.
|
|
373
|
+
*
|
|
374
|
+
* Must run after hydrateStateWithStorage so that state.sessionKeys already holds
|
|
375
|
+
* the legacy base64 blob (or the new public key hex if already migrated).
|
|
376
|
+
*
|
|
377
|
+
* Idempotent: skips if the keychain already has a `session` key.
|
|
378
|
+
* Throws on failure — callers should handle errors (e.g. .catch(() => logout(client))).
|
|
379
|
+
*/
|
|
380
|
+
const migrateSessionKeyToKeychain = async ({ keychain, logger, state, storage }) => {
|
|
381
|
+
if (require_getNetworkProviderFromNetworkId.isServerSideRendering()) return;
|
|
382
|
+
logger.debug("[migrateSessionKeyToKeychain] Checking for existing session key in keychain");
|
|
383
|
+
if (await keychain.hasKey("session")) {
|
|
384
|
+
logger.debug("[migrateSessionKeyToKeychain] Session key already exists in keychain, skipping migration");
|
|
385
|
+
return;
|
|
386
|
+
}
|
|
387
|
+
const encodedSessionKeys = state.get().sessionKeys;
|
|
388
|
+
if (!encodedSessionKeys) {
|
|
389
|
+
logger.debug("[migrateSessionKeyToKeychain] No session keys in state, nothing to migrate");
|
|
390
|
+
return;
|
|
391
|
+
}
|
|
392
|
+
let blob;
|
|
393
|
+
try {
|
|
394
|
+
blob = JSON.parse(require_getNetworkProviderFromNetworkId.getBuffer().from(encodedSessionKeys, "base64").toString());
|
|
395
|
+
} catch {
|
|
396
|
+
logger.debug("[migrateSessionKeyToKeychain] Session keys are not a legacy blob, skipping migration");
|
|
397
|
+
return;
|
|
398
|
+
}
|
|
399
|
+
const { privateKeyJwk, publicKey } = blob;
|
|
400
|
+
if (!privateKeyJwk || !publicKey) {
|
|
401
|
+
logger.debug("[migrateSessionKeyToKeychain] Legacy blob missing privateKeyJwk or publicKey, skipping migration");
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
logger.debug("[migrateSessionKeyToKeychain] Found legacy session key, importing into keychain", { expectedPublicKey: publicKey });
|
|
405
|
+
const importedPublicKey = await keychain.importKey("session", privateKeyJwk);
|
|
406
|
+
logger.debug("[migrateSessionKeyToKeychain] Key imported", {
|
|
407
|
+
expectedPublicKey: publicKey,
|
|
408
|
+
importedPublicKey
|
|
409
|
+
});
|
|
410
|
+
if (importedPublicKey !== publicKey) throw new KeyMigrationError(publicKey, importedPublicKey);
|
|
411
|
+
logger.debug("[migrateSessionKeyToKeychain] Public key validated, updating state and storage");
|
|
412
|
+
state.set({ sessionKeys: importedPublicKey });
|
|
413
|
+
const currentSession = await storage.getItem(sessionStorageKeySchema);
|
|
414
|
+
if (currentSession) await storage.setItem(sessionStorageKeySchema, {
|
|
415
|
+
...currentSession,
|
|
416
|
+
sessionKeys: importedPublicKey
|
|
417
|
+
});
|
|
418
|
+
logger.debug("[migrateSessionKeyToKeychain] Migration complete");
|
|
419
|
+
};
|
|
420
|
+
|
|
421
|
+
//#endregion
|
|
422
|
+
//#region src/modules/state/raiseStateEvents/raiseStateEvents.ts
|
|
423
|
+
const raiseStateEvents = (client) => {
|
|
424
|
+
require_InvalidParamError.getCore(client).state.subscribe((value, previous) => {
|
|
425
|
+
Object.entries(stateChangeEvents).forEach(([key, event]) => {
|
|
426
|
+
if (require_getNetworkProviderFromNetworkId.isEqualShallow(value[key], previous[key])) return;
|
|
427
|
+
require_getVerifiedCredentialForWalletAccount.emitEvent({
|
|
428
|
+
args: { [key]: value[key] },
|
|
429
|
+
event
|
|
430
|
+
}, client);
|
|
431
|
+
});
|
|
432
|
+
});
|
|
433
|
+
};
|
|
434
|
+
|
|
367
435
|
//#endregion
|
|
368
436
|
//#region src/modules/storageSync/hydrateStateWithStorage/hydrateStateWithStorage.ts
|
|
369
437
|
const hydrateStateWithStorage = async (client) => {
|
|
@@ -479,6 +547,14 @@ const initializeClient = async (client = require_InvalidParamError.getDefaultCli
|
|
|
479
547
|
setupCrossTabEventSync(client);
|
|
480
548
|
const initializeStorageSyncPromise = initializeStorageSync(client);
|
|
481
549
|
const fetchProjectSettingsPromise = initializeStorageSyncPromise.then(async () => {
|
|
550
|
+
await migrateSessionKeyToKeychain({
|
|
551
|
+
keychain: core.keychain,
|
|
552
|
+
logger: core.logger,
|
|
553
|
+
state: core.state,
|
|
554
|
+
storage: core.storage
|
|
555
|
+
}).catch(() => logout(client));
|
|
556
|
+
if (core.state.get().sessionKeys && !await core.keychain.hasKey("session")) await logout(client);
|
|
557
|
+
}).then(async () => {
|
|
482
558
|
if (!core.state.get().projectSettings) await fetchProjectSettings(client);
|
|
483
559
|
});
|
|
484
560
|
fetchProjectSettingsPromise.then(() => prefetchNoncesIfNeeded(client)).catch((error) => {
|
|
@@ -627,6 +703,59 @@ const createWebFetch = () => {
|
|
|
627
703
|
return window.fetch.bind(window);
|
|
628
704
|
};
|
|
629
705
|
|
|
706
|
+
//#endregion
|
|
707
|
+
//#region src/services/instrumentation/constants.ts
|
|
708
|
+
const DEFAULT_PII_FIELDS = [
|
|
709
|
+
"password",
|
|
710
|
+
"token",
|
|
711
|
+
"secret",
|
|
712
|
+
"privateKey",
|
|
713
|
+
"mnemonic",
|
|
714
|
+
"seed",
|
|
715
|
+
"email",
|
|
716
|
+
"phone",
|
|
717
|
+
"ssn",
|
|
718
|
+
"address",
|
|
719
|
+
"authorization"
|
|
720
|
+
];
|
|
721
|
+
|
|
722
|
+
//#endregion
|
|
723
|
+
//#region src/services/instrumentation/createInstrumentation/createInstrumentation.ts
|
|
724
|
+
const buildPiiFields = (customFields = []) => {
|
|
725
|
+
const merged = [...DEFAULT_PII_FIELDS, ...customFields];
|
|
726
|
+
return [...new Set(merged)];
|
|
727
|
+
};
|
|
728
|
+
/**
|
|
729
|
+
* Creates the instrumentation service that gates event emission behind an
|
|
730
|
+
* enabled flag and delegates to a pluggable transport.
|
|
731
|
+
*
|
|
732
|
+
* The transport is intentionally optional at creation time — it is wired in
|
|
733
|
+
* later via setTransport so the SDK can initialise without one. Events logged
|
|
734
|
+
* before a transport is set are simply dropped.
|
|
735
|
+
*
|
|
736
|
+
* Custom piiFields are merged with and deduplicated against the defaults so
|
|
737
|
+
* callers only need to list additional fields, not replicate the baseline.
|
|
738
|
+
*/
|
|
739
|
+
const createInstrumentation = ({ config: inputConfig } = {}) => {
|
|
740
|
+
let transport;
|
|
741
|
+
const config = {
|
|
742
|
+
enabled: inputConfig?.enabled ?? true,
|
|
743
|
+
piiFields: buildPiiFields(inputConfig?.piiFields)
|
|
744
|
+
};
|
|
745
|
+
return {
|
|
746
|
+
config,
|
|
747
|
+
log: (event) => {
|
|
748
|
+
if (config.enabled) transport?.log(event);
|
|
749
|
+
},
|
|
750
|
+
setEnabled: (value) => {
|
|
751
|
+
config.enabled = value;
|
|
752
|
+
},
|
|
753
|
+
setTransport: (t) => {
|
|
754
|
+
transport = t;
|
|
755
|
+
}
|
|
756
|
+
};
|
|
757
|
+
};
|
|
758
|
+
|
|
630
759
|
//#endregion
|
|
631
760
|
//#region src/services/navigate/createNavigationHandler/createNavigationHandler.ts
|
|
632
761
|
/**
|
|
@@ -842,9 +971,13 @@ const createCore = (config) => {
|
|
|
842
971
|
const debouncedMutex = createDebouncedMutex();
|
|
843
972
|
const eventEmitter = createEventEmitter();
|
|
844
973
|
const initTrack = createAsyncTrack();
|
|
974
|
+
const sdkSessionId = require_InvalidParamError.randomString({ length: 32 });
|
|
975
|
+
const instrumentation = createInstrumentation({ config: config.instrumentation });
|
|
845
976
|
const runtimeServices = createRuntimeServices();
|
|
846
977
|
const passkey = config.coreConfig?.passkey ?? createWebPasskeyService();
|
|
978
|
+
const realtime = config.coreConfig?.realtime ?? require_getNetworkProviderFromNetworkId.createRealtimeService();
|
|
847
979
|
const deviceSigner = config.coreConfig?.deviceSigner;
|
|
980
|
+
const keychain = config.coreConfig?.keychain ?? require_getNetworkProviderFromNetworkId.createIndexedDBKeychainService({ dbName: `dynamic_${config.environmentId}_keychain` });
|
|
848
981
|
return {
|
|
849
982
|
apiBaseUrl,
|
|
850
983
|
crossTabBroadcast: config.coreConfig?.crossTabBroadcast ?? require_getNetworkProviderFromNetworkId.createCrossTabBroadcast({ channelName: `dynamic_${config.environmentId}_broadcast` }),
|
|
@@ -856,6 +989,8 @@ const createCore = (config) => {
|
|
|
856
989
|
fetch,
|
|
857
990
|
getApiHeaders: config.coreConfig?.getApiHeaders ?? (() => ({})),
|
|
858
991
|
initTrack,
|
|
992
|
+
instrumentation,
|
|
993
|
+
keychain,
|
|
859
994
|
logger,
|
|
860
995
|
metadata: {
|
|
861
996
|
...config.metadata,
|
|
@@ -864,7 +999,9 @@ const createCore = (config) => {
|
|
|
864
999
|
navigate,
|
|
865
1000
|
openDeeplink,
|
|
866
1001
|
passkey,
|
|
1002
|
+
realtime,
|
|
867
1003
|
runtimeServices,
|
|
1004
|
+
sdkSessionId,
|
|
868
1005
|
state,
|
|
869
1006
|
storage,
|
|
870
1007
|
transformers: config.transformers,
|
|
@@ -1287,47 +1424,6 @@ const signInWithExternalJwt = async ({ externalJwt, sessionPublicKey } = {}, cli
|
|
|
1287
1424
|
return response;
|
|
1288
1425
|
};
|
|
1289
1426
|
|
|
1290
|
-
//#endregion
|
|
1291
|
-
//#region src/modules/auth/getElevatedAccessToken/getElevatedAccessToken.ts
|
|
1292
|
-
/**
|
|
1293
|
-
* Gets an elevated access token by scope.
|
|
1294
|
-
*
|
|
1295
|
-
* This function retrieves an elevated access token that contains the specified scope.
|
|
1296
|
-
* Expired tokens are automatically filtered out.
|
|
1297
|
-
*
|
|
1298
|
-
* If the token has `singleUse: true`, it will be automatically
|
|
1299
|
-
* consumed (removed from state) after retrieval. Otherwise, it remains in state
|
|
1300
|
-
* for future use.
|
|
1301
|
-
*
|
|
1302
|
-
* @param params - The parameters object.
|
|
1303
|
-
* @param params.scope - The scope to match (e.g., 'wallet:export').
|
|
1304
|
-
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
1305
|
-
* @returns The elevated access token if found and not expired, or undefined if not found or expired.
|
|
1306
|
-
*
|
|
1307
|
-
* @example
|
|
1308
|
-
* ```typescript
|
|
1309
|
-
* const token = getElevatedAccessToken({ scope: 'wallet:export' });
|
|
1310
|
-
* if (token) {
|
|
1311
|
-
* // Use the token
|
|
1312
|
-
* // Token is automatically consumed if singleUse: true
|
|
1313
|
-
* }
|
|
1314
|
-
* ```
|
|
1315
|
-
*/
|
|
1316
|
-
const getElevatedAccessToken = ({ scope }, client = require_InvalidParamError.getDefaultClient()) => {
|
|
1317
|
-
const core = require_InvalidParamError.getCore(client);
|
|
1318
|
-
const now = /* @__PURE__ */ new Date();
|
|
1319
|
-
const elevatedAccessTokens = core.state.get().elevatedAccessTokens || [];
|
|
1320
|
-
const validTokens = elevatedAccessTokens.filter((token$1) => !token$1.expiresAt || token$1.expiresAt > now);
|
|
1321
|
-
if (validTokens.length !== elevatedAccessTokens.length) core.state.set({ elevatedAccessTokens: validTokens });
|
|
1322
|
-
const token = validTokens.find((token$1) => token$1.scopes.includes(scope));
|
|
1323
|
-
if (!token) return;
|
|
1324
|
-
if (token.singleUse) {
|
|
1325
|
-
const updatedTokens = validTokens.filter((t) => t !== token);
|
|
1326
|
-
core.state.set({ elevatedAccessTokens: updatedTokens });
|
|
1327
|
-
}
|
|
1328
|
-
return token.token;
|
|
1329
|
-
};
|
|
1330
|
-
|
|
1331
1427
|
//#endregion
|
|
1332
1428
|
//#region src/modules/auth/passkeys/deletePasskey/deletePasskey.ts
|
|
1333
1429
|
/**
|
|
@@ -1339,7 +1435,10 @@ const getElevatedAccessToken = ({ scope }, client = require_InvalidParamError.ge
|
|
|
1339
1435
|
*/
|
|
1340
1436
|
const deletePasskey = async ({ passkeyId }, client = require_InvalidParamError.getDefaultClient()) => {
|
|
1341
1437
|
const core = require_InvalidParamError.getCore(client);
|
|
1342
|
-
await require_InvalidParamError.createApiClient({
|
|
1438
|
+
await require_InvalidParamError.createApiClient({
|
|
1439
|
+
elevatedAccessTokenScope: _dynamic_labs_sdk_api_core.TokenScope.Credentialunlink,
|
|
1440
|
+
includeMfaToken: true
|
|
1441
|
+
}, client).deletePasskey({
|
|
1343
1442
|
deleteUserPasskeyRequest: { passkeyId },
|
|
1344
1443
|
environmentId: core.environmentId
|
|
1345
1444
|
});
|
|
@@ -1372,7 +1471,7 @@ const getPasskeyRegistrationOptions = async (client) => {
|
|
|
1372
1471
|
//#region src/modules/auth/passkeys/serverRegisterPasskey/serverRegisterPasskey.ts
|
|
1373
1472
|
const serverRegisterPasskey = async ({ registration, createMfaToken }, client) => {
|
|
1374
1473
|
const core = require_InvalidParamError.getCore(client);
|
|
1375
|
-
return await require_InvalidParamError.createApiClient({}, client).registerPasskey({
|
|
1474
|
+
return await require_InvalidParamError.createApiClient({ elevatedAccessTokenScope: _dynamic_labs_sdk_api_core.TokenScope.Credentiallink }, client).registerPasskey({
|
|
1376
1475
|
environmentId: core.environmentId,
|
|
1377
1476
|
passkeyRegisterRequest: {
|
|
1378
1477
|
...registration,
|
|
@@ -1494,7 +1593,7 @@ const removeDynamicOauthParamsFromUrl = (url) => {
|
|
|
1494
1593
|
//#endregion
|
|
1495
1594
|
//#region src/modules/auth/social/oauth/redirectStateStorageSchema/redirectStateStorageSchema.ts
|
|
1496
1595
|
/** The schema to track the state of the OAuth flow. */
|
|
1497
|
-
const redirectStateStorageKeySchema =
|
|
1596
|
+
const redirectStateStorageKeySchema = require_getNetworkProviderFromNetworkId.createStorageKeySchema({
|
|
1498
1597
|
key: "redirectState",
|
|
1499
1598
|
schema: zod_mini.object({
|
|
1500
1599
|
codeVerifier: zod_mini.optional(zod_mini.string()),
|
|
@@ -1805,7 +1904,7 @@ const getMultichainBalances = async ({ balanceRequest }, client = require_Invali
|
|
|
1805
1904
|
//#endregion
|
|
1806
1905
|
//#region src/modules/checkout/utils/createCheckoutSessionTokenStorageKey/createCheckoutSessionTokenStorageKey.ts
|
|
1807
1906
|
const createCheckoutSessionTokenStorageKey = (transactionId) => {
|
|
1808
|
-
return
|
|
1907
|
+
return require_getNetworkProviderFromNetworkId.createStorageKeySchema({
|
|
1809
1908
|
key: `checkoutSessionToken:${transactionId}`,
|
|
1810
1909
|
schema: zod_mini.string()
|
|
1811
1910
|
});
|
|
@@ -2447,7 +2546,7 @@ const fetchWithTimeout = async (client) => {
|
|
|
2447
2546
|
/**
|
|
2448
2547
|
* The schema to store the cached wallet book data.
|
|
2449
2548
|
*/
|
|
2450
|
-
const walletBookCacheStorageKeySchema =
|
|
2549
|
+
const walletBookCacheStorageKeySchema = require_getNetworkProviderFromNetworkId.createStorageKeySchema({
|
|
2451
2550
|
key: "legacyWalletBookCache",
|
|
2452
2551
|
schema: zod_mini.object({
|
|
2453
2552
|
groups: zod_mini.record(zod_mini.string(), zod_mini.any()),
|
|
@@ -3041,23 +3140,27 @@ const createNewMfaRecoveryCodes = async (client = require_InvalidParamError.getD
|
|
|
3041
3140
|
/**
|
|
3042
3141
|
* Deletes a specific MFA device from the user's account.
|
|
3043
3142
|
*
|
|
3044
|
-
*
|
|
3045
|
-
*
|
|
3143
|
+
* When an elevated access token for `credential:unlink` is available,
|
|
3144
|
+
* it is sent via the `x-dyn-elevated-access-token` header and the
|
|
3145
|
+
* MFA auth token is not required. Otherwise, `mfaAuthToken` must be
|
|
3146
|
+
* provided for backward compatibility with the legacy MFA flow.
|
|
3046
3147
|
*
|
|
3047
3148
|
* @param params.deviceId - The unique identifier of the MFA device to delete.
|
|
3048
|
-
* @param params.mfaAuthToken - The MFA authentication token
|
|
3149
|
+
* @param params.mfaAuthToken - The MFA authentication token. Optional when using elevated access tokens.
|
|
3049
3150
|
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
3050
3151
|
* @returns A promise that resolves when the MFA device is successfully deleted.
|
|
3051
3152
|
*/
|
|
3052
3153
|
const deleteMfaDevice = async ({ deviceId, mfaAuthToken }, client = require_InvalidParamError.getDefaultClient()) => {
|
|
3053
3154
|
const core = require_InvalidParamError.getCore(client);
|
|
3054
|
-
const apiClient = require_InvalidParamError.createApiClient({}, client);
|
|
3055
3155
|
require_InvalidParamError.assertDefined(deviceId, "deviceId is required");
|
|
3056
|
-
require_InvalidParamError.
|
|
3057
|
-
|
|
3156
|
+
if (!require_InvalidParamError.getElevatedAccessToken({
|
|
3157
|
+
consume: false,
|
|
3158
|
+
scope: _dynamic_labs_sdk_api_core.TokenScope.Credentialunlink
|
|
3159
|
+
}, client)) require_InvalidParamError.assertDefined(mfaAuthToken, "mfaAuthToken is required");
|
|
3160
|
+
return require_InvalidParamError.createApiClient({ elevatedAccessTokenScope: _dynamic_labs_sdk_api_core.TokenScope.Credentialunlink }, client).deleteMfaDevice({
|
|
3058
3161
|
environmentId: core.environmentId,
|
|
3059
3162
|
mfaDeviceId: deviceId,
|
|
3060
|
-
xMfaAuthToken: mfaAuthToken
|
|
3163
|
+
xMfaAuthToken: mfaAuthToken ?? ""
|
|
3061
3164
|
});
|
|
3062
3165
|
};
|
|
3063
3166
|
|
|
@@ -3144,7 +3247,7 @@ const isUserMissingMfaAuth = (client = require_InvalidParamError.getDefaultClien
|
|
|
3144
3247
|
*/
|
|
3145
3248
|
const registerTotpMfaDevice = async (client = require_InvalidParamError.getDefaultClient()) => {
|
|
3146
3249
|
const core = require_InvalidParamError.getCore(client);
|
|
3147
|
-
return require_InvalidParamError.createApiClient({}, client).registerTotpMfaDevice({ environmentId: core.environmentId });
|
|
3250
|
+
return require_InvalidParamError.createApiClient({ elevatedAccessTokenScope: _dynamic_labs_sdk_api_core.TokenScope.Credentiallink }, client).registerTotpMfaDevice({ environmentId: core.environmentId });
|
|
3148
3251
|
};
|
|
3149
3252
|
|
|
3150
3253
|
//#endregion
|
|
@@ -5201,7 +5304,7 @@ exports.getCoinbaseBuyUrl = getCoinbaseBuyUrl;
|
|
|
5201
5304
|
exports.getConnectedAddresses = getConnectedAddresses;
|
|
5202
5305
|
exports.getDefaultClient = require_InvalidParamError.getDefaultClient;
|
|
5203
5306
|
exports.getDeviceRegistrationTokenFromUrl = getDeviceRegistrationTokenFromUrl;
|
|
5204
|
-
exports.getElevatedAccessToken = getElevatedAccessToken;
|
|
5307
|
+
exports.getElevatedAccessToken = require_InvalidParamError.getElevatedAccessToken;
|
|
5205
5308
|
exports.getKrakenAccounts = getKrakenAccounts;
|
|
5206
5309
|
exports.getKrakenWhitelistedAddresses = getKrakenWhitelistedAddresses;
|
|
5207
5310
|
exports.getMfaDevices = getMfaDevices;
|