@tatchi-xyz/sdk 0.35.0 → 0.45.0
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/README.md +36 -447
- package/dist/cjs/core/IndexedDBManager/passkeyClientDB.js +0 -42
- package/dist/cjs/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/emailRecovery.js +40 -10
- package/dist/cjs/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/index.js +38 -17
- package/dist/cjs/core/TatchiPasskey/index.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/linkDevice.js +0 -10
- package/dist/cjs/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/cjs/core/TatchiPasskey/registration.js +13 -11
- package/dist/cjs/core/TatchiPasskey/registration.js.map +1 -1
- package/dist/cjs/core/WalletIframe/client/router.js +0 -1
- package/dist/cjs/core/WalletIframe/client/router.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/LitComponents/confirm-ui.js +2 -10
- package/dist/cjs/core/WebAuthnManager/LitComponents/confirm-ui.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/index.js +4 -1
- package/dist/cjs/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js +3 -2
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js +4 -4
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +3 -9
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +6 -5
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +3 -2
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +3 -2
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js +23 -13
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/VrfWorkerManager/index.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/index.js +13 -4
- package/dist/cjs/core/WebAuthnManager/index.js.map +1 -1
- package/dist/cjs/core/WebAuthnManager/userPreferences.js +31 -119
- package/dist/cjs/core/WebAuthnManager/userPreferences.js.map +1 -1
- package/dist/cjs/core/defaultConfigs.js +0 -1
- package/dist/cjs/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/core/rpcCalls.js +37 -0
- package/dist/cjs/core/rpcCalls.js.map +1 -1
- package/dist/cjs/core/types/signer-worker.js +1 -2
- package/dist/cjs/core/types/signer-worker.js.map +1 -1
- package/dist/cjs/react/components/AccountMenuButton/index.js +56 -45
- package/dist/cjs/react/components/AccountMenuButton/index.js.map +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +1 -1
- package/dist/cjs/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
- package/dist/cjs/react/components/theme/ThemeProvider.js +11 -155
- package/dist/cjs/react/components/theme/ThemeProvider.js.map +1 -1
- package/dist/cjs/react/components/theme/design-tokens.js.map +1 -1
- package/dist/cjs/react/context/TatchiPasskeyProvider.js +7 -1
- package/dist/cjs/react/context/TatchiPasskeyProvider.js.map +1 -1
- package/dist/cjs/react/context/index.js +7 -2
- package/dist/cjs/react/context/index.js.map +1 -1
- package/dist/cjs/react/context/tatchiManagerSingleton.js +2 -6
- package/dist/cjs/react/context/tatchiManagerSingleton.js.map +1 -1
- package/dist/cjs/react/context/useTatchiContextValue.js +7 -9
- package/dist/cjs/react/context/useTatchiContextValue.js.map +1 -1
- package/dist/cjs/react/context/useTatchiWithSdkFlow.js +9 -1
- package/dist/cjs/react/context/useTatchiWithSdkFlow.js.map +1 -1
- package/dist/cjs/react/src/core/IndexedDBManager/passkeyClientDB.js +0 -42
- package/dist/cjs/react/src/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/cjs/react/src/core/TatchiPasskey/emailRecovery.js +40 -10
- package/dist/cjs/react/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/cjs/react/src/core/TatchiPasskey/index.js +38 -17
- package/dist/cjs/react/src/core/TatchiPasskey/index.js.map +1 -1
- package/dist/cjs/react/src/core/TatchiPasskey/linkDevice.js +0 -10
- package/dist/cjs/react/src/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/cjs/react/src/core/TatchiPasskey/registration.js +13 -11
- package/dist/cjs/react/src/core/TatchiPasskey/registration.js.map +1 -1
- package/dist/cjs/react/src/core/WalletIframe/client/router.js +0 -1
- package/dist/cjs/react/src/core/WalletIframe/client/router.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/LitComponents/confirm-ui.js +2 -10
- package/dist/cjs/react/src/core/WebAuthnManager/LitComponents/confirm-ui.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/SignerWorkerManager/index.js +4 -1
- package/dist/cjs/react/src/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js +3 -2
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js +4 -4
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +3 -9
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +6 -5
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +3 -2
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +3 -2
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js +23 -13
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/VrfWorkerManager/index.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/index.js +13 -4
- package/dist/cjs/react/src/core/WebAuthnManager/index.js.map +1 -1
- package/dist/cjs/react/src/core/WebAuthnManager/userPreferences.js +31 -119
- package/dist/cjs/react/src/core/WebAuthnManager/userPreferences.js.map +1 -1
- package/dist/cjs/react/src/core/defaultConfigs.js +0 -1
- package/dist/cjs/react/src/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/react/src/core/rpcCalls.js +37 -0
- package/dist/cjs/react/src/core/rpcCalls.js.map +1 -1
- package/dist/cjs/react/src/core/types/signer-worker.js +1 -2
- package/dist/cjs/react/src/core/types/signer-worker.js.map +1 -1
- package/dist/cjs/react/src/utils/theme.js +9 -0
- package/dist/cjs/react/src/utils/theme.js.map +1 -0
- package/dist/cjs/server/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/cjs/utils/theme.js +9 -0
- package/dist/cjs/utils/theme.js.map +1 -0
- package/dist/esm/core/IndexedDBManager/passkeyClientDB.js +0 -42
- package/dist/esm/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/emailRecovery.js +40 -10
- package/dist/esm/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/index.js +38 -17
- package/dist/esm/core/TatchiPasskey/index.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/linkDevice.js +0 -10
- package/dist/esm/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/esm/core/TatchiPasskey/registration.js +13 -11
- package/dist/esm/core/TatchiPasskey/registration.js.map +1 -1
- package/dist/esm/core/WalletIframe/client/router.js +0 -1
- package/dist/esm/core/WalletIframe/client/router.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/LitComponents/confirm-ui.js +2 -10
- package/dist/esm/core/WebAuthnManager/LitComponents/confirm-ui.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/index.js +4 -1
- package/dist/esm/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js +3 -2
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js +4 -4
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +3 -9
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +6 -5
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +3 -2
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +3 -2
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js +23 -13
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/VrfWorkerManager/index.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/index.js +13 -4
- package/dist/esm/core/WebAuthnManager/index.js.map +1 -1
- package/dist/esm/core/WebAuthnManager/userPreferences.js +31 -119
- package/dist/esm/core/WebAuthnManager/userPreferences.js.map +1 -1
- package/dist/esm/core/defaultConfigs.js +0 -1
- package/dist/esm/core/defaultConfigs.js.map +1 -1
- package/dist/esm/core/rpcCalls.js +37 -1
- package/dist/esm/core/rpcCalls.js.map +1 -1
- package/dist/esm/core/types/signer-worker.js +1 -2
- package/dist/esm/core/types/signer-worker.js.map +1 -1
- package/dist/esm/react/components/AccountMenuButton/index.js +56 -45
- package/dist/esm/react/components/AccountMenuButton/index.js.map +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js +1 -1
- package/dist/esm/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.js.map +1 -1
- package/dist/esm/react/components/theme/ThemeProvider.js +11 -155
- package/dist/esm/react/components/theme/ThemeProvider.js.map +1 -1
- package/dist/esm/react/components/theme/design-tokens.js.map +1 -1
- package/dist/esm/react/context/TatchiPasskeyProvider.js +7 -1
- package/dist/esm/react/context/TatchiPasskeyProvider.js.map +1 -1
- package/dist/esm/react/context/index.js +8 -3
- package/dist/esm/react/context/index.js.map +1 -1
- package/dist/esm/react/context/tatchiManagerSingleton.js +2 -6
- package/dist/esm/react/context/tatchiManagerSingleton.js.map +1 -1
- package/dist/esm/react/context/useTatchiContextValue.js +7 -9
- package/dist/esm/react/context/useTatchiContextValue.js.map +1 -1
- package/dist/esm/react/context/useTatchiWithSdkFlow.js +9 -1
- package/dist/esm/react/context/useTatchiWithSdkFlow.js.map +1 -1
- package/dist/esm/react/src/core/IndexedDBManager/passkeyClientDB.js +0 -42
- package/dist/esm/react/src/core/IndexedDBManager/passkeyClientDB.js.map +1 -1
- package/dist/esm/react/src/core/TatchiPasskey/emailRecovery.js +40 -10
- package/dist/esm/react/src/core/TatchiPasskey/emailRecovery.js.map +1 -1
- package/dist/esm/react/src/core/TatchiPasskey/index.js +38 -17
- package/dist/esm/react/src/core/TatchiPasskey/index.js.map +1 -1
- package/dist/esm/react/src/core/TatchiPasskey/linkDevice.js +0 -10
- package/dist/esm/react/src/core/TatchiPasskey/linkDevice.js.map +1 -1
- package/dist/esm/react/src/core/TatchiPasskey/registration.js +13 -11
- package/dist/esm/react/src/core/TatchiPasskey/registration.js.map +1 -1
- package/dist/esm/react/src/core/WalletIframe/client/router.js +0 -1
- package/dist/esm/react/src/core/WalletIframe/client/router.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/LitComponents/confirm-ui.js +2 -10
- package/dist/esm/react/src/core/WebAuthnManager/LitComponents/confirm-ui.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/SignerWorkerManager/index.js +4 -1
- package/dist/esm/react/src/core/WebAuthnManager/SignerWorkerManager/index.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js +3 -2
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js +4 -4
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js +3 -9
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js +6 -5
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js +3 -2
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js +3 -2
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js +23 -13
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/VrfWorkerManager/index.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/index.js +13 -4
- package/dist/esm/react/src/core/WebAuthnManager/index.js.map +1 -1
- package/dist/esm/react/src/core/WebAuthnManager/userPreferences.js +31 -119
- package/dist/esm/react/src/core/WebAuthnManager/userPreferences.js.map +1 -1
- package/dist/esm/react/src/core/defaultConfigs.js +0 -1
- package/dist/esm/react/src/core/defaultConfigs.js.map +1 -1
- package/dist/esm/react/src/core/rpcCalls.js +37 -1
- package/dist/esm/react/src/core/rpcCalls.js.map +1 -1
- package/dist/esm/react/src/core/types/signer-worker.js +1 -2
- package/dist/esm/react/src/core/types/signer-worker.js.map +1 -1
- package/dist/esm/react/src/utils/theme.js +8 -0
- package/dist/esm/react/src/utils/theme.js.map +1 -0
- package/dist/esm/react/styles/styles.css +0 -121
- package/dist/esm/sdk/{EmailRecovery-CV5BmNEj.js → EmailRecovery-0_FK1zm_.js} +1 -1
- package/dist/esm/sdk/{EmailRecovery-DQonrYVY.js → EmailRecovery-D996wUrL.js} +4 -4
- package/dist/esm/sdk/{IndexedDBManager-CmdN7smS.js → IndexedDBManager-CNJlworQ.js} +2 -44
- package/dist/esm/sdk/{createAdapters-DF32SIZa.js → createAdapters-B26G-xfI.js} +9 -16
- package/dist/esm/sdk/{createAdapters-4c8mBiD5.js → createAdapters-NCOOvHKB.js} +10 -17
- package/dist/esm/sdk/{createAdapters-4c8mBiD5.js.map → createAdapters-NCOOvHKB.js.map} +1 -1
- package/dist/esm/sdk/{defaultConfigs-BQqiXif-.js → defaultConfigs-BgjIYavi.js} +1 -2
- package/dist/esm/sdk/{delegateAction-or7w7sod.js → delegateAction-DZzVi1bn.js} +1 -1
- package/dist/esm/sdk/{emailRecovery-DEgVvNYL.js → emailRecovery-CYdWdQrI.js} +46 -16
- package/dist/esm/sdk/{getDeviceNumber-WiNzKx1x.js → getDeviceNumber-aa3xNnaG.js} +2 -4
- package/dist/esm/sdk/{getDeviceNumber-WiNzKx1x.js.map → getDeviceNumber-aa3xNnaG.js.map} +1 -1
- package/dist/esm/sdk/{host-mode-BH5NpIt_.js → host-mode-BIUqo9hg.js} +1 -1
- package/dist/esm/sdk/{linkDevice-LHcgAzQ7.js → linkDevice-D8sK1fZ3.js} +6 -16
- package/dist/esm/sdk/{localOnly-DYjGl1Fl.js → localOnly-CQOX1pqN.js} +9 -8
- package/dist/esm/sdk/{localOnly-COpDBMkm.js → localOnly-DKksw6Zt.js} +8 -7
- package/dist/esm/sdk/localOnly-DKksw6Zt.js.map +1 -0
- package/dist/esm/sdk/{login-DUIWZHp_.js → login-DorWOltD.js} +2 -2
- package/dist/esm/sdk/offline-export-app.js +86 -196
- package/dist/esm/sdk/offline-export-app.js.map +1 -1
- package/dist/esm/sdk/{registration-R70lvG_o.js → registration-CGNNpYB4.js} +5 -4
- package/dist/esm/sdk/registration-CGNNpYB4.js.map +1 -0
- package/dist/esm/sdk/{registration-CB6VrAUS.js → registration-CRD5afRG.js} +4 -3
- package/dist/esm/sdk/{router-Rde0m7gu.js → router-DbB37GdZ.js} +2 -3
- package/dist/esm/sdk/{rpcCalls-VL4loDKP.js → rpcCalls-BQyx4G4W.js} +38 -2
- package/dist/esm/sdk/rpcCalls-D-0naH80.js +12 -0
- package/dist/esm/sdk/{scanDevice-VU_re6cb.js → scanDevice-CGda1FFv.js} +5 -5
- package/dist/esm/sdk/{signNEP413-BhAKb9KH.js → signNEP413-D6ToBnSM.js} +1 -1
- package/dist/esm/sdk/{signer-worker-DK847sXj.js → signer-worker-C69_aya9.js} +1 -2
- package/dist/esm/sdk/{syncAccount-Br9J8FNx.js → syncAccount-BXs9TPhP.js} +2 -2
- package/dist/esm/sdk/{syncAccount-p19TuDxm.js → syncAccount-DZrSqM1m.js} +5 -5
- package/dist/esm/sdk/{transactions-B7u7JBL2.js → transactions-Bi6hJqg0.js} +6 -5
- package/dist/esm/sdk/{transactions-CxsklyCK.js → transactions-CuIEW7P-.js} +6 -5
- package/dist/esm/sdk/transactions-CuIEW7P-.js.map +1 -0
- package/dist/esm/sdk/tx-confirm-ui.js +2 -10
- package/dist/esm/sdk/wallet-iframe-host.js +166 -207
- package/dist/esm/server/sdk/src/core/defaultConfigs.js.map +1 -1
- package/dist/esm/utils/theme.js +8 -0
- package/dist/esm/utils/theme.js.map +1 -0
- package/dist/esm/wasm_vrf_worker/pkg/wasm_vrf_worker_bg.wasm +0 -0
- package/dist/types/src/__tests__/e2e/thresholdEd25519.testUtils.d.ts +3 -0
- package/dist/types/src/__tests__/e2e/thresholdEd25519.testUtils.d.ts.map +1 -1
- package/dist/types/src/__tests__/setup/bypasses.d.ts.map +1 -1
- package/dist/types/src/__tests__/setup/index.d.ts +0 -2
- package/dist/types/src/__tests__/setup/index.d.ts.map +1 -1
- package/dist/types/src/core/IndexedDBManager/passkeyClientDB.d.ts +0 -24
- package/dist/types/src/core/IndexedDBManager/passkeyClientDB.d.ts.map +1 -1
- package/dist/types/src/core/OfflineExport/offline-export-app.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts +1 -0
- package/dist/types/src/core/TatchiPasskey/emailRecovery.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/index.d.ts +13 -3
- package/dist/types/src/core/TatchiPasskey/index.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/linkDevice.d.ts.map +1 -1
- package/dist/types/src/core/TatchiPasskey/registration.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts +4 -8
- package/dist/types/src/core/WalletIframe/TatchiPasskeyIframe.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/client/router.d.ts +0 -1
- package/dist/types/src/core/WalletIframe/client/router.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/host/context.d.ts +0 -1
- package/dist/types/src/core/WalletIframe/host/context.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/host/wallet-iframe-handlers.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/host/wallet-iframe-host.d.ts.map +1 -1
- package/dist/types/src/core/WalletIframe/shared/messages.d.ts +11 -12
- package/dist/types/src/core/WalletIframe/shared/messages.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/LitComponents/confirm-ui.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/index.d.ts +4 -1
- package/dist/types/src/core/WebAuthnManager/SignerWorkerManager/index.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/interfaces.d.ts +2 -0
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/interfaces.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.d.ts +3 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/session.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.d.ts +3 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/adapters/ui.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.d.ts +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/determineConfirmationConfig.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.d.ts +2 -0
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/localOnly.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.d.ts +2 -0
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/registration.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.d.ts +2 -0
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/flows/transactions.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/confirmTxFlow/handleSecureConfirmRequest.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/index.d.ts +2 -0
- package/dist/types/src/core/WebAuthnManager/VrfWorkerManager/index.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/index.d.ts +4 -1
- package/dist/types/src/core/WebAuthnManager/index.d.ts.map +1 -1
- package/dist/types/src/core/WebAuthnManager/userPreferences.d.ts +5 -29
- package/dist/types/src/core/WebAuthnManager/userPreferences.d.ts.map +1 -1
- package/dist/types/src/core/defaultConfigs.d.ts.map +1 -1
- package/dist/types/src/core/rpcCalls.d.ts +11 -0
- package/dist/types/src/core/rpcCalls.d.ts.map +1 -1
- package/dist/types/src/core/types/signer-worker.d.ts +0 -2
- package/dist/types/src/core/types/signer-worker.d.ts.map +1 -1
- package/dist/types/src/core/types/tatchi.d.ts +1 -2
- package/dist/types/src/core/types/tatchi.d.ts.map +1 -1
- package/dist/types/src/react/components/AccountMenuButton/index.d.ts.map +1 -1
- package/dist/types/src/react/components/PasskeyAuthMenu/ui/EmailRecoverySlide.d.ts.map +1 -1
- package/dist/types/src/react/components/theme/ThemeProvider.d.ts +0 -10
- package/dist/types/src/react/components/theme/ThemeProvider.d.ts.map +1 -1
- package/dist/types/src/react/components/theme/design-tokens.d.ts +0 -2
- package/dist/types/src/react/components/theme/design-tokens.d.ts.map +1 -1
- package/dist/types/src/react/components/theme/index.d.ts +1 -1
- package/dist/types/src/react/components/theme/index.d.ts.map +1 -1
- package/dist/types/src/react/context/TatchiPasskeyProvider.d.ts +5 -2
- package/dist/types/src/react/context/TatchiPasskeyProvider.d.ts.map +1 -1
- package/dist/types/src/react/context/index.d.ts.map +1 -1
- package/dist/types/src/react/context/tatchiManagerSingleton.d.ts.map +1 -1
- package/dist/types/src/react/context/useTatchiContextValue.d.ts +2 -0
- package/dist/types/src/react/context/useTatchiContextValue.d.ts.map +1 -1
- package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts +1 -0
- package/dist/types/src/react/context/useTatchiWithSdkFlow.d.ts.map +1 -1
- package/dist/types/src/react/index.d.ts +1 -1
- package/dist/types/src/react/index.d.ts.map +1 -1
- package/dist/types/src/react/types.d.ts +8 -1
- package/dist/types/src/react/types.d.ts.map +1 -1
- package/dist/types/src/utils/index.d.ts +1 -0
- package/dist/types/src/utils/index.d.ts.map +1 -1
- package/dist/types/src/utils/theme.d.ts +2 -0
- package/dist/types/src/utils/theme.d.ts.map +1 -0
- package/dist/workers/wasm_vrf_worker_bg.wasm +0 -0
- package/package.json +1 -1
- package/dist/cjs/core/TatchiPasskey/themePreference.js +0 -40
- package/dist/cjs/core/TatchiPasskey/themePreference.js.map +0 -1
- package/dist/cjs/react/src/core/TatchiPasskey/themePreference.js +0 -40
- package/dist/cjs/react/src/core/TatchiPasskey/themePreference.js.map +0 -1
- package/dist/esm/core/TatchiPasskey/themePreference.js +0 -40
- package/dist/esm/core/TatchiPasskey/themePreference.js.map +0 -1
- package/dist/esm/react/src/core/TatchiPasskey/themePreference.js +0 -40
- package/dist/esm/react/src/core/TatchiPasskey/themePreference.js.map +0 -1
- package/dist/esm/sdk/localOnly-COpDBMkm.js.map +0 -1
- package/dist/esm/sdk/registration-R70lvG_o.js.map +0 -1
- package/dist/esm/sdk/rpcCalls-C1sp-Epo.js +0 -12
- package/dist/esm/sdk/themePreference-Ceg1CNAd.js +0 -39
- package/dist/esm/sdk/transactions-CxsklyCK.js.map +0 -1
- package/dist/types/src/core/TatchiPasskey/themePreference.d.ts +0 -17
- package/dist/types/src/core/TatchiPasskey/themePreference.d.ts.map +0 -1
- package/dist/types/src/react/components/AccountMenuButton/Slider.d.ts +0 -18
- package/dist/types/src/react/components/AccountMenuButton/Slider.d.ts.map +0 -1
- /package/dist/esm/sdk/{browser-C-W52ASM.js → browser-CH0Ca-MX.js} +0 -0
- /package/dist/esm/sdk/{iframe-host-Cjfha7dm.js → iframe-host-BVt1hvOt.js} +0 -0
- /package/dist/esm/sdk/{relay-DS3eAJdt.js → relay-BCEyWFew.js} +0 -0
package/README.md
CHANGED
|
@@ -1,20 +1,14 @@
|
|
|
1
1
|
# Web3Authn SDK
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
## What's Inside
|
|
6
|
-
|
|
7
|
-
This package provides everything you need to integrate passkey-based wallets into your NEAR applications:
|
|
3
|
+
Passkey wallet SDK for NEAR Protocol. An embedded wallet powered by VRF WebAuthn, cross-origin iframe isolation, and WASM-based cryptography.
|
|
8
4
|
|
|
5
|
+
Featuring:
|
|
9
6
|
- **Core SDK**: Framework-agnostic JavaScript/TypeScript library
|
|
10
7
|
- **React Components**: Drop-in components and hooks for React applications
|
|
11
|
-
- **
|
|
12
|
-
- **Vite Plugins**: Development and build tools for seamless integration
|
|
8
|
+
- **Plugins**: plugins to setup the right headers for Vite, Next.js, etc
|
|
13
9
|
|
|
14
10
|
## Installation
|
|
15
11
|
|
|
16
|
-
### For End Users
|
|
17
|
-
|
|
18
12
|
Install the published package:
|
|
19
13
|
|
|
20
14
|
```bash
|
|
@@ -25,26 +19,8 @@ pnpm add @tatchi-xyz/sdk
|
|
|
25
19
|
yarn add @tatchi-xyz/sdk
|
|
26
20
|
```
|
|
27
21
|
|
|
28
|
-
That's it—no build tools required. The package includes pre-compiled WASM modules and bundled JavaScript.
|
|
29
|
-
|
|
30
22
|
### For SDK Developers
|
|
31
23
|
|
|
32
|
-
If you're contributing to the SDK or building from source:
|
|
33
|
-
|
|
34
|
-
**Prerequisites**:
|
|
35
|
-
```bash
|
|
36
|
-
# Install Rust
|
|
37
|
-
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
|
|
38
|
-
|
|
39
|
-
# Install wasm-pack
|
|
40
|
-
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
|
|
41
|
-
|
|
42
|
-
# Add WASM target
|
|
43
|
-
rustup target add wasm32-unknown-unknown
|
|
44
|
-
|
|
45
|
-
# Install pnpm
|
|
46
|
-
npm install -g pnpm
|
|
47
|
-
```
|
|
48
24
|
|
|
49
25
|
**Build**:
|
|
50
26
|
```bash
|
|
@@ -60,154 +36,50 @@ pnpm -C sdk test # Playwright tests
|
|
|
60
36
|
pnpm -C sdk run type-check # TypeScript validation
|
|
61
37
|
```
|
|
62
38
|
|
|
63
|
-
---
|
|
64
|
-
|
|
65
39
|
## Quick Start
|
|
66
40
|
|
|
67
41
|
### React Integration
|
|
68
42
|
|
|
69
|
-
The easiest way to get started with React
|
|
70
|
-
|
|
71
|
-
Requires React 18+ (React 18 or 19). The core SDK works without React.
|
|
43
|
+
The easiest way to get started with React (React 18+)
|
|
72
44
|
|
|
73
45
|
```tsx
|
|
74
|
-
import {
|
|
46
|
+
import { TatchiPasskeyProvider, useTatchi } from '@tatchi-xyz/sdk/react'
|
|
75
47
|
|
|
76
48
|
function App() {
|
|
77
49
|
return (
|
|
78
|
-
<
|
|
50
|
+
<TatchiPasskeyProvider
|
|
79
51
|
config={{
|
|
80
|
-
|
|
52
|
+
nearRpcUrl: 'https://rpc.testnet.near.org',
|
|
53
|
+
nearNetwork: 'testnet',
|
|
54
|
+
contractId: 'w3a-v1.testnet',
|
|
81
55
|
iframeWallet: {
|
|
82
|
-
walletOrigin: 'https://wallet.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
56
|
+
walletOrigin: 'https://wallet.web3authn.org',
|
|
57
|
+
},
|
|
58
|
+
relayer: {
|
|
59
|
+
url: 'https://relay-server.example.com',
|
|
60
|
+
},
|
|
87
61
|
}}
|
|
88
62
|
>
|
|
89
63
|
<YourApp />
|
|
90
|
-
</
|
|
64
|
+
</TatchiPasskeyProvider>
|
|
91
65
|
)
|
|
92
66
|
}
|
|
93
67
|
|
|
94
68
|
function SignInButton() {
|
|
95
|
-
const tatchi =
|
|
69
|
+
const tatchi = useTatchi()
|
|
96
70
|
|
|
97
71
|
const handleSignIn = async () => {
|
|
98
|
-
const result = await tatchi.registerPasskey(
|
|
99
|
-
|
|
100
|
-
nearAccountId: 'alice.testnet'
|
|
101
|
-
})
|
|
102
|
-
console.log('Registered:', result.credentialId)
|
|
72
|
+
const result = await tatchi.registerPasskey('alice.testnet')
|
|
73
|
+
console.log('Registered:', result.success)
|
|
103
74
|
}
|
|
104
75
|
|
|
105
76
|
return <button onClick={handleSignIn}>Sign In with Passkey</button>
|
|
106
77
|
}
|
|
107
78
|
```
|
|
108
79
|
|
|
109
|
-
### Vanilla TypeScript
|
|
110
|
-
|
|
111
|
-
For non-React applications or custom integrations:
|
|
112
|
-
|
|
113
|
-
```typescript
|
|
114
|
-
import { TatchiPasskey } from '@tatchi-xyz/sdk'
|
|
115
|
-
|
|
116
|
-
const tatchi = new TatchiPasskey({
|
|
117
|
-
nearRpcUrl: 'https://rpc.testnet.near.org',
|
|
118
|
-
nearNetwork: 'testnet',
|
|
119
|
-
contractId: 'w3a-v1.testnet',
|
|
120
|
-
iframeWallet: {
|
|
121
|
-
walletOrigin: 'https://wallet.example.com',
|
|
122
|
-
walletServicePath: '/wallet-service',
|
|
123
|
-
}
|
|
124
|
-
})
|
|
125
|
-
|
|
126
|
-
// Initialize the wallet iframe
|
|
127
|
-
await tatchi.initWalletIframe()
|
|
128
|
-
|
|
129
|
-
// Register a new passkey
|
|
130
|
-
const registration = await tatchi.registerPasskey({
|
|
131
|
-
username: 'alice',
|
|
132
|
-
nearAccountId: 'alice.testnet'
|
|
133
|
-
})
|
|
134
|
-
|
|
135
|
-
// Sign transactions
|
|
136
|
-
const result = await tatchi.signTransactionsWithActions({
|
|
137
|
-
nearAccountId: 'alice.testnet',
|
|
138
|
-
transactions: [{
|
|
139
|
-
receiverId: 'contract.testnet',
|
|
140
|
-
actions: [{
|
|
141
|
-
type: 'FunctionCall',
|
|
142
|
-
method_name: 'my_method',
|
|
143
|
-
args: JSON.stringify({ arg: 'value' }),
|
|
144
|
-
gas: '50000000000000',
|
|
145
|
-
deposit: '0'
|
|
146
|
-
}]
|
|
147
|
-
}]
|
|
148
|
-
})
|
|
149
|
-
|
|
150
|
-
console.log('Transaction hash:', result.transactionHash)
|
|
151
|
-
```
|
|
152
|
-
|
|
153
|
-
---
|
|
154
|
-
|
|
155
|
-
## Wallet Iframe Architecture
|
|
156
|
-
|
|
157
|
-
The SDK isolates all sensitive operations in a cross-origin iframe for maximum security.
|
|
158
|
-
|
|
159
|
-
### Why Iframe Isolation?
|
|
160
|
-
|
|
161
|
-
Traditional web wallets store keys in the same JavaScript context as your application. This means:
|
|
162
|
-
|
|
163
|
-
- XSS vulnerabilities can steal keys
|
|
164
|
-
- Malicious dependencies can exfiltrate secrets
|
|
165
|
-
- One bug compromises everything
|
|
166
|
-
|
|
167
|
-
**The solution**: Run the wallet in a separate security origin (e.g., `wallet.example.com`). Your app communicates via secure MessageChannel, but can never access keys directly.
|
|
168
|
-
|
|
169
|
-
### Configuration
|
|
170
|
-
|
|
171
|
-
**Recommended** (dedicated wallet origin):
|
|
172
|
-
```tsx
|
|
173
|
-
iframeWallet: {
|
|
174
|
-
walletOrigin: 'https://wallet.example.com',
|
|
175
|
-
walletServicePath: '/wallet-service',
|
|
176
|
-
}
|
|
177
|
-
```
|
|
178
|
-
|
|
179
|
-
**Fallback** (same-origin, for quick start):
|
|
180
|
-
```tsx
|
|
181
|
-
// Omit iframeWallet entirely
|
|
182
|
-
// SDK will run inline with console warnings
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
For same-origin deployments, the SDK emits console warnings since the parent can observe secrets. This is convenient for quick starts but not recommended for production.
|
|
186
|
-
|
|
187
|
-
### Hosting Requirements
|
|
188
|
-
|
|
189
|
-
When using a dedicated wallet origin, you need to serve:
|
|
190
|
-
|
|
191
|
-
**1. SDK Assets** (`/sdk/*`):
|
|
192
|
-
- `/sdk/workers/web3authn-signer.worker.js`
|
|
193
|
-
- `/sdk/workers/web3authn-vrf.worker.js`
|
|
194
|
-
- `/sdk/wallet-iframe-host.js`
|
|
195
|
-
- Various CSS and component bundles
|
|
196
|
-
|
|
197
|
-
**2. Wallet Service Page** (`/wallet-service`):
|
|
198
|
-
- HTML page that loads the wallet iframe host module
|
|
199
|
-
|
|
200
|
-
**Development**: The `tatchiDev` Vite plugin serves these automatically.
|
|
201
|
-
|
|
202
|
-
**Production**: Deploy with your wallet site, or use the `tatchiBuildHeaders` plugin to generate appropriate headers.
|
|
203
|
-
|
|
204
|
-
---
|
|
205
|
-
|
|
206
80
|
## Vite Plugin Integration
|
|
207
81
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
### Development Setup
|
|
82
|
+
Use the Vite plugins to serve wallet assets in dev and emit the right headers for production.
|
|
211
83
|
|
|
212
84
|
```typescript
|
|
213
85
|
// vite.config.ts
|
|
@@ -218,65 +90,22 @@ import { tatchiDev, tatchiBuildHeaders } from '@tatchi-xyz/sdk/plugins/vite'
|
|
|
218
90
|
export default defineConfig({
|
|
219
91
|
plugins: [
|
|
220
92
|
react(),
|
|
221
|
-
|
|
222
|
-
// Development: Serves wallet assets locally
|
|
223
93
|
tatchiDev({
|
|
94
|
+
walletOrigin: process.env.VITE_WALLET_ORIGIN,
|
|
224
95
|
sdkBasePath: '/sdk',
|
|
225
96
|
walletServicePath: '/wallet-service',
|
|
226
|
-
walletOrigin: process.env.VITE_WALLET_ORIGIN
|
|
227
97
|
}),
|
|
228
|
-
|
|
229
|
-
// Production: Sets security headers
|
|
230
98
|
tatchiBuildHeaders({
|
|
231
|
-
walletOrigin: process.env.VITE_WALLET_ORIGIN
|
|
232
|
-
})
|
|
99
|
+
walletOrigin: process.env.VITE_WALLET_ORIGIN,
|
|
100
|
+
}),
|
|
233
101
|
]
|
|
234
102
|
})
|
|
235
103
|
```
|
|
236
104
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
**`tatchiDev`**:
|
|
240
|
-
- Serves `/sdk/*` assets during development
|
|
241
|
-
- Mounts `/wallet-service` endpoint
|
|
242
|
-
- Enforces WASM MIME type
|
|
243
|
-
- Optionally sets COOP/COEP headers (configurable)
|
|
244
|
-
|
|
245
|
-
**`tatchiBuildHeaders`**:
|
|
246
|
-
- Generates Permissions-Policy header for WebAuthn delegation
|
|
247
|
-
- Emits `_headers` file for Netlify/Cloudflare Pages deployments
|
|
248
|
-
- Ensures iframe can call `navigator.credentials.*`
|
|
249
|
-
|
|
250
|
-
### Plugin Options
|
|
251
|
-
|
|
252
|
-
```typescript
|
|
253
|
-
tatchiDev({
|
|
254
|
-
mode: 'self-contained', // or 'front-only', 'wallet-only'
|
|
255
|
-
sdkBasePath: '/sdk', // Mount path for assets
|
|
256
|
-
walletServicePath: '/wallet-service', // Wallet service route
|
|
257
|
-
walletOrigin: 'https://wallet.example.com', // For Permissions-Policy
|
|
258
|
-
setDevHeaders: true, // Enable COOP/COEP in dev
|
|
259
|
-
coepMode: 'strict', // 'strict' (default) or 'off'
|
|
260
|
-
enableDebugRoutes: false // Add /__sdk-root debug endpoint
|
|
261
|
-
})
|
|
262
|
-
```
|
|
263
|
-
|
|
264
|
-
### Debugging
|
|
265
|
-
|
|
266
|
-
Enable debug routes to verify asset resolution:
|
|
267
|
-
|
|
268
|
-
```typescript
|
|
269
|
-
tatchiDev({ enableDebugRoutes: true })
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
Then visit `http://localhost:5173/__sdk-root` to see the resolved SDK path.
|
|
273
|
-
|
|
274
|
-
---
|
|
105
|
+
See `examples/next-js` for other examples.
|
|
275
106
|
|
|
276
107
|
## Configuration Options
|
|
277
108
|
|
|
278
|
-
### Core Configuration
|
|
279
|
-
|
|
280
109
|
```typescript
|
|
281
110
|
interface TatchiPasskeyConfig {
|
|
282
111
|
// NEAR blockchain settings
|
|
@@ -286,85 +115,34 @@ interface TatchiPasskeyConfig {
|
|
|
286
115
|
|
|
287
116
|
// Wallet iframe settings (recommended)
|
|
288
117
|
iframeWallet?: {
|
|
289
|
-
walletOrigin: string // e.g., 'https://wallet.
|
|
118
|
+
walletOrigin: string // e.g., 'https://wallet.web3authn.org'
|
|
290
119
|
walletServicePath?: string // Default: '/wallet-service'
|
|
291
120
|
rpIdOverride?: string // Optional: Credential scope override
|
|
292
121
|
}
|
|
293
122
|
|
|
294
123
|
// Optional relay server (for account creation & Shamir 3-pass)
|
|
295
|
-
|
|
124
|
+
relayer?: {
|
|
125
|
+
url: string
|
|
126
|
+
}
|
|
296
127
|
|
|
297
|
-
// Optional theme customization
|
|
298
|
-
theme?: 'light' | 'dark' | 'auto'
|
|
299
128
|
}
|
|
300
129
|
```
|
|
301
130
|
|
|
302
|
-
### rpId Strategy
|
|
303
|
-
|
|
304
|
-
The `rpIdOverride` option controls credential scoping:
|
|
305
|
-
|
|
306
|
-
**Undefined** (wallet-scoped):
|
|
307
|
-
- One passkey works across all apps using this wallet
|
|
308
|
-
- Good for multi-tenant wallet services
|
|
309
|
-
- Requires ROR configuration for Safari
|
|
310
|
-
|
|
311
|
-
**App domain** (app-scoped):
|
|
312
|
-
- Credentials tied to your product's domain
|
|
313
|
-
- Works across `*.example.com` subdomains
|
|
314
|
-
- Simpler Safari integration
|
|
315
|
-
|
|
316
|
-
See [Credential Scope Strategy](../examples/tatchi-docs/src/docs/concepts/wallet-scoped-credentials.md) for detailed guidance.
|
|
317
131
|
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
## Shamir 3-Pass (Auto-Login)
|
|
321
|
-
|
|
322
|
-
The SDK includes optional Shamir 3-pass protocol for smooth login UX.
|
|
323
|
-
|
|
324
|
-
### What It Does
|
|
325
|
-
|
|
326
|
-
Normally, every login requires TouchID/FaceID. With Shamir 3-pass, returning users can log in without biometric prompts—the SDK cooperates with a relay server to unlock keys.
|
|
327
|
-
|
|
328
|
-
**Security**: The relay never sees plaintext keys or key-encryption keys. It only handles blinded values that can't be used alone.
|
|
132
|
+
## Wallet Iframe Architecture
|
|
329
133
|
|
|
330
|
-
|
|
134
|
+
The SDK isolates all sensitive operations in a cross-origin iframe (e.g., `wallet.web3authn.org`). Your app communicates via secure MessageChannel, but can never access keys directly.
|
|
331
135
|
|
|
332
|
-
|
|
333
|
-
```
|
|
334
|
-
POST /vrf/apply-server-lock
|
|
335
|
-
Request: { "kek_c_b64u": "..." }
|
|
336
|
-
Response: { "kek_cs_b64u": "...", "keyId": "sha256(...)" }
|
|
337
|
-
```
|
|
338
|
-
|
|
339
|
-
**Remove Server Lock**:
|
|
340
|
-
```
|
|
341
|
-
POST /vrf/remove-server-lock
|
|
342
|
-
Request: { "kek_st_b64u": "...", "keyId": "..." }
|
|
343
|
-
Response: { "kek_t_b64u": "..." }
|
|
344
|
-
```
|
|
136
|
+
### Configuration
|
|
345
137
|
|
|
346
|
-
**
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
"p_b64u": "...",
|
|
352
|
-
"graceKeyIds": ["..."]
|
|
138
|
+
**Recommended** (dedicated wallet origin):
|
|
139
|
+
```tsx
|
|
140
|
+
iframeWallet: {
|
|
141
|
+
walletOrigin: 'https://wallet.web3authn.org',
|
|
142
|
+
walletServicePath: '/wallet-service',
|
|
353
143
|
}
|
|
354
144
|
```
|
|
355
145
|
|
|
356
|
-
### Key Rotation
|
|
357
|
-
|
|
358
|
-
Servers should rotate keys periodically. The SDK handles migration transparently:
|
|
359
|
-
|
|
360
|
-
1. After unlock, SDK checks current `keyId`
|
|
361
|
-
2. If different from stored value, SDK re-wraps with new key
|
|
362
|
-
3. Old keys stay in grace period temporarily
|
|
363
|
-
4. Clients migrate automatically on next login
|
|
364
|
-
|
|
365
|
-
Grace keys allow rotation without breaking existing sessions. Keep the grace window short (24-48 hours) and prune old keys aggressively.
|
|
366
|
-
|
|
367
|
-
---
|
|
368
146
|
|
|
369
147
|
## Project Structure
|
|
370
148
|
|
|
@@ -394,194 +172,6 @@ sdk/
|
|
|
394
172
|
└── README.md # This file
|
|
395
173
|
```
|
|
396
174
|
|
|
397
|
-
## Build System
|
|
398
|
-
|
|
399
|
-
The SDK uses **Rolldown** for JavaScript bundling and **wasm-pack** for Rust compilation.
|
|
400
|
-
|
|
401
|
-
### Build Commands
|
|
402
|
-
|
|
403
|
-
```bash
|
|
404
|
-
# Full build (WASM + bundles)
|
|
405
|
-
pnpm -C sdk build
|
|
406
|
-
|
|
407
|
-
# Watch mode for development
|
|
408
|
-
pnpm -C sdk dev
|
|
409
|
-
|
|
410
|
-
# Clean build (removes dist/ first)
|
|
411
|
-
pnpm -C sdk run build:check:fresh
|
|
412
|
-
|
|
413
|
-
# Type checking only
|
|
414
|
-
pnpm -C sdk run type-check
|
|
415
|
-
```
|
|
416
|
-
|
|
417
|
-
### Build Configuration
|
|
418
|
-
|
|
419
|
-
All build paths are centralized in `build-paths.ts`:
|
|
420
|
-
|
|
421
|
-
```typescript
|
|
422
|
-
export const BUILD_PATHS = {
|
|
423
|
-
sdkRoot: path.resolve(__dirname),
|
|
424
|
-
distRoot: path.resolve(__dirname, 'dist'),
|
|
425
|
-
wasmSignerSource: path.resolve(__dirname, 'src/wasm_signer_worker'),
|
|
426
|
-
// ... other paths
|
|
427
|
-
}
|
|
428
|
-
```
|
|
429
|
-
|
|
430
|
-
This ensures consistency across build scripts, bundler config, and runtime path resolution.
|
|
431
|
-
|
|
432
|
-
---
|
|
433
|
-
|
|
434
|
-
## Security Best Practices
|
|
435
|
-
|
|
436
|
-
### 1. Use HTTPS Everywhere
|
|
437
|
-
|
|
438
|
-
WebAuthn requires secure contexts. Even in development, use HTTPS:
|
|
439
|
-
|
|
440
|
-
```bash
|
|
441
|
-
# Use mkcert for local HTTPS
|
|
442
|
-
mkcert -install
|
|
443
|
-
mkcert localhost
|
|
444
|
-
```
|
|
445
|
-
|
|
446
|
-
### 2. Configure Permissions-Policy
|
|
447
|
-
|
|
448
|
-
Ensure your server delegates WebAuthn to the wallet origin:
|
|
449
|
-
|
|
450
|
-
```
|
|
451
|
-
Permissions-Policy:
|
|
452
|
-
publickey-credentials-get=(self "https://wallet.example.com"),
|
|
453
|
-
publickey-credentials-create=(self "https://wallet.example.com")
|
|
454
|
-
```
|
|
455
|
-
|
|
456
|
-
The `tatchiBuildHeaders` plugin generates this automatically.
|
|
457
|
-
|
|
458
|
-
### 3. Set Content Security Policy
|
|
459
|
-
|
|
460
|
-
The wallet should have strict CSP:
|
|
461
|
-
|
|
462
|
-
```
|
|
463
|
-
Content-Security-Policy:
|
|
464
|
-
default-src 'none';
|
|
465
|
-
script-src 'self';
|
|
466
|
-
style-src 'self';
|
|
467
|
-
worker-src 'self' blob:;
|
|
468
|
-
connect-src 'self' https://rpc.testnet.near.org;
|
|
469
|
-
```
|
|
470
|
-
|
|
471
|
-
### 4. Configure ROR (if wallet-scoped)
|
|
472
|
-
|
|
473
|
-
For wallet-scoped credentials in Safari, serve `/.well-known/webauthn`:
|
|
474
|
-
|
|
475
|
-
```json
|
|
476
|
-
{
|
|
477
|
-
"origins": [
|
|
478
|
-
"https://app.example.com",
|
|
479
|
-
"https://localhost:5173"
|
|
480
|
-
]
|
|
481
|
-
}
|
|
482
|
-
```
|
|
483
|
-
|
|
484
|
-
### 5. Rotate Shamir Keys
|
|
485
|
-
|
|
486
|
-
If using Shamir 3-pass, rotate server keys regularly:
|
|
487
|
-
|
|
488
|
-
```typescript
|
|
489
|
-
const result = await authService.rotateShamirServerKeypair({
|
|
490
|
-
keepCurrentInGrace: true
|
|
491
|
-
})
|
|
492
|
-
// Persist new keypair securely
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
---
|
|
496
|
-
|
|
497
|
-
## Troubleshooting
|
|
498
|
-
|
|
499
|
-
### "WebAuthn not available"
|
|
500
|
-
|
|
501
|
-
**Cause**: Permissions-Policy not set or iframe missing `allow` attribute.
|
|
502
|
-
|
|
503
|
-
**Fix**: Ensure `tatchiBuildHeaders` plugin is configured and check iframe has:
|
|
504
|
-
```html
|
|
505
|
-
<iframe allow="publickey-credentials-get; publickey-credentials-create">
|
|
506
|
-
```
|
|
507
|
-
|
|
508
|
-
### Passkey not appearing in Safari
|
|
509
|
-
|
|
510
|
-
**Cause**: ROR manifest missing for wallet-scoped credentials.
|
|
511
|
-
|
|
512
|
-
**Fix**: Serve `/.well-known/webauthn` on wallet origin with allowed origins.
|
|
513
|
-
|
|
514
|
-
### WASM module fails to load
|
|
515
|
-
|
|
516
|
-
**Cause**: Incorrect MIME type or path resolution.
|
|
517
|
-
|
|
518
|
-
**Fix**:
|
|
519
|
-
- Ensure WASM files served with `application/wasm` MIME type
|
|
520
|
-
- Verify `/sdk/workers/*.wasm` files are accessible
|
|
521
|
-
- Check `tatchiDev` plugin is enabled
|
|
522
|
-
|
|
523
|
-
### Iframe not loading
|
|
524
|
-
|
|
525
|
-
**Cause**: CORS or CSP blocking cross-origin iframe.
|
|
526
|
-
|
|
527
|
-
**Fix**:
|
|
528
|
-
- Check wallet origin allows embedding
|
|
529
|
-
- Verify CSP includes `frame-src 'self' https://wallet.example.com`
|
|
530
|
-
- Check browser console for specific errors
|
|
531
|
-
|
|
532
|
-
---
|
|
533
|
-
|
|
534
|
-
## API Reference
|
|
535
|
-
|
|
536
|
-
See the comprehensive API documentation in:
|
|
537
|
-
- [SDK Documentation](./docs/) - Full API reference
|
|
538
|
-
- [Guides](../examples/tatchi-docs/src/docs/guides/) - Integration tutorials
|
|
539
|
-
- [Concepts](../examples/tatchi-docs/src/docs/concepts/) - Architecture deep-dives
|
|
540
|
-
|
|
541
|
-
---
|
|
542
|
-
|
|
543
|
-
## Examples
|
|
544
|
-
|
|
545
|
-
**Vite + React**: `examples/vite/`
|
|
546
|
-
- Basic passkey registration and login
|
|
547
|
-
- Transaction signing with confirmation UI
|
|
548
|
-
- Same-origin wallet deployment
|
|
549
|
-
|
|
550
|
-
**Relay Server**: `examples/relay-server/`
|
|
551
|
-
- Node.js/Express relay implementation
|
|
552
|
-
- Account creation endpoint
|
|
553
|
-
- Shamir 3-pass key management
|
|
554
|
-
- Automatic key rotation
|
|
555
|
-
|
|
556
|
-
**Cloudflare Worker**: `examples/relay-cloudflare-worker/`
|
|
557
|
-
- Serverless relay deployment
|
|
558
|
-
- WASM bundling for Workers runtime
|
|
559
|
-
- Secrets management with Wrangler
|
|
560
|
-
|
|
561
|
-
---
|
|
562
|
-
|
|
563
|
-
## Contributing
|
|
564
|
-
|
|
565
|
-
Contributions welcome! See [CONTRIBUTING.md](../CONTRIBUTING.md) for guidelines.
|
|
566
|
-
|
|
567
|
-
### Development Setup
|
|
568
|
-
|
|
569
|
-
1. Fork and clone the repository
|
|
570
|
-
2. Install dependencies: `pnpm install`
|
|
571
|
-
3. Build SDK: `pnpm -C sdk build`
|
|
572
|
-
4. Make changes
|
|
573
|
-
5. Run tests: `pnpm -C sdk test`
|
|
574
|
-
6. Submit pull request
|
|
575
|
-
|
|
576
|
-
### Areas We Need Help
|
|
577
|
-
|
|
578
|
-
- Framework integrations (Vue, Svelte, Angular)
|
|
579
|
-
- Mobile browser testing
|
|
580
|
-
- Documentation improvements
|
|
581
|
-
- Example applications
|
|
582
|
-
- Performance optimization
|
|
583
|
-
|
|
584
|
-
---
|
|
585
175
|
|
|
586
176
|
## License
|
|
587
177
|
|
|
@@ -590,5 +180,4 @@ MIT License - see [LICENSE](../LICENSE) for details.
|
|
|
590
180
|
## Support
|
|
591
181
|
|
|
592
182
|
- **Documentation**: [../examples/tatchi-docs/](../examples/tatchi-docs/)
|
|
593
|
-
- **Issues**: [GitHub Issues](https://github.com/
|
|
594
|
-
- **Discussions**: [GitHub Discussions](https://github.com/your-org/web3-authn-sdk/discussions)
|
|
183
|
+
- **Issues**: [GitHub Issues](https://github.com/web3-authn/sdk/issues)
|
|
@@ -521,37 +521,6 @@ var PasskeyClientDBManager = class {
|
|
|
521
521
|
return user?.preferences?.confirmationConfig || require_signer_worker.DEFAULT_CONFIRMATION_CONFIG;
|
|
522
522
|
}
|
|
523
523
|
/**
|
|
524
|
-
* Get user's theme preference from IndexedDB
|
|
525
|
-
* @param nearAccountId - The user's account ID
|
|
526
|
-
* @returns 'dark' | 'light' | null
|
|
527
|
-
*/
|
|
528
|
-
async getTheme(nearAccountId) {
|
|
529
|
-
const user = await this.getUser(nearAccountId);
|
|
530
|
-
return user?.preferences?.confirmationConfig.theme || null;
|
|
531
|
-
}
|
|
532
|
-
/**
|
|
533
|
-
* Set user's theme preference in IndexedDB
|
|
534
|
-
* @param nearAccountId - The user's account ID
|
|
535
|
-
* @param theme - The theme to set ('dark' | 'light')
|
|
536
|
-
*/
|
|
537
|
-
async setTheme(nearAccountId, theme) {
|
|
538
|
-
const existingConfig = await this.getConfirmationConfig(nearAccountId);
|
|
539
|
-
const confirmationConfig = {
|
|
540
|
-
...existingConfig,
|
|
541
|
-
theme
|
|
542
|
-
};
|
|
543
|
-
await this.updatePreferences(nearAccountId, { confirmationConfig });
|
|
544
|
-
}
|
|
545
|
-
/**
|
|
546
|
-
* Get user's theme with fallback to 'dark'
|
|
547
|
-
* @param nearAccountId - The user's account ID
|
|
548
|
-
* @returns 'dark' | 'light'
|
|
549
|
-
*/
|
|
550
|
-
async getThemeOrDefault(nearAccountId) {
|
|
551
|
-
const theme = await this.getTheme(nearAccountId);
|
|
552
|
-
return theme || "dark";
|
|
553
|
-
}
|
|
554
|
-
/**
|
|
555
524
|
* Get user's signer mode preference from IndexedDB
|
|
556
525
|
*/
|
|
557
526
|
async getSignerMode(nearAccountId) {
|
|
@@ -567,17 +536,6 @@ var PasskeyClientDBManager = class {
|
|
|
567
536
|
await this.updatePreferences(nearAccountId, { signerMode: next });
|
|
568
537
|
}
|
|
569
538
|
/**
|
|
570
|
-
* Toggle between dark and light theme for a user
|
|
571
|
-
* @param nearAccountId - The user's account ID
|
|
572
|
-
* @returns The new theme that was set
|
|
573
|
-
*/
|
|
574
|
-
async toggleTheme(nearAccountId) {
|
|
575
|
-
const currentTheme = await this.getThemeOrDefault(nearAccountId);
|
|
576
|
-
const newTheme = currentTheme === "dark" ? "light" : "dark";
|
|
577
|
-
await this.setTheme(nearAccountId, newTheme);
|
|
578
|
-
return newTheme;
|
|
579
|
-
}
|
|
580
|
-
/**
|
|
581
539
|
* Store a derived address for a given NEAR account + contract + path
|
|
582
540
|
*/
|
|
583
541
|
async setDerivedAddress(nearAccountId, args) {
|