@dynamic-labs-sdk/client 0.24.1 → 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-BDHw6nr1.native.esm.js +1178 -0
- package/dist/InvalidParamError-BDHw6nr1.native.esm.js.map +1 -0
- package/dist/{InvalidParamError-9IR2C0up.cjs.js → InvalidParamError-BqDEZ6er.cjs.js} +5 -5
- package/dist/InvalidParamError-BqDEZ6er.cjs.js.map +1 -0
- package/dist/{InvalidParamError-Bq5zAFj4.esm.js → InvalidParamError-DcN56mC-.esm.js} +4 -4
- package/dist/InvalidParamError-DcN56mC-.esm.js.map +1 -0
- package/dist/NotWaasWalletAccountError-B_TYSgak.native.esm.js +50 -0
- package/dist/NotWaasWalletAccountError-B_TYSgak.native.esm.js.map +1 -0
- package/dist/{NotWaasWalletAccountError-CIJRq-EG.esm.js → NotWaasWalletAccountError-CQ7CMol4.esm.js} +3 -3
- package/dist/{NotWaasWalletAccountError-CIJRq-EG.esm.js.map → NotWaasWalletAccountError-CQ7CMol4.esm.js.map} +1 -1
- package/dist/{NotWaasWalletAccountError-DpRIY6Pd.cjs.js → NotWaasWalletAccountError-ftYfHk_N.cjs.js} +3 -3
- package/dist/{NotWaasWalletAccountError-DpRIY6Pd.cjs.js.map → NotWaasWalletAccountError-ftYfHk_N.cjs.js.map} +1 -1
- package/dist/client/core/createCore/createCore.d.ts.map +1 -1
- package/dist/client/core/types/DynamicCore.d.ts +4 -0
- package/dist/client/core/types/DynamicCore.d.ts.map +1 -1
- package/dist/client/types/DynamicClientConfig.d.ts +10 -0
- package/dist/client/types/DynamicClientConfig.d.ts.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 +417 -0
- package/dist/core.native.esm.js.map +1 -0
- package/dist/errors/APIError/APIError.d.ts.map +1 -1
- package/dist/errors/InvalidParamError.d.ts.map +1 -1
- package/dist/errors/InvalidStorageValue.d.ts.map +1 -1
- package/dist/errors/InvalidWalletProviderKeyError.d.ts.map +1 -1
- package/dist/errors/MethodNotImplementedError.d.ts.map +1 -1
- package/dist/errors/MissingSocialUrlParamError.d.ts.map +1 -1
- package/dist/errors/NativeModuleNotLinkedError.d.ts +9 -0
- package/dist/errors/NativeModuleNotLinkedError.d.ts.map +1 -0
- package/dist/errors/NoSmartWalletAccountSignerFoundError.d.ts.map +1 -1
- package/dist/errors/ReactNativeOnlyError.d.ts +9 -0
- package/dist/errors/ReactNativeOnlyError.d.ts.map +1 -0
- package/dist/errors/UnavailableInServerSideError.d.ts.map +1 -1
- package/dist/errors/ValueMustBeDefinedError.d.ts.map +1 -1
- package/dist/errors/WalletAccountAlreadyVerifiedError.d.ts.map +1 -1
- package/dist/exports/core.d.ts +8 -2
- package/dist/exports/core.d.ts.map +1 -1
- package/dist/exports/index.d.ts +4 -4
- package/dist/exports/index.d.ts.map +1 -1
- package/dist/getNetworkProviderFromNetworkId-BRWuk0I8.native.esm.js +1557 -0
- package/dist/getNetworkProviderFromNetworkId-BRWuk0I8.native.esm.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-C4aba1hS.esm.js → getNetworkProviderFromNetworkId-COHxfpo-.esm.js} +275 -48
- package/dist/getNetworkProviderFromNetworkId-COHxfpo-.esm.js.map +1 -0
- package/dist/{getNetworkProviderFromNetworkId-COxYamJy.cjs.js → getNetworkProviderFromNetworkId-ClfETwqS.cjs.js} +304 -53
- package/dist/getNetworkProviderFromNetworkId-ClfETwqS.cjs.js.map +1 -0
- package/dist/{getSignedSessionId-_vjv5TNw.esm.js → getSignedSessionId-B6ry-rvs.esm.js} +3 -3
- package/dist/{getSignedSessionId-_vjv5TNw.esm.js.map → getSignedSessionId-B6ry-rvs.esm.js.map} +1 -1
- package/dist/{getSignedSessionId-D7uV3dw0.cjs.js → getSignedSessionId-Bkw9TATj.cjs.js} +3 -3
- package/dist/{getSignedSessionId-D7uV3dw0.cjs.js.map → getSignedSessionId-Bkw9TATj.cjs.js.map} +1 -1
- package/dist/getSignedSessionId-C58DvQAd.native.esm.js +67 -0
- package/dist/getSignedSessionId-C58DvQAd.native.esm.js.map +1 -0
- package/dist/{getVerifiedCredentialForWalletAccount-Df_wN20i.cjs.js → getVerifiedCredentialForWalletAccount-DEiU9FZG.cjs.js} +11 -10
- package/dist/getVerifiedCredentialForWalletAccount-DEiU9FZG.cjs.js.map +1 -0
- package/dist/{getVerifiedCredentialForWalletAccount-Y-aJ2rY7.esm.js → getVerifiedCredentialForWalletAccount-DP4VQBly.esm.js} +10 -9
- package/dist/getVerifiedCredentialForWalletAccount-DP4VQBly.esm.js.map +1 -0
- package/dist/getVerifiedCredentialForWalletAccount-d_bHvLLE.native.esm.js +784 -0
- package/dist/getVerifiedCredentialForWalletAccount-d_bHvLLE.native.esm.js.map +1 -0
- package/dist/index.cjs.js +143 -320
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +139 -316
- package/dist/index.esm.js.map +1 -1
- package/dist/index.native.esm.js +6799 -0
- package/dist/index.native.esm.js.map +1 -0
- package/dist/isMfaRequiredForAction-Cjbuyen3.native.esm.js +89 -0
- package/dist/isMfaRequiredForAction-Cjbuyen3.native.esm.js.map +1 -0
- package/dist/{isMfaRequiredForAction-Cc6jkbY5.esm.js → isMfaRequiredForAction-D8GPFYzv.esm.js} +2 -2
- package/dist/{isMfaRequiredForAction-Cc6jkbY5.esm.js.map → isMfaRequiredForAction-D8GPFYzv.esm.js.map} +1 -1
- package/dist/{isMfaRequiredForAction-cfGmMd_g.cjs.js → isMfaRequiredForAction-mZub0YwI.cjs.js} +2 -2
- package/dist/{isMfaRequiredForAction-cfGmMd_g.cjs.js.map → isMfaRequiredForAction-mZub0YwI.cjs.js.map} +1 -1
- package/dist/modules/auth/decodeJwt/decodeJwt.d.ts.map +1 -1
- package/dist/modules/auth/externalAuth/requestExternalAuthElevatedToken/requestExternalAuthElevatedToken.d.ts.map +1 -1
- package/dist/modules/auth/externalAuth/signInWithExternalJwt/signInWithExternalJwt.d.ts +0 -1
- package/dist/modules/auth/externalAuth/signInWithExternalJwt/signInWithExternalJwt.d.ts.map +1 -1
- package/dist/modules/auth/extractSessionId/extractSessionId.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/social/removeDynamicOauthParamsFromUrl/removeDynamicOauthParamsFromUrl.d.ts.map +1 -1
- package/dist/modules/auth/updateAuthFromVerifyResponse/elevatedAccessTokens/normalizeScopes/normalizeScopes.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/checkout/attachCheckoutTransactionSource/attachCheckoutTransactionSource.d.ts +34 -6
- package/dist/modules/checkout/attachCheckoutTransactionSource/attachCheckoutTransactionSource.d.ts.map +1 -1
- package/dist/modules/checkout/broadcastCheckoutTransaction/broadcastCheckoutTransaction.d.ts +11 -3
- package/dist/modules/checkout/broadcastCheckoutTransaction/broadcastCheckoutTransaction.d.ts.map +1 -1
- package/dist/modules/checkout/checkout.types.d.ts +1 -0
- package/dist/modules/checkout/checkout.types.d.ts.map +1 -1
- package/dist/modules/checkout/trackCheckoutTransaction/trackCheckoutTransaction.d.ts +7 -3
- package/dist/modules/checkout/trackCheckoutTransaction/trackCheckoutTransaction.d.ts.map +1 -1
- package/dist/modules/checkout/utils/createCheckoutSessionTokenStorageKey/createCheckoutSessionTokenStorageKey.d.ts.map +1 -1
- package/dist/modules/checkout/utils/subscribeToCheckoutTransaction/subscribeToCheckoutTransaction.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/keychainMigration/migrateSessionKeyToKeychain/KeyMigrationError.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/otp/sendEmailOTP/sendEmailOTP.d.ts +0 -1
- package/dist/modules/otp/sendEmailOTP/sendEmailOTP.d.ts.map +1 -1
- package/dist/modules/otp/sendSmsOTP/sendSmsOTP.d.ts +0 -1
- package/dist/modules/otp/sendSmsOTP/sendSmsOTP.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/user/updateUser/updateUser.d.ts +0 -1
- package/dist/modules/user/updateUser/updateUser.d.ts.map +1 -1
- package/dist/modules/waas/createWaasClient/createWaasClient.d.ts.map +1 -1
- package/dist/modules/waas/createWaasProvider/createWaasProvider.d.ts.map +1 -1
- package/dist/modules/waas/getWaasChainNameFromChain/getWaasChainNameFromChain.d.ts.map +1 -1
- package/dist/modules/wallets/networks/createBaseNetworkProvider/createBaseNetworkProvider.d.ts.map +1 -1
- package/dist/modules/wallets/networks/getSdkChainFromApiChainName/getSdkChainFromApiChainName.d.ts.map +1 -1
- package/dist/modules/wallets/utils/assertWalletProviderMethodDefined/assertWalletProviderMethodDefined.d.ts.map +1 -1
- package/dist/modules/wallets/utils/getAllProvidersFromWindow/getAllProvidersFromWindow.d.ts.map +1 -1
- package/dist/modules/wallets/utils/getInjectedProviderFromWindow/getInjectedProviderFromWindow.d.ts.map +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/modules/wallets/walletProvider/splitWalletProviderKey/splitWalletProviderKey.d.ts.map +1 -1
- package/dist/services/instrumentation/createInstrumentation/createInstrumentation.d.ts.map +1 -1
- package/dist/services/instrumentation/instrumentFunction/extractParams/extractParams.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/logger/createLogger/createLogger.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/realtime/createRealtimeService/createRealtimeService.d.ts.map +1 -1
- package/dist/services/realtime/realtime.types.d.ts +1 -0
- package/dist/services/realtime/realtime.types.d.ts.map +1 -1
- package/dist/services/runtimeServices/createRuntimeServiceAccessKey/createRuntimeServiceAccessKey.d.ts.map +1 -1
- package/dist/services/runtimeServices/createRuntimeServices/createRuntimeServices.d.ts.map +1 -1
- 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/createStorage/formatForStorage/isValidDateISOString/isValidDateISOString.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/assertDefined/assertDefined.d.ts.map +1 -1
- package/dist/utils/base64UrlDecode/base64UrlDecode.d.ts.map +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/digestSHA256/digestSHA256.d.ts.map +1 -1
- package/dist/utils/getChainFromVerifiedCredentialChain/getChainFromVerifiedCredentialChain.d.ts.map +1 -1
- package/dist/utils/isEqualShallow/isEqualShallow.d.ts.map +1 -1
- package/dist/utils/isErrorWithCode/isErrorWithCode.d.ts.map +1 -1
- package/dist/utils/isMobile/isMobile.d.ts.map +1 -1
- package/dist/utils/observable/createObservableState/createObservableState.d.ts.map +1 -1
- package/dist/utils/observable/subscribeWithSelector/subscribeWithSelector.d.ts.map +1 -1
- package/dist/utils/randomString/randomString.d.ts +1 -1
- package/dist/utils/randomString/randomString.d.ts.map +1 -1
- package/dist/utils/retryOnFail/InvalidRetryOnFailCallError.d.ts.map +1 -1
- package/dist/utils/setCookie/setCookie.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 +506 -0
- package/dist/waas.native.esm.js.map +1 -0
- package/dist/waasCore.cjs.js +7 -5
- package/dist/waasCore.cjs.js.map +1 -1
- package/dist/waasCore.esm.js +6 -4
- package/dist/waasCore.esm.js.map +1 -1
- package/dist/waasCore.native.esm.js +253 -0
- package/dist/waasCore.native.esm.js.map +1 -0
- 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 +40 -6
- package/react-native.config.cjs +14 -0
- package/dist/InvalidParamError-9IR2C0up.cjs.js.map +0 -1
- package/dist/InvalidParamError-Bq5zAFj4.esm.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-C4aba1hS.esm.js.map +0 -1
- package/dist/getNetworkProviderFromNetworkId-COxYamJy.cjs.js.map +0 -1
- package/dist/getVerifiedCredentialForWalletAccount-Df_wN20i.cjs.js.map +0 -1
- package/dist/getVerifiedCredentialForWalletAccount-Y-aJ2rY7.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
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
buildscript {
|
|
2
|
+
repositories {
|
|
3
|
+
google()
|
|
4
|
+
mavenCentral()
|
|
5
|
+
}
|
|
6
|
+
dependencies {
|
|
7
|
+
classpath "com.android.tools.build:gradle:8.7.2"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
apply plugin: "com.android.library"
|
|
12
|
+
apply plugin: "com.facebook.react"
|
|
13
|
+
apply plugin: "org.jetbrains.kotlin.android"
|
|
14
|
+
|
|
15
|
+
import groovy.json.JsonSlurper
|
|
16
|
+
|
|
17
|
+
def packageJson = new JsonSlurper().parseText(file("../package.json").text)
|
|
18
|
+
def sdkVersion = packageJson.version
|
|
19
|
+
|
|
20
|
+
def safeExtGet(prop, fallback) {
|
|
21
|
+
return rootProject.ext.has(prop) ? rootProject.ext.get(prop) : fallback
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
android {
|
|
25
|
+
namespace "xyz.dynamic.client"
|
|
26
|
+
|
|
27
|
+
compileSdkVersion safeExtGet("compileSdkVersion", 35)
|
|
28
|
+
|
|
29
|
+
defaultConfig {
|
|
30
|
+
minSdkVersion safeExtGet("minSdkVersion", 24)
|
|
31
|
+
targetSdkVersion safeExtGet("targetSdkVersion", 35)
|
|
32
|
+
buildConfigField "String", "DYNAMIC_SDK_VERSION", "\"${sdkVersion}\""
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
buildFeatures {
|
|
36
|
+
buildConfig true
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
buildTypes {
|
|
40
|
+
release {
|
|
41
|
+
minifyEnabled false
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
compileOptions {
|
|
46
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
47
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
kotlinOptions {
|
|
51
|
+
jvmTarget = "17"
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
sourceSets {
|
|
55
|
+
main {
|
|
56
|
+
java.srcDirs += [
|
|
57
|
+
"generated/java",
|
|
58
|
+
"generated/jni"
|
|
59
|
+
]
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
repositories {
|
|
65
|
+
mavenCentral()
|
|
66
|
+
google()
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
dependencies {
|
|
70
|
+
implementation "com.facebook.react:react-android"
|
|
71
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
package xyz.dynamic.client
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.BaseReactPackage
|
|
4
|
+
import com.facebook.react.bridge.NativeModule
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.module.model.ReactModuleInfo
|
|
7
|
+
import com.facebook.react.module.model.ReactModuleInfoProvider
|
|
8
|
+
import xyz.dynamic.client.keychain.KeychainModule
|
|
9
|
+
import xyz.dynamic.client.manifest.ReactNativeManifestModule
|
|
10
|
+
|
|
11
|
+
class DynamicClientPackage : BaseReactPackage() {
|
|
12
|
+
override fun getModule(name: String, reactContext: ReactApplicationContext): NativeModule? {
|
|
13
|
+
return when (name) {
|
|
14
|
+
KeychainModule.NAME -> KeychainModule(reactContext)
|
|
15
|
+
ReactNativeManifestModule.NAME -> ReactNativeManifestModule(reactContext)
|
|
16
|
+
else -> null
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override fun getReactModuleInfoProvider(): ReactModuleInfoProvider {
|
|
21
|
+
return ReactModuleInfoProvider {
|
|
22
|
+
mapOf(
|
|
23
|
+
KeychainModule.NAME to ReactModuleInfo(
|
|
24
|
+
KeychainModule.NAME,
|
|
25
|
+
KeychainModule.NAME,
|
|
26
|
+
false,
|
|
27
|
+
false,
|
|
28
|
+
false,
|
|
29
|
+
true
|
|
30
|
+
),
|
|
31
|
+
ReactNativeManifestModule.NAME to ReactModuleInfo(
|
|
32
|
+
ReactNativeManifestModule.NAME,
|
|
33
|
+
ReactNativeManifestModule.NAME,
|
|
34
|
+
false,
|
|
35
|
+
false,
|
|
36
|
+
false,
|
|
37
|
+
true
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
package xyz.dynamic.client.keychain
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.content.pm.PackageManager
|
|
5
|
+
import android.os.Build
|
|
6
|
+
import android.security.keystore.KeyGenParameterSpec
|
|
7
|
+
import android.security.keystore.KeyProperties
|
|
8
|
+
import android.security.keystore.StrongBoxUnavailableException
|
|
9
|
+
import java.security.KeyPairGenerator
|
|
10
|
+
import java.security.KeyStore
|
|
11
|
+
import java.security.Signature
|
|
12
|
+
import java.security.spec.ECGenParameterSpec
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
* Android KeyStore key manager backed by hardware TEE/StrongBox.
|
|
16
|
+
* Provides P-256 key generation, signing, and management.
|
|
17
|
+
* All public keys are returned in uncompressed SEC1 format (65 bytes: 04 || x || y).
|
|
18
|
+
* All binary data uses base64url encoding (RFC 4648 S5, no padding).
|
|
19
|
+
*/
|
|
20
|
+
class KeyStoreKeyManager {
|
|
21
|
+
|
|
22
|
+
fun isAvailable(context: Context?): Boolean {
|
|
23
|
+
return try {
|
|
24
|
+
val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE)
|
|
25
|
+
keyStore.load(null)
|
|
26
|
+
val hasStrongBox = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && context != null) {
|
|
27
|
+
context.packageManager.hasSystemFeature(PackageManager.FEATURE_STRONGBOX_KEYSTORE)
|
|
28
|
+
} else {
|
|
29
|
+
false
|
|
30
|
+
}
|
|
31
|
+
// Even without StrongBox, Android KeyStore provides TEE-backed keys on most devices
|
|
32
|
+
hasStrongBox || Build.VERSION.SDK_INT >= Build.VERSION_CODES.M
|
|
33
|
+
} catch (e: Exception) {
|
|
34
|
+
false
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
fun hasKey(alias: String): Boolean {
|
|
39
|
+
val keyStore = loadKeyStore()
|
|
40
|
+
return keyStore.containsAlias(alias)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
fun generateKeyPair(alias: String): String {
|
|
44
|
+
require(!hasKey(alias)) { "Key already exists for alias: $alias" }
|
|
45
|
+
|
|
46
|
+
val specBuilder = KeyGenParameterSpec.Builder(
|
|
47
|
+
alias,
|
|
48
|
+
KeyProperties.PURPOSE_SIGN or KeyProperties.PURPOSE_VERIFY
|
|
49
|
+
)
|
|
50
|
+
.setAlgorithmParameterSpec(ECGenParameterSpec("secp256r1"))
|
|
51
|
+
.setDigests(KeyProperties.DIGEST_SHA256)
|
|
52
|
+
|
|
53
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
|
54
|
+
specBuilder.setIsStrongBoxBacked(true)
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
val keyPair = try {
|
|
58
|
+
val kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, ANDROID_KEYSTORE)
|
|
59
|
+
kpg.initialize(specBuilder.build())
|
|
60
|
+
kpg.generateKeyPair()
|
|
61
|
+
} catch (e: Exception) {
|
|
62
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && e is StrongBoxUnavailableException) {
|
|
63
|
+
// Fallback: retry without StrongBox on TEE
|
|
64
|
+
specBuilder.setIsStrongBoxBacked(false)
|
|
65
|
+
val kpg = KeyPairGenerator.getInstance(KeyProperties.KEY_ALGORITHM_EC, ANDROID_KEYSTORE)
|
|
66
|
+
kpg.initialize(specBuilder.build())
|
|
67
|
+
kpg.generateKeyPair()
|
|
68
|
+
} else {
|
|
69
|
+
throw e
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
val publicKeyBytes = extractUncompressedPublicKey(keyPair.public.encoded)
|
|
74
|
+
return base64urlEncode(publicKeyBytes)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
fun getPublicKey(alias: String): String? {
|
|
78
|
+
val keyStore = loadKeyStore()
|
|
79
|
+
val entry = keyStore.getEntry(alias, null)
|
|
80
|
+
|
|
81
|
+
if (entry == null || entry !is KeyStore.PrivateKeyEntry) {
|
|
82
|
+
return null
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
val publicKeyBytes = extractUncompressedPublicKey(entry.certificate.publicKey.encoded)
|
|
86
|
+
return base64urlEncode(publicKeyBytes)
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
fun sign(alias: String, payload: ByteArray): String {
|
|
90
|
+
val keyStore = loadKeyStore()
|
|
91
|
+
val entry = keyStore.getEntry(alias, null)
|
|
92
|
+
|
|
93
|
+
require(entry != null && entry is KeyStore.PrivateKeyEntry) { "Key not found: $alias" }
|
|
94
|
+
|
|
95
|
+
val signature = Signature.getInstance("SHA256withECDSA")
|
|
96
|
+
signature.initSign(entry.privateKey)
|
|
97
|
+
signature.update(payload)
|
|
98
|
+
val signatureBytes = signature.sign()
|
|
99
|
+
|
|
100
|
+
return base64urlEncode(signatureBytes)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
fun deleteKey(alias: String) {
|
|
104
|
+
val keyStore = loadKeyStore()
|
|
105
|
+
keyStore.deleteEntry(alias)
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// region Private helpers
|
|
109
|
+
|
|
110
|
+
private fun loadKeyStore(): KeyStore {
|
|
111
|
+
val keyStore = KeyStore.getInstance(ANDROID_KEYSTORE)
|
|
112
|
+
keyStore.load(null)
|
|
113
|
+
return keyStore
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* Extract uncompressed SEC1 public key (65 bytes: 04 || x || y)
|
|
118
|
+
* from X.509 SubjectPublicKeyInfo DER encoding.
|
|
119
|
+
*/
|
|
120
|
+
private fun extractUncompressedPublicKey(x509Encoded: ByteArray): ByteArray {
|
|
121
|
+
val uncompressedPointLength = 65
|
|
122
|
+
return x509Encoded.copyOfRange(
|
|
123
|
+
x509Encoded.size - uncompressedPointLength,
|
|
124
|
+
x509Encoded.size
|
|
125
|
+
)
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private fun base64urlEncode(data: ByteArray): String {
|
|
129
|
+
return android.util.Base64.encodeToString(
|
|
130
|
+
data,
|
|
131
|
+
android.util.Base64.URL_SAFE or android.util.Base64.NO_WRAP or android.util.Base64.NO_PADDING
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
companion object {
|
|
136
|
+
private const val ANDROID_KEYSTORE = "AndroidKeyStore"
|
|
137
|
+
|
|
138
|
+
fun base64urlDecode(input: String): ByteArray {
|
|
139
|
+
return android.util.Base64.decode(
|
|
140
|
+
input,
|
|
141
|
+
android.util.Base64.URL_SAFE or android.util.Base64.NO_WRAP or android.util.Base64.NO_PADDING
|
|
142
|
+
)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// endregion
|
|
147
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
package xyz.dynamic.client.keychain
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.Promise
|
|
5
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
6
|
+
import com.facebook.react.bridge.WritableMap
|
|
7
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
8
|
+
import xyz.dynamic.client.NativeKeychainSpec
|
|
9
|
+
|
|
10
|
+
@ReactModule(name = KeychainModule.NAME)
|
|
11
|
+
class KeychainModule(reactContext: ReactApplicationContext) :
|
|
12
|
+
NativeKeychainSpec(reactContext) {
|
|
13
|
+
|
|
14
|
+
private val keyManager = KeyStoreKeyManager()
|
|
15
|
+
|
|
16
|
+
companion object {
|
|
17
|
+
const val NAME = "Keychain"
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
override fun getName(): String = NAME
|
|
21
|
+
|
|
22
|
+
override fun isAvailable(promise: Promise) {
|
|
23
|
+
try {
|
|
24
|
+
val context = reactApplicationContext
|
|
25
|
+
promise.resolve(keyManager.isAvailable(context))
|
|
26
|
+
} catch (e: Exception) {
|
|
27
|
+
promise.resolve(false)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
override fun hasKey(key: String, promise: Promise) {
|
|
32
|
+
try {
|
|
33
|
+
promise.resolve(keyManager.hasKey(key))
|
|
34
|
+
} catch (e: Exception) {
|
|
35
|
+
promise.reject("ERR_KEYCHAIN", "Failed to check key: ${e.message}", e)
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
override fun generateKeyPair(key: String, promise: Promise) {
|
|
40
|
+
try {
|
|
41
|
+
val publicKey = keyManager.generateKeyPair(key)
|
|
42
|
+
val result: WritableMap = Arguments.createMap()
|
|
43
|
+
result.putString("publicKey", publicKey)
|
|
44
|
+
promise.resolve(result)
|
|
45
|
+
} catch (e: Exception) {
|
|
46
|
+
promise.reject("ERR_KEYCHAIN", "Failed to generate key pair: ${e.message}", e)
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
override fun getPublicKey(key: String, promise: Promise) {
|
|
51
|
+
try {
|
|
52
|
+
val publicKey = keyManager.getPublicKey(key)
|
|
53
|
+
if (publicKey == null) {
|
|
54
|
+
promise.resolve(null)
|
|
55
|
+
} else {
|
|
56
|
+
val result: WritableMap = Arguments.createMap()
|
|
57
|
+
result.putString("publicKey", publicKey)
|
|
58
|
+
promise.resolve(result)
|
|
59
|
+
}
|
|
60
|
+
} catch (e: Exception) {
|
|
61
|
+
promise.reject("ERR_KEYCHAIN", "Failed to get public key: ${e.message}", e)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
override fun sign(key: String, payload: String, promise: Promise) {
|
|
66
|
+
try {
|
|
67
|
+
val payloadData = KeyStoreKeyManager.base64urlDecode(payload)
|
|
68
|
+
val signature = keyManager.sign(key, payloadData)
|
|
69
|
+
val result: WritableMap = Arguments.createMap()
|
|
70
|
+
result.putString("signature", signature)
|
|
71
|
+
promise.resolve(result)
|
|
72
|
+
} catch (e: Exception) {
|
|
73
|
+
promise.reject("ERR_KEYCHAIN", "Failed to sign: ${e.message}", e)
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
override fun deleteKey(key: String, promise: Promise) {
|
|
78
|
+
try {
|
|
79
|
+
keyManager.deleteKey(key)
|
|
80
|
+
promise.resolve(null)
|
|
81
|
+
} catch (e: Exception) {
|
|
82
|
+
promise.reject("ERR_KEYCHAIN", "Failed to delete key: ${e.message}", e)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
package xyz.dynamic.client.manifest
|
|
2
|
+
|
|
3
|
+
import com.facebook.react.bridge.Arguments
|
|
4
|
+
import com.facebook.react.bridge.ReactApplicationContext
|
|
5
|
+
import com.facebook.react.bridge.WritableMap
|
|
6
|
+
import com.facebook.react.module.annotations.ReactModule
|
|
7
|
+
import xyz.dynamic.client.BuildConfig
|
|
8
|
+
import xyz.dynamic.client.NativeReactNativeManifestSpec
|
|
9
|
+
|
|
10
|
+
@ReactModule(name = ReactNativeManifestModule.NAME)
|
|
11
|
+
class ReactNativeManifestModule(reactContext: ReactApplicationContext) :
|
|
12
|
+
NativeReactNativeManifestSpec(reactContext) {
|
|
13
|
+
|
|
14
|
+
companion object {
|
|
15
|
+
const val NAME = "ReactNativeManifest"
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
override fun getName(): String = NAME
|
|
19
|
+
|
|
20
|
+
override fun getManifest(): WritableMap {
|
|
21
|
+
val manifest = Arguments.createMap()
|
|
22
|
+
manifest.putString("sdkVersion", BuildConfig.DYNAMIC_SDK_VERSION)
|
|
23
|
+
return manifest
|
|
24
|
+
}
|
|
25
|
+
}
|