tapimo 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (385) hide show
  1. package/README.md +28 -15
  2. package/dist/ApiKey.d.ts +3 -1
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +1 -0
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +71 -3
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +117 -1
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +7139 -4197
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +133 -329
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +11 -4
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +12 -4
  17. package/dist/Scope.js.map +1 -1
  18. package/dist/Webhooks.d.ts +2 -2
  19. package/dist/Webhooks.d.ts.map +1 -1
  20. package/dist/Webhooks.js +2 -2
  21. package/dist/Webhooks.js.map +1 -1
  22. package/dist/admin/App.d.ts +126 -53
  23. package/dist/admin/App.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.d.ts +104 -6
  25. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  26. package/dist/admin/apps/api-keys.js +67 -0
  27. package/dist/admin/apps/api-keys.js.map +1 -1
  28. package/dist/admin/apps/scopes.d.ts +4 -1
  29. package/dist/admin/apps/scopes.d.ts.map +1 -1
  30. package/dist/admin/apps/verified-tokens.d.ts +115 -115
  31. package/dist/admin/apps/verified-tokens.js +1 -1
  32. package/dist/admin/apps/verified-tokens.js.map +1 -1
  33. package/dist/admin/ui.generated.d.ts +1 -1
  34. package/dist/admin/ui.generated.js +1 -1
  35. package/dist/apps/data/App.d.ts +19176 -0
  36. package/dist/apps/data/App.d.ts.map +1 -0
  37. package/dist/apps/data/App.js +236 -0
  38. package/dist/apps/data/App.js.map +1 -0
  39. package/dist/apps/data/index.d.ts +3 -0
  40. package/dist/apps/data/index.d.ts.map +1 -0
  41. package/dist/apps/data/index.js +3 -0
  42. package/dist/apps/data/index.js.map +1 -0
  43. package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
  44. package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
  45. package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
  46. package/dist/apps/data/routes/activities.js.map +1 -0
  47. package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
  48. package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
  49. package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
  50. package/dist/apps/data/routes/addresses.js.map +1 -0
  51. package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +49 -49
  52. package/dist/apps/data/routes/balances.d.ts.map +1 -0
  53. package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
  54. package/dist/apps/data/routes/balances.js.map +1 -0
  55. package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
  56. package/dist/apps/data/routes/blocks.d.ts.map +1 -0
  57. package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
  58. package/dist/apps/data/routes/blocks.js.map +1 -0
  59. package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +183 -183
  60. package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
  61. package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
  62. package/dist/apps/data/routes/coingecko.js.map +1 -0
  63. package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +460 -460
  64. package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
  65. package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
  66. package/dist/apps/data/routes/exchanges.js.map +1 -0
  67. package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +94 -94
  68. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
  69. package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
  70. package/dist/apps/data/routes/fee-amm.js.map +1 -0
  71. package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  72. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  73. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  74. package/dist/apps/data/routes/indexer.js.map +1 -0
  75. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +49 -49
  76. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  77. package/dist/apps/{receipts.js → data/routes/receipts.js} +12 -12
  78. package/dist/apps/data/routes/receipts.js.map +1 -0
  79. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +4 -4
  80. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  81. package/dist/apps/{rpc.js → data/routes/rpc.js} +6 -6
  82. package/dist/apps/data/routes/rpc.js.map +1 -0
  83. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +4 -4
  84. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  85. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  86. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  87. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +468 -468
  88. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  89. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  90. package/dist/apps/data/routes/tokens.js.map +1 -0
  91. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +304 -304
  92. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  93. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  94. package/dist/apps/data/routes/transactions.js.map +1 -0
  95. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +6 -6
  96. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  97. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  98. package/dist/apps/data/routes/transfers.js.map +1 -0
  99. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +42 -42
  100. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  101. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  102. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  103. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +62 -62
  104. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  105. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +30 -26
  106. package/dist/apps/data/routes/webhooks.js.map +1 -0
  107. package/dist/apps/docs/App.d.ts +27 -0
  108. package/dist/apps/docs/App.d.ts.map +1 -0
  109. package/dist/apps/docs/App.js +122 -0
  110. package/dist/apps/docs/App.js.map +1 -0
  111. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  112. package/dist/apps/docs/fonts.d.ts.map +1 -0
  113. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  114. package/dist/apps/docs/fonts.js.map +1 -0
  115. package/dist/apps/docs/index.d.ts +2 -0
  116. package/dist/apps/docs/index.d.ts.map +1 -0
  117. package/dist/apps/docs/index.js +2 -0
  118. package/dist/apps/docs/index.js.map +1 -0
  119. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  120. package/dist/apps/docs/logo.d.ts.map +1 -0
  121. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  122. package/dist/apps/docs/logo.js.map +1 -0
  123. package/dist/apps/index.d.ts +4 -0
  124. package/dist/apps/index.d.ts.map +1 -0
  125. package/dist/apps/index.js +4 -0
  126. package/dist/apps/index.js.map +1 -0
  127. package/dist/apps/metadata.d.ts +7 -0
  128. package/dist/apps/metadata.d.ts.map +1 -0
  129. package/dist/apps/metadata.js +15 -0
  130. package/dist/apps/metadata.js.map +1 -0
  131. package/dist/apps/platform/App.d.ts +2985 -0
  132. package/dist/apps/platform/App.d.ts.map +1 -0
  133. package/dist/apps/platform/App.js +74 -0
  134. package/dist/apps/platform/App.js.map +1 -0
  135. package/dist/apps/platform/index.d.ts +2 -0
  136. package/dist/apps/platform/index.d.ts.map +1 -0
  137. package/dist/apps/platform/index.js +2 -0
  138. package/dist/apps/platform/index.js.map +1 -0
  139. package/dist/apps/platform/routes/api-keys.d.ts +681 -0
  140. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  141. package/dist/apps/platform/routes/api-keys.js +328 -0
  142. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  143. package/dist/apps/platform/routes/invitations.d.ts +733 -0
  144. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  145. package/dist/apps/platform/routes/invitations.js +413 -0
  146. package/dist/apps/platform/routes/invitations.js.map +1 -0
  147. package/dist/apps/platform/routes/me.d.ts +95 -0
  148. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  149. package/dist/apps/platform/routes/me.js +81 -0
  150. package/dist/apps/platform/routes/me.js.map +1 -0
  151. package/dist/apps/platform/routes/members.d.ts +554 -0
  152. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  153. package/dist/apps/platform/routes/members.js +251 -0
  154. package/dist/apps/platform/routes/members.js.map +1 -0
  155. package/dist/apps/platform/routes/orgs.d.ts +582 -0
  156. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  157. package/dist/apps/platform/routes/orgs.js +265 -0
  158. package/dist/apps/platform/routes/orgs.js.map +1 -0
  159. package/dist/apps/platform/routes/projects.d.ts +740 -0
  160. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  161. package/dist/apps/platform/routes/projects.js +286 -0
  162. package/dist/apps/platform/routes/projects.js.map +1 -0
  163. package/dist/apps/relay/App.d.ts +41 -0
  164. package/dist/apps/relay/App.d.ts.map +1 -0
  165. package/dist/apps/relay/App.js +103 -0
  166. package/dist/apps/relay/App.js.map +1 -0
  167. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  168. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  169. package/dist/apps/relay/Sponsorships.js +193 -0
  170. package/dist/apps/relay/Sponsorships.js.map +1 -0
  171. package/dist/apps/relay/index.d.ts +3 -0
  172. package/dist/apps/relay/index.d.ts.map +1 -0
  173. package/dist/apps/relay/index.js +3 -0
  174. package/dist/apps/relay/index.js.map +1 -0
  175. package/dist/cli/Cli.d.ts +1 -1
  176. package/dist/cli/Cli.js +1 -1
  177. package/dist/cli/commands/admin.d.ts +1 -1
  178. package/dist/cli/commands/admin.js +2 -2
  179. package/dist/cli/commands/admin.js.map +1 -1
  180. package/dist/db/Db.d.ts +10 -0
  181. package/dist/db/Db.d.ts.map +1 -1
  182. package/dist/db/Db.js +128 -0
  183. package/dist/db/Db.js.map +1 -1
  184. package/dist/db/Schema.d.ts +80 -0
  185. package/dist/db/Schema.d.ts.map +1 -1
  186. package/dist/db/Schema.js +99 -0
  187. package/dist/db/Schema.js.map +1 -1
  188. package/dist/db/tables/invitations.d.ts +84 -0
  189. package/dist/db/tables/invitations.d.ts.map +1 -0
  190. package/dist/db/tables/invitations.js +165 -0
  191. package/dist/db/tables/invitations.js.map +1 -0
  192. package/dist/db/tables/memberships.d.ts +108 -0
  193. package/dist/db/tables/memberships.d.ts.map +1 -0
  194. package/dist/db/tables/memberships.js +153 -0
  195. package/dist/db/tables/memberships.js.map +1 -0
  196. package/dist/db/tables/organizations.d.ts +44 -0
  197. package/dist/db/tables/organizations.d.ts.map +1 -1
  198. package/dist/db/tables/organizations.js +89 -0
  199. package/dist/db/tables/organizations.js.map +1 -1
  200. package/dist/db/tables/projects.d.ts +65 -0
  201. package/dist/db/tables/projects.d.ts.map +1 -0
  202. package/dist/db/tables/projects.js +75 -0
  203. package/dist/db/tables/projects.js.map +1 -0
  204. package/dist/db/tables/sponsoredTransactions.d.ts +120 -0
  205. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  206. package/dist/db/tables/sponsoredTransactions.js +161 -0
  207. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  208. package/dist/db/tables/users.d.ts +48 -0
  209. package/dist/db/tables/users.d.ts.map +1 -0
  210. package/dist/db/tables/users.js +65 -0
  211. package/dist/db/tables/users.js.map +1 -0
  212. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  213. package/dist/handlers/internal/executionError.js +2 -0
  214. package/dist/handlers/internal/executionError.js.map +1 -1
  215. package/dist/handlers/internal/multisig.d.ts +2 -6
  216. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  217. package/dist/handlers/internal/multisig.js +11 -36
  218. package/dist/handlers/internal/multisig.js.map +1 -1
  219. package/dist/handlers/internal/sponsorship.d.ts +32 -2
  220. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  221. package/dist/handlers/internal/sponsorship.js +34 -9
  222. package/dist/handlers/internal/sponsorship.js.map +1 -1
  223. package/dist/handlers/relay.d.ts +6 -2
  224. package/dist/handlers/relay.d.ts.map +1 -1
  225. package/dist/handlers/relay.js +16 -2
  226. package/dist/handlers/relay.js.map +1 -1
  227. package/dist/internal/Auth.d.ts +208 -6
  228. package/dist/internal/Auth.d.ts.map +1 -1
  229. package/dist/internal/Auth.js +500 -21
  230. package/dist/internal/Auth.js.map +1 -1
  231. package/dist/internal/Log.d.ts +7 -3
  232. package/dist/internal/Log.d.ts.map +1 -1
  233. package/dist/internal/Log.js +4 -0
  234. package/dist/internal/Log.js.map +1 -1
  235. package/dist/internal/OpenApi.d.ts +0 -19
  236. package/dist/internal/OpenApi.d.ts.map +1 -1
  237. package/dist/internal/OpenApi.js +0 -57
  238. package/dist/internal/OpenApi.js.map +1 -1
  239. package/dist/internal/Store.d.ts +7 -1
  240. package/dist/internal/Store.d.ts.map +1 -1
  241. package/dist/internal/Store.js +16 -2
  242. package/dist/internal/Store.js.map +1 -1
  243. package/dist/internal/Viem.d.ts +84 -0
  244. package/dist/internal/Viem.d.ts.map +1 -1
  245. package/dist/internal/Webhooks.d.ts +1 -1
  246. package/dist/internal/Webhooks.d.ts.map +1 -1
  247. package/package.json +31 -5
  248. package/src/ApiKey.ts +1 -0
  249. package/src/ApiKeys.test.ts +104 -1
  250. package/src/ApiKeys.ts +154 -1
  251. package/src/App.test.ts +11187 -179
  252. package/src/App.ts +200 -420
  253. package/src/Client.test-d.ts +306 -15
  254. package/src/Scope.ts +13 -4
  255. package/src/Webhooks.ts +2 -2
  256. package/src/admin/apps/api-keys.test.ts +51 -0
  257. package/src/admin/apps/api-keys.ts +84 -0
  258. package/src/admin/apps/scopes.test.ts +5 -1
  259. package/src/admin/apps/verified-tokens.ts +1 -1
  260. package/src/admin/ui.generated.ts +1 -1
  261. package/src/apps/composition.test.ts +66 -0
  262. package/src/apps/data/App.ts +295 -0
  263. package/src/apps/data/index.ts +2 -0
  264. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  265. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  266. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  267. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +2 -2
  268. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  269. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +3 -3
  270. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  271. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  272. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  273. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +1 -1
  274. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  275. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  276. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  277. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +26 -5
  278. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  279. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +3 -3
  280. package/src/apps/{receipts.ts → data/routes/receipts.ts} +13 -13
  281. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +44 -5
  282. package/src/apps/{rpc.ts → data/routes/rpc.ts} +7 -7
  283. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +3 -3
  284. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  285. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +2 -2
  286. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  287. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +3 -3
  288. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  289. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +2 -2
  290. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  291. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +3 -3
  292. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  293. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +6 -6
  294. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +39 -35
  295. package/src/apps/docs/App.ts +136 -0
  296. package/src/apps/docs/index.ts +1 -0
  297. package/src/apps/index.ts +3 -0
  298. package/src/apps/metadata.ts +23 -0
  299. package/src/apps/platform/App.ts +130 -0
  300. package/src/apps/platform/index.ts +1 -0
  301. package/src/apps/platform/routes/api-keys.test.ts +330 -0
  302. package/src/apps/platform/routes/api-keys.ts +427 -0
  303. package/src/apps/platform/routes/invitations.test.ts +361 -0
  304. package/src/apps/platform/routes/invitations.ts +519 -0
  305. package/src/apps/platform/routes/me.test.ts +121 -0
  306. package/src/apps/platform/routes/me.ts +106 -0
  307. package/src/apps/platform/routes/members.test.ts +195 -0
  308. package/src/apps/platform/routes/members.ts +313 -0
  309. package/src/apps/platform/routes/orgs.test.ts +313 -0
  310. package/src/apps/platform/routes/orgs.ts +343 -0
  311. package/src/apps/platform/routes/projects.test.ts +181 -0
  312. package/src/apps/platform/routes/projects.ts +367 -0
  313. package/src/apps/relay/App.test.ts +484 -0
  314. package/src/apps/relay/App.ts +128 -0
  315. package/src/apps/relay/Sponsorships.test.ts +375 -0
  316. package/src/apps/relay/Sponsorships.ts +305 -0
  317. package/src/apps/relay/index.ts +2 -0
  318. package/src/cli/Cli.ts +1 -1
  319. package/src/cli/commands/admin.ts +2 -2
  320. package/src/db/Db.ts +159 -0
  321. package/src/db/Schema.ts +137 -0
  322. package/src/db/tables/invitations.ts +198 -0
  323. package/src/db/tables/memberships.ts +208 -0
  324. package/src/db/tables/organizations.test.ts +37 -1
  325. package/src/db/tables/organizations.ts +105 -0
  326. package/src/db/tables/projects.ts +107 -0
  327. package/src/db/tables/sponsoredTransactions.test.ts +218 -0
  328. package/src/db/tables/sponsoredTransactions.ts +236 -0
  329. package/src/db/tables/users.ts +85 -0
  330. package/src/handlers/internal/executionError.ts +2 -0
  331. package/src/handlers/internal/multisig.test.ts +84 -10
  332. package/src/handlers/internal/multisig.ts +15 -50
  333. package/src/handlers/internal/sponsorship.ts +74 -15
  334. package/src/handlers/{internal/relay.localnet.test.ts → relay.test.ts} +2 -2
  335. package/src/handlers/relay.ts +23 -5
  336. package/src/internal/Auth.test.ts +316 -0
  337. package/src/internal/Auth.ts +691 -25
  338. package/src/internal/Cursor.test.ts +3 -2
  339. package/src/internal/Log.test.ts +1 -1
  340. package/src/internal/Log.ts +11 -3
  341. package/src/internal/MetricSink.ts +1 -1
  342. package/src/internal/OpenApi.ts +0 -59
  343. package/src/internal/Store.test.ts +52 -0
  344. package/src/internal/Store.ts +24 -5
  345. package/src/internal/Tidx.local.test.ts +1 -1
  346. package/src/internal/VerifiedTokens.test.ts +1 -1
  347. package/src/internal/WebhookDestination.test.ts +1 -1
  348. package/src/internal/Webhooks.test.ts +4 -4
  349. package/src/internal/Webhooks.ts +1 -1
  350. package/dist/apps/activities.js.map +0 -1
  351. package/dist/apps/addresses.js.map +0 -1
  352. package/dist/apps/balances.d.ts.map +0 -1
  353. package/dist/apps/balances.js.map +0 -1
  354. package/dist/apps/blocks.d.ts.map +0 -1
  355. package/dist/apps/blocks.js.map +0 -1
  356. package/dist/apps/coingecko.d.ts.map +0 -1
  357. package/dist/apps/coingecko.js.map +0 -1
  358. package/dist/apps/exchanges.d.ts.map +0 -1
  359. package/dist/apps/exchanges.js.map +0 -1
  360. package/dist/apps/fee-amm.d.ts.map +0 -1
  361. package/dist/apps/fee-amm.js.map +0 -1
  362. package/dist/apps/indexer.d.ts.map +0 -1
  363. package/dist/apps/indexer.js.map +0 -1
  364. package/dist/apps/receipts.d.ts.map +0 -1
  365. package/dist/apps/receipts.js.map +0 -1
  366. package/dist/apps/rpc.d.ts.map +0 -1
  367. package/dist/apps/rpc.js.map +0 -1
  368. package/dist/apps/tokenlist.d.ts.map +0 -1
  369. package/dist/apps/tokenlist.js.map +0 -1
  370. package/dist/apps/tokens.d.ts.map +0 -1
  371. package/dist/apps/tokens.js.map +0 -1
  372. package/dist/apps/transactions.d.ts.map +0 -1
  373. package/dist/apps/transactions.js.map +0 -1
  374. package/dist/apps/transfers.d.ts.map +0 -1
  375. package/dist/apps/transfers.js.map +0 -1
  376. package/dist/apps/verified-tokens.d.ts.map +0 -1
  377. package/dist/apps/verified-tokens.js.map +0 -1
  378. package/dist/apps/webhooks.js.map +0 -1
  379. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  380. package/dist/internal/OpenApi.fonts.js.map +0 -1
  381. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  382. package/dist/internal/OpenApi.logo.js.map +0 -1
  383. package/src/handlers/internal/multisig.localnet.test.ts +0 -146
  384. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  385. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invitations.d.ts","sourceRoot":"","sources":["../../../../src/apps/platform/routes/invitations.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAO7B,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAGzD,OAAO,KAAK,EAAS,WAAW,EAAE,MAAM,WAAW,CAAA;AAKnD,qDAAqD;AACrD,yBAAiB,MAAM,CAAC;IAMtB,8BAA8B;IACvB,MAAM,UAAU;;;;;;;;;;;;qBAsCtB,CAAA;IAED,0EAA0E;IACnE,MAAM,MAAM;;qBASuD,CAAA;IAE1E,4DAA4D;IACrD,MAAM,gBAAgB;;;qBAe8B,CAAA;IAE3D,kEAAkE;IAC3D,MAAM,YAAY;;qBASmD,CAAA;IAE5E,2CAA2C;IACpC,MAAM,cAAc;;;;;;;qBAO+B,CAAA;IAE1D,sEAAsE;IACtE,UAAiB,eAAe,CAAC;QAC/B,iDAAiD;QAC1C,MAAM,QAAQ;;;;;;;;;;;;;;yBAKpB,CAAA;KACF;IAED,mDAAmD;IACnD,UAAiB,iBAAiB,CAAC;QACjC,kFAAkF;QAC3E,MAAM,IAAI;;;;;;;;;;;;;yBAOf,CAAA;QAEF,8DAA8D;QACvD,MAAM,QAAQ;;;;;;;;;;;;;;;yBAKpB,CAAA;KACF;IAED,kDAAkD;IAClD,UAAiB,gBAAgB,CAAC;QAChC,2CAA2C;QACpC,MAAM,QAAQ;;;;;;;;yBAmBpB,CAAA;KACF;IAED,kDAAkD;IAClD,UAAiB,gBAAgB,CAAC;QAChC,oDAAoD;QAC7C,MAAM,QAAQ;;yBASgD,CAAA;KACtE;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oEAgQ1B"}
