@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,190 @@
1
+ /**
2
+ * Rate limits through the Workers Rate Limiting bindings that `Limits` names. Each Cloudflare
3
+ * location counts on its own, and counts converge eventually, so a limit bounds abuse rather than
4
+ * counting exactly. Better Auth bounds the guesses at each sign-in code exactly.
5
+ * @module
6
+ */
7
+ import type { Context } from 'hono';
8
+ import type { Env } from './Env.js';
9
+ import * as ErrorResponse from './ErrorResponse.js';
10
+ import * as Limits from './Limits.js';
11
+ declare const LimitedError_base: {
12
+ new (options: ErrorResponse.define.Options): {
13
+ message: string;
14
+ stack?: string;
15
+ cause?: unknown;
16
+ readonly res?: Response;
17
+ readonly status: import("hono/utils/http-status").ContentfulStatusCode;
18
+ getResponse(): Response;
19
+ readonly name: string;
20
+ readonly response: Omit<{
21
+ error: string;
22
+ error_description: string;
23
+ error_uri: string;
24
+ field?: string | undefined;
25
+ meta?: Readonly<Record<string, string | number>> | undefined;
26
+ reason: string;
27
+ request_id?: string | undefined;
28
+ }, "error" | "reason"> & {
29
+ error: "temporarily_unavailable";
30
+ reason: "rate_limited";
31
+ };
32
+ };
33
+ readonly reason: "rate_limited";
34
+ captureStackTrace(targetObject: object, constructorOpt?: Function): void;
35
+ prepareStackTrace(err: Error, stackTraces: NodeJS.CallSite[]): any;
36
+ stackTraceLimit: number;
37
+ };
38
+ /** A request exceeded one of Tempo ID's rate limits. */
39
+ export declare class LimitedError extends LimitedError_base {
40
+ readonly name = "RateLimit.LimitedError";
41
+ constructor(options: LimitedError.Options);
42
+ }
43
+ export declare namespace LimitedError {
44
+ type Options = {
45
+ /** Seconds until a retry can succeed. */
46
+ retryAfter: number;
47
+ };
48
+ }
49
+ /** A Workers Rate Limiting binding, as the app calls it. */
50
+ export type Limiter = {
51
+ /** Counts a request for `key`, and reports whether the key has requests left. */
52
+ limit(options: {
53
+ /** The counter's key. */
54
+ key: string;
55
+ }): Promise<{
56
+ /** Whether the request is within the limit. */
57
+ success: boolean;
58
+ }>;
59
+ };
60
+ declare global {
61
+ interface VoidGeneratedEnvBindings extends Record<Limits.Limit, Limiter> {
62
+ }
63
+ }
64
+ /**
65
+ * A limit as the RateLimit header fields of draft-ietf-httpapi-ratelimit-headers describe it, in
66
+ * `RateLimit-Policy` and `RateLimit`.
67
+ */
68
+ export type Policy = {
69
+ /** The policy's name, such as `sign-in-ip`. */
70
+ name: string;
71
+ /** The requests a key may make within `window`. */
72
+ quota: number;
73
+ /** The window, in seconds. */
74
+ window: number;
75
+ };
76
+ /** The response headers a rate-limited route may send, which cross-origin callers need exposed. */
77
+ export declare const headers: readonly ['RateLimit', 'RateLimit-Policy', 'Retry-After'];
78
+ /**
79
+ * Counts the request against each limit in order, and returns a 429 response with `Retry-After` at
80
+ * the first one spent, or `undefined`. A limit without a key is skipped, and so is an
81
+ * {@link Limits.optional} limit without a binding, with a warning. The limits after a refusal are not
82
+ * counted, so a refused caller spends no narrower quota, such as an address's. The response
83
+ * is the same for every limit, so it reveals nothing about the key, such as whether an account
84
+ * exists. Every limit with a key adds its {@link policy} to `RateLimit-Policy`.
85
+ */
86
+ export declare function check(c: Context<Env>, options: check.Options): Promise<(Response & import("hono").TypedResponse<{
87
+ error: "temporarily_unavailable";
88
+ reason: "rate_limited";
89
+ error_description: string;
90
+ error_uri: string;
91
+ field?: string | undefined;
92
+ meta?: {
93
+ readonly [x: string]: string | number;
94
+ } | undefined;
95
+ request_id?: string | undefined;
96
+ }, 429, "json">) | undefined>;
97
+ export declare namespace check {
98
+ type Options = {
99
+ /** The counters the request counts against, broadest first. */
100
+ limits: readonly {
101
+ /** The limiter's binding name, which sets the limit. */
102
+ binding: Limits.Limit;
103
+ /** The counter's key, or `undefined` to skip it. Keys never hold secrets, codes, or tokens. */
104
+ key: string | undefined;
105
+ }[];
106
+ };
107
+ }
108
+ export declare namespace check {
109
+ /** The refusal `check` returns. */
110
+ const errors: readonly [typeof LimitedError];
111
+ }
112
+ /**
113
+ * Adds `policy` to the response's `RateLimit-Policy`, as `"<name>";q=<quota>;w=<window>`. A
114
+ * response that counts against several policies lists each once. It reads no binding, so a page
115
+ * loader's context can call it too.
116
+ */
117
+ export declare function describe(c: Context, options: describe.Options): void;
118
+ export declare namespace describe {
119
+ type Options = {
120
+ /** The policy the request counts against. */
121
+ policy: Policy;
122
+ };
123
+ }
124
+ /**
125
+ * Returns the key for a normalized email address: its SHA-256 hash, so the counters hold no
126
+ * address.
127
+ */
128
+ export declare function email(options: email.Options): `0x${string}`;
129
+ export declare namespace email {
130
+ type Options = {
131
+ /** The trimmed, lowercased address. */
132
+ email: string;
133
+ };
134
+ }
135
+ /** Instantiates a {@link Policy}. */
136
+ export declare function from(policy: Policy): Policy;
137
+ /**
138
+ * Returns the client's key from `cf-connecting-ip`, or `undefined` for a request without one, such
139
+ * as an in-process call. An IPv6 address keys on its /64 prefix, since one subscriber usually holds
140
+ * the whole prefix and could otherwise rotate addresses within it. A Worker in another zone keys on
141
+ * that zone, since every such Worker arrives from the same address.
142
+ */
143
+ export declare function ip(c: ip.Context): string | undefined;
144
+ export declare namespace ip {
145
+ /** The request context, of which `ip` reads only the headers. */
146
+ type Context = {
147
+ req: {
148
+ header: (name: string) => string | undefined;
149
+ };
150
+ };
151
+ }
152
+ /**
153
+ * Returns a binding's {@link Policy}: its limit and period from `Limits`. The policy's name is the
154
+ * binding's name without its `_LIMIT` suffix, in kebab case, such as `sign-in-ip` for
155
+ * `SIGN_IN_IP_LIMIT`.
156
+ */
157
+ export declare function policy(options: policy.Options): Policy;
158
+ export declare namespace policy {
159
+ type Options = {
160
+ /** The limiter's binding name. */
161
+ binding: Limits.Limit;
162
+ };
163
+ }
164
+ /**
165
+ * Returns a 429 response with `Retry-After`, and `RateLimit` naming the spent `policy` with no
166
+ * quota left (`r=0`) for `retryAfter` seconds (`t`). The body names no key or limit, so it reveals
167
+ * nothing about the key, such as whether an account exists. It reads no binding, so a page
168
+ * loader's context can call it too.
169
+ */
170
+ export declare function refuse(c: Context, options: refuse.Options): Response & import("hono").TypedResponse<{
171
+ error: "temporarily_unavailable";
172
+ reason: "rate_limited";
173
+ error_description: string;
174
+ error_uri: string;
175
+ field?: string | undefined;
176
+ meta?: {
177
+ readonly [x: string]: string | number;
178
+ } | undefined;
179
+ request_id?: string | undefined;
180
+ }, 429, "json">;
181
+ export declare namespace refuse {
182
+ type Options = {
183
+ /** The spent policy. */
184
+ policy: Policy;
185
+ /** Seconds until a retry can succeed, at most the policy's window. */
186
+ retryAfter: number;
187
+ };
188
+ }
189
+ export {};
190
+ //# sourceMappingURL=RateLimit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimit.d.ts","sourceRoot":"","sources":["../../src/internal/RateLimit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,148 @@
1
+ import { Bytes, Hash } from 'ox';
2
+ import * as ErrorResponse from './ErrorResponse.js';
3
+ import * as Limits from './Limits.js';
4
+ import * as Log from './Log.js';
5
+ import * as Timing from './Timing.js';
6
+ /** A request exceeded one of Tempo ID's rate limits. */
7
+ export class LimitedError extends ErrorResponse.define('rate_limited') {
8
+ name = 'RateLimit.LimitedError';
9
+ constructor(options) {
10
+ super({
11
+ error_description: `Too many requests. Retry after ${options.retryAfter} seconds.`,
12
+ });
13
+ }
14
+ }
15
+ /**
16
+ * The address Cloudflare gives every Worker subrequest from another zone, whatever Worker sends it.
17
+ * Cloudflare names the calling zone in `cf-worker` instead.
18
+ */
19
+ const workers = '2a06:98c0:3600::103';
20
+ /** The response headers a rate-limited route may send, which cross-origin callers need exposed. */
21
+ export const headers = ['RateLimit', 'RateLimit-Policy', 'Retry-After'];
22
+ /**
23
+ * Counts the request against each limit in order, and returns a 429 response with `Retry-After` at
24
+ * the first one spent, or `undefined`. A limit without a key is skipped, and so is an
25
+ * {@link Limits.optional} limit without a binding, with a warning. The limits after a refusal are not
26
+ * counted, so a refused caller spends no narrower quota, such as an address's. The response
27
+ * is the same for every limit, so it reveals nothing about the key, such as whether an account
28
+ * exists. Every limit with a key adds its {@link policy} to `RateLimit-Policy`.
29
+ */
30
+ export async function check(c, options) {
31
+ // A deployment whose Wrangler config predates an optional limit has no binding for it. Any other
32
+ // missing binding throws below, so a misconfigured deployment fails closed.
33
+ const bindings = c.env;
34
+ const limits = options.limits.flatMap((limit) => {
35
+ if (limit.key === undefined)
36
+ return [];
37
+ if (!bindings[limit.binding] && Limits.optional.includes(limit.binding)) {
38
+ Log.warn(c, {
39
+ fields: { binding: limit.binding },
40
+ message: 'A rate limit has no binding, so the request is not counted.',
41
+ });
42
+ return [];
43
+ }
44
+ return [
45
+ {
46
+ ...limit,
47
+ key: limit.key,
48
+ policy: policy({ binding: limit.binding }),
49
+ },
50
+ ];
51
+ });
52
+ for (const limit of limits)
53
+ describe(c, { policy: limit.policy });
54
+ for (const limit of limits) {
55
+ const outcome = await Timing.measure(c, c.env[limit.binding].limit({ key: limit.key }), 'ratelimit.limit');
56
+ // The binding reports no reset, and every counter restarts once a window passes.
57
+ if (!outcome.success)
58
+ return refuse(c, {
59
+ policy: limit.policy,
60
+ retryAfter: limit.policy.window,
61
+ });
62
+ }
63
+ return undefined;
64
+ }
65
+ (function (check) {
66
+ /** The refusal `check` returns. */
67
+ check.errors = [LimitedError];
68
+ })(check || (check = {}));
69
+ /**
70
+ * Adds `policy` to the response's `RateLimit-Policy`, as `"<name>";q=<quota>;w=<window>`. A
71
+ * response that counts against several policies lists each once. It reads no binding, so a page
72
+ * loader's context can call it too.
73
+ */
74
+ export function describe(c, options) {
75
+ const { policy } = options;
76
+ c.header('ratelimit-policy', `"${policy.name}";q=${policy.quota};w=${policy.window}`, { append: true });
77
+ }
78
+ /**
79
+ * Returns the key for a normalized email address: its SHA-256 hash, so the counters hold no
80
+ * address.
81
+ */
82
+ export function email(options) {
83
+ return Hash.sha256(Bytes.fromString(options.email), { as: 'Hex' });
84
+ }
85
+ /** Instantiates a {@link Policy}. */
86
+ export function from(policy) {
87
+ return policy;
88
+ }
89
+ /**
90
+ * Returns the client's key from `cf-connecting-ip`, or `undefined` for a request without one, such
91
+ * as an in-process call. An IPv6 address keys on its /64 prefix, since one subscriber usually holds
92
+ * the whole prefix and could otherwise rotate addresses within it. A Worker in another zone keys on
93
+ * that zone, since every such Worker arrives from the same address.
94
+ */
95
+ export function ip(c) {
96
+ const address = c.req.header('cf-connecting-ip');
97
+ // Only Cloudflare sends from this address, so `cf-worker` names the calling zone and is not the
98
+ // caller's to choose.
99
+ if (address === workers)
100
+ return `worker:${c.req.header('cf-worker') ?? ''}`;
101
+ // An IPv4 address, or an IPv6 address that embeds one, keys whole.
102
+ if (!address?.includes(':') || address.includes('.'))
103
+ return address;
104
+ const [head, tail] = address.toLowerCase().split('::');
105
+ const left = head ? head.split(':') : [];
106
+ const right = tail ? tail.split(':') : [];
107
+ const groups = tail === undefined
108
+ ? left
109
+ : [
110
+ ...left,
111
+ ...Array(Math.max(0, 8 - left.length - right.length)).fill('0'),
112
+ ...right,
113
+ ];
114
+ return `${groups
115
+ .slice(0, 4)
116
+ .map((group) => group.replace(/^0+(?=.)/, ''))
117
+ .join(':')}::/64`;
118
+ }
119
+ /**
120
+ * Returns a binding's {@link Policy}: its limit and period from `Limits`. The policy's name is the
121
+ * binding's name without its `_LIMIT` suffix, in kebab case, such as `sign-in-ip` for
122
+ * `SIGN_IN_IP_LIMIT`.
123
+ */
124
+ export function policy(options) {
125
+ const { binding } = options;
126
+ const config = Limits.limits[binding];
127
+ return from({
128
+ name: binding
129
+ .replace(/_LIMIT$/, '')
130
+ .toLowerCase()
131
+ .replaceAll('_', '-'),
132
+ quota: config.limit,
133
+ window: config.period,
134
+ });
135
+ }
136
+ /**
137
+ * Returns a 429 response with `Retry-After`, and `RateLimit` naming the spent `policy` with no
138
+ * quota left (`r=0`) for `retryAfter` seconds (`t`). The body names no key or limit, so it reveals
139
+ * nothing about the key, such as whether an account exists. It reads no binding, so a page
140
+ * loader's context can call it too.
141
+ */
142
+ export function refuse(c, options) {
143
+ const { policy, retryAfter } = options;
144
+ c.header('ratelimit', `"${policy.name}";r=0;t=${retryAfter}`);
145
+ c.header('retry-after', String(retryAfter));
146
+ return ErrorResponse.json(c, new LimitedError({ retryAfter }));
147
+ }
148
+ //# sourceMappingURL=RateLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RateLimit.js","sourceRoot":"","sources":["../../src/internal/RateLimit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,281 @@
1
+ /**
2
+ * Realms: the sets of Tempo Accounts that apps reach. The `realms` table holds each realm, and its
3
+ * owner configurations live in their own tables: `realm_passkeys` for its passkey relying party,
4
+ * `realm_privy` for its Privy app, and `realm_secp256k1` for the secp256k1 owners that Tempo ID
5
+ * holds. The `app_realms` table maps each OAuth app to its realms, in order. An app without rows
6
+ * reaches the `default` realm.
7
+ * @module
8
+ */
9
+ import type { PgDatabase, PgQueryResultHKT } from 'drizzle-orm/pg-core';
10
+ import { z } from 'zod';
11
+ import * as Schema from '../app/db/schema.js';
12
+ import type * as Privy from './Privy.js';
13
+ /** An app names the realm, so the realm cannot be removed. */
14
+ export declare class InUseError extends Error {
15
+ readonly name = "Realm.InUseError";
16
+ constructor(options: {
17
+ id: string;
18
+ });
19
+ }
20
+ /** A realm ID, a name, a Privy app, or a list of realms is not valid. */
21
+ export declare class InvalidError extends Error {
22
+ readonly name = "Realm.InvalidError";
23
+ }
24
+ /** No OAuth app has the client ID. */
25
+ export declare class NotFoundAppError extends Error {
26
+ readonly name = "Realm.NotFoundAppError";
27
+ constructor(options: {
28
+ clientId: string;
29
+ });
30
+ }
31
+ /** No realm has the ID. */
32
+ export declare class NotFoundError extends Error {
33
+ readonly name = "Realm.NotFoundError";
34
+ constructor(options: {
35
+ id: string;
36
+ });
37
+ }
38
+ /** A realm with the ID exists. */
39
+ export declare class TakenError extends Error {
40
+ readonly name = "Realm.TakenError";
41
+ constructor(options: {
42
+ id: string;
43
+ });
44
+ }
45
+ /** Another realm holds the passkey relying party. A passkey belongs to exactly one relying party. */
46
+ export declare class TakenPasskeysError extends Error {
47
+ readonly name = "Realm.TakenPasskeysError";
48
+ constructor(options: {
49
+ rpId: string;
50
+ });
51
+ }
52
+ /** Another realm holds the Privy app. Realms that shared one would list the same accounts. */
53
+ export declare class TakenPrivyAppError extends Error {
54
+ readonly name = "Realm.TakenPrivyAppError";
55
+ constructor(options: {
56
+ appId: string;
57
+ });
58
+ }
59
+ /** A database with Tempo ID's tables, through any Postgres driver. */
60
+ export type Database = PgDatabase<PgQueryResultHKT, typeof Schema>;
61
+ /** One set of Tempo Accounts, which only the apps that name it reach. */
62
+ export type Realm = {
63
+ /** The realm ID, such as `default` or `tempo-cash`. */
64
+ id: string;
65
+ /** The display name, which labels the realm's accounts, such as `Tempo Cash`. */
66
+ name: string;
67
+ /** The passkey relying party whose passkeys own accounts in the realm. `undefined` when the realm has none. */
68
+ passkeys: {
69
+ /** The relying party ID, a registrable domain such as `tempo.xyz`. */
70
+ rpId: string;
71
+ } | undefined;
72
+ /** The Privy app that holds the realm's Privy owners. `undefined` when the realm has none. */
73
+ privy: {
74
+ /** The Privy app ID. */
75
+ appId: string;
76
+ } | undefined;
77
+ /** Whether Tempo ID holds the realm's secp256k1 owners itself, as in the suites and local development. */
78
+ secp256k1: boolean;
79
+ };
80
+ /** The ID of the realm that every app without rows in `app_realms` reaches. */
81
+ export declare const defaultId = "default";
82
+ /** Zod schemas for the values that define realms. */
83
+ export declare namespace schema {
84
+ /** A realm ID, in lowercase kebab case. */
85
+ const id: z.ZodString;
86
+ /** A realm, as `add` receives it. */
87
+ const realm: z.ZodObject<{
88
+ id: z.ZodString;
89
+ name: z.ZodString;
90
+ }, z.core.$strip>;
91
+ /** A realm's passkey relying party, as `setPasskeys` receives it. */
92
+ const passkeys: z.ZodObject<{
93
+ realmId: z.ZodString;
94
+ rpId: z.ZodString;
95
+ }, z.core.$strip>;
96
+ /** A realm's Privy app, as `setPrivy` receives it. */
97
+ const privy: z.ZodObject<{
98
+ appId: z.ZodString;
99
+ appSecret: z.ZodString;
100
+ realmId: z.ZodString;
101
+ }, z.core.$strip>;
102
+ /** An app's realms, in order, each named once. */
103
+ const realms: z.ZodArray<z.ZodString>;
104
+ }
105
+ /**
106
+ * Adds a realm without owner configurations, and returns it.
107
+ *
108
+ * Throws `InvalidError` for an invalid value, and `TakenError` when the ID exists.
109
+ */
110
+ export declare function add(db: Database, options: add.Options): Promise<Realm>;
111
+ export declare namespace add {
112
+ type Options = {
113
+ /** The realm ID, in lowercase kebab case, such as `tempo-cash`. */
114
+ id: string;
115
+ /** The display name, such as `Tempo Cash`. */
116
+ name: string;
117
+ };
118
+ }
119
+ /**
120
+ * Returns the realms of the app with `clientId`, in order, in one query. The first realm holds a
121
+ * user's first account. An app without rows, or an unknown client ID, reaches the `default` realm.
122
+ */
123
+ export declare function forApp(db: Database, options: forApp.Options): Promise<readonly Realm[]>;
124
+ export declare namespace forApp {
125
+ type Options = {
126
+ /** The OAuth app's client ID. */
127
+ clientId: string;
128
+ };
129
+ }
130
+ /**
131
+ * Returns the realms that a request reaches for the app with `clientId`, in order. A request that
132
+ * names no app reaches the `default` realm. So does a browser page that names an app from an origin
133
+ * none of the app's redirect URIs has, since a page cannot read another app's accounts. A native app
134
+ * sends no `Origin`, and Tempo ID's own pages send `own`.
135
+ */
136
+ export declare function forRequest(db: Database, options: forRequest.Options): Promise<readonly Realm[]>;
137
+ export declare namespace forRequest {
138
+ type Options = {
139
+ /** The client ID that the request names, if any. */
140
+ clientId?: string | undefined;
141
+ /** The request's `Origin`, if any. */
142
+ origin?: string | undefined;
143
+ /** Tempo ID's own origin. */
144
+ own: string;
145
+ };
146
+ }
147
+ /**
148
+ * Instantiates a {@link Realm}.
149
+ *
150
+ * @example
151
+ * ```ts
152
+ * const realm = Realm.from({
153
+ * id: 'tempo-cash',
154
+ * name: 'Tempo Cash',
155
+ * privy: { appId: 'cm…' },
156
+ * secp256k1: false,
157
+ * })
158
+ * ```
159
+ */
160
+ export declare function from(value: Realm): Realm;
161
+ /** Returns the realm with `id`. Throws `NotFoundError` when no realm has it. */
162
+ export declare function get(db: Database, options: get.Options): Promise<Realm>;
163
+ export declare namespace get {
164
+ type Options = {
165
+ /** The realm ID, such as `tempo-cash`. */
166
+ id: string;
167
+ };
168
+ }
169
+ /** Returns every realm: `default` first, then the others by ID. */
170
+ export declare function list(db: Database): Promise<readonly Realm[]>;
171
+ /**
172
+ * Returns the Privy apps of `realms`, by realm ID, with each app secret decrypted with `secret`. A
173
+ * realm without a Privy app has no entry. Reads every realm in one query.
174
+ */
175
+ export declare function privyApps(db: Database, options: privyApps.Options): Promise<ReadonlyMap<string, Privy.App>>;
176
+ export declare namespace privyApps {
177
+ type Options = {
178
+ /** The realms whose Privy apps to read. */
179
+ realms: readonly Realm[];
180
+ /** The `SECRET` variable, which encrypts each app secret. */
181
+ secret: string;
182
+ };
183
+ }
184
+ /**
185
+ * Removes the realm with `id`, with its owner configurations.
186
+ *
187
+ * Throws `InvalidError` for an invalid ID or `default`, `NotFoundError` when no realm has the ID,
188
+ * and `InUseError` while an app names the realm.
189
+ */
190
+ export declare function remove(db: Database, options: remove.Options): Promise<void>;
191
+ export declare namespace remove {
192
+ type Options = {
193
+ /** The realm ID, such as `tempo-cash`. */
194
+ id: string;
195
+ };
196
+ }
197
+ /**
198
+ * Sets the realms of the app with `clientId`, in order, and returns them. An empty list removes the
199
+ * app's rows, so the app reaches the `default` realm.
200
+ *
201
+ * Throws `InvalidError` for an invalid ID or a repeated realm, `NotFoundAppError` when no OAuth app
202
+ * has the client ID, and `NotFoundError` when no realm has one of the IDs.
203
+ */
204
+ export declare function setForApp(db: Database, options: setForApp.Options): Promise<readonly Realm[]>;
205
+ export declare namespace setForApp {
206
+ type Options = {
207
+ /** The OAuth app's client ID. */
208
+ clientId: string;
209
+ /** The realm IDs, in order, such as `['default', 'tempo-cash']`. Empty for the `default` realm alone. */
210
+ realms: readonly string[];
211
+ };
212
+ }
213
+ /**
214
+ * Sets the passkey relying party of the realm with `realmId`, and returns the realm. It replaces an
215
+ * earlier relying party. Passkeys of that relying party then own accounts in the realm.
216
+ *
217
+ * Throws `InvalidError` for an invalid value, `NotFoundError` when no realm has the ID, and
218
+ * `TakenPasskeysError` when another realm holds the relying party.
219
+ */
220
+ export declare function setPasskeys(db: Database, options: setPasskeys.Options): Promise<Realm>;
221
+ export declare namespace setPasskeys {
222
+ type Options = {
223
+ /** The realm ID, such as `default`. */
224
+ realmId: string;
225
+ /** The relying party ID, a registrable domain such as `tempo.xyz`. */
226
+ rpId: string;
227
+ };
228
+ }
229
+ /**
230
+ * Sets the Privy app that holds the Privy owners of the realm with `realmId`, and returns the realm.
231
+ * It replaces an earlier Privy app. The row holds the app secret encrypted with `secret`.
232
+ *
233
+ * Throws `InvalidError` for an invalid value, `NotFoundError` when no realm has the ID, and
234
+ * `TakenPrivyAppError` when another realm holds the Privy app.
235
+ */
236
+ export declare function setPrivy(db: Database, options: setPrivy.Options): Promise<Realm>;
237
+ export declare namespace setPrivy {
238
+ type Options = {
239
+ /** The Privy app ID. */
240
+ appId: string;
241
+ /** The Privy app secret, which the row holds only encrypted. */
242
+ appSecret: string;
243
+ /** The realm ID, such as `tempo-cash`. */
244
+ realmId: string;
245
+ /** The `SECRET` variable, which encrypts the app secret. */
246
+ secret: string;
247
+ };
248
+ }
249
+ /**
250
+ * Sets whether Tempo ID holds the secp256k1 owners of the realm with `realmId`, and returns the
251
+ * realm. The realm then creates a user's first account with a key that Tempo ID holds. Turning it
252
+ * off keeps the realm's stored keys, and lists none of them.
253
+ *
254
+ * Throws `InvalidError` for an invalid ID, and `NotFoundError` when no realm has the ID.
255
+ */
256
+ export declare function setSecp256k1(db: Database, options: setSecp256k1.Options): Promise<Realm>;
257
+ export declare namespace setSecp256k1 {
258
+ type Options = {
259
+ /** Whether Tempo ID holds the realm's secp256k1 owners. */
260
+ enabled: boolean;
261
+ /** The realm ID, such as `default`. */
262
+ realmId: string;
263
+ };
264
+ }
265
+ /**
266
+ * Returns `realms` with the relying party that each one signs in with. The `default` realm without a
267
+ * `realm_passkeys` row signs in with passkeys of the registrable domain of `origin`, such as
268
+ * `tempo.xyz` for `https://id.tempo.xyz`, so every deployment offers passkeys without configuration. A row replaces that relying party. When another realm's row holds
269
+ * the host or a parent domain of it, `default` has none, since that realm's passkeys sign in at the
270
+ * same origin.
271
+ */
272
+ export declare function withDefaults(db: Database, options: withDefaults.Options): Promise<readonly Realm[]>;
273
+ export declare namespace withDefaults {
274
+ type Options = {
275
+ /** Tempo ID's origin, such as `https://id.tempo.xyz`. */
276
+ origin: string;
277
+ /** The realms that a request reaches, in order. */
278
+ realms: readonly Realm[];
279
+ };
280
+ }
281
+ //# sourceMappingURL=Realm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Realm.d.ts","sourceRoot":"","sources":["../../src/internal/Realm.ts"],"names":[],"mappings":"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"}