@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.
Files changed (712) hide show
  1. package/README.md +81 -0
  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-DjQNeRZp.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 +82 -0
  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,115 @@
1
+ /**
2
+ * The keys that sign Tempo ID's tokens: the JWT plugin's key options, and the rotation that
3
+ * `tempo-id admin rotate-key` runs on the `jwks` table. A rotation writes the row that the plugin
4
+ * writes when it creates a key, with Better Auth's key generation and encryption.
5
+ * @module
6
+ */
7
+ import type { GenericEndpointContext } from '@better-auth/core';
8
+ import { type Jwk } from 'better-auth/plugins/jwt';
9
+ import type * as Realm from './Realm.js';
10
+ /**
11
+ * As many keys as the JWT plugin reads are live or in their grace period, so the plugin would not
12
+ * read a new key.
13
+ */
14
+ export declare class FullError extends Error {
15
+ readonly name = "SigningKey.FullError";
16
+ constructor();
17
+ }
18
+ /** The table holds no signing key yet, so a rotation has no key to retire. */
19
+ export declare class MissingError extends Error {
20
+ readonly name = "SigningKey.MissingError";
21
+ constructor();
22
+ }
23
+ /** The secret does not decrypt the current signing key, so the Worker could not use a new one. */
24
+ export declare class SecretError extends Error {
25
+ readonly name = "SigningKey.SecretError";
26
+ constructor();
27
+ }
28
+ /**
29
+ * Seconds that `GET /oauth2/jwks` serves a key after it stops signing, so verifiers accept the tokens
30
+ * that it signed before. This is Better Auth's default, 30 days.
31
+ */
32
+ export declare const gracePeriod: number;
33
+ /**
34
+ * Seconds between a rotation and the first token that the new key signs. `GET /oauth2/jwks` serves
35
+ * the new key at once, so a verifier that caches the key set, with a refetch cooldown such as jose's
36
+ * 30 seconds, holds the key before any token names it.
37
+ */
38
+ export declare const publication: number;
39
+ /**
40
+ * The most keys that the JWT plugin reads: Better Auth's default limit on a read. A rotation keeps
41
+ * the live keys and the keys in their grace period within it.
42
+ */
43
+ export declare const capacity = 100;
44
+ /** The JWT plugin's `jwks` options. RS256, since Privy and the existing verifiers accept it. */
45
+ export declare const jwks: {
46
+ gracePeriod: number;
47
+ jwksPath: string;
48
+ keyPairConfig: {
49
+ alg: 'RS256';
50
+ modulusLength: number;
51
+ };
52
+ };
53
+ /**
54
+ * The JWT plugin's read of the `jwks` table: every live key, and every key in its grace period.
55
+ * Better Auth's own read returns any 100 rows, and a rotation backdates each new key's `createdAt`,
56
+ * so neither row order nor creation time can pick the keys once retired rows build up.
57
+ */
58
+ export declare const adapter: {
59
+ getJwks: (ctx: GenericEndpointContext) => Promise<Jwk[]>;
60
+ };
61
+ /**
62
+ * Returns the public key that an ID token hint names in its `kid` header, as a key set, retired keys
63
+ * included, past the grace period too. Logout verifies the hint against it, since a session can
64
+ * outlast the grace period of the key that signed its ID token. A hint without a `kid`, or with an
65
+ * unknown one, returns an empty set. Tokens that grant access verify only against the keys that
66
+ * `GET /oauth2/jwks` serves.
67
+ */
68
+ export declare function hintKeys(db: Realm.Database, options: hintKeys.Options): Promise<hintKeys.ReturnType>;
69
+ export declare namespace hintKeys {
70
+ type Options = {
71
+ /** The ID token hint, whose `kid` header names its signing key. */
72
+ hint: string;
73
+ };
74
+ type ReturnType = {
75
+ /** Each public key, with its ID as `kid`. */
76
+ keys: (JsonWebKey & {
77
+ /** The key's ID, which each token that it signed names as `kid`. */
78
+ kid: string;
79
+ })[];
80
+ };
81
+ }
82
+ /**
83
+ * Adds a new signing key, which signs every token after the {@link publication} delay, and retires
84
+ * every earlier key that is still live at the end of that delay. `GET /oauth2/jwks` serves the new key
85
+ * at once, and serves each retired key until its grace period ends.
86
+ *
87
+ * Throws `MissingError` when no key exists, `SecretError` when `secret` does not decrypt the current
88
+ * key, and `FullError` when `capacity` keys are live or in their grace period.
89
+ */
90
+ export declare function rotate(db: Realm.Database, options: rotate.Options): Promise<rotate.ReturnType>;
91
+ export declare namespace rotate {
92
+ type Options = {
93
+ /** The deployment's `SECRET` variable, which encrypts each private key. */
94
+ secret: string;
95
+ };
96
+ type ReturnType = {
97
+ /** The new signing key. */
98
+ key: {
99
+ /** The key's ID, which each token names as `kid`. */
100
+ id: string;
101
+ /** When the key signs its first token, after the publication delay. */
102
+ signsFrom: Date;
103
+ };
104
+ /** The keys that the rotation retires, newest first. */
105
+ retired: readonly {
106
+ /** The key's ID. */
107
+ id: string;
108
+ /** When `GET /oauth2/jwks` stops serving the key. */
109
+ servedUntil: Date;
110
+ /** When the key signs its last token. */
111
+ signsUntil: Date;
112
+ }[];
113
+ };
114
+ }
115
+ //# sourceMappingURL=SigningKey.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SigningKey.d.ts","sourceRoot":"","sources":["../../src/internal/SigningKey.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAG/D,OAAO,EAA2B,KAAK,GAAG,EAAE,MAAM,yBAAyB,CAAA;AAI3E,OAAO,KAAK,KAAK,KAAK,MAAM,YAAY,CAAA;AAExC;;;GAGG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAkB,IAAI,0BAAyB;IAE/C,cAIC;CACF;AAED,8EAA8E;AAC9E,qBAAa,YAAa,SAAQ,KAAK;IACrC,SAAkB,IAAI,6BAA4B;IAElD,cAIC;CACF;AAED,kGAAkG;AAClG,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAkB,IAAI,4BAA2B;IAEjD,cAIC;CACF;AAED;;;GAGG;AACH,eAAO,MAAM,WAAW,QAAoB,CAAA;AAE5C;;;;GAIG;AACH,eAAO,MAAM,WAAW,QAAS,CAAA;AAEjC;;;GAGG;AACH,eAAO,MAAM,QAAQ,MAAM,CAAA;AAE3B,gGAAgG;AAChG,eAAO,MAAM,IAAI;;;;QAGE,GAAG,EAAE,OAAO;QAAW,aAAa;;CACtD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO;IAClB,OAAO,QAAc,sBAAsB;CAiB5C,CAAA;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAC5B,EAAE,EAAE,KAAK,CAAC,QAAQ,EAClB,OAAO,EAAE,QAAQ,CAAC,OAAO,GACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAC,CAuB9B;AAED,MAAM,CAAC,OAAO,WAAW,QAAQ,CAAC;IAChC,KAAK,OAAO,GAAG;QACb,mEAAmE;QACnE,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;IAED,KAAK,UAAU,GAAG;QAChB,6CAA6C;QAC7C,IAAI,EAAE,CAAC,UAAU,GAAG;YAClB,oEAAoE;YACpE,GAAG,EAAE,MAAM,CAAA;SACZ,CAAC,EAAE,CAAA;KACL,CAAA;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAC1B,EAAE,EAAE,KAAK,CAAC,QAAQ,EAClB,OAAO,EAAE,MAAM,CAAC,OAAO,GACtB,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAgG5B;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,KAAK,OAAO,GAAG;QACb,2EAA2E;QAC3E,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;IAED,KAAK,UAAU,GAAG;QAChB,2BAA2B;QAC3B,GAAG,EAAE;YACH,qDAAqD;YACrD,EAAE,EAAE,MAAM,CAAA;YACV,uEAAuE;YACvE,SAAS,EAAE,IAAI,CAAA;SAChB,CAAA;QACD,wDAAwD;QACxD,OAAO,EAAE,SAAS;YAChB,oBAAoB;YACpB,EAAE,EAAE,MAAM,CAAA;YACV,qDAAqD;YACrD,WAAW,EAAE,IAAI,CAAA;YACjB,yCAAyC;YACzC,UAAU,EAAE,IAAI,CAAA;SACjB,EAAE,CAAA;KACJ,CAAA;CACF"}
@@ -0,0 +1,197 @@
1
+ import { getCurrentAdapter } from '@better-auth/core/context';
2
+ import { symmetricDecrypt, symmetricEncrypt } from 'better-auth/crypto';
3
+ import { generateExportedKeyPair } from 'better-auth/plugins/jwt';
4
+ import { count, desc, eq, gt, isNull, or, sql } from 'drizzle-orm';
5
+ import { decodeProtectedHeader } from 'jose';
6
+ import * as Schema from '../app/db/schema.js';
7
+ /**
8
+ * As many keys as the JWT plugin reads are live or in their grace period, so the plugin would not
9
+ * read a new key.
10
+ */
11
+ export class FullError extends Error {
12
+ name = 'SigningKey.FullError';
13
+ constructor() {
14
+ super(`Too many signing keys: ${capacity} keys are live or in their 30-day grace period. Rotate again once the oldest grace period ends.`);
15
+ }
16
+ }
17
+ /** The table holds no signing key yet, so a rotation has no key to retire. */
18
+ export class MissingError extends Error {
19
+ name = 'SigningKey.MissingError';
20
+ constructor() {
21
+ super('No signing key exists. Tempo ID creates the first key when it signs its first token.');
22
+ }
23
+ }
24
+ /** The secret does not decrypt the current signing key, so the Worker could not use a new one. */
25
+ export class SecretError extends Error {
26
+ name = 'SigningKey.SecretError';
27
+ constructor() {
28
+ super("Invalid SECRET: it does not decrypt the current signing key. Set SECRET to the deployment's SECRET variable.");
29
+ }
30
+ }
31
+ /**
32
+ * Seconds that `GET /oauth2/jwks` serves a key after it stops signing, so verifiers accept the tokens
33
+ * that it signed before. This is Better Auth's default, 30 days.
34
+ */
35
+ export const gracePeriod = 60 * 60 * 24 * 30;
36
+ /**
37
+ * Seconds between a rotation and the first token that the new key signs. `GET /oauth2/jwks` serves
38
+ * the new key at once, so a verifier that caches the key set, with a refetch cooldown such as jose's
39
+ * 30 seconds, holds the key before any token names it.
40
+ */
41
+ export const publication = 5 * 60;
42
+ /**
43
+ * The most keys that the JWT plugin reads: Better Auth's default limit on a read. A rotation keeps
44
+ * the live keys and the keys in their grace period within it.
45
+ */
46
+ export const capacity = 100;
47
+ /** The JWT plugin's `jwks` options. RS256, since Privy and the existing verifiers accept it. */
48
+ export const jwks = {
49
+ gracePeriod,
50
+ jwksPath: '/oauth2/jwks',
51
+ keyPairConfig: { alg: 'RS256', modulusLength: 2048 },
52
+ };
53
+ /**
54
+ * The JWT plugin's read of the `jwks` table: every live key, and every key in its grace period.
55
+ * Better Auth's own read returns any 100 rows, and a rotation backdates each new key's `createdAt`,
56
+ * so neither row order nor creation time can pick the keys once retired rows build up.
57
+ */
58
+ export const adapter = {
59
+ getJwks: async (ctx) => await (await getCurrentAdapter(ctx.context.adapter)).findMany({
60
+ limit: capacity,
61
+ model: 'jwks',
62
+ sortBy: { direction: 'desc', field: 'createdAt' },
63
+ where: [
64
+ { connector: 'OR', field: 'expiresAt', value: null },
65
+ {
66
+ connector: 'OR',
67
+ field: 'expiresAt',
68
+ operator: 'gt',
69
+ value: new Date(Date.now() - gracePeriod * 1000),
70
+ },
71
+ ],
72
+ }),
73
+ };
74
+ /**
75
+ * Returns the public key that an ID token hint names in its `kid` header, as a key set, retired keys
76
+ * included, past the grace period too. Logout verifies the hint against it, since a session can
77
+ * outlast the grace period of the key that signed its ID token. A hint without a `kid`, or with an
78
+ * unknown one, returns an empty set. Tokens that grant access verify only against the keys that
79
+ * `GET /oauth2/jwks` serves.
80
+ */
81
+ export async function hintKeys(db, options) {
82
+ // The header is read before the signature is checked, so a forged hint costs one indexed read.
83
+ const kid = (() => {
84
+ try {
85
+ return decodeProtectedHeader(options.hint).kid;
86
+ }
87
+ catch {
88
+ return undefined;
89
+ }
90
+ })();
91
+ if (!kid)
92
+ return { keys: [] };
93
+ const rows = await db
94
+ .select()
95
+ .from(Schema.jwks)
96
+ .where(eq(Schema.jwks.id, kid))
97
+ .limit(1);
98
+ return {
99
+ keys: rows.map((row) => ({
100
+ ...JSON.parse(row.publicKey),
101
+ alg: row.alg ?? jwks.keyPairConfig.alg,
102
+ kid: row.id,
103
+ })),
104
+ };
105
+ }
106
+ /**
107
+ * Adds a new signing key, which signs every token after the {@link publication} delay, and retires
108
+ * every earlier key that is still live at the end of that delay. `GET /oauth2/jwks` serves the new key
109
+ * at once, and serves each retired key until its grace period ends.
110
+ *
111
+ * Throws `MissingError` when no key exists, `SecretError` when `secret` does not decrypt the current
112
+ * key, and `FullError` when `capacity` keys are live or in their grace period.
113
+ */
114
+ export async function rotate(db, options) {
115
+ const { secret } = options;
116
+ return await db.transaction(async (tx) => {
117
+ // Serializes rotations, and keeps the Worker from creating a key between the read and the writes.
118
+ // Reads proceed, so the Worker signs with the current key until the commit.
119
+ await tx.execute(sql `lock table ${Schema.jwks} in share row exclusive mode`);
120
+ // The database's clock, which every deployment shares, so a skewed clock on the machine that
121
+ // runs the command cannot end the publication delay early. `clock_timestamp()` reads it after the
122
+ // lock, where `now()` would return the transaction's start and count the wait for the lock.
123
+ const [clock] = await tx
124
+ .select({
125
+ now: sql `(extract(epoch from clock_timestamp()) * 1000)::float8`,
126
+ })
127
+ .from(Schema.jwks)
128
+ .limit(1);
129
+ if (!clock)
130
+ throw new MissingError();
131
+ const now = new Date(Number(clock.now));
132
+ const signsFrom = new Date(now.getTime() + publication * 1000);
133
+ const live = await tx
134
+ .select()
135
+ .from(Schema.jwks)
136
+ .where(or(isNull(Schema.jwks.expiresAt), gt(Schema.jwks.expiresAt, now)))
137
+ .orderBy(desc(Schema.jwks.createdAt));
138
+ const [current] = live;
139
+ const oldest = live.at(-1);
140
+ if (!current || !oldest)
141
+ throw new MissingError();
142
+ // A key encrypted with another secret would fail every signature, so the rotation checks first.
143
+ const decrypted = await symmetricDecrypt({
144
+ data: JSON.parse(current.privateKey),
145
+ key: secret,
146
+ }).catch(() => undefined);
147
+ if (decrypted === undefined)
148
+ throw new SecretError();
149
+ // The read returns at most `capacity` rows, and a rotated key sorts last, so one more would hide it.
150
+ // The Worker applies the grace cutoff by its own clock, so the count also includes the keys whose
151
+ // grace period ended up to `publication` seconds ago, in case that clock is behind the database's.
152
+ const [served] = await tx
153
+ .select({ count: count() })
154
+ .from(Schema.jwks)
155
+ .where(or(isNull(Schema.jwks.expiresAt), gt(Schema.jwks.expiresAt, new Date(now.getTime() - (gracePeriod + publication) * 1000))));
156
+ if (served.count >= capacity)
157
+ throw new FullError();
158
+ const pair = await generateExportedKeyPair({ jwks });
159
+ const [key] = await tx
160
+ .insert(Schema.jwks)
161
+ .values({
162
+ alg: pair.alg,
163
+ // Better Auth signs with the live key of the latest `createdAt`. A `createdAt` before every
164
+ // live key's keeps the new key from signing until the earlier keys expire at `signsFrom`.
165
+ createdAt: new Date(oldest.createdAt.getTime() - 1),
166
+ id: crypto.randomUUID(),
167
+ // The JWT plugin stores the encrypted key as a JSON string.
168
+ privateKey: JSON.stringify(await symmetricEncrypt({
169
+ data: JSON.stringify(pair.privateWebKey),
170
+ key: secret,
171
+ })),
172
+ publicKey: JSON.stringify(pair.publicWebKey),
173
+ })
174
+ .returning({ id: Schema.jwks.id });
175
+ // A key that an earlier rotation already retires keeps its earlier expiry.
176
+ const retired = live.map((entry) => ({
177
+ expiresAt: entry.expiresAt && entry.expiresAt < signsFrom
178
+ ? entry.expiresAt
179
+ : signsFrom,
180
+ id: entry.id,
181
+ }));
182
+ for (const entry of retired)
183
+ await tx
184
+ .update(Schema.jwks)
185
+ .set({ expiresAt: entry.expiresAt })
186
+ .where(eq(Schema.jwks.id, entry.id));
187
+ return {
188
+ key: { id: key.id, signsFrom },
189
+ retired: retired.map((entry) => ({
190
+ id: entry.id,
191
+ servedUntil: new Date(entry.expiresAt.getTime() + gracePeriod * 1000),
192
+ signsUntil: entry.expiresAt,
193
+ })),
194
+ };
195
+ });
196
+ }
197
+ //# sourceMappingURL=SigningKey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SigningKey.js","sourceRoot":"","sources":["../../src/internal/SigningKey.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Selects the sign-in codes that a deployment sends to its test inbox instead of emailing them. A
3
+ * preview sets `TEST_EMAIL_DOMAIN` and binds `TEST_INBOX`, so the end-to-end suite reads the codes of
4
+ * its test addresses, while every other address still receives email. Only domains that RFC 2606
5
+ * reserves qualify, so no deployment can divert a real address.
6
+ * @module
7
+ */
8
+ /** The domains that a test inbox can receive, which RFC 2606 reserves, so no real address uses them. */
9
+ export declare const domains: readonly ['example.com', 'example.net', 'example.org'];
10
+ /** A domain that a test inbox can receive. */
11
+ export type Domain = (typeof domains)[number];
12
+ /** A message to a test inbox, in the shape of Void's development inbox. */
13
+ export type Message = {
14
+ /** The subject line. */
15
+ subject: string;
16
+ /** The plain-text body. */
17
+ text: string;
18
+ /** The recipients. */
19
+ to: readonly {
20
+ /** The recipient's address. */
21
+ email: string;
22
+ }[];
23
+ };
24
+ /** The test inbox's `Capture` entrypoint, which a deployment binds as `TEST_INBOX`. */
25
+ export type Service = {
26
+ /** Stores `message`. */
27
+ capture(message: Message): Promise<void>;
28
+ };
29
+ /**
30
+ * Returns whether `email` belongs at the test inbox: `domain` is one of {@link domains}, and the
31
+ * address's domain is exactly `domain`. Returns `false` when `domain` is absent.
32
+ */
33
+ export declare function matches(options: matches.Options): boolean;
34
+ export declare namespace matches {
35
+ type Options = {
36
+ /** The deployment's `TEST_EMAIL_DOMAIN`, or `undefined` when it sets none. */
37
+ domain?: string | undefined;
38
+ /** The recipient's address. */
39
+ email: string;
40
+ };
41
+ }
42
+ //# sourceMappingURL=TestInbox.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestInbox.d.ts","sourceRoot":"","sources":["../../src/internal/TestInbox.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wGAAwG;AACxG,eAAO,MAAM,OAAO,YAAI,aAAa,EAAE,aAAa,EAAE,aAAa,CAAU,CAAA;AAE7E,8CAA8C;AAC9C,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,OAAO,CAAC,CAAC,MAAM,CAAC,CAAA;AAE7C,2EAA2E;AAC3E,MAAM,MAAM,OAAO,GAAG;IACpB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAA;IACf,2BAA2B;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,EAAE,EAAE,SAAS;QACX,+BAA+B;QAC/B,KAAK,EAAE,MAAM,CAAA;KACd,EAAE,CAAA;CACJ,CAAA;AAED,uFAAuF;AACvF,MAAM,MAAM,OAAO,GAAG;IACpB,wBAAwB;IACxB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CACzC,CAAA;AAED;;;GAGG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,WAI/C;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,KAAK,OAAO,GAAG;QACb,8EAA8E;QAC9E,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,+BAA+B;QAC/B,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Selects the sign-in codes that a deployment sends to its test inbox instead of emailing them. A
3
+ * preview sets `TEST_EMAIL_DOMAIN` and binds `TEST_INBOX`, so the end-to-end suite reads the codes of
4
+ * its test addresses, while every other address still receives email. Only domains that RFC 2606
5
+ * reserves qualify, so no deployment can divert a real address.
6
+ * @module
7
+ */
8
+ /** The domains that a test inbox can receive, which RFC 2606 reserves, so no real address uses them. */
9
+ export const domains = ['example.com', 'example.net', 'example.org'];
10
+ /**
11
+ * Returns whether `email` belongs at the test inbox: `domain` is one of {@link domains}, and the
12
+ * address's domain is exactly `domain`. Returns `false` when `domain` is absent.
13
+ */
14
+ export function matches(options) {
15
+ const { domain, email } = options;
16
+ if (!domain || !domains.some((entry) => entry === domain))
17
+ return false;
18
+ return email.toLowerCase().endsWith(`@${domain}`);
19
+ }
20
+ //# sourceMappingURL=TestInbox.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TestInbox.js","sourceRoot":"","sources":["../../src/internal/TestInbox.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,wGAAwG;AACxG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,CAAU,CAAA;AAwB7E;;;GAGG;AACH,MAAM,UAAU,OAAO,CAAC,OAAwB;IAC9C,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAA;IACjC,IAAI,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,KAAK,MAAM,CAAC;QAAE,OAAO,KAAK,CAAA;IACvE,OAAO,KAAK,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,IAAI,MAAM,EAAE,CAAC,CAAA;AACnD,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { Env } from './Env.js';
2
+ /** One awaited call. */
3
+ export type Span = {
4
+ /** When the call settled, in the request's sequence of opens and settles. Pending spans hold `Infinity`. */
5
+ closed: number;
6
+ /**
7
+ * What the header shows beside the span, such as an in-process call's path. Logs leave it out,
8
+ * since a path can carry a device's user code.
9
+ */
10
+ description?: string | undefined;
11
+ /** How long the call took, in milliseconds. */
12
+ duration: number;
13
+ /**
14
+ * `service.operation` for a call to another service, such as `db.session.get`, or
15
+ * `Module.function` for a step of Tempo ID's own, such as `Session.get`.
16
+ */
17
+ name: string;
18
+ /** When the call's span opened, in the request's sequence of opens and settles. */
19
+ opened: number;
20
+ /** When the call started, in milliseconds after the request did. */
21
+ start: number;
22
+ };
23
+ /** A request's timings, which {@link middleware} creates and {@link measure} appends to. */
24
+ export type Timing = {
25
+ /** How many spans opened or settled so far, which orders spans that start at the same instant. */
26
+ events: number;
27
+ /** The request's spans, in the order they opened. A span still pending has a zero duration. */
28
+ spans: Span[];
29
+ /** When the request started, from `performance.now()`. */
30
+ start: number;
31
+ };
32
+ /**
33
+ * Awaits `promise` as the span `name`, and returns its result. A rejection is timed too, then
34
+ * rethrown. Concurrent spans may share a name. The header shows `description` beside the span, and
35
+ * logs leave it out.
36
+ */
37
+ export declare function measure<promise extends PromiseLike<unknown>>(c: measure.Context, promise: promise, name: string, description?: string): Promise<Awaited<promise>>;
38
+ export declare namespace measure {
39
+ /** A context that carries the request's timing, such as a route's or a page loader's. */
40
+ type Context = {
41
+ /** The request's variables. */
42
+ var: Pick<Env['Variables'], 'timing'>;
43
+ };
44
+ }
45
+ /**
46
+ * Times the request. Once the response is ready, it appends a `Server-Timing` header with the
47
+ * request's `total` and each span. Outside the Vite dev server, it also logs the same timings. A
48
+ * streamed page's `total` ends when its headers are ready.
49
+ */
50
+ export declare const middleware: import("hono").MiddlewareHandler<Env, string, {}, Response>;
51
+ //# sourceMappingURL=Timing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timing.d.ts","sourceRoot":"","sources":["../../src/internal/Timing.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,UAAU,CAAA;AAGnC,wBAAwB;AACxB,MAAM,MAAM,IAAI,GAAG;IACjB,4GAA4G;IAC5G,MAAM,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAChC,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAA;IAChB;;;OAGG;IACH,IAAI,EAAE,MAAM,CAAA;IACZ,mFAAmF;IACnF,MAAM,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,4FAA4F;AAC5F,MAAM,MAAM,MAAM,GAAG;IACnB,kGAAkG;IAClG,MAAM,EAAE,MAAM,CAAA;IACd,+FAA+F;IAC/F,KAAK,EAAE,IAAI,EAAE,CAAA;IACb,0DAA0D;IAC1D,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;;;GAIG;AACH,wBAAsB,OAAO,CAAC,OAAO,SAAS,WAAW,CAAC,OAAO,CAAC,EAChE,CAAC,EAAE,OAAO,CAAC,OAAO,EAClB,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,MAAM,EACZ,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAkB3B;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,yFAAyF;IACzF,KAAK,OAAO,GAAG;QACb,+BAA+B;QAC/B,GAAG,EAAE,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAA;KACtC,CAAA;CACF;AAED;;;;GAIG;AACH,eAAO,MAAM,UAAU,6DAmCrB,CAAA"}
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Request timings: how long each call that a request awaits takes. The calls range from Tempo ID's
3
+ * own steps to the Better Auth, database, and email calls inside them. The middleware sends them in
4
+ * a `Server-Timing` header, which browser developer tools show beside each request. Outside the Vite
5
+ * dev server, it also logs them with `Log.info`. Workers advance the clock only across I/O, so a span
6
+ * measures the I/O it awaits, and computation reads as zero.
7
+ * @module
8
+ */
9
+ import { createMiddleware } from 'hono/factory';
10
+ import * as Log from './Log.js';
11
+ /**
12
+ * Awaits `promise` as the span `name`, and returns its result. A rejection is timed too, then
13
+ * rethrown. Concurrent spans may share a name. The header shows `description` beside the span, and
14
+ * logs leave it out.
15
+ */
16
+ export async function measure(c, promise, name, description) {
17
+ const timing = c.var.timing;
18
+ const start = performance.now();
19
+ const span = {
20
+ closed: Infinity,
21
+ ...(description ? { description } : {}),
22
+ duration: 0,
23
+ name,
24
+ opened: timing.events++,
25
+ start: start - timing.start,
26
+ };
27
+ timing.spans.push(span);
28
+ try {
29
+ return await promise;
30
+ }
31
+ finally {
32
+ span.closed = timing.events++;
33
+ span.duration = performance.now() - start;
34
+ }
35
+ }
36
+ /**
37
+ * Times the request. Once the response is ready, it appends a `Server-Timing` header with the
38
+ * request's `total` and each span. Outside the Vite dev server, it also logs the same timings. A
39
+ * streamed page's `total` ends when its headers are ready.
40
+ */
41
+ export const middleware = createMiddleware(async (c, next) => {
42
+ const timing = { events: 0, spans: [], start: performance.now() };
43
+ c.set('timing', timing);
44
+ await next();
45
+ const total = performance.now() - timing.start;
46
+ const spans = order(timing.spans);
47
+ c.res.headers.append('server-timing', [`total;dur=${round(total)}`, ...spans.map(serialize)].join(', '));
48
+ // The dev server prints every entry to the terminal, and the header carries the same spans.
49
+ if (Log.dev())
50
+ return;
51
+ // Without the context, `Log` leaves the request's path out, since callers control it and it can
52
+ // carry a user code. The route pattern stands in, and pages without a route share `/*`.
53
+ Log.info({
54
+ fields: {
55
+ duration: round(total),
56
+ errorCode: c.var.refusal?.error,
57
+ method: c.req.method,
58
+ reason: c.var.refusal?.reason,
59
+ requestId: c.var.requestId,
60
+ route: Log.route(c),
61
+ spans: spans
62
+ .map((span) => `${span.name};dur=${round(span.duration)};start=${round(span.start)}`)
63
+ .join(', '),
64
+ status: c.res.status,
65
+ },
66
+ message: 'The Worker timed a request.',
67
+ });
68
+ });
69
+ /**
70
+ * Orders spans with each step before the calls inside it. The order reads only the sequence of
71
+ * opens and settles, since the clock can advance between the span of a call and the span of its
72
+ * step. Spans that open with no settle between them all overlap. Of those, the one that settles
73
+ * last encloses the others, since a step's promise is created before the step's span opens. Spans
74
+ * that open after a settle come after.
75
+ */
76
+ function order(spans) {
77
+ // `spans` holds the spans in the order they opened, so each event before a span that is not an
78
+ // earlier span's open is a settle.
79
+ return spans
80
+ .map((span, index) => ({ settles: span.opened - index, span }))
81
+ .toSorted((a, b) => {
82
+ if (a.settles !== b.settles)
83
+ return a.settles - b.settles;
84
+ // Pending spans hold `Infinity`, which subtraction cannot compare.
85
+ if (a.span.closed !== b.span.closed)
86
+ return a.span.closed > b.span.closed ? -1 : 1;
87
+ return a.span.opened - b.span.opened;
88
+ })
89
+ .map((entry) => entry.span);
90
+ }
91
+ /** Rounds milliseconds to one decimal. */
92
+ function round(milliseconds) {
93
+ return Math.round(milliseconds * 10) / 10;
94
+ }
95
+ /** Serializes a span as a `Server-Timing` metric. */
96
+ function serialize(span) {
97
+ const metric = `${span.name};dur=${round(span.duration)}`;
98
+ if (!span.description)
99
+ return metric;
100
+ // The description is a quoted string, which escapes quotes and backslashes.
101
+ return `${metric};desc="${span.description.replace(/["\\]/g, '\\$&')}"`;
102
+ }
103
+ //# sourceMappingURL=Timing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Timing.js","sourceRoot":"","sources":["../../src/internal/Timing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /** Turns a failed request validation into an `invalid_field` refusal that names each field. @module */
2
+ import * as ErrorResponse from './ErrorResponse.js';
3
+ declare const InvalidFieldError_base: {
4
+ new (options: ErrorResponse.define.Options): {
5
+ message: string;
6
+ stack?: string;
7
+ cause?: unknown;
8
+ readonly res?: Response;
9
+ readonly status: import("hono/utils/http-status").ContentfulStatusCode;
10
+ getResponse(): Response;
11
+ readonly name: string;
12
+ readonly response: Omit<{
13
+ error: string;
14
+ error_description: string;
15
+ error_uri: string;
16
+ field?: string | undefined;
17
+ meta?: Readonly<Record<string, string | number>> | undefined;
18
+ reason: string;
19
+ request_id?: string | undefined;
20
+ }, "error" | "reason"> & {
21
+ error: "invalid_request";
22
+ reason: "invalid_field";
23
+ };
24
+ };
25
+ readonly reason: "invalid_field";
26
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
27
+ prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
28
+ stackTraceLimit: number;
29
+ };
30
+ /** A field is missing or malformed. Names each field the issues refused, with what it expects. `field` is the first. */
31
+ export declare class InvalidFieldError extends InvalidFieldError_base {
32
+ readonly name = "Validation.InvalidFieldError";
33
+ constructor(options: InvalidFieldError.Options);
34
+ }
35
+ export declare namespace InvalidFieldError {
36
+ type Options = {
37
+ /** The issues validation reported. */
38
+ issues: readonly Issue[];
39
+ };
40
+ /** A Standard Schema issue, as Zod and Hono's validators report it. */
41
+ type Issue = {
42
+ /** The validator's description of the problem. */
43
+ message: string;
44
+ /** The segments from the input's root to the refused value. Absent for the root itself. */
45
+ path?: readonly (PropertyKey | {
46
+ /** The segment's property key. */
47
+ key: PropertyKey;
48
+ })[] | undefined;
49
+ };
50
+ }
51
+ export {};
52
+ //# sourceMappingURL=Validation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validation.d.ts","sourceRoot":"","sources":["../../src/internal/Validation.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEnD,wHAAwH;AACxH,qBAAa,iBAAkB,SAAQ,sBAAqC;IAC1E,SAAkB,IAAI,kCAAiC;IAEvD,YAAY,OAAO,EAAE,iBAAiB,CAAC,OAAO,EAW7C;CACF;AAED,MAAM,CAAC,OAAO,WAAW,iBAAiB,CAAC;IACzC,KAAK,OAAO,GAAG;QACb,sCAAsC;QACtC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;KACzB,CAAA;IAED,uEAAuE;IACvE,KAAK,KAAK,GAAG;QACX,kDAAkD;QAClD,OAAO,EAAE,MAAM,CAAA;QACf,2FAA2F;QAC3F,IAAI,CAAC,EACD,SAAS,CACL,WAAW,GACX;YACE,kCAAkC;YAClC,GAAG,EAAE,WAAW,CAAA;SACjB,CACJ,EAAE,GACH,SAAS,CAAA;KACd,CAAA;CACF"}
@@ -0,0 +1,22 @@
1
+ /** Turns a failed request validation into an `invalid_field` refusal that names each field. @module */
2
+ import * as ErrorResponse from './ErrorResponse.js';
3
+ /** A field is missing or malformed. Names each field the issues refused, with what it expects. `field` is the first. */
4
+ export class InvalidFieldError extends ErrorResponse.define('invalid_field') {
5
+ name = 'Validation.InvalidFieldError';
6
+ constructor(options) {
7
+ const { issues } = options;
8
+ super({
9
+ error_description: `Invalid request. ${issues
10
+ .map((issue) => `${path(issue) ? `\`${path(issue)}\`` : 'Body'}: ${issue.message}.`)
11
+ .join(' ')}`,
12
+ field: issues[0] && path(issues[0]) ? path(issues[0]) : undefined,
13
+ });
14
+ }
15
+ }
16
+ /** The dotted path of the field `issue` refused. */
17
+ function path(issue) {
18
+ return (issue.path ?? [])
19
+ .map((segment) => typeof segment === 'object' ? String(segment.key) : String(segment))
20
+ .join('.');
21
+ }
22
+ //# sourceMappingURL=Validation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Validation.js","sourceRoot":"","sources":["../../src/internal/Validation.ts"],"names":[],"mappings":"AAAA,uGAAuG;AACvG,OAAO,KAAK,aAAa,MAAM,oBAAoB,CAAA;AAEnD,wHAAwH;AACxH,MAAM,OAAO,iBAAkB,SAAQ,aAAa,CAAC,MAAM,CAAC,eAAe,CAAC;IACxD,IAAI,GAAG,8BAA8B,CAAA;IAEvD,YAAY,OAAkC;QAC5C,MAAM,EAAE,MAAM,EAAE,GAAG,OAAO,CAAA;QAC1B,KAAK,CAAC;YACJ,iBAAiB,EAAE,oBAAoB,MAAM;iBAC1C,GAAG,CACF,CAAC,KAAK,EAAE,EAAE,CACR,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,OAAO,GAAG,CACtE;iBACA,IAAI,CAAC,GAAG,CAAC,EAAE;YACd,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;SAClE,CAAC,CAAA;IACJ,CAAC;CACF;AAyBD,oDAAoD;AACpD,SAAS,IAAI,CAAC,KAA8B;IAC1C,OAAO,CAAC,KAAK,CAAC,IAAI,IAAI,EAAE,CAAC;SACtB,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CACf,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACpE;SACA,IAAI,CAAC,GAAG,CAAC,CAAA;AACd,CAAC"}