@tempoxyz/id 0.0.0-stage → 0.0.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/README.md +121 -2
- package/dist/App.d.ts +121 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +132 -0
- package/dist/App.js.map +1 -0
- package/dist/app/client/.assetsignore +2 -0
- package/dist/app/client/_headers +4 -0
- package/dist/app/client/assets/Account-BYLpNFf3.css +1 -0
- package/dist/app/client/assets/Account-BllJah07.js +1 -0
- package/dist/app/client/assets/Amount-E_7snI0-.js +1 -0
- package/dist/app/client/assets/Amount-ZdtluGf-.css +1 -0
- package/dist/app/client/assets/Approval-CgV5JHlb.css +1 -0
- package/dist/app/client/assets/Approval-yKflypU2.js +1 -0
- package/dist/app/client/assets/ArrowUp-CRvqfMNU.js +1 -0
- package/dist/app/client/assets/Authentication-BAXhOh_4.js +2 -0
- package/dist/app/client/assets/BRLA-CZvVDNYr.png +0 -0
- package/dist/app/client/assets/BRZ-Cn3jEi9t.svg +1 -0
- package/dist/app/client/assets/CHFAU-DCedc4aH.png +0 -0
- package/dist/app/client/assets/Callout-B736759d.js +1 -0
- package/dist/app/client/assets/Callout-DBfEmP7q.css +1 -0
- package/dist/app/client/assets/Check-DVgD8tDG.js +1 -0
- package/dist/app/client/assets/ChevronRight-CsXtIZCB.js +1 -0
- package/dist/app/client/assets/ChooseAccount-BjxfQjPK.js +1 -0
- package/dist/app/client/assets/ChooseAccount-DL3wgJhE.css +1 -0
- package/dist/app/client/assets/Client-JrABNovb.js +1 -0
- package/dist/app/client/assets/Close-CRvWlhqc.js +1 -0
- package/dist/app/client/assets/Cloud-DgJsrqpQ.js +1 -0
- package/dist/app/client/assets/CodeInput-79Ctx8ZA.js +1 -0
- package/dist/app/client/assets/CodeInput-BqRteSwD.css +1 -0
- package/dist/app/client/assets/DLUSD-BnRXm3EI.png +0 -0
- package/dist/app/client/assets/Deposit-CclrAoXL.css +1 -0
- package/dist/app/client/assets/Deposit-c7uYn2Eb.js +1 -0
- package/dist/app/client/assets/DevTools-BYkmtuV5.css +1 -0
- package/dist/app/client/assets/DevTools-BgnzDGo2.js +1 -0
- package/dist/app/client/assets/DeviceApproval-BBUVv58e.js +1 -0
- package/dist/app/client/assets/DeviceApproval-BffFLD8F.css +1 -0
- package/dist/app/client/assets/EURAU-sjieTTB9.svg +1 -0
- package/dist/app/client/assets/EURC.e-CxYiiwkz.svg +1 -0
- package/dist/app/client/assets/Fingerprint-BNCA6qOJ.js +1 -0
- package/dist/app/client/assets/GBPA-DI_25xSG.svg +4 -0
- package/dist/app/client/assets/GUSD-BDEP2Qb-.svg +1 -0
- package/dist/app/client/assets/GeistMono-Variable-BRXCGrxA.woff2 +0 -0
- package/dist/app/client/assets/Globe-f0eWzcEI.js +1 -0
- package/dist/app/client/assets/Grant-5a-n1gJH.css +1 -0
- package/dist/app/client/assets/Grant-Dp7mpcEi.js +1 -0
- package/dist/app/client/assets/Hex-C9KeV7_9.css +1 -0
- package/dist/app/client/assets/Hex-CSp2U46W.js +10 -0
- package/dist/app/client/assets/IconChip-DpZHa1JW.js +1 -0
- package/dist/app/client/assets/IconChip-yqaQ2y_d.css +1 -0
- package/dist/app/client/assets/InputGroup-BlZvt9In.css +1 -0
- package/dist/app/client/assets/InputGroup-CsOeBnpB.js +1 -0
- package/dist/app/client/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
- package/dist/app/client/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
- package/dist/app/client/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
- package/dist/app/client/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
- package/dist/app/client/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
- package/dist/app/client/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
- package/dist/app/client/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
- package/dist/app/client/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
- package/dist/app/client/assets/Loader-Cm9YJNNJ.js +1 -0
- package/dist/app/client/assets/MACH-sK0r79kQ.svg +4 -0
- package/dist/app/client/assets/OUSD-BFXgVo-Z.svg +5 -0
- package/dist/app/client/assets/OUSD.dark-BbbjMvA1.svg +17 -0
- package/dist/app/client/assets/OUSD.light-B_zpSz_c.svg +17 -0
- package/dist/app/client/assets/PRIME-CiFp2-3e.svg +14 -0
- package/dist/app/client/assets/PopoverPopup-DprRXRQe.js +1 -0
- package/dist/app/client/assets/Rows-DPGTUdA8.css +1 -0
- package/dist/app/client/assets/Rows-Qqo3evtk.js +1 -0
- package/dist/app/client/assets/SBC-BTYkbkiD.svg +1 -0
- package/dist/app/client/assets/SEKAU-CB5Fc6o8.svg +5 -0
- package/dist/app/client/assets/Separator-CZUjVQOL.js +1 -0
- package/dist/app/client/assets/SignIn-HdaDzFmq.js +1 -0
- package/dist/app/client/assets/SignIn-mlBTwUq4.css +1 -0
- package/dist/app/client/assets/Stack-CkkvkOzj.js +1 -0
- package/dist/app/client/assets/Stack-D7Yt22Ed.css +1 -0
- package/dist/app/client/assets/Tag-BMh6ajrW.css +1 -0
- package/dist/app/client/assets/Tag-CLOVANTX.js +1 -0
- package/dist/app/client/assets/ToolbarRootContext-Zty_Dh3J.js +1 -0
- package/dist/app/client/assets/Tooltip-CLATV6YU.js +1 -0
- package/dist/app/client/assets/Tooltip-d3y9ESUJ.css +1 -0
- package/dist/app/client/assets/USD1-COVcO_PB.svg +30 -0
- package/dist/app/client/assets/USDB-Ckwb6UQw.svg +11 -0
- package/dist/app/client/assets/USDC.e-3nMsKAMC.svg +1 -0
- package/dist/app/client/assets/USDT0-ia60Dw0e.svg +1 -0
- package/dist/app/client/assets/USDY-CB4iet2q.svg +16 -0
- package/dist/app/client/assets/USDe-BXHQCd92.svg +1 -0
- package/dist/app/client/assets/Upgrade-D0_aO5AP.js +1 -0
- package/dist/app/client/assets/WalletUpgrade-BPsPNQsd.js +1 -0
- package/dist/app/client/assets/WalletUpgrade-C04kW0Jl.css +1 -0
- package/dist/app/client/assets/YLDS-CRh8Zw0g.svg +3 -0
- package/dist/app/client/assets/___-I98bns4o.css +1 -0
- package/dist/app/client/assets/___.flows-XOlLwMIy.js +5 -0
- package/dist/app/client/assets/alphaUSD-CpCFoVuh.svg +1 -0
- package/dist/app/client/assets/authorize-C-MlCyaM.js +1 -0
- package/dist/app/client/assets/betaUSD-9A8AjgYg.svg +1 -0
- package/dist/app/client/assets/cUSD-WsQfa-iC.svg +1 -0
- package/dist/app/client/assets/cbBTC-DvUDqrDi.svg +1 -0
- package/dist/app/client/assets/choose-account-nXR-SKa2.js +1 -0
- package/dist/app/client/assets/deposit-G8tiLPN4.js +1 -0
- package/dist/app/client/assets/device-BojBF7hZ.js +1 -0
- package/dist/app/client/assets/error-KiOpX7GD.js +1 -0
- package/dist/app/client/assets/frxUSD-n9pTpinR.svg +1 -0
- package/dist/app/client/assets/getPseudoElementBounds-BsLy4zf_.js +1 -0
- package/dist/app/client/assets/goUSD-D9kUvHsF.svg +5 -0
- package/dist/app/client/assets/iUSD-CWCJAq9X.svg +1 -0
- package/dist/app/client/assets/index-BZH0M7Nf.js +13 -0
- package/dist/app/client/assets/index-CIYxHmYA.css +1 -0
- package/dist/app/client/assets/login-DUjpk60p.js +1 -0
- package/dist/app/client/assets/pathUSD-BvaO6ooS.svg +25 -0
- package/dist/app/client/assets/preload-helper-Bs9KvdYl.js +1 -0
- package/dist/app/client/assets/rUSD-B-xuFS7T.svg +1 -0
- package/dist/app/client/assets/reUSD-CkIUs0Lx.svg +1 -0
- package/dist/app/client/assets/removable-DMiA3t_o.js +1 -0
- package/dist/app/client/assets/reset-co-CHrff.css +1 -0
- package/dist/app/client/assets/rolldown-runtime-WkwZ5CU-.js +1 -0
- package/dist/app/client/assets/routes-CK8cthzA.js +1 -0
- package/dist/app/client/assets/sUSDe-j9GOnH7I.svg +1 -0
- package/dist/app/client/assets/siUSD-C10QUNYS.svg +1 -0
- package/dist/app/client/assets/stcUSD-DIntDJeh.svg +1 -0
- package/dist/app/client/assets/syrupUSDC-DhYwZqdM.svg +5 -0
- package/dist/app/client/assets/thetaUSD-Dgmksf6G.svg +1 -0
- package/dist/app/client/assets/useNavigate-CB6S2u4J.js +1 -0
- package/dist/app/client/assets/useQuery-BpHfPhTT.js +1 -0
- package/dist/app/client/assets/useRegisterFieldControl-DsslqY-V.js +1 -0
- package/dist/app/client/assets/wYLDS-CaCKDrO-.svg +10 -0
- package/dist/app/client/assets/wsrUSD-B2Ey0bDQ.svg +1 -0
- package/dist/app/client/assets/zyzz-DYC-X0_B.css +1 -0
- package/dist/app/client/assets/zyzz.config-DX_D_7j3.js +2 -0
- package/dist/app/db/auth.d.ts +3412 -0
- package/dist/app/db/auth.d.ts.map +1 -0
- package/dist/app/db/auth.js +349 -0
- package/dist/app/db/auth.js.map +1 -0
- package/dist/app/db/schema.d.ts +1091 -0
- package/dist/app/db/schema.d.ts.map +1 -0
- package/dist/app/db/schema.js +183 -0
- package/dist/app/db/schema.js.map +1 -0
- package/dist/app/db/table.d.ts +8 -0
- package/dist/app/db/table.d.ts.map +1 -0
- package/dist/app/db/table.js +28 -0
- package/dist/app/db/table.js.map +1 -0
- package/dist/app/server/.vite/manifest.json +2093 -0
- package/dist/app/server/assets/Account-BYLpNFf3.css +1 -0
- package/dist/app/server/assets/Account-G_SUeRU3.js +2 -0
- package/dist/app/server/assets/Account-G_SUeRU3.js.map +1 -0
- package/dist/app/server/assets/Amount-Cgwdr3Xt.js +2 -0
- package/dist/app/server/assets/Amount-Cgwdr3Xt.js.map +1 -0
- package/dist/app/server/assets/Amount-ZdtluGf-.css +1 -0
- package/dist/app/server/assets/Approval-CgV5JHlb.css +1 -0
- package/dist/app/server/assets/Approval-DvkB9tWA.js +2 -0
- package/dist/app/server/assets/Approval-DvkB9tWA.js.map +1 -0
- package/dist/app/server/assets/ArrowUp-DpK_zNgZ.js +2 -0
- package/dist/app/server/assets/ArrowUp-DpK_zNgZ.js.map +1 -0
- package/dist/app/server/assets/Authentication-BOkhlNQu.js +2 -0
- package/dist/app/server/assets/Authentication-BOkhlNQu.js.map +1 -0
- package/dist/app/server/assets/Authentication-C3oNZAVX.js +2 -0
- package/dist/app/server/assets/Authentication-C3oNZAVX.js.map +1 -0
- package/dist/app/server/assets/BRLA-CZvVDNYr.png +0 -0
- package/dist/app/server/assets/BRZ-Cn3jEi9t.svg +1 -0
- package/dist/app/server/assets/Bytes-C7CRVS3J.js +4 -0
- package/dist/app/server/assets/Bytes-C7CRVS3J.js.map +1 -0
- package/dist/app/server/assets/CHFAU-DCedc4aH.png +0 -0
- package/dist/app/server/assets/Callout-DBfEmP7q.css +1 -0
- package/dist/app/server/assets/Callout-tQoAitWq.js +2 -0
- package/dist/app/server/assets/Callout-tQoAitWq.js.map +1 -0
- package/dist/app/server/assets/ChainList-C4A_7e-9.js +6 -0
- package/dist/app/server/assets/ChainList-C4A_7e-9.js.map +1 -0
- package/dist/app/server/assets/ChainName-BMnJyJrd.js +2 -0
- package/dist/app/server/assets/ChainName-BMnJyJrd.js.map +1 -0
- package/dist/app/server/assets/Check-DU_oR3Ev.js +2 -0
- package/dist/app/server/assets/Check-DU_oR3Ev.js.map +1 -0
- package/dist/app/server/assets/ChevronRight-DTBnw-W6.js +2 -0
- package/dist/app/server/assets/ChevronRight-DTBnw-W6.js.map +1 -0
- package/dist/app/server/assets/ChooseAccount-BizJvMrY.js +2 -0
- package/dist/app/server/assets/ChooseAccount-BizJvMrY.js.map +1 -0
- package/dist/app/server/assets/ChooseAccount-DL3wgJhE.css +1 -0
- package/dist/app/server/assets/Client-Dx3KrpJZ.js +2 -0
- package/dist/app/server/assets/Client-Dx3KrpJZ.js.map +1 -0
- package/dist/app/server/assets/ClientOnly-CKLiu67O.js +2 -0
- package/dist/app/server/assets/ClientOnly-CKLiu67O.js.map +1 -0
- package/dist/app/server/assets/Close-DUeE37ev.js +2 -0
- package/dist/app/server/assets/Close-DUeE37ev.js.map +1 -0
- package/dist/app/server/assets/Cloud-CLB3rTTy.js +2 -0
- package/dist/app/server/assets/Cloud-CLB3rTTy.js.map +1 -0
- package/dist/app/server/assets/CodeInput-BqRteSwD.css +1 -0
- package/dist/app/server/assets/CodeInput-FsPzVuLU.js +2 -0
- package/dist/app/server/assets/CodeInput-FsPzVuLU.js.map +1 -0
- package/dist/app/server/assets/Credential-DFjcrdyI.js +2 -0
- package/dist/app/server/assets/Credential-DFjcrdyI.js.map +1 -0
- package/dist/app/server/assets/DLUSD-BnRXm3EI.png +0 -0
- package/dist/app/server/assets/Deposit-CclrAoXL.css +1 -0
- package/dist/app/server/assets/Deposit-ChYGRfW2.js +2 -0
- package/dist/app/server/assets/Deposit-ChYGRfW2.js.map +1 -0
- package/dist/app/server/assets/DevTools-BYkmtuV5.css +1 -0
- package/dist/app/server/assets/DevTools-ZJVXqrIK.js +2 -0
- package/dist/app/server/assets/DevTools-ZJVXqrIK.js.map +1 -0
- package/dist/app/server/assets/DeviceApproval-BffFLD8F.css +1 -0
- package/dist/app/server/assets/DeviceApproval-Bqe3Mi78.js +2 -0
- package/dist/app/server/assets/DeviceApproval-Bqe3Mi78.js.map +1 -0
- package/dist/app/server/assets/EURAU-sjieTTB9.svg +1 -0
- package/dist/app/server/assets/EURC.e-CxYiiwkz.svg +1 -0
- package/dist/app/server/assets/ExecutionError-CDszGSF1.js +9 -0
- package/dist/app/server/assets/ExecutionError-CDszGSF1.js.map +1 -0
- package/dist/app/server/assets/Fingerprint-DhOPOdRr.js +2 -0
- package/dist/app/server/assets/Fingerprint-DhOPOdRr.js.map +1 -0
- package/dist/app/server/assets/GBPA-DI_25xSG.svg +4 -0
- package/dist/app/server/assets/GUSD-BDEP2Qb-.svg +1 -0
- package/dist/app/server/assets/GeistMono-Variable-BRXCGrxA.woff2 +0 -0
- package/dist/app/server/assets/Globe-2CxqxU-7.js +2 -0
- package/dist/app/server/assets/Globe-2CxqxU-7.js.map +1 -0
- package/dist/app/server/assets/Grant-5a-n1gJH.css +1 -0
- package/dist/app/server/assets/Grant-D_tun0mF.js +2 -0
- package/dist/app/server/assets/Grant-D_tun0mF.js.map +1 -0
- package/dist/app/server/assets/Hex-C9KeV7_9.css +1 -0
- package/dist/app/server/assets/Hex-Z6m_0Y0m.js +11 -0
- package/dist/app/server/assets/Hex-Z6m_0Y0m.js.map +1 -0
- package/dist/app/server/assets/IconChip-C9ZrmGB5.js +2 -0
- package/dist/app/server/assets/IconChip-C9ZrmGB5.js.map +1 -0
- package/dist/app/server/assets/IconChip-yqaQ2y_d.css +1 -0
- package/dist/app/server/assets/InputGroup-BlZvt9In.css +1 -0
- package/dist/app/server/assets/InputGroup-hpjuLuR7.js +2 -0
- package/dist/app/server/assets/InputGroup-hpjuLuR7.js.map +1 -0
- package/dist/app/server/assets/Inter-cyrillic-e3OmmzmJ.woff2 +0 -0
- package/dist/app/server/assets/Inter-cyrillic-ext-DOWZeO4Q.woff2 +0 -0
- package/dist/app/server/assets/Inter-greek-BD3ujQlX.woff2 +0 -0
- package/dist/app/server/assets/Inter-greek-ext-CXEwbus4.woff2 +0 -0
- package/dist/app/server/assets/Inter-latin-BDFm4vTb.woff2 +0 -0
- package/dist/app/server/assets/Inter-latin-ext-E7a9JEPe.woff2 +0 -0
- package/dist/app/server/assets/Inter-symbols-DEch7Rxr.woff2 +0 -0
- package/dist/app/server/assets/Inter-vietnamese-Bg9723vR.woff2 +0 -0
- package/dist/app/server/assets/Loader-DnKC9P5p.js +2 -0
- package/dist/app/server/assets/Loader-DnKC9P5p.js.map +1 -0
- package/dist/app/server/assets/MACH-sK0r79kQ.svg +4 -0
- package/dist/app/server/assets/Match-CyVdYcSf.js +2 -0
- package/dist/app/server/assets/Match-CyVdYcSf.js.map +1 -0
- package/dist/app/server/assets/OUSD-BFXgVo-Z.svg +5 -0
- package/dist/app/server/assets/OUSD.dark-BbbjMvA1.svg +17 -0
- package/dist/app/server/assets/OUSD.light-B_zpSz_c.svg +17 -0
- package/dist/app/server/assets/PRIME-CiFp2-3e.svg +14 -0
- package/dist/app/server/assets/PopoverPopup-CwqeQelI.js +2 -0
- package/dist/app/server/assets/PopoverPopup-CwqeQelI.js.map +1 -0
- package/dist/app/server/assets/Rows-CQKQwTI1.js +2 -0
- package/dist/app/server/assets/Rows-CQKQwTI1.js.map +1 -0
- package/dist/app/server/assets/Rows-DPGTUdA8.css +1 -0
- package/dist/app/server/assets/SBC-BTYkbkiD.svg +1 -0
- package/dist/app/server/assets/SEKAU-CB5Fc6o8.svg +5 -0
- package/dist/app/server/assets/Separator-DrI7KRAs.js +2 -0
- package/dist/app/server/assets/Separator-DrI7KRAs.js.map +1 -0
- package/dist/app/server/assets/SignIn-DfeeLEmN.js +2 -0
- package/dist/app/server/assets/SignIn-DfeeLEmN.js.map +1 -0
- package/dist/app/server/assets/SignIn-mlBTwUq4.css +1 -0
- package/dist/app/server/assets/Stack-D7Yt22Ed.css +1 -0
- package/dist/app/server/assets/Stack-DGktaLZc.js +2 -0
- package/dist/app/server/assets/Stack-DGktaLZc.js.map +1 -0
- package/dist/app/server/assets/Tag-9vSRBpph.js +2 -0
- package/dist/app/server/assets/Tag-9vSRBpph.js.map +1 -0
- package/dist/app/server/assets/Tag-BMh6ajrW.css +1 -0
- package/dist/app/server/assets/ToolbarRootContext-BH_CFSWd.js +2 -0
- package/dist/app/server/assets/ToolbarRootContext-BH_CFSWd.js.map +1 -0
- package/dist/app/server/assets/Tooltip-DLX41peb.js +2 -0
- package/dist/app/server/assets/Tooltip-DLX41peb.js.map +1 -0
- package/dist/app/server/assets/Tooltip-d3y9ESUJ.css +1 -0
- package/dist/app/server/assets/USD1-COVcO_PB.svg +30 -0
- package/dist/app/server/assets/USDB-Ckwb6UQw.svg +11 -0
- package/dist/app/server/assets/USDC.e-3nMsKAMC.svg +1 -0
- package/dist/app/server/assets/USDT0-ia60Dw0e.svg +1 -0
- package/dist/app/server/assets/USDY-CB4iet2q.svg +16 -0
- package/dist/app/server/assets/USDe-BXHQCd92.svg +1 -0
- package/dist/app/server/assets/Upgrade-Dbfm2nm0.js +2 -0
- package/dist/app/server/assets/Upgrade-Dbfm2nm0.js.map +1 -0
- package/dist/app/server/assets/WalletUpgrade-C04kW0Jl.css +1 -0
- package/dist/app/server/assets/WalletUpgrade-CWKc5fYt.js +2 -0
- package/dist/app/server/assets/WalletUpgrade-CWKc5fYt.js.map +1 -0
- package/dist/app/server/assets/YLDS-CRh8Zw0g.svg +3 -0
- package/dist/app/server/assets/___-I98bns4o.css +1 -0
- package/dist/app/server/assets/___.flows-Cc-awUoC.js +6 -0
- package/dist/app/server/assets/___.flows-Cc-awUoC.js.map +1 -0
- package/dist/app/server/assets/_tanstack-start-manifest_v-U7TrtUSA.js +1 -0
- package/dist/app/server/assets/_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows-B1pPOqsM.css +1 -0
- package/dist/app/server/assets/_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-CKALi9oD.js +2 -0
- package/dist/app/server/assets/_zyzz__2Fhome_2Frunner_2Fwork_2Fid_2Fid_2Fsrc_2Fapp_2Froutes_2F_5B__5D.flows.tsx-CKALi9oD.js.map +1 -0
- package/dist/app/server/assets/_zyzz_shared-BbDIEd_j.css +1 -0
- package/dist/app/server/assets/alphaUSD-CpCFoVuh.svg +1 -0
- package/dist/app/server/assets/arktype-aI7TBD0R-D1R3Byo5.js +2 -0
- package/dist/app/server/assets/arktype-aI7TBD0R-D1R3Byo5.js.map +1 -0
- package/dist/app/server/assets/async-local-storage-DlOvwxXd.js +2 -0
- package/dist/app/server/assets/async-local-storage-DlOvwxXd.js.map +1 -0
- package/dist/app/server/assets/authorize-BXzTo2Pb.js +2 -0
- package/dist/app/server/assets/authorize-BXzTo2Pb.js.map +1 -0
- package/dist/app/server/assets/authorize-BzoUqOdA.js +2 -0
- package/dist/app/server/assets/authorize-BzoUqOdA.js.map +1 -0
- package/dist/app/server/assets/authorize-DXYo-K2n-rmQQ42x1.js +56 -0
- package/dist/app/server/assets/authorize-DXYo-K2n-rmQQ42x1.js.map +1 -0
- package/dist/app/server/assets/authorize-DfjPYJqS.css +1 -0
- package/dist/app/server/assets/betaUSD-9A8AjgYg.svg +1 -0
- package/dist/app/server/assets/bun-sqlite-dialect-DoOVo4ja-CtyBkVMb.js +2 -0
- package/dist/app/server/assets/bun-sqlite-dialect-DoOVo4ja-CtyBkVMb.js.map +1 -0
- package/dist/app/server/assets/cUSD-WsQfa-iC.svg +1 -0
- package/dist/app/server/assets/call-dzi0xjZd.js +31 -0
- package/dist/app/server/assets/call-dzi0xjZd.js.map +1 -0
- package/dist/app/server/assets/cbBTC-DvUDqrDi.svg +1 -0
- package/dist/app/server/assets/ccip-DjD8z_3B.js +2 -0
- package/dist/app/server/assets/ccip-DjD8z_3B.js.map +1 -0
- package/dist/app/server/assets/choose-account-_X7xq5am.js +2 -0
- package/dist/app/server/assets/choose-account-_X7xq5am.js.map +1 -0
- package/dist/app/server/assets/choose-account-lqA5SLx9.css +1 -0
- package/dist/app/server/assets/choose-account-zm-5Qs3e.js +2 -0
- package/dist/app/server/assets/choose-account-zm-5Qs3e.js.map +1 -0
- package/dist/app/server/assets/compiled-query-Ds2NVcFT.js +2 -0
- package/dist/app/server/assets/compiled-query-Ds2NVcFT.js.map +1 -0
- package/dist/app/server/assets/convert-BIC8n32x.js +2 -0
- package/dist/app/server/assets/convert-BIC8n32x.js.map +1 -0
- package/dist/app/server/assets/cookie-DxViaO10.js +2 -0
- package/dist/app/server/assets/cookie-DxViaO10.js.map +1 -0
- package/dist/app/server/assets/core-BBrZXfrB.js +56 -0
- package/dist/app/server/assets/core-BBrZXfrB.js.map +1 -0
- package/dist/app/server/assets/d1-sqlite-dialect-m0f01-4z-Cv-csE1u.js +2 -0
- package/dist/app/server/assets/d1-sqlite-dialect-m0f01-4z-Cv-csE1u.js.map +1 -0
- package/dist/app/server/assets/decodeFunctionData-bP6V2ai4.js +2 -0
- package/dist/app/server/assets/decodeFunctionData-bP6V2ai4.js.map +1 -0
- package/dist/app/server/assets/default-u_dwuiYb-DOrMMcg9.js +2 -0
- package/dist/app/server/assets/default-u_dwuiYb-DOrMMcg9.js.map +1 -0
- package/dist/app/server/assets/deposit-BBaNI01u.js +2 -0
- package/dist/app/server/assets/deposit-BBaNI01u.js.map +1 -0
- package/dist/app/server/assets/deposit-LWS6ZTuf.js +2 -0
- package/dist/app/server/assets/deposit-LWS6ZTuf.js.map +1 -0
- package/dist/app/server/assets/deposit-oFx15XCA.css +1 -0
- package/dist/app/server/assets/device-CrXlusjr.js +2 -0
- package/dist/app/server/assets/device-CrXlusjr.js.map +1 -0
- package/dist/app/server/assets/device-DdFMgYe2.js +2 -0
- package/dist/app/server/assets/device-DdFMgYe2.js.map +1 -0
- package/dist/app/server/assets/device-tMCpu5zk.css +1 -0
- package/dist/app/server/assets/dist-CR6FW-yS.js +1 -0
- package/dist/app/server/assets/dist-CoH0hD1s.js +15 -0
- package/dist/app/server/assets/dist-CoH0hD1s.js.map +1 -0
- package/dist/app/server/assets/dist-DcICI3fd.js +2 -0
- package/dist/app/server/assets/dist-DcICI3fd.js.map +1 -0
- package/dist/app/server/assets/effect-QlVUlMFu-mXPkuQTb.js +2 -0
- package/dist/app/server/assets/effect-QlVUlMFu-mXPkuQTb.js.map +1 -0
- package/dist/app/server/assets/empty-plugin-adapters-BaGcmrjC.js +2 -0
- package/dist/app/server/assets/empty-plugin-adapters-BaGcmrjC.js.map +1 -0
- package/dist/app/server/assets/error-CXy8gqdE.css +1 -0
- package/dist/app/server/assets/error-DXDT2AHy.js +2 -0
- package/dist/app/server/assets/error-DXDT2AHy.js.map +1 -0
- package/dist/app/server/assets/error-bnVzy9tx.js +2 -0
- package/dist/app/server/assets/error-bnVzy9tx.js.map +1 -0
- package/dist/app/server/assets/esm-C6SW--yt.js +4 -0
- package/dist/app/server/assets/esm-C6SW--yt.js.map +1 -0
- package/dist/app/server/assets/factory-dvoOlKer.js +5 -0
- package/dist/app/server/assets/factory-dvoOlKer.js.map +1 -0
- package/dist/app/server/assets/frxUSD-n9pTpinR.svg +1 -0
- package/dist/app/server/assets/get-id-field-OwLpfjj2.js +6 -0
- package/dist/app/server/assets/get-id-field-OwLpfjj2.js.map +1 -0
- package/dist/app/server/assets/getPseudoElementBounds-PkWU72kn.js +2 -0
- package/dist/app/server/assets/getPseudoElementBounds-PkWU72kn.js.map +1 -0
- package/dist/app/server/assets/goUSD-D9kUvHsF.svg +5 -0
- package/dist/app/server/assets/iUSD-CWCJAq9X.svg +1 -0
- package/dist/app/server/assets/index-CLddUTqr-CC33CMvS.js +2 -0
- package/dist/app/server/assets/index-CLddUTqr-CC33CMvS.js.map +1 -0
- package/dist/app/server/assets/index-DZEfthgZ-Ec2MMQ_e.js +2 -0
- package/dist/app/server/assets/index-DZEfthgZ-Ec2MMQ_e.js.map +1 -0
- package/dist/app/server/assets/kysely-adapter-B8tQwTcu.js +1 -0
- package/dist/app/server/assets/lazyRouteComponent-DPOOPZw_.js +2 -0
- package/dist/app/server/assets/lazyRouteComponent-DPOOPZw_.js.map +1 -0
- package/dist/app/server/assets/load-server-Dr0IlySo.js +3 -0
- package/dist/app/server/assets/load-server-Dr0IlySo.js.map +1 -0
- package/dist/app/server/assets/login-BLq3tEEr.js +2 -0
- package/dist/app/server/assets/login-BLq3tEEr.js.map +1 -0
- package/dist/app/server/assets/login-DCIrAbED.js +2 -0
- package/dist/app/server/assets/login-DCIrAbED.js.map +1 -0
- package/dist/app/server/assets/login-msDnt3yT.css +1 -0
- package/dist/app/server/assets/matchContext-ByrIUj4L.js +2 -0
- package/dist/app/server/assets/matchContext-ByrIUj4L.js.map +1 -0
- package/dist/app/server/assets/node-sqlite-dialect-BowWLXvK.js +2 -0
- package/dist/app/server/assets/node-sqlite-dialect-BowWLXvK.js.map +1 -0
- package/dist/app/server/assets/pathUSD-BvaO6ooS.svg +25 -0
- package/dist/app/server/assets/rUSD-B-xuFS7T.svg +1 -0
- package/dist/app/server/assets/reUSD-CkIUs0Lx.svg +1 -0
- package/dist/app/server/assets/react-dom-DYzj0HXX.js +2 -0
- package/dist/app/server/assets/react-dom-DYzj0HXX.js.map +1 -0
- package/dist/app/server/assets/removable-BCLTvPOx.js +2 -0
- package/dist/app/server/assets/removable-BCLTvPOx.js.map +1 -0
- package/dist/app/server/assets/reset-DZWeTZeQ.js +2 -0
- package/dist/app/server/assets/reset-DZWeTZeQ.js.map +1 -0
- package/dist/app/server/assets/reset-co-CHrff.css +1 -0
- package/dist/app/server/assets/resolveError-CZXXvCJR.js +2 -0
- package/dist/app/server/assets/resolveError-CZXXvCJR.js.map +1 -0
- package/dist/app/server/assets/rolldown-runtime-BWaJ3C7D.js +1 -0
- package/dist/app/server/assets/router-Bqz5X4Qw.js +2 -0
- package/dist/app/server/assets/router-Bqz5X4Qw.js.map +1 -0
- package/dist/app/server/assets/router-CclzitkY.css +1 -0
- package/dist/app/server/assets/routes-BLQdKqcZ.js +2 -0
- package/dist/app/server/assets/routes-BLQdKqcZ.js.map +1 -0
- package/dist/app/server/assets/routes-BgiIzrOt.css +1 -0
- package/dist/app/server/assets/routes-Bv6WzsSR.js +2 -0
- package/dist/app/server/assets/routes-Bv6WzsSR.js.map +1 -0
- package/dist/app/server/assets/sUSDe-j9GOnH7I.svg +1 -0
- package/dist/app/server/assets/schema-check-oLqvHR8y.js +9 -0
- package/dist/app/server/assets/schema-check-oLqvHR8y.js.map +1 -0
- package/dist/app/server/assets/secp256k1-yg8eeIYU.js +2 -0
- package/dist/app/server/assets/secp256k1-yg8eeIYU.js.map +1 -0
- package/dist/app/server/assets/server-RRUiOef2.js +76 -0
- package/dist/app/server/assets/server-RRUiOef2.js.map +1 -0
- package/dist/app/server/assets/siUSD-C10QUNYS.svg +1 -0
- package/dist/app/server/assets/sqlite-adapter-C_LAV4e3.js +2 -0
- package/dist/app/server/assets/sqlite-adapter-C_LAV4e3.js.map +1 -0
- package/dist/app/server/assets/sqlite-introspector-DSCAP82F-Crx7Ny14.js +6 -0
- package/dist/app/server/assets/sqlite-introspector-DSCAP82F-Crx7Ny14.js.map +1 -0
- package/dist/app/server/assets/standard-json-DY77efq0.js +2 -0
- package/dist/app/server/assets/standard-json-DY77efq0.js.map +1 -0
- package/dist/app/server/assets/standard-json-ig2t0wRt.js +2 -0
- package/dist/app/server/assets/standard-json-ig2t0wRt.js.map +1 -0
- package/dist/app/server/assets/standard-json-t-LNckA6.js +2 -0
- package/dist/app/server/assets/standard-json-t-LNckA6.js.map +1 -0
- package/dist/app/server/assets/standard-openapi-CONmVRl8.js +2 -0
- package/dist/app/server/assets/standard-openapi-CONmVRl8.js.map +1 -0
- package/dist/app/server/assets/start-C63VetBp.js +2 -0
- package/dist/app/server/assets/start-C63VetBp.js.map +1 -0
- package/dist/app/server/assets/stcUSD-DIntDJeh.svg +1 -0
- package/dist/app/server/assets/sury-CWZTCd75-CDaOS2oM.js +2 -0
- package/dist/app/server/assets/sury-CWZTCd75-CDaOS2oM.js.map +1 -0
- package/dist/app/server/assets/syrupUSDC-DhYwZqdM.svg +5 -0
- package/dist/app/server/assets/thetaUSD-Dgmksf6G.svg +1 -0
- package/dist/app/server/assets/typebox-Dei93FPO-D_lCVdAz.js +2 -0
- package/dist/app/server/assets/typebox-Dei93FPO-D_lCVdAz.js.map +1 -0
- package/dist/app/server/assets/useNavigate-D6d1w7KE.js +2 -0
- package/dist/app/server/assets/useNavigate-D6d1w7KE.js.map +1 -0
- package/dist/app/server/assets/useQuery-BRpCr5vj.js +2 -0
- package/dist/app/server/assets/useQuery-BRpCr5vj.js.map +1 -0
- package/dist/app/server/assets/useRegisterFieldControl-cJesrOWK.js +2 -0
- package/dist/app/server/assets/useRegisterFieldControl-cJesrOWK.js.map +1 -0
- package/dist/app/server/assets/utils-C4ZXZIZW.js +2 -0
- package/dist/app/server/assets/utils-C4ZXZIZW.js.map +1 -0
- package/dist/app/server/assets/utils-D57zfcg-.js +2 -0
- package/dist/app/server/assets/utils-D57zfcg-.js.map +1 -0
- package/dist/app/server/assets/valibot--1zFm7rT-CIKoH3MS.js +2 -0
- package/dist/app/server/assets/valibot--1zFm7rT-CIKoH3MS.js.map +1 -0
- package/dist/app/server/assets/valibot-D_HTw1Gn-BdPyLkXt.js +2 -0
- package/dist/app/server/assets/valibot-D_HTw1Gn-BdPyLkXt.js.map +1 -0
- package/dist/app/server/assets/wYLDS-CaCKDrO-.svg +10 -0
- package/dist/app/server/assets/wsrUSD-B2Ey0bDQ.svg +1 -0
- package/dist/app/server/assets/zod-Bwrt9trS-BezI5Gi1.js +2 -0
- package/dist/app/server/assets/zod-Bwrt9trS-BezI5Gi1.js.map +1 -0
- package/dist/app/server/assets/zod-DSgpEGAE-DZ7M_Q33.js +2 -0
- package/dist/app/server/assets/zod-DSgpEGAE-DZ7M_Q33.js.map +1 -0
- package/dist/app/server/assets/zyzz-6R2K52xP.css +1 -0
- package/dist/app/server/assets/zyzz.config-CJRpjn0E.js +3 -0
- package/dist/app/server/assets/zyzz.config-CJRpjn0E.js.map +1 -0
- package/dist/app/server/index.js +532 -0
- package/dist/app/server/index.js.map +1 -0
- package/dist/app/server/wrangler.json +1 -0
- package/dist/cli/Admin.d.ts +34 -0
- package/dist/cli/Admin.d.ts.map +1 -0
- package/dist/cli/Admin.js +61 -0
- package/dist/cli/Admin.js.map +1 -0
- package/dist/cli/Apps.d.ts +9 -0
- package/dist/cli/Apps.d.ts.map +1 -0
- package/dist/cli/Apps.js +34 -0
- package/dist/cli/Apps.js.map +1 -0
- package/dist/cli/Cli.d.ts +13 -0
- package/dist/cli/Cli.d.ts.map +1 -0
- package/dist/cli/Cli.js +26 -0
- package/dist/cli/Cli.js.map +1 -0
- package/dist/cli/Project.d.ts +17 -0
- package/dist/cli/Project.d.ts.map +1 -0
- package/dist/cli/Project.js +90 -0
- package/dist/cli/Project.js.map +1 -0
- package/dist/cli/Realms.d.ts +24 -0
- package/dist/cli/Realms.d.ts.map +1 -0
- package/dist/cli/Realms.js +48 -0
- package/dist/cli/Realms.js.map +1 -0
- package/dist/cli/Session.d.ts +79 -0
- package/dist/cli/Session.d.ts.map +1 -0
- package/dist/cli/Session.js +229 -0
- package/dist/cli/Session.js.map +1 -0
- package/dist/cli/User.d.ts +24 -0
- package/dist/cli/User.d.ts.map +1 -0
- package/dist/cli/User.js +34 -0
- package/dist/cli/User.js.map +1 -0
- package/dist/cli/V1.d.ts +32 -0
- package/dist/cli/V1.d.ts.map +1 -0
- package/dist/cli/V1.js +38 -0
- package/dist/cli/V1.js.map +1 -0
- package/dist/cli/bin.d.ts +3 -0
- package/dist/cli/bin.d.ts.map +1 -0
- package/dist/cli/bin.js +46 -0
- package/dist/cli/bin.js.map +1 -0
- package/dist/cli/commands/admin/apps/create.d.ts +23 -0
- package/dist/cli/commands/admin/apps/create.d.ts.map +1 -0
- package/dist/cli/commands/admin/apps/create.js +84 -0
- package/dist/cli/commands/admin/apps/create.js.map +1 -0
- package/dist/cli/commands/admin/apps/delete.d.ts +15 -0
- package/dist/cli/commands/admin/apps/delete.d.ts.map +1 -0
- package/dist/cli/commands/admin/apps/delete.js +41 -0
- package/dist/cli/commands/admin/apps/delete.js.map +1 -0
- package/dist/cli/commands/admin/apps/index.d.ts +5 -0
- package/dist/cli/commands/admin/apps/index.d.ts.map +1 -0
- package/dist/cli/commands/admin/apps/index.js +14 -0
- package/dist/cli/commands/admin/apps/index.js.map +1 -0
- package/dist/cli/commands/admin/apps/list.d.ts +10 -0
- package/dist/cli/commands/admin/apps/list.d.ts.map +1 -0
- package/dist/cli/commands/admin/apps/list.js +26 -0
- package/dist/cli/commands/admin/apps/list.js.map +1 -0
- package/dist/cli/commands/admin/apps/rotate-secret.d.ts +17 -0
- package/dist/cli/commands/admin/apps/rotate-secret.d.ts.map +1 -0
- package/dist/cli/commands/admin/apps/rotate-secret.js +47 -0
- package/dist/cli/commands/admin/apps/rotate-secret.js.map +1 -0
- package/dist/cli/commands/admin/apps/update.d.ts +20 -0
- package/dist/cli/commands/admin/apps/update.d.ts.map +1 -0
- package/dist/cli/commands/admin/apps/update.js +71 -0
- package/dist/cli/commands/admin/apps/update.js.map +1 -0
- package/dist/cli/commands/admin/index.d.ts +5 -0
- package/dist/cli/commands/admin/index.d.ts.map +1 -0
- package/dist/cli/commands/admin/index.js +13 -0
- package/dist/cli/commands/admin/index.js.map +1 -0
- package/dist/cli/commands/admin/migrate.d.ts +10 -0
- package/dist/cli/commands/admin/migrate.d.ts.map +1 -0
- package/dist/cli/commands/admin/migrate.js +20 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/realms/add.d.ts +13 -0
- package/dist/cli/commands/admin/realms/add.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/add.js +42 -0
- package/dist/cli/commands/admin/realms/add.js.map +1 -0
- package/dist/cli/commands/admin/realms/index.d.ts +5 -0
- package/dist/cli/commands/admin/realms/index.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/index.js +13 -0
- package/dist/cli/commands/admin/realms/index.js.map +1 -0
- package/dist/cli/commands/admin/realms/list.d.ts +14 -0
- package/dist/cli/commands/admin/realms/list.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/list.js +36 -0
- package/dist/cli/commands/admin/realms/list.js.map +1 -0
- package/dist/cli/commands/admin/realms/passkeys/index.d.ts +5 -0
- package/dist/cli/commands/admin/realms/passkeys/index.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/passkeys/index.js +13 -0
- package/dist/cli/commands/admin/realms/passkeys/index.js.map +1 -0
- package/dist/cli/commands/admin/realms/passkeys/set.d.ts +17 -0
- package/dist/cli/commands/admin/realms/passkeys/set.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/passkeys/set.js +46 -0
- package/dist/cli/commands/admin/realms/passkeys/set.js.map +1 -0
- package/dist/cli/commands/admin/realms/privy/index.d.ts +5 -0
- package/dist/cli/commands/admin/realms/privy/index.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/privy/index.js +13 -0
- package/dist/cli/commands/admin/realms/privy/index.js.map +1 -0
- package/dist/cli/commands/admin/realms/privy/set.d.ts +19 -0
- package/dist/cli/commands/admin/realms/privy/set.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/privy/set.js +66 -0
- package/dist/cli/commands/admin/realms/privy/set.js.map +1 -0
- package/dist/cli/commands/admin/realms/remove.d.ts +12 -0
- package/dist/cli/commands/admin/realms/remove.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/remove.js +35 -0
- package/dist/cli/commands/admin/realms/remove.js.map +1 -0
- package/dist/cli/commands/admin/realms/secp256k1/disable.d.ts +16 -0
- package/dist/cli/commands/admin/realms/secp256k1/disable.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/secp256k1/disable.js +42 -0
- package/dist/cli/commands/admin/realms/secp256k1/disable.js.map +1 -0
- package/dist/cli/commands/admin/realms/secp256k1/enable.d.ts +16 -0
- package/dist/cli/commands/admin/realms/secp256k1/enable.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/secp256k1/enable.js +42 -0
- package/dist/cli/commands/admin/realms/secp256k1/enable.js.map +1 -0
- package/dist/cli/commands/admin/realms/secp256k1/index.d.ts +9 -0
- package/dist/cli/commands/admin/realms/secp256k1/index.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/secp256k1/index.js +17 -0
- package/dist/cli/commands/admin/realms/secp256k1/index.js.map +1 -0
- package/dist/cli/commands/admin/realms/set.d.ts +17 -0
- package/dist/cli/commands/admin/realms/set.d.ts.map +1 -0
- package/dist/cli/commands/admin/realms/set.js +46 -0
- package/dist/cli/commands/admin/realms/set.js.map +1 -0
- package/dist/cli/commands/admin/rotate-key.d.ts +16 -0
- package/dist/cli/commands/admin/rotate-key.d.ts.map +1 -0
- package/dist/cli/commands/admin/rotate-key.js +46 -0
- package/dist/cli/commands/admin/rotate-key.js.map +1 -0
- package/dist/cli/commands/init.d.ts +11 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +34 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/login.d.ts +12 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +29 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/logout.d.ts +8 -0
- package/dist/cli/commands/logout.d.ts.map +1 -0
- package/dist/cli/commands/logout.js +19 -0
- package/dist/cli/commands/logout.js.map +1 -0
- package/dist/cli/commands/whoami.d.ts +12 -0
- package/dist/cli/commands/whoami.d.ts.map +1 -0
- package/dist/cli/commands/whoami.js +24 -0
- package/dist/cli/commands/whoami.js.map +1 -0
- package/dist/client/Actions.d.ts +108 -0
- package/dist/client/Actions.d.ts.map +1 -0
- package/dist/client/Actions.js +94 -0
- package/dist/client/Actions.js.map +1 -0
- package/dist/client/Auth.d.ts +143 -0
- package/dist/client/Auth.d.ts.map +1 -0
- package/dist/client/Auth.js +106 -0
- package/dist/client/Auth.js.map +1 -0
- package/dist/client/Authorization.d.ts +29 -0
- package/dist/client/Authorization.d.ts.map +1 -0
- package/dist/client/Authorization.js +12 -0
- package/dist/client/Authorization.js.map +1 -0
- package/dist/client/Decorator.d.ts +172 -0
- package/dist/client/Decorator.d.ts.map +1 -0
- package/dist/client/Decorator.js +241 -0
- package/dist/client/Decorator.js.map +1 -0
- package/dist/client/Key.d.ts +82 -0
- package/dist/client/Key.d.ts.map +1 -0
- package/dist/client/Key.js +81 -0
- package/dist/client/Key.js.map +1 -0
- package/dist/client/Pending.d.ts +38 -0
- package/dist/client/Pending.d.ts.map +1 -0
- package/dist/client/Pending.js +12 -0
- package/dist/client/Pending.js.map +1 -0
- package/dist/client/Permissions.d.ts +36 -0
- package/dist/client/Permissions.d.ts.map +1 -0
- package/dist/client/Permissions.js +16 -0
- package/dist/client/Permissions.js.map +1 -0
- package/dist/client/Storage.d.ts +27 -0
- package/dist/client/Storage.d.ts.map +1 -0
- package/dist/client/Storage.js +16 -0
- package/dist/client/Storage.js.map +1 -0
- package/dist/client/TempoAccount.d.ts +52 -0
- package/dist/client/TempoAccount.d.ts.map +1 -0
- package/dist/client/TempoAccount.js +17 -0
- package/dist/client/TempoAccount.js.map +1 -0
- package/dist/client/Tokens.d.ts +25 -0
- package/dist/client/Tokens.d.ts.map +1 -0
- package/dist/client/Tokens.js +12 -0
- package/dist/client/Tokens.js.map +1 -0
- package/dist/client/User.d.ts +21 -0
- package/dist/client/User.d.ts.map +1 -0
- package/dist/client/User.js +12 -0
- package/dist/client/User.js.map +1 -0
- package/dist/client/actions/account.d.ts +75 -0
- package/dist/client/actions/account.d.ts.map +1 -0
- package/dist/client/actions/account.js +102 -0
- package/dist/client/actions/account.js.map +1 -0
- package/dist/client/actions/device.d.ts +52 -0
- package/dist/client/actions/device.d.ts.map +1 -0
- package/dist/client/actions/device.js +103 -0
- package/dist/client/actions/device.js.map +1 -0
- package/dist/client/actions/email.d.ts +89 -0
- package/dist/client/actions/email.d.ts.map +1 -0
- package/dist/client/actions/email.js +86 -0
- package/dist/client/actions/email.js.map +1 -0
- package/dist/client/actions/oauth.d.ts +112 -0
- package/dist/client/actions/oauth.d.ts.map +1 -0
- package/dist/client/actions/oauth.js +103 -0
- package/dist/client/actions/oauth.js.map +1 -0
- package/dist/client/actions/passkey.d.ts +140 -0
- package/dist/client/actions/passkey.d.ts.map +1 -0
- package/dist/client/actions/passkey.js +170 -0
- package/dist/client/actions/passkey.js.map +1 -0
- package/dist/client/actions/realm.d.ts +25 -0
- package/dist/client/actions/realm.d.ts.map +1 -0
- package/dist/client/actions/realm.js +16 -0
- package/dist/client/actions/realm.js.map +1 -0
- package/dist/client/actions/redirect.d.ts +152 -0
- package/dist/client/actions/redirect.d.ts.map +1 -0
- package/dist/client/actions/redirect.js +311 -0
- package/dist/client/actions/redirect.js.map +1 -0
- package/dist/client/internal/accessKey.d.ts +21 -0
- package/dist/client/internal/accessKey.d.ts.map +1 -0
- package/dist/client/internal/accessKey.js +38 -0
- package/dist/client/internal/accessKey.js.map +1 -0
- package/dist/client/internal/account.d.ts +17 -0
- package/dist/client/internal/account.d.ts.map +1 -0
- package/dist/client/internal/account.js +3 -0
- package/dist/client/internal/account.js.map +1 -0
- package/dist/client/internal/api.d.ts +110 -0
- package/dist/client/internal/api.d.ts.map +1 -0
- package/dist/client/internal/api.js +136 -0
- package/dist/client/internal/api.js.map +1 -0
- package/dist/client/internal/headless.d.ts +159 -0
- package/dist/client/internal/headless.d.ts.map +1 -0
- package/dist/client/internal/headless.js +196 -0
- package/dist/client/internal/headless.js.map +1 -0
- package/dist/client/internal/indexedDb.d.ts +8 -0
- package/dist/client/internal/indexedDb.d.ts.map +1 -0
- package/dist/client/internal/indexedDb.js +32 -0
- package/dist/client/internal/indexedDb.js.map +1 -0
- package/dist/client/internal/request.d.ts +56 -0
- package/dist/client/internal/request.d.ts.map +1 -0
- package/dist/client/internal/request.js +44 -0
- package/dist/client/internal/request.js.map +1 -0
- package/dist/client/internal/store.d.ts +12 -0
- package/dist/client/internal/store.d.ts.map +1 -0
- package/dist/client/internal/store.js +15 -0
- package/dist/client/internal/store.js.map +1 -0
- package/dist/client/internal/verifier.d.ts +25 -0
- package/dist/client/internal/verifier.d.ts.map +1 -0
- package/dist/client/internal/verifier.js +52 -0
- package/dist/client/internal/verifier.js.map +1 -0
- package/dist/client.d.ts +18 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +18 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/Apps.d.ts +3169 -0
- package/dist/internal/Apps.d.ts.map +1 -0
- package/dist/internal/Apps.js +948 -0
- package/dist/internal/Apps.js.map +1 -0
- package/dist/internal/Auth.d.ts +4287 -0
- package/dist/internal/Auth.d.ts.map +1 -0
- package/dist/internal/Auth.js +185 -0
- package/dist/internal/Auth.js.map +1 -0
- package/dist/internal/Authorize.d.ts +526 -0
- package/dist/internal/Authorize.d.ts.map +1 -0
- package/dist/internal/Authorize.js +330 -0
- package/dist/internal/Authorize.js.map +1 -0
- package/dist/internal/Cache.d.ts +56 -0
- package/dist/internal/Cache.d.ts.map +1 -0
- package/dist/internal/Cache.js +65 -0
- package/dist/internal/Cache.js.map +1 -0
- package/dist/internal/Chain.d.ts +738 -0
- package/dist/internal/Chain.d.ts.map +1 -0
- package/dist/internal/Chain.js +65 -0
- package/dist/internal/Chain.js.map +1 -0
- package/dist/internal/ChainList.d.ts +117 -0
- package/dist/internal/ChainList.d.ts.map +1 -0
- package/dist/internal/ChainList.js +148 -0
- package/dist/internal/ChainList.js.map +1 -0
- package/dist/internal/ChainName.d.ts +11 -0
- package/dist/internal/ChainName.d.ts.map +1 -0
- package/dist/internal/ChainName.js +13 -0
- package/dist/internal/ChainName.js.map +1 -0
- package/dist/internal/CodeEmail.d.ts +38 -0
- package/dist/internal/CodeEmail.d.ts.map +1 -0
- package/dist/internal/CodeEmail.js +85 -0
- package/dist/internal/CodeEmail.js.map +1 -0
- package/dist/internal/ConfigurableAccount.d.ts +600 -0
- package/dist/internal/ConfigurableAccount.d.ts.map +1 -0
- package/dist/internal/ConfigurableAccount.js +795 -0
- package/dist/internal/ConfigurableAccount.js.map +1 -0
- package/dist/internal/Device.d.ts +246 -0
- package/dist/internal/Device.d.ts.map +1 -0
- package/dist/internal/Device.js +257 -0
- package/dist/internal/Device.js.map +1 -0
- package/dist/internal/Env.d.ts +97 -0
- package/dist/internal/Env.d.ts.map +1 -0
- package/dist/internal/Env.js +2 -0
- package/dist/internal/Env.js.map +1 -0
- package/dist/internal/ErrorResponse.d.ts +608 -0
- package/dist/internal/ErrorResponse.d.ts.map +1 -0
- package/dist/internal/ErrorResponse.js +701 -0
- package/dist/internal/ErrorResponse.js.map +1 -0
- package/dist/internal/Id.d.ts +10 -0
- package/dist/internal/Id.d.ts.map +1 -0
- package/dist/internal/Id.js +34 -0
- package/dist/internal/Id.js.map +1 -0
- package/dist/internal/KeyAuthorization.d.ts +1650 -0
- package/dist/internal/KeyAuthorization.d.ts.map +1 -0
- package/dist/internal/KeyAuthorization.js +1187 -0
- package/dist/internal/KeyAuthorization.js.map +1 -0
- package/dist/internal/Limits.d.ts +70 -0
- package/dist/internal/Limits.d.ts.map +1 -0
- package/dist/internal/Limits.js +36 -0
- package/dist/internal/Limits.js.map +1 -0
- package/dist/internal/Log.d.ts +34 -0
- package/dist/internal/Log.d.ts.map +1 -0
- package/dist/internal/Log.js +99 -0
- package/dist/internal/Log.js.map +1 -0
- package/dist/internal/LogLine.d.ts +29 -0
- package/dist/internal/LogLine.d.ts.map +1 -0
- package/dist/internal/LogLine.js +50 -0
- package/dist/internal/LogLine.js.map +1 -0
- package/dist/internal/Migrations.d.ts +28 -0
- package/dist/internal/Migrations.d.ts.map +1 -0
- package/dist/internal/Migrations.js +82 -0
- package/dist/internal/Migrations.js.map +1 -0
- package/dist/internal/Owner.d.ts +230 -0
- package/dist/internal/Owner.d.ts.map +1 -0
- package/dist/internal/Owner.js +101 -0
- package/dist/internal/Owner.js.map +1 -0
- package/dist/internal/Passkey.d.ts +901 -0
- package/dist/internal/Passkey.d.ts.map +1 -0
- package/dist/internal/Passkey.js +1185 -0
- package/dist/internal/Passkey.js.map +1 -0
- package/dist/internal/PendingKey.d.ts +49 -0
- package/dist/internal/PendingKey.d.ts.map +1 -0
- package/dist/internal/PendingKey.js +58 -0
- package/dist/internal/PendingKey.js.map +1 -0
- package/dist/internal/Privy.d.ts +138 -0
- package/dist/internal/Privy.d.ts.map +1 -0
- package/dist/internal/Privy.js +285 -0
- package/dist/internal/Privy.js.map +1 -0
- package/dist/internal/RateLimit.d.ts +218 -0
- package/dist/internal/RateLimit.d.ts.map +1 -0
- package/dist/internal/RateLimit.js +209 -0
- package/dist/internal/RateLimit.js.map +1 -0
- package/dist/internal/Realm.d.ts +290 -0
- package/dist/internal/Realm.d.ts.map +1 -0
- package/dist/internal/Realm.js +502 -0
- package/dist/internal/Realm.js.map +1 -0
- package/dist/internal/RequestId.d.ts +16 -0
- package/dist/internal/RequestId.d.ts.map +1 -0
- package/dist/internal/RequestId.js +78 -0
- package/dist/internal/RequestId.js.map +1 -0
- package/dist/internal/SigningKey.d.ts +126 -0
- package/dist/internal/SigningKey.d.ts.map +1 -0
- package/dist/internal/SigningKey.js +221 -0
- package/dist/internal/SigningKey.js.map +1 -0
- package/dist/internal/TempoAccount.d.ts +181 -0
- package/dist/internal/TempoAccount.d.ts.map +1 -0
- package/dist/internal/TempoAccount.js +369 -0
- package/dist/internal/TempoAccount.js.map +1 -0
- package/dist/internal/TestInbox.d.ts +42 -0
- package/dist/internal/TestInbox.d.ts.map +1 -0
- package/dist/internal/TestInbox.js +20 -0
- package/dist/internal/TestInbox.js.map +1 -0
- package/dist/internal/Timing.d.ts +52 -0
- package/dist/internal/Timing.d.ts.map +1 -0
- package/dist/internal/Timing.js +116 -0
- package/dist/internal/Timing.js.map +1 -0
- package/dist/internal/Validation.d.ts +52 -0
- package/dist/internal/Validation.d.ts.map +1 -0
- package/dist/internal/Validation.js +22 -0
- package/dist/internal/Validation.js.map +1 -0
- package/dist/internal/Verification.d.ts +24 -0
- package/dist/internal/Verification.d.ts.map +1 -0
- package/dist/internal/Verification.js +37 -0
- package/dist/internal/Verification.js.map +1 -0
- package/dist/internal/Wallet.d.ts +66 -0
- package/dist/internal/Wallet.d.ts.map +1 -0
- package/dist/internal/Wallet.js +59 -0
- package/dist/internal/Wallet.js.map +1 -0
- package/dist/internal/owners/Passkey.d.ts +9 -0
- package/dist/internal/owners/Passkey.d.ts.map +1 -0
- package/dist/internal/owners/Passkey.js +58 -0
- package/dist/internal/owners/Passkey.js.map +1 -0
- package/dist/internal/owners/Privy.d.ts +13 -0
- package/dist/internal/owners/Privy.d.ts.map +1 -0
- package/dist/internal/owners/Privy.js +59 -0
- package/dist/internal/owners/Privy.js.map +1 -0
- package/dist/internal/owners/Secp256k1.d.ts +12 -0
- package/dist/internal/owners/Secp256k1.d.ts.map +1 -0
- package/dist/internal/owners/Secp256k1.js +99 -0
- package/dist/internal/owners/Secp256k1.js.map +1 -0
- package/dist/worker.d.ts +18 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +18 -0
- package/dist/worker.js.map +1 -0
- package/package.json +83 -3
- package/src/Api.ts +157 -0
- package/src/App.ts +316 -0
- package/src/api/account.ts +2266 -0
- package/src/api/authenticate.ts +1662 -0
- package/src/api/authorize.ts +1086 -0
- package/src/api/device.ts +516 -0
- package/src/api/health.ts +72 -0
- package/src/api/lib/AccountStep.ts +485 -0
- package/src/api/lib/Auth.ts +164 -0
- package/src/api/lib/Configure.ts +921 -0
- package/src/api/lib/Consent.ts +388 -0
- package/src/api/lib/Cors.ts +160 -0
- package/src/api/lib/Database.ts +10 -0
- package/src/api/lib/DeviceRequest.ts +244 -0
- package/src/api/lib/FirstAccount.ts +136 -0
- package/src/api/lib/Headless.ts +616 -0
- package/src/api/lib/IsolateCache.ts +28 -0
- package/src/api/lib/KeySigner.ts +690 -0
- package/src/api/lib/PasskeyLink.ts +162 -0
- package/src/api/lib/Session.ts +64 -0
- package/src/api/lib/SignInConsent.ts +393 -0
- package/src/api/oauth.ts +1796 -0
- package/src/app/components/CodeInput.tsx +153 -0
- package/src/app/components/DevTools.tsx +1071 -0
- package/src/app/components/Grant.tsx +476 -0
- package/src/app/components/icons/BRLA.png +0 -0
- package/src/app/components/icons/BRZ.svg +1 -0
- package/src/app/components/icons/CHFAU.png +0 -0
- package/src/app/components/icons/DLUSD.png +0 -0
- package/src/app/components/icons/EURAU.svg +1 -0
- package/src/app/components/icons/EURC.e.svg +1 -0
- package/src/app/components/icons/GBPA.svg +4 -0
- package/src/app/components/icons/GUSD.svg +1 -0
- package/src/app/components/icons/MACH.svg +4 -0
- package/src/app/components/icons/OUSD.svg +5 -0
- package/src/app/components/icons/PRIME.svg +14 -0
- package/src/app/components/icons/SBC.svg +1 -0
- package/src/app/components/icons/SEKAU.svg +5 -0
- package/src/app/components/icons/USD1.svg +30 -0
- package/src/app/components/icons/USDB.svg +11 -0
- package/src/app/components/icons/USDC.e.svg +1 -0
- package/src/app/components/icons/USDT0.svg +1 -0
- package/src/app/components/icons/USDY.svg +16 -0
- package/src/app/components/icons/USDe.svg +1 -0
- package/src/app/components/icons/YLDS.svg +3 -0
- package/src/app/components/icons/alphaUSD.svg +1 -0
- package/src/app/components/icons/betaUSD.svg +1 -0
- package/src/app/components/icons/cUSD.svg +1 -0
- package/src/app/components/icons/cbBTC.svg +1 -0
- package/src/app/components/icons/frxUSD.svg +1 -0
- package/src/app/components/icons/goUSD.svg +5 -0
- package/src/app/components/icons/iUSD.svg +1 -0
- package/src/app/components/icons/pathUSD.svg +25 -0
- package/src/app/components/icons/rUSD.svg +1 -0
- package/src/app/components/icons/reUSD.svg +1 -0
- package/src/app/components/icons/sUSDe.svg +1 -0
- package/src/app/components/icons/siUSD.svg +1 -0
- package/src/app/components/icons/stcUSD.svg +1 -0
- package/src/app/components/icons/syrupUSDC.svg +5 -0
- package/src/app/components/icons/thetaUSD.svg +1 -0
- package/src/app/components/icons/wYLDS.svg +10 -0
- package/src/app/components/icons/wsrUSD.svg +1 -0
- package/src/app/components/logos/OUSD.dark.svg +17 -0
- package/src/app/components/logos/OUSD.light.svg +17 -0
- package/src/app/coverage.server.ts +73 -0
- package/src/app/coverage.ts +69 -0
- package/src/app/crons/cleanup.ts +104 -0
- package/src/app/db/auth.ts +440 -0
- package/src/app/db/migrations/0000_better_auth.sql +53 -0
- package/src/app/db/migrations/0001_oauth_provider.sql +162 -0
- package/src/app/db/migrations/0002_device_code.sql +17 -0
- package/src/app/db/migrations/0003_realms.sql +27 -0
- package/src/app/db/migrations/0004_default_realm.sql +2 -0
- package/src/app/db/migrations/0005_passkeys.sql +30 -0
- package/src/app/db/migrations/0006_first_accounts.sql +9 -0
- package/src/app/db/migrations/0007_pending_keys.sql +13 -0
- package/src/app/db/migrations/0008_secp256k1_owners.sql +18 -0
- package/src/app/db/migrations/0009_device_requests.sql +8 -0
- package/src/app/db/migrations/0010_device_keys.sql +4 -0
- package/src/app/db/migrations/0011_registered_passkeys.sql +2 -0
- package/src/app/db/migrations/0012_passkey_accounts.sql +7 -0
- package/src/app/db/migrations/0013_first_party_apps.sql +4 -0
- package/src/app/db/migrations/0014_logout_revokes_tokens.sql +17 -0
- package/src/app/db/migrations/0015_expiry_indexes.sql +9 -0
- package/src/app/db/migrations/0016_configurable_accounts.sql +15 -0
- package/src/app/db/migrations/0017_account_config_keys.sql +3 -0
- package/src/app/db/migrations/0018_better_auth_1_8.sql +9 -0
- package/src/app/db/migrations/0019_drop_provider_account_index.sql +1 -0
- package/src/app/db/migrations/meta/0000_snapshot.json +362 -0
- package/src/app/db/migrations/meta/0001_snapshot.json +1487 -0
- package/src/app/db/migrations/meta/0002_snapshot.json +1603 -0
- package/src/app/db/migrations/meta/0003_snapshot.json +1760 -0
- package/src/app/db/migrations/meta/0004_snapshot.json +1760 -0
- package/src/app/db/migrations/meta/0005_snapshot.json +1911 -0
- package/src/app/db/migrations/meta/0006_snapshot.json +1967 -0
- package/src/app/db/migrations/meta/0007_snapshot.json +2047 -0
- package/src/app/db/migrations/meta/0008_snapshot.json +2157 -0
- package/src/app/db/migrations/meta/0009_snapshot.json +2207 -0
- package/src/app/db/migrations/meta/0010_snapshot.json +2231 -0
- package/src/app/db/migrations/meta/0011_snapshot.json +2231 -0
- package/src/app/db/migrations/meta/0012_snapshot.json +2231 -0
- package/src/app/db/migrations/meta/0013_snapshot.json +2231 -0
- package/src/app/db/migrations/meta/0014_snapshot.json +2231 -0
- package/src/app/db/migrations/meta/0015_snapshot.json +2375 -0
- package/src/app/db/migrations/meta/0016_snapshot.json +2475 -0
- package/src/app/db/migrations/meta/0017_snapshot.json +2481 -0
- package/src/app/db/migrations/meta/0018_snapshot.json +2535 -0
- package/src/app/db/migrations/meta/0019_snapshot.json +2514 -0
- package/src/app/db/migrations/meta/_journal.json +146 -0
- package/src/app/db/schema.ts +241 -0
- package/src/app/db/table.ts +31 -0
- package/src/app/env.ts +57 -0
- package/src/app/inbox.ts +190 -0
- package/src/app/lib/Client.ts +82 -0
- package/src/app/lib/Inbox.ts +11 -0
- package/src/app/lib/Loader.ts +21 -0
- package/src/app/lib/Upgrade.ts +221 -0
- package/src/app/package.json +8 -0
- package/src/app/public/_headers +4 -0
- package/src/app/routeTree.gen.ts +219 -0
- package/src/app/router.tsx +47 -0
- package/src/app/routes/[_].flows.tsx +4254 -0
- package/src/app/routes/__root.tsx +172 -0
- package/src/app/routes/authorize.tsx +379 -0
- package/src/app/routes/choose-account.tsx +144 -0
- package/src/app/routes/deposit.tsx +107 -0
- package/src/app/routes/device.tsx +273 -0
- package/src/app/routes/error.tsx +62 -0
- package/src/app/routes/index.tsx +511 -0
- package/src/app/routes/login.tsx +577 -0
- package/src/app/screens/Account.tsx +559 -0
- package/src/app/screens/Approval.tsx +444 -0
- package/src/app/screens/ChooseAccount.tsx +206 -0
- package/src/app/screens/Deposit.tsx +523 -0
- package/src/app/screens/DeviceApproval.tsx +500 -0
- package/src/app/screens/NotFound.tsx +62 -0
- package/src/app/screens/SignIn.tsx +372 -0
- package/src/app/screens/WalletUpgrade.tsx +121 -0
- package/src/app/screens/chains/base.svg +3 -0
- package/src/app/screens/chains/ethereum.svg +11 -0
- package/src/app/screens/chains/solana.svg +4 -0
- package/src/app/screens/chains/tempo.svg +4 -0
- package/src/app/server.ts +342 -0
- package/src/app/vite.config.ts +128 -0
- package/src/app/void.config.ts +36 -0
- package/src/app/wallet.ts +69 -0
- package/src/app/zyzz.config.ts +52 -0
- package/src/cli/Admin.ts +74 -0
- package/src/cli/Apps.ts +27 -0
- package/src/cli/Cli.ts +41 -0
- package/src/cli/Project.ts +119 -0
- package/src/cli/Realms.ts +49 -0
- package/src/cli/Session.ts +290 -0
- package/src/cli/User.ts +40 -0
- package/src/cli/V1.ts +54 -0
- package/src/cli/bin.ts +44 -0
- package/src/cli/commands/admin/apps/create.ts +96 -0
- package/src/cli/commands/admin/apps/delete.ts +38 -0
- package/src/cli/commands/admin/apps/index.ts +15 -0
- package/src/cli/commands/admin/apps/list.ts +25 -0
- package/src/cli/commands/admin/apps/rotate-secret.ts +47 -0
- package/src/cli/commands/admin/apps/update.ts +79 -0
- package/src/cli/commands/admin/index.ts +14 -0
- package/src/cli/commands/admin/migrate.ts +19 -0
- package/src/cli/commands/admin/realms/add.ts +40 -0
- package/src/cli/commands/admin/realms/index.ts +14 -0
- package/src/cli/commands/admin/realms/list.ts +38 -0
- package/src/cli/commands/admin/realms/passkeys/index.ts +15 -0
- package/src/cli/commands/admin/realms/passkeys/set.ts +44 -0
- package/src/cli/commands/admin/realms/privy/index.ts +14 -0
- package/src/cli/commands/admin/realms/privy/set.ts +69 -0
- package/src/cli/commands/admin/realms/remove.ts +33 -0
- package/src/cli/commands/admin/realms/secp256k1/disable.ts +40 -0
- package/src/cli/commands/admin/realms/secp256k1/enable.ts +40 -0
- package/src/cli/commands/admin/realms/secp256k1/index.ts +19 -0
- package/src/cli/commands/admin/realms/set.ts +46 -0
- package/src/cli/commands/admin/rotate-key.ts +47 -0
- package/src/cli/commands/init.ts +42 -0
- package/src/cli/commands/login.ts +32 -0
- package/src/cli/commands/logout.ts +19 -0
- package/src/cli/commands/whoami.ts +23 -0
- package/src/client/Actions.ts +180 -0
- package/src/client/Auth.ts +267 -0
- package/src/client/Authorization.ts +34 -0
- package/src/client/Decorator.ts +444 -0
- package/src/client/Key.ts +137 -0
- package/src/client/Pending.ts +45 -0
- package/src/client/Permissions.ts +41 -0
- package/src/client/Storage.ts +29 -0
- package/src/client/TempoAccount.ts +55 -0
- package/src/client/Tokens.ts +27 -0
- package/src/client/User.ts +23 -0
- package/src/client/actions/account.ts +171 -0
- package/src/client/actions/device.ts +166 -0
- package/src/client/actions/email.ts +164 -0
- package/src/client/actions/oauth.ts +179 -0
- package/src/client/actions/passkey.ts +333 -0
- package/src/client/actions/realm.ts +37 -0
- package/src/client/actions/redirect.ts +502 -0
- package/src/client/internal/accessKey.ts +54 -0
- package/src/client/internal/account.ts +18 -0
- package/src/client/internal/api.ts +242 -0
- package/src/client/internal/headless.ts +308 -0
- package/src/client/internal/indexedDb.ts +44 -0
- package/src/client/internal/request.ts +70 -0
- package/src/client/internal/store.ts +20 -0
- package/src/client/internal/verifier.ts +75 -0
- package/src/client.ts +17 -0
- package/src/index.ts +5 -0
- package/src/internal/Apps.ts +1283 -0
- package/src/internal/Auth.ts +273 -0
- package/src/internal/Authorize.ts +433 -0
- package/src/internal/Balance.ts +144 -0
- package/src/internal/BodyLimit.ts +31 -0
- package/src/internal/Cache.ts +119 -0
- package/src/internal/Chain.ts +99 -0
- package/src/internal/ChainList.ts +270 -0
- package/src/internal/ChainName.ts +14 -0
- package/src/internal/ChainStatus.ts +65 -0
- package/src/internal/CodeEmail.ts +138 -0
- package/src/internal/ConfigurableAccount.ts +1315 -0
- package/src/internal/Device.ts +471 -0
- package/src/internal/Env.ts +92 -0
- package/src/internal/ErrorResponse.ts +896 -0
- package/src/internal/Faucet.ts +43 -0
- package/src/internal/Id.ts +41 -0
- package/src/internal/KeyAuthorization.ts +1536 -0
- package/src/internal/Limits.ts +40 -0
- package/src/internal/Log.ts +166 -0
- package/src/internal/LogLine.ts +81 -0
- package/src/internal/Logout.ts +356 -0
- package/src/internal/Migrations.ts +120 -0
- package/src/internal/OpenApi.ts +300 -0
- package/src/internal/Owner.ts +310 -0
- package/src/internal/Passkey.ts +1904 -0
- package/src/internal/PendingKey.ts +104 -0
- package/src/internal/Privy.ts +536 -0
- package/src/internal/RateLimit.ts +346 -0
- package/src/internal/Realm.ts +814 -0
- package/src/internal/RequestId.ts +118 -0
- package/src/internal/SignInGrant.ts +175 -0
- package/src/internal/SigningKey.ts +319 -0
- package/src/internal/TempoAccount.ts +545 -0
- package/src/internal/TestInbox.ts +51 -0
- package/src/internal/Timing.ts +172 -0
- package/src/internal/Validation.ts +52 -0
- package/src/internal/Verification.ts +58 -0
- package/src/internal/Wallet.ts +101 -0
- package/src/internal/owners/Passkey.ts +76 -0
- package/src/internal/owners/Privy.ts +82 -0
- package/src/internal/owners/Secp256k1.ts +139 -0
- package/src/types/app.d.ts +39 -0
- package/src/worker.ts +17 -0
|
@@ -0,0 +1,921 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Changes the owners of the signed-in user's Tempo Account on a chain whose accounts are
|
|
3
|
+
* configurable, for the account page's routes. {@link find} reads the account in the app's realms.
|
|
4
|
+
* {@link send} installs a change that an owner signs on the server. A passkey owner signs in the
|
|
5
|
+
* browser instead: {@link request} returns the passkey step, and {@link confirm} sends the change
|
|
6
|
+
* with the passkey's assertion. Each change stores the configuration that the chain installed.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import { and, eq, inArray, isNotNull } from 'drizzle-orm'
|
|
10
|
+
import type { Context } from 'hono'
|
|
11
|
+
import { Address, type Hex } from 'ox'
|
|
12
|
+
import { env } from 'void/env'
|
|
13
|
+
import { Authentication } from 'webauthx/server'
|
|
14
|
+
import * as Schema from '../../app/db/schema.js'
|
|
15
|
+
import * as Chain from '../../internal/Chain.js'
|
|
16
|
+
import * as ConfigurableAccount from '../../internal/ConfigurableAccount.js'
|
|
17
|
+
import type { Env } from '../../internal/Env.js'
|
|
18
|
+
import * as ErrorResponse from '../../internal/ErrorResponse.js'
|
|
19
|
+
import * as Log from '../../internal/Log.js'
|
|
20
|
+
import * as Owner from '../../internal/Owner.js'
|
|
21
|
+
import * as Passkey from '../../internal/Passkey.js'
|
|
22
|
+
import * as Realm from '../../internal/Realm.js'
|
|
23
|
+
import * as TempoAccount from '../../internal/TempoAccount.js'
|
|
24
|
+
import * as Wallet from '../../internal/Wallet.js'
|
|
25
|
+
import * as Timing from '../../internal/Timing.js'
|
|
26
|
+
import * as Validation from '../../internal/Validation.js'
|
|
27
|
+
import { db } from './Database.js'
|
|
28
|
+
|
|
29
|
+
/**
|
|
30
|
+
* Spends the passkey step that {@link request} issued with `assertion`, sends its change, and stores
|
|
31
|
+
* the installed configuration. Returns `webauthn_rejected` for an assertion of another passkey, or
|
|
32
|
+
* over a spent, expired, or forged challenge. `link`, when present, runs after the assertion verifies
|
|
33
|
+
* and before the change is sent, and can refuse it. A step with a key's registration sends it first,
|
|
34
|
+
* with `keySignature`, and sends the change only once the chain registered the key.
|
|
35
|
+
*/
|
|
36
|
+
export async function confirm(
|
|
37
|
+
c: Context<Env>,
|
|
38
|
+
options: confirm.Options,
|
|
39
|
+
): Promise<
|
|
40
|
+
ConfigurableAccount.Config | ErrorResponse.Instance<typeof confirm.errors>
|
|
41
|
+
> {
|
|
42
|
+
const { account, assertion, client, credential, userId } = options
|
|
43
|
+
const challenge = await Timing.measure(
|
|
44
|
+
c,
|
|
45
|
+
Passkey.takeSignature(db, {
|
|
46
|
+
account,
|
|
47
|
+
authenticatorData: assertion.metadata.authenticatorData,
|
|
48
|
+
clientId: ConfigurableAccount.clientId,
|
|
49
|
+
clientDataJSON: assertion.metadata.clientDataJSON,
|
|
50
|
+
credentialId: assertion.id,
|
|
51
|
+
expiry: Math.floor(Date.now() / 1000) + ConfigurableAccount.lifetime,
|
|
52
|
+
signature: assertion.signature,
|
|
53
|
+
userId,
|
|
54
|
+
verify: (challenge) =>
|
|
55
|
+
challenge.account === account.toLowerCase() &&
|
|
56
|
+
challenge.clientId === ConfigurableAccount.clientId &&
|
|
57
|
+
challenge.credential.id === credential.id &&
|
|
58
|
+
challenge.credential.publicKey === credential.publicKey &&
|
|
59
|
+
assertion.id === credential.id &&
|
|
60
|
+
Passkey.verify(assertion, {
|
|
61
|
+
challenge: challenge.digest,
|
|
62
|
+
origin: options.origin ?? new URL(env.URL).origin,
|
|
63
|
+
publicKey: credential.publicKey,
|
|
64
|
+
rpId: credential.rpId,
|
|
65
|
+
}),
|
|
66
|
+
}),
|
|
67
|
+
'Passkey.takeSignature',
|
|
68
|
+
)
|
|
69
|
+
const pending = challenge
|
|
70
|
+
? await Timing.measure(
|
|
71
|
+
c,
|
|
72
|
+
ConfigurableAccount.takePending(db, {
|
|
73
|
+
digest: challenge.digest,
|
|
74
|
+
userId,
|
|
75
|
+
}),
|
|
76
|
+
'ConfigurableAccount.takePending',
|
|
77
|
+
)
|
|
78
|
+
: undefined
|
|
79
|
+
if (!challenge || !pending) return new Passkey.WebAuthnRejectedError()
|
|
80
|
+
const { registration } = pending
|
|
81
|
+
if (registration && !options.keySignature) return keySignatureRequired()
|
|
82
|
+
|
|
83
|
+
const refused = options.link
|
|
84
|
+
? await Timing.measure(c, options.link(), 'Configure.link')
|
|
85
|
+
: undefined
|
|
86
|
+
if (refused) return refused
|
|
87
|
+
|
|
88
|
+
// The upgrade retires the signature of the account's own key, so the key that it signed reaches
|
|
89
|
+
// the chain first, and a failed registration sends no upgrade.
|
|
90
|
+
if (registration)
|
|
91
|
+
await submit(c, () =>
|
|
92
|
+
ConfigurableAccount.sendRegistration({
|
|
93
|
+
account,
|
|
94
|
+
client,
|
|
95
|
+
digest: registration.digest,
|
|
96
|
+
signature: options.keySignature!,
|
|
97
|
+
transaction: registration.transaction,
|
|
98
|
+
}),
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
const installed = await submit(c, () =>
|
|
102
|
+
ConfigurableAccount.sendSigned({
|
|
103
|
+
assertion,
|
|
104
|
+
client,
|
|
105
|
+
current: pending.current,
|
|
106
|
+
digest: challenge.digest,
|
|
107
|
+
publicKey: credential.publicKey,
|
|
108
|
+
target: pending.target,
|
|
109
|
+
transaction: pending.transaction,
|
|
110
|
+
}),
|
|
111
|
+
)
|
|
112
|
+
await Timing.measure(
|
|
113
|
+
c,
|
|
114
|
+
ConfigurableAccount.save(db, { config: installed, userId }),
|
|
115
|
+
'db.accountConfig.save',
|
|
116
|
+
)
|
|
117
|
+
return installed
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export namespace confirm {
|
|
121
|
+
export type Options = {
|
|
122
|
+
/** The address of the account that the change installs. */
|
|
123
|
+
account: Hex.Hex
|
|
124
|
+
/** The passkey's assertion over the step's challenge. */
|
|
125
|
+
assertion: Passkey.Assertion
|
|
126
|
+
/** A client of the chain. */
|
|
127
|
+
client: ConfigurableAccount.Client
|
|
128
|
+
/** The passkey that signs the change. */
|
|
129
|
+
credential: Owner.Credential
|
|
130
|
+
/** The access key's raw signature over the digest of the step's registration, if it has one. */
|
|
131
|
+
keySignature?: Hex.Hex | undefined
|
|
132
|
+
/**
|
|
133
|
+
* Runs once the assertion verifies, before the change is sent, such as to link the passkey to
|
|
134
|
+
* the user. Returns a refusal to stop the change, or `undefined` to send it.
|
|
135
|
+
*/
|
|
136
|
+
link?:
|
|
137
|
+
| (() => Promise<TempoAccount.ForeignAccountError | undefined>)
|
|
138
|
+
| undefined
|
|
139
|
+
/** The origin of the page that ran the ceremony. Defaults to Tempo ID's own. */
|
|
140
|
+
origin?: string | undefined
|
|
141
|
+
/** The signed-in user's ID. */
|
|
142
|
+
userId: string
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/** The refusals `confirm` returns or throws. */
|
|
146
|
+
export const errors = [
|
|
147
|
+
...ErrorResponse.fromUpstream.errors,
|
|
148
|
+
ConfigurableAccount.ConflictError,
|
|
149
|
+
Passkey.WebAuthnRejectedError,
|
|
150
|
+
TempoAccount.ForeignAccountError,
|
|
151
|
+
Validation.InvalidFieldError,
|
|
152
|
+
] as const
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Returns the chain that `chain` names, its client, and the user's account at `account` on it, in
|
|
157
|
+
* the realms of the app that `clientId` names, with the account's configuration. Without `chain`, the
|
|
158
|
+
* first chain that `CONFIGURABLE_ACCOUNTS` names. Without `clientId`, the `default` realm.
|
|
159
|
+
*/
|
|
160
|
+
export async function find(
|
|
161
|
+
c: Context<Env>,
|
|
162
|
+
options: find.Options,
|
|
163
|
+
): Promise<find.ReturnType | ErrorResponse.Instance<typeof find.errors>> {
|
|
164
|
+
const { account, clientId, userId } = options
|
|
165
|
+
const chain = resolve({ chain: options.chain })
|
|
166
|
+
if (chain instanceof ErrorResponse.ResponseError) return chain
|
|
167
|
+
|
|
168
|
+
const realms = await Timing.measure(
|
|
169
|
+
c,
|
|
170
|
+
reach(c, { clientId }),
|
|
171
|
+
'Configure.reach',
|
|
172
|
+
)
|
|
173
|
+
const owners = await Timing.measure(
|
|
174
|
+
c,
|
|
175
|
+
TempoAccount.held(c, {
|
|
176
|
+
chainId: chain.chainId,
|
|
177
|
+
db,
|
|
178
|
+
env,
|
|
179
|
+
realms,
|
|
180
|
+
userId,
|
|
181
|
+
}),
|
|
182
|
+
'TempoAccount.held',
|
|
183
|
+
)
|
|
184
|
+
const owner = owners.find(
|
|
185
|
+
(entry) => Owner.address(entry).toLowerCase() === account.toLowerCase(),
|
|
186
|
+
)
|
|
187
|
+
if (!owner) return new TempoAccount.ForeignAccountError({ account })
|
|
188
|
+
|
|
189
|
+
return {
|
|
190
|
+
chain,
|
|
191
|
+
client: ConfigurableAccount.client({
|
|
192
|
+
apiUrl: Chain.apiUrl({
|
|
193
|
+
apiUrls: env.TEMPO_API_URLS,
|
|
194
|
+
chainId: chain.chainId,
|
|
195
|
+
}),
|
|
196
|
+
chain,
|
|
197
|
+
}),
|
|
198
|
+
current: ConfigurableAccount.of(owner),
|
|
199
|
+
owner,
|
|
200
|
+
owners,
|
|
201
|
+
realms,
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
export namespace find {
|
|
206
|
+
export type Options = {
|
|
207
|
+
/** The account's address on the chain. */
|
|
208
|
+
account: `0x${string}`
|
|
209
|
+
/** The chain that the request names. Absent, the first chain whose accounts are configurable. */
|
|
210
|
+
chain?: string | undefined
|
|
211
|
+
/** The app whose realms hold the account. Absent, the `default` realm. */
|
|
212
|
+
clientId?: string | undefined
|
|
213
|
+
/** The signed-in user's ID. */
|
|
214
|
+
userId: string
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
export type ReturnType = {
|
|
218
|
+
/** The chain, which `CONFIGURABLE_ACCOUNTS` names. */
|
|
219
|
+
chain: ConfigurableAccount.Entry
|
|
220
|
+
/** A client of the chain, which sends configuration changes. */
|
|
221
|
+
client: ConfigurableAccount.Client
|
|
222
|
+
/** The account's configuration. Absent for a linked key that no upgrade made configurable. */
|
|
223
|
+
current: ConfigurableAccount.Config | undefined
|
|
224
|
+
/** The key that owns the account, with its configurable view, if any. */
|
|
225
|
+
owner: Owner.Owner
|
|
226
|
+
/** Every account of the user in the realms, as `TempoAccount.held` returns them on the chain. */
|
|
227
|
+
owners: readonly Owner.Owner[]
|
|
228
|
+
/** The realms that the request reaches, in order. */
|
|
229
|
+
realms: readonly Realm.Realm[]
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
/** The refusals `find` returns or throws. */
|
|
233
|
+
export const errors = [
|
|
234
|
+
...TempoAccount.held.errors,
|
|
235
|
+
ConfigurableAccount.DisabledError,
|
|
236
|
+
TempoAccount.ForeignAccountError,
|
|
237
|
+
] as const
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
/** Returns the realms of the app that `clientId` names, as Tempo ID's own page reaches them. */
|
|
241
|
+
export async function reach(c: Context<Env>, options: reach.Options) {
|
|
242
|
+
const stored = await Timing.measure(
|
|
243
|
+
c,
|
|
244
|
+
Realm.forRequest(c, {
|
|
245
|
+
clientId: options.clientId,
|
|
246
|
+
db,
|
|
247
|
+
origin: c.req.header('origin'),
|
|
248
|
+
own: new URL(env.URL).origin,
|
|
249
|
+
}),
|
|
250
|
+
'Realm.forRequest',
|
|
251
|
+
)
|
|
252
|
+
return await Timing.measure(
|
|
253
|
+
c,
|
|
254
|
+
Realm.withDefaults(c, { db, origin: env.URL, realms: stored }),
|
|
255
|
+
'Realm.withDefaults',
|
|
256
|
+
)
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
export declare namespace reach {
|
|
260
|
+
type Options = {
|
|
261
|
+
/** The app whose realms the request reaches. Absent, the `default` realm. */
|
|
262
|
+
clientId?: string | undefined
|
|
263
|
+
}
|
|
264
|
+
}
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Prepares the change that installs `target` for `credential`, a passkey, to sign in the browser.
|
|
268
|
+
* Stores the passkey's signature challenge and the change for 5 minutes, and returns the options for
|
|
269
|
+
* `navigator.credentials.get()`, whose challenge is the transaction's digest.
|
|
270
|
+
*/
|
|
271
|
+
export async function request(c: Context<Env>, options: request.Options) {
|
|
272
|
+
const { account, client, credential, current, registration, target, userId } =
|
|
273
|
+
options
|
|
274
|
+
const prepared = await submit(c, () =>
|
|
275
|
+
ConfigurableAccount.request({
|
|
276
|
+
client,
|
|
277
|
+
current,
|
|
278
|
+
publicKey: credential.publicKey,
|
|
279
|
+
target,
|
|
280
|
+
}),
|
|
281
|
+
)
|
|
282
|
+
await Timing.measure(
|
|
283
|
+
c,
|
|
284
|
+
Passkey.requestSignature(db, {
|
|
285
|
+
account,
|
|
286
|
+
clientId: ConfigurableAccount.clientId,
|
|
287
|
+
credential,
|
|
288
|
+
digest: prepared.digest,
|
|
289
|
+
userId,
|
|
290
|
+
}),
|
|
291
|
+
'Passkey.requestSignature',
|
|
292
|
+
)
|
|
293
|
+
await Timing.measure(
|
|
294
|
+
c,
|
|
295
|
+
ConfigurableAccount.storePending(db, {
|
|
296
|
+
current,
|
|
297
|
+
digest: prepared.digest,
|
|
298
|
+
registration,
|
|
299
|
+
target,
|
|
300
|
+
transaction: prepared.transaction,
|
|
301
|
+
userId,
|
|
302
|
+
}),
|
|
303
|
+
'ConfigurableAccount.storePending',
|
|
304
|
+
)
|
|
305
|
+
return Authentication.getOptions({
|
|
306
|
+
challenge: prepared.digest,
|
|
307
|
+
credentialId: [credential.id],
|
|
308
|
+
rpId: credential.rpId,
|
|
309
|
+
userVerification: 'required',
|
|
310
|
+
}).options
|
|
311
|
+
}
|
|
312
|
+
|
|
313
|
+
export namespace request {
|
|
314
|
+
export type Options = {
|
|
315
|
+
/** The address of the account that the change installs. */
|
|
316
|
+
account: Hex.Hex
|
|
317
|
+
/** A client of the chain. */
|
|
318
|
+
client: ConfigurableAccount.Client
|
|
319
|
+
/** The passkey that signs the change. */
|
|
320
|
+
credential: Owner.Credential
|
|
321
|
+
/** The account's configuration. Absent for an upgrade. */
|
|
322
|
+
current: ConfigurableAccount.Config | undefined
|
|
323
|
+
/** A key's registration, which the chain receives before the change. Absent without one. */
|
|
324
|
+
registration?:
|
|
325
|
+
| ConfigurableAccount.requestRegistration.ReturnType
|
|
326
|
+
| undefined
|
|
327
|
+
/** The configuration to install. */
|
|
328
|
+
target: ConfigurableAccount.Config
|
|
329
|
+
/** The signed-in user's ID. */
|
|
330
|
+
userId: string
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
/**
|
|
335
|
+
* Returns the chain that `chain` names when `CONFIGURABLE_ACCOUNTS` names it, or the first such chain
|
|
336
|
+
* without `chain`. Returns `configurable_accounts_disabled` otherwise.
|
|
337
|
+
*/
|
|
338
|
+
export function resolve(
|
|
339
|
+
options: resolve.Options,
|
|
340
|
+
): ConfigurableAccount.Entry | ConfigurableAccount.DisabledError {
|
|
341
|
+
const configurable = ConfigurableAccount.chains({
|
|
342
|
+
rpcUrl: env.TEMPO_RPC_URL,
|
|
343
|
+
rpcUrls: env.RPC_URLS,
|
|
344
|
+
value: env.CONFIGURABLE_ACCOUNTS,
|
|
345
|
+
})
|
|
346
|
+
const chain =
|
|
347
|
+
options.chain === undefined
|
|
348
|
+
? configurable[0]
|
|
349
|
+
: configurable.find((entry) => entry.name === options.chain)
|
|
350
|
+
if (chain) return chain
|
|
351
|
+
return new ConfigurableAccount.DisabledError({
|
|
352
|
+
chain: options.chain,
|
|
353
|
+
configured: configurable.map((entry) => entry.name),
|
|
354
|
+
})
|
|
355
|
+
}
|
|
356
|
+
|
|
357
|
+
export declare namespace resolve {
|
|
358
|
+
type Options = {
|
|
359
|
+
/** The chain that the request names, if any. */
|
|
360
|
+
chain?: string | undefined
|
|
361
|
+
}
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Returns whether a user with `email` waits for a wallet.tempo passkey's upgrade to become their
|
|
366
|
+
* account in `realms`: the deployment flags a chain, `realms` include the `default` realm, where the
|
|
367
|
+
* passkey links, Tempo ID stores no passkey of the user, and wallet.tempo holds a passkey of the
|
|
368
|
+
* email that has not linked. Such a user receives no cloud wallet on any chain, since the passkey
|
|
369
|
+
* becomes their account. A failed lookup waits, since a cloud wallet created beside the passkey
|
|
370
|
+
* would stay, and the next request looks again.
|
|
371
|
+
*/
|
|
372
|
+
export async function awaitsUpgrade(
|
|
373
|
+
c: Context<Env>,
|
|
374
|
+
options: awaitsUpgrade.Options,
|
|
375
|
+
) {
|
|
376
|
+
const { email, realms, userId } = options
|
|
377
|
+
const wallet = c.env.WALLET
|
|
378
|
+
if (!wallet || !looksUpUpgrade(c, { realms })) return false
|
|
379
|
+
|
|
380
|
+
// A passkey that Tempo ID stores for the user is authoritative, so the request reads no passkey
|
|
381
|
+
// of the email from wallet.tempo, whose lookup is slower than the database.
|
|
382
|
+
const [stored] = await Timing.measure(
|
|
383
|
+
c,
|
|
384
|
+
db
|
|
385
|
+
.select({ id: Schema.keys.id })
|
|
386
|
+
.from(Schema.keys)
|
|
387
|
+
.where(eq(Schema.keys.userId, userId))
|
|
388
|
+
.limit(1),
|
|
389
|
+
'db.keys.stored',
|
|
390
|
+
)
|
|
391
|
+
if (stored) return false
|
|
392
|
+
|
|
393
|
+
const listed = await Timing.measure(
|
|
394
|
+
c,
|
|
395
|
+
Wallet.credentials(wallet, { email }),
|
|
396
|
+
'Wallet.credentials',
|
|
397
|
+
).catch((error: unknown) => {
|
|
398
|
+
Log.warn(c, {
|
|
399
|
+
error,
|
|
400
|
+
message:
|
|
401
|
+
'The wallet service failed a passkey lookup by email, so no cloud wallet was created.',
|
|
402
|
+
})
|
|
403
|
+
return undefined
|
|
404
|
+
})
|
|
405
|
+
if (!listed) return true
|
|
406
|
+
return (await withoutLinked(c, { listed })).length > 0
|
|
407
|
+
}
|
|
408
|
+
|
|
409
|
+
export declare namespace awaitsUpgrade {
|
|
410
|
+
type Options = {
|
|
411
|
+
/** The signed-in user's verified email. */
|
|
412
|
+
email: string
|
|
413
|
+
/** The realms where the request would create the user's account. */
|
|
414
|
+
realms: readonly Pick<Realm.Realm, 'id'>[]
|
|
415
|
+
/** The signed-in user's ID. */
|
|
416
|
+
userId: string
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
/**
|
|
421
|
+
* Returns whether {@link awaitsUpgrade} looks up the user's email for `realms`: the deployment flags
|
|
422
|
+
* a chain, binds the wallet service, and `realms` include the `default` realm. Otherwise it returns
|
|
423
|
+
* `false` without the email, so a caller that holds none reads it only when this returns `true`.
|
|
424
|
+
*/
|
|
425
|
+
export function looksUpUpgrade(
|
|
426
|
+
c: Context<Env>,
|
|
427
|
+
options: looksUpUpgrade.Options,
|
|
428
|
+
) {
|
|
429
|
+
if (!options.realms.some((realm) => realm.id === Realm.defaultId))
|
|
430
|
+
return false
|
|
431
|
+
if (!c.env.WALLET) return false
|
|
432
|
+
return (
|
|
433
|
+
ConfigurableAccount.chains({
|
|
434
|
+
rpcUrl: env.TEMPO_RPC_URL,
|
|
435
|
+
rpcUrls: env.RPC_URLS,
|
|
436
|
+
value: env.CONFIGURABLE_ACCOUNTS,
|
|
437
|
+
}).length > 0
|
|
438
|
+
)
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
export declare namespace looksUpUpgrade {
|
|
442
|
+
type Options = {
|
|
443
|
+
/** The realms where the request would create the user's account. */
|
|
444
|
+
realms: readonly Pick<Realm.Realm, 'id'>[]
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Returns the wallet.tempo passkeys of `email`, the signed-in user's, that link to no user on Tempo
|
|
450
|
+
* ID yet. Returns none without the wallet service, or when it fails, which it logs, so a page that
|
|
451
|
+
* offers them still loads.
|
|
452
|
+
*/
|
|
453
|
+
export async function unlinked(
|
|
454
|
+
c: Context<Env>,
|
|
455
|
+
options: unlinked.Options,
|
|
456
|
+
): Promise<readonly Wallet.Listed[]> {
|
|
457
|
+
if (!c.env.WALLET) return []
|
|
458
|
+
const listed = await Timing.measure(
|
|
459
|
+
c,
|
|
460
|
+
Wallet.credentials(c.env.WALLET, { email: options.email }),
|
|
461
|
+
'Wallet.credentials',
|
|
462
|
+
).catch((error: unknown) => {
|
|
463
|
+
// A wallet service without the method, or one that fails, lists none.
|
|
464
|
+
Log.warn(c, {
|
|
465
|
+
error,
|
|
466
|
+
message: 'The wallet service failed a passkey lookup by email.',
|
|
467
|
+
})
|
|
468
|
+
return []
|
|
469
|
+
})
|
|
470
|
+
return await withoutLinked(c, { listed })
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
export declare namespace unlinked {
|
|
474
|
+
type Options = {
|
|
475
|
+
/** The signed-in user's verified email. */
|
|
476
|
+
email: string
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
|
|
480
|
+
/**
|
|
481
|
+
* Returns the upgrades that wait for the user with `userId` on the chain that `chain` names, or
|
|
482
|
+
* none when `CONFIGURABLE_ACCOUNTS` does not name it. First comes each linked wallet.tempo passkey's
|
|
483
|
+
* account without a stored configuration on the chain. Then, for a user who holds no account yet,
|
|
484
|
+
* each wallet.tempo passkey of `email` that has not linked, which its upgrade links. It reads stored
|
|
485
|
+
* rows, and wallet.tempo only for a user without an account, never a chain.
|
|
486
|
+
*/
|
|
487
|
+
export async function upgrades(
|
|
488
|
+
c: Context<Env>,
|
|
489
|
+
options: upgrades.Options,
|
|
490
|
+
): Promise<readonly upgrades.Entry[]> {
|
|
491
|
+
const { email, userId } = options
|
|
492
|
+
const chain = ConfigurableAccount.chains({
|
|
493
|
+
rpcUrl: env.TEMPO_RPC_URL,
|
|
494
|
+
rpcUrls: env.RPC_URLS,
|
|
495
|
+
value: env.CONFIGURABLE_ACCOUNTS,
|
|
496
|
+
}).find((entry) => entry.name === options.chain)
|
|
497
|
+
if (!chain) return []
|
|
498
|
+
|
|
499
|
+
// Each kind of owner that Tempo ID stores marks an account that the user already holds: a passkey
|
|
500
|
+
// that owns one, a development key, or the claim of a first account, which a cloud wallet holds.
|
|
501
|
+
const [passkeys, configs, secp256k1, claims] = await Promise.all([
|
|
502
|
+
Timing.measure(
|
|
503
|
+
c,
|
|
504
|
+
db
|
|
505
|
+
.select({ address: Schema.keys.address, source: Schema.keys.source })
|
|
506
|
+
.from(Schema.keys)
|
|
507
|
+
.where(
|
|
508
|
+
and(eq(Schema.keys.userId, userId), isNotNull(Schema.keys.address)),
|
|
509
|
+
),
|
|
510
|
+
'db.keys.list',
|
|
511
|
+
),
|
|
512
|
+
Timing.measure(
|
|
513
|
+
c,
|
|
514
|
+
db
|
|
515
|
+
.select({
|
|
516
|
+
address: Schema.accountConfigs.address,
|
|
517
|
+
chainId: Schema.accountConfigs.chainId,
|
|
518
|
+
})
|
|
519
|
+
.from(Schema.accountConfigs)
|
|
520
|
+
.where(eq(Schema.accountConfigs.userId, userId)),
|
|
521
|
+
'db.accountConfigs.list',
|
|
522
|
+
),
|
|
523
|
+
Timing.measure(
|
|
524
|
+
c,
|
|
525
|
+
db
|
|
526
|
+
.select({ address: Schema.secp256k1Owners.address })
|
|
527
|
+
.from(Schema.secp256k1Owners)
|
|
528
|
+
.where(eq(Schema.secp256k1Owners.userId, userId))
|
|
529
|
+
.limit(1),
|
|
530
|
+
'db.secp256k1Owners.list',
|
|
531
|
+
),
|
|
532
|
+
Timing.measure(
|
|
533
|
+
c,
|
|
534
|
+
db
|
|
535
|
+
.select({ realmId: Schema.firstAccounts.realmId })
|
|
536
|
+
.from(Schema.firstAccounts)
|
|
537
|
+
.where(eq(Schema.firstAccounts.userId, userId))
|
|
538
|
+
.limit(1),
|
|
539
|
+
'db.firstAccounts.list',
|
|
540
|
+
),
|
|
541
|
+
])
|
|
542
|
+
|
|
543
|
+
// `wallet` is the earlier name of the `tempo-wallet` source, as `owners/Passkey.ts` reads it.
|
|
544
|
+
const roots = passkeys.flatMap((entry) =>
|
|
545
|
+
entry.address && ['tempo-wallet', 'wallet'].includes(entry.source)
|
|
546
|
+
? [entry.address]
|
|
547
|
+
: [],
|
|
548
|
+
)
|
|
549
|
+
const linked = roots
|
|
550
|
+
.filter(
|
|
551
|
+
(address) =>
|
|
552
|
+
!configs.some(
|
|
553
|
+
(config) =>
|
|
554
|
+
config.chainId === chain.chainId && config.address === address,
|
|
555
|
+
),
|
|
556
|
+
)
|
|
557
|
+
.map((address) => ({
|
|
558
|
+
account: Address.checksum(address as Address.Address),
|
|
559
|
+
chain: chain.name,
|
|
560
|
+
}))
|
|
561
|
+
if (passkeys.length > 0 || secp256k1.length > 0 || claims.length > 0)
|
|
562
|
+
return linked
|
|
563
|
+
|
|
564
|
+
const listed = await Timing.measure(
|
|
565
|
+
c,
|
|
566
|
+
unlinked(c, { email }),
|
|
567
|
+
'Configure.unlinked',
|
|
568
|
+
)
|
|
569
|
+
return listed.map((entry) => ({
|
|
570
|
+
chain: chain.name,
|
|
571
|
+
credentialId: entry.credentialId,
|
|
572
|
+
}))
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
export declare namespace upgrades {
|
|
576
|
+
/** An upgrade that waits: a linked passkey's account, or a passkey of the email that has not linked. */
|
|
577
|
+
type Entry =
|
|
578
|
+
| {
|
|
579
|
+
/** The linked wallet.tempo passkey's account, which upgrades in place. */
|
|
580
|
+
account: `0x${string}`
|
|
581
|
+
/** The name of the chain where it upgrades. */
|
|
582
|
+
chain: string
|
|
583
|
+
}
|
|
584
|
+
| {
|
|
585
|
+
/** The name of the chain where it upgrades. */
|
|
586
|
+
chain: string
|
|
587
|
+
/** The credential ID of the wallet.tempo passkey, which the upgrade links. */
|
|
588
|
+
credentialId: string
|
|
589
|
+
}
|
|
590
|
+
|
|
591
|
+
type Options = {
|
|
592
|
+
/** The name of the chain to list upgrades on. */
|
|
593
|
+
chain: string
|
|
594
|
+
/** The signed-in user's verified email. */
|
|
595
|
+
email: string
|
|
596
|
+
/** The signed-in user's ID. */
|
|
597
|
+
userId: string
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
|
|
601
|
+
/**
|
|
602
|
+
* Returns the root passkey account that an upgrade covers on the chain that `chain` names: the user's
|
|
603
|
+
* account at `account`, which a linked wallet.tempo passkey owns, or the account of the wallet.tempo
|
|
604
|
+
* passkey `credentialId`, which links to the user with the upgrade. wallet.tempo's email of that
|
|
605
|
+
* passkey must be `email`, the user's, which the sign-in proved. Returns `owner_exists` for an
|
|
606
|
+
* account that is configurable already, and `not_configurable` for one that no passkey owns.
|
|
607
|
+
*/
|
|
608
|
+
export async function root(
|
|
609
|
+
c: Context<Env>,
|
|
610
|
+
options: root.Options,
|
|
611
|
+
): Promise<root.ReturnType | ErrorResponse.Instance<typeof root.errors>> {
|
|
612
|
+
const { clientId, credentialId, email, userId } = options
|
|
613
|
+
if (options.account) {
|
|
614
|
+
const found = await Timing.measure(
|
|
615
|
+
c,
|
|
616
|
+
find(c, {
|
|
617
|
+
account: options.account,
|
|
618
|
+
chain: options.chain,
|
|
619
|
+
clientId,
|
|
620
|
+
userId,
|
|
621
|
+
}),
|
|
622
|
+
'Configure.find',
|
|
623
|
+
)
|
|
624
|
+
if (found instanceof ErrorResponse.ResponseError) return found
|
|
625
|
+
const { owner } = found
|
|
626
|
+
const address = Owner.address(owner)
|
|
627
|
+
if (found.current)
|
|
628
|
+
return new ConfigurableAccount.OwnerExistsError({
|
|
629
|
+
account: address,
|
|
630
|
+
owner: 'configurable',
|
|
631
|
+
})
|
|
632
|
+
if (!owner.credential)
|
|
633
|
+
return new ConfigurableAccount.NotConfigurableError({
|
|
634
|
+
account: address,
|
|
635
|
+
reason: 'cloud',
|
|
636
|
+
})
|
|
637
|
+
return {
|
|
638
|
+
account: address,
|
|
639
|
+
chain: found.chain,
|
|
640
|
+
client: found.client,
|
|
641
|
+
credential: owner.credential,
|
|
642
|
+
link: undefined,
|
|
643
|
+
owners: found.owners,
|
|
644
|
+
realm: owner.realm,
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
const chain = resolve({ chain: options.chain })
|
|
649
|
+
if (chain instanceof ErrorResponse.ResponseError) return chain
|
|
650
|
+
const realms = await Timing.measure(
|
|
651
|
+
c,
|
|
652
|
+
reach(c, { clientId }),
|
|
653
|
+
'Configure.reach',
|
|
654
|
+
)
|
|
655
|
+
// wallet.tempo's passkeys belong to the `default` realm's relying party.
|
|
656
|
+
const realm = realms.find((entry) => entry.id === Realm.defaultId)
|
|
657
|
+
const relyingParty = realm
|
|
658
|
+
? Passkey.relyingParty([realm], { origin: env.URL })
|
|
659
|
+
: undefined
|
|
660
|
+
if (!realm || !relyingParty)
|
|
661
|
+
return new Passkey.NotPermittedError({ clientId })
|
|
662
|
+
|
|
663
|
+
const id = credentialId!
|
|
664
|
+
const refused = new TempoAccount.ForeignAccountError({
|
|
665
|
+
account: id,
|
|
666
|
+
field: 'credentialId',
|
|
667
|
+
})
|
|
668
|
+
const wallet = c.env.WALLET
|
|
669
|
+
? await Timing.measure(
|
|
670
|
+
c,
|
|
671
|
+
Wallet.credential(c.env.WALLET, { id }),
|
|
672
|
+
'Wallet.credential',
|
|
673
|
+
).catch((error: unknown) => {
|
|
674
|
+
// Only the binding call throws, so the failure is wallet.tempo's.
|
|
675
|
+
Log.warn(c, {
|
|
676
|
+
error,
|
|
677
|
+
message: 'The wallet service failed a passkey lookup.',
|
|
678
|
+
})
|
|
679
|
+
throw (
|
|
680
|
+
(error instanceof Error && ErrorResponse.fromUpstream(error)) ||
|
|
681
|
+
new ErrorResponse.UpstreamUnavailableError()
|
|
682
|
+
)
|
|
683
|
+
})
|
|
684
|
+
: undefined
|
|
685
|
+
if (!wallet || wallet.email?.toLowerCase() !== email.toLowerCase())
|
|
686
|
+
return refused
|
|
687
|
+
|
|
688
|
+
const owners = await Timing.measure(
|
|
689
|
+
c,
|
|
690
|
+
TempoAccount.held(c, {
|
|
691
|
+
chainId: chain.chainId,
|
|
692
|
+
db,
|
|
693
|
+
env,
|
|
694
|
+
realms,
|
|
695
|
+
userId,
|
|
696
|
+
}),
|
|
697
|
+
'TempoAccount.held',
|
|
698
|
+
)
|
|
699
|
+
const account = Address.checksum(wallet.address as Address.Address)
|
|
700
|
+
if (
|
|
701
|
+
owners.some(
|
|
702
|
+
(entry) =>
|
|
703
|
+
entry.configurable && Address.isEqual(Owner.key(entry), account),
|
|
704
|
+
)
|
|
705
|
+
)
|
|
706
|
+
return new ConfigurableAccount.OwnerExistsError({
|
|
707
|
+
account,
|
|
708
|
+
owner: 'configurable',
|
|
709
|
+
})
|
|
710
|
+
|
|
711
|
+
return {
|
|
712
|
+
account,
|
|
713
|
+
chain,
|
|
714
|
+
client: ConfigurableAccount.client({
|
|
715
|
+
apiUrl: Chain.apiUrl({
|
|
716
|
+
apiUrls: env.TEMPO_API_URLS,
|
|
717
|
+
chainId: chain.chainId,
|
|
718
|
+
}),
|
|
719
|
+
chain,
|
|
720
|
+
}),
|
|
721
|
+
credential: { id, publicKey: wallet.publicKey, rpId: relyingParty.rpId },
|
|
722
|
+
// The link runs once the passkey signed the upgrade, which proves the user holds it. A passkey
|
|
723
|
+
// that links to another user, in a race, refuses the upgrade.
|
|
724
|
+
link: async () => {
|
|
725
|
+
const linked = await Timing.measure(
|
|
726
|
+
c,
|
|
727
|
+
Passkey.link(db, {
|
|
728
|
+
credential: wallet,
|
|
729
|
+
id,
|
|
730
|
+
rpId: relyingParty.rpId,
|
|
731
|
+
userId,
|
|
732
|
+
}),
|
|
733
|
+
'Passkey.link',
|
|
734
|
+
)
|
|
735
|
+
TempoAccount.forget(c)
|
|
736
|
+
return linked === userId ? undefined : refused
|
|
737
|
+
},
|
|
738
|
+
owners,
|
|
739
|
+
realm,
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
export namespace root {
|
|
744
|
+
export type Options = {
|
|
745
|
+
/** The user's account that a linked passkey owns. Absent with `credentialId`. */
|
|
746
|
+
account?: `0x${string}` | undefined
|
|
747
|
+
/** The chain that the request names. Absent, the first chain whose accounts are configurable. */
|
|
748
|
+
chain?: string | undefined
|
|
749
|
+
/** The app whose realms hold the account. Absent, the `default` realm. */
|
|
750
|
+
clientId?: string | undefined
|
|
751
|
+
/** A wallet.tempo passkey that has not linked to the user yet. Absent with `account`. */
|
|
752
|
+
credentialId?: string | undefined
|
|
753
|
+
/** The signed-in user's verified email. */
|
|
754
|
+
email: string
|
|
755
|
+
/** The signed-in user's ID. */
|
|
756
|
+
userId: string
|
|
757
|
+
}
|
|
758
|
+
|
|
759
|
+
export type ReturnType = {
|
|
760
|
+
/** The account's address, the passkey's own. */
|
|
761
|
+
account: Hex.Hex
|
|
762
|
+
/** The chain, which `CONFIGURABLE_ACCOUNTS` names. */
|
|
763
|
+
chain: ConfigurableAccount.Entry
|
|
764
|
+
/** A client of the chain. */
|
|
765
|
+
client: ConfigurableAccount.Client
|
|
766
|
+
/** The passkey, which signs the upgrade as the account's root key. */
|
|
767
|
+
credential: Owner.Credential
|
|
768
|
+
/** Links the passkey to the user, for a passkey that has not linked yet. */
|
|
769
|
+
link: confirm.Options['link']
|
|
770
|
+
/** The user's accounts on the chain. */
|
|
771
|
+
owners: readonly Owner.Owner[]
|
|
772
|
+
/** The realm of the account, where a cloud wallet that joins it comes from. */
|
|
773
|
+
realm: Realm.Realm
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/** The refusals `root` returns or throws. */
|
|
777
|
+
export const errors = [
|
|
778
|
+
...ErrorResponse.fromUpstream.errors,
|
|
779
|
+
...find.errors,
|
|
780
|
+
ConfigurableAccount.NotConfigurableError,
|
|
781
|
+
ConfigurableAccount.OwnerExistsError,
|
|
782
|
+
Passkey.NotPermittedError,
|
|
783
|
+
] as const
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
/**
|
|
787
|
+
* Sends the change that installs `target` with `signing`'s server signer, and stores the installed
|
|
788
|
+
* configuration. A failure of the chain or the Tempo API responds with `upstream_unavailable`.
|
|
789
|
+
*/
|
|
790
|
+
export async function send(
|
|
791
|
+
c: Context<Env>,
|
|
792
|
+
options: send.Options,
|
|
793
|
+
): Promise<ConfigurableAccount.Config> {
|
|
794
|
+
const { client, current, signing, target, userId } = options
|
|
795
|
+
const account = await Timing.measure(
|
|
796
|
+
c,
|
|
797
|
+
signing.signer!(c, { auth: c.var.auth }),
|
|
798
|
+
'Owner.signer',
|
|
799
|
+
)
|
|
800
|
+
const installed = await submit(c, () =>
|
|
801
|
+
ConfigurableAccount.send({ account, client, current, target }),
|
|
802
|
+
)
|
|
803
|
+
await Timing.measure(
|
|
804
|
+
c,
|
|
805
|
+
ConfigurableAccount.save(db, { config: installed, userId }),
|
|
806
|
+
'db.accountConfig.save',
|
|
807
|
+
)
|
|
808
|
+
return installed
|
|
809
|
+
}
|
|
810
|
+
|
|
811
|
+
export namespace send {
|
|
812
|
+
export type Options = {
|
|
813
|
+
/** A client of the chain. */
|
|
814
|
+
client: ConfigurableAccount.Client
|
|
815
|
+
/** The account's configuration, if any. */
|
|
816
|
+
current: ConfigurableAccount.Config | undefined
|
|
817
|
+
/** The owner that signs, from {@link signer}, with a server signer. */
|
|
818
|
+
signing: Owner.Owner
|
|
819
|
+
/** The configuration to install. */
|
|
820
|
+
target: ConfigurableAccount.Config
|
|
821
|
+
/** The signed-in user's ID. */
|
|
822
|
+
userId: string
|
|
823
|
+
}
|
|
824
|
+
|
|
825
|
+
/** The refusals `send` throws: those of {@link submit}. */
|
|
826
|
+
export const errors = [
|
|
827
|
+
...ErrorResponse.fromUpstream.errors,
|
|
828
|
+
ConfigurableAccount.ConflictError,
|
|
829
|
+
] as const
|
|
830
|
+
}
|
|
831
|
+
|
|
832
|
+
/**
|
|
833
|
+
* Returns the owner that signs a change of `owner`'s configuration: the key that acts as the
|
|
834
|
+
* account, which signs its upgrade, or the configurable view, whose owners sign an update.
|
|
835
|
+
*/
|
|
836
|
+
export function signer(owner: Owner.Owner, options: signer.Options) {
|
|
837
|
+
return options.current ? owner.configurable!.owner : owner
|
|
838
|
+
}
|
|
839
|
+
|
|
840
|
+
export declare namespace signer {
|
|
841
|
+
type Options = {
|
|
842
|
+
/** The account's configuration, if any. */
|
|
843
|
+
current: ConfigurableAccount.Config | undefined
|
|
844
|
+
}
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
/**
|
|
848
|
+
* Runs `fn`, a change on the chain, and maps a failure that is not a refusal to
|
|
849
|
+
* `upstream_unavailable`, after it logs it. A configuration conflict stays a refusal.
|
|
850
|
+
*/
|
|
851
|
+
export async function submit<result>(
|
|
852
|
+
c: Context<Env>,
|
|
853
|
+
fn: () => Promise<result>,
|
|
854
|
+
): Promise<result> {
|
|
855
|
+
try {
|
|
856
|
+
return await Timing.measure(c, fn(), 'ConfigurableAccount.send')
|
|
857
|
+
} catch (error) {
|
|
858
|
+
if (error instanceof ErrorResponse.ResponseError) throw error
|
|
859
|
+
if (error instanceof Error) {
|
|
860
|
+
const upstream = ErrorResponse.fromUpstream(error)
|
|
861
|
+
if (upstream) throw upstream
|
|
862
|
+
}
|
|
863
|
+
// A node's refusal or a reverted transaction is the chain's failure, so it maps the same way.
|
|
864
|
+
Log.warn(c, {
|
|
865
|
+
error,
|
|
866
|
+
message: 'The chain did not install the account configuration.',
|
|
867
|
+
})
|
|
868
|
+
throw new ErrorResponse.UpstreamUnavailableError()
|
|
869
|
+
}
|
|
870
|
+
}
|
|
871
|
+
|
|
872
|
+
export namespace submit {
|
|
873
|
+
/** The refusals `submit` throws. */
|
|
874
|
+
export const errors = [
|
|
875
|
+
...ErrorResponse.fromUpstream.errors,
|
|
876
|
+
ConfigurableAccount.ConflictError,
|
|
877
|
+
] as const
|
|
878
|
+
}
|
|
879
|
+
|
|
880
|
+
/** Returns the refusal of a step with a key's registration whose repeated request has no signature. */
|
|
881
|
+
function keySignatureRequired() {
|
|
882
|
+
return new Validation.InvalidFieldError({
|
|
883
|
+
issues: [
|
|
884
|
+
{
|
|
885
|
+
message:
|
|
886
|
+
"The step registers the key before the upgrade, so the request needs the access key's signature over `step.key.digest`. Request a new step, and send both signatures",
|
|
887
|
+
path: ['key', 'signature'],
|
|
888
|
+
},
|
|
889
|
+
],
|
|
890
|
+
})
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
/** Returns the passkeys of `listed` that link to no user on Tempo ID. */
|
|
894
|
+
async function withoutLinked(c: Context<Env>, options: withoutLinked.Options) {
|
|
895
|
+
const { listed } = options
|
|
896
|
+
if (listed.length === 0) return []
|
|
897
|
+
|
|
898
|
+
const linked = await Timing.measure(
|
|
899
|
+
c,
|
|
900
|
+
db
|
|
901
|
+
.select({ id: Schema.keys.id })
|
|
902
|
+
.from(Schema.keys)
|
|
903
|
+
.where(
|
|
904
|
+
inArray(
|
|
905
|
+
Schema.keys.id,
|
|
906
|
+
listed.map((entry) => entry.credentialId),
|
|
907
|
+
),
|
|
908
|
+
),
|
|
909
|
+
'db.keys.linked',
|
|
910
|
+
)
|
|
911
|
+
return listed.filter(
|
|
912
|
+
(entry) => !linked.some((row) => row.id === entry.credentialId),
|
|
913
|
+
)
|
|
914
|
+
}
|
|
915
|
+
|
|
916
|
+
declare namespace withoutLinked {
|
|
917
|
+
type Options = {
|
|
918
|
+
/** The wallet.tempo passkeys of the user's email. */
|
|
919
|
+
listed: readonly Wallet.Listed[]
|
|
920
|
+
}
|
|
921
|
+
}
|