@tempoxyz/id 0.0.0-pr-187.sha-eed04d3
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 +81 -0
- package/dist/App.d.ts +20 -0
- package/dist/App.d.ts.map +1 -0
- package/dist/App.js +26 -0
- package/dist/App.js.map +1 -0
- package/dist/app/client/.assetsignore +2 -0
- package/dist/app/client/assets/BRLA-CZvVDNYr.png +0 -0
- package/dist/app/client/assets/CHFAU-DCedc4aH.png +0 -0
- package/dist/app/client/assets/DLUSD-BnRXm3EI.png +0 -0
- package/dist/app/client/assets/PRIME-CiFp2-3e.svg +14 -0
- package/dist/app/client/assets/Pilat-Bold-C1t1eIrF.woff2 +0 -0
- package/dist/app/client/assets/Pilat-Book-CbS8ofT8.woff2 +0 -0
- package/dist/app/client/assets/Pilat-Demi-CADSbPAt.woff2 +0 -0
- package/dist/app/client/assets/Pilat-Regular-Bx8vzE7q.woff2 +0 -0
- package/dist/app/client/assets/USD1-COVcO_PB.svg +30 -0
- package/dist/app/client/assets/YLDS-CRh8Zw0g.svg +3 -0
- package/dist/app/client/assets/ccip-Cq1mMiVl.js +1 -0
- package/dist/app/client/assets/frxUSD-n9pTpinR.svg +1 -0
- package/dist/app/client/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/app/client/assets/index-B7YJVP00.css +1 -0
- package/dist/app/client/assets/index-UXTxXCLk.js +55 -0
- package/dist/app/client/assets/pathUSD-BvaO6ooS.svg +25 -0
- package/dist/app/client/assets/reset-co-CHrff.css +1 -0
- package/dist/app/client/assets/wYLDS-CaCKDrO-.svg +10 -0
- package/dist/app/db/auth.d.ts +3207 -0
- package/dist/app/db/auth.d.ts.map +1 -0
- package/dist/app/db/auth.js +330 -0
- package/dist/app/db/auth.js.map +1 -0
- package/dist/app/db/schema.d.ts +932 -0
- package/dist/app/db/schema.d.ts.map +1 -0
- package/dist/app/db/schema.js +171 -0
- package/dist/app/db/schema.js.map +1 -0
- package/dist/app/server/.vite/manifest.json +489 -0
- package/dist/app/server/assets/BRLA-CZvVDNYr.png +0 -0
- package/dist/app/server/assets/CHFAU-DCedc4aH.png +0 -0
- package/dist/app/server/assets/DLUSD-BnRXm3EI.png +0 -0
- package/dist/app/server/assets/PRIME-CiFp2-3e.svg +14 -0
- package/dist/app/server/assets/Pilat-Bold-C1t1eIrF.woff2 +0 -0
- package/dist/app/server/assets/Pilat-Book-CbS8ofT8.woff2 +0 -0
- package/dist/app/server/assets/Pilat-Demi-CADSbPAt.woff2 +0 -0
- package/dist/app/server/assets/Pilat-Regular-Bx8vzE7q.woff2 +0 -0
- package/dist/app/server/assets/USD1-COVcO_PB.svg +30 -0
- package/dist/app/server/assets/YLDS-CRh8Zw0g.svg +3 -0
- package/dist/app/server/assets/_tanstack-start-manifest_v-DjQNeRZp.js +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/authorize-C95F-9E1-CbESJKGU.js +31 -0
- package/dist/app/server/assets/authorize-C95F-9E1-CbESJKGU.js.map +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/call-UQamaCKN.js +32 -0
- package/dist/app/server/assets/call-UQamaCKN.js.map +1 -0
- package/dist/app/server/assets/ccip-CbNKFO4n.js +2 -0
- package/dist/app/server/assets/ccip-CbNKFO4n.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-CS900nSP.css +1 -0
- package/dist/app/server/assets/cookie-Cce9CrIP.js +10 -0
- package/dist/app/server/assets/cookie-Cce9CrIP.js.map +1 -0
- package/dist/app/server/assets/core-B1HCXUmx.js +56 -0
- package/dist/app/server/assets/core-B1HCXUmx.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/default-u_dwuiYb-BJJ9PwCi.js +2 -0
- package/dist/app/server/assets/default-u_dwuiYb-BJJ9PwCi.js.map +1 -0
- package/dist/app/server/assets/dist-BxSwugSY.js +1 -0
- package/dist/app/server/assets/dist-CZGFhmQd.js +2 -0
- package/dist/app/server/assets/dist-CZGFhmQd.js.map +1 -0
- package/dist/app/server/assets/dist-Dg3PQqiW.js +15 -0
- package/dist/app/server/assets/dist-Dg3PQqiW.js.map +1 -0
- package/dist/app/server/assets/effect-QlVUlMFu-2tSPDT2b.js +2 -0
- package/dist/app/server/assets/effect-QlVUlMFu-2tSPDT2b.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/factory-ipHlJXZY.js +5 -0
- package/dist/app/server/assets/factory-ipHlJXZY.js.map +1 -0
- package/dist/app/server/assets/frxUSD-n9pTpinR.svg +1 -0
- package/dist/app/server/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
- package/dist/app/server/assets/get-id-field-B0x109VU.js +6 -0
- package/dist/app/server/assets/get-id-field-B0x109VU.js.map +1 -0
- package/dist/app/server/assets/index-CLddUTqr-xpSuLpBt.js +2 -0
- package/dist/app/server/assets/index-CLddUTqr-xpSuLpBt.js.map +1 -0
- package/dist/app/server/assets/index-DZEfthgZ-8Uq5s5Pt.js +2 -0
- package/dist/app/server/assets/index-DZEfthgZ-8Uq5s5Pt.js.map +1 -0
- package/dist/app/server/assets/kysely-adapter-MkHAI9Jk.js +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/reset-co-CHrff.css +1 -0
- package/dist/app/server/assets/rolldown-runtime-B0Z9INg1.js +1 -0
- package/dist/app/server/assets/router-CcbyBCI4.css +1 -0
- package/dist/app/server/assets/router-xjZtEeaI.js +7 -0
- package/dist/app/server/assets/router-xjZtEeaI.js.map +1 -0
- package/dist/app/server/assets/schema-check-Cf7QOZZD.js +9 -0
- package/dist/app/server/assets/schema-check-Cf7QOZZD.js.map +1 -0
- package/dist/app/server/assets/schemas-C2lCYmR5.js +2 -0
- package/dist/app/server/assets/schemas-C2lCYmR5.js.map +1 -0
- package/dist/app/server/assets/secp256k1-buM5g4AL.js +2 -0
- package/dist/app/server/assets/secp256k1-buM5g4AL.js.map +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-Cg1N07hM.js +2 -0
- package/dist/app/server/assets/standard-json-Cg1N07hM.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/sury-CWZTCd75-xt1mWc9f.js +2 -0
- package/dist/app/server/assets/sury-CWZTCd75-xt1mWc9f.js.map +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/utils-C4ZXZIZW.js +2 -0
- package/dist/app/server/assets/utils-C4ZXZIZW.js.map +1 -0
- package/dist/app/server/assets/valibot--1zFm7rT-NSoY2xTp.js +2 -0
- package/dist/app/server/assets/valibot--1zFm7rT-NSoY2xTp.js.map +1 -0
- package/dist/app/server/assets/valibot-D_HTw1Gn-CJwWeOUE.js +2 -0
- package/dist/app/server/assets/valibot-D_HTw1Gn-CJwWeOUE.js.map +1 -0
- package/dist/app/server/assets/wYLDS-CaCKDrO-.svg +10 -0
- package/dist/app/server/assets/zod-Bwrt9trS-CV38yPnQ.js +2 -0
- package/dist/app/server/assets/zod-Bwrt9trS-CV38yPnQ.js.map +1 -0
- package/dist/app/server/assets/zod-DSgpEGAE-BvlnBE2L.js +2 -0
- package/dist/app/server/assets/zod-DSgpEGAE-BvlnBE2L.js.map +1 -0
- package/dist/app/server/index.js +574 -0
- package/dist/app/server/index.js.map +1 -0
- package/dist/app/server/wrangler.json +1 -0
- package/dist/cli/Admin.d.ts +38 -0
- package/dist/cli/Admin.d.ts.map +1 -0
- package/dist/cli/Admin.js +62 -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 +36 -0
- package/dist/cli/Apps.js.map +1 -0
- package/dist/cli/Cli.d.ts +14 -0
- package/dist/cli/Cli.d.ts.map +1 -0
- package/dist/cli/Cli.js +27 -0
- package/dist/cli/Cli.js.map +1 -0
- package/dist/cli/Project.d.ts +20 -0
- package/dist/cli/Project.d.ts.map +1 -0
- package/dist/cli/Project.js +88 -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 +49 -0
- package/dist/cli/Realms.js.map +1 -0
- package/dist/cli/Session.d.ts +85 -0
- package/dist/cli/Session.d.ts.map +1 -0
- package/dist/cli/Session.js +178 -0
- package/dist/cli/Session.js.map +1 -0
- package/dist/cli/User.d.ts +29 -0
- package/dist/cli/User.d.ts.map +1 -0
- package/dist/cli/User.js +39 -0
- package/dist/cli/User.js.map +1 -0
- package/dist/cli/V1.d.ts +35 -0
- package/dist/cli/V1.d.ts.map +1 -0
- package/dist/cli/V1.js +41 -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 +89 -0
- package/dist/cli/commands/admin/apps/create.js.map +1 -0
- package/dist/cli/commands/admin/apps/delete.d.ts +14 -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 +9 -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 +16 -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 +76 -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 +9 -0
- package/dist/cli/commands/admin/migrate.d.ts.map +1 -0
- package/dist/cli/commands/admin/migrate.js +17 -0
- package/dist/cli/commands/admin/migrate.js.map +1 -0
- package/dist/cli/commands/admin/realms/add.d.ts +12 -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 +13 -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 +16 -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 +18 -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 +11 -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 +15 -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 +15 -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 +16 -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 +15 -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 +101 -0
- package/dist/client/Actions.d.ts.map +1 -0
- package/dist/client/Actions.js +90 -0
- package/dist/client/Actions.js.map +1 -0
- package/dist/client/Auth.d.ts +161 -0
- package/dist/client/Auth.d.ts.map +1 -0
- package/dist/client/Auth.js +113 -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 +170 -0
- package/dist/client/Decorator.d.ts.map +1 -0
- package/dist/client/Decorator.js +227 -0
- package/dist/client/Decorator.js.map +1 -0
- package/dist/client/Key.d.ts +85 -0
- package/dist/client/Key.d.ts.map +1 -0
- package/dist/client/Key.js +83 -0
- package/dist/client/Key.js.map +1 -0
- package/dist/client/Pending.d.ts +39 -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 +34 -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/Provider.d.ts +16 -0
- package/dist/client/Provider.d.ts.map +1 -0
- package/dist/client/Provider.js +12 -0
- package/dist/client/Provider.js.map +1 -0
- package/dist/client/Step.d.ts +21 -0
- package/dist/client/Step.d.ts.map +1 -0
- package/dist/client/Step.js +16 -0
- package/dist/client/Step.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 +40 -0
- package/dist/client/TempoAccount.d.ts.map +1 -0
- package/dist/client/TempoAccount.js +16 -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 +25 -0
- package/dist/client/actions/account.d.ts.map +1 -0
- package/dist/client/actions/account.js +34 -0
- package/dist/client/actions/account.js.map +1 -0
- package/dist/client/actions/device.d.ts +53 -0
- package/dist/client/actions/device.d.ts.map +1 -0
- package/dist/client/actions/device.js +79 -0
- package/dist/client/actions/device.js.map +1 -0
- package/dist/client/actions/email.d.ts +84 -0
- package/dist/client/actions/email.d.ts.map +1 -0
- package/dist/client/actions/email.js +63 -0
- package/dist/client/actions/email.js.map +1 -0
- package/dist/client/actions/oauth.d.ts +115 -0
- package/dist/client/actions/oauth.d.ts.map +1 -0
- package/dist/client/actions/oauth.js +105 -0
- package/dist/client/actions/oauth.js.map +1 -0
- package/dist/client/actions/passkey.d.ts +88 -0
- package/dist/client/actions/passkey.d.ts.map +1 -0
- package/dist/client/actions/passkey.js +60 -0
- package/dist/client/actions/passkey.js.map +1 -0
- package/dist/client/actions/provider.d.ts +49 -0
- package/dist/client/actions/provider.d.ts.map +1 -0
- package/dist/client/actions/provider.js +34 -0
- package/dist/client/actions/provider.js.map +1 -0
- package/dist/client/actions/realm.d.ts +24 -0
- package/dist/client/actions/realm.d.ts.map +1 -0
- package/dist/client/actions/realm.js +15 -0
- package/dist/client/actions/realm.js.map +1 -0
- package/dist/client/actions/redirect.d.ts +153 -0
- package/dist/client/actions/redirect.d.ts.map +1 -0
- package/dist/client/actions/redirect.js +236 -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 +14 -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 +106 -0
- package/dist/client/internal/api.d.ts.map +1 -0
- package/dist/client/internal/api.js +129 -0
- package/dist/client/internal/api.js.map +1 -0
- package/dist/client/internal/headless.d.ts +33 -0
- package/dist/client/internal/headless.d.ts.map +1 -0
- package/dist/client/internal/headless.js +46 -0
- package/dist/client/internal/headless.js.map +1 -0
- package/dist/client/internal/indexedDb.d.ts +9 -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 +58 -0
- package/dist/client/internal/request.d.ts.map +1 -0
- package/dist/client/internal/request.js +45 -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.d.ts +20 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +20 -0
- package/dist/client.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/Apps.d.ts +3051 -0
- package/dist/internal/Apps.d.ts.map +1 -0
- package/dist/internal/Apps.js +472 -0
- package/dist/internal/Apps.js.map +1 -0
- package/dist/internal/Auth.d.ts +4058 -0
- package/dist/internal/Auth.d.ts.map +1 -0
- package/dist/internal/Auth.js +137 -0
- package/dist/internal/Auth.js.map +1 -0
- package/dist/internal/Authorize.d.ts +532 -0
- package/dist/internal/Authorize.d.ts.map +1 -0
- package/dist/internal/Authorize.js +326 -0
- package/dist/internal/Authorize.js.map +1 -0
- package/dist/internal/Device.d.ts +371 -0
- package/dist/internal/Device.d.ts.map +1 -0
- package/dist/internal/Device.js +271 -0
- package/dist/internal/Device.js.map +1 -0
- package/dist/internal/Env.d.ts +57 -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 +609 -0
- package/dist/internal/ErrorResponse.d.ts.map +1 -0
- package/dist/internal/ErrorResponse.js +679 -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 +1456 -0
- package/dist/internal/KeyAuthorization.d.ts.map +1 -0
- package/dist/internal/KeyAuthorization.js +1030 -0
- package/dist/internal/KeyAuthorization.js.map +1 -0
- package/dist/internal/Limits.d.ts +65 -0
- package/dist/internal/Limits.d.ts.map +1 -0
- package/dist/internal/Limits.js +35 -0
- package/dist/internal/Limits.js.map +1 -0
- package/dist/internal/Log.d.ts +49 -0
- package/dist/internal/Log.d.ts.map +1 -0
- package/dist/internal/Log.js +101 -0
- package/dist/internal/Log.js.map +1 -0
- package/dist/internal/LogLine.d.ts +33 -0
- package/dist/internal/LogLine.d.ts.map +1 -0
- package/dist/internal/LogLine.js +56 -0
- package/dist/internal/LogLine.js.map +1 -0
- package/dist/internal/Migrations.d.ts +19 -0
- package/dist/internal/Migrations.d.ts.map +1 -0
- package/dist/internal/Migrations.js +57 -0
- package/dist/internal/Migrations.js.map +1 -0
- package/dist/internal/Owner.d.ts +146 -0
- package/dist/internal/Owner.d.ts.map +1 -0
- package/dist/internal/Owner.js +65 -0
- package/dist/internal/Owner.js.map +1 -0
- package/dist/internal/Passkey.d.ts +528 -0
- package/dist/internal/Passkey.d.ts.map +1 -0
- package/dist/internal/Passkey.js +658 -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 +105 -0
- package/dist/internal/Privy.d.ts.map +1 -0
- package/dist/internal/Privy.js +224 -0
- package/dist/internal/Privy.js.map +1 -0
- package/dist/internal/RateLimit.d.ts +190 -0
- package/dist/internal/RateLimit.d.ts.map +1 -0
- package/dist/internal/RateLimit.js +148 -0
- package/dist/internal/RateLimit.js.map +1 -0
- package/dist/internal/Realm.d.ts +281 -0
- package/dist/internal/Realm.d.ts.map +1 -0
- package/dist/internal/Realm.js +477 -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 +115 -0
- package/dist/internal/SigningKey.d.ts.map +1 -0
- package/dist/internal/SigningKey.js +197 -0
- package/dist/internal/SigningKey.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 +51 -0
- package/dist/internal/Timing.d.ts.map +1 -0
- package/dist/internal/Timing.js +103 -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/Wallet.d.ts +37 -0
- package/dist/internal/Wallet.d.ts.map +1 -0
- package/dist/internal/Wallet.js +43 -0
- package/dist/internal/Wallet.js.map +1 -0
- package/dist/worker.d.ts +12 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +12 -0
- package/dist/worker.js.map +1 -0
- package/package.json +82 -0
- package/src/Api.ts +151 -0
- package/src/App.ts +56 -0
- package/src/api/account.ts +311 -0
- package/src/api/authenticate.ts +1290 -0
- package/src/api/authorize.ts +1030 -0
- package/src/api/device.ts +874 -0
- package/src/api/health.ts +72 -0
- package/src/api/lib/AccountStep.ts +335 -0
- package/src/api/lib/Auth.ts +134 -0
- package/src/api/lib/Consent.ts +339 -0
- package/src/api/lib/Cors.ts +107 -0
- package/src/api/lib/Database.ts +10 -0
- package/src/api/lib/DeviceRequest.ts +265 -0
- package/src/api/lib/FirstAccount.ts +90 -0
- package/src/api/lib/KeySigner.ts +393 -0
- package/src/api/lib/PasskeyLink.ts +162 -0
- package/src/api/lib/Session.ts +34 -0
- package/src/api/lib/SignInConsent.ts +316 -0
- package/src/api/oauth.ts +1282 -0
- package/src/api/provider.ts +441 -0
- package/src/app/components/Button.tsx +128 -0
- package/src/app/components/CodeInput.tsx +186 -0
- package/src/app/components/ErrorMessage.tsx +66 -0
- package/src/app/components/Grant.tsx +323 -0
- package/src/app/components/Input.tsx +48 -0
- package/src/app/components/Tooltip.tsx +45 -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/crons/cleanup.ts +42 -0
- package/src/app/db/auth.ts +416 -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/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/_journal.json +83 -0
- package/src/app/db/schema.ts +218 -0
- package/src/app/env.ts +49 -0
- package/src/app/lib/Client.ts +82 -0
- package/src/app/lib/Loader.ts +24 -0
- package/src/app/package.json +8 -0
- package/src/app/routeTree.gen.ts +198 -0
- package/src/app/router.tsx +48 -0
- package/src/app/routes/[_].flows.tsx +3001 -0
- package/src/app/routes/__root.tsx +91 -0
- package/src/app/routes/authorize.tsx +197 -0
- package/src/app/routes/choose-account.tsx +111 -0
- package/src/app/routes/deposit.tsx +105 -0
- package/src/app/routes/device.tsx +227 -0
- package/src/app/routes/index.tsx +115 -0
- package/src/app/routes/login.tsx +506 -0
- package/src/app/screens/Account.tsx +347 -0
- package/src/app/screens/Approval.tsx +276 -0
- package/src/app/screens/ChooseAccount.tsx +240 -0
- package/src/app/screens/Deposit.tsx +762 -0
- package/src/app/screens/DeviceApproval.tsx +480 -0
- package/src/app/screens/SignIn.tsx +362 -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 +204 -0
- package/src/app/vite.config.ts +95 -0
- package/src/app/void.config.ts +29 -0
- package/src/app/zyzz.config.ts +274 -0
- package/src/cli/Admin.ts +73 -0
- package/src/cli/Apps.ts +29 -0
- package/src/cli/Cli.ts +42 -0
- package/src/cli/Project.ts +117 -0
- package/src/cli/Realms.ts +50 -0
- package/src/cli/Session.ts +239 -0
- package/src/cli/User.ts +45 -0
- package/src/cli/V1.ts +57 -0
- package/src/cli/bin.ts +44 -0
- package/src/cli/commands/admin/apps/create.ts +101 -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 +86 -0
- package/src/cli/commands/admin/index.ts +14 -0
- package/src/cli/commands/admin/migrate.ts +16 -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 +168 -0
- package/src/client/Auth.ts +285 -0
- package/src/client/Authorization.ts +34 -0
- package/src/client/Decorator.ts +410 -0
- package/src/client/Key.ts +140 -0
- package/src/client/Pending.ts +46 -0
- package/src/client/Permissions.ts +39 -0
- package/src/client/Provider.ts +18 -0
- package/src/client/Step.ts +24 -0
- package/src/client/Storage.ts +29 -0
- package/src/client/TempoAccount.ts +42 -0
- package/src/client/Tokens.ts +27 -0
- package/src/client/User.ts +23 -0
- package/src/client/actions/account.ts +57 -0
- package/src/client/actions/device.ts +151 -0
- package/src/client/actions/email.ts +141 -0
- package/src/client/actions/oauth.ts +182 -0
- package/src/client/actions/passkey.ts +141 -0
- package/src/client/actions/provider.ts +70 -0
- package/src/client/actions/realm.ts +36 -0
- package/src/client/actions/redirect.ts +408 -0
- package/src/client/internal/accessKey.ts +54 -0
- package/src/client/internal/account.ts +15 -0
- package/src/client/internal/api.ts +224 -0
- package/src/client/internal/headless.ts +77 -0
- package/src/client/internal/indexedDb.ts +44 -0
- package/src/client/internal/request.ts +71 -0
- package/src/client/internal/store.ts +20 -0
- package/src/client.ts +19 -0
- package/src/index.ts +6 -0
- package/src/internal/Apps.ts +718 -0
- package/src/internal/Auth.ts +203 -0
- package/src/internal/Authorize.ts +424 -0
- package/src/internal/Balance.ts +168 -0
- package/src/internal/BodyLimit.ts +36 -0
- package/src/internal/Chain.ts +16 -0
- package/src/internal/Device.ts +469 -0
- package/src/internal/Env.ts +58 -0
- package/src/internal/ErrorResponse.ts +854 -0
- package/src/internal/Id.ts +41 -0
- package/src/internal/KeyAuthorization.ts +1339 -0
- package/src/internal/Limits.ts +39 -0
- package/src/internal/Log.ts +178 -0
- package/src/internal/LogLine.ts +87 -0
- package/src/internal/Logout.ts +336 -0
- package/src/internal/Migrations.ts +86 -0
- package/src/internal/OpenApi.ts +300 -0
- package/src/internal/Owner.ts +211 -0
- package/src/internal/Passkey.ts +1052 -0
- package/src/internal/PendingKey.ts +104 -0
- package/src/internal/Privy.ts +402 -0
- package/src/internal/Provider.ts +125 -0
- package/src/internal/RateLimit.ts +259 -0
- package/src/internal/Realm.ts +768 -0
- package/src/internal/RequestId.ts +118 -0
- package/src/internal/SignInGrant.ts +168 -0
- package/src/internal/SigningKey.ts +286 -0
- package/src/internal/TempoAccount.ts +342 -0
- package/src/internal/TestInbox.ts +51 -0
- package/src/internal/Timing.ts +158 -0
- package/src/internal/Validation.ts +52 -0
- package/src/internal/Wallet.ts +62 -0
- package/src/internal/owners/Passkey.ts +72 -0
- package/src/internal/owners/Privy.ts +81 -0
- package/src/internal/owners/Secp256k1.ts +143 -0
- package/src/types/app.d.ts +19 -0
- package/src/worker.ts +11 -0
|
@@ -0,0 +1,178 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The CLI's stored session: the signed-in user, the tokens, and the access key that `tempo-id
|
|
3
|
+
* login` receives through Tempo ID's device grant as the `tempo-cli` app. The session lives in
|
|
4
|
+
* `id/credentials.json` under `TEMPO_HOME`, in a file only the current user can read.
|
|
5
|
+
* @module
|
|
6
|
+
*/
|
|
7
|
+
import * as Fs from 'node:fs/promises';
|
|
8
|
+
import * as Os from 'node:os';
|
|
9
|
+
import * as Path from 'node:path';
|
|
10
|
+
import * as Actions from '../client/Actions.js';
|
|
11
|
+
import * as Auth from '../client/Auth.js';
|
|
12
|
+
import * as Key from '../client/Key.js';
|
|
13
|
+
/** The client ID of Tempo ID's own device app, which every CLI shares. */
|
|
14
|
+
export const clientId = 'tempo-cli';
|
|
15
|
+
/** Returns the client of Tempo ID at `url`, or at `https://id.tempo.xyz`, as `tempo-cli`. */
|
|
16
|
+
export function auth(options) {
|
|
17
|
+
return Auth.create({ clientId, url: options.url });
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Returns the stored session, with its access token refreshed when it expires within 30 seconds.
|
|
21
|
+
* Returns `undefined` without a session, for a session without a user or an access key, or for one
|
|
22
|
+
* whose key expired or whose refresh fails, so the user signs in again. A session that another
|
|
23
|
+
* deployment issued also returns `undefined`, so its tokens never reach the deployment at `url`.
|
|
24
|
+
*/
|
|
25
|
+
export async function get(options) {
|
|
26
|
+
const read = await readSession(options);
|
|
27
|
+
const saved = read.status === 'found' ? read.session : undefined;
|
|
28
|
+
if (saved?.url !== new URL(auth(options).url).origin ||
|
|
29
|
+
!saved.user ||
|
|
30
|
+
!saved.key?.keyAuthorization ||
|
|
31
|
+
!saved.accessToken ||
|
|
32
|
+
Key.expired(saved.key))
|
|
33
|
+
return undefined;
|
|
34
|
+
if (saved.expiresAt - 30_000 > Date.now())
|
|
35
|
+
return saved;
|
|
36
|
+
if (!saved.refreshToken)
|
|
37
|
+
return undefined;
|
|
38
|
+
const tokens = await Actions.refresh(auth(options), {
|
|
39
|
+
refreshToken: saved.refreshToken,
|
|
40
|
+
}).catch(() => undefined);
|
|
41
|
+
if (!tokens)
|
|
42
|
+
return undefined;
|
|
43
|
+
return await save({ ...options, session: { ...saved, ...tokens } });
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Starts Tempo ID's device grant with a new access key, and returns the code to show and `wait`.
|
|
47
|
+
* `wait` resolves once the user approves the code in a browser, stores the new session, revokes the
|
|
48
|
+
* refresh token of the session that it replaced, and returns the new session. It rejects with
|
|
49
|
+
* `Auth.RequestError` when the user denies the code or the code expires.
|
|
50
|
+
*/
|
|
51
|
+
export async function login(options) {
|
|
52
|
+
const client = auth(options);
|
|
53
|
+
const device = await Actions.device.authorize(client);
|
|
54
|
+
return {
|
|
55
|
+
...device,
|
|
56
|
+
async wait() {
|
|
57
|
+
const { account: _, ...authorization } = await device.wait();
|
|
58
|
+
const replaced = await readSession(options);
|
|
59
|
+
// The new session is stored first, so a failed write keeps the replaced one usable.
|
|
60
|
+
const session = await save({
|
|
61
|
+
home: options.home,
|
|
62
|
+
session: { ...authorization, url: new URL(client.url).origin },
|
|
63
|
+
});
|
|
64
|
+
// The replaced session's refresh token goes only to the deployment that issued it.
|
|
65
|
+
if (replaced.status === 'found' &&
|
|
66
|
+
replaced.session.refreshToken &&
|
|
67
|
+
replaced.session.url)
|
|
68
|
+
await revoke({
|
|
69
|
+
token: replaced.session.refreshToken,
|
|
70
|
+
url: replaced.session.url,
|
|
71
|
+
});
|
|
72
|
+
return session;
|
|
73
|
+
},
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Revokes the stored session's refresh token at the deployment that issued it, and deletes the
|
|
78
|
+
* session. A failed revocation, such as without a network, or a file that holds no readable
|
|
79
|
+
* session, still deletes it, and returns `false`.
|
|
80
|
+
*/
|
|
81
|
+
export async function remove(options) {
|
|
82
|
+
const read = await readSession(options);
|
|
83
|
+
const revoked = await (async () => {
|
|
84
|
+
if (read.status === 'missing')
|
|
85
|
+
return true;
|
|
86
|
+
if (read.status === 'invalid')
|
|
87
|
+
return false;
|
|
88
|
+
const { refreshToken, url } = read.session;
|
|
89
|
+
if (!refreshToken)
|
|
90
|
+
return true;
|
|
91
|
+
// A session stored before its origin was recorded names no deployment to revoke it at.
|
|
92
|
+
if (!url)
|
|
93
|
+
return false;
|
|
94
|
+
return await revoke({ token: refreshToken, url });
|
|
95
|
+
})();
|
|
96
|
+
await Fs.rm(file(options), { force: true });
|
|
97
|
+
return revoked;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Stores `session`, readable only by the current user, and returns it. The session replaces the
|
|
101
|
+
* stored one in one rename, so a failed write leaves the earlier session as it was.
|
|
102
|
+
*/
|
|
103
|
+
export async function save(options) {
|
|
104
|
+
const path = file(options);
|
|
105
|
+
await Fs.mkdir(Path.dirname(path), { mode: 0o700, recursive: true });
|
|
106
|
+
const temporary = `${path}.${crypto.randomUUID()}.tmp`;
|
|
107
|
+
try {
|
|
108
|
+
await Fs.writeFile(temporary, JSON.stringify(options.session), {
|
|
109
|
+
flag: 'wx',
|
|
110
|
+
mode: 0o600,
|
|
111
|
+
});
|
|
112
|
+
await Fs.rename(temporary, path);
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
await Fs.rm(temporary, { force: true });
|
|
116
|
+
throw error;
|
|
117
|
+
}
|
|
118
|
+
return options.session;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Returns the signed-in user's email, from Tempo ID's UserInfo endpoint, and the Tempo Account that
|
|
122
|
+
* the session's access key acts for. Returns `undefined` without a session.
|
|
123
|
+
*/
|
|
124
|
+
export async function whoami(options) {
|
|
125
|
+
const session = await get(options);
|
|
126
|
+
if (!session)
|
|
127
|
+
return undefined;
|
|
128
|
+
// The UserInfo endpoint accepts the access token, as any Tempo API does.
|
|
129
|
+
const user = await Actions.oauth.userInfo(auth(options), {
|
|
130
|
+
accessToken: session.accessToken,
|
|
131
|
+
});
|
|
132
|
+
return { account: session.key.account, email: user.email };
|
|
133
|
+
}
|
|
134
|
+
/** Returns the path of the session's file under `home`, or under `~/.tempo` for an unset or empty `home`. */
|
|
135
|
+
function file(options) {
|
|
136
|
+
return Path.join(options.home || Path.join(Os.homedir(), '.tempo'), 'id', 'credentials.json');
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Reads the stored session. Returns `missing` without a file, and `invalid` for a file that holds
|
|
140
|
+
* no JSON object.
|
|
141
|
+
*/
|
|
142
|
+
async function readSession(options) {
|
|
143
|
+
return await Fs.readFile(file(options), 'utf8').then((text) => {
|
|
144
|
+
const session = (() => {
|
|
145
|
+
try {
|
|
146
|
+
return JSON.parse(text);
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
return undefined;
|
|
150
|
+
}
|
|
151
|
+
})();
|
|
152
|
+
if (typeof session !== 'object' || !session)
|
|
153
|
+
return { status: 'invalid' };
|
|
154
|
+
return { session: session, status: 'found' };
|
|
155
|
+
}, (error) => {
|
|
156
|
+
if (error.code === 'ENOENT')
|
|
157
|
+
return { status: 'missing' };
|
|
158
|
+
return { status: 'invalid' };
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Revokes `token` at the revocation endpoint (RFC 7009) of the deployment at `url`, and returns
|
|
163
|
+
* whether it succeeded. A deployment that does not respond within 10 seconds counts as a failure.
|
|
164
|
+
*/
|
|
165
|
+
async function revoke(options) {
|
|
166
|
+
const response = await fetch(new URL('/oauth2/revoke', options.url), {
|
|
167
|
+
body: new URLSearchParams({
|
|
168
|
+
client_id: clientId,
|
|
169
|
+
token: options.token,
|
|
170
|
+
token_type_hint: 'refresh_token',
|
|
171
|
+
}),
|
|
172
|
+
method: 'POST',
|
|
173
|
+
signal: AbortSignal.timeout(10_000),
|
|
174
|
+
}).catch(() => undefined);
|
|
175
|
+
await response?.body?.cancel();
|
|
176
|
+
return response?.ok ?? false;
|
|
177
|
+
}
|
|
178
|
+
//# sourceMappingURL=Session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Session.js","sourceRoot":"","sources":["../../src/cli/Session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the `login`, `logout`, and `whoami` commands share: the variables that name Tempo ID and the
|
|
3
|
+
* session's folder, and the loader of the session module. incur imports every command when the CLI
|
|
4
|
+
* starts, so this module imports only incur, and the session module loads only when these commands
|
|
5
|
+
* run.
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'incur';
|
|
9
|
+
/** The variables that name Tempo ID and the folder of the stored session. */
|
|
10
|
+
export declare const env: z.ZodObject<{
|
|
11
|
+
TEMPO_HOME: z.ZodOptional<z.ZodString>;
|
|
12
|
+
TEMPO_ID_URL: z.ZodOptional<z.ZodURL>;
|
|
13
|
+
}, z.core.$strip>;
|
|
14
|
+
/** The error for a command without Viem, which creates and signs with the access key. */
|
|
15
|
+
export declare const missingPeers: {
|
|
16
|
+
readonly code: 'missing_peer';
|
|
17
|
+
readonly message: 'Missing peer dependency. Install viem to run login, logout, and whoami.';
|
|
18
|
+
};
|
|
19
|
+
/** The error for a command that needs a session, and finds none. */
|
|
20
|
+
export declare const signedOut: {
|
|
21
|
+
readonly code: 'signed_out';
|
|
22
|
+
readonly message: 'Not signed in. Run `tempo-id login`.';
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Loads the session module, or returns `undefined` when Viem, the client's optional peer, is not
|
|
26
|
+
* installed.
|
|
27
|
+
*/
|
|
28
|
+
export declare function loadSession(): Promise<typeof import("./Session.js") | undefined>;
|
|
29
|
+
//# sourceMappingURL=User.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"User.d.ts","sourceRoot":"","sources":["../../src/cli/User.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAGzB,6EAA6E;AAC7E,eAAO,MAAM,GAAG;;;iBAWd,CAAA;AAEF,yFAAyF;AACzF,eAAO,MAAM,YAAY;aACvB,IAAI,EAAE,cAAc;aACpB,OAAO,EACL,yEAAyE;CACnE,CAAA;AAEV,oEAAoE;AACpE,eAAO,MAAM,SAAS;aACpB,IAAI,EAAE,YAAY;aAClB,OAAO,EAAE,sCAAsC;CACvC,CAAA;AAEV;;;GAGG;AACH,wBAAsB,WAAW,uDAGhC"}
|
package/dist/cli/User.js
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* What the `login`, `logout`, and `whoami` commands share: the variables that name Tempo ID and the
|
|
3
|
+
* session's folder, and the loader of the session module. incur imports every command when the CLI
|
|
4
|
+
* starts, so this module imports only incur, and the session module loads only when these commands
|
|
5
|
+
* run.
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
import { z } from 'incur';
|
|
9
|
+
import * as Admin from './Admin.js';
|
|
10
|
+
/** The variables that name Tempo ID and the folder of the stored session. */
|
|
11
|
+
export const env = z.object({
|
|
12
|
+
TEMPO_HOME: z
|
|
13
|
+
.string()
|
|
14
|
+
.optional()
|
|
15
|
+
.describe('The folder that holds the session, in id/credentials.json. Defaults to ~/.tempo.'),
|
|
16
|
+
TEMPO_ID_URL: z
|
|
17
|
+
.url()
|
|
18
|
+
.optional()
|
|
19
|
+
.describe("Tempo ID's origin. Defaults to https://id.tempo.xyz."),
|
|
20
|
+
});
|
|
21
|
+
/** The error for a command without Viem, which creates and signs with the access key. */
|
|
22
|
+
export const missingPeers = {
|
|
23
|
+
code: 'missing_peer',
|
|
24
|
+
message: 'Missing peer dependency. Install viem to run login, logout, and whoami.',
|
|
25
|
+
};
|
|
26
|
+
/** The error for a command that needs a session, and finds none. */
|
|
27
|
+
export const signedOut = {
|
|
28
|
+
code: 'signed_out',
|
|
29
|
+
message: 'Not signed in. Run `tempo-id login`.',
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* Loads the session module, or returns `undefined` when Viem, the client's optional peer, is not
|
|
33
|
+
* installed.
|
|
34
|
+
*/
|
|
35
|
+
export async function loadSession() {
|
|
36
|
+
// A dynamic import, since the module needs an optional peer that the other commands do not.
|
|
37
|
+
return await Admin.optional(import('./Session.js'));
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=User.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"User.js","sourceRoot":"","sources":["../../src/cli/User.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AACzB,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,6EAA6E;AAC7E,MAAM,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1B,UAAU,EAAE,CAAC;SACV,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF,CACnF;IACH,YAAY,EAAE,CAAC;SACZ,GAAG,EAAE;SACL,QAAQ,EAAE;SACV,QAAQ,CAAC,sDAAsD,CAAC;CACpE,CAAC,CAAA;AAEF,yFAAyF;AACzF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,cAAc;IACpB,OAAO,EACL,yEAAyE;CACnE,CAAA;AAEV,oEAAoE;AACpE,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,IAAI,EAAE,YAAY;IAClB,OAAO,EAAE,sCAAsC;CACvC,CAAA;AAEV;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,4FAA4F;IAC5F,OAAO,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAA;AACrD,CAAC"}
|
package/dist/cli/V1.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tempo-id v1` command group: one command per `/v1` route of a Tempo ID deployment, which incur
|
|
3
|
+
* generates from the deployment's OpenAPI document in its namespace mode, such as `tempo-id v1 auth
|
|
4
|
+
* providers` for `GET /v1/auth/providers`. The commands send no session, so the routes that need
|
|
5
|
+
* one refuse them with status 401.
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Fetches the OpenAPI document of the deployment at `url`, and returns the `v1` group's definition.
|
|
10
|
+
* The document keeps only the `/v1` routes, without the `/v1` prefix, which the group's name and
|
|
11
|
+
* base path supply. Rejects when the deployment does not respond within 10 seconds, or responds
|
|
12
|
+
* with an error.
|
|
13
|
+
*/
|
|
14
|
+
export declare function load(options: load.Options): Promise<{
|
|
15
|
+
basePath: string;
|
|
16
|
+
description: string;
|
|
17
|
+
fetch: (request: Request) => Promise<Response>;
|
|
18
|
+
openapi: {
|
|
19
|
+
paths: {
|
|
20
|
+
[k: string]: unknown;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
openapiConfig: {
|
|
24
|
+
mode: 'namespace';
|
|
25
|
+
};
|
|
26
|
+
}>;
|
|
27
|
+
export declare namespace load {
|
|
28
|
+
type Options = {
|
|
29
|
+
/** The fetch that reaches the deployment. Defaults to the global `fetch`. */
|
|
30
|
+
fetch?: typeof globalThis.fetch | undefined;
|
|
31
|
+
/** Tempo ID's origin. */
|
|
32
|
+
url: string;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=V1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"V1.d.ts","sourceRoot":"","sources":["../../src/cli/V1.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO;;;qBAwB3B,OAAO;;;;;;;QAQP,IAAI,EAAE,WAAW;;GAErC;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAK,OAAO,GAAG;QACb,6EAA6E;QAC7E,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,GAAG,SAAS,CAAA;QAC3C,yBAAyB;QACzB,GAAG,EAAE,MAAM,CAAA;KACZ,CAAA;CACF"}
|
package/dist/cli/V1.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The `tempo-id v1` command group: one command per `/v1` route of a Tempo ID deployment, which incur
|
|
3
|
+
* generates from the deployment's OpenAPI document in its namespace mode, such as `tempo-id v1 auth
|
|
4
|
+
* providers` for `GET /v1/auth/providers`. The commands send no session, so the routes that need
|
|
5
|
+
* one refuse them with status 401.
|
|
6
|
+
* @module
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Fetches the OpenAPI document of the deployment at `url`, and returns the `v1` group's definition.
|
|
10
|
+
* The document keeps only the `/v1` routes, without the `/v1` prefix, which the group's name and
|
|
11
|
+
* base path supply. Rejects when the deployment does not respond within 10 seconds, or responds
|
|
12
|
+
* with an error.
|
|
13
|
+
*/
|
|
14
|
+
export async function load(options) {
|
|
15
|
+
const { url } = options;
|
|
16
|
+
const fetch = options.fetch ?? globalThis.fetch;
|
|
17
|
+
const response = await fetch(new URL('/openapi.json', url), {
|
|
18
|
+
signal: AbortSignal.timeout(10_000),
|
|
19
|
+
});
|
|
20
|
+
if (!response.ok)
|
|
21
|
+
throw new Error(`Tempo ID at ${url} responded to /openapi.json with ${response.status}.`);
|
|
22
|
+
const document = (await response.json());
|
|
23
|
+
const paths = Object.fromEntries(Object.entries(document.paths ?? {}).flatMap(([path, item]) => path.startsWith('/v1/') ? [[path.slice('/v1'.length), item]] : []));
|
|
24
|
+
return {
|
|
25
|
+
basePath: '/v1',
|
|
26
|
+
description: "Call Tempo ID's /v1 API, one command per route.",
|
|
27
|
+
// Each request goes to the deployment, whatever origin incur builds it with. The path is set on
|
|
28
|
+
// the deployment's URL, never resolved against it, so a path argument such as `//host` keeps
|
|
29
|
+
// the deployment's origin.
|
|
30
|
+
fetch: (request) => {
|
|
31
|
+
const source = new URL(request.url);
|
|
32
|
+
const target = new URL(url);
|
|
33
|
+
target.pathname = source.pathname;
|
|
34
|
+
target.search = source.search;
|
|
35
|
+
return fetch(new Request(target, request));
|
|
36
|
+
},
|
|
37
|
+
openapi: { ...document, paths },
|
|
38
|
+
openapiConfig: { mode: 'namespace' },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=V1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"V1.js","sourceRoot":"","sources":["../../src/cli/V1.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAqB;IAC9C,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAA;IACvB,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,UAAU,CAAC,KAAK,CAAA;IAC/C,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,EAAE;QAC1D,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;KACpC,CAAC,CAAA;IACF,IAAI,CAAC,QAAQ,CAAC,EAAE;QACd,MAAM,IAAI,KAAK,CACb,eAAe,GAAG,oCAAoC,QAAQ,CAAC,MAAM,GAAG,CACzE,CAAA;IACH,MAAM,QAAQ,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAEtC,CAAA;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAC9B,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,CAC5D,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAClE,CACF,CAAA;IACD,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,WAAW,EAAE,iDAAiD;QAC9D,gGAAgG;QAChG,6FAA6F;QAC7F,2BAA2B;QAC3B,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;YACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;YAC3B,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YACjC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAA;YAC7B,OAAO,KAAK,CAAC,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;QAC5C,CAAC;QACD,OAAO,EAAE,EAAE,GAAG,QAAQ,EAAE,KAAK,EAAE;QAC/B,aAAa,EAAE,EAAE,IAAI,EAAE,WAAoB,EAAE;KAC9C,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.d.ts","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":""}
|
package/dist/cli/bin.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Runs the `tempo-id` CLI with the process's arguments. Only `v1` and `--mcp` load Tempo ID's
|
|
4
|
+
* OpenAPI document, so every other command starts without the network. When the deployment does not
|
|
5
|
+
* respond, a `v1` command exits with code 1, and an MCP server serves the other commands. Both warn
|
|
6
|
+
* on stderr.
|
|
7
|
+
* @module
|
|
8
|
+
*/
|
|
9
|
+
import * as Cli from './Cli.js';
|
|
10
|
+
import * as V1 from './V1.js';
|
|
11
|
+
const argv = process.argv.slice(2);
|
|
12
|
+
const url = process.env.TEMPO_ID_URL ?? 'https://id.tempo.xyz';
|
|
13
|
+
/** incur's global options that take a value, which the command follows. */
|
|
14
|
+
const valued = [
|
|
15
|
+
'--filter-output',
|
|
16
|
+
'--format',
|
|
17
|
+
'--token-limit',
|
|
18
|
+
'--token-offset',
|
|
19
|
+
];
|
|
20
|
+
// The command is the first argument that is no option, since global options, such as
|
|
21
|
+
// `--format json`, can come before it. An argument of another command can be `v1` too.
|
|
22
|
+
const command = (() => {
|
|
23
|
+
for (let index = 0; index < argv.length; index++) {
|
|
24
|
+
const entry = argv[index];
|
|
25
|
+
if (!entry.startsWith('-'))
|
|
26
|
+
return entry;
|
|
27
|
+
if (valued.includes(entry))
|
|
28
|
+
index++;
|
|
29
|
+
}
|
|
30
|
+
return undefined;
|
|
31
|
+
})();
|
|
32
|
+
const group = command === 'v1';
|
|
33
|
+
const v1 = await (async () => {
|
|
34
|
+
if (!group && !argv.includes('--mcp'))
|
|
35
|
+
return undefined;
|
|
36
|
+
return await V1.load({ url }).catch((error) => {
|
|
37
|
+
process.stderr.write(`The v1 commands are unavailable: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
38
|
+
return null;
|
|
39
|
+
});
|
|
40
|
+
})();
|
|
41
|
+
// A `v1` command fails without its group. An MCP server serves the other commands.
|
|
42
|
+
if (v1 === null && group)
|
|
43
|
+
process.exitCode = 1;
|
|
44
|
+
else
|
|
45
|
+
await Cli.create({ v1: v1 ?? undefined }).serve();
|
|
46
|
+
//# sourceMappingURL=bin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../../src/cli/bin.ts"],"names":[],"mappings":";AACA;;;;;;GAMG;AACH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,EAAE,MAAM,SAAS,CAAA;AAE7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAClC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,sBAAsB,CAAA;AAC9D,2EAA2E;AAC3E,MAAM,MAAM,GAAG;IACb,iBAAiB;IACjB,UAAU;IACV,eAAe;IACf,gBAAgB;CACjB,CAAA;AACD,qFAAqF;AACrF,uFAAuF;AACvF,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;IACpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAE,CAAA;QAC1B,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,OAAO,KAAK,CAAA;QACxC,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,KAAK,EAAE,CAAA;IACrC,CAAC;IACD,OAAO,SAAS,CAAA;AAClB,CAAC,CAAC,EAAE,CAAA;AACJ,MAAM,KAAK,GAAG,OAAO,KAAK,IAAI,CAAA;AAC9B,MAAM,EAAE,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;IAC3B,IAAI,CAAC,KAAK,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;QAAE,OAAO,SAAS,CAAA;IACvD,OAAO,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACrD,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAC/F,CAAA;QACD,OAAO,IAAI,CAAA;IACb,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,EAAE,CAAA;AAEJ,mFAAmF;AACnF,IAAI,EAAE,KAAK,IAAI,IAAI,KAAK;IAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAA;;IACzC,MAAM,GAAG,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,SAAS,EAAE,CAAC,CAAC,KAAK,EAAE,CAAA"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tempo-id admin apps create`: registers an OAuth app. The output holds the client secret, which no
|
|
3
|
+
* later command returns.
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { Cli, z } from 'incur';
|
|
7
|
+
declare const _default: Cli.FileCommand<undefined, z.ZodObject<{
|
|
8
|
+
DATABASE_URL: z.ZodOptional<z.ZodString>;
|
|
9
|
+
TEMPO_ID_CLIENT_SECRET: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
databaseUrl: z.ZodOptional<z.ZodString>;
|
|
12
|
+
clientId: z.ZodOptional<z.ZodString>;
|
|
13
|
+
device: z.ZodDefault<z.ZodBoolean>;
|
|
14
|
+
name: z.ZodString;
|
|
15
|
+
native: z.ZodDefault<z.ZodBoolean>;
|
|
16
|
+
postLogoutRedirectUri: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
17
|
+
redirectUri: z.ZodDefault<z.ZodArray<z.ZodString>>;
|
|
18
|
+
secret: z.ZodDefault<z.ZodBoolean>;
|
|
19
|
+
sign: z.ZodDefault<z.ZodBoolean>;
|
|
20
|
+
skipConsent: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
}, z.core.$strip>, undefined>;
|
|
22
|
+
export default _default;
|
|
23
|
+
//# sourceMappingURL=create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/admin/apps/create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tempo-id admin apps create`: registers an OAuth app. The output holds the client secret, which no
|
|
3
|
+
* later command returns.
|
|
4
|
+
* @module
|
|
5
|
+
*/
|
|
6
|
+
import { Cli, z } from 'incur';
|
|
7
|
+
import * as Admin from '../../../Admin.js';
|
|
8
|
+
export default Cli.command({
|
|
9
|
+
description: 'Register an OAuth app. The output holds its client secret, which no later command returns.',
|
|
10
|
+
env: Admin.env.extend({
|
|
11
|
+
TEMPO_ID_CLIENT_SECRET: z
|
|
12
|
+
.string()
|
|
13
|
+
.optional()
|
|
14
|
+
.describe('Client secret to keep with --secret, such as one that another deployment issued. No flag takes it, so it stays out of the shell history.'),
|
|
15
|
+
}),
|
|
16
|
+
// Hidden from MCP clients, as is every `admin apps` command, since the group returns client secrets.
|
|
17
|
+
mcp: false,
|
|
18
|
+
options: Admin.options.extend({
|
|
19
|
+
clientId: z
|
|
20
|
+
.string()
|
|
21
|
+
.optional()
|
|
22
|
+
.describe('Client ID to keep, such as one that another deployment issued. Defaults to a random ID.'),
|
|
23
|
+
device: z
|
|
24
|
+
.boolean()
|
|
25
|
+
.default(false)
|
|
26
|
+
.describe('Sign in through the device grant instead of a redirect, as a CLI does. A device app needs no redirect URI.'),
|
|
27
|
+
name: z.string().describe('Display name, which the approval page shows.'),
|
|
28
|
+
native: z
|
|
29
|
+
.boolean()
|
|
30
|
+
.default(false)
|
|
31
|
+
.describe('Register a mobile app instead of a web app.'),
|
|
32
|
+
postLogoutRedirectUri: z
|
|
33
|
+
.array(z.string())
|
|
34
|
+
.default([])
|
|
35
|
+
.describe('URI that the app returns to after it ends the session. Repeat the flag for each URI.'),
|
|
36
|
+
redirectUri: z
|
|
37
|
+
.array(z.string())
|
|
38
|
+
.default([])
|
|
39
|
+
.describe('Redirect URI. Repeat the flag for each URI, in each environment. Every app but a device app needs one.'),
|
|
40
|
+
secret: z
|
|
41
|
+
.boolean()
|
|
42
|
+
.default(false)
|
|
43
|
+
.describe('Issue a client secret, for an app with a backend. TEMPO_ID_CLIENT_SECRET sets it instead of a new one.'),
|
|
44
|
+
sign: z
|
|
45
|
+
.boolean()
|
|
46
|
+
.default(false)
|
|
47
|
+
.describe('Grant the tempo-id:sign scope, which permits the app to bind its own challenges.'),
|
|
48
|
+
skipConsent: z
|
|
49
|
+
.boolean()
|
|
50
|
+
.default(false)
|
|
51
|
+
.describe('Skip the approval page for requests without a key.'),
|
|
52
|
+
}),
|
|
53
|
+
async run(c) {
|
|
54
|
+
const connectionString = c.options.databaseUrl ?? c.env.DATABASE_URL;
|
|
55
|
+
if (!connectionString)
|
|
56
|
+
return c.error(Admin.missingDatabaseUrl);
|
|
57
|
+
const Apps = await Admin.loadApps();
|
|
58
|
+
if (!Apps)
|
|
59
|
+
return c.error(Admin.missingPeers);
|
|
60
|
+
const client = Apps.connect({ connectionString });
|
|
61
|
+
try {
|
|
62
|
+
return await Apps.Apps.create(client.db, {
|
|
63
|
+
clientId: c.options.clientId,
|
|
64
|
+
// The variable applies only with `--secret`, so an exported one never makes an app confidential.
|
|
65
|
+
clientSecret: c.options.secret
|
|
66
|
+
? c.env.TEMPO_ID_CLIENT_SECRET
|
|
67
|
+
: undefined,
|
|
68
|
+
device: c.options.device,
|
|
69
|
+
name: c.options.name,
|
|
70
|
+
postLogoutRedirectUris: c.options.postLogoutRedirectUri,
|
|
71
|
+
redirectUris: c.options.redirectUri,
|
|
72
|
+
secret: c.options.secret,
|
|
73
|
+
sign: c.options.sign,
|
|
74
|
+
skipConsent: c.options.skipConsent,
|
|
75
|
+
type: c.options.native ? 'native' : 'web',
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
const refusal = Apps.error(error);
|
|
80
|
+
if (refusal)
|
|
81
|
+
return c.error(refusal);
|
|
82
|
+
throw error;
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
await client.end();
|
|
86
|
+
}
|
|
87
|
+
},
|
|
88
|
+
});
|
|
89
|
+
//# sourceMappingURL=create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../../src/cli/commands/admin/apps/create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tempo-id admin apps delete`: removes an OAuth app, with its consents, tokens, and realms.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import { Cli, z } from 'incur';
|
|
6
|
+
declare const _default: Cli.FileCommand<z.ZodObject<{
|
|
7
|
+
clientId: z.ZodString;
|
|
8
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
9
|
+
DATABASE_URL: z.ZodOptional<z.ZodString>;
|
|
10
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
11
|
+
databaseUrl: z.ZodOptional<z.ZodString>;
|
|
12
|
+
}, z.core.$strip>, undefined>;
|
|
13
|
+
export default _default;
|
|
14
|
+
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/admin/apps/delete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tempo-id admin apps delete`: removes an OAuth app, with its consents, tokens, and realms.
|
|
3
|
+
* @module
|
|
4
|
+
*/
|
|
5
|
+
import { Cli, z } from 'incur';
|
|
6
|
+
import * as Admin from '../../../Admin.js';
|
|
7
|
+
export default Cli.command({
|
|
8
|
+
args: z.object({
|
|
9
|
+
clientId: z.string().describe("OAuth app's client ID."),
|
|
10
|
+
}),
|
|
11
|
+
description: 'Remove an app, with its consents, tokens, and realms.',
|
|
12
|
+
env: Admin.env,
|
|
13
|
+
// Hidden from MCP clients, as is every `admin apps` command, since the group returns client secrets.
|
|
14
|
+
mcp: false,
|
|
15
|
+
options: Admin.options,
|
|
16
|
+
async run(c) {
|
|
17
|
+
const connectionString = c.options.databaseUrl ?? c.env.DATABASE_URL;
|
|
18
|
+
if (!connectionString)
|
|
19
|
+
return c.error(Admin.missingDatabaseUrl);
|
|
20
|
+
const Apps = await Admin.loadApps();
|
|
21
|
+
if (!Apps)
|
|
22
|
+
return c.error(Admin.missingPeers);
|
|
23
|
+
const client = Apps.connect({ connectionString });
|
|
24
|
+
try {
|
|
25
|
+
const app = await Apps.Apps.remove(client.db, {
|
|
26
|
+
clientId: c.args.clientId,
|
|
27
|
+
});
|
|
28
|
+
return { removed: app.clientId };
|
|
29
|
+
}
|
|
30
|
+
catch (error) {
|
|
31
|
+
const refusal = Apps.error(error);
|
|
32
|
+
if (refusal)
|
|
33
|
+
return c.error(refusal);
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
await client.end();
|
|
38
|
+
}
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=delete.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delete.js","sourceRoot":"","sources":["../../../../../src/cli/commands/admin/apps/delete.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAE1C,eAAe,GAAG,CAAC,OAAO,CAAC;IACzB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;QACb,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wBAAwB,CAAC;KACxD,CAAC;IACF,WAAW,EAAE,uDAAuD;IACpE,GAAG,EAAE,KAAK,CAAC,GAAG;IACd,qGAAqG;IACrG,GAAG,EAAE,KAAK;IACV,OAAO,EAAE,KAAK,CAAC,OAAO;IACtB,KAAK,CAAC,GAAG,CAAC,CAAC;QACT,MAAM,gBAAgB,GAAG,CAAC,CAAC,OAAO,CAAC,WAAW,IAAI,CAAC,CAAC,GAAG,CAAC,YAAY,CAAA;QACpE,IAAI,CAAC,gBAAgB;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;QAE/D,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,CAAA;QACnC,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,YAAY,CAAC,CAAA;QAE7C,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAA;QACjD,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;gBAC5C,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ;aAC1B,CAAC,CAAA;YACF,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAA;QAClC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;YACjC,IAAI,OAAO;gBAAE,OAAO,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;YACpC,MAAM,KAAK,CAAA;QACb,CAAC;gBAAS,CAAC;YACT,MAAM,MAAM,CAAC,GAAG,EAAE,CAAA;QACpB,CAAC;IACH,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/cli/commands/admin/apps/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** `tempo-id admin apps`: the commands that register and change OAuth apps. @module */
|
|
2
|
+
import { Cli } from 'incur';
|
|
3
|
+
export default Cli.command({
|
|
4
|
+
description: 'Manage OAuth apps, their redirect URIs, and their scopes.',
|
|
5
|
+
// Hidden from MCP clients, as is every `admin apps` command, since the group returns client secrets.
|
|
6
|
+
mcp: false,
|
|
7
|
+
run(c) {
|
|
8
|
+
return c.error({
|
|
9
|
+
code: 'missing_command',
|
|
10
|
+
message: 'Missing command. Run `tempo-id admin apps --help` to list the commands.',
|
|
11
|
+
});
|
|
12
|
+
},
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/cli/commands/admin/apps/index.ts"],"names":[],"mappings":"AAAA,uFAAuF;AACvF,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAA;AAE3B,eAAe,GAAG,CAAC,OAAO,CAAC;IACzB,WAAW,EAAE,2DAA2D;IACxE,qGAAqG;IACrG,GAAG,EAAE,KAAK;IACV,GAAG,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,KAAK,CAAC;YACb,IAAI,EAAE,iBAAiB;YACvB,OAAO,EACL,yEAAyE;SAC5E,CAAC,CAAA;IACJ,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** `tempo-id admin apps list`: lists every OAuth app, oldest first. @module */
|
|
2
|
+
import { Cli } from 'incur';
|
|
3
|
+
declare const _default: Cli.FileCommand<undefined, import("zod").ZodObject<{
|
|
4
|
+
DATABASE_URL: import("zod").ZodOptional<import("zod").ZodString>;
|
|
5
|
+
}, import("zod/v4/core").$strip>, import("zod").ZodObject<{
|
|
6
|
+
databaseUrl: import("zod").ZodOptional<import("zod").ZodString>;
|
|
7
|
+
}, import("zod/v4/core").$strip>, undefined>;
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=list.d.ts.map
|