@@ -0,0 +1,413 @@
1
+ import { Hono } from 'hono';
2
+ import * as z from 'zod/mini';
3
+ import * as Auth from '../../../internal/Auth.js';
4
+ import * as Db from '../../../db/Db.js';
5
+ import * as Invitations from '../../../db/tables/invitations.js';
6
+ import * as Memberships from '../../../db/tables/memberships.js';
7
+ import * as OpenApi from '../../../internal/OpenApi.js';
8
+ import * as Response from '../../../internal/Response.js';
9
+ import * as Schema from '../../../internal/Schema.js';
10
+ /** How long an invitation stays acceptable. */
11
+ const ttlDays = 7;
12
+ /** Zod schemas owned by the invitations resource. */
13
+ export var schema;
14
+ (function (schema) {
15
+ /** A membership role. */
16
+ const role = z
17
+ .enum(Memberships.roles)
18
+ .check(z.describe('Role granted when the invitation is accepted.'), z.meta({ examples: ['member'] })); // prettier-ignore
19
+ /** One pending invitation. */
20
+ schema.Invitation = Schema.describe(z.object({
21
+ createdAt: z
22
+ .string()
23
+ .check(z.describe('When the invitation was created (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
24
+ email: z
25
+ .string()
26
+ .check(z.describe('Invitee email (lowercase).'), z.meta({ examples: ['dev@example.com'] })),
27
+ expiresAt: z
28
+ .string()
29
+ .check(z.describe('When the invitation expires (ISO 8601).'), z.meta({ examples: ['2026-01-08T00:00:00.000Z'] })),
30
+ id: z
31
+ .string()
32
+ .check(z.describe('Opaque invitation id (`inv_…`).'), z.meta({ examples: ['inv_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
33
+ invitedBy: z
34
+ .string()
35
+ .check(z.describe('User id (`usr_…`) that created the invitation.'), z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
36
+ orgId: z
37
+ .string()
38
+ .check(z.describe('Organization id (`org_…`) the invitation joins.'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
39
+ role,
40
+ }), 'One pending invitation.');
41
+ /** Path parameters addressing an organization's invitation collection. */
42
+ schema.Params = z
43
+ .object({
44
+ orgId: z
45
+ .string()
46
+ .check(z.describe('The organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
47
+ })
48
+ .check(z.describe("Path parameters for an organization's invitations."));
49
+ /** Path parameters addressing one org-scoped invitation. */
50
+ schema.InvitationParams = z
51
+ .object({
52
+ invitationId: z
53
+ .string()
54
+ .check(z.describe('The invitation id (`inv_…`).'), z.meta({ examples: ['inv_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
55
+ orgId: z
56
+ .string()
57
+ .check(z.describe('The organization id (`org_…`).'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
58
+ })
59
+ .check(z.describe('Path parameters for one invitation.'));
60
+ /** Path parameters addressing one of the caller's invitations. */
61
+ schema.AcceptParams = z
62
+ .object({
63
+ invitationId: z
64
+ .string()
65
+ .check(z.describe('The invitation id (`inv_…`).'), z.meta({ examples: ['inv_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
66
+ })
67
+ .check(z.describe("Path parameters for one of the caller's invitations."));
68
+ /** Request body creating an invitation. */
69
+ schema.InvitationBody = z
70
+ .object({
71
+ email: z
72
+ .email()
73
+ .check(z.describe('Invitee email.'), z.meta({ examples: ['dev@example.com'] })),
74
+ role,
75
+ })
76
+ .check(z.describe('Fields for creating an invitation.'));
77
+ /** Schemas for the listInvitations / listMyInvitations operations. */
78
+ let listInvitations;
79
+ (function (listInvitations) {
80
+ /** Non-paginated list of pending invitations. */
81
+ listInvitations.Response = Schema.describe(z.object({
82
+ data: z.array(schema.Invitation).check(z.describe('Pending invitations, newest first.')),
83
+ }), 'A non-paginated list of pending invitations.');
84
+ })(listInvitations = schema.listInvitations || (schema.listInvitations = {}));
85
+ /** Schemas for the listMyInvitations operation. */
86
+ let listMyInvitations;
87
+ (function (listMyInvitations) {
88
+ /** A pending invitation addressed to the caller, with the inviting org's name. */
89
+ listMyInvitations.Item = z.extend(schema.Invitation, {
90
+ orgName: z
91
+ .string()
92
+ .check(z.describe('Human-readable name of the inviting organization.'), z.meta({ examples: ['Acme, Inc.'] })),
93
+ });
94
+ /** Non-paginated list of the caller's pending invitations. */
95
+ listMyInvitations.Response = Schema.describe(z.object({
96
+ data: z.array(listMyInvitations.Item).check(z.describe('Pending invitations, newest first.')),
97
+ }), "A non-paginated list of the caller's pending invitations.");
98
+ })(listMyInvitations = schema.listMyInvitations || (schema.listMyInvitations = {}));
99
+ /** Schemas for the acceptInvitation operation. */
100
+ let acceptInvitation;
101
+ (function (acceptInvitation) {
102
+ /** The membership granted by accepting. */
103
+ acceptInvitation.Response = Schema.describe(z.object({
104
+ orgId: z
105
+ .string()
106
+ .check(z.describe('Organization id (`org_…`) joined.'), z.meta({ examples: ['org_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
107
+ role: z
108
+ .enum(Memberships.roles)
109
+ .check(z.describe('Granted role.'), z.meta({ examples: ['member'] })),
110
+ userId: z
111
+ .string()
112
+ .check(z.describe('Member user id (`usr_…`).'), z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
113
+ }), 'The membership granted by accepting.');
114
+ })(acceptInvitation = schema.acceptInvitation || (schema.acceptInvitation = {}));
115
+ /** Schemas for the revokeInvitation operation. */
116
+ let revokeInvitation;
117
+ (function (revokeInvitation) {
118
+ /** Confirmation that the invitation was revoked. */
119
+ revokeInvitation.Response = z
120
+ .object({
121
+ id: z
122
+ .string()
123
+ .check(z.describe('ID of the invitation that was revoked.'), z.meta({ examples: ['inv_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
124
+ })
125
+ .check(z.describe('Confirmation that the invitation was revoked.'));
126
+ })(revokeInvitation = schema.revokeInvitation || (schema.revokeInvitation = {}));
127
+ })(schema || (schema = {}));
128
+ /**
129
+ * Mounts the invitations surface: org-scoped management
130
+ * (`/orgs/:orgId/invitations`, admins and owners) plus the invitee's side
131
+ * (`/invitations`, matched against the session's verified email). Invitation
132
+ * emails dispatch through the sender the platform group publishes on context
133
+ * (`c.get('email')`), best-effort.
134
+ */
135
+ export function invitations() {
136
+ return new Hono()
137
+ .post('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invitations', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.Params, {
138
+ code: 'param_invalid',
139
+ message: 'Check the path parameters and try again.',
140
+ }), OpenApi.validate('json', schema.InvitationBody, {
141
+ code: 'body_invalid',
142
+ message: 'Check the request body and try again.',
143
+ }), OpenApi.describeRoute({
144
+ description: 'Invite an email to the organization with a role. The invitee accepts after signing in with that verified email.', // prettier-ignore
145
+ operationId: 'createInvitation',
146
+ responses: OpenApi.responses({
147
+ errors: { 404: 'No accessible organization was found for this id.' },
148
+ success: { description: 'The created invitation.', schema: schema.Invitation },
149
+ }),
150
+ summary: 'Create invitation',
151
+ tags: ['Invitations'],
152
+ }), async (c) => {
153
+ if (Auth.narrowAccess)
154
+ return Auth.superAdminAccessError(c);
155
+ if (Auth.narrowScope)
156
+ return Auth.ensureOrgError(c);
157
+ if (OpenApi.narrowValidation)
158
+ return OpenApi.validationError(c, {
159
+ code: 'param_invalid',
160
+ message: 'Check the path parameters and try again.',
161
+ });
162
+ if (OpenApi.narrowValidation)
163
+ return OpenApi.validationError(c, {
164
+ code: 'body_invalid',
165
+ message: 'Check the request body and try again.',
166
+ });
167
+ const body = c.req.valid('json');
168
+ // Owners invite anyone; everyone else grants only roles strictly below
169
+ // their own (an admin invites members, never peers). The super admin
170
+ // has no membership and may grant any role.
171
+ const caller = Auth.membership(c);
172
+ if (caller &&
173
+ caller.role !== 'owner' &&
174
+ Memberships.rank[body.role] >= Memberships.rank[caller.role])
175
+ return Response.error(c, {
176
+ code: 'forbidden',
177
+ message: 'Cannot invite at or above your own role',
178
+ status: 403,
179
+ });
180
+ const invitedBy = caller?.userId ?? 'super_admin';
181
+ const db = Db.get(c.get('db'));
182
+ try {
183
+ const record = await Invitations.create(db, {
184
+ email: body.email,
185
+ expiresAt: new Date(Date.now() + ttlDays * 86_400_000).toISOString(),
186
+ invitedBy,
187
+ orgId: Auth.org(c).id,
188
+ role: body.role,
189
+ });
190
+ dispatchEmail(c, { email: c.get('email'), org: Auth.org(c).name, record });
191
+ return c.json(Response.validated(schema.Invitation, serializeInvitation(record)), 200);
192
+ }
193
+ catch (cause) {
194
+ return Response.upstream(c, cause);
195
+ }
196
+ })
197
+ .get('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invitations', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.Params, {
198
+ code: 'param_invalid',
199
+ message: 'Check the path parameters and try again.',
200
+ }), OpenApi.describeRoute({
201
+ operationId: 'listInvitations',
202
+ responses: OpenApi.responses({
203
+ errors: { 404: 'No accessible organization was found for this id.' },
204
+ success: {
205
+ description: 'Pending invitations, newest first.',
206
+ schema: schema.listInvitations.Response,
207
+ },
208
+ }),
209
+ summary: 'List invitations',
210
+ tags: ['Invitations'],
211
+ }), async (c) => {
212
+ if (Auth.narrowAccess)
213
+ return Auth.superAdminAccessError(c);
214
+ if (Auth.narrowScope)
215
+ return Auth.ensureOrgError(c);
216
+ if (OpenApi.narrowValidation)
217
+ return OpenApi.validationError(c, {
218
+ code: 'param_invalid',
219
+ message: 'Check the path parameters and try again.',
220
+ });
221
+ const db = Db.get(c.get('db'));
222
+ try {
223
+ const records = await Invitations.listByOrg(db, Auth.org(c).id);
224
+ return c.json(Response.validated(schema.listInvitations.Response, {
225
+ data: records.map(serializeInvitation),
226
+ }), 200);
227
+ }
228
+ catch (cause) {
229
+ return Response.upstream(c, cause);
230
+ }
231
+ })
232
+ .delete('/v1/orgs/:orgId{org_[A-Za-z0-9_-]+}/invitations/:invitationId{inv_[A-Za-z0-9_-]+}', Auth.policy({ session: true }), Auth.ensureOrg({ role: 'admin' }), OpenApi.validate('param', schema.InvitationParams, {
233
+ code: 'param_invalid',
234
+ message: 'Check the path parameters and try again.',
235
+ }), OpenApi.describeRoute({
236
+ operationId: 'revokeInvitation',
237
+ responses: OpenApi.responses({
238
+ errors: { 404: 'No accessible pending invitation was found for this id.' },
239
+ success: {
240
+ description: 'Confirmation that the invitation was revoked.',
241
+ schema: schema.revokeInvitation.Response,
242
+ },
243
+ }),
244
+ summary: 'Revoke invitation',
245
+ tags: ['Invitations'],
246
+ }), async (c) => {
247
+ if (Auth.narrowAccess)
248
+ return Auth.superAdminAccessError(c);
249
+ if (Auth.narrowScope)
250
+ return Auth.ensureOrgError(c);
251
+ if (OpenApi.narrowValidation)
252
+ return OpenApi.validationError(c, {
253
+ code: 'param_invalid',
254
+ message: 'Check the path parameters and try again.',
255
+ });
256
+ const { invitationId } = c.req.valid('param');
257
+ const db = Db.get(c.get('db'));
258
+ try {
259
+ // Bind the invitation to the scoped org before revoking.
260
+ const record = await Invitations.get(db, invitationId);
261
+ if (!record || record.orgId !== Auth.org(c).id)
262
+ return invitationNotFound(c);
263
+ const revoked = await Invitations.revoke(db, invitationId);
264
+ if (!revoked)
265
+ return invitationNotFound(c);
266
+ return c.json(Response.validated(schema.revokeInvitation.Response, { id: invitationId }), 200);
267
+ }
268
+ catch (cause) {
269
+ return Response.upstream(c, cause);
270
+ }
271
+ })
272
+ .get('/v1/invitations', Auth.policy({ session: true }), OpenApi.describeRoute({
273
+ description: "Pending invitations addressed to the session's verified email.",
274
+ operationId: 'listMyInvitations',
275
+ responses: OpenApi.responses({
276
+ success: {
277
+ description: 'Pending invitations, newest first.',
278
+ schema: schema.listMyInvitations.Response,
279
+ },
280
+ }),
281
+ summary: 'List my invitations',
282
+ tags: ['Invitations'],
283
+ }), async (c) => {
284
+ if (Auth.narrowAccess)
285
+ return Auth.superAdminAccessError(c);
286
+ const principal = Auth.getPrincipal(c);
287
+ if (principal?.type !== 'session')
288
+ return sessionRequired(c);
289
+ // Without a verified email there is nothing to match against.
290
+ if (!principal.email)
291
+ return c.json(Response.validated(schema.listMyInvitations.Response, { data: [] }), 200);
292
+ const db = Db.get(c.get('db'));
293
+ try {
294
+ const records = await Invitations.listByEmail(db, principal.email);
295
+ return c.json(Response.validated(schema.listMyInvitations.Response, {
296
+ data: records.map((record) => ({
297
+ ...serializeInvitation(record),
298
+ orgName: record.orgName,
299
+ })),
300
+ }), 200);
301
+ }
302
+ catch (cause) {
303
+ return Response.upstream(c, cause);
304
+ }
305
+ })
306
+ .post('/v1/invitations/:invitationId{inv_[A-Za-z0-9_-]+}/accept', Auth.policy({ session: true }), OpenApi.validate('param', schema.AcceptParams, {
307
+ code: 'param_invalid',
308
+ message: 'Check the path parameters and try again.',
309
+ }), OpenApi.describeRoute({
310
+ description: "Accept an invitation addressed to the session's verified email, joining the organization with the invited role.", // prettier-ignore
311
+ operationId: 'acceptInvitation',
312
+ responses: OpenApi.responses({
313
+ errors: { 404: 'No accessible pending invitation was found for this id.' },
314
+ success: {
315
+ description: 'The membership granted by accepting.',
316
+ schema: schema.acceptInvitation.Response,
317
+ },
318
+ }),
319
+ summary: 'Accept invitation',
320
+ tags: ['Invitations'],
321
+ }), async (c) => {
322
+ if (Auth.narrowAccess)
323
+ return Auth.superAdminAccessError(c);
324
+ if (OpenApi.narrowValidation)
325
+ return OpenApi.validationError(c, {
326
+ code: 'param_invalid',
327
+ message: 'Check the path parameters and try again.',
328
+ });
329
+ const principal = Auth.getPrincipal(c);
330
+ if (principal?.type !== 'session')
331
+ return sessionRequired(c);
332
+ const { invitationId } = c.req.valid('param');
333
+ const db = Db.get(c.get('db'));
334
+ try {
335
+ // An invitation is visible only to the verified holder of its email;
336
+ // everyone else sees 404.
337
+ const record = await Invitations.get(db, invitationId);
338
+ if (!record || record.email !== principal.email?.toLowerCase())
339
+ return invitationNotFound(c);
340
+ const accepted = await Invitations.accept(db, invitationId, principal.id);
341
+ if (!accepted)
342
+ return invitationNotFound(c);
343
+ const membership = await Memberships.get(db, accepted.orgId, principal.id);
344
+ return c.json(Response.validated(schema.acceptInvitation.Response, {
345
+ orgId: accepted.orgId,
346
+ role: membership?.role ?? accepted.role,
347
+ userId: principal.id,
348
+ }), 200);
349
+ }
350
+ catch (cause) {
351
+ return Response.upstream(c, cause);
352
+ }
353
+ });
354
+ }
355
+ /** Dispatches the invitation email through the app's sender, best-effort. */
356
+ function dispatchEmail(c, options) {
357
+ const { email: sender, org, record } = options;
358
+ if (!sender)
359
+ return;
360
+ const days = Math.max(1, Math.round((Date.parse(record.expiresAt) - Date.now()) / 86_400_000));
361
+ const expiry = days === 1 ? '1 day' : `${days} days`;
362
+ const link = new URL(sender.consoleUrl ?? 'https://console.tempo.xyz');
363
+ link.searchParams.set('email', record.email);
364
+ const url = link.href;
365
+ const dispatch = Promise.resolve(sender.send({
366
+ from: sender.from,
367
+ html: `<p>You've been invited to join <strong>${escapeHtml(org)}</strong> on the Tempo Developer Platform</p><p>Sign in at <a href="${url}">${url}</a> to accept. This invitation expires in ${expiry}.</p>`,
368
+ subject: `You've been invited to ${org} on the Tempo Developer Platform`,
369
+ text: `You've been invited to join ${org} on the Tempo Developer Platform\n\nSign in at ${url} to accept. This invitation expires in ${expiry}.`,
370
+ to: record.email,
371
+ })).catch((error) => console.error('invitation email dispatch failed', error));
372
+ try {
373
+ c.executionCtx.waitUntil(dispatch);
374
+ }
375
+ catch {
376
+ // Non-Workers runtime: the floating promise settles on its own.
377
+ }
378
+ }
379
+ /** Escapes org-controlled text for the HTML body. */
380
+ function escapeHtml(text) {
381
+ return text
382
+ .replaceAll('&', '&amp;')
383
+ .replaceAll('<', '&lt;')
384
+ .replaceAll('>', '&gt;')
385
+ .replaceAll('"', '&quot;');
386
+ }
387
+ /** Projects an invitation row onto the pending-invitation shape. */
388
+ function serializeInvitation(record) {
389
+ return {
390
+ createdAt: record.createdAt,
391
+ email: record.email,
392
+ expiresAt: record.expiresAt,
393
+ id: record.id,
394
+ invitedBy: record.invitedBy,
395
+ orgId: record.orgId,
396
+ role: record.role,
397
+ };
398
+ }
399
+ function invitationNotFound(c) {
400
+ return Response.error(c, {
401
+ code: 'invitation_not_found',
402
+ message: 'Invitation not found',
403
+ status: 404,
404
+ });
405
+ }
406
+ function sessionRequired(c) {
407
+ return Response.error(c, {
408
+ code: 'forbidden',
409
+ message: 'Session required',
410
+ status: 403,
411
+ });
412
+ }
413
+ //# sourceMappingURL=invitations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invitations.js","sourceRoot":"","sources":["../../../../src/apps/platform/routes/invitations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,95 @@
1
+ import * as z from 'zod/mini';
2
+ import type * as App from '../../../App.js';
3
+ import * as Response from '../../../internal/Response.js';
4
+ /** Zod schemas owned by the current-user resource. */
5
+ export declare namespace schema {
6
+ /** The signed-in developer. */
7
+ const User: z.ZodMiniObject<{
8
+ address: z.ZodMiniOptional<z.ZodMiniString<string>>;
9
+ createdAt: z.ZodMiniString<string>;
10
+ email: z.ZodMiniOptional<z.ZodMiniString<string>>;
11
+ id: z.ZodMiniString<string>;
12
+ updatedAt: z.ZodMiniString<string>;
13
+ }, z.core.$strip>;
14
+ }
15
+ /**
16
+ * Mounts the `/me` resource: the session's user. Session lane only — API keys
17
+ * identify workloads, not developers.
18
+ */
19
+ export declare function me(): import("hono/hono-base").HonoBase<App.Environment, {
20
+ "/v1/me": {
21
+ $get: {
22
+ output: {
23
+ error: {
24
+ code: "api_key_malformed";
25
+ details?: readonly Response.error.Detail[] | undefined;
26
+ message: string;
27
+ };
28
+ requestId: string;
29
+ };
30
+ outputFormat: "json";
31
+ status: 400;
32
+ input: {};
33
+ } | {
34
+ output: {
35
+ error: {
36
+ code: "api_key_invalid" | "api_key_missing";
37
+ details?: readonly Response.error.Detail[] | undefined;
38
+ message: string;
39
+ };
40
+ requestId: string;
41
+ };
42
+ outputFormat: "json";
43
+ status: 401;
44
+ input: {};
45
+ } | {
46
+ output: {
47
+ error: {
48
+ code: "upstream_error";
49
+ details?: readonly Response.error.Detail[] | undefined;
50
+ message: string;
51
+ };
52
+ requestId: string;
53
+ };
54
+ outputFormat: "json";
55
+ status: 502;
56
+ input: {};
57
+ } | {
58
+ output: {
59
+ error: {
60
+ code: "forbidden";
61
+ details?: readonly Response.error.Detail[] | undefined;
62
+ message: string;
63
+ };
64
+ requestId: string;
65
+ };
66
+ outputFormat: "json";
67
+ status: 403;
68
+ input: {};
69
+ } | {
70
+ output: {
71
+ error: {
72
+ code: "user_not_found";
73
+ details?: readonly Response.error.Detail[] | undefined;
74
+ message: string;
75
+ };
76
+ requestId: string;
77
+ };
78
+ outputFormat: "json";
79
+ status: 404;
80
+ input: {};
81
+ } | {
82
+ output: {
83
+ address?: string | undefined;
84
+ createdAt: string;
85
+ email?: string | undefined;
86
+ id: string;
87
+ updatedAt: string;
88
+ };
89
+ outputFormat: "json";
90
+ status: 200;
91
+ input: {};
92
+ };
93
+ };
94
+ }, "/", "/v1/me">;
95
+ //# sourceMappingURL=me.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.d.ts","sourceRoot":"","sources":["../../../../src/apps/platform/routes/me.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,CAAC,MAAM,UAAU,CAAA;AAE7B,OAAO,KAAK,KAAK,GAAG,MAAM,iBAAiB,CAAA;AAI3C,OAAO,KAAK,QAAQ,MAAM,+BAA+B,CAAA;AAIzD,sDAAsD;AACtD,yBAAiB,MAAM,CAAC;IACtB,+BAA+B;IACxB,MAAM,IAAI;;;;;;qBA+BhB,CAAA;CACF;AAED;;;GAGG;AACH,wBAAgB,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAqDjB"}
@@ -0,0 +1,81 @@
1
+ import { Hono } from 'hono';
2
+ import * as z from 'zod/mini';
3
+ import * as Auth from '../../../internal/Auth.js';
4
+ import * as Db from '../../../db/Db.js';
5
+ import * as OpenApi from '../../../internal/OpenApi.js';
6
+ import * as Response from '../../../internal/Response.js';
7
+ import * as Schema from '../../../internal/Schema.js';
8
+ import * as Users from '../../../db/tables/users.js';
9
+ /** Zod schemas owned by the current-user resource. */
10
+ export var schema;
11
+ (function (schema) {
12
+ /** The signed-in developer. */
13
+ schema.User = Schema.describe(z.object({
14
+ address: z
15
+ .optional(z.string())
16
+ .check(z.describe('Wallet address bound to this user, when wallet sign-in established it.'), z.meta({ examples: ['0x0000000000000000000000000000000000000001'] })),
17
+ createdAt: z
18
+ .string()
19
+ .check(z.describe('When the user was created (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
20
+ email: z
21
+ .optional(z.string())
22
+ .check(z.describe('Verified email from the wallet identity token, when present.')),
23
+ id: z
24
+ .string()
25
+ .check(z.describe('Opaque user id (`usr_…`).'), z.meta({ examples: ['usr_1a2b3c4d5e6f7g8h9j0k1m2n'] })),
26
+ updatedAt: z
27
+ .string()
28
+ .check(z.describe('When the user was last updated (ISO 8601).'), z.meta({ examples: ['2026-01-01T00:00:00.000Z'] })),
29
+ }), 'The signed-in developer.');
30
+ })(schema || (schema = {}));
31
+ /**
32
+ * Mounts the `/me` resource: the session's user. Session lane only — API keys
33
+ * identify workloads, not developers.
34
+ */
35
+ export function me() {
36
+ return new Hono().get('/v1/me', Auth.policy({ session: true }), OpenApi.describeRoute({
37
+ operationId: 'getMe',
38
+ responses: OpenApi.responses({
39
+ errors: {
40
+ 403: 'The caller is not a signed-in user.',
41
+ 404: 'No user exists for this session.',
42
+ },
43
+ success: { description: 'The authenticated user.', schema: schema.User },
44
+ }),
45
+ summary: 'Get current user',
46
+ tags: ['Users'],
47
+ }), async (c) => {
48
+ if (Auth.narrowAccess)
49
+ return Auth.superAdminAccessError(c);
50
+ // The session lane is the only lane here; `super_admin` bypasses lanes
51
+ // but has no user row, so it is rejected too.
52
+ const principal = Auth.getPrincipal(c);
53
+ if (principal?.type !== 'session')
54
+ return Response.error(c, {
55
+ code: 'forbidden',
56
+ message: 'Session required',
57
+ status: 403,
58
+ });
59
+ const db = Db.get(c.get('db'));
60
+ try {
61
+ const user = await Users.get(db, principal.id);
62
+ if (!user)
63
+ return Response.error(c, {
64
+ code: 'user_not_found',
65
+ message: 'User not found',
66
+ status: 404,
67
+ });
68
+ return c.json(Response.validated(schema.User, {
69
+ ...(user.address ? { address: user.address } : {}),
70
+ createdAt: user.createdAt,
71
+ ...(user.email ? { email: user.email } : {}),
72
+ id: user.id,
73
+ updatedAt: user.updatedAt,
74
+ }), 200);
75
+ }
76
+ catch (cause) {
77
+ return Response.upstream(c, cause);
78
+ }
79
+ });
80
+ }
81
+ //# sourceMappingURL=me.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"me.js","sourceRoot":"","sources":["../../../../src/apps/platform/routes/me.ts"],"names":[],"mappings":"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"}