tapimo 0.1.0 → 0.3.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 (520) hide show
  1. package/README.md +57 -16
  2. package/dist/ApiKey.d.ts +4 -1
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +6 -2
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +98 -3
  7. package/dist/ApiKeys.d.ts.map +1 -1
  8. package/dist/ApiKeys.js +150 -1
  9. package/dist/ApiKeys.js.map +1 -1
  10. package/dist/App.d.ts +7917 -2315
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +141 -329
  13. package/dist/App.js.map +1 -1
  14. package/dist/Scope.d.ts +20 -4
  15. package/dist/Scope.d.ts.map +1 -1
  16. package/dist/Scope.js +23 -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 +203 -120
  23. package/dist/admin/App.d.ts.map +1 -1
  24. package/dist/admin/apps/api-keys.d.ts +111 -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 +12 -1
  29. package/dist/admin/apps/scopes.d.ts.map +1 -1
  30. package/dist/admin/apps/scopes.js +3 -0
  31. package/dist/admin/apps/scopes.js.map +1 -1
  32. package/dist/admin/apps/verified-tokens.d.ts +116 -116
  33. package/dist/admin/apps/verified-tokens.js +1 -1
  34. package/dist/admin/apps/verified-tokens.js.map +1 -1
  35. package/dist/admin/ui.generated.d.ts +1 -1
  36. package/dist/admin/ui.generated.js +13 -13
  37. package/dist/admin/ui.generated.js.map +1 -1
  38. package/dist/analytics/Analytics.d.ts +151 -0
  39. package/dist/analytics/Analytics.d.ts.map +1 -0
  40. package/dist/analytics/Analytics.js +212 -0
  41. package/dist/analytics/Analytics.js.map +1 -0
  42. package/dist/analytics/tables/requestEvents.d.ts +215 -0
  43. package/dist/analytics/tables/requestEvents.d.ts.map +1 -0
  44. package/dist/analytics/tables/requestEvents.js +264 -0
  45. package/dist/analytics/tables/requestEvents.js.map +1 -0
  46. package/dist/apps/data/App.d.ts +19576 -0
  47. package/dist/apps/data/App.d.ts.map +1 -0
  48. package/dist/apps/data/App.js +272 -0
  49. package/dist/apps/data/App.js.map +1 -0
  50. package/dist/apps/data/index.d.ts +3 -0
  51. package/dist/apps/data/index.d.ts.map +1 -0
  52. package/dist/apps/data/index.js +3 -0
  53. package/dist/apps/data/index.js.map +1 -0
  54. package/dist/apps/{activities.d.ts → data/routes/activities.d.ts} +32 -32
  55. package/dist/apps/{activities.d.ts.map → data/routes/activities.d.ts.map} +1 -1
  56. package/dist/apps/{activities.js → data/routes/activities.js} +13 -13
  57. package/dist/apps/data/routes/activities.js.map +1 -0
  58. package/dist/apps/{addresses.d.ts → data/routes/addresses.d.ts} +22 -22
  59. package/dist/apps/{addresses.d.ts.map → data/routes/addresses.d.ts.map} +1 -1
  60. package/dist/apps/{addresses.js → data/routes/addresses.js} +5 -5
  61. package/dist/apps/data/routes/addresses.js.map +1 -0
  62. package/dist/apps/{balances.d.ts → data/routes/balances.d.ts} +4 -4
  63. package/dist/apps/data/routes/balances.d.ts.map +1 -0
  64. package/dist/apps/{balances.js → data/routes/balances.js} +42 -11
  65. package/dist/apps/data/routes/balances.js.map +1 -0
  66. package/dist/apps/{blocks.d.ts → data/routes/blocks.d.ts} +47 -47
  67. package/dist/apps/data/routes/blocks.d.ts.map +1 -0
  68. package/dist/apps/{blocks.js → data/routes/blocks.js} +13 -13
  69. package/dist/apps/data/routes/blocks.js.map +1 -0
  70. package/dist/apps/{coingecko.d.ts → data/routes/coingecko.d.ts} +8 -8
  71. package/dist/apps/data/routes/coingecko.d.ts.map +1 -0
  72. package/dist/apps/{coingecko.js → data/routes/coingecko.js} +13 -13
  73. package/dist/apps/data/routes/coingecko.js.map +1 -0
  74. package/dist/apps/{exchanges.d.ts → data/routes/exchanges.d.ts} +108 -108
  75. package/dist/apps/data/routes/exchanges.d.ts.map +1 -0
  76. package/dist/apps/{exchanges.js → data/routes/exchanges.js} +19 -19
  77. package/dist/apps/data/routes/exchanges.js.map +1 -0
  78. package/dist/apps/{fee-amm.d.ts → data/routes/fee-amm.d.ts} +39 -39
  79. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -0
  80. package/dist/apps/{fee-amm.js → data/routes/fee-amm.js} +17 -17
  81. package/dist/apps/data/routes/fee-amm.js.map +1 -0
  82. package/dist/apps/data/routes/funding.d.ts +765 -0
  83. package/dist/apps/data/routes/funding.d.ts.map +1 -0
  84. package/dist/apps/data/routes/funding.js +383 -0
  85. package/dist/apps/data/routes/funding.js.map +1 -0
  86. package/dist/apps/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  87. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  88. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  89. package/dist/apps/data/routes/indexer.js.map +1 -0
  90. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +49 -49
  91. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  92. package/dist/apps/{receipts.js → data/routes/receipts.js} +14 -20
  93. package/dist/apps/data/routes/receipts.js.map +1 -0
  94. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +33 -40
  95. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  96. package/dist/apps/{rpc.js → data/routes/rpc.js} +35 -7
  97. package/dist/apps/data/routes/rpc.js.map +1 -0
  98. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +40 -40
  99. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  100. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  101. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  102. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +468 -468
  103. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  104. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  105. package/dist/apps/data/routes/tokens.js.map +1 -0
  106. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +304 -304
  107. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  108. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  109. package/dist/apps/data/routes/transactions.js.map +1 -0
  110. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +62 -62
  111. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  112. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  113. package/dist/apps/data/routes/transfers.js.map +1 -0
  114. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +6 -6
  115. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  116. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  117. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  118. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +17 -17
  119. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  120. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +38 -34
  121. package/dist/apps/data/routes/webhooks.js.map +1 -0
  122. package/dist/apps/docs/App.d.ts +29 -0
  123. package/dist/apps/docs/App.d.ts.map +1 -0
  124. package/dist/apps/docs/App.js +54 -0
  125. package/dist/apps/docs/App.js.map +1 -0
  126. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  127. package/dist/apps/docs/fonts.d.ts.map +1 -0
  128. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  129. package/dist/apps/docs/fonts.js.map +1 -0
  130. package/dist/apps/docs/index.d.ts +2 -0
  131. package/dist/apps/docs/index.d.ts.map +1 -0
  132. package/dist/apps/docs/index.js +2 -0
  133. package/dist/apps/docs/index.js.map +1 -0
  134. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  135. package/dist/apps/docs/logo.d.ts.map +1 -0
  136. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  137. package/dist/apps/docs/logo.js.map +1 -0
  138. package/dist/apps/docs/reference.d.ts +21 -0
  139. package/dist/apps/docs/reference.d.ts.map +1 -0
  140. package/dist/apps/docs/reference.js +112 -0
  141. package/dist/apps/docs/reference.js.map +1 -0
  142. package/dist/apps/index.d.ts +5 -0
  143. package/dist/apps/index.d.ts.map +1 -0
  144. package/dist/apps/index.js +5 -0
  145. package/dist/apps/index.js.map +1 -0
  146. package/dist/apps/mcp.d.ts +76 -0
  147. package/dist/apps/mcp.d.ts.map +1 -0
  148. package/dist/apps/mcp.js +188 -0
  149. package/dist/apps/mcp.js.map +1 -0
  150. package/dist/apps/metadata.d.ts +7 -0
  151. package/dist/apps/metadata.d.ts.map +1 -0
  152. package/dist/apps/metadata.js +15 -0
  153. package/dist/apps/metadata.js.map +1 -0
  154. package/dist/apps/platform/App.d.ts +5262 -0
  155. package/dist/apps/platform/App.d.ts.map +1 -0
  156. package/dist/apps/platform/App.js +84 -0
  157. package/dist/apps/platform/App.js.map +1 -0
  158. package/dist/apps/platform/Billing.d.ts +279 -0
  159. package/dist/apps/platform/Billing.d.ts.map +1 -0
  160. package/dist/apps/platform/Billing.js +477 -0
  161. package/dist/apps/platform/Billing.js.map +1 -0
  162. package/dist/apps/platform/index.d.ts +3 -0
  163. package/dist/apps/platform/index.d.ts.map +1 -0
  164. package/dist/apps/platform/index.js +3 -0
  165. package/dist/apps/platform/index.js.map +1 -0
  166. package/dist/apps/platform/routes/api-keys.d.ts +973 -0
  167. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  168. package/dist/apps/platform/routes/api-keys.js +430 -0
  169. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  170. package/dist/apps/platform/routes/billing.d.ts +1520 -0
  171. package/dist/apps/platform/routes/billing.d.ts.map +1 -0
  172. package/dist/apps/platform/routes/billing.js +795 -0
  173. package/dist/apps/platform/routes/billing.js.map +1 -0
  174. package/dist/apps/platform/routes/invitations.d.ts +851 -0
  175. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  176. package/dist/apps/platform/routes/invitations.js +471 -0
  177. package/dist/apps/platform/routes/invitations.js.map +1 -0
  178. package/dist/apps/platform/routes/me.d.ts +95 -0
  179. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  180. package/dist/apps/platform/routes/me.js +81 -0
  181. package/dist/apps/platform/routes/me.js.map +1 -0
  182. package/dist/apps/platform/routes/members.d.ts +554 -0
  183. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  184. package/dist/apps/platform/routes/members.js +251 -0
  185. package/dist/apps/platform/routes/members.js.map +1 -0
  186. package/dist/apps/platform/routes/orgs.d.ts +596 -0
  187. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  188. package/dist/apps/platform/routes/orgs.js +276 -0
  189. package/dist/apps/platform/routes/orgs.js.map +1 -0
  190. package/dist/apps/platform/routes/projects.d.ts +740 -0
  191. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  192. package/dist/apps/platform/routes/projects.js +286 -0
  193. package/dist/apps/platform/routes/projects.js.map +1 -0
  194. package/dist/apps/platform/routes/scopes.d.ts +107 -0
  195. package/dist/apps/platform/routes/scopes.d.ts.map +1 -0
  196. package/dist/apps/platform/routes/scopes.js +66 -0
  197. package/dist/apps/platform/routes/scopes.js.map +1 -0
  198. package/dist/apps/platform/routes/usage.d.ts +588 -0
  199. package/dist/apps/platform/routes/usage.d.ts.map +1 -0
  200. package/dist/apps/platform/routes/usage.js +391 -0
  201. package/dist/apps/platform/routes/usage.js.map +1 -0
  202. package/dist/apps/relay/App.d.ts +44 -0
  203. package/dist/apps/relay/App.d.ts.map +1 -0
  204. package/dist/apps/relay/App.js +211 -0
  205. package/dist/apps/relay/App.js.map +1 -0
  206. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  207. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  208. package/dist/apps/relay/Sponsorships.js +194 -0
  209. package/dist/apps/relay/Sponsorships.js.map +1 -0
  210. package/dist/apps/relay/index.d.ts +3 -0
  211. package/dist/apps/relay/index.d.ts.map +1 -0
  212. package/dist/apps/relay/index.js +3 -0
  213. package/dist/apps/relay/index.js.map +1 -0
  214. package/dist/cli/Cli.d.ts +9 -2
  215. package/dist/cli/Cli.d.ts.map +1 -1
  216. package/dist/cli/Cli.js +12 -4
  217. package/dist/cli/Cli.js.map +1 -1
  218. package/dist/cli/commands/admin.d.ts +5 -1
  219. package/dist/cli/commands/admin.d.ts.map +1 -1
  220. package/dist/cli/commands/admin.js +82 -3
  221. package/dist/cli/commands/admin.js.map +1 -1
  222. package/dist/db/Db.d.ts +17 -0
  223. package/dist/db/Db.d.ts.map +1 -1
  224. package/dist/db/Db.js +254 -0
  225. package/dist/db/Db.js.map +1 -1
  226. package/dist/db/Schema.d.ts +159 -0
  227. package/dist/db/Schema.d.ts.map +1 -1
  228. package/dist/db/Schema.js +187 -2
  229. package/dist/db/Schema.js.map +1 -1
  230. package/dist/db/tables/billingSettings.d.ts +55 -0
  231. package/dist/db/tables/billingSettings.d.ts.map +1 -0
  232. package/dist/db/tables/billingSettings.js +70 -0
  233. package/dist/db/tables/billingSettings.js.map +1 -0
  234. package/dist/db/tables/invitations.d.ts +84 -0
  235. package/dist/db/tables/invitations.d.ts.map +1 -0
  236. package/dist/db/tables/invitations.js +165 -0
  237. package/dist/db/tables/invitations.js.map +1 -0
  238. package/dist/db/tables/memberships.d.ts +108 -0
  239. package/dist/db/tables/memberships.d.ts.map +1 -0
  240. package/dist/db/tables/memberships.js +153 -0
  241. package/dist/db/tables/memberships.js.map +1 -0
  242. package/dist/db/tables/organizations.d.ts +48 -0
  243. package/dist/db/tables/organizations.d.ts.map +1 -1
  244. package/dist/db/tables/organizations.js +97 -2
  245. package/dist/db/tables/organizations.js.map +1 -1
  246. package/dist/db/tables/projects.d.ts +65 -0
  247. package/dist/db/tables/projects.d.ts.map +1 -0
  248. package/dist/db/tables/projects.js +75 -0
  249. package/dist/db/tables/projects.js.map +1 -0
  250. package/dist/db/tables/requestUsage.d.ts +121 -0
  251. package/dist/db/tables/requestUsage.d.ts.map +1 -0
  252. package/dist/db/tables/requestUsage.js +150 -0
  253. package/dist/db/tables/requestUsage.js.map +1 -0
  254. package/dist/db/tables/sponsoredTransactions.d.ts +239 -0
  255. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  256. package/dist/db/tables/sponsoredTransactions.js +314 -0
  257. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  258. package/dist/db/tables/stripeCustomers.d.ts +81 -0
  259. package/dist/db/tables/stripeCustomers.d.ts.map +1 -0
  260. package/dist/db/tables/stripeCustomers.js +120 -0
  261. package/dist/db/tables/stripeCustomers.js.map +1 -0
  262. package/dist/db/tables/users.d.ts +48 -0
  263. package/dist/db/tables/users.d.ts.map +1 -0
  264. package/dist/db/tables/users.js +65 -0
  265. package/dist/db/tables/users.js.map +1 -0
  266. package/dist/handlers/internal/executionError.d.ts.map +1 -1
  267. package/dist/handlers/internal/executionError.js +2 -0
  268. package/dist/handlers/internal/executionError.js.map +1 -1
  269. package/dist/handlers/internal/multisig.d.ts +2 -6
  270. package/dist/handlers/internal/multisig.d.ts.map +1 -1
  271. package/dist/handlers/internal/multisig.js +11 -36
  272. package/dist/handlers/internal/multisig.js.map +1 -1
  273. package/dist/handlers/internal/sponsorship.d.ts +35 -2
  274. package/dist/handlers/internal/sponsorship.d.ts.map +1 -1
  275. package/dist/handlers/internal/sponsorship.js +53 -14
  276. package/dist/handlers/internal/sponsorship.js.map +1 -1
  277. package/dist/handlers/internal/utils.d.ts +10 -3
  278. package/dist/handlers/internal/utils.d.ts.map +1 -1
  279. package/dist/handlers/internal/utils.js +14 -6
  280. package/dist/handlers/internal/utils.js.map +1 -1
  281. package/dist/handlers/relay.d.ts +6 -2
  282. package/dist/handlers/relay.d.ts.map +1 -1
  283. package/dist/handlers/relay.js +16 -2
  284. package/dist/handlers/relay.js.map +1 -1
  285. package/dist/index.d.ts +1 -0
  286. package/dist/index.d.ts.map +1 -1
  287. package/dist/index.js +1 -0
  288. package/dist/index.js.map +1 -1
  289. package/dist/internal/Auth.d.ts +222 -6
  290. package/dist/internal/Auth.d.ts.map +1 -1
  291. package/dist/internal/Auth.js +625 -74
  292. package/dist/internal/Auth.js.map +1 -1
  293. package/dist/internal/Cache.d.ts.map +1 -1
  294. package/dist/internal/Cache.js +4 -1
  295. package/dist/internal/Cache.js.map +1 -1
  296. package/dist/internal/EdgeCache.d.ts +10 -0
  297. package/dist/internal/EdgeCache.d.ts.map +1 -1
  298. package/dist/internal/EdgeCache.js +39 -8
  299. package/dist/internal/EdgeCache.js.map +1 -1
  300. package/dist/internal/Fees.d.ts +27 -0
  301. package/dist/internal/Fees.d.ts.map +1 -0
  302. package/dist/internal/Fees.js +48 -0
  303. package/dist/internal/Fees.js.map +1 -0
  304. package/dist/internal/FundingRoutes.d.ts +183 -0
  305. package/dist/internal/FundingRoutes.d.ts.map +1 -0
  306. package/dist/internal/FundingRoutes.js +490 -0
  307. package/dist/internal/FundingRoutes.js.map +1 -0
  308. package/dist/internal/Id.d.ts +15 -0
  309. package/dist/internal/Id.d.ts.map +1 -0
  310. package/dist/internal/Id.js +22 -0
  311. package/dist/internal/Id.js.map +1 -0
  312. package/dist/internal/Log.d.ts +9 -3
  313. package/dist/internal/Log.d.ts.map +1 -1
  314. package/dist/internal/Log.js +7 -0
  315. package/dist/internal/Log.js.map +1 -1
  316. package/dist/internal/OpenApi.d.ts +10 -20
  317. package/dist/internal/OpenApi.d.ts.map +1 -1
  318. package/dist/internal/OpenApi.js +8 -58
  319. package/dist/internal/OpenApi.js.map +1 -1
  320. package/dist/internal/RateLimit.d.ts +25 -0
  321. package/dist/internal/RateLimit.d.ts.map +1 -1
  322. package/dist/internal/RateLimit.js +51 -0
  323. package/dist/internal/RateLimit.js.map +1 -1
  324. package/dist/internal/Response.d.ts +1 -1
  325. package/dist/internal/Response.d.ts.map +1 -1
  326. package/dist/internal/Schema.d.ts +8 -0
  327. package/dist/internal/Schema.d.ts.map +1 -1
  328. package/dist/internal/Schema.js +7 -0
  329. package/dist/internal/Schema.js.map +1 -1
  330. package/dist/internal/Store.d.ts +7 -1
  331. package/dist/internal/Store.d.ts.map +1 -1
  332. package/dist/internal/Store.js +16 -2
  333. package/dist/internal/Store.js.map +1 -1
  334. package/dist/internal/Viem.d.ts +84 -0
  335. package/dist/internal/Viem.d.ts.map +1 -1
  336. package/dist/internal/Webhooks.d.ts +1 -1
  337. package/dist/internal/Webhooks.d.ts.map +1 -1
  338. package/dist/internal/Webhooks.js +3 -3
  339. package/dist/internal/Webhooks.js.map +1 -1
  340. package/package.json +33 -6
  341. package/src/ApiKey.ts +10 -2
  342. package/src/ApiKeys.test.ts +155 -1
  343. package/src/ApiKeys.ts +203 -1
  344. package/src/App.test.ts +64 -75741
  345. package/src/App.ts +218 -420
  346. package/src/Client.test-d.ts +657 -15
  347. package/src/Scope.ts +26 -4
  348. package/src/Webhooks.ts +2 -2
  349. package/src/admin/apps/api-keys.test.ts +51 -0
  350. package/src/admin/apps/api-keys.ts +84 -0
  351. package/src/admin/apps/scopes.test.ts +11 -1
  352. package/src/admin/apps/scopes.ts +3 -0
  353. package/src/admin/apps/verified-tokens.ts +1 -1
  354. package/src/admin/ui/src/components/Page.tsx +2 -3
  355. package/src/admin/ui/src/routes/__root.tsx +2 -2
  356. package/src/admin/ui/src/routes/api-keys.tsx +2 -2
  357. package/src/admin/ui.generated.ts +13 -13
  358. package/src/analytics/Analytics.test.ts +527 -0
  359. package/src/analytics/Analytics.ts +318 -0
  360. package/src/analytics/tables/requestEvents.ts +523 -0
  361. package/src/apps/composition.test.ts +66 -0
  362. package/src/apps/data/App.test.ts +72 -0
  363. package/src/apps/data/App.ts +330 -0
  364. package/src/apps/data/index.ts +2 -0
  365. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  366. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  367. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  368. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +2 -2
  369. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  370. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +3 -3
  371. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  372. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  373. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  374. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +1 -1
  375. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  376. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  377. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  378. package/src/apps/data/routes/funding.test.ts +214 -0
  379. package/src/apps/data/routes/funding.ts +584 -0
  380. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +26 -5
  381. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  382. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +3 -3
  383. package/src/apps/{receipts.ts → data/routes/receipts.ts} +15 -22
  384. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +122 -7
  385. package/src/apps/{rpc.ts → data/routes/rpc.ts} +38 -8
  386. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +3 -3
  387. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  388. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +2 -2
  389. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  390. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +3 -3
  391. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  392. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +2 -2
  393. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  394. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +3 -3
  395. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  396. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +7 -7
  397. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +50 -43
  398. package/src/apps/docs/App.ts +65 -0
  399. package/src/apps/docs/index.ts +1 -0
  400. package/src/apps/docs/reference.ts +132 -0
  401. package/src/apps/index.ts +4 -0
  402. package/src/apps/mcp.test.ts +206 -0
  403. package/src/apps/mcp.ts +250 -0
  404. package/src/apps/metadata.ts +23 -0
  405. package/src/apps/platform/App.ts +169 -0
  406. package/src/apps/platform/Billing.test.ts +530 -0
  407. package/src/apps/platform/Billing.ts +682 -0
  408. package/src/apps/platform/index.ts +2 -0
  409. package/src/apps/platform/routes/api-keys.test.ts +493 -0
  410. package/src/apps/platform/routes/api-keys.ts +543 -0
  411. package/src/apps/platform/routes/billing.test.ts +1100 -0
  412. package/src/apps/platform/routes/billing.ts +966 -0
  413. package/src/apps/platform/routes/invitations.test.ts +409 -0
  414. package/src/apps/platform/routes/invitations.ts +587 -0
  415. package/src/apps/platform/routes/me.test.ts +351 -0
  416. package/src/apps/platform/routes/me.ts +106 -0
  417. package/src/apps/platform/routes/members.test.ts +195 -0
  418. package/src/apps/platform/routes/members.ts +313 -0
  419. package/src/apps/platform/routes/orgs.test.ts +313 -0
  420. package/src/apps/platform/routes/orgs.ts +365 -0
  421. package/src/apps/platform/routes/projects.test.ts +181 -0
  422. package/src/apps/platform/routes/projects.ts +367 -0
  423. package/src/apps/platform/routes/scopes.test.ts +29 -0
  424. package/src/apps/platform/routes/scopes.ts +85 -0
  425. package/src/apps/platform/routes/usage.test.ts +422 -0
  426. package/src/apps/platform/routes/usage.ts +527 -0
  427. package/src/apps/relay/App.test.ts +933 -0
  428. package/src/apps/relay/App.ts +236 -0
  429. package/src/apps/relay/Sponsorships.test.ts +375 -0
  430. package/src/apps/relay/Sponsorships.ts +306 -0
  431. package/src/apps/relay/index.ts +2 -0
  432. package/src/cli/Cli.test.ts +25 -2
  433. package/src/cli/Cli.ts +18 -3
  434. package/src/cli/commands/admin.test.ts +83 -0
  435. package/src/cli/commands/admin.ts +91 -3
  436. package/src/db/Db.ts +296 -0
  437. package/src/db/Schema.ts +241 -2
  438. package/src/db/tables/billingSettings.test.ts +87 -0
  439. package/src/db/tables/billingSettings.ts +108 -0
  440. package/src/db/tables/invitations.ts +198 -0
  441. package/src/db/tables/memberships.ts +208 -0
  442. package/src/db/tables/organizations.test.ts +38 -2
  443. package/src/db/tables/organizations.ts +117 -2
  444. package/src/db/tables/projects.ts +107 -0
  445. package/src/db/tables/requestUsage.ts +231 -0
  446. package/src/db/tables/sponsoredTransactions.test.ts +325 -0
  447. package/src/db/tables/sponsoredTransactions.ts +464 -0
  448. package/src/db/tables/stripeCustomers.test.ts +109 -0
  449. package/src/db/tables/stripeCustomers.ts +162 -0
  450. package/src/db/tables/users.ts +85 -0
  451. package/src/handlers/internal/executionError.ts +2 -0
  452. package/src/handlers/internal/multisig.test.ts +84 -10
  453. package/src/handlers/internal/multisig.ts +15 -50
  454. package/src/handlers/internal/sponsorship.ts +106 -20
  455. package/src/handlers/internal/utils.ts +19 -7
  456. package/src/handlers/{internal/relay.localnet.test.ts → relay.test.ts} +2 -2
  457. package/src/handlers/relay.ts +23 -5
  458. package/src/index.ts +1 -0
  459. package/src/internal/Auth.test.ts +491 -25
  460. package/src/internal/Auth.ts +839 -84
  461. package/src/internal/Cache.ts +5 -1
  462. package/src/internal/Cursor.test.ts +3 -2
  463. package/src/internal/EdgeCache.test.ts +27 -4
  464. package/src/internal/EdgeCache.ts +47 -9
  465. package/src/internal/Fees.test.ts +32 -0
  466. package/src/internal/Fees.ts +51 -0
  467. package/src/internal/FundingRoutes.ts +583 -0
  468. package/src/internal/Id.test.ts +17 -0
  469. package/src/internal/Id.ts +24 -0
  470. package/src/internal/Log.test.ts +2 -1
  471. package/src/internal/Log.ts +16 -3
  472. package/src/internal/MetricSink.ts +1 -1
  473. package/src/internal/OpenApi.ts +12 -60
  474. package/src/internal/RateLimit.test.ts +84 -0
  475. package/src/internal/RateLimit.ts +70 -0
  476. package/src/internal/Response.ts +1 -1
  477. package/src/internal/Schema.ts +8 -0
  478. package/src/internal/Store.test.ts +52 -0
  479. package/src/internal/Store.ts +24 -5
  480. package/src/internal/Tidx.local.test.ts +1 -1
  481. package/src/internal/VerifiedTokens.test.ts +1 -1
  482. package/src/internal/WebhookDestination.test.ts +1 -1
  483. package/src/internal/Webhooks.test.ts +7 -7
  484. package/src/internal/Webhooks.ts +4 -4
  485. package/dist/apps/activities.js.map +0 -1
  486. package/dist/apps/addresses.js.map +0 -1
  487. package/dist/apps/balances.d.ts.map +0 -1
  488. package/dist/apps/balances.js.map +0 -1
  489. package/dist/apps/blocks.d.ts.map +0 -1
  490. package/dist/apps/blocks.js.map +0 -1
  491. package/dist/apps/coingecko.d.ts.map +0 -1
  492. package/dist/apps/coingecko.js.map +0 -1
  493. package/dist/apps/exchanges.d.ts.map +0 -1
  494. package/dist/apps/exchanges.js.map +0 -1
  495. package/dist/apps/fee-amm.d.ts.map +0 -1
  496. package/dist/apps/fee-amm.js.map +0 -1
  497. package/dist/apps/indexer.d.ts.map +0 -1
  498. package/dist/apps/indexer.js.map +0 -1
  499. package/dist/apps/receipts.d.ts.map +0 -1
  500. package/dist/apps/receipts.js.map +0 -1
  501. package/dist/apps/rpc.d.ts.map +0 -1
  502. package/dist/apps/rpc.js.map +0 -1
  503. package/dist/apps/tokenlist.d.ts.map +0 -1
  504. package/dist/apps/tokenlist.js.map +0 -1
  505. package/dist/apps/tokens.d.ts.map +0 -1
  506. package/dist/apps/tokens.js.map +0 -1
  507. package/dist/apps/transactions.d.ts.map +0 -1
  508. package/dist/apps/transactions.js.map +0 -1
  509. package/dist/apps/transfers.d.ts.map +0 -1
  510. package/dist/apps/transfers.js.map +0 -1
  511. package/dist/apps/verified-tokens.d.ts.map +0 -1
  512. package/dist/apps/verified-tokens.js.map +0 -1
  513. package/dist/apps/webhooks.js.map +0 -1
  514. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  515. package/dist/internal/OpenApi.fonts.js.map +0 -1
  516. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  517. package/dist/internal/OpenApi.logo.js.map +0 -1
  518. package/src/handlers/internal/multisig.localnet.test.ts +0 -146
  519. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  520. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -0,0 +1,84 @@
