@tempoxyz/id 0.0.0-stage → 0.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (712) hide show
  1. package/README.md +80 -2
  2. package/dist/App.d.ts +20 -0
  3. package/dist/App.d.ts.map +1 -0
  4. package/dist/App.js +26 -0
  5. package/dist/App.js.map +1 -0
  6. package/dist/app/client/.assetsignore +2 -0
  7. package/dist/app/client/assets/BRLA-CZvVDNYr.png +0 -0
  8. package/dist/app/client/assets/CHFAU-DCedc4aH.png +0 -0
  9. package/dist/app/client/assets/DLUSD-BnRXm3EI.png +0 -0
  10. package/dist/app/client/assets/PRIME-CiFp2-3e.svg +14 -0
  11. package/dist/app/client/assets/Pilat-Bold-C1t1eIrF.woff2 +0 -0
  12. package/dist/app/client/assets/Pilat-Book-CbS8ofT8.woff2 +0 -0
  13. package/dist/app/client/assets/Pilat-Demi-CADSbPAt.woff2 +0 -0
  14. package/dist/app/client/assets/Pilat-Regular-Bx8vzE7q.woff2 +0 -0
  15. package/dist/app/client/assets/USD1-COVcO_PB.svg +30 -0
  16. package/dist/app/client/assets/YLDS-CRh8Zw0g.svg +3 -0
  17. package/dist/app/client/assets/ccip-Cq1mMiVl.js +1 -0
  18. package/dist/app/client/assets/frxUSD-n9pTpinR.svg +1 -0
  19. package/dist/app/client/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  20. package/dist/app/client/assets/index-B7YJVP00.css +1 -0
  21. package/dist/app/client/assets/index-UXTxXCLk.js +55 -0
  22. package/dist/app/client/assets/pathUSD-BvaO6ooS.svg +25 -0
  23. package/dist/app/client/assets/reset-co-CHrff.css +1 -0
  24. package/dist/app/client/assets/wYLDS-CaCKDrO-.svg +10 -0
  25. package/dist/app/db/auth.d.ts +3207 -0
  26. package/dist/app/db/auth.d.ts.map +1 -0
  27. package/dist/app/db/auth.js +330 -0
  28. package/dist/app/db/auth.js.map +1 -0
  29. package/dist/app/db/schema.d.ts +932 -0
  30. package/dist/app/db/schema.d.ts.map +1 -0
  31. package/dist/app/db/schema.js +171 -0
  32. package/dist/app/db/schema.js.map +1 -0
  33. package/dist/app/server/.vite/manifest.json +489 -0
  34. package/dist/app/server/assets/BRLA-CZvVDNYr.png +0 -0
  35. package/dist/app/server/assets/CHFAU-DCedc4aH.png +0 -0
  36. package/dist/app/server/assets/DLUSD-BnRXm3EI.png +0 -0
  37. package/dist/app/server/assets/PRIME-CiFp2-3e.svg +14 -0
  38. package/dist/app/server/assets/Pilat-Bold-C1t1eIrF.woff2 +0 -0
  39. package/dist/app/server/assets/Pilat-Book-CbS8ofT8.woff2 +0 -0
  40. package/dist/app/server/assets/Pilat-Demi-CADSbPAt.woff2 +0 -0
  41. package/dist/app/server/assets/Pilat-Regular-Bx8vzE7q.woff2 +0 -0
  42. package/dist/app/server/assets/USD1-COVcO_PB.svg +30 -0
  43. package/dist/app/server/assets/YLDS-CRh8Zw0g.svg +3 -0
  44. package/dist/app/server/assets/_tanstack-start-manifest_v-11GtFGrq.js +1 -0
  45. package/dist/app/server/assets/arktype-aI7TBD0R-D1R3Byo5.js +2 -0
  46. package/dist/app/server/assets/arktype-aI7TBD0R-D1R3Byo5.js.map +1 -0
  47. package/dist/app/server/assets/authorize-C95F-9E1-CbESJKGU.js +31 -0
  48. package/dist/app/server/assets/authorize-C95F-9E1-CbESJKGU.js.map +1 -0
  49. package/dist/app/server/assets/bun-sqlite-dialect-DoOVo4ja-CtyBkVMb.js +2 -0
  50. package/dist/app/server/assets/bun-sqlite-dialect-DoOVo4ja-CtyBkVMb.js.map +1 -0
  51. package/dist/app/server/assets/call-UQamaCKN.js +32 -0
  52. package/dist/app/server/assets/call-UQamaCKN.js.map +1 -0
  53. package/dist/app/server/assets/ccip-CbNKFO4n.js +2 -0
  54. package/dist/app/server/assets/ccip-CbNKFO4n.js.map +1 -0
  55. package/dist/app/server/assets/compiled-query-Ds2NVcFT.js +2 -0
  56. package/dist/app/server/assets/compiled-query-Ds2NVcFT.js.map +1 -0
  57. package/dist/app/server/assets/convert-BIC8n32x.js +2 -0
  58. package/dist/app/server/assets/convert-BIC8n32x.js.map +1 -0
  59. package/dist/app/server/assets/cookie-CS900nSP.css +1 -0
  60. package/dist/app/server/assets/cookie-Cce9CrIP.js +10 -0
  61. package/dist/app/server/assets/cookie-Cce9CrIP.js.map +1 -0
  62. package/dist/app/server/assets/core-B1HCXUmx.js +56 -0
  63. package/dist/app/server/assets/core-B1HCXUmx.js.map +1 -0
  64. package/dist/app/server/assets/d1-sqlite-dialect-m0f01-4z-Cv-csE1u.js +2 -0
  65. package/dist/app/server/assets/d1-sqlite-dialect-m0f01-4z-Cv-csE1u.js.map +1 -0
  66. package/dist/app/server/assets/default-u_dwuiYb-BJJ9PwCi.js +2 -0
  67. package/dist/app/server/assets/default-u_dwuiYb-BJJ9PwCi.js.map +1 -0
  68. package/dist/app/server/assets/dist-BxSwugSY.js +1 -0
  69. package/dist/app/server/assets/dist-CZGFhmQd.js +2 -0
  70. package/dist/app/server/assets/dist-CZGFhmQd.js.map +1 -0
  71. package/dist/app/server/assets/dist-Dg3PQqiW.js +15 -0
  72. package/dist/app/server/assets/dist-Dg3PQqiW.js.map +1 -0
  73. package/dist/app/server/assets/effect-QlVUlMFu-2tSPDT2b.js +2 -0
  74. package/dist/app/server/assets/effect-QlVUlMFu-2tSPDT2b.js.map +1 -0
  75. package/dist/app/server/assets/empty-plugin-adapters-BaGcmrjC.js +2 -0
  76. package/dist/app/server/assets/empty-plugin-adapters-BaGcmrjC.js.map +1 -0
  77. package/dist/app/server/assets/factory-ipHlJXZY.js +5 -0
  78. package/dist/app/server/assets/factory-ipHlJXZY.js.map +1 -0
  79. package/dist/app/server/assets/frxUSD-n9pTpinR.svg +1 -0
  80. package/dist/app/server/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2 +0 -0
  81. package/dist/app/server/assets/get-id-field-B0x109VU.js +6 -0
  82. package/dist/app/server/assets/get-id-field-B0x109VU.js.map +1 -0
  83. package/dist/app/server/assets/index-CLddUTqr-xpSuLpBt.js +2 -0
  84. package/dist/app/server/assets/index-CLddUTqr-xpSuLpBt.js.map +1 -0
  85. package/dist/app/server/assets/index-DZEfthgZ-8Uq5s5Pt.js +2 -0
  86. package/dist/app/server/assets/index-DZEfthgZ-8Uq5s5Pt.js.map +1 -0
  87. package/dist/app/server/assets/kysely-adapter-MkHAI9Jk.js +1 -0
  88. package/dist/app/server/assets/node-sqlite-dialect-BowWLXvK.js +2 -0
  89. package/dist/app/server/assets/node-sqlite-dialect-BowWLXvK.js.map +1 -0
  90. package/dist/app/server/assets/pathUSD-BvaO6ooS.svg +25 -0
  91. package/dist/app/server/assets/reset-co-CHrff.css +1 -0
  92. package/dist/app/server/assets/rolldown-runtime-B0Z9INg1.js +1 -0
  93. package/dist/app/server/assets/router-CcbyBCI4.css +1 -0
  94. package/dist/app/server/assets/router-xjZtEeaI.js +7 -0
  95. package/dist/app/server/assets/router-xjZtEeaI.js.map +1 -0
  96. package/dist/app/server/assets/schema-check-Cf7QOZZD.js +9 -0
  97. package/dist/app/server/assets/schema-check-Cf7QOZZD.js.map +1 -0
  98. package/dist/app/server/assets/schemas-C2lCYmR5.js +2 -0
  99. package/dist/app/server/assets/schemas-C2lCYmR5.js.map +1 -0
  100. package/dist/app/server/assets/secp256k1-buM5g4AL.js +2 -0
  101. package/dist/app/server/assets/secp256k1-buM5g4AL.js.map +1 -0
  102. package/dist/app/server/assets/sqlite-adapter-C_LAV4e3.js +2 -0
  103. package/dist/app/server/assets/sqlite-adapter-C_LAV4e3.js.map +1 -0
  104. package/dist/app/server/assets/sqlite-introspector-DSCAP82F-Crx7Ny14.js +6 -0
  105. package/dist/app/server/assets/sqlite-introspector-DSCAP82F-Crx7Ny14.js.map +1 -0
  106. package/dist/app/server/assets/standard-json-Cg1N07hM.js +2 -0
  107. package/dist/app/server/assets/standard-json-Cg1N07hM.js.map +1 -0
  108. package/dist/app/server/assets/standard-json-DY77efq0.js +2 -0
  109. package/dist/app/server/assets/standard-json-DY77efq0.js.map +1 -0
  110. package/dist/app/server/assets/standard-json-ig2t0wRt.js +2 -0
  111. package/dist/app/server/assets/standard-json-ig2t0wRt.js.map +1 -0
  112. package/dist/app/server/assets/standard-json-t-LNckA6.js +2 -0
  113. package/dist/app/server/assets/standard-json-t-LNckA6.js.map +1 -0
  114. package/dist/app/server/assets/standard-openapi-CONmVRl8.js +2 -0
  115. package/dist/app/server/assets/standard-openapi-CONmVRl8.js.map +1 -0
  116. package/dist/app/server/assets/start-C63VetBp.js +2 -0
  117. package/dist/app/server/assets/start-C63VetBp.js.map +1 -0
  118. package/dist/app/server/assets/sury-CWZTCd75-xt1mWc9f.js +2 -0
  119. package/dist/app/server/assets/sury-CWZTCd75-xt1mWc9f.js.map +1 -0
  120. package/dist/app/server/assets/typebox-Dei93FPO-D_lCVdAz.js +2 -0
  121. package/dist/app/server/assets/typebox-Dei93FPO-D_lCVdAz.js.map +1 -0
  122. package/dist/app/server/assets/utils-C4ZXZIZW.js +2 -0
  123. package/dist/app/server/assets/utils-C4ZXZIZW.js.map +1 -0
  124. package/dist/app/server/assets/valibot--1zFm7rT-NSoY2xTp.js +2 -0
  125. package/dist/app/server/assets/valibot--1zFm7rT-NSoY2xTp.js.map +1 -0
  126. package/dist/app/server/assets/valibot-D_HTw1Gn-CJwWeOUE.js +2 -0
  127. package/dist/app/server/assets/valibot-D_HTw1Gn-CJwWeOUE.js.map +1 -0
  128. package/dist/app/server/assets/wYLDS-CaCKDrO-.svg +10 -0
  129. package/dist/app/server/assets/zod-Bwrt9trS-CV38yPnQ.js +2 -0
  130. package/dist/app/server/assets/zod-Bwrt9trS-CV38yPnQ.js.map +1 -0
  131. package/dist/app/server/assets/zod-DSgpEGAE-BvlnBE2L.js +2 -0
  132. package/dist/app/server/assets/zod-DSgpEGAE-BvlnBE2L.js.map +1 -0
  133. package/dist/app/server/index.js +574 -0
  134. package/dist/app/server/index.js.map +1 -0
  135. package/dist/app/server/wrangler.json +1 -0
  136. package/dist/cli/Admin.d.ts +38 -0
  137. package/dist/cli/Admin.d.ts.map +1 -0
  138. package/dist/cli/Admin.js +62 -0
  139. package/dist/cli/Admin.js.map +1 -0
  140. package/dist/cli/Apps.d.ts +9 -0
  141. package/dist/cli/Apps.d.ts.map +1 -0
  142. package/dist/cli/Apps.js +36 -0
  143. package/dist/cli/Apps.js.map +1 -0
  144. package/dist/cli/Cli.d.ts +14 -0
  145. package/dist/cli/Cli.d.ts.map +1 -0
  146. package/dist/cli/Cli.js +27 -0
  147. package/dist/cli/Cli.js.map +1 -0
  148. package/dist/cli/Project.d.ts +20 -0
  149. package/dist/cli/Project.d.ts.map +1 -0
  150. package/dist/cli/Project.js +88 -0
  151. package/dist/cli/Project.js.map +1 -0
  152. package/dist/cli/Realms.d.ts +24 -0
  153. package/dist/cli/Realms.d.ts.map +1 -0
  154. package/dist/cli/Realms.js +49 -0
  155. package/dist/cli/Realms.js.map +1 -0
  156. package/dist/cli/Session.d.ts +85 -0
  157. package/dist/cli/Session.d.ts.map +1 -0
  158. package/dist/cli/Session.js +178 -0
  159. package/dist/cli/Session.js.map +1 -0
  160. package/dist/cli/User.d.ts +29 -0
  161. package/dist/cli/User.d.ts.map +1 -0
  162. package/dist/cli/User.js +39 -0
  163. package/dist/cli/User.js.map +1 -0
  164. package/dist/cli/V1.d.ts +35 -0
  165. package/dist/cli/V1.d.ts.map +1 -0
  166. package/dist/cli/V1.js +41 -0
  167. package/dist/cli/V1.js.map +1 -0
  168. package/dist/cli/bin.d.ts +3 -0
  169. package/dist/cli/bin.d.ts.map +1 -0
  170. package/dist/cli/bin.js +46 -0
  171. package/dist/cli/bin.js.map +1 -0
  172. package/dist/cli/commands/admin/apps/create.d.ts +23 -0
  173. package/dist/cli/commands/admin/apps/create.d.ts.map +1 -0
  174. package/dist/cli/commands/admin/apps/create.js +89 -0
  175. package/dist/cli/commands/admin/apps/create.js.map +1 -0
  176. package/dist/cli/commands/admin/apps/delete.d.ts +14 -0
  177. package/dist/cli/commands/admin/apps/delete.d.ts.map +1 -0
  178. package/dist/cli/commands/admin/apps/delete.js +41 -0
  179. package/dist/cli/commands/admin/apps/delete.js.map +1 -0
  180. package/dist/cli/commands/admin/apps/index.d.ts +5 -0
  181. package/dist/cli/commands/admin/apps/index.d.ts.map +1 -0
  182. package/dist/cli/commands/admin/apps/index.js +14 -0
  183. package/dist/cli/commands/admin/apps/index.js.map +1 -0
  184. package/dist/cli/commands/admin/apps/list.d.ts +9 -0
  185. package/dist/cli/commands/admin/apps/list.d.ts.map +1 -0
  186. package/dist/cli/commands/admin/apps/list.js +26 -0
  187. package/dist/cli/commands/admin/apps/list.js.map +1 -0
  188. package/dist/cli/commands/admin/apps/rotate-secret.d.ts +16 -0
  189. package/dist/cli/commands/admin/apps/rotate-secret.d.ts.map +1 -0
  190. package/dist/cli/commands/admin/apps/rotate-secret.js +47 -0
  191. package/dist/cli/commands/admin/apps/rotate-secret.js.map +1 -0
  192. package/dist/cli/commands/admin/apps/update.d.ts +20 -0
  193. package/dist/cli/commands/admin/apps/update.d.ts.map +1 -0
  194. package/dist/cli/commands/admin/apps/update.js +76 -0
  195. package/dist/cli/commands/admin/apps/update.js.map +1 -0
  196. package/dist/cli/commands/admin/index.d.ts +5 -0
  197. package/dist/cli/commands/admin/index.d.ts.map +1 -0
  198. package/dist/cli/commands/admin/index.js +13 -0
  199. package/dist/cli/commands/admin/index.js.map +1 -0
  200. package/dist/cli/commands/admin/migrate.d.ts +9 -0
  201. package/dist/cli/commands/admin/migrate.d.ts.map +1 -0
  202. package/dist/cli/commands/admin/migrate.js +17 -0
  203. package/dist/cli/commands/admin/migrate.js.map +1 -0
  204. package/dist/cli/commands/admin/realms/add.d.ts +12 -0
  205. package/dist/cli/commands/admin/realms/add.d.ts.map +1 -0
  206. package/dist/cli/commands/admin/realms/add.js +42 -0
  207. package/dist/cli/commands/admin/realms/add.js.map +1 -0
  208. package/dist/cli/commands/admin/realms/index.d.ts +5 -0
  209. package/dist/cli/commands/admin/realms/index.d.ts.map +1 -0
  210. package/dist/cli/commands/admin/realms/index.js +13 -0
  211. package/dist/cli/commands/admin/realms/index.js.map +1 -0
  212. package/dist/cli/commands/admin/realms/list.d.ts +13 -0
  213. package/dist/cli/commands/admin/realms/list.d.ts.map +1 -0
  214. package/dist/cli/commands/admin/realms/list.js +36 -0
  215. package/dist/cli/commands/admin/realms/list.js.map +1 -0
  216. package/dist/cli/commands/admin/realms/passkeys/index.d.ts +5 -0
  217. package/dist/cli/commands/admin/realms/passkeys/index.d.ts.map +1 -0
  218. package/dist/cli/commands/admin/realms/passkeys/index.js +13 -0
  219. package/dist/cli/commands/admin/realms/passkeys/index.js.map +1 -0
  220. package/dist/cli/commands/admin/realms/passkeys/set.d.ts +16 -0
  221. package/dist/cli/commands/admin/realms/passkeys/set.d.ts.map +1 -0
  222. package/dist/cli/commands/admin/realms/passkeys/set.js +46 -0
  223. package/dist/cli/commands/admin/realms/passkeys/set.js.map +1 -0
  224. package/dist/cli/commands/admin/realms/privy/index.d.ts +5 -0
  225. package/dist/cli/commands/admin/realms/privy/index.d.ts.map +1 -0
  226. package/dist/cli/commands/admin/realms/privy/index.js +13 -0
  227. package/dist/cli/commands/admin/realms/privy/index.js.map +1 -0
  228. package/dist/cli/commands/admin/realms/privy/set.d.ts +18 -0
  229. package/dist/cli/commands/admin/realms/privy/set.d.ts.map +1 -0
  230. package/dist/cli/commands/admin/realms/privy/set.js +66 -0
  231. package/dist/cli/commands/admin/realms/privy/set.js.map +1 -0
  232. package/dist/cli/commands/admin/realms/remove.d.ts +11 -0
  233. package/dist/cli/commands/admin/realms/remove.d.ts.map +1 -0
  234. package/dist/cli/commands/admin/realms/remove.js +35 -0
  235. package/dist/cli/commands/admin/realms/remove.js.map +1 -0
  236. package/dist/cli/commands/admin/realms/secp256k1/disable.d.ts +15 -0
  237. package/dist/cli/commands/admin/realms/secp256k1/disable.d.ts.map +1 -0
  238. package/dist/cli/commands/admin/realms/secp256k1/disable.js +42 -0
  239. package/dist/cli/commands/admin/realms/secp256k1/disable.js.map +1 -0
  240. package/dist/cli/commands/admin/realms/secp256k1/enable.d.ts +15 -0
  241. package/dist/cli/commands/admin/realms/secp256k1/enable.d.ts.map +1 -0
  242. package/dist/cli/commands/admin/realms/secp256k1/enable.js +42 -0
  243. package/dist/cli/commands/admin/realms/secp256k1/enable.js.map +1 -0
  244. package/dist/cli/commands/admin/realms/secp256k1/index.d.ts +9 -0
  245. package/dist/cli/commands/admin/realms/secp256k1/index.d.ts.map +1 -0
  246. package/dist/cli/commands/admin/realms/secp256k1/index.js +17 -0
  247. package/dist/cli/commands/admin/realms/secp256k1/index.js.map +1 -0
  248. package/dist/cli/commands/admin/realms/set.d.ts +16 -0
  249. package/dist/cli/commands/admin/realms/set.d.ts.map +1 -0
  250. package/dist/cli/commands/admin/realms/set.js +46 -0
  251. package/dist/cli/commands/admin/realms/set.js.map +1 -0
  252. package/dist/cli/commands/admin/rotate-key.d.ts +15 -0
  253. package/dist/cli/commands/admin/rotate-key.d.ts.map +1 -0
  254. package/dist/cli/commands/admin/rotate-key.js +46 -0
  255. package/dist/cli/commands/admin/rotate-key.js.map +1 -0
  256. package/dist/cli/commands/init.d.ts +11 -0
  257. package/dist/cli/commands/init.d.ts.map +1 -0
  258. package/dist/cli/commands/init.js +34 -0
  259. package/dist/cli/commands/init.js.map +1 -0
  260. package/dist/cli/commands/login.d.ts +12 -0
  261. package/dist/cli/commands/login.d.ts.map +1 -0
  262. package/dist/cli/commands/login.js +29 -0
  263. package/dist/cli/commands/login.js.map +1 -0
  264. package/dist/cli/commands/logout.d.ts +8 -0
  265. package/dist/cli/commands/logout.d.ts.map +1 -0
  266. package/dist/cli/commands/logout.js +19 -0
  267. package/dist/cli/commands/logout.js.map +1 -0
  268. package/dist/cli/commands/whoami.d.ts +12 -0
  269. package/dist/cli/commands/whoami.d.ts.map +1 -0
  270. package/dist/cli/commands/whoami.js +24 -0
  271. package/dist/cli/commands/whoami.js.map +1 -0
  272. package/dist/client/Actions.d.ts +101 -0
  273. package/dist/client/Actions.d.ts.map +1 -0
  274. package/dist/client/Actions.js +90 -0
  275. package/dist/client/Actions.js.map +1 -0
  276. package/dist/client/Auth.d.ts +161 -0
  277. package/dist/client/Auth.d.ts.map +1 -0
  278. package/dist/client/Auth.js +113 -0
  279. package/dist/client/Auth.js.map +1 -0
  280. package/dist/client/Authorization.d.ts +29 -0
  281. package/dist/client/Authorization.d.ts.map +1 -0
  282. package/dist/client/Authorization.js +12 -0
  283. package/dist/client/Authorization.js.map +1 -0
  284. package/dist/client/Decorator.d.ts +170 -0
  285. package/dist/client/Decorator.d.ts.map +1 -0
  286. package/dist/client/Decorator.js +227 -0
  287. package/dist/client/Decorator.js.map +1 -0
  288. package/dist/client/Key.d.ts +85 -0
  289. package/dist/client/Key.d.ts.map +1 -0
  290. package/dist/client/Key.js +83 -0
  291. package/dist/client/Key.js.map +1 -0
  292. package/dist/client/Pending.d.ts +39 -0
  293. package/dist/client/Pending.d.ts.map +1 -0
  294. package/dist/client/Pending.js +12 -0
  295. package/dist/client/Pending.js.map +1 -0
  296. package/dist/client/Permissions.d.ts +34 -0
  297. package/dist/client/Permissions.d.ts.map +1 -0
  298. package/dist/client/Permissions.js +16 -0
  299. package/dist/client/Permissions.js.map +1 -0
  300. package/dist/client/Provider.d.ts +16 -0
  301. package/dist/client/Provider.d.ts.map +1 -0
  302. package/dist/client/Provider.js +12 -0
  303. package/dist/client/Provider.js.map +1 -0
  304. package/dist/client/Step.d.ts +21 -0
  305. package/dist/client/Step.d.ts.map +1 -0
  306. package/dist/client/Step.js +16 -0
  307. package/dist/client/Step.js.map +1 -0
  308. package/dist/client/Storage.d.ts +27 -0
  309. package/dist/client/Storage.d.ts.map +1 -0
  310. package/dist/client/Storage.js +16 -0
  311. package/dist/client/Storage.js.map +1 -0
  312. package/dist/client/TempoAccount.d.ts +40 -0
  313. package/dist/client/TempoAccount.d.ts.map +1 -0
  314. package/dist/client/TempoAccount.js +16 -0
  315. package/dist/client/TempoAccount.js.map +1 -0
  316. package/dist/client/Tokens.d.ts +25 -0
  317. package/dist/client/Tokens.d.ts.map +1 -0
  318. package/dist/client/Tokens.js +12 -0
  319. package/dist/client/Tokens.js.map +1 -0
  320. package/dist/client/User.d.ts +21 -0
  321. package/dist/client/User.d.ts.map +1 -0
  322. package/dist/client/User.js +12 -0
  323. package/dist/client/User.js.map +1 -0
  324. package/dist/client/actions/account.d.ts +25 -0
  325. package/dist/client/actions/account.d.ts.map +1 -0
  326. package/dist/client/actions/account.js +34 -0
  327. package/dist/client/actions/account.js.map +1 -0
  328. package/dist/client/actions/device.d.ts +53 -0
  329. package/dist/client/actions/device.d.ts.map +1 -0
  330. package/dist/client/actions/device.js +79 -0
  331. package/dist/client/actions/device.js.map +1 -0
  332. package/dist/client/actions/email.d.ts +84 -0
  333. package/dist/client/actions/email.d.ts.map +1 -0
  334. package/dist/client/actions/email.js +63 -0
  335. package/dist/client/actions/email.js.map +1 -0
  336. package/dist/client/actions/oauth.d.ts +115 -0
  337. package/dist/client/actions/oauth.d.ts.map +1 -0
  338. package/dist/client/actions/oauth.js +105 -0
  339. package/dist/client/actions/oauth.js.map +1 -0
  340. package/dist/client/actions/passkey.d.ts +88 -0
  341. package/dist/client/actions/passkey.d.ts.map +1 -0
  342. package/dist/client/actions/passkey.js +60 -0
  343. package/dist/client/actions/passkey.js.map +1 -0
  344. package/dist/client/actions/provider.d.ts +49 -0
  345. package/dist/client/actions/provider.d.ts.map +1 -0
  346. package/dist/client/actions/provider.js +34 -0
  347. package/dist/client/actions/provider.js.map +1 -0
  348. package/dist/client/actions/realm.d.ts +24 -0
  349. package/dist/client/actions/realm.d.ts.map +1 -0
  350. package/dist/client/actions/realm.js +15 -0
  351. package/dist/client/actions/realm.js.map +1 -0
  352. package/dist/client/actions/redirect.d.ts +153 -0
  353. package/dist/client/actions/redirect.d.ts.map +1 -0
  354. package/dist/client/actions/redirect.js +236 -0
  355. package/dist/client/actions/redirect.js.map +1 -0
  356. package/dist/client/internal/accessKey.d.ts +21 -0
  357. package/dist/client/internal/accessKey.d.ts.map +1 -0
  358. package/dist/client/internal/accessKey.js +38 -0
  359. package/dist/client/internal/accessKey.js.map +1 -0
  360. package/dist/client/internal/account.d.ts +14 -0
  361. package/dist/client/internal/account.d.ts.map +1 -0
  362. package/dist/client/internal/account.js +3 -0
  363. package/dist/client/internal/account.js.map +1 -0
  364. package/dist/client/internal/api.d.ts +106 -0
  365. package/dist/client/internal/api.d.ts.map +1 -0
  366. package/dist/client/internal/api.js +129 -0
  367. package/dist/client/internal/api.js.map +1 -0
  368. package/dist/client/internal/headless.d.ts +33 -0
  369. package/dist/client/internal/headless.d.ts.map +1 -0
  370. package/dist/client/internal/headless.js +46 -0
  371. package/dist/client/internal/headless.js.map +1 -0
  372. package/dist/client/internal/indexedDb.d.ts +9 -0
  373. package/dist/client/internal/indexedDb.d.ts.map +1 -0
  374. package/dist/client/internal/indexedDb.js +32 -0
  375. package/dist/client/internal/indexedDb.js.map +1 -0
  376. package/dist/client/internal/request.d.ts +58 -0
  377. package/dist/client/internal/request.d.ts.map +1 -0
  378. package/dist/client/internal/request.js +45 -0
  379. package/dist/client/internal/request.js.map +1 -0
  380. package/dist/client/internal/store.d.ts +12 -0
  381. package/dist/client/internal/store.d.ts.map +1 -0
  382. package/dist/client/internal/store.js +15 -0
  383. package/dist/client/internal/store.js.map +1 -0
  384. package/dist/client.d.ts +20 -0
  385. package/dist/client.d.ts.map +1 -0
  386. package/dist/client.js +20 -0
  387. package/dist/client.js.map +1 -0
  388. package/dist/index.d.ts +7 -0
  389. package/dist/index.d.ts.map +1 -0
  390. package/dist/index.js +7 -0
  391. package/dist/index.js.map +1 -0
  392. package/dist/internal/Apps.d.ts +3051 -0
  393. package/dist/internal/Apps.d.ts.map +1 -0
  394. package/dist/internal/Apps.js +472 -0
  395. package/dist/internal/Apps.js.map +1 -0
  396. package/dist/internal/Auth.d.ts +4058 -0
  397. package/dist/internal/Auth.d.ts.map +1 -0
  398. package/dist/internal/Auth.js +137 -0
  399. package/dist/internal/Auth.js.map +1 -0
  400. package/dist/internal/Authorize.d.ts +532 -0
  401. package/dist/internal/Authorize.d.ts.map +1 -0
  402. package/dist/internal/Authorize.js +326 -0
  403. package/dist/internal/Authorize.js.map +1 -0
  404. package/dist/internal/Device.d.ts +371 -0
  405. package/dist/internal/Device.d.ts.map +1 -0
  406. package/dist/internal/Device.js +271 -0
  407. package/dist/internal/Device.js.map +1 -0
  408. package/dist/internal/Env.d.ts +57 -0
  409. package/dist/internal/Env.d.ts.map +1 -0
  410. package/dist/internal/Env.js +2 -0
  411. package/dist/internal/Env.js.map +1 -0
  412. package/dist/internal/ErrorResponse.d.ts +609 -0
  413. package/dist/internal/ErrorResponse.d.ts.map +1 -0
  414. package/dist/internal/ErrorResponse.js +679 -0
  415. package/dist/internal/ErrorResponse.js.map +1 -0
  416. package/dist/internal/Id.d.ts +10 -0
  417. package/dist/internal/Id.d.ts.map +1 -0
  418. package/dist/internal/Id.js +34 -0
  419. package/dist/internal/Id.js.map +1 -0
  420. package/dist/internal/KeyAuthorization.d.ts +1456 -0
  421. package/dist/internal/KeyAuthorization.d.ts.map +1 -0
  422. package/dist/internal/KeyAuthorization.js +1030 -0
  423. package/dist/internal/KeyAuthorization.js.map +1 -0
  424. package/dist/internal/Limits.d.ts +65 -0
  425. package/dist/internal/Limits.d.ts.map +1 -0
  426. package/dist/internal/Limits.js +35 -0
  427. package/dist/internal/Limits.js.map +1 -0
  428. package/dist/internal/Log.d.ts +49 -0
  429. package/dist/internal/Log.d.ts.map +1 -0
  430. package/dist/internal/Log.js +101 -0
  431. package/dist/internal/Log.js.map +1 -0
  432. package/dist/internal/LogLine.d.ts +33 -0
  433. package/dist/internal/LogLine.d.ts.map +1 -0
  434. package/dist/internal/LogLine.js +56 -0
  435. package/dist/internal/LogLine.js.map +1 -0
  436. package/dist/internal/Migrations.d.ts +19 -0
  437. package/dist/internal/Migrations.d.ts.map +1 -0
  438. package/dist/internal/Migrations.js +57 -0
  439. package/dist/internal/Migrations.js.map +1 -0
  440. package/dist/internal/Owner.d.ts +146 -0
  441. package/dist/internal/Owner.d.ts.map +1 -0
  442. package/dist/internal/Owner.js +65 -0
  443. package/dist/internal/Owner.js.map +1 -0
  444. package/dist/internal/Passkey.d.ts +528 -0
  445. package/dist/internal/Passkey.d.ts.map +1 -0
  446. package/dist/internal/Passkey.js +658 -0
  447. package/dist/internal/Passkey.js.map +1 -0
  448. package/dist/internal/PendingKey.d.ts +49 -0
  449. package/dist/internal/PendingKey.d.ts.map +1 -0
  450. package/dist/internal/PendingKey.js +58 -0
  451. package/dist/internal/PendingKey.js.map +1 -0
  452. package/dist/internal/Privy.d.ts +105 -0
  453. package/dist/internal/Privy.d.ts.map +1 -0
  454. package/dist/internal/Privy.js +224 -0
  455. package/dist/internal/Privy.js.map +1 -0
  456. package/dist/internal/RateLimit.d.ts +190 -0
  457. package/dist/internal/RateLimit.d.ts.map +1 -0
  458. package/dist/internal/RateLimit.js +148 -0
  459. package/dist/internal/RateLimit.js.map +1 -0
  460. package/dist/internal/Realm.d.ts +281 -0
  461. package/dist/internal/Realm.d.ts.map +1 -0
  462. package/dist/internal/Realm.js +477 -0
  463. package/dist/internal/Realm.js.map +1 -0
  464. package/dist/internal/RequestId.d.ts +16 -0
  465. package/dist/internal/RequestId.d.ts.map +1 -0
  466. package/dist/internal/RequestId.js +78 -0
  467. package/dist/internal/RequestId.js.map +1 -0
  468. package/dist/internal/SigningKey.d.ts +115 -0
  469. package/dist/internal/SigningKey.d.ts.map +1 -0
  470. package/dist/internal/SigningKey.js +197 -0
  471. package/dist/internal/SigningKey.js.map +1 -0
  472. package/dist/internal/TestInbox.d.ts +42 -0
  473. package/dist/internal/TestInbox.d.ts.map +1 -0
  474. package/dist/internal/TestInbox.js +20 -0
  475. package/dist/internal/TestInbox.js.map +1 -0
  476. package/dist/internal/Timing.d.ts +51 -0
  477. package/dist/internal/Timing.d.ts.map +1 -0
  478. package/dist/internal/Timing.js +103 -0
  479. package/dist/internal/Timing.js.map +1 -0
  480. package/dist/internal/Validation.d.ts +52 -0
  481. package/dist/internal/Validation.d.ts.map +1 -0
  482. package/dist/internal/Validation.js +22 -0
  483. package/dist/internal/Validation.js.map +1 -0
  484. package/dist/internal/Wallet.d.ts +37 -0
  485. package/dist/internal/Wallet.d.ts.map +1 -0
  486. package/dist/internal/Wallet.js +43 -0
  487. package/dist/internal/Wallet.js.map +1 -0
  488. package/dist/worker.d.ts +12 -0
  489. package/dist/worker.d.ts.map +1 -0
  490. package/dist/worker.js +12 -0
  491. package/dist/worker.js.map +1 -0
  492. package/package.json +79 -3
  493. package/src/Api.ts +151 -0
  494. package/src/App.ts +56 -0
  495. package/src/api/account.ts +311 -0
  496. package/src/api/authenticate.ts +1290 -0
  497. package/src/api/authorize.ts +1030 -0
  498. package/src/api/device.ts +874 -0
  499. package/src/api/health.ts +72 -0
  500. package/src/api/lib/AccountStep.ts +335 -0
  501. package/src/api/lib/Auth.ts +134 -0
  502. package/src/api/lib/Consent.ts +339 -0
  503. package/src/api/lib/Cors.ts +107 -0
  504. package/src/api/lib/Database.ts +10 -0
  505. package/src/api/lib/DeviceRequest.ts +265 -0
  506. package/src/api/lib/FirstAccount.ts +90 -0
  507. package/src/api/lib/KeySigner.ts +393 -0
  508. package/src/api/lib/PasskeyLink.ts +162 -0
  509. package/src/api/lib/Session.ts +34 -0
  510. package/src/api/lib/SignInConsent.ts +316 -0
  511. package/src/api/oauth.ts +1282 -0
  512. package/src/api/provider.ts +441 -0
  513. package/src/app/components/Button.tsx +128 -0
  514. package/src/app/components/CodeInput.tsx +186 -0
  515. package/src/app/components/ErrorMessage.tsx +66 -0
  516. package/src/app/components/Grant.tsx +323 -0
  517. package/src/app/components/Input.tsx +48 -0
  518. package/src/app/components/Tooltip.tsx +45 -0
  519. package/src/app/components/icons/BRLA.png +0 -0
  520. package/src/app/components/icons/BRZ.svg +1 -0
  521. package/src/app/components/icons/CHFAU.png +0 -0
  522. package/src/app/components/icons/DLUSD.png +0 -0
  523. package/src/app/components/icons/EURAU.svg +1 -0
  524. package/src/app/components/icons/EURC.e.svg +1 -0
  525. package/src/app/components/icons/GBPA.svg +4 -0
  526. package/src/app/components/icons/GUSD.svg +1 -0
  527. package/src/app/components/icons/MACH.svg +4 -0
  528. package/src/app/components/icons/OUSD.svg +5 -0
  529. package/src/app/components/icons/PRIME.svg +14 -0
  530. package/src/app/components/icons/SBC.svg +1 -0
  531. package/src/app/components/icons/SEKAU.svg +5 -0
  532. package/src/app/components/icons/USD1.svg +30 -0
  533. package/src/app/components/icons/USDB.svg +11 -0
  534. package/src/app/components/icons/USDC.e.svg +1 -0
  535. package/src/app/components/icons/USDT0.svg +1 -0
  536. package/src/app/components/icons/USDY.svg +16 -0
  537. package/src/app/components/icons/USDe.svg +1 -0
  538. package/src/app/components/icons/YLDS.svg +3 -0
  539. package/src/app/components/icons/alphaUSD.svg +1 -0
  540. package/src/app/components/icons/betaUSD.svg +1 -0
  541. package/src/app/components/icons/cUSD.svg +1 -0
  542. package/src/app/components/icons/cbBTC.svg +1 -0
  543. package/src/app/components/icons/frxUSD.svg +1 -0
  544. package/src/app/components/icons/goUSD.svg +5 -0
  545. package/src/app/components/icons/iUSD.svg +1 -0
  546. package/src/app/components/icons/pathUSD.svg +25 -0
  547. package/src/app/components/icons/rUSD.svg +1 -0
  548. package/src/app/components/icons/reUSD.svg +1 -0
  549. package/src/app/components/icons/sUSDe.svg +1 -0
  550. package/src/app/components/icons/siUSD.svg +1 -0
  551. package/src/app/components/icons/stcUSD.svg +1 -0
  552. package/src/app/components/icons/syrupUSDC.svg +5 -0
  553. package/src/app/components/icons/thetaUSD.svg +1 -0
  554. package/src/app/components/icons/wYLDS.svg +10 -0
  555. package/src/app/components/icons/wsrUSD.svg +1 -0
  556. package/src/app/components/logos/OUSD.dark.svg +17 -0
  557. package/src/app/components/logos/OUSD.light.svg +17 -0
  558. package/src/app/crons/cleanup.ts +42 -0
  559. package/src/app/db/auth.ts +416 -0
  560. package/src/app/db/migrations/0000_better_auth.sql +53 -0
  561. package/src/app/db/migrations/0001_oauth_provider.sql +162 -0
  562. package/src/app/db/migrations/0002_device_code.sql +17 -0
  563. package/src/app/db/migrations/0003_realms.sql +27 -0
  564. package/src/app/db/migrations/0004_default_realm.sql +2 -0
  565. package/src/app/db/migrations/0005_passkeys.sql +30 -0
  566. package/src/app/db/migrations/0006_first_accounts.sql +9 -0
  567. package/src/app/db/migrations/0007_pending_keys.sql +13 -0
  568. package/src/app/db/migrations/0008_secp256k1_owners.sql +18 -0
  569. package/src/app/db/migrations/0009_device_requests.sql +8 -0
  570. package/src/app/db/migrations/0010_device_keys.sql +4 -0
  571. package/src/app/db/migrations/meta/0000_snapshot.json +362 -0
  572. package/src/app/db/migrations/meta/0001_snapshot.json +1487 -0
  573. package/src/app/db/migrations/meta/0002_snapshot.json +1603 -0
  574. package/src/app/db/migrations/meta/0003_snapshot.json +1760 -0
  575. package/src/app/db/migrations/meta/0004_snapshot.json +1760 -0
  576. package/src/app/db/migrations/meta/0005_snapshot.json +1911 -0
  577. package/src/app/db/migrations/meta/0006_snapshot.json +1967 -0
  578. package/src/app/db/migrations/meta/0007_snapshot.json +2047 -0
  579. package/src/app/db/migrations/meta/0008_snapshot.json +2157 -0
  580. package/src/app/db/migrations/meta/0009_snapshot.json +2207 -0
  581. package/src/app/db/migrations/meta/0010_snapshot.json +2231 -0
  582. package/src/app/db/migrations/meta/_journal.json +83 -0
  583. package/src/app/db/schema.ts +218 -0
  584. package/src/app/env.ts +49 -0
  585. package/src/app/lib/Client.ts +82 -0
  586. package/src/app/lib/Loader.ts +24 -0
  587. package/src/app/package.json +8 -0
  588. package/src/app/routeTree.gen.ts +198 -0
  589. package/src/app/router.tsx +48 -0
  590. package/src/app/routes/[_].flows.tsx +3001 -0
  591. package/src/app/routes/__root.tsx +91 -0
  592. package/src/app/routes/authorize.tsx +197 -0
  593. package/src/app/routes/choose-account.tsx +111 -0
  594. package/src/app/routes/deposit.tsx +105 -0
  595. package/src/app/routes/device.tsx +227 -0
  596. package/src/app/routes/index.tsx +115 -0
  597. package/src/app/routes/login.tsx +506 -0
  598. package/src/app/screens/Account.tsx +347 -0
  599. package/src/app/screens/Approval.tsx +276 -0
  600. package/src/app/screens/ChooseAccount.tsx +240 -0
  601. package/src/app/screens/Deposit.tsx +762 -0
  602. package/src/app/screens/DeviceApproval.tsx +480 -0
  603. package/src/app/screens/SignIn.tsx +362 -0
  604. package/src/app/screens/chains/base.svg +3 -0
  605. package/src/app/screens/chains/ethereum.svg +11 -0
  606. package/src/app/screens/chains/solana.svg +4 -0
  607. package/src/app/screens/chains/tempo.svg +4 -0
  608. package/src/app/server.ts +204 -0
  609. package/src/app/vite.config.ts +95 -0
  610. package/src/app/void.config.ts +29 -0
  611. package/src/app/zyzz.config.ts +274 -0
  612. package/src/cli/Admin.ts +73 -0
  613. package/src/cli/Apps.ts +29 -0
  614. package/src/cli/Cli.ts +42 -0
  615. package/src/cli/Project.ts +117 -0
  616. package/src/cli/Realms.ts +50 -0
  617. package/src/cli/Session.ts +239 -0
  618. package/src/cli/User.ts +45 -0
  619. package/src/cli/V1.ts +57 -0
  620. package/src/cli/bin.ts +44 -0
  621. package/src/cli/commands/admin/apps/create.ts +101 -0
  622. package/src/cli/commands/admin/apps/delete.ts +38 -0
  623. package/src/cli/commands/admin/apps/index.ts +15 -0
  624. package/src/cli/commands/admin/apps/list.ts +25 -0
  625. package/src/cli/commands/admin/apps/rotate-secret.ts +47 -0
  626. package/src/cli/commands/admin/apps/update.ts +86 -0
  627. package/src/cli/commands/admin/index.ts +14 -0
  628. package/src/cli/commands/admin/migrate.ts +16 -0
  629. package/src/cli/commands/admin/realms/add.ts +40 -0
  630. package/src/cli/commands/admin/realms/index.ts +14 -0
  631. package/src/cli/commands/admin/realms/list.ts +38 -0
  632. package/src/cli/commands/admin/realms/passkeys/index.ts +15 -0
  633. package/src/cli/commands/admin/realms/passkeys/set.ts +44 -0
  634. package/src/cli/commands/admin/realms/privy/index.ts +14 -0
  635. package/src/cli/commands/admin/realms/privy/set.ts +69 -0
  636. package/src/cli/commands/admin/realms/remove.ts +33 -0
  637. package/src/cli/commands/admin/realms/secp256k1/disable.ts +40 -0
  638. package/src/cli/commands/admin/realms/secp256k1/enable.ts +40 -0
  639. package/src/cli/commands/admin/realms/secp256k1/index.ts +19 -0
  640. package/src/cli/commands/admin/realms/set.ts +46 -0
  641. package/src/cli/commands/admin/rotate-key.ts +47 -0
  642. package/src/cli/commands/init.ts +42 -0
  643. package/src/cli/commands/login.ts +32 -0
  644. package/src/cli/commands/logout.ts +19 -0
  645. package/src/cli/commands/whoami.ts +23 -0
  646. package/src/client/Actions.ts +168 -0
  647. package/src/client/Auth.ts +285 -0
  648. package/src/client/Authorization.ts +34 -0
  649. package/src/client/Decorator.ts +410 -0
  650. package/src/client/Key.ts +140 -0
  651. package/src/client/Pending.ts +46 -0
  652. package/src/client/Permissions.ts +39 -0
  653. package/src/client/Provider.ts +18 -0
  654. package/src/client/Step.ts +24 -0
  655. package/src/client/Storage.ts +29 -0
  656. package/src/client/TempoAccount.ts +42 -0
  657. package/src/client/Tokens.ts +27 -0
  658. package/src/client/User.ts +23 -0
  659. package/src/client/actions/account.ts +57 -0
  660. package/src/client/actions/device.ts +151 -0
  661. package/src/client/actions/email.ts +141 -0
  662. package/src/client/actions/oauth.ts +182 -0
  663. package/src/client/actions/passkey.ts +141 -0
  664. package/src/client/actions/provider.ts +70 -0
  665. package/src/client/actions/realm.ts +36 -0
  666. package/src/client/actions/redirect.ts +408 -0
  667. package/src/client/internal/accessKey.ts +54 -0
  668. package/src/client/internal/account.ts +15 -0
  669. package/src/client/internal/api.ts +224 -0
  670. package/src/client/internal/headless.ts +77 -0
  671. package/src/client/internal/indexedDb.ts +44 -0
  672. package/src/client/internal/request.ts +71 -0
  673. package/src/client/internal/store.ts +20 -0
  674. package/src/client.ts +19 -0
  675. package/src/index.ts +6 -0
  676. package/src/internal/Apps.ts +718 -0
  677. package/src/internal/Auth.ts +203 -0
  678. package/src/internal/Authorize.ts +424 -0
  679. package/src/internal/Balance.ts +168 -0
  680. package/src/internal/BodyLimit.ts +36 -0
  681. package/src/internal/Chain.ts +16 -0
  682. package/src/internal/Device.ts +469 -0
  683. package/src/internal/Env.ts +58 -0
  684. package/src/internal/ErrorResponse.ts +854 -0
  685. package/src/internal/Id.ts +41 -0
  686. package/src/internal/KeyAuthorization.ts +1339 -0
  687. package/src/internal/Limits.ts +39 -0
  688. package/src/internal/Log.ts +178 -0
  689. package/src/internal/LogLine.ts +87 -0
  690. package/src/internal/Logout.ts +336 -0
  691. package/src/internal/Migrations.ts +86 -0
  692. package/src/internal/OpenApi.ts +300 -0
  693. package/src/internal/Owner.ts +211 -0
  694. package/src/internal/Passkey.ts +1052 -0
  695. package/src/internal/PendingKey.ts +104 -0
  696. package/src/internal/Privy.ts +402 -0
  697. package/src/internal/Provider.ts +125 -0
  698. package/src/internal/RateLimit.ts +259 -0
  699. package/src/internal/Realm.ts +768 -0
  700. package/src/internal/RequestId.ts +118 -0
  701. package/src/internal/SignInGrant.ts +168 -0
  702. package/src/internal/SigningKey.ts +286 -0
  703. package/src/internal/TempoAccount.ts +342 -0
  704. package/src/internal/TestInbox.ts +51 -0
  705. package/src/internal/Timing.ts +158 -0
  706. package/src/internal/Validation.ts +52 -0
  707. package/src/internal/Wallet.ts +62 -0
  708. package/src/internal/owners/Passkey.ts +72 -0
  709. package/src/internal/owners/Privy.ts +81 -0
  710. package/src/internal/owners/Secp256k1.ts +143 -0
  711. package/src/types/app.d.ts +19 -0
  712. package/src/worker.ts +11 -0
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Signs the user in with a code emailed to them, from the app's own sign-in form.
3
+ * @module
4
+ */
5
+ import { Authentication } from 'ox/webauthn';
6
+ import type { Account } from 'viem/tempo';
7
+ import { type Auth } from '../Auth.js';
8
+ import type { Authorization } from '../Authorization.js';
9
+ import type { Permissions } from '../Permissions.js';
10
+ /**
11
+ * Emails the user a sign-in code. The response is the same for every address.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * await Actions.email.sendCode(auth, { email: 'user@example.com' })
16
+ * ```
17
+ */
18
+ export declare function sendCode(auth: Auth, options: sendCode.Options): Promise<void>;
19
+ export declare namespace sendCode {
20
+ type Options = {
21
+ /** The user's email address. */
22
+ email: string;
23
+ };
24
+ }
25
+ /**
26
+ * Signs the user in with the code they were emailed, then authorizes the app for the signed-in user.
27
+ * Only a first-party app authorizes this way. A sign-in with a key creates the user's first Tempo
28
+ * Account with `POST /v1/account`, then sends `POST /v1/authorize`. The key acts for the account
29
+ * `accessKey` names, or the app's selected account, or the user's oldest. With `key: false`, the
30
+ * call returns the tokens and the user alone.
31
+ *
32
+ * A refusal after the code verified throws a `RequestError` whose `signedIn` is `true`, since the
33
+ * user is signed in. A passkey-owned account throws `webauthn_required`, and
34
+ * `Actions.redirect.start` then authorizes the key on Tempo ID's pages.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * const authorization = await Actions.email.signIn(auth, { code, email })
39
+ * ```
40
+ */
41
+ export declare function signIn<const chainId extends number = number, const key extends boolean = true>(auth: Auth, options: signIn.Options<chainId, key>): Promise<signIn.ReturnType<chainId, key>>;
42
+ export declare namespace signIn {
43
+ type Options<chainId extends number = number, key extends boolean = true> = {
44
+ /**
45
+ * The key to authorize, as a Viem account. Its `access` names the Tempo Account, which
46
+ * defaults to the one the app selected, or the user's oldest. Defaults to a new key.
47
+ */
48
+ accessKey?: Account.Account | undefined;
49
+ /**
50
+ * A message the owner's signature binds, such as a sign-in challenge the app's backend issued.
51
+ * Tempo ID binds its EIP-191 hash as the key authorization's `witness`. Only an app with the
52
+ * `tempo-id:sign` scope may send one, and only with a key.
53
+ */
54
+ challenge?: ([key] extends [false] ? never : string) | undefined;
55
+ /** The 6-digit code the user was emailed. */
56
+ code: string;
57
+ /** The address the code was sent to. */
58
+ email: string;
59
+ /**
60
+ * Runs the WebAuthn ceremony of the passkey that `link` names in place of
61
+ * `navigator.credentials.get`, as for `Actions.passkey.signIn`. Unused without `link`.
62
+ */
63
+ getFn?: Authentication.sign.Options['getFn'] | undefined;
64
+ /**
65
+ * The `link` from `Actions.passkey.signIn`'s email step, which links that wallet.tempo passkey
66
+ * to the user. The call first runs a ceremony of that passkey, whose assertion Tempo ID requires
67
+ * with the link.
68
+ */
69
+ link?: string | undefined;
70
+ /**
71
+ * Whether the sign-in authorizes an access key. With `false`, the call creates no Tempo
72
+ * Account, and returns the tokens and the user alone. Defaults to `true`.
73
+ */
74
+ key?: key | undefined;
75
+ /** What the key may do. It must fit the headless ceiling, which fills what it leaves out. */
76
+ permissions?: Permissions<chainId> | undefined;
77
+ };
78
+ /**
79
+ * The authorization, or the tokens and the user alone with `key: false`. A `boolean` `key`
80
+ * returns either.
81
+ */
82
+ type ReturnType<chainId extends number = number, key extends boolean = true> = key extends false ? Omit<Authorization<chainId>, 'account' | 'key'> : Authorization<chainId>;
83
+ }
84
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../src/client/actions/email.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAc,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,KAAK,IAAI,EAA4B,MAAM,YAAY,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD;;;;;;;GAOG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,CAAC,OAAO,GACxB,OAAO,CAAC,IAAI,CAAC,CAEf;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,OAAO,GAAG;QACb,gCAAgC;QAChC,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,MAAM,CAC1B,KAAK,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrC,KAAK,CAAC,GAAG,SAAS,OAAO,GAAG,IAAI,EAEhC,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,GACpC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAmC1C;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,OAAO,GAAG,IAAI,IAAI;QAC1E;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAAA;QACvC;;;;WAIG;QACH,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,SAAS,CAAA;QAChE,6CAA6C;QAC7C,IAAI,EAAE,MAAM,CAAA;QACZ,wCAAwC;QACxC,KAAK,EAAE,MAAM,CAAA;QACb;;;WAGG;QACH,KAAK,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;QACxD;;;;WAIG;QACH,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB;;;WAGG;QACH,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;QACrB,6FAA6F;QAC7F,WAAW,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;KAC/C,CAAA;IAED;;;OAGG;IACH,KAAK,UAAU,CACb,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,GAAG,SAAS,OAAO,GAAG,IAAI,IACxB,GAAG,SAAS,KAAK,GACjB,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,GAC/C,aAAa,CAAC,OAAO,CAAC,CAAA;CAC3B"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Signs the user in with a code emailed to them, from the app's own sign-in form.
3
+ * @module
4
+ */
5
+ import { Authentication } from 'ox/webauthn';
6
+ import { ChallengeWithoutKeyError } from '../Auth.js';
7
+ import * as Api from '../internal/api.js';
8
+ import * as Headless from '../internal/headless.js';
9
+ /**
10
+ * Emails the user a sign-in code. The response is the same for every address.
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * await Actions.email.sendCode(auth, { email: 'user@example.com' })
15
+ * ```
16
+ */
17
+ export async function sendCode(auth, options) {
18
+ await Api.json(await Api.post(auth, '/v1/auth/code', { json: options }));
19
+ }
20
+ /**
21
+ * Signs the user in with the code they were emailed, then authorizes the app for the signed-in user.
22
+ * Only a first-party app authorizes this way. A sign-in with a key creates the user's first Tempo
23
+ * Account with `POST /v1/account`, then sends `POST /v1/authorize`. The key acts for the account
24
+ * `accessKey` names, or the app's selected account, or the user's oldest. With `key: false`, the
25
+ * call returns the tokens and the user alone.
26
+ *
27
+ * A refusal after the code verified throws a `RequestError` whose `signedIn` is `true`, since the
28
+ * user is signed in. A passkey-owned account throws `webauthn_required`, and
29
+ * `Actions.redirect.start` then authorizes the key on Tempo ID's pages.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * const authorization = await Actions.email.signIn(auth, { code, email })
34
+ * ```
35
+ */
36
+ export async function signIn(auth, options) {
37
+ const { code, email, getFn, link } = options;
38
+ // A challenge rides in the key, so a sign-in without one refuses it before it signs in.
39
+ if (options.key === false && options.challenge !== undefined)
40
+ throw new ChallengeWithoutKeyError();
41
+ // The link's passkey signs again, so a page left at the email step links nothing for the next
42
+ // person, who cannot sign with it.
43
+ const assertion = await (async () => {
44
+ if (!link)
45
+ return undefined;
46
+ const requested = await Api.json(await Api.post(auth, '/v1/auth/passkey/options', {
47
+ json: { client_id: auth.clientId, link },
48
+ }));
49
+ const deserialized = Authentication.deserializeOptions(requested.options);
50
+ return Authentication.serializeResponse(await Authentication.sign(
51
+ // ox reads `getFn` beside request options at runtime, which its types admit only beside a challenge.
52
+ getFn ? { ...deserialized, getFn } : deserialized));
53
+ })();
54
+ const { user } = await Api.json(await Api.post(auth, '/v1/auth/code/verify', {
55
+ json: { code, email, ...(link ? { assertion, link } : {}) },
56
+ }));
57
+ // `key` decides both the type and the runtime value of the result.
58
+ return (await Headless.authorize(auth, {
59
+ ...options,
60
+ userId: user.id,
61
+ }));
62
+ }
63
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../../src/client/actions/email.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,cAAc,EAAc,MAAM,aAAa,CAAA;AAExD,OAAO,EAAa,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AAGnD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAU,EACV,OAAyB;IAEzB,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;AAC1E,CAAC;AASD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAI1B,IAAU,EACV,OAAqC;IAErC,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAA;IAC5C,wFAAwF;IACxF,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAC1D,MAAM,IAAI,wBAAwB,EAAE,CAAA;IACtC,8FAA8F;IAC9F,mCAAmC;IACnC,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QAClC,IAAI,CAAC,IAAI;YAAE,OAAO,SAAS,CAAA;QAC3B,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,CAG9B,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,0BAA0B,EAAE;YAC/C,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE;SACzC,CAAC,CACH,CAAA;QACD,MAAM,YAAY,GAAG,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;QACzE,OAAO,cAAc,CAAC,iBAAiB,CACrC,MAAM,cAAc,CAAC,IAAI;QACvB,qGAAqG;QACrG,KAAK,CAAC,CAAC,CAAE,EAAE,GAAG,YAAY,EAAE,KAAK,EAAY,CAAC,CAAC,CAAC,YAAY,CAC7D,CACF,CAAA;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAC7B,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,sBAAsB,EAAE;QAC3C,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;KAC5D,CAAC,CACH,CAAA;IAED,mEAAmE;IACnE,OAAO,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;QACrC,GAAG,OAAO;QACV,MAAM,EAAE,IAAI,CAAC,EAAE;KAChB,CAAC,CAAoC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Calls Tempo ID's standard OAuth endpoints for tokens an app already holds: introspection, the
3
+ * user's claims, and the signing keys that verify every token.
4
+ * @module
5
+ */
6
+ import type { Auth } from '../Auth.js';
7
+ import type { User } from '../User.js';
8
+ /**
9
+ * Checks whether a token is still active at the issuer (RFC 7662). An API verifies access tokens
10
+ * locally against {@link jwks}, and calls this only where a revoked session must stop working at
11
+ * once. The instance's client secret authenticates the request, so only a backend calls it.
12
+ *
13
+ * @example
14
+ * ```ts
15
+ * const result = await Actions.oauth.introspect(auth, { token: accessToken })
16
+ * if (!result.active) return c.json({ error: 'Sign in again.' }, 401)
17
+ * ```
18
+ */
19
+ export declare function introspect(auth: Auth, options: introspect.Options): Promise<introspect.ReturnType>;
20
+ export declare namespace introspect {
21
+ type Options = {
22
+ /** The access token or refresh token to check. */
23
+ token: string;
24
+ /** The kind of token, which speeds up the issuer's lookup. */
25
+ tokenTypeHint?: 'access_token' | 'refresh_token' | undefined;
26
+ };
27
+ /** Whether the token is active, and the issuer's claims about an active one. */
28
+ type ReturnType = {
29
+ /** The token is expired, revoked, or was never issued. */
30
+ active: false;
31
+ } | {
32
+ /** The token is active. */
33
+ active: true;
34
+ /** The app the token was issued to. */
35
+ clientId: string | undefined;
36
+ /** When the token expires, in milliseconds. */
37
+ expiresAt: number | undefined;
38
+ /** When the token was issued, in milliseconds. */
39
+ issuedAt: number | undefined;
40
+ /** The scopes the token carries, space-separated. */
41
+ scope: string | undefined;
42
+ /** The user the token names, the `sub` of every token. */
43
+ userId: string | undefined;
44
+ };
45
+ }
46
+ /**
47
+ * Returns the issuer's JSON Web Key Set, whose keys verify every Tempo ID token. An API passes Tempo
48
+ * ID's `/oauth2/jwks` URL to a JWT library that caches the set and fetches it again for an unknown
49
+ * `kid`, such as jose's `createRemoteJWKSet`. An API that caches the set itself also fetches it again
50
+ * for an unknown `kid`, at most once in a cooldown, since a key rotation signs new tokens with a new
51
+ * key.
52
+ *
53
+ * @example
54
+ * ```ts
55
+ * import { createLocalJWKSet, errors, jwtVerify } from 'jose'
56
+ *
57
+ * let keys = createLocalJWKSet(await Actions.oauth.jwks(auth))
58
+ * let fetchedAt = Date.now()
59
+ * let refetch: Promise<void> | undefined
60
+ *
61
+ * async function verify(accessToken: string) {
62
+ * try {
63
+ * return await jwtVerify(accessToken, keys, { audience, issuer })
64
+ * } catch (error) {
65
+ * if (!(error instanceof errors.JWKSNoMatchingKey)) throw error
66
+ * // A rotation adds a key. Concurrent failures share one fetch, and the cooldown bounds the
67
+ * // fetches that forged `kid` values cause.
68
+ * if (!refetch) {
69
+ * if (Date.now() - fetchedAt < 30_000) throw error
70
+ * fetchedAt = Date.now()
71
+ * refetch = Actions.oauth
72
+ * .jwks(auth)
73
+ * .then((set) => {
74
+ * keys = createLocalJWKSet(set)
75
+ * })
76
+ * .finally(() => {
77
+ * refetch = undefined
78
+ * })
79
+ * }
80
+ * await refetch
81
+ * return await jwtVerify(accessToken, keys, { audience, issuer })
82
+ * }
83
+ * }
84
+ *
85
+ * const { payload } = await verify(accessToken)
86
+ * // Every app's token carries the same audience, so an API also allows each app by `client_id`.
87
+ * if (!allowedClientIds.includes(String(payload.client_id))) throw forbidden()
88
+ * ```
89
+ */
90
+ export declare function jwks(auth: Auth): Promise<jwks.ReturnType>;
91
+ export declare namespace jwks {
92
+ /** The key set, in RFC 7517's format, which JWT libraries read as is. */
93
+ type ReturnType = {
94
+ /** The issuer's signing keys. */
95
+ keys: JsonWebKey[];
96
+ };
97
+ }
98
+ /**
99
+ * Returns the user an access token names, from the issuer's UserInfo endpoint (OIDC Core §5.3).
100
+ * Access tokens carry no email, so an API that needs it calls this once per user.
101
+ *
102
+ * @example
103
+ * ```ts
104
+ * const user = await Actions.oauth.userInfo(auth, { accessToken })
105
+ * // { email: 'user@example.com', id: 'user_…' }
106
+ * ```
107
+ */
108
+ export declare function userInfo(auth: Auth, options: userInfo.Options): Promise<User>;
109
+ export declare namespace userInfo {
110
+ type Options = {
111
+ /** The access token, from any sign-in or refresh. */
112
+ accessToken: string;
113
+ };
114
+ }
115
+ //# sourceMappingURL=oauth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.d.ts","sourceRoot":"","sources":["../../../src/client/actions/oauth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,CAAC,OAAO,GAC1B,OAAO,CAAC,UAAU,CAAC,UAAU,CAAC,CA8BhC;AAED,MAAM,CAAC,OAAO,WAAW,UAAU,CAAC;IAClC,KAAK,OAAO,GAAG;QACb,kDAAkD;QAClD,KAAK,EAAE,MAAM,CAAA;QACb,8DAA8D;QAC9D,aAAa,CAAC,EAAE,cAAc,GAAG,eAAe,GAAG,SAAS,CAAA;KAC7D,CAAA;IAED,gFAAgF;IAChF,KAAK,UAAU,GACX;QACE,0DAA0D;QAC1D,MAAM,EAAE,KAAK,CAAA;KACd,GACD;QACE,2BAA2B;QAC3B,MAAM,EAAE,IAAI,CAAA;QACZ,uCAAuC;QACvC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,+CAA+C;QAC/C,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;QAC7B,kDAAkD;QAClD,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;QAC5B,qDAAqD;QACrD,KAAK,EAAE,MAAM,GAAG,SAAS,CAAA;QACzB,0DAA0D;QAC1D,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;KAC3B,CAAA;CACN;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAI/D;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,yEAAyE;IACzE,KAAK,UAAU,GAAG;QAChB,iCAAiC;QACjC,IAAI,EAAE,UAAU,EAAE,CAAA;KACnB,CAAA;CACF;AAED;;;;;;;;;GASG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,QAAQ,CAAC,OAAO,GACxB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,OAAO,GAAG;QACb,qDAAqD;QACrD,WAAW,EAAE,MAAM,CAAA;KACpB,CAAA;CACF"}
@@ -0,0 +1,105 @@
1
+ import * as Api from '../internal/api.js';
2
+ /**
3
+ * Checks whether a token is still active at the issuer (RFC 7662). An API verifies access tokens
4
+ * locally against {@link jwks}, and calls this only where a revoked session must stop working at
5
+ * once. The instance's client secret authenticates the request, so only a backend calls it.
6
+ *
7
+ * @example
8
+ * ```ts
9
+ * const result = await Actions.oauth.introspect(auth, { token: accessToken })
10
+ * if (!result.active) return c.json({ error: 'Sign in again.' }, 401)
11
+ * ```
12
+ */
13
+ export async function introspect(auth, options) {
14
+ const { token, tokenTypeHint } = options;
15
+ const body = await Api.json(await (auth.fetch ?? fetch)(new URL('/oauth2/introspect', auth.url), {
16
+ body: new URLSearchParams({
17
+ client_id: auth.clientId,
18
+ ...(auth.clientSecret ? { client_secret: auth.clientSecret } : {}),
19
+ token,
20
+ ...(tokenTypeHint ? { token_type_hint: tokenTypeHint } : {}),
21
+ }),
22
+ method: 'POST',
23
+ }));
24
+ // An inactive token carries no other members (RFC 7662 §2.2).
25
+ if (!body.active)
26
+ return { active: false };
27
+ return {
28
+ active: true,
29
+ clientId: body.client_id,
30
+ expiresAt: body.exp === undefined ? undefined : body.exp * 1000,
31
+ issuedAt: body.iat === undefined ? undefined : body.iat * 1000,
32
+ scope: body.scope,
33
+ userId: body.sub,
34
+ };
35
+ }
36
+ /**
37
+ * Returns the issuer's JSON Web Key Set, whose keys verify every Tempo ID token. An API passes Tempo
38
+ * ID's `/oauth2/jwks` URL to a JWT library that caches the set and fetches it again for an unknown
39
+ * `kid`, such as jose's `createRemoteJWKSet`. An API that caches the set itself also fetches it again
40
+ * for an unknown `kid`, at most once in a cooldown, since a key rotation signs new tokens with a new
41
+ * key.
42
+ *
43
+ * @example
44
+ * ```ts
45
+ * import { createLocalJWKSet, errors, jwtVerify } from 'jose'
46
+ *
47
+ * let keys = createLocalJWKSet(await Actions.oauth.jwks(auth))
48
+ * let fetchedAt = Date.now()
49
+ * let refetch: Promise<void> | undefined
50
+ *
51
+ * async function verify(accessToken: string) {
52
+ * try {
53
+ * return await jwtVerify(accessToken, keys, { audience, issuer })
54
+ * } catch (error) {
55
+ * if (!(error instanceof errors.JWKSNoMatchingKey)) throw error
56
+ * // A rotation adds a key. Concurrent failures share one fetch, and the cooldown bounds the
57
+ * // fetches that forged `kid` values cause.
58
+ * if (!refetch) {
59
+ * if (Date.now() - fetchedAt < 30_000) throw error
60
+ * fetchedAt = Date.now()
61
+ * refetch = Actions.oauth
62
+ * .jwks(auth)
63
+ * .then((set) => {
64
+ * keys = createLocalJWKSet(set)
65
+ * })
66
+ * .finally(() => {
67
+ * refetch = undefined
68
+ * })
69
+ * }
70
+ * await refetch
71
+ * return await jwtVerify(accessToken, keys, { audience, issuer })
72
+ * }
73
+ * }
74
+ *
75
+ * const { payload } = await verify(accessToken)
76
+ * // Every app's token carries the same audience, so an API also allows each app by `client_id`.
77
+ * if (!allowedClientIds.includes(String(payload.client_id))) throw forbidden()
78
+ * ```
79
+ */
80
+ export async function jwks(auth) {
81
+ return Api.json(await (auth.fetch ?? fetch)(new URL('/oauth2/jwks', auth.url)));
82
+ }
83
+ /**
84
+ * Returns the user an access token names, from the issuer's UserInfo endpoint (OIDC Core §5.3).
85
+ * Access tokens carry no email, so an API that needs it calls this once per user.
86
+ *
87
+ * @example
88
+ * ```ts
89
+ * const user = await Actions.oauth.userInfo(auth, { accessToken })
90
+ * // { email: 'user@example.com', id: 'user_…' }
91
+ * ```
92
+ */
93
+ export async function userInfo(auth, options) {
94
+ const response = await (auth.fetch ?? fetch)(new URL('/oauth2/userinfo', auth.url), { headers: { authorization: `Bearer ${options.accessToken}` } });
95
+ // RFC 6750 §3 names a rejected bearer token `invalid_token`. The issuer's 401 body uses its own
96
+ // code, or none, so the refusal always carries the standard one.
97
+ if (response.status === 401)
98
+ throw Api.error({
99
+ error: 'invalid_token',
100
+ error_description: 'Invalid or expired access token. Refresh the tokens, or sign in again.',
101
+ }, { status: 401 });
102
+ const claims = await Api.json(response);
103
+ return { email: claims.email, id: claims.sub };
104
+ }
105
+ //# sourceMappingURL=oauth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"oauth.js","sourceRoot":"","sources":["../../../src/client/actions/oauth.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AAGzC;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,IAAU,EACV,OAA2B;IAE3B,MAAM,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,OAAO,CAAA;IACxC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAQzB,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAAC,EAAE;QACnE,IAAI,EAAE,IAAI,eAAe,CAAC;YACxB,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAClE,KAAK;YACL,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7D,CAAC;QACF,MAAM,EAAE,MAAM;KACf,CAAC,CACH,CAAA;IACD,8DAA8D;IAC9D,IAAI,CAAC,IAAI,CAAC,MAAM;QAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,CAAA;IAC1C,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,QAAQ,EAAE,IAAI,CAAC,SAAS;QACxB,SAAS,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI;QAC/D,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,GAAG,IAAI;QAC9D,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,GAAG;KACjB,CAAA;AACH,CAAC;AAgCD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2CG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,OAAO,GAAG,CAAC,IAAI,CACb,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,cAAc,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAC/D,CAAA;AACH,CAAC;AAUD;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAC5B,IAAU,EACV,OAAyB;IAEzB,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAC1C,IAAI,GAAG,CAAC,kBAAkB,EAAE,IAAI,CAAC,GAAG,CAAC,EACrC,EAAE,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,WAAW,EAAE,EAAE,EAAE,CAChE,CAAA;IACD,gGAAgG;IAChG,iEAAiE;IACjE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;QACzB,MAAM,GAAG,CAAC,KAAK,CACb;YACE,KAAK,EAAE,eAAe;YACtB,iBAAiB,EACf,wEAAwE;SAC3E,EACD,EAAE,MAAM,EAAE,GAAG,EAAE,CAChB,CAAA;IACH,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,IAAI,CAAiC,QAAQ,CAAC,CAAA;IACvE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,EAAE,CAAA;AAChD,CAAC"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Signs the user in with a passkey from the app's own sign-in form, and authorizes the app's key.
3
+ * By default the browser offers every passkey it holds for the relying party of the app's realms,
4
+ * so the app needs no email first. A non-empty `credentialId` narrows that to the passkeys it names.
5
+ * @module
6
+ */
7
+ import { Authentication } from 'ox/webauthn';
8
+ import type { Account } from 'viem/tempo';
9
+ import { type Auth } from '../Auth.js';
10
+ import type { Authorization } from '../Authorization.js';
11
+ import type { Permissions } from '../Permissions.js';
12
+ /**
13
+ * Signs the user in with a passkey, then authorizes the app for the signed-in user, as
14
+ * `Actions.email.signIn` does. Only a first-party app authorizes this way. The page's origin must
15
+ * be the origin of one of the app's redirect URIs, and the relying party of the app's realms must
16
+ * cover it, or the call throws `passkey_not_permitted`. A sign-in with a key
17
+ * creates the user's first Tempo Account with `POST /v1/account`, then sends `POST /v1/authorize`.
18
+ * With `key: false`, the call returns the tokens and the user alone.
19
+ *
20
+ * Returns the email step for a wallet.tempo passkey whose account has no email. The app then signs
21
+ * the user in with `Actions.email.signIn`, which takes the step's `link` and links the passkey once
22
+ * the passkey signs again.
23
+ *
24
+ * A refusal after the passkey verified throws a `RequestError` whose `signedIn` is `true`, since
25
+ * the user is signed in. A passkey-owned account throws `webauthn_required`, since a passkey signs a
26
+ * key only on a page that shows it, and `Actions.redirect.start` then authorizes the key on Tempo
27
+ * ID's pages.
28
+ *
29
+ * @example
30
+ * ```ts
31
+ * const result = await Actions.passkey.signIn(auth)
32
+ * if ('step' in result) showEmailForm()
33
+ * ```
34
+ */
35
+ export declare function signIn<const chainId extends number = number, const key extends boolean = true>(auth: Auth, options?: signIn.Options<chainId, key>): Promise<signIn.ReturnType<chainId, key>>;
36
+ export declare namespace signIn {
37
+ type Options<chainId extends number = number, key extends boolean = true> = {
38
+ /**
39
+ * The key to authorize, as a Viem account. Its `access` names the Tempo Account, which
40
+ * defaults to the one the app selected, or the user's oldest. Defaults to a new key.
41
+ */
42
+ accessKey?: Account.Account | undefined;
43
+ /**
44
+ * A message the owner's signature binds, such as a sign-in challenge the app's backend issued.
45
+ * Tempo ID binds its EIP-191 hash as the key authorization's `witness`. Only an app with the
46
+ * `tempo-id:sign` scope may send one, and only with a key.
47
+ */
48
+ challenge?: ([key] extends [false] ? never : string) | undefined;
49
+ /**
50
+ * The credential ID, or up to 16 IDs, the browser offers. Each is unpadded base64url, as
51
+ * `PublicKeyCredential.id` reports it, of 1 to 1,023 bytes. A padded or otherwise non-canonical
52
+ * encoding throws a `RequestError` with reason `invalid_field`. Defaults to every passkey the
53
+ * browser holds for the relying party, as an empty list does.
54
+ */
55
+ credentialId?: readonly string[] | string | undefined;
56
+ /**
57
+ * Runs the WebAuthn ceremony in place of `navigator.credentials.get`, such as a native passkey
58
+ * module. Its assertion must report the origin of the page that sends the requests, so an
59
+ * Android app's facet origin is refused.
60
+ */
61
+ getFn?: Authentication.sign.Options['getFn'] | undefined;
62
+ /** How the browser mediates the ceremony, such as `conditional` for passkey autofill. Defaults to the browser's own mediation. */
63
+ mediation?: 'conditional' | 'optional' | 'required' | 'silent' | undefined;
64
+ /**
65
+ * Whether the sign-in authorizes an access key. With `false`, the call creates no Tempo
66
+ * Account, and returns the tokens and the user alone. Defaults to `true`.
67
+ */
68
+ key?: key | undefined;
69
+ /** What the key may do. It must fit the headless ceiling, which fills what it leaves out. */
70
+ permissions?: Permissions<chainId> | undefined;
71
+ };
72
+ /** The step a wallet.tempo passkey without an email needs: an emailed code, which links it. */
73
+ type EmailStep = {
74
+ /** Passed as `link` to `Actions.email.signIn`, which links the passkey to that user. */
75
+ link: string;
76
+ /** The kind of step. */
77
+ type: 'email';
78
+ };
79
+ /**
80
+ * The authorization, or the tokens and the user alone with `key: false`, or the email step of a
81
+ * wallet.tempo passkey without an email. A `boolean` `key` returns either authorization.
82
+ */
83
+ type ReturnType<chainId extends number = number, key extends boolean = true> = (key extends false ? Omit<Authorization<chainId>, 'account' | 'key'> : Authorization<chainId>) | {
84
+ /** The email step to complete before the authorization. */
85
+ step: EmailStep;
86
+ };
87
+ }
88
+ //# sourceMappingURL=passkey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.d.ts","sourceRoot":"","sources":["../../../src/client/actions/passkey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAc,MAAM,aAAa,CAAA;AACxD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,KAAK,IAAI,EAA4B,MAAM,YAAY,CAAA;AAChE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAGxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAA;AAEpD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,MAAM,CAC1B,KAAK,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EACrC,KAAK,CAAC,GAAG,SAAS,OAAO,GAAG,IAAI,EAEhC,IAAI,EAAE,IAAI,EACV,OAAO,GAAE,MAAM,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAM,GACzC,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAmC1C;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,OAAO,CAAC,OAAO,SAAS,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,OAAO,GAAG,IAAI,IAAI;QAC1E;;;WAGG;QACH,SAAS,CAAC,EAAE,OAAO,CAAC,OAAO,GAAG,SAAS,CAAA;QACvC;;;;WAIG;QACH,SAAS,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,GAAG,SAAS,CAAA;QAChE;;;;;WAKG;QACH,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAAA;QACrD;;;;WAIG;QACH,KAAK,CAAC,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;QACxD,kIAAkI;QAClI,SAAS,CAAC,EAAE,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,QAAQ,GAAG,SAAS,CAAA;QAC1E;;;WAGG;QACH,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAA;QACrB,6FAA6F;QAC7F,WAAW,CAAC,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,SAAS,CAAA;KAC/C,CAAA;IAED,+FAA+F;IAC/F,KAAK,SAAS,GAAG;QACf,wFAAwF;QACxF,IAAI,EAAE,MAAM,CAAA;QACZ,wBAAwB;QACxB,IAAI,EAAE,OAAO,CAAA;KACd,CAAA;IAED;;;OAGG;IACH,KAAK,UAAU,CACb,OAAO,SAAS,MAAM,GAAG,MAAM,EAC/B,GAAG,SAAS,OAAO,GAAG,IAAI,IAExB,CAAC,GAAG,SAAS,KAAK,GACd,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,SAAS,GAAG,KAAK,CAAC,GAC/C,aAAa,CAAC,OAAO,CAAC,CAAC,GAC3B;QACE,2DAA2D;QAC3D,IAAI,EAAE,SAAS,CAAA;KAChB,CAAA;CACN"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Signs the user in with a passkey from the app's own sign-in form, and authorizes the app's key.
3
+ * By default the browser offers every passkey it holds for the relying party of the app's realms,
4
+ * so the app needs no email first. A non-empty `credentialId` narrows that to the passkeys it names.
5
+ * @module
6
+ */
7
+ import { Authentication } from 'ox/webauthn';
8
+ import { ChallengeWithoutKeyError } from '../Auth.js';
9
+ import * as Api from '../internal/api.js';
10
+ import * as Headless from '../internal/headless.js';
11
+ /**
12
+ * Signs the user in with a passkey, then authorizes the app for the signed-in user, as
13
+ * `Actions.email.signIn` does. Only a first-party app authorizes this way. The page's origin must
14
+ * be the origin of one of the app's redirect URIs, and the relying party of the app's realms must
15
+ * cover it, or the call throws `passkey_not_permitted`. A sign-in with a key
16
+ * creates the user's first Tempo Account with `POST /v1/account`, then sends `POST /v1/authorize`.
17
+ * With `key: false`, the call returns the tokens and the user alone.
18
+ *
19
+ * Returns the email step for a wallet.tempo passkey whose account has no email. The app then signs
20
+ * the user in with `Actions.email.signIn`, which takes the step's `link` and links the passkey once
21
+ * the passkey signs again.
22
+ *
23
+ * A refusal after the passkey verified throws a `RequestError` whose `signedIn` is `true`, since
24
+ * the user is signed in. A passkey-owned account throws `webauthn_required`, since a passkey signs a
25
+ * key only on a page that shows it, and `Actions.redirect.start` then authorizes the key on Tempo
26
+ * ID's pages.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * const result = await Actions.passkey.signIn(auth)
31
+ * if ('step' in result) showEmailForm()
32
+ * ```
33
+ */
34
+ export async function signIn(auth, options = {}) {
35
+ const { credentialId, getFn, mediation } = options;
36
+ // A challenge rides in the key, so a sign-in without one refuses it before it signs in.
37
+ if (options.key === false && options.challenge !== undefined)
38
+ throw new ChallengeWithoutKeyError();
39
+ const requested = await Api.json(await Api.post(auth, '/v1/auth/passkey/options', {
40
+ json: {
41
+ // The app's realms decide the relying party, which must cover the page's origin.
42
+ client_id: auth.clientId,
43
+ ...(credentialId === undefined ? {} : { credentialId }),
44
+ ...(mediation === undefined ? {} : { mediation }),
45
+ },
46
+ }));
47
+ const deserialized = Authentication.deserializeOptions(requested.options);
48
+ const assertion = Authentication.serializeResponse(await Authentication.sign(
49
+ // ox reads `getFn` beside request options at runtime, which its types admit only beside a challenge.
50
+ getFn ? { ...deserialized, getFn } : deserialized));
51
+ const body = await Api.json(await Api.post(auth, '/v1/auth/passkey/verify', { json: { assertion } }));
52
+ if ('step' in body)
53
+ return { step: { link: body.step.link, type: body.step.type } };
54
+ // `key` decides both the type and the runtime value of the result.
55
+ return (await Headless.authorize(auth, {
56
+ ...options,
57
+ userId: body.user.id,
58
+ }));
59
+ }
60
+ //# sourceMappingURL=passkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"passkey.js","sourceRoot":"","sources":["../../../src/client/actions/passkey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,cAAc,EAAc,MAAM,aAAa,CAAA;AAExD,OAAO,EAAa,wBAAwB,EAAE,MAAM,YAAY,CAAA;AAEhE,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AACzC,OAAO,KAAK,QAAQ,MAAM,yBAAyB,CAAA;AAGnD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAI1B,IAAU,EACV,OAAO,GAAiC,EAAE;IAE1C,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,GAAG,OAAO,CAAA;IAClD,wFAAwF;IACxF,IAAI,OAAO,CAAC,GAAG,KAAK,KAAK,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS;QAC1D,MAAM,IAAI,wBAAwB,EAAE,CAAA;IACtC,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,CAG9B,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,0BAA0B,EAAE;QAC/C,IAAI,EAAE;YACJ,iFAAiF;YACjF,SAAS,EAAE,IAAI,CAAC,QAAQ;YACxB,GAAG,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC;YACvD,GAAG,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC;SAClD;KACF,CAAC,CACH,CAAA;IACD,MAAM,YAAY,GAAG,cAAc,CAAC,kBAAkB,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;IACzE,MAAM,SAAS,GAAG,cAAc,CAAC,iBAAiB,CAChD,MAAM,cAAc,CAAC,IAAI;IACvB,qGAAqG;IACrG,KAAK,CAAC,CAAC,CAAE,EAAE,GAAG,YAAY,EAAE,KAAK,EAAY,CAAC,CAAC,CAAC,YAAY,CAC7D,CACF,CAAA;IACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAEzB,MAAM,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,yBAAyB,EAAE,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC,CAAA;IAC3E,IAAI,MAAM,IAAI,IAAI;QAChB,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAA;IAEjE,mEAAmE;IACnE,OAAO,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,EAAE;QACrC,GAAG,OAAO;QACV,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,EAAE;KACrB,CAAC,CAAoC,CAAA;AACxC,CAAC"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Signs the user in to Tempo ID through an OAuth provider or an SSO connection, from the app's
3
+ * own sign-in buttons.
4
+ * @module
5
+ */
6
+ import type { Auth } from '../Auth.js';
7
+ import type { Provider } from '../Provider.js';
8
+ /**
9
+ * Lists the OAuth providers Tempo ID offers, for an app that shows its own sign-in buttons.
10
+ *
11
+ * @example
12
+ * ```ts
13
+ * const providers = await Actions.provider.list(auth)
14
+ * // [{ id: 'google', name: 'Google' }]
15
+ * ```
16
+ */
17
+ export declare function list(auth: Auth): Promise<list.ReturnType>;
18
+ export declare namespace list {
19
+ type ReturnType = readonly {
20
+ /** The provider's short name, which `signIn` takes. */
21
+ id: Provider;
22
+ /** The name to show, such as `Google`. */
23
+ name: string;
24
+ }[];
25
+ }
26
+ /**
27
+ * Sends the browser to an OAuth provider, or to the SSO connection a `Step` names, and back to
28
+ * `returnTo` signed in to Tempo ID. Unlike `Actions.email.signIn`, it does not authorize the
29
+ * app: the app calls `Actions.authorize` once the browser returns.
30
+ *
31
+ * @example
32
+ * ```ts
33
+ * Actions.provider.signIn(auth, { provider: 'google' })
34
+ * ```
35
+ */
36
+ export declare function signIn(auth: Auth, options: signIn.Options): void;
37
+ export declare namespace signIn {
38
+ type Options = ({
39
+ /** The OAuth provider to sign in with, from `list`. */
40
+ provider: Provider;
41
+ } | {
42
+ /** The URL of a `Step`, such as the SSO connection an address requires. */
43
+ url: string;
44
+ }) & {
45
+ /** Where to return. Defaults to the current page. It must be on one of the app's origins. */
46
+ returnTo?: string | undefined;
47
+ };
48
+ }
49
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/client/actions/provider.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAEtC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAE9C;;;;;;;;GAQG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAK/D;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,KAAK,UAAU,GAAG,SAAS;QACzB,uDAAuD;QACvD,EAAE,EAAE,QAAQ,CAAA;QACZ,0CAA0C;QAC1C,IAAI,EAAE,MAAM,CAAA;KACb,EAAE,CAAA;CACJ;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,GAAG,IAAI,CAShE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,OAAO,GAAG,CACX;QACE,uDAAuD;QACvD,QAAQ,EAAE,QAAQ,CAAA;KACnB,GACD;QACE,2EAA2E;QAC3E,GAAG,EAAE,MAAM,CAAA;KACZ,CACJ,GAAG;QACF,6FAA6F;QAC7F,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC9B,CAAA;CACF"}
@@ -0,0 +1,34 @@
1
+ import * as Api from '../internal/api.js';
2
+ /**
3
+ * Lists the OAuth providers Tempo ID offers, for an app that shows its own sign-in buttons.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * const providers = await Actions.provider.list(auth)
8
+ * // [{ id: 'google', name: 'Google' }]
9
+ * ```
10
+ */
11
+ export async function list(auth) {
12
+ const { providers } = await Api.json(await (auth.fetch ?? fetch)(new URL('/v1/auth/providers', auth.url)));
13
+ return providers;
14
+ }
15
+ /**
16
+ * Sends the browser to an OAuth provider, or to the SSO connection a `Step` names, and back to
17
+ * `returnTo` signed in to Tempo ID. Unlike `Actions.email.signIn`, it does not authorize the
18
+ * app: the app calls `Actions.authorize` once the browser returns.
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * Actions.provider.signIn(auth, { provider: 'google' })
23
+ * ```
24
+ */
25
+ export function signIn(auth, options) {
26
+ const url = 'url' in options
27
+ ? new URL(options.url)
28
+ : new URL(`/v1/auth/oauth/${options.provider}`, auth.url);
29
+ url.searchParams.set('return_to', options.returnTo ?? window.location.href);
30
+ // An account step after the sign-in lists the accounts of this app's realms.
31
+ url.searchParams.set('client_id', auth.clientId);
32
+ window.location.assign(url);
33
+ }
34
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/client/actions/provider.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,GAAG,MAAM,oBAAoB,CAAA;AAGzC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAU;IACnC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,CAAC,IAAI,CAClC,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,oBAAoB,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CACrE,CAAA;IACD,OAAO,SAAS,CAAA;AAClB,CAAC;AAWD;;;;;;;;;GASG;AACH,MAAM,UAAU,MAAM,CAAC,IAAU,EAAE,OAAuB;IACxD,MAAM,GAAG,GACP,KAAK,IAAI,OAAO;QACd,CAAC,CAAC,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC;QACtB,CAAC,CAAC,IAAI,GAAG,CAAC,kBAAkB,OAAO,CAAC,QAAQ,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,CAAA;IAC7D,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC3E,6EAA6E;IAC7E,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAA;IAChD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;AAC7B,CAAC"}