@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,347 @@
1
+ /**
2
+ * The account screen: the signed-in user, their Tempo Accounts with each balance and a deposit link,
3
+ * and sign-out.
4
+ * @module
5
+ */
6
+ import { Link } from '@tanstack/react-router'
7
+ import type { ReactNode } from 'react'
8
+ import ArrowDownToLine from '~icons/lucide/arrow-down-to-line'
9
+ import Cloud from '~icons/lucide/cloud'
10
+ import Fingerprint from '~icons/lucide/fingerprint'
11
+ import LogOut from '~icons/lucide/log-out'
12
+ import { Button } from '../components/Button.js'
13
+ import { ErrorMessage } from '../components/ErrorMessage.js'
14
+ import { Tooltip } from '../components/Tooltip.js'
15
+ import { style, variants } from '../zyzz.config.js'
16
+
17
+ /**
18
+ * The account screen. It names the user, lists their Tempo Accounts with each balance, oldest
19
+ * first, and offers sign-out. A lone account shows its balance large, without a list.
20
+ */
21
+ export function Account(props: Account.Props): ReactNode {
22
+ const { accounts } = props
23
+ const Title = props.heading ?? 'h1'
24
+ const Subtitle = props.heading === 'h4' ? 'h5' : 'h2'
25
+
26
+ return (
27
+ <div {...styles.column()}>
28
+ <header {...styles.header()}>
29
+ <span {...styles.avatar()} aria-hidden>
30
+ {(props.name || props.email).charAt(0).toUpperCase()}
31
+ </span>
32
+ <div {...styles.identity()}>
33
+ {/* The email heads the screen when the user has no name. */}
34
+ <Title {...styles.name()}>{props.name || props.email}</Title>
35
+ {props.name ? <p {...styles.email()}>{props.email}</p> : null}
36
+ </div>
37
+ </header>
38
+
39
+ {(() => {
40
+ if (!accounts)
41
+ return (
42
+ <ErrorMessage align="center">{props.accountError}</ErrorMessage>
43
+ )
44
+ if (!accounts.length)
45
+ return (
46
+ <p {...styles.hint()}>
47
+ You have no wallets yet. Sign in to an app to create one.
48
+ </p>
49
+ )
50
+ const only = accounts.length === 1 ? accounts[0] : undefined
51
+ // One wallet needs no list, so its balance leads the screen.
52
+ if (only)
53
+ return (
54
+ <section {...styles.single()} aria-label="Wallet">
55
+ <span {...styles.balance()} data-testid="balance">
56
+ {format(only.balance)}
57
+ </span>
58
+ <DepositLink entry={only} large />
59
+ </section>
60
+ )
61
+ return (
62
+ <section {...styles.accounts()}>
63
+ <Subtitle {...styles.label()}>Wallets</Subtitle>
64
+ <ul {...styles.list()} aria-label="Wallets">
65
+ {accounts.map((entry) => (
66
+ <li {...styles.row()} key={entry.address}>
67
+ {entry.owner === 'webAuthn' ? (
68
+ <Fingerprint {...styles.owner()} aria-hidden />
69
+ ) : (
70
+ <Cloud {...styles.owner()} aria-hidden />
71
+ )}
72
+ <span {...styles.kind()}>{kind(entry)}</span>
73
+ <span {...styles.amount()} data-testid="balance">
74
+ {format(entry.balance)}
75
+ </span>
76
+ <DepositLink entry={entry} />
77
+ </li>
78
+ ))}
79
+ </ul>
80
+ </section>
81
+ )
82
+ })()}
83
+
84
+ <Button
85
+ loading={props.signingOut}
86
+ onClick={props.onSignOut}
87
+ prefix={<LogOut {...styles.icon()} aria-hidden />}
88
+ variant="secondary"
89
+ >
90
+ Sign out
91
+ </Button>
92
+ <ErrorMessage align="center">{props.error}</ErrorMessage>
93
+ <p {...styles.status()} aria-live="polite" role="status">
94
+ {props.signingOut ? 'Signing out.' : undefined}
95
+ </p>
96
+ </div>
97
+ )
98
+ }
99
+
100
+ export declare namespace Account {
101
+ type Props = {
102
+ /** Why the accounts failed to load. It shows when `accounts` is `null`. */
103
+ accountError?: string | undefined
104
+ /** The user's Tempo Accounts in the `default` realm, oldest first, or `null` when they failed to load. */
105
+ accounts: readonly Entry[] | null
106
+ /** The signed-in user's email address. */
107
+ email: string
108
+ /** Why the sign-out failed. */
109
+ error?: string | undefined
110
+ /** The level of the screen's title: `h1` by default, or `h4` on the flows canvas, below the canvas's own headings. */
111
+ heading?: 'h1' | 'h4' | undefined
112
+ /** The user's name, which heads the screen when the user has one. */
113
+ name?: string | undefined
114
+ /** Signs the user out. */
115
+ onSignOut: () => void
116
+ /** Whether the sign-out is in progress, which holds the button. */
117
+ signingOut: boolean
118
+ }
119
+
120
+ /** One account, with its balance. */
121
+ type Entry = {
122
+ /** The account's address. */
123
+ address: `0x${string}`
124
+ /** The account's balance, or `null` when it failed to load. */
125
+ balance: Balance | null
126
+ /**
127
+ * Who holds the owner key: a Privy wallet (`privy`), a key that Tempo ID holds in development
128
+ * (`secp256k1`), or a passkey (`webAuthn`).
129
+ */
130
+ owner: 'privy' | 'secp256k1' | 'webAuthn'
131
+ }
132
+
133
+ /** A balance in one currency. */
134
+ type Balance = {
135
+ /** The amount, as a decimal string, such as `12.5`. */
136
+ amount: string
137
+ /** The ISO 4217 currency code, such as `USD`. */
138
+ currency: string
139
+ }
140
+ }
141
+
142
+ /** Links to the deposit page for one wallet, as an icon with a tooltip. */
143
+ function DepositLink(props: DepositLink.Props): ReactNode {
144
+ const { address } = props.entry
145
+ return (
146
+ <Tooltip label="Deposit">
147
+ <Link
148
+ {...styles.deposit({ size: props.large ? 'large' : 'small' })}
149
+ // The short address tells apart wallets of the same kind, which the row shows only by name.
150
+ aria-label={`Deposit to ${kind(props.entry)} wallet ${address.slice(0, 6)}…${address.slice(-4)}`}
151
+ search={{ address }}
152
+ to="/deposit"
153
+ >
154
+ <ArrowDownToLine
155
+ {...(props.large ? styles.depositIcon() : styles.icon())}
156
+ aria-hidden
157
+ />
158
+ </Link>
159
+ </Tooltip>
160
+ )
161
+ }
162
+
163
+ declare namespace DepositLink {
164
+ type Props = {
165
+ /** The wallet the deposit goes to. */
166
+ entry: Account.Entry
167
+ /** Whether the icon matches the size of a lone wallet's balance. */
168
+ large?: boolean | undefined
169
+ }
170
+ }
171
+
172
+ /**
173
+ * Formats a balance in its currency, or names its failed state. The locale is fixed, so the server
174
+ * and the browser render the same text.
175
+ */
176
+ function format(balance: Account.Entry['balance']) {
177
+ if (!balance) return 'Unavailable'
178
+ return new Intl.NumberFormat('en-US', {
179
+ currency: balance.currency,
180
+ style: 'currency',
181
+ // A decimal string keeps every digit, which a `Number` would round.
182
+ }).format(balance.amount as Intl.StringNumericLiteral)
183
+ }
184
+
185
+ /** Names an account by its owner. A Privy wallet is `Cloud`, since it is held for the user rather than on a device. */
186
+ function kind(entry: Account.Entry) {
187
+ return entry.owner === 'webAuthn' ? 'Passkey' : 'Cloud'
188
+ }
189
+
190
+ namespace styles {
191
+ export const accounts = style({ display: 'grid', gap: 2 })
192
+
193
+ export const amount = style({
194
+ fontVariantNumeric: 'tabular-nums',
195
+ marginLeft: 'auto',
196
+ typography: 'label.14',
197
+ })
198
+
199
+ export const avatar = style({
200
+ alignItems: 'center',
201
+ backgroundColor: 'foreground',
202
+ backgroundImage: 'sheen',
203
+ borderRadius: 'full',
204
+ color: 'background.surface',
205
+ display: 'flex',
206
+ flexShrink: 0,
207
+ height: 16,
208
+ justifyContent: 'center',
209
+ typography: 'heading.24',
210
+ width: 16,
211
+ })
212
+
213
+ export const balance = style({
214
+ fontVariantNumeric: 'tabular-nums',
215
+ letterSpacing: 'balance',
216
+ typography: 'heading.32',
217
+ })
218
+
219
+ export const column = style({
220
+ display: 'grid',
221
+ gap: 8,
222
+ maxWidth: 'sm',
223
+ width: 'full',
224
+ })
225
+
226
+ // Pseudo-elements make the touch target and the hover fill larger than the icon. The icon sits
227
+ // above the fill. In a row the fill stays smaller than the hit area, so a gap stays before the
228
+ // balance.
229
+ export const deposit = variants({
230
+ base: {
231
+ borderRadius: 'full',
232
+ color: 'gray.900',
233
+ display: 'flex',
234
+ flexShrink: 0,
235
+ outline: 'none',
236
+ position: 'relative',
237
+ '& > svg': { position: 'relative', zIndex: 1 },
238
+ '&::before': {
239
+ content: '""',
240
+ inset: 'bleed',
241
+ position: 'absolute',
242
+ },
243
+ '&::after': {
244
+ borderRadius: 'full',
245
+ content: '""',
246
+ position: 'absolute',
247
+ },
248
+ ':focus-visible': {
249
+ outline: '2px solid',
250
+ outlineColor: 'blue.700',
251
+ outlineOffset: '2px',
252
+ },
253
+ ':hover': { color: 'foreground' },
254
+ ':hover::after': { backgroundColor: 'grayAlpha.200' },
255
+ },
256
+ variants: {
257
+ size: {
258
+ large: { '&::after': { inset: 'bleed' } },
259
+ small: { '&::after': { inset: 'bleedSmall' } },
260
+ },
261
+ },
262
+ })
263
+
264
+ export const depositIcon = style({ height: 6, width: 6 })
265
+
266
+ export const email = style({ color: 'gray.900', typography: 'copy.16' })
267
+
268
+ export const header = style({
269
+ display: 'grid',
270
+ gap: 3,
271
+ justifyItems: 'center',
272
+ textAlign: 'center',
273
+ })
274
+
275
+ export const hint = style({
276
+ color: 'gray.900',
277
+ textAlign: 'center',
278
+ textWrap: 'balance',
279
+ typography: 'copy.14',
280
+ })
281
+
282
+ export const icon = style({ height: 4, width: 4 })
283
+
284
+ export const identity = style({ display: 'grid', gap: 1, minWidth: 0 })
285
+
286
+ export const kind = style({
287
+ fontWeight: 'medium',
288
+ minWidth: 0,
289
+ overflow: 'hidden',
290
+ textOverflow: 'ellipsis',
291
+ typography: 'label.14',
292
+ whiteSpace: 'nowrap',
293
+ })
294
+
295
+ export const label = style({
296
+ color: 'gray.900',
297
+ paddingInline: 4,
298
+ typography: 'label.14',
299
+ })
300
+
301
+ // A gray group, as in Link's settings, whose rows need no dividers.
302
+ export const list = style({
303
+ backgroundColor: 'gray.100',
304
+ borderRadius: '2xl',
305
+ display: 'grid',
306
+ listStyle: 'none',
307
+ margin: 0,
308
+ overflow: 'hidden',
309
+ padding: 0,
310
+ })
311
+
312
+ export const name = style({
313
+ overflowWrap: 'anywhere',
314
+ typography: 'heading.24',
315
+ })
316
+
317
+ export const owner = style({
318
+ color: 'gray.900',
319
+ flexShrink: 0,
320
+ height: 4,
321
+ width: 4,
322
+ })
323
+
324
+ export const row = style({
325
+ alignItems: 'center',
326
+ display: 'flex',
327
+ gap: 3,
328
+ justifyContent: 'space-between',
329
+ paddingBlock: 3,
330
+ paddingInline: 4,
331
+ })
332
+
333
+ // The balance on the left and its deposit link on the right, inset like the list's rows.
334
+ export const single = style({
335
+ alignItems: 'center',
336
+ display: 'flex',
337
+ gap: 3,
338
+ justifyContent: 'space-between',
339
+ paddingInline: 4,
340
+ })
341
+
342
+ export const status = style({
343
+ color: 'gray.900',
344
+ textAlign: 'center',
345
+ typography: 'copy.14',
346
+ })
347
+ }
@@ -0,0 +1,276 @@
1
+ /**
2
+ * The approval screen for an app's authorization request, with the key that it requests, and the
3
+ * screen for a request that the approval page cannot show. The layout follows the
4
+ * approval screen of the WorkOS implementation.
5
+ * @module
6
+ */
7
+ import type { ReactNode } from 'react'
8
+ import BadgeCheck from '~icons/lucide/badge-check'
9
+ import Globe from '~icons/lucide/globe'
10
+ import type * as KeyAuthorization from '../../internal/KeyAuthorization.js'
11
+ import { Button } from '../components/Button.js'
12
+ import { ErrorMessage } from '../components/ErrorMessage.js'
13
+ import { Grant } from '../components/Grant.js'
14
+ import { Tooltip } from '../components/Tooltip.js'
15
+ import { style } from '../zyzz.config.js'
16
+
17
+ /**
18
+ * The approval screen. It names the app, shows the key that the app requests and any message that
19
+ * the key signs, and approves or denies the request. A key that
20
+ * approval cannot sign holds the approval, and the screen states why.
21
+ */
22
+ export function Approval(props: Approval.Props): ReactNode {
23
+ const Title = props.heading ?? 'h1'
24
+ const pending = props.approving || props.denying
25
+ const refusal = props.refusal ?? props.keyAuthorization?.refusal
26
+ return (
27
+ <div {...styles.column()}>
28
+ <header {...styles.header()}>
29
+ {/* Apps have no logos, so every app shows a globe in their place. */}
30
+ <span {...styles.avatar()}>
31
+ <Globe {...styles.avatarIcon()} aria-hidden />
32
+ </span>
33
+ <Title {...styles.title()}>Authorize this app</Title>
34
+ <p {...styles.description()}>
35
+ Approve to let{' '}
36
+ <span {...styles.app()}>
37
+ <strong>{props.app}</strong>{' '}
38
+ <Tooltip label="Verified app">
39
+ <BadgeCheck
40
+ {...styles.badge()}
41
+ aria-label="Verified"
42
+ role="img"
43
+ tabIndex={0}
44
+ />
45
+ </Tooltip>
46
+ </span>{' '}
47
+ use your Tempo Account.
48
+ </p>
49
+ </header>
50
+
51
+ <div {...styles.stack()}>
52
+ {props.keyAuthorization ? (
53
+ <Grant
54
+ heading={props.heading === 'h4' ? 'h5' : 'h2'}
55
+ keyAuthorization={props.keyAuthorization}
56
+ />
57
+ ) : null}
58
+ {props.keyAuthorization?.challenge ? (
59
+ <div {...styles.challenge()} role="note">
60
+ <p {...styles.challengeTitle()}>
61
+ This sign-in also signs a message
62
+ </p>
63
+ <p {...styles.challengeText()}>
64
+ Approve only if you started this sign-in and expect this message.
65
+ </p>
66
+ <pre {...styles.message()}>{props.keyAuthorization.challenge}</pre>
67
+ </div>
68
+ ) : null}
69
+ <Button
70
+ disabled={props.denying || Boolean(refusal)}
71
+ loading={props.approving}
72
+ onClick={props.onApprove}
73
+ >
74
+ Approve
75
+ </Button>
76
+ <Button
77
+ disabled={props.approving}
78
+ loading={props.denying}
79
+ onClick={props.onDeny}
80
+ variant="tertiary"
81
+ >
82
+ Deny
83
+ </Button>
84
+ <p {...styles.note()}>
85
+ Signed in as <strong>{props.email}</strong>. Either choice returns you
86
+ to <strong>{props.destination}</strong>.
87
+ </p>
88
+ <p {...styles.status()} aria-live="polite" role="status">
89
+ {pending ? `Returning to ${props.destination}.` : undefined}
90
+ </p>
91
+ </div>
92
+ {/* A failed decision outranks the refusal, whose only action is the denial that failed. */}
93
+ <ErrorMessage>
94
+ {props.error ?? (refusal ? refusals[refusal] : undefined)}
95
+ </ErrorMessage>
96
+ </div>
97
+ )
98
+ }
99
+
100
+ export declare namespace Approval {
101
+ type Props = {
102
+ /** The app's display name. */
103
+ app: string
104
+ /** Whether the approval is in progress, which holds both buttons. */
105
+ approving: boolean
106
+ /** Whether the denial is in progress, which holds both buttons. */
107
+ denying: boolean
108
+ /** The host of the app's redirect URI, or its scheme for a native app. */
109
+ destination: string
110
+ /** The signed-in user's address. */
111
+ email: string
112
+ /** Why the decision failed. */
113
+ error?: string | undefined
114
+ /** The level of the screen's title: `h1` by default, or `h4` on the flows canvas, below the canvas's own headings. */
115
+ heading?: 'h1' | 'h4' | undefined
116
+ /** The key that the app requests, if any. */
117
+ keyAuthorization?: Key | undefined
118
+ /** Approves the request. */
119
+ onApprove: () => void
120
+ /** Denies the request, which returns the browser to the app with `access_denied`. */
121
+ onDeny: () => void
122
+ /**
123
+ * Why approval cannot sign the key, which holds the approval. Takes the place of the key's own
124
+ * `refusal`, such as after an approval that the API refused.
125
+ */
126
+ refusal?: Refusal | undefined
127
+ }
128
+
129
+ /** A key that the app requests, as the approval page shows it. */
130
+ type Key = KeyAuthorization.Description & {
131
+ /** The message that the key's witness binds, such as a sign-in challenge from the app. */
132
+ challenge?: string | undefined
133
+ /** Why approval cannot sign the key. Absent when it can. */
134
+ refusal?: Refusal | undefined
135
+ }
136
+
137
+ /**
138
+ * Why approval cannot sign a key: a passkey that the page cannot use owns the account, the user
139
+ * holds no account, or the user's accounts could not be read.
140
+ */
141
+ type Refusal = 'no_account' | 'passkey' | 'unavailable'
142
+ }
143
+
144
+ /** The screen for an authorization request that the approval page cannot show, with the reason. */
145
+ export function InvalidRequest(props: InvalidRequest.Props): ReactNode {
146
+ const Title = props.heading ?? 'h1'
147
+ return (
148
+ <div {...styles.column()}>
149
+ <header {...styles.header()}>
150
+ <Title {...styles.title()}>This sign-in request is invalid</Title>
151
+ <p {...styles.description()}>
152
+ The app sent a request Tempo ID cannot complete. Return to the app and
153
+ try again.
154
+ </p>
155
+ </header>
156
+ </div>
157
+ )
158
+ }
159
+
160
+ export declare namespace InvalidRequest {
161
+ type Props = {
162
+ /** The level of the screen's title: `h1` by default, or `h4` on the flows canvas, below the canvas's own headings. */
163
+ heading?: 'h1' | 'h4' | undefined
164
+ }
165
+ }
166
+
167
+ /** Why approval cannot sign a key, as the screen states it. */
168
+ const refusals: Record<Approval.Refusal, string> = {
169
+ no_account:
170
+ 'You have no Tempo Account for this app yet, so no account can approve the key. Deny the request, create an account in the app, and try again.',
171
+ passkey:
172
+ 'This Tempo Account signs with a passkey that this page cannot use. Deny the request, and return to the app.',
173
+ unavailable:
174
+ 'Tempo ID cannot read your Tempo Account right now. Reload the page in a minute, or deny the request.',
175
+ }
176
+
177
+ namespace styles {
178
+ // The app's name and badge wrap as one word, so a hyphenated name never splits.
179
+ export const app = style({ whiteSpace: 'nowrap' })
180
+
181
+ export const avatar = style({
182
+ alignItems: 'center',
183
+ backgroundColor: 'background.surface',
184
+ border: '1px solid',
185
+ borderColor: 'gray.400',
186
+ borderRadius: 'full',
187
+ boxShadow: 'sm',
188
+ color: 'gray.900',
189
+ display: 'flex',
190
+ height: 14,
191
+ justifyContent: 'center',
192
+ marginBottom: 3,
193
+ width: 14,
194
+ })
195
+
196
+ export const avatarIcon = style({ height: 6, width: 6 })
197
+
198
+ export const badge = style({
199
+ display: 'inline',
200
+ height: 4,
201
+ outline: 'none',
202
+ verticalAlign: 'middle',
203
+ width: 4,
204
+ ':focus-visible': {
205
+ outline: '2px solid',
206
+ outlineColor: 'blue.700',
207
+ outlineOffset: '2px',
208
+ },
209
+ })
210
+
211
+ export const challenge = style({
212
+ backgroundColor: 'amber.100',
213
+ borderRadius: '2xl',
214
+ display: 'grid',
215
+ gap: 2,
216
+ padding: 4,
217
+ })
218
+
219
+ export const challengeText = style({
220
+ color: 'foreground',
221
+ typography: 'copy.14',
222
+ })
223
+
224
+ export const challengeTitle = style({
225
+ color: 'amber.900',
226
+ typography: 'label.14',
227
+ })
228
+
229
+ export const column = style({
230
+ display: 'grid',
231
+ gap: 8,
232
+ maxWidth: 'sm',
233
+ width: 'full',
234
+ })
235
+
236
+ export const description = style({
237
+ color: 'gray.900',
238
+ textWrap: 'balance',
239
+ typography: 'copy.16',
240
+ '& strong': { color: 'foreground', fontWeight: 'medium' },
241
+ })
242
+
243
+ export const header = style({
244
+ display: 'grid',
245
+ gap: 2,
246
+ justifyItems: 'center',
247
+ textAlign: 'center',
248
+ })
249
+
250
+ export const message = style({
251
+ margin: 0,
252
+ overflowWrap: 'anywhere',
253
+ typography: 'copy.13.mono',
254
+ whiteSpace: 'pre-wrap',
255
+ })
256
+
257
+ export const note = style({
258
+ color: 'gray.900',
259
+ textAlign: 'center',
260
+ typography: 'copy.14',
261
+ '& strong': { color: 'foreground', fontWeight: 'medium' },
262
+ })
263
+
264
+ export const stack = style({ display: 'grid', gap: 4 })
265
+
266
+ export const status = style({
267
+ color: 'gray.900',
268
+ textAlign: 'center',
269
+ typography: 'copy.14',
270
+ })
271
+
272
+ export const title = style({
273
+ textWrap: 'balance',
274
+ typography: 'heading.24',
275
+ })
276
+ }