1
+ import type { Selectable } from 'kysely';
2
+ import type * as Db from '../Db.js';
3
+ import type * as db_Schema from '../Schema.js';
4
+ import * as Memberships from './memberships.js';
5
+ /** Columns of the `invitations` table, derived from `Schema.Invitation`. */
6
+ export type Table = db_Schema.Invitation;
7
+ /** A stored invitation row. */
8
+ export type Record = Selectable<Table>;
9
+ /**
10
+ * Inserts an invitation and returns the stored record. Emails are stored
11
+ * lowercase so matching against verified emails is case-insensitive. Re-inviting
12
+ * a live (pending) (org, email) refreshes that row — role, inviter, expiry —
13
+ * rather than accumulating duplicates, matching the `invitations_pending_unique`
14
+ * partial index.
15
+ *
16
+ * @param db - The database.
17
+ * @param input - The invitation to insert.
18
+ * @returns The stored record.
19
+ */
20
+ export declare function create(db: Db.Db, input: create.Input): Promise<Record>;
21
+ export declare namespace create {
22
+ /** Fields accepted when inserting an invitation. */
23
+ type Input = {
24
+ /** Invitee email. */
25
+ email: string;
26
+ /** When the invitation expires (ISO 8601). */
27
+ expiresAt: string;
28
+ /** User id (`usr_…`) creating the invitation. */
29
+ invitedBy: string;
30
+ /** Organization id (`org_…`) the invitation joins. */
31
+ orgId: string;
32
+ /** Role granted on accept. */
33
+ role: Memberships.Role;
34
+ };
35
+ }
36
+ /**
37
+ * Reads an invitation by id.
38
+ *
39
+ * @param db - The database.
40
+ * @param id - The invitation id (`inv_…`).
41
+ * @returns The record, or `undefined` when absent.
42
+ */
43
+ export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
44
+ /**
45
+ * Lists an organization's pending invitations (unaccepted, unrevoked,
46
+ * unexpired), newest first.
47
+ *
48
+ * @param db - The database.
49
+ * @param orgId - The organization id (`org_…`).
50
+ * @returns The records.
51
+ */
52
+ export declare function listByOrg(db: Db.Db, orgId: string): Promise<Record[]>;
53
+ /**
54
+ * Lists pending invitations addressed to an email, joined with the inviting
55
+ * organization's name, newest first.
56
+ *
57
+ * @param db - The database.
58
+ * @param email - The invitee email (matched lowercase).
59
+ * @returns The records with `orgName` from the organization row.
60
+ */
61
+ export declare function listByEmail(db: Db.Db, email: string): Promise<(Record & {
62
+ orgName: string;
63
+ })[]>;
64
+ /**
65
+ * Revokes a pending invitation.
66
+ *
67
+ * @param db - The database.
68
+ * @param id - The invitation id (`inv_…`).
69
+ * @returns The revoked record, or `undefined` when absent or already settled.
70
+ */
71
+ export declare function revoke(db: Db.Db, id: string): Promise<Record | undefined>;
72
+ /**
73
+ * Accepts a pending invitation into a membership, atomically: the conditional
74
+ * update settles the invitation exactly once (double accepts lose the race).
75
+ * A new member is inserted at the invited role; an existing member is only ever
76
+ * elevated to it — accepting never demotes (which could strip the last owner).
77
+ *
78
+ * @param db - The database.
79
+ * @param id - The invitation id (`inv_…`).
80
+ * @param userId - The accepting user id (`usr_…`).
81
+ * @returns The accepted record, or `undefined` when absent, settled, or expired.
82
+ */
83
+ export declare function accept(db: Db.Db, id: string, userId: string): Promise<Record | undefined>;
84
+ //# sourceMappingURL=invitations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invitations.d.ts","sourceRoot":"","sources":["../../../src/db/tables/invitations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAE/C,4EAA4E;AAC5E,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAA;AAExC,+BAA+B;AAC/B,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CA6BtE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,oDAAoD;IACpD,KAAK,KAAK,GAAG;QACX,qBAAqB;QACrB,KAAK,EAAE,MAAM,CAAA;QACb,8CAA8C;QAC9C,SAAS,EAAE,MAAM,CAAA;QACjB,iDAAiD;QACjD,SAAS,EAAE,MAAM,CAAA;QACjB,sDAAsD;QACtD,KAAK,EAAE,MAAM,CAAA;QACb,8BAA8B;QAC9B,IAAI,EAAE,WAAW,CAAC,IAAI,CAAA;KACvB,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEtE;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC,CAY/F;AAED;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAUzE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAyCzF"}
@@ -0,0 +1,165 @@
1
+ import * as Id from '../../internal/Id.js';
2
+ import * as Memberships from './memberships.js';
3
+ /**
4
+ * Inserts an invitation and returns the stored record. Emails are stored
5
+ * lowercase so matching against verified emails is case-insensitive. Re-inviting
6
+ * a live (pending) (org, email) refreshes that row — role, inviter, expiry —
7
+ * rather than accumulating duplicates, matching the `invitations_pending_unique`
8
+ * partial index.
9
+ *
10
+ * @param db - The database.
11
+ * @param input - The invitation to insert.
12
+ * @returns The stored record.
13
+ */
14
+ export function create(db, input) {
15
+ const now = new Date().toISOString();
16
+ return db.kysely
17
+ .insertInto('invitations')
18
+ .values({
19
+ acceptedAt: null,
20
+ createdAt: now,
21
+ email: input.email.toLowerCase(),
22
+ expiresAt: input.expiresAt,
23
+ id: Id.generate('inv'),
24
+ invitedBy: input.invitedBy,
25
+ orgId: input.orgId,
26
+ revokedAt: null,
27
+ role: input.role,
28
+ })
29
+ .onConflict((oc) => oc
30
+ .columns(['orgId', 'email'])
31
+ .where('acceptedAt', 'is', null)
32
+ .where('revokedAt', 'is', null)
33
+ .doUpdateSet({
34
+ createdAt: now,
35
+ expiresAt: input.expiresAt,
36
+ invitedBy: input.invitedBy,
37
+ role: input.role,
38
+ }))
39
+ .returningAll()
40
+ .executeTakeFirstOrThrow();
41
+ }
42
+ /**
43
+ * Reads an invitation by id.
44
+ *
45
+ * @param db - The database.
46
+ * @param id - The invitation id (`inv_…`).
47
+ * @returns The record, or `undefined` when absent.
48
+ */
49
+ export function get(db, id) {
50
+ return db.kysely.selectFrom('invitations').selectAll().where('id', '=', id).executeTakeFirst();
51
+ }
52
+ /**
53
+ * Lists an organization's pending invitations (unaccepted, unrevoked,
54
+ * unexpired), newest first.
55
+ *
56
+ * @param db - The database.
57
+ * @param orgId - The organization id (`org_…`).
58
+ * @returns The records.
59
+ */
60
+ export function listByOrg(db, orgId) {
61
+ return pending(db).where('orgId', '=', orgId).orderBy('createdAt', 'desc').execute();
62
+ }
63
+ /**
64
+ * Lists pending invitations addressed to an email, joined with the inviting
65
+ * organization's name, newest first.
66
+ *
67
+ * @param db - The database.
68
+ * @param email - The invitee email (matched lowercase).
69
+ * @returns The records with `orgName` from the organization row.
70
+ */
71
+ export function listByEmail(db, email) {
72
+ return db.kysely
73
+ .selectFrom('invitations')
74
+ .innerJoin('organizations', 'organizations.id', 'invitations.orgId')
75
+ .where('invitations.acceptedAt', 'is', null)
76
+ .where('invitations.revokedAt', 'is', null)
77
+ .where('invitations.expiresAt', '>', new Date().toISOString())
78
+ .where('invitations.email', '=', email.toLowerCase())
79
+ .selectAll('invitations')
80
+ .select('organizations.name as orgName')
81
+ .orderBy('invitations.createdAt', 'desc')
82
+ .execute();
83
+ }
84
+ /**
85
+ * Revokes a pending invitation.
86
+ *
87
+ * @param db - The database.
88
+ * @param id - The invitation id (`inv_…`).
89
+ * @returns The revoked record, or `undefined` when absent or already settled.
90
+ */
91
+ export function revoke(db, id) {
92
+ const now = new Date().toISOString();
93
+ return db.kysely
94
+ .updateTable('invitations')
95
+ .set({ revokedAt: now })
96
+ .where('id', '=', id)
97
+ .where('acceptedAt', 'is', null)
98
+ .where('revokedAt', 'is', null)
99
+ .returningAll()
100
+ .executeTakeFirst();
101
+ }
102
+ /**
103
+ * Accepts a pending invitation into a membership, atomically: the conditional
104
+ * update settles the invitation exactly once (double accepts lose the race).
105
+ * A new member is inserted at the invited role; an existing member is only ever
106
+ * elevated to it — accepting never demotes (which could strip the last owner).
107
+ *
108
+ * @param db - The database.
109
+ * @param id - The invitation id (`inv_…`).
110
+ * @param userId - The accepting user id (`usr_…`).
111
+ * @returns The accepted record, or `undefined` when absent, settled, or expired.
112
+ */
113
+ export function accept(db, id, userId) {
114
+ const now = new Date().toISOString();
115
+ return db.kysely.transaction().execute(async (trx) => {
116
+ const invitation = await trx
117
+ .updateTable('invitations')
118
+ .set({ acceptedAt: now })
119
+ .where('id', '=', id)
120
+ .where('acceptedAt', 'is', null)
121
+ .where('revokedAt', 'is', null)
122
+ .where('expiresAt', '>', now)
123
+ .returningAll()
124
+ .executeTakeFirst();
125
+ if (!invitation)
126
+ return undefined;
127
+ const existing = await trx
128
+ .selectFrom('memberships')
129
+ .selectAll()
130
+ .where('orgId', '=', invitation.orgId)
131
+ .where('userId', '=', userId)
132
+ .executeTakeFirst();
133
+ if (!existing)
134
+ await trx
135
+ .insertInto('memberships')
136
+ .values({
137
+ createdAt: now,
138
+ orgId: invitation.orgId,
139
+ role: invitation.role,
140
+ updatedAt: now,
141
+ userId,
142
+ })
143
+ // A concurrent accept/join could insert first; keep that membership.
144
+ .onConflict((oc) => oc.columns(['orgId', 'userId']).doNothing())
145
+ .execute();
146
+ else if (Memberships.rank[invitation.role] > Memberships.rank[existing.role])
147
+ await trx
148
+ .updateTable('memberships')
149
+ .set({ role: invitation.role, updatedAt: now })
150
+ .where('orgId', '=', invitation.orgId)
151
+ .where('userId', '=', userId)
152
+ .execute();
153
+ return invitation;
154
+ });
155
+ }
156
+ /** Base query selecting pending invitations (unaccepted, unrevoked, unexpired). */
157
+ function pending(db) {
158
+ return db.kysely
159
+ .selectFrom('invitations')
160
+ .selectAll()
161
+ .where('acceptedAt', 'is', null)
162
+ .where('revokedAt', 'is', null)
163
+ .where('expiresAt', '>', new Date().toISOString());
164
+ }
165
+ //# sourceMappingURL=invitations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"invitations.js","sourceRoot":"","sources":["../../../src/db/tables/invitations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,108 @@
1
+ import type { Selectable } from 'kysely';
2
+ import type * as Db from '../Db.js';
3
+ import type * as db_Schema from '../Schema.js';
4
+ /** Columns of the `memberships` table, derived from `Schema.Membership`. */
5
+ export type Table = db_Schema.Membership;
6
+ /** A stored membership row. */
7
+ export type Record = Selectable<Table>;
8
+ /** A membership role. */
9
+ export type Role = Record['role'];
10
+ /** Fixed membership roles, least to most privileged. */
11
+ export declare const roles: readonly ["member", "admin", "owner"];
12
+ /** Privilege rank per role; higher ranks satisfy lower minimums. */
13
+ export declare const rank: {
14
+ readonly admin: 1;
15
+ readonly member: 0;
16
+ readonly owner: 2;
17
+ };
18
+ /**
19
+ * Inserts a membership and returns the stored record.
20
+ *
21
+ * @param db - The database.
22
+ * @param input - The membership to insert.
23
+ * @returns The stored record.
24
+ */
25
+ export declare function create(db: Db.Db, input: create.Input): Promise<Record>;
26
+ export declare namespace create {
27
+ /** Fields accepted when inserting a membership. */
28
+ type Input = {
29
+ /** Organization id (`org_…`). */
30
+ orgId: string;
31
+ /** Granted role. */
32
+ role: Role;
33
+ /** Member user id (`usr_…`). */
34
+ userId: string;
35
+ };
36
+ }
37
+ /**
38
+ * Reads one user's membership in an organization.
39
+ *
40
+ * @param db - The database.
41
+ * @param orgId - The organization id (`org_…`).
42
+ * @param userId - The member user id (`usr_…`).
43
+ * @returns The record, or `undefined` when absent.
44
+ */
45
+ export declare function get(db: Db.Db, orgId: string, userId: string): Promise<Record | undefined>;
46
+ /**
47
+ * Lists an organization's memberships, oldest first (stable member ordering).
48
+ *
49
+ * @param db - The database.
50
+ * @param orgId - The organization id (`org_…`).
51
+ * @returns The records.
52
+ */
53
+ export declare function listByOrg(db: Db.Db, orgId: string): Promise<Record[]>;
54
+ /**
55
+ * Lists an organization's memberships joined with member identity (address,
56
+ * email), oldest first.
57
+ *
58
+ * @param db - The database.
59
+ * @param orgId - The organization id (`org_…`).
60
+ * @returns The records with `address`/`email` from the member's user row.
61
+ */
62
+ export declare function listByOrgDetailed(db: Db.Db, orgId: string): Promise<(Record & {
63
+ address: string | null;
64
+ email: string | null;
65
+ })[]>;
66
+ /**
67
+ * Changes a member's role atomically, refusing to demote the last owner. The
68
+ * org's owner rows are locked for the transaction, so a concurrent demotion or
69
+ * removal cannot race two guards into leaving the organization ownerless.
70
+ *
71
+ * @param db - The database.
72
+ * @param orgId - The organization id (`org_…`).
73
+ * @param userId - The member user id (`usr_…`).
74
+ * @param input - The fields to update.
75
+ * @returns The updated record, or an `error` when absent or the last owner.
76
+ */
77
+ export declare function update(db: Db.Db, orgId: string, userId: string, input: update.Input): Promise<update.Result>;
78
+ export declare namespace update {
79
+ /** Mutable membership fields. */
80
+ type Input = {
81
+ /** New role. */
82
+ role: Role;
83
+ };
84
+ /** Outcome of a guarded role change. */
85
+ type Result = {
86
+ error: 'last_owner' | 'not_found';
87
+ record?: undefined;
88
+ } | {
89
+ error?: undefined;
90
+ record: Record;
91
+ };
92
+ }
93
+ /**
94
+ * Deletes a membership atomically, refusing to remove the last owner. Locks
95
+ * the org's owner rows for the transaction (see {@link update}) so concurrent
96
+ * removals cannot race the organization ownerless.
97
+ *
98
+ * @param db - The database.
99
+ * @param orgId - The organization id (`org_…`).
100
+ * @param userId - The member user id (`usr_…`).
101
+ * @returns `removed` on success, otherwise why the removal was refused.
102
+ */
103
+ export declare function remove(db: Db.Db, orgId: string, userId: string): Promise<remove.Result>;
104
+ export declare namespace remove {
105
+ /** Outcome of a guarded removal. */
106
+ type Result = 'last_owner' | 'not_found' | 'removed';
107
+ }
108
+ //# sourceMappingURL=memberships.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memberships.d.ts","sourceRoot":"","sources":["../../../src/db/tables/memberships.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExC,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,4EAA4E;AAC5E,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,UAAU,CAAA;AAExC,+BAA+B;AAC/B,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC,yBAAyB;AACzB,MAAM,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,CAAA;AAEjC,wDAAwD;AACxD,eAAO,MAAM,KAAK,uCAAkE,CAAA;AAEpF,oEAAoE;AACpE,eAAO,MAAM,IAAI;oBAAY,CAAC;qBAAU,CAAC;oBAAS,CAAC;CAAgD,CAAA;AAEnG;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAatE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,mDAAmD;IACnD,KAAK,KAAK,GAAG;QACX,iCAAiC;QACjC,KAAK,EAAE,MAAM,CAAA;QACb,oBAAoB;QACpB,IAAI,EAAE,IAAI,CAAA;QACV,gCAAgC;QAChC,MAAM,EAAE,MAAM,CAAA;KACf,CAAA;CACF;AAED;;;;;;;GAOG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAOzF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAOrE;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,CAAC,MAAM,GAAG;IAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAC,EAAE,CAAC,CASxE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,MAAM,CACpB,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,CAAC,KAAK,GAClB,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CA4BxB;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,iCAAiC;IACjC,KAAK,KAAK,GAAG;QACX,gBAAgB;QAChB,IAAI,EAAE,IAAI,CAAA;KACX,CAAA;IAED,wCAAwC;IACxC,KAAK,MAAM,GACP;QAAE,KAAK,EAAE,YAAY,GAAG,WAAW,CAAC;QAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAAE,GACzD;QAAE,KAAK,CAAC,EAAE,SAAS,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAA;CAC1C;AAED;;;;;;;;;GASG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAwBvF;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,oCAAoC;IACpC,KAAK,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,SAAS,CAAA;CACrD"}
@@ -0,0 +1,153 @@
1
+ /** Fixed membership roles, least to most privileged. */
2
+ export const roles = ['member', 'admin', 'owner'];
3
+ /** Privilege rank per role; higher ranks satisfy lower minimums. */
4
+ export const rank = { admin: 1, member: 0, owner: 2 };
5
+ /**
6
+ * Inserts a membership and returns the stored record.
7
+ *
8
+ * @param db - The database.
9
+ * @param input - The membership to insert.
10
+ * @returns The stored record.
11
+ */
12
+ export function create(db, input) {
13
+ const now = new Date().toISOString();
14
+ return db.kysely
15
+ .insertInto('memberships')
16
+ .values({
17
+ createdAt: now,
18
+ orgId: input.orgId,
19
+ role: input.role,
20
+ updatedAt: now,
21
+ userId: input.userId,
22
+ })
23
+ .returningAll()
24
+ .executeTakeFirstOrThrow();
25
+ }
26
+ /**
27
+ * Reads one user's membership in an organization.
28
+ *
29
+ * @param db - The database.
30
+ * @param orgId - The organization id (`org_…`).
31
+ * @param userId - The member user id (`usr_…`).
32
+ * @returns The record, or `undefined` when absent.
33
+ */
34
+ export function get(db, orgId, userId) {
35
+ return db.kysely
36
+ .selectFrom('memberships')
37
+ .selectAll()
38
+ .where('orgId', '=', orgId)
39
+ .where('userId', '=', userId)
40
+ .executeTakeFirst();
41
+ }
42
+ /**
43
+ * Lists an organization's memberships, oldest first (stable member ordering).
44
+ *
45
+ * @param db - The database.
46
+ * @param orgId - The organization id (`org_…`).
47
+ * @returns The records.
48
+ */
49
+ export function listByOrg(db, orgId) {
50
+ return db.kysely
51
+ .selectFrom('memberships')
52
+ .selectAll()
53
+ .where('orgId', '=', orgId)
54
+ .orderBy('createdAt', 'asc')
55
+ .execute();
56
+ }
57
+ /**
58
+ * Lists an organization's memberships joined with member identity (address,
59
+ * email), oldest first.
60
+ *
61
+ * @param db - The database.
62
+ * @param orgId - The organization id (`org_…`).
63
+ * @returns The records with `address`/`email` from the member's user row.
64
+ */
65
+ export function listByOrgDetailed(db, orgId) {
66
+ return db.kysely
67
+ .selectFrom('memberships')
68
+ .innerJoin('users', 'users.id', 'memberships.userId')
69
+ .where('memberships.orgId', '=', orgId)
70
+ .selectAll('memberships')
71
+ .select(['users.address', 'users.email'])
72
+ .orderBy('memberships.createdAt', 'asc')
73
+ .execute();
74
+ }
75
+ /**
76
+ * Changes a member's role atomically, refusing to demote the last owner. The
77
+ * org's owner rows are locked for the transaction, so a concurrent demotion or
78
+ * removal cannot race two guards into leaving the organization ownerless.
79
+ *
80
+ * @param db - The database.
81
+ * @param orgId - The organization id (`org_…`).
82
+ * @param userId - The member user id (`usr_…`).
83
+ * @param input - The fields to update.
84
+ * @returns The updated record, or an `error` when absent or the last owner.
85
+ */
86
+ export function update(db, orgId, userId, input) {
87
+ const now = new Date().toISOString();
88
+ return db.kysely.transaction().execute(async (trx) => {
89
+ const owners = await trx
90
+ .selectFrom('memberships')
91
+ .select('userId')
92
+ .where('orgId', '=', orgId)
93
+ .where('role', '=', 'owner')
94
+ .forUpdate()
95
+ .execute();
96
+ const current = await trx
97
+ .selectFrom('memberships')
98
+ .selectAll()
99
+ .where('orgId', '=', orgId)
100
+ .where('userId', '=', userId)
101
+ .executeTakeFirst();
102
+ if (!current)
103
+ return { error: 'not_found' };
104
+ if (current.role === 'owner' && input.role !== 'owner' && owners.length <= 1)
105
+ return { error: 'last_owner' };
106
+ const record = await trx
107
+ .updateTable('memberships')
108
+ .set({ role: input.role, updatedAt: now })
109
+ .where('orgId', '=', orgId)
110
+ .where('userId', '=', userId)
111
+ .returningAll()
112
+ .executeTakeFirstOrThrow();
113
+ return { record };
114
+ });
115
+ }
116
+ /**
117
+ * Deletes a membership atomically, refusing to remove the last owner. Locks
118
+ * the org's owner rows for the transaction (see {@link update}) so concurrent
119
+ * removals cannot race the organization ownerless.
120
+ *
121
+ * @param db - The database.
122
+ * @param orgId - The organization id (`org_…`).
123
+ * @param userId - The member user id (`usr_…`).
124
+ * @returns `removed` on success, otherwise why the removal was refused.
125
+ */
126
+ export function remove(db, orgId, userId) {
127
+ return db.kysely.transaction().execute(async (trx) => {
128
+ const owners = await trx
129
+ .selectFrom('memberships')
130
+ .select('userId')
131
+ .where('orgId', '=', orgId)
132
+ .where('role', '=', 'owner')
133
+ .forUpdate()
134
+ .execute();
135
+ const current = await trx
136
+ .selectFrom('memberships')
137
+ .selectAll()
138
+ .where('orgId', '=', orgId)
139
+ .where('userId', '=', userId)
140
+ .executeTakeFirst();
141
+ if (!current)
142
+ return 'not_found';
143
+ if (current.role === 'owner' && owners.length <= 1)
144
+ return 'last_owner';
145
+ await trx
146
+ .deleteFrom('memberships')
147
+ .where('orgId', '=', orgId)
148
+ .where('userId', '=', userId)
149
+ .execute();
150
+ return 'removed';
151
+ });
152
+ }
153
+ //# sourceMappingURL=memberships.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memberships.js","sourceRoot":"","sources":["../../../src/db/tables/memberships.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import type { Selectable } from 'kysely';
2
2
  import type * as Db from '../Db.js';
