@dynamic-labs-sdk/client 0.25.0 → 0.25.1
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/android/build.gradle +71 -0
- package/android/src/main/java/xyz/dynamic/client/DynamicClientPackage.kt +42 -0
- package/android/src/main/java/xyz/dynamic/client/keychain/KeyStoreKeyManager.kt +147 -0
- package/android/src/main/java/xyz/dynamic/client/keychain/KeychainModule.kt +85 -0
- package/android/src/main/java/xyz/dynamic/client/manifest/ReactNativeManifestModule.kt +25 -0
- package/dist/{InvalidParamError-B5NwKSKU.native.esm.js → InvalidParamError-BDHw6nr1.native.esm.js} +7 -6
- package/dist/InvalidParamError-BDHw6nr1.native.esm.js.map +1 -0
- package/dist/{InvalidParamError-D-d-UfBL.cjs.js → InvalidParamError-BqDEZ6er.cjs.js} +3 -3
- package/dist/InvalidParamError-BqDEZ6er.cjs.js.map +1 -0
- package/dist/{InvalidParamError-BiVmL7nM.esm.js → InvalidParamError-DcN56mC-.esm.js} +2 -2
- package/dist/InvalidParamError-DcN56mC-.esm.js.map +1 -0
- package/dist/{NotWaasWalletAccountError-BX5lUnKT.native.esm.js → NotWaasWalletAccountError-B_TYSgak.native.esm.js} +3 -3
- package/dist/{NotWaasWalletAccountError-BX5lUnKT.native.esm.js.map → NotWaasWalletAccountError-B_TYSgak.native.esm.js.map} +1 -1
- package/dist/{NotWaasWalletAccountError-Bo4VhW4n.esm.js → NotWaasWalletAccountError-CQ7CMol4.esm.js} +3 -3
- package/dist/{NotWaasWalletAccountError-Bo4VhW4n.esm.js.map → NotWaasWalletAccountError-CQ7CMol4.esm.js.map} +1 -1
- package/dist/{NotWaasWalletAccountError-BJaemI4V.cjs.js → NotWaasWalletAccountError-ftYfHk_N.cjs.js} +3 -3
- package/dist/{NotWaasWalletAccountError-BJaemI4V.cjs.js.map → NotWaasWalletAccountError-ftYfHk_N.cjs.js.map} +1 -1
- package/dist/core.cjs.js +36 -6
- package/dist/core.cjs.js.map +1 -1
- package/dist/core.esm.js +34 -6
- package/dist/core.esm.js.map +1 -1
- package/dist/core.native.esm.js +46 -6
- package/dist/core.native.esm.js.map +1 -1
- package/dist/errors/NativeModuleNotLinkedError.d.ts +9 -0
- package/dist/errors/NativeModuleNotLinkedError.d.ts.map +1 -0
- package/dist/errors/ReactNativeOnlyError.d.ts +9 -0
- package/dist/errors/ReactNativeOnlyError.d.ts.map +1 -0
- package/dist/exports/core.d.ts +8 -2
- package/dist/exports/core.d.ts.map +1 -1
- package/dist/{getNetworkProviderFromNetworkId-5dK99mQR.esm.js → getNetworkProviderFromNetworkId-BRWuk0I8.native.esm.js} +408 -153
- package/dist/getNetworkProviderFromNetworkId-BRWuk0I8.native.esm.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-DWOYr3uv.native.esm.js → getNetworkProviderFromNetworkId-COHxfpo-.esm.js} +273 -46
- package/dist/getNetworkProviderFromNetworkId-COHxfpo-.esm.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-Cl2XDWo9.cjs.js → getNetworkProviderFromNetworkId-ClfETwqS.cjs.js} +302 -51
- package/dist/getNetworkProviderFromNetworkId-ClfETwqS.cjs.js.map +1 -0
- package/dist/{getSignedSessionId-DakTrfSz.esm.js → getSignedSessionId-B6ry-rvs.esm.js} +3 -3
- package/dist/{getSignedSessionId-DakTrfSz.esm.js.map → getSignedSessionId-B6ry-rvs.esm.js.map} +1 -1
- package/dist/{getSignedSessionId-BbhZjeRt.cjs.js → getSignedSessionId-Bkw9TATj.cjs.js} +3 -3
- package/dist/{getSignedSessionId-BbhZjeRt.cjs.js.map → getSignedSessionId-Bkw9TATj.cjs.js.map} +1 -1
- package/dist/{getSignedSessionId-Dk3_TQLq.native.esm.js → getSignedSessionId-C58DvQAd.native.esm.js} +3 -3
- package/dist/{getSignedSessionId-Dk3_TQLq.native.esm.js.map → getSignedSessionId-C58DvQAd.native.esm.js.map} +1 -1
- package/dist/{getVerifiedCredentialForWalletAccount-BDvkZbtb.cjs.js → getVerifiedCredentialForWalletAccount-DEiU9FZG.cjs.js} +11 -10
- package/dist/getVerifiedCredentialForWalletAccount-DEiU9FZG.cjs.js.map +1 -0
- package/dist/{getVerifiedCredentialForWalletAccount-ByUSFAHs.esm.js → getVerifiedCredentialForWalletAccount-DP4VQBly.esm.js} +10 -9
- package/dist/getVerifiedCredentialForWalletAccount-DP4VQBly.esm.js.map +1 -0
- package/dist/{getVerifiedCredentialForWalletAccount-Dhqf6Tdl.native.esm.js → getVerifiedCredentialForWalletAccount-d_bHvLLE.native.esm.js} +10 -9
- package/dist/getVerifiedCredentialForWalletAccount-d_bHvLLE.native.esm.js.map +1 -0
- package/dist/index.cjs.js +75 -276
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +71 -272
- package/dist/index.esm.js.map +1 -1
- package/dist/index.native.esm.js +71 -272
- package/dist/index.native.esm.js.map +1 -1
- package/dist/{isMfaRequiredForAction-y15A_lhP.native.esm.js → isMfaRequiredForAction-Cjbuyen3.native.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-y15A_lhP.native.esm.js.map → isMfaRequiredForAction-Cjbuyen3.native.esm.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-SFbQW5j5.esm.js → isMfaRequiredForAction-D8GPFYzv.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-SFbQW5j5.esm.js.map → isMfaRequiredForAction-D8GPFYzv.esm.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-CYrluCK-.cjs.js → isMfaRequiredForAction-mZub0YwI.cjs.js} +2 -2
- package/dist/{isMfaRequiredForAction-CYrluCK-.cjs.js.map → isMfaRequiredForAction-mZub0YwI.cjs.js.map} +1 -1
- package/dist/modules/auth/externalAuth/requestExternalAuthElevatedToken/requestExternalAuthElevatedToken.d.ts.map +1 -1
- package/dist/modules/auth/initializeAuth/initializeAuth.d.ts +1 -1
- package/dist/modules/auth/initializeAuth/setLongTimeout/setLongTimeout.d.ts +8 -2
- package/dist/modules/auth/initializeAuth/setLongTimeout/setLongTimeout.d.ts.map +1 -1
- package/dist/modules/auth/logout/logout.d.ts +1 -1
- package/dist/modules/auth/logout/logout.d.ts.map +1 -1
- package/dist/modules/auth/logoutReason.d.ts +4 -7
- package/dist/modules/auth/logoutReason.d.ts.map +1 -1
- package/dist/modules/auth/logoutWithReason/index.d.ts +2 -0
- package/dist/modules/auth/logoutWithReason/index.d.ts.map +1 -0
- package/dist/modules/auth/logoutWithReason/logoutWithReason.d.ts +24 -0
- package/dist/modules/auth/logoutWithReason/logoutWithReason.d.ts.map +1 -0
- package/dist/modules/auth/social/oauth/authenticateWithSocial/buildOAuthUrl/addOAuthUrlParams/addOAuthUrlParams.d.ts +7 -4
- package/dist/modules/auth/social/oauth/authenticateWithSocial/buildOAuthUrl/addOAuthUrlParams/addOAuthUrlParams.d.ts.map +1 -1
- package/dist/modules/auth/social/oauth/authenticateWithSocial/buildOAuthUrl/buildOAuthUrl.d.ts.map +1 -1
- package/dist/modules/auth/updateAuthFromVerifyResponse/elevatedAccessTokens/parseElevatedAccessToken/parseElevatedAccessToken.d.ts +6 -4
- package/dist/modules/auth/updateAuthFromVerifyResponse/elevatedAccessTokens/parseElevatedAccessToken/parseElevatedAccessToken.d.ts.map +1 -1
- package/dist/modules/auth/updateAuthFromVerifyResponse/updateAuthFromVerifyResponse.d.ts.map +1 -1
- package/dist/modules/initializeClient/initializeClient.d.ts.map +1 -1
- package/dist/modules/instrumentation/setInstrumentationEnabled/setInstrumentationEnabled.d.ts +6 -2
- package/dist/modules/instrumentation/setInstrumentationEnabled/setInstrumentationEnabled.d.ts.map +1 -1
- package/dist/modules/legacyWalletBook/getWalletConnectCatalog/shouldFilterWallet/shouldFilterWallet.d.ts +9 -5
- package/dist/modules/legacyWalletBook/getWalletConnectCatalog/shouldFilterWallet/shouldFilterWallet.d.ts.map +1 -1
- package/dist/modules/storageSync/schema.d.ts.map +1 -1
- package/dist/modules/user/deleteUser/deleteUser.d.ts +1 -1
- package/dist/modules/wallets/utils/isSameAddress/isSameAddress.d.ts +9 -1
- package/dist/modules/wallets/utils/isSameAddress/isSameAddress.d.ts.map +1 -1
- package/dist/modules/wallets/utils/normalizeAddress/normalizeAddress.d.ts +7 -1
- package/dist/modules/wallets/utils/normalizeAddress/normalizeAddress.d.ts.map +1 -1
- package/dist/modules/wallets/verifyWalletAccountForSignInOrTransfer/verifyWalletAccountForSignInOrTransfer.d.ts.map +1 -1
- package/dist/services/keychain/createKeychainService/ImportKeyNotSupportedError.d.ts +5 -0
- package/dist/services/keychain/createKeychainService/ImportKeyNotSupportedError.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/KeyNotFoundError.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/createKeychainService.d.ts +4 -0
- package/dist/services/keychain/createKeychainService/createKeychainService.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/createKeychainService.types.d.ts +11 -0
- package/dist/services/keychain/createKeychainService/createKeychainService.types.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/index.d.ts +2 -0
- package/dist/services/keychain/createKeychainService/index.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/constants.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/deleteIndexedDBItem.d.ts +9 -0
- package/dist/services/keychain/createKeychainService/utils/deleteIndexedDBItem.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/getIndexedDBItem.d.ts +10 -0
- package/dist/services/keychain/createKeychainService/utils/getIndexedDBItem.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/openDatabase.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/setIndexedDBItem.d.ts +10 -0
- package/dist/services/keychain/createKeychainService/utils/setIndexedDBItem.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/withDatabase/index.d.ts.map +1 -0
- package/dist/services/keychain/createKeychainService/utils/withDatabase/withDatabase.d.ts.map +1 -0
- package/dist/services/keychain/index.d.ts +1 -1
- package/dist/services/keychain/index.d.ts.map +1 -1
- package/dist/services/nativeManifest/getReactNativeManifest/getReactNativeManifest.d.ts +11 -0
- package/dist/services/nativeManifest/getReactNativeManifest/getReactNativeManifest.d.ts.map +1 -0
- package/dist/services/nativeManifest/getReactNativeManifest/index.d.ts +2 -0
- package/dist/services/nativeManifest/getReactNativeManifest/index.d.ts.map +1 -0
- package/dist/services/nativeManifest/nativeManifest.types.d.ts +14 -0
- package/dist/services/nativeManifest/nativeManifest.types.d.ts.map +1 -0
- package/dist/services/storage/createLocalStorageAdapter/createLocalStorageAdapter.d.ts +2 -2
- package/dist/services/storage/createStorage/createStorage.d.ts +4 -2
- package/dist/services/storage/createStorage/createStorage.d.ts.map +1 -1
- package/dist/services/storage/createStorageKeySchema/createStorageKeySchema.d.ts +2 -1
- package/dist/services/storage/createStorageKeySchema/createStorageKeySchema.d.ts.map +1 -1
- package/dist/services/storage/index.d.ts +1 -1
- package/dist/services/storage/index.d.ts.map +1 -1
- package/dist/services/storage/storage.types.d.ts +27 -3
- package/dist/services/storage/storage.types.d.ts.map +1 -1
- package/dist/tsconfig.lib.tsbuildinfo +1 -1
- package/dist/utils/base64urlFromBytes/base64urlFromBytes.d.ts +8 -0
- package/dist/utils/base64urlFromBytes/base64urlFromBytes.d.ts.map +1 -0
- package/dist/utils/base64urlFromBytes/index.d.ts +2 -0
- package/dist/utils/base64urlFromBytes/index.d.ts.map +1 -0
- package/dist/utils/bytesFromBase64url/bytesFromBase64url.d.ts +8 -0
- package/dist/utils/bytesFromBase64url/bytesFromBase64url.d.ts.map +1 -0
- package/dist/utils/bytesFromBase64url/index.d.ts +2 -0
- package/dist/utils/bytesFromBase64url/index.d.ts.map +1 -0
- package/dist/utils/derToP1363/InvalidDERSignatureError.d.ts +5 -0
- package/dist/utils/derToP1363/InvalidDERSignatureError.d.ts.map +1 -0
- package/dist/utils/derToP1363/derToP1363.d.ts +8 -0
- package/dist/utils/derToP1363/derToP1363.d.ts.map +1 -0
- package/dist/utils/derToP1363/index.d.ts +2 -0
- package/dist/utils/derToP1363/index.d.ts.map +1 -0
- package/dist/utils/randomString/randomString.d.ts +1 -1
- package/dist/utils/randomString/randomString.d.ts.map +1 -1
- package/dist/waas.cjs.js +4 -4
- package/dist/waas.esm.js +3 -3
- package/dist/waas.native.esm.js +3 -3
- package/dist/waasCore.cjs.js +4 -4
- package/dist/waasCore.cjs.js.map +1 -1
- package/dist/waasCore.esm.js +3 -3
- package/dist/waasCore.esm.js.map +1 -1
- package/dist/waasCore.native.esm.js +3 -3
- package/dist/waasCore.native.esm.js.map +1 -1
- package/dynamic-labs-sdk-client.podspec +27 -0
- package/ios/Keychain.h +4 -0
- package/ios/Keychain.mm +101 -0
- package/ios/ReactNativeManifest.h +4 -0
- package/ios/ReactNativeManifest.mm +45 -0
- package/ios/ReactNativeManifestImpl.swift +20 -0
- package/ios/SecureEnclaveKeyManager.swift +180 -0
- package/package.json +34 -4
- package/react-native.config.cjs +14 -0
- package/dist/InvalidParamError-B5NwKSKU.native.esm.js.map +0 -1
- package/dist/InvalidParamError-BiVmL7nM.esm.js.map +0 -1
- package/dist/InvalidParamError-D-d-UfBL.cjs.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-5dK99mQR.esm.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-Cl2XDWo9.cjs.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-DWOYr3uv.native.esm.js.map +0 -1
- package/dist/getVerifiedCredentialForWalletAccount-BDvkZbtb.cjs.js.map +0 -1
- package/dist/getVerifiedCredentialForWalletAccount-ByUSFAHs.esm.js.map +0 -1
- package/dist/getVerifiedCredentialForWalletAccount-Dhqf6Tdl.native.esm.js.map +0 -1
- package/dist/modules/auth/handleSessionExpiration/handleSessionExpiration.d.ts +0 -11
- package/dist/modules/auth/handleSessionExpiration/handleSessionExpiration.d.ts.map +0 -1
- package/dist/modules/auth/handleSessionExpiration/index.d.ts +0 -2
- package/dist/modules/auth/handleSessionExpiration/index.d.ts.map +0 -1
- package/dist/modules/auth/performLogout/index.d.ts +0 -2
- package/dist/modules/auth/performLogout/index.d.ts.map +0 -1
- package/dist/modules/auth/performLogout/performLogout.d.ts +0 -12
- package/dist/modules/auth/performLogout/performLogout.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/KeyNotFoundError.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.d.ts +0 -8
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.types.d.ts +0 -6
- package/dist/services/keychain/createIndexedDBKeychainService/createIndexedDBKeychainService.types.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/index.d.ts +0 -2
- package/dist/services/keychain/createIndexedDBKeychainService/index.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/constants.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/deleteIndexedDBItem.d.ts +0 -3
- package/dist/services/keychain/createIndexedDBKeychainService/utils/deleteIndexedDBItem.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/getIndexedDBItem.d.ts +0 -4
- package/dist/services/keychain/createIndexedDBKeychainService/utils/getIndexedDBItem.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/openDatabase.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/setIndexedDBItem.d.ts +0 -4
- package/dist/services/keychain/createIndexedDBKeychainService/utils/setIndexedDBItem.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/withDatabase/index.d.ts.map +0 -1
- package/dist/services/keychain/createIndexedDBKeychainService/utils/withDatabase/withDatabase.d.ts.map +0 -1
- /package/dist/services/keychain/{createIndexedDBKeychainService → createKeychainService}/KeyNotFoundError.d.ts +0 -0
- /package/dist/services/keychain/{createIndexedDBKeychainService → createKeychainService}/utils/constants.d.ts +0 -0
- /package/dist/services/keychain/{createIndexedDBKeychainService → createKeychainService}/utils/openDatabase.d.ts +0 -0
- /package/dist/services/keychain/{createIndexedDBKeychainService → createKeychainService}/utils/withDatabase/index.d.ts +0 -0
- /package/dist/services/keychain/{createIndexedDBKeychainService → createKeychainService}/utils/withDatabase/withDatabase.d.ts +0 -0
|
@@ -1,9 +1,12 @@
|
|
|
1
|
-
import { F as getDefaultClient, R as BaseError, c as CHAINS_INFO_MAP, k as assertDefined, u as __createApiClient_wrapped, w as instrumentFunction, z as getCore } from "./InvalidParamError-
|
|
2
|
-
import { _ as __createRuntimeServiceAccessKey_wrapped, d as checkAndRaiseWalletAccountsChangedEvent, m as __getWalletProviderFromWalletAccount_wrapped, x as normalizeWalletNameWithChain } from "./getVerifiedCredentialForWalletAccount-
|
|
1
|
+
import { F as getDefaultClient, M as CLIENT_SDK_NAME, O as isCookieEnabled, R as BaseError, c as CHAINS_INFO_MAP, k as assertDefined, u as __createApiClient_wrapped, w as instrumentFunction, z as getCore } from "./InvalidParamError-BDHw6nr1.native.esm.js";
|
|
2
|
+
import { A as setCookie, _ as __createRuntimeServiceAccessKey_wrapped, d as checkAndRaiseWalletAccountsChangedEvent, k as emitEvent, m as __getWalletProviderFromWalletAccount_wrapped, p as DYNAMIC_AUTH_COOKIE_NAME, x as normalizeWalletNameWithChain, y as __getWalletAccounts_wrapped } from "./getVerifiedCredentialForWalletAccount-d_bHvLLE.native.esm.js";
|
|
3
3
|
import { AuthModeEnum } from "@dynamic-labs/sdk-api-core";
|
|
4
4
|
import * as z from "zod/mini";
|
|
5
|
+
import AsyncStorage from "@react-native-async-storage/async-storage";
|
|
6
|
+
import { getGenericPassword, resetGenericPassword, setGenericPassword } from "react-native-keychain";
|
|
5
7
|
import { Buffer as Buffer$1 } from "buffer";
|
|
6
8
|
import EventEmitter, { EventEmitter as EventEmitter$1 } from "eventemitter3";
|
|
9
|
+
import { TurboModuleRegistry } from "react-native";
|
|
7
10
|
|
|
8
11
|
//#region src/utils/isEqualShallow/isEqualShallow.ts
|
|
9
12
|
/**
|
|
@@ -67,16 +70,84 @@ const __subscribeWithSelector_wrapped = instrumentFunction({
|
|
|
67
70
|
});
|
|
68
71
|
|
|
69
72
|
//#endregion
|
|
70
|
-
//#region src/
|
|
73
|
+
//#region src/utils/retryOnFail/InvalidRetryOnFailCallError.ts
|
|
71
74
|
/**
|
|
72
|
-
*
|
|
75
|
+
* This error is thrown when the `retryOnFail` function is called with an invalid
|
|
76
|
+
* number of retries (i.e. less than 0).
|
|
77
|
+
*/
|
|
78
|
+
var InvalidRetryOnFailCallError = class extends BaseError {
|
|
79
|
+
constructor(maxRetries) {
|
|
80
|
+
super({
|
|
81
|
+
cause: null,
|
|
82
|
+
code: "invalid_retry_on_fail_call_error",
|
|
83
|
+
docsUrl: null,
|
|
84
|
+
name: "InvalidRetryOnFailCallError",
|
|
85
|
+
shortMessage: `Invalid retries parameter for retryOnFail call: ${maxRetries}`
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
//#endregion
|
|
91
|
+
//#region src/utils/retryOnFail/retryOnFail.ts
|
|
92
|
+
/** @not-instrumented */
|
|
93
|
+
const retryOnFail = async ({ delay = 0, fn, maxRetries }) => {
|
|
94
|
+
for (let retry = 0; retry <= maxRetries; retry++) try {
|
|
95
|
+
return await fn();
|
|
96
|
+
} catch (error) {
|
|
97
|
+
if (retry >= maxRetries) throw error;
|
|
98
|
+
if (delay > 0) await new Promise((resolve) => setTimeout(resolve, delay));
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Reaching this point should never happen and this
|
|
102
|
+
* error is thrown to help us debug the issue.
|
|
103
|
+
*/
|
|
104
|
+
throw new InvalidRetryOnFailCallError(maxRetries);
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
//#endregion
|
|
108
|
+
//#region src/modules/auth/isSignedIn/isSignedIn.ts
|
|
109
|
+
/**
|
|
110
|
+
* Checks if the user is currently signed in to the Dynamic client.
|
|
111
|
+
*
|
|
112
|
+
* The client is considered to be in a signed in state if a user has
|
|
113
|
+
* authenticated or if the client has at least one wallet connected.
|
|
114
|
+
*
|
|
115
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
116
|
+
* @returns True if the user is signed in, false otherwise.
|
|
117
|
+
* @not-instrumented
|
|
118
|
+
*/
|
|
119
|
+
const isSignedIn = (client = getDefaultClient()) => Boolean(client.user || __getWalletAccounts_wrapped(client).length > 0);
|
|
120
|
+
|
|
121
|
+
//#endregion
|
|
122
|
+
//#region src/services/storage/createLocalStorageAdapter/createLocalStorageAdapter.native.ts
|
|
123
|
+
const NAMESPACE = "dynamic";
|
|
124
|
+
const namespaceKey = (key) => `${NAMESPACE}:${key}`;
|
|
125
|
+
/**
|
|
126
|
+
* Creates a localStorage adapter for React Native.
|
|
127
|
+
* Routes operations based on the `storageTier` option:
|
|
128
|
+
* - `'default'`: uses AsyncStorage
|
|
129
|
+
* - `'secure'`: uses react-native-keychain
|
|
73
130
|
* @instrumented
|
|
74
131
|
*/
|
|
75
|
-
const createLocalStorageAdapter = () =>
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
});
|
|
132
|
+
const createLocalStorageAdapter = () => {
|
|
133
|
+
return {
|
|
134
|
+
getItem: async (key, options) => {
|
|
135
|
+
if (options.storageTier === "secure") {
|
|
136
|
+
const result = await getGenericPassword({ service: key });
|
|
137
|
+
if (!result) return null;
|
|
138
|
+
return result.password;
|
|
139
|
+
} else return AsyncStorage.getItem(namespaceKey(key));
|
|
140
|
+
},
|
|
141
|
+
removeItem: async (key, options) => {
|
|
142
|
+
if (options.storageTier === "secure") await resetGenericPassword({ service: key });
|
|
143
|
+
else await AsyncStorage.removeItem(namespaceKey(key));
|
|
144
|
+
},
|
|
145
|
+
setItem: async (key, value, options) => {
|
|
146
|
+
if (options.storageTier === "secure") await setGenericPassword(key, value, { service: key });
|
|
147
|
+
else await AsyncStorage.setItem(namespaceKey(key), value);
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
};
|
|
80
151
|
const __createLocalStorageAdapter_impl = createLocalStorageAdapter;
|
|
81
152
|
const __createLocalStorageAdapter_wrapped = instrumentFunction({
|
|
82
153
|
fn: __createLocalStorageAdapter_impl,
|
|
@@ -144,14 +215,19 @@ const parseFromStorage = (value) => {
|
|
|
144
215
|
//#endregion
|
|
145
216
|
//#region src/services/storage/createStorage/createStorage.ts
|
|
146
217
|
/**
|
|
147
|
-
* Creates a Storage service to interact with storage adapter
|
|
218
|
+
* Creates a Storage service to interact with storage adapter.
|
|
219
|
+
* Reads the `storageTier` from each key's config and passes it
|
|
220
|
+
* to the adapter on every operation, defaulting to `'default'`.
|
|
148
221
|
* @instrumented
|
|
149
222
|
*/
|
|
150
223
|
const createStorage = ({ prefix = "", storageAdapter }) => {
|
|
151
224
|
const getPrefixedKey = (key) => prefix ? `${prefix}_${key}` : key;
|
|
225
|
+
const getAdapterOptions = (storageTier) => ({ storageTier: storageTier ?? "default" });
|
|
152
226
|
return {
|
|
153
227
|
getItem: async (storageKeySchema) => {
|
|
154
|
-
const
|
|
228
|
+
const prefixedKey = getPrefixedKey(storageKeySchema.key);
|
|
229
|
+
const options = getAdapterOptions(storageKeySchema.config?.storageTier);
|
|
230
|
+
const rawItem = await storageAdapter.getItem(prefixedKey, options);
|
|
155
231
|
const parsedItem = rawItem ? parseFromStorage(rawItem) : null;
|
|
156
232
|
/**
|
|
157
233
|
* The item saved to localStorage may be malformed.
|
|
@@ -165,11 +241,11 @@ const createStorage = ({ prefix = "", storageAdapter }) => {
|
|
|
165
241
|
* The item saved to localStorage may be malformed.
|
|
166
242
|
* In this case, we remove it and return null.
|
|
167
243
|
*/
|
|
168
|
-
await storageAdapter.removeItem(
|
|
244
|
+
await storageAdapter.removeItem(prefixedKey, options);
|
|
169
245
|
return null;
|
|
170
246
|
},
|
|
171
247
|
removeItem: async (storageKeySchema) => {
|
|
172
|
-
await storageAdapter.removeItem(getPrefixedKey(storageKeySchema.key));
|
|
248
|
+
await storageAdapter.removeItem(getPrefixedKey(storageKeySchema.key), getAdapterOptions(storageKeySchema.config?.storageTier));
|
|
173
249
|
},
|
|
174
250
|
setItem: async (storageKeySchema, value) => {
|
|
175
251
|
const parsed = storageKeySchema.schema.safeParse(value);
|
|
@@ -178,7 +254,7 @@ const createStorage = ({ prefix = "", storageAdapter }) => {
|
|
|
178
254
|
value: JSON.stringify(value)
|
|
179
255
|
});
|
|
180
256
|
const item = formatForStorage(parsed.data);
|
|
181
|
-
await storageAdapter.setItem(getPrefixedKey(storageKeySchema.key), item);
|
|
257
|
+
await storageAdapter.setItem(getPrefixedKey(storageKeySchema.key), item, getAdapterOptions(storageKeySchema.config?.storageTier));
|
|
182
258
|
}
|
|
183
259
|
};
|
|
184
260
|
};
|
|
@@ -214,6 +290,64 @@ const __createStorageKeySchema_wrapped = instrumentFunction({
|
|
|
214
290
|
}
|
|
215
291
|
});
|
|
216
292
|
|
|
293
|
+
//#endregion
|
|
294
|
+
//#region src/modules/projectSettings/fetchProjectSettings/projectSettingsExpirationScheme.ts
|
|
295
|
+
/**
|
|
296
|
+
* The schema to track the expiration time of the project settings.
|
|
297
|
+
*/
|
|
298
|
+
const projectSettingsExpirationStorageKeySchema = __createStorageKeySchema_wrapped({
|
|
299
|
+
key: "projectSettingsExpiration",
|
|
300
|
+
schema: z.number()
|
|
301
|
+
});
|
|
302
|
+
|
|
303
|
+
//#endregion
|
|
304
|
+
//#region src/modules/projectSettings/fetchProjectSettings/fetchProjectSettings.ts
|
|
305
|
+
/**
|
|
306
|
+
* Expiration time of the project settings in milliseconds.
|
|
307
|
+
*/
|
|
308
|
+
const PROJECT_SETTINGS_EXPIRATION_TIME = 1e3 * 60 * 5;
|
|
309
|
+
/**
|
|
310
|
+
* Fetches and updates the project settings from the API.
|
|
311
|
+
*
|
|
312
|
+
* This function retrieves the latest project configuration settings
|
|
313
|
+
* from Dynamic's servers, including authentication options, enabled chains,
|
|
314
|
+
* and security configurations. The settings are cached for performance.
|
|
315
|
+
*
|
|
316
|
+
* @param [client] - The Dynamic client instance. Only required when using multiple Dynamic clients.
|
|
317
|
+
* @returns A promise that resolves to the updated project settings.
|
|
318
|
+
* @instrumented
|
|
319
|
+
*/
|
|
320
|
+
const fetchProjectSettings = async (client = getDefaultClient()) => {
|
|
321
|
+
const core = getCore(client);
|
|
322
|
+
const currentExpiration = await core.storage.getItem(projectSettingsExpirationStorageKeySchema);
|
|
323
|
+
if (Boolean(client.projectSettings) && !(currentExpiration && currentExpiration < Date.now()) && isSignedIn(client)) return client.projectSettings;
|
|
324
|
+
const apiClient = __createApiClient_wrapped({}, client);
|
|
325
|
+
core.logger.debug("[fetchProjectSettings] Fetching project settings...");
|
|
326
|
+
const doFetch = async () => apiClient.getEnvironmentSettings({
|
|
327
|
+
environmentId: core.environmentId,
|
|
328
|
+
sdkVersion: `${CLIENT_SDK_NAME}/${core.version}`
|
|
329
|
+
}, { credentials: "omit" });
|
|
330
|
+
const projectSettings = await retryOnFail({
|
|
331
|
+
fn: doFetch,
|
|
332
|
+
maxRetries: 2
|
|
333
|
+
});
|
|
334
|
+
core.state.set({ projectSettings: projectSettings ?? null });
|
|
335
|
+
await core.storage.setItem(projectSettingsExpirationStorageKeySchema, Date.now() + PROJECT_SETTINGS_EXPIRATION_TIME);
|
|
336
|
+
return projectSettings;
|
|
337
|
+
};
|
|
338
|
+
const __fetchProjectSettings_impl = fetchProjectSettings;
|
|
339
|
+
const __fetchProjectSettings_wrapped = instrumentFunction({
|
|
340
|
+
fn: __fetchProjectSettings_impl,
|
|
341
|
+
functionName: "fetchProjectSettings",
|
|
342
|
+
getCore: () => {
|
|
343
|
+
try {
|
|
344
|
+
return getCore(getDefaultClient());
|
|
345
|
+
} catch {
|
|
346
|
+
return;
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
});
|
|
350
|
+
|
|
217
351
|
//#endregion
|
|
218
352
|
//#region src/modules/sessionKeys/generateSessionKeys/generateSessionKeys.ts
|
|
219
353
|
/** @instrumented */
|
|
@@ -236,6 +370,115 @@ const __generateSessionKeys_wrapped = instrumentFunction({
|
|
|
236
370
|
}
|
|
237
371
|
});
|
|
238
372
|
|
|
373
|
+
//#endregion
|
|
374
|
+
//#region src/modules/wallets/utils/getAvailableWalletProvidersFromWalletAccounts/getAvailableWalletProvidersFromWalletAccounts.ts
|
|
375
|
+
/** @not-instrumented */
|
|
376
|
+
const getAvailableWalletProvidersFromWalletAccounts = (client) => {
|
|
377
|
+
const core = getCore(client);
|
|
378
|
+
const walletProvidersMap = /* @__PURE__ */ new Map();
|
|
379
|
+
__getWalletAccounts_wrapped(client).forEach((walletAccount) => {
|
|
380
|
+
if (walletProvidersMap.has(walletAccount.walletProviderKey)) return;
|
|
381
|
+
try {
|
|
382
|
+
const walletProvider = __getWalletProviderFromWalletAccount_wrapped({ walletAccount }, client);
|
|
383
|
+
walletProvidersMap.set(walletAccount.walletProviderKey, walletProvider);
|
|
384
|
+
} catch (error) {
|
|
385
|
+
core.logger.debug("Wallet provider not found for wallet account", {
|
|
386
|
+
error,
|
|
387
|
+
walletAccount: walletAccount.address
|
|
388
|
+
});
|
|
389
|
+
}
|
|
390
|
+
});
|
|
391
|
+
return Array.from(walletProvidersMap.values());
|
|
392
|
+
};
|
|
393
|
+
|
|
394
|
+
//#endregion
|
|
395
|
+
//#region src/modules/wallets/disconnectAndTerminateWalletProviders/disconnectAndTerminateWalletProviders.ts
|
|
396
|
+
/**
|
|
397
|
+
* Disconnect and terminate each wallet provider, if available.
|
|
398
|
+
* @not-instrumented
|
|
399
|
+
*/
|
|
400
|
+
const disconnectAndTerminateWalletProviders = async ({ reason }, client) => {
|
|
401
|
+
const core = getCore(client);
|
|
402
|
+
const walletProviders = getAvailableWalletProvidersFromWalletAccounts(client);
|
|
403
|
+
await Promise.all(walletProviders.map(async (walletProvider) => {
|
|
404
|
+
if (walletProvider.terminate) await walletProvider.terminate({ reason });
|
|
405
|
+
if (walletProvider.disconnect) try {
|
|
406
|
+
await walletProvider.disconnect();
|
|
407
|
+
} catch (err) {
|
|
408
|
+
core.logger.error(`Error disconnecting from wallet ${walletProvider.key}`, err);
|
|
409
|
+
}
|
|
410
|
+
}));
|
|
411
|
+
};
|
|
412
|
+
|
|
413
|
+
//#endregion
|
|
414
|
+
//#region src/modules/auth/logoutWithReason/logoutWithReason.ts
|
|
415
|
+
/**
|
|
416
|
+
* Logs the user out with an explicit reason.
|
|
417
|
+
*
|
|
418
|
+
* Revokes the session, clears auth state, terminates wallet providers, and
|
|
419
|
+
* emits the `logout` client event with the given reason. The reason is also
|
|
420
|
+
* captured as an argument on the function-instrumentation event, which is
|
|
421
|
+
* how Datadog distinguishes between different logout causes.
|
|
422
|
+
*
|
|
423
|
+
* Use this instead of the public `logout` when triggering a logout from
|
|
424
|
+
* internal or extension code — the caller owns the reason string, so the
|
|
425
|
+
* telemetry correctly attributes *why* the logout happened.
|
|
426
|
+
*
|
|
427
|
+
* @param params - The logout params.
|
|
428
|
+
* @param params.reason - Why the logout is being triggered. Extension authors
|
|
429
|
+
* needing a reason outside the SDK catalog can cast with `as LogoutReason`.
|
|
430
|
+
* @param client - The Dynamic client instance.
|
|
431
|
+
* @instrumented
|
|
432
|
+
*/
|
|
433
|
+
const logoutWithReason = async ({ reason }, client) => {
|
|
434
|
+
const core = getCore(client);
|
|
435
|
+
core.logger.debug("[logoutWithReason] Logging out...", { reason });
|
|
436
|
+
await disconnectAndTerminateWalletProviders({ reason }, client);
|
|
437
|
+
if (client.user !== null) {
|
|
438
|
+
const apiClient = __createApiClient_wrapped({}, client);
|
|
439
|
+
try {
|
|
440
|
+
await apiClient.revokeSession({ environmentId: core.environmentId });
|
|
441
|
+
} catch (error) {
|
|
442
|
+
core.logger.error("Failed to revoke session", error);
|
|
443
|
+
}
|
|
444
|
+
/**
|
|
445
|
+
* This deletes the auth cookie if it exists.
|
|
446
|
+
* If the cookie doesn't exist, this sets a new cookie that expires immediately.
|
|
447
|
+
*/
|
|
448
|
+
if (isCookieEnabled(client)) setCookie(`${DYNAMIC_AUTH_COOKIE_NAME}=; Max-Age=-99999999; path=/; SameSite=Lax`);
|
|
449
|
+
}
|
|
450
|
+
await core.keychain.removeKey("session");
|
|
451
|
+
core.state.set({
|
|
452
|
+
captchaToken: null,
|
|
453
|
+
elevatedAccessTokens: [],
|
|
454
|
+
legacyToken: null,
|
|
455
|
+
mfaToken: null,
|
|
456
|
+
sessionExpiresAt: null,
|
|
457
|
+
sessionKeys: null,
|
|
458
|
+
token: null,
|
|
459
|
+
unverifiedWalletAccounts: [],
|
|
460
|
+
user: null
|
|
461
|
+
});
|
|
462
|
+
emitEvent({
|
|
463
|
+
args: { reason },
|
|
464
|
+
event: "logout"
|
|
465
|
+
}, client);
|
|
466
|
+
__fetchProjectSettings_wrapped(client);
|
|
467
|
+
__generateSessionKeys_wrapped(client);
|
|
468
|
+
};
|
|
469
|
+
const __logoutWithReason_impl = logoutWithReason;
|
|
470
|
+
const __logoutWithReason_wrapped = instrumentFunction({
|
|
471
|
+
fn: __logoutWithReason_impl,
|
|
472
|
+
functionName: "logoutWithReason",
|
|
473
|
+
getCore: () => {
|
|
474
|
+
try {
|
|
475
|
+
return getCore(getDefaultClient());
|
|
476
|
+
} catch {
|
|
477
|
+
return;
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
});
|
|
481
|
+
|
|
239
482
|
//#endregion
|
|
240
483
|
//#region src/utils/getBuffer/getBuffer.ts
|
|
241
484
|
/** @not-instrumented */
|
|
@@ -420,6 +663,49 @@ const __createLogger_wrapped = instrumentFunction({
|
|
|
420
663
|
}
|
|
421
664
|
});
|
|
422
665
|
|
|
666
|
+
//#endregion
|
|
667
|
+
//#region src/errors/NativeModuleNotLinkedError.ts
|
|
668
|
+
var NativeModuleNotLinkedError = class extends BaseError {
|
|
669
|
+
constructor({ moduleName }) {
|
|
670
|
+
super({
|
|
671
|
+
cause: null,
|
|
672
|
+
code: "native_module_not_linked_error",
|
|
673
|
+
details: [
|
|
674
|
+
`The "${moduleName}" TurboModule is not registered with React Native.`,
|
|
675
|
+
"This usually means the native module was not autolinked into the host app,",
|
|
676
|
+
"or the app binary was not rebuilt after installing the SDK.",
|
|
677
|
+
"",
|
|
678
|
+
"To resolve:",
|
|
679
|
+
" 1. Ensure \"@dynamic-labs-sdk/client\" is a direct dependency of the app",
|
|
680
|
+
" and reinstall (e.g. `pnpm install`).",
|
|
681
|
+
" 2. Rebuild the native app:",
|
|
682
|
+
" iOS: `cd ios && pod install && cd .. && npx react-native run-ios`",
|
|
683
|
+
" Android: `npx react-native run-android`",
|
|
684
|
+
" Expo: `npx expo prebuild --clean` then run the app.",
|
|
685
|
+
" 3. Confirm autolinking sees the package:",
|
|
686
|
+
" `npx expo-modules-autolinking react-native-config --json`"
|
|
687
|
+
].join("\n"),
|
|
688
|
+
docsUrl: null,
|
|
689
|
+
name: "NativeModuleNotLinkedError",
|
|
690
|
+
shortMessage: `Native TurboModule "${moduleName}" is not linked.`
|
|
691
|
+
});
|
|
692
|
+
}
|
|
693
|
+
};
|
|
694
|
+
|
|
695
|
+
//#endregion
|
|
696
|
+
//#region src/turboModules/NativeKeychain.ts
|
|
697
|
+
var NativeKeychain_default = TurboModuleRegistry.getEnforcing("Keychain");
|
|
698
|
+
|
|
699
|
+
//#endregion
|
|
700
|
+
//#region src/utils/base64urlFromBytes/base64urlFromBytes.ts
|
|
701
|
+
/**
|
|
702
|
+
* Encodes a Uint8Array to a base64url string (RFC 4648 S5, no padding).
|
|
703
|
+
* Used to encode binary data before sending to native modules over the bridge.
|
|
704
|
+
*
|
|
705
|
+
* @not-instrumented
|
|
706
|
+
*/
|
|
707
|
+
const base64urlFromBytes = (bytes) => btoa(String.fromCodePoint(...bytes)).replaceAll("+", "-").replaceAll("/", "_").replaceAll("=", "");
|
|
708
|
+
|
|
423
709
|
//#endregion
|
|
424
710
|
//#region src/utils/bufferToHex/bufferToHex.ts
|
|
425
711
|
/**
|
|
@@ -428,6 +714,19 @@ const __createLogger_wrapped = instrumentFunction({
|
|
|
428
714
|
*/
|
|
429
715
|
const bufferToHex = (buffer) => [...buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer)].map((x) => x.toString(16).padStart(2, "0")).join("");
|
|
430
716
|
|
|
717
|
+
//#endregion
|
|
718
|
+
//#region src/utils/bytesFromBase64url/bytesFromBase64url.ts
|
|
719
|
+
/**
|
|
720
|
+
* Decodes a base64url-encoded string (RFC 4648 S5, no padding) to a Uint8Array.
|
|
721
|
+
* Used to decode binary data received from native modules over the bridge.
|
|
722
|
+
*
|
|
723
|
+
* @not-instrumented
|
|
724
|
+
*/
|
|
725
|
+
const bytesFromBase64url = (s) => {
|
|
726
|
+
const base64 = s.replaceAll("-", "+").replaceAll("_", "/");
|
|
727
|
+
return Uint8Array.from(atob(base64), (c) => c.codePointAt(0) ?? 0);
|
|
728
|
+
};
|
|
729
|
+
|
|
431
730
|
//#endregion
|
|
432
731
|
//#region src/utils/compressRawPublicKey/compressRawPublicKey.ts
|
|
433
732
|
/**
|
|
@@ -443,157 +742,125 @@ const compressRawPublicKey = (rawPublicKey) => {
|
|
|
443
742
|
};
|
|
444
743
|
|
|
445
744
|
//#endregion
|
|
446
|
-
//#region src/
|
|
447
|
-
var
|
|
448
|
-
constructor(
|
|
745
|
+
//#region src/utils/derToP1363/InvalidDERSignatureError.ts
|
|
746
|
+
var InvalidDERSignatureError = class extends BaseError {
|
|
747
|
+
constructor(message) {
|
|
449
748
|
super({
|
|
450
749
|
cause: null,
|
|
451
|
-
code: "
|
|
750
|
+
code: "invalid_der_signature_error",
|
|
452
751
|
docsUrl: null,
|
|
453
|
-
name: "
|
|
454
|
-
shortMessage:
|
|
752
|
+
name: "InvalidDERSignatureError",
|
|
753
|
+
shortMessage: message
|
|
455
754
|
});
|
|
456
755
|
}
|
|
457
756
|
};
|
|
458
757
|
|
|
459
758
|
//#endregion
|
|
460
|
-
//#region src/
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
759
|
+
//#region src/utils/derToP1363/derToP1363.ts
|
|
760
|
+
/**
|
|
761
|
+
* Converts a DER/X9.62 encoded ECDSA signature to IEEE P1363 format (r || s).
|
|
762
|
+
* Native secure enclaves produce DER-encoded signatures; the server expects P1363.
|
|
763
|
+
*
|
|
764
|
+
* @not-instrumented
|
|
765
|
+
*/
|
|
766
|
+
const derToP1363 = (der) => {
|
|
767
|
+
if (der.length < 8 || der[0] !== 48) throw new InvalidDERSignatureError("Invalid DER signature format");
|
|
768
|
+
let offset = 2;
|
|
769
|
+
if (offset >= der.length || der[offset] !== 2) throw new InvalidDERSignatureError("Invalid DER signature: missing r INTEGER tag");
|
|
770
|
+
offset += 1;
|
|
771
|
+
if (offset >= der.length) throw new InvalidDERSignatureError("Invalid DER signature: missing r length");
|
|
772
|
+
const rLen = der[offset];
|
|
773
|
+
offset += 1;
|
|
774
|
+
if (offset + rLen > der.length) throw new InvalidDERSignatureError("Invalid DER signature: r bytes out of bounds");
|
|
775
|
+
let rBytes = der.slice(offset, offset + rLen);
|
|
776
|
+
offset += rLen;
|
|
777
|
+
if (offset >= der.length || der[offset] !== 2) throw new InvalidDERSignatureError("Invalid DER signature: missing s INTEGER tag");
|
|
778
|
+
offset += 1;
|
|
779
|
+
if (offset >= der.length) throw new InvalidDERSignatureError("Invalid DER signature: missing s length");
|
|
780
|
+
const sLen = der[offset];
|
|
781
|
+
offset += 1;
|
|
782
|
+
if (offset + sLen > der.length) throw new InvalidDERSignatureError("Invalid DER signature: s bytes out of bounds");
|
|
783
|
+
let sBytes = der.slice(offset, offset + sLen);
|
|
784
|
+
if (rBytes.length === 33 && rBytes[0] === 0) rBytes = rBytes.slice(1);
|
|
785
|
+
if (sBytes.length === 33 && sBytes[0] === 0) sBytes = sBytes.slice(1);
|
|
786
|
+
const result = new Uint8Array(64);
|
|
787
|
+
result.set(rBytes, 32 - rBytes.length);
|
|
788
|
+
result.set(sBytes, 64 - sBytes.length);
|
|
789
|
+
return result;
|
|
790
|
+
};
|
|
489
791
|
|
|
490
792
|
//#endregion
|
|
491
|
-
//#region src/services/keychain/
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
});
|
|
793
|
+
//#region src/services/keychain/createKeychainService/ImportKeyNotSupportedError.ts
|
|
794
|
+
var ImportKeyNotSupportedError = class extends BaseError {
|
|
795
|
+
constructor() {
|
|
796
|
+
super({
|
|
797
|
+
cause: null,
|
|
798
|
+
code: "import_key_not_supported_error",
|
|
799
|
+
details: "Hardware-backed keystores cannot import external private keys.",
|
|
800
|
+
docsUrl: null,
|
|
801
|
+
name: "ImportKeyNotSupportedError",
|
|
802
|
+
shortMessage: "importKey is not supported on React Native."
|
|
803
|
+
});
|
|
804
|
+
}
|
|
805
|
+
};
|
|
502
806
|
|
|
503
807
|
//#endregion
|
|
504
|
-
//#region src/services/keychain/
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
return await operation(db);
|
|
515
|
-
} finally {
|
|
516
|
-
db.close();
|
|
808
|
+
//#region src/services/keychain/createKeychainService/KeyNotFoundError.ts
|
|
809
|
+
var KeyNotFoundError = class extends BaseError {
|
|
810
|
+
constructor(keyName) {
|
|
811
|
+
super({
|
|
812
|
+
cause: null,
|
|
813
|
+
code: "key_not_found",
|
|
814
|
+
docsUrl: null,
|
|
815
|
+
name: "KeyNotFoundError",
|
|
816
|
+
shortMessage: `Key "${keyName}" not found in keychain`
|
|
817
|
+
});
|
|
517
818
|
}
|
|
518
819
|
};
|
|
519
820
|
|
|
520
821
|
//#endregion
|
|
521
|
-
//#region src/services/keychain/
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
822
|
+
//#region src/services/keychain/createKeychainService/createKeychainService.native.ts
|
|
823
|
+
/**
|
|
824
|
+
* Creates a KeychainService backed by the platform's secure hardware
|
|
825
|
+
* (iOS Secure Enclave / Android KeyStore with StrongBox or TEE).
|
|
826
|
+
*
|
|
827
|
+
* Keys are generated and stored inside the secure hardware and never
|
|
828
|
+
* leave the device. The native module returns base64url-encoded data
|
|
829
|
+
* which this wrapper converts to the hex format the SDK expects.
|
|
830
|
+
*
|
|
831
|
+
* @throws NativeModuleNotLinkedError if the native Keychain TurboModule is not available.
|
|
832
|
+
*
|
|
833
|
+
* @instrumented
|
|
834
|
+
*/
|
|
835
|
+
const createKeychainService = () => {
|
|
836
|
+
if (NativeKeychain_default == null) throw new NativeModuleNotLinkedError({ moduleName: "Keychain" });
|
|
837
|
+
const nativeModule = NativeKeychain_default;
|
|
526
838
|
const generateKey = async (keyName) => {
|
|
527
|
-
|
|
528
|
-
name: "ECDSA",
|
|
529
|
-
namedCurve: "P-256"
|
|
530
|
-
}, false, ["sign"]);
|
|
531
|
-
const publicKeyHex = bufferToHex(compressRawPublicKey(await crypto.subtle.exportKey("raw", keyPair.publicKey)));
|
|
532
|
-
await withDatabase({
|
|
533
|
-
dbName,
|
|
534
|
-
operation: (db) => setIndexedDBItem(db, {
|
|
535
|
-
keyName,
|
|
536
|
-
privateKey: keyPair.privateKey,
|
|
537
|
-
publicKeyHex
|
|
538
|
-
})
|
|
539
|
-
});
|
|
540
|
-
return publicKeyHex;
|
|
839
|
+
return bufferToHex(compressRawPublicKey(bytesFromBase64url((await nativeModule.generateKeyPair(keyName)).publicKey).buffer));
|
|
541
840
|
};
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
kty: jwk.kty,
|
|
550
|
-
x: jwk.x,
|
|
551
|
-
y: jwk.y
|
|
552
|
-
};
|
|
553
|
-
const publicCryptoKey = await crypto.subtle.importKey("jwk", publicJwk, {
|
|
554
|
-
name: "ECDSA",
|
|
555
|
-
namedCurve: "P-256"
|
|
556
|
-
}, true, ["verify"]);
|
|
557
|
-
const publicKeyHex = bufferToHex(compressRawPublicKey(await crypto.subtle.exportKey("raw", publicCryptoKey)));
|
|
558
|
-
await withDatabase({
|
|
559
|
-
dbName,
|
|
560
|
-
operation: (db) => setIndexedDBItem(db, {
|
|
561
|
-
keyName,
|
|
562
|
-
privateKey,
|
|
563
|
-
publicKeyHex
|
|
564
|
-
})
|
|
565
|
-
});
|
|
566
|
-
return publicKeyHex;
|
|
841
|
+
/**
|
|
842
|
+
* Importing external private keys is not supported on hardware-backed
|
|
843
|
+
* keystores (Secure Enclave / Android KeyStore). Keys must be generated
|
|
844
|
+
* on-device via generateKey().
|
|
845
|
+
*/
|
|
846
|
+
const importKey = () => {
|
|
847
|
+
throw new ImportKeyNotSupportedError();
|
|
567
848
|
};
|
|
568
849
|
const getPublicKey = async (keyName) => {
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
}))?.publicKeyHex ?? null;
|
|
850
|
+
const result = await nativeModule.getPublicKey(keyName);
|
|
851
|
+
if (result == null) return null;
|
|
852
|
+
return bufferToHex(compressRawPublicKey(bytesFromBase64url(result.publicKey).buffer));
|
|
573
853
|
};
|
|
574
854
|
const sign = async (keyName, message) => {
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
});
|
|
579
|
-
if (!entry) throw new KeyNotFoundError(keyName);
|
|
580
|
-
const data = new TextEncoder().encode(message);
|
|
581
|
-
return bufferToHex(await crypto.subtle.sign({
|
|
582
|
-
hash: { name: "SHA-256" },
|
|
583
|
-
name: "ECDSA"
|
|
584
|
-
}, entry.privateKey, data));
|
|
855
|
+
if (!await nativeModule.hasKey(keyName)) throw new KeyNotFoundError(keyName);
|
|
856
|
+
const base64urlPayload = base64urlFromBytes(new TextEncoder().encode(message));
|
|
857
|
+
return bufferToHex(derToP1363(bytesFromBase64url((await nativeModule.sign(keyName, base64urlPayload)).signature)));
|
|
585
858
|
};
|
|
586
859
|
const hasKey = async (keyName) => {
|
|
587
|
-
return
|
|
588
|
-
dbName,
|
|
589
|
-
operation: (db) => getIndexedDBItem(db, keyName)
|
|
590
|
-
}) !== void 0;
|
|
860
|
+
return nativeModule.hasKey(keyName);
|
|
591
861
|
};
|
|
592
862
|
const removeKey = async (keyName) => {
|
|
593
|
-
await
|
|
594
|
-
dbName,
|
|
595
|
-
operation: (db) => deleteIndexedDBItem(db, keyName)
|
|
596
|
-
});
|
|
863
|
+
await nativeModule.deleteKey(keyName);
|
|
597
864
|
};
|
|
598
865
|
return {
|
|
599
866
|
generateKey,
|
|
@@ -604,18 +871,6 @@ const createIndexedDBKeychainService = (params) => {
|
|
|
604
871
|
sign
|
|
605
872
|
};
|
|
606
873
|
};
|
|
607
|
-
const __createIndexedDBKeychainService_impl = createIndexedDBKeychainService;
|
|
608
|
-
const __createIndexedDBKeychainService_wrapped = instrumentFunction({
|
|
609
|
-
fn: __createIndexedDBKeychainService_impl,
|
|
610
|
-
functionName: "createIndexedDBKeychainService",
|
|
611
|
-
getCore: () => {
|
|
612
|
-
try {
|
|
613
|
-
return getCore(getDefaultClient());
|
|
614
|
-
} catch {
|
|
615
|
-
return;
|
|
616
|
-
}
|
|
617
|
-
}
|
|
618
|
-
});
|
|
619
874
|
|
|
620
875
|
//#endregion
|
|
621
876
|
//#region src/errors/InvalidRealtimePublishError.ts
|
|
@@ -1298,5 +1553,5 @@ const __getNetworkProviderFromNetworkId_wrapped = instrumentFunction({
|
|
|
1298
1553
|
});
|
|
1299
1554
|
|
|
1300
1555
|
//#endregion
|
|
1301
|
-
export {
|
|
1302
|
-
//# sourceMappingURL=getNetworkProviderFromNetworkId-
|
|
1556
|
+
export { REFRESH_USER_STATE_FROM_COOKIE_TRACKER_KEY as A, __createLocalStorageAdapter_wrapped as B, __createCrossTabBroadcast_wrapped as C, FETCH_PROJECT_SETTINGS_TRACKER_KEY as D, __createDeferredPromise_wrapped as E, __generateSessionKeys_wrapped as F, retryOnFail as H, __fetchProjectSettings_wrapped as I, __createStorageKeySchema_wrapped as L, isServerSideRendering as M, getBuffer as N, GENERATE_SESSION_KEYS_TRACKER_KEY as O, __logoutWithReason_wrapped as P, __createStorage_wrapped as R, __createLogger_wrapped as S, CannotTrackError as T, __subscribeWithSelector_wrapped as U, isSignedIn as V, isEqualShallow as W, WalletAlreadyLinkedToAnotherUserError as _, __updateWalletProviderKeysForVerifiedCredentials_wrapped as a, createKeychainService as b, __createSignInMessageStatement_wrapped as c, __createVisit_wrapped as d, hasExtension as f, isCaptchaRequired as g, __consumeCaptchaToken_wrapped as h, __getNetworksData_wrapped as i, REFRESH_USER_STATE_FROM_VALID_TOKEN_TRACKER_KEY as j, INITIALIZE_STORAGE_SYNC_TRACKER_KEY as k, formatSignInMessage as l, __setCaptchaToken_wrapped as m, __getNetworkProviders_wrapped as n, __verifyMessageSignatureOwnership_wrapped as o, __createRealtimeChannelSchema_wrapped as p, getNetworkProviderBuilderRegistry as r, __removeUnverifiedWalletAccount_wrapped as s, __getNetworkProviderFromNetworkId_wrapped as t, __setUnverifiedWalletAccounts_wrapped as u, NoNetworkProvidersError as v, CrossTabBroadcastMessageSchema as w, NativeModuleNotLinkedError as x, __createRealtimeService_wrapped as y, InvalidStorageSet as z };
|
|
1557
|
+
//# sourceMappingURL=getNetworkProviderFromNetworkId-BRWuk0I8.native.esm.js.map
|