3
3
  import type * as db_Schema from '../Schema.js';
4
+ import type * as Memberships from './memberships.js';
4
5
  /** Columns of the `organizations` table, derived from `Schema.Organization`. */
5
6
  export type Table = db_Schema.Organization;
6
7
  /** A stored organization row. */
@@ -23,8 +24,36 @@ export declare namespace create {
23
24
  id?: string | undefined;
24
25
  /** Human-readable organization name. */
25
26
  name: string;
27
+ /** Owning user id (`usr_…`); null for organizations created by the super admin. */
28
+ userId?: string | undefined;
26
29
  };
27
30
  }
31
+ /**
32
+ * Inserts an organization owned by `userId` — the org row plus its `owner`
33
+ * membership, atomically.
34
+ *
35
+ * @param db - The database.
36
+ * @param input - The organization to insert.
37
+ * @returns The stored record.
38
+ */
39
+ export declare function createOwned(db: Db.Db, input: createOwned.Input): Promise<Record>;
40
+ export declare namespace createOwned {
41
+ /** Fields accepted when inserting a user-owned organization. */
42
+ type Input = {
43
+ /** Human-readable organization name. */
44
+ name: string;
45
+ /** Owning user id (`usr_…`), granted the `owner` membership. */
46
+ userId: string;
47
+ };
48
+ }
49
+ /**
50
+ * Deletes an organization and its owned rows atomically.
51
+ *
52
+ * @param db - The database.
53
+ * @param id - The organization id (`org_…`).
54
+ * @returns Whether the organization existed and was deleted.
55
+ */
56
+ export declare function deleteOrganization(db: Db.Db, id: string): Promise<boolean>;
28
57
  /**
29
58
  * Reads an organization by id.
30
59
  *
@@ -40,6 +69,25 @@ export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
40
69
  * @returns The records.
41
70
  */
42
71
  export declare function list(db: Db.Db): Promise<Record[]>;
72
+ /**
73
+ * Lists organizations owned by `userId`, newest first.
74
+ *
75
+ * @param db - The database.
76
+ * @param userId - The owning user id (`usr_…`).
77
+ * @returns The records.
78
+ */
79
+ export declare function listByUser(db: Db.Db, userId: string): Promise<Record[]>;
80
+ /**
81
+ * Lists organizations `userId` is a member of (any role), newest first. Each
82
+ * row carries the caller's membership `role`.
83
+ *
84
+ * @param db - The database.
85
+ * @param userId - The member user id (`usr_…`).
86
+ * @returns The records.
87
+ */
88
+ export declare function listByMember(db: Db.Db, userId: string): Promise<(Record & {
89
+ role: Memberships.Role;
90
+ })[]>;
43
91
  /**
44
92
  * Renames an organization, bumping `updatedAt`.
45
93
  *
@@ -1 +1 @@
1
- {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../src/db/tables/organizations.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,gFAAgF;AAChF,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,YAAY,CAAA;AAE1C,iCAAiC;AACjC,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAatE;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,sDAAsD;IACtD,KAAK,KAAK,GAAG;QACX,iFAAiF;QACjF,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,oEAAoE;QACpE,EAAE,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QACvB,wCAAwC;QACxC,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAEjD;AAED;;;;;;;GAOG;AACH,wBAAgB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAO9F;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,mCAAmC;IACnC,KAAK,KAAK,GAAG;QACX,4CAA4C;QAC5C,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAa1E;AAED,MAAM,CAAC,OAAO,WAAW,MAAM,CAAC;IAC9B,4DAA4D;IAC5D,KAAK,KAAK,GAAG;QACX,8DAA8D;QAC9D,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC9B,gEAAgE;QAChE,EAAE,EAAE,MAAM,CAAA;QACV,4DAA4D;QAC5D,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC1B,CAAA;CACF"}
1
+ {"version":3,"file":"organizations.d.ts","sourceRoot":"","sources":["../../../src/db/tables/organizations.ts"],"names":[],"mappings":"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"}