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,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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"}
@@ -23,8 +23,36 @@ export declare namespace create {
23
23
  id?: string | undefined;
24
24
  /** Human-readable organization name. */
25
25
  name: string;
26
+ /** Owning user id (`usr_…`); null for organizations created by the super admin. */
27
+ userId?: string | undefined;
26
28
  };
27
29
  }
30
+ /**
31
+ * Inserts an organization owned by `userId` — the org row plus its `owner`
32
+ * membership, atomically.
33
+ *
34
+ * @param db - The database.
35
+ * @param input - The organization to insert.
36
+ * @returns The stored record.
37
+ */
38
+ export declare function createOwned(db: Db.Db, input: createOwned.Input): Promise<Record>;
39
+ export declare namespace createOwned {
40
+ /** Fields accepted when inserting a user-owned organization. */
41
+ type Input = {
42
+ /** Human-readable organization name. */
43
+ name: string;
44
+ /** Owning user id (`usr_…`), granted the `owner` membership. */
45
+ userId: string;
46
+ };
47
+ }
48
+ /**
49
+ * Deletes an organization and its owned rows atomically.
50
+ *
51
+ * @param db - The database.
52
+ * @param id - The organization id (`org_…`).
53
+ * @returns Whether the organization existed and was deleted.
54
+ */
55
+ export declare function deleteOrganization(db: Db.Db, id: string): Promise<boolean>;
28
56
  /**
29
57
  * Reads an organization by id.
30
58
  *
@@ -40,6 +68,22 @@ export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
40
68
  * @returns The records.
41
69
  */
42
70
  export declare function list(db: Db.Db): Promise<Record[]>;
71
+ /**
72
+ * Lists organizations owned by `userId`, newest first.
73
+ *
74
+ * @param db - The database.
75
+ * @param userId - The owning user id (`usr_…`).
76
+ * @returns The records.
77
+ */
78
+ export declare function listByUser(db: Db.Db, userId: string): Promise<Record[]>;
79
+ /**
80
+ * Lists organizations `userId` is a member of (any role), newest first.
81
+ *
82
+ * @param db - The database.
83
+ * @param userId - The member user id (`usr_…`).
84
+ * @returns The records.
85
+ */
86
+ export declare function listByMember(db: Db.Db, userId: string): Promise<Record[]>;
43
87
  /**
44
88
  * Renames an organization, bumping `updatedAt`.
45
89
  *
@@ -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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"}
@@ -17,10 +17,68 @@ export function create(db, input) {
17
17
  id: input.id ?? `org_${nanoid()}`,
18
18
  name: input.name,
19
19
  updatedAt: now,
20
+ userId: input.userId ?? null,
20
21
  })
21
22
  .returningAll()
22
23
  .executeTakeFirstOrThrow();
23
24
  }
25
+ /**
26
+ * Inserts an organization owned by `userId` — the org row plus its `owner`
27
+ * membership, atomically.
28
+ *
29
+ * @param db - The database.
30
+ * @param input - The organization to insert.
31
+ * @returns The stored record.
32
+ */
33
+ export function createOwned(db, input) {
34
+ const now = new Date().toISOString();
35
+ return db.kysely.transaction().execute(async (trx) => {
36
+ const record = await trx
37
+ .insertInto('organizations')
38
+ .values({
39
+ createdAt: now,
40
+ createdBy: input.userId,
41
+ id: `org_${nanoid()}`,
42
+ name: input.name,
43
+ updatedAt: now,
44
+ userId: input.userId,
45
+ })
46
+ .returningAll()
47
+ .executeTakeFirstOrThrow();
48
+ await trx
49
+ .insertInto('memberships')
50
+ .values({
51
+ createdAt: now,
52
+ orgId: record.id,
53
+ role: 'owner',
54
+ updatedAt: now,
55
+ userId: input.userId,
56
+ })
57
+ .execute();
58
+ return record;
59
+ });
60
+ }
61
+ /**
62
+ * Deletes an organization and its owned rows atomically.
63
+ *
64
+ * @param db - The database.
65
+ * @param id - The organization id (`org_…`).
66
+ * @returns Whether the organization existed and was deleted.
67
+ */
68
+ export function deleteOrganization(db, id) {
69
+ return db.kysely.transaction().execute(async (trx) => {
70
+ await trx
71
+ .deleteFrom('webhook_subscriptions')
72
+ .where('ownerType', '=', 'api_key')
73
+ .where('ownerId', '=', id)
74
+ .execute();
75
+ await trx.deleteFrom('invitations').where('orgId', '=', id).execute();
76
+ await trx.deleteFrom('memberships').where('orgId', '=', id).execute();
77
+ await trx.deleteFrom('projects').where('orgId', '=', id).execute();
78
+ const result = await trx.deleteFrom('organizations').where('id', '=', id).executeTakeFirst();
79
+ return result.numDeletedRows > 0n;
80
+ });
81
+ }
24
82
  /**
25
83
  * Reads an organization by id.
26
84
  *
@@ -40,6 +98,37 @@ export function get(db, id) {
40
98
  export function list(db) {
41
99
  return db.kysely.selectFrom('organizations').selectAll().orderBy('createdAt', 'desc').execute();
42
100
  }
101
+ /**
102
+ * Lists organizations owned by `userId`, newest first.
103
+ *
104
+ * @param db - The database.
105
+ * @param userId - The owning user id (`usr_…`).
106
+ * @returns The records.
107
+ */
108
+ export function listByUser(db, userId) {
109
+ return db.kysely
110
+ .selectFrom('organizations')
111
+ .selectAll()
112
+ .where('userId', '=', userId)
113
+ .orderBy('createdAt', 'desc')
114
+ .execute();
115
+ }
116
+ /**
117
+ * Lists organizations `userId` is a member of (any role), newest first.
118
+ *
119
+ * @param db - The database.
120
+ * @param userId - The member user id (`usr_…`).
121
+ * @returns The records.
122
+ */
123
+ export function listByMember(db, userId) {
124
+ return db.kysely
125
+ .selectFrom('organizations')
126
+ .innerJoin('memberships', 'memberships.orgId', 'organizations.id')
127
+ .where('memberships.userId', '=', userId)
128
+ .selectAll('organizations')
129
+ .orderBy('organizations.createdAt', 'desc')
130
+ .execute();
131
+ }
43
132
  /**
44
133
  * Renames an organization, bumping `updatedAt`.
45
134
  *
@@ -1 +1 @@
1
- {"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../../src/db/tables/organizations.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,KAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,eAAe,CAAC;SAC3B,MAAM,CAAC;QACN,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,EAAE,EAAE,KAAK,CAAC,EAAE,IAAI,OAAO,MAAM,EAAE,EAAE;QACjC,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,SAAS,EAAE,GAAG;KACf,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAA;AAC9B,CAAC;AAcD;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAU;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;AAClG,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,IAAI,CAAC,EAAS;IAC5B,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,OAAO,EAAE,CAAA;AACjG,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,EAAU,EAAE,KAAmB;IAC/D,OAAO,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,eAAe,CAAC;SAC5B,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;SAC9D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;SACpB,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;AACvB,CAAC;AAUD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,EAAS,EAAE,KAAmB;IACzD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,EAAE,CAAC,MAAM;SACZ,UAAU,CAAC,eAAe,CAAC;SAC3B,MAAM,CAAC;QACN,SAAS,EAAE,GAAG;QACd,SAAS,EAAE,KAAK,CAAC,SAAS,IAAI,IAAI;QAClC,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,EAAE;QAC5B,SAAS,EAAE,GAAG;KACf,CAAC;SACD,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;SAC/C,OAAO,EAAE,CAAA;AACd,CAAC"}
1
+ {"version":3,"file":"organizations.js","sourceRoot":"","sources":["../../../src/db/tables/organizations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,65 @@
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 `projects` table, derived from `Schema.Project`. */
5
+ export type Table = db_Schema.Project;
6
+ /** A stored project row. */
7
+ export type Record = Selectable<Table>;
8
+ /**
9
+ * Inserts a project and returns the stored record.
10
+ *
11
+ * @param db - The database.
12
+ * @param input - The project to insert.
13
+ * @returns The stored record.
14
+ */
15
+ export declare function create(db: Db.Db, input: create.Input): Promise<Record>;
16
+ export declare namespace create {
17
+ /** Fields accepted when inserting a project. */
18
+ type Input = {
19
+ /** Human-readable project name. */
20
+ name: string;
21
+ /** Owning organization id (`org_…`). */
22
+ orgId: string;
23
+ };
24
+ }
25
+ /**
26
+ * Deletes a project.
27
+ *
28
+ * @param db - The database.
29
+ * @param id - The project id (`prj_…`).
30
+ * @returns Whether the project existed and was deleted.
31
+ */
32
+ export declare function deleteProject(db: Db.Db, id: string): Promise<boolean>;
33
+ /**
34
+ * Reads a project by id.
35
+ *
36
+ * @param db - The database.
37
+ * @param id - The project id (`prj_…`).
38
+ * @returns The record, or `undefined` when absent.
39
+ */
40
+ export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
41
+ /**
42
+ * Lists an organization's projects, newest first.
43
+ *
44
+ * @param db - The database.
45
+ * @param orgId - The owning organization id (`org_…`).
46
+ * @returns The records.
47
+ */
48
+ export declare function listByOrg(db: Db.Db, orgId: string): Promise<Record[]>;
49
+ /**
50
+ * Renames a project, bumping `updatedAt`.
51
+ *
52
+ * @param db - The database.
53
+ * @param id - The project id (`prj_…`).
54
+ * @param input - The fields to update.
55
+ * @returns The updated record, or `undefined` when absent.
56
+ */
57
+ export declare function update(db: Db.Db, id: string, input: update.Input): Promise<Record | undefined>;
58
+ export declare namespace update {
59
+ /** Mutable project fields. */
60
+ type Input = {
61
+ /** New human-readable project name. */
62
+ name: string;
63
+ };
64
+ }
65
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../../../src/db/tables/projects.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,sEAAsE;AACtE,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,CAAA;AAErC,4BAA4B;AAC5B,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC;;;;;;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,gDAAgD;IAChD,KAAK,KAAK,GAAG;QACX,mCAAmC;QACnC,IAAI,EAAE,MAAM,CAAA;QACZ,wCAAwC;QACxC,KAAK,EAAE,MAAM,CAAA;KACd,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,aAAa,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAG3E;AAED;;;;;;GAMG;AACH,wBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAEtE;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,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,8BAA8B;IAC9B,KAAK,KAAK,GAAG;QACX,uCAAuC;QACvC,IAAI,EAAE,MAAM,CAAA;KACb,CAAA;CACF"}
@@ -0,0 +1,75 @@
1
+ import { nanoid } from 'nanoid';
2
+ /**
3
+ * Inserts a project and returns the stored record.
4
+ *
5
+ * @param db - The database.
6
+ * @param input - The project to insert.
7
+ * @returns The stored record.
8
+ */
9
+ export function create(db, input) {
10
+ const now = new Date().toISOString();
11
+ return db.kysely
12
+ .insertInto('projects')
13
+ .values({
14
+ createdAt: now,
15
+ id: `prj_${nanoid()}`,
16
+ name: input.name,
17
+ orgId: input.orgId,
18
+ updatedAt: now,
19
+ })
20
+ .returningAll()
21
+ .executeTakeFirstOrThrow();
22
+ }
23
+ /**
24
+ * Deletes a project.
25
+ *
26
+ * @param db - The database.
27
+ * @param id - The project id (`prj_…`).
28
+ * @returns Whether the project existed and was deleted.
29
+ */
30
+ export async function deleteProject(db, id) {
31
+ const result = await db.kysely.deleteFrom('projects').where('id', '=', id).executeTakeFirst();
32
+ return result.numDeletedRows > 0n;
33
+ }
34
+ /**
35
+ * Reads a project by id.
36
+ *
37
+ * @param db - The database.
38
+ * @param id - The project id (`prj_…`).
39
+ * @returns The record, or `undefined` when absent.
40
+ */
41
+ export function get(db, id) {
42
+ return db.kysely.selectFrom('projects').selectAll().where('id', '=', id).executeTakeFirst();
43
+ }
44
+ /**
45
+ * Lists an organization's projects, newest first.
46
+ *
47
+ * @param db - The database.
48
+ * @param orgId - The owning organization id (`org_…`).
49
+ * @returns The records.
50
+ */
51
+ export function listByOrg(db, orgId) {
52
+ return db.kysely
53
+ .selectFrom('projects')
54
+ .selectAll()
55
+ .where('orgId', '=', orgId)
56
+ .orderBy('createdAt', 'desc')
57
+ .execute();
58
+ }
59
+ /**
60
+ * Renames a project, bumping `updatedAt`.
61
+ *
62
+ * @param db - The database.
63
+ * @param id - The project id (`prj_…`).
64
+ * @param input - The fields to update.
65
+ * @returns The updated record, or `undefined` when absent.
66
+ */
67
+ export function update(db, id, input) {
68
+ return db.kysely
69
+ .updateTable('projects')
70
+ .set({ name: input.name, updatedAt: new Date().toISOString() })
71
+ .where('id', '=', id)
72
+ .returningAll()
73
+ .executeTakeFirst();
74
+ }
75
+ //# sourceMappingURL=projects.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.js","sourceRoot":"","sources":["../../../src/db/tables/projects.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B;;;;;;GAMG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,KAAmB;IACnD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,UAAU,CAAC;SACtB,MAAM,CAAC;QACN,SAAS,EAAE,GAAG;QACd,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE;QACrB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,SAAS,EAAE,GAAG;KACf,CAAC;SACD,YAAY,EAAE;SACd,uBAAuB,EAAE,CAAA;AAC9B,CAAC;AAYD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,EAAS,EAAE,EAAU;IACvD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;IAC7F,OAAO,MAAM,CAAC,cAAc,GAAG,EAAE,CAAA;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAU;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;AAC7F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,SAAS,CAAC,EAAS,EAAE,KAAa;IAChD,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,UAAU,CAAC;SACtB,SAAS,EAAE;SACX,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;SAC5B,OAAO,EAAE,CAAA;AACd,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,MAAM,CAAC,EAAS,EAAE,EAAU,EAAE,KAAmB;IAC/D,OAAO,EAAE,CAAC,MAAM;SACb,WAAW,CAAC,UAAU,CAAC;SACvB,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;SAC9D,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;SACpB,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;AACvB,CAAC"}
@@ -0,0 +1,120 @@
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 `sponsored_transactions` table, derived from `Schema.SponsoredTransaction`. */
5
+ export type Table = db_Schema.SponsoredTransaction;
6
+ /** A stored sponsored-transaction row. */
7
+ export type Record = Selectable<Table>;
8
+ /**
9
+ * Records one sponsorship commitment as `pending`, keyed by its fee-payer
10
+ * sign payload. Written after fee-payer signing and before any broadcast, so
11
+ * no sponsored transaction goes unrecorded; a later recording site for the
12
+ * same envelope (raw submission after a fill intent) upgrades the row with
13
+ * its transaction hash, reopening failed rows for finalization.
14
+ *
15
+ * @param db - The database.
16
+ * @param input - Attribution and envelope facts captured at signing time.
17
+ * @returns The stored record.
18
+ */
19
+ export declare function upsert(db: Db.Db, input: upsert.Input): Promise<Record>;
20
+ export declare namespace upsert {
21
+ /** Attribution and envelope facts recorded at sponsorship time. */
22
+ type Input = {
23
+ /** API key id (`key_…`) that requested sponsorship. */
24
+ apiKeyId: string;
25
+ /** Whether the sponsorship accrues billable spend; false for sandbox. */
26
+ billable: boolean;
27
+ /** Chain the sponsored transaction targets. */
28
+ chainId: number;
29
+ /** Key environment the sponsorship was requested under. */
30
+ environment: Table['environment'];
31
+ /** Fee token the sponsorship resolved, when known. */
32
+ feeToken?: string | undefined;
33
+ /** Organization id (`org_…`) the spend attributes to. */
34
+ orgId: string;
35
+ /** Project id (`prj_…`) the spend attributes to. */
36
+ projectId: string;
37
+ /** Fee-payer sign payload — a stable identity for the sponsored envelope. */
38
+ signPayload: string;
39
+ /** Serialized sponsored transaction, kept for observability beyond log retention. */
40
+ transaction: string;
41
+ /** Transaction hash; omit for fill intents, whose senders have not signed yet. */
42
+ transactionHash?: string | undefined;
43
+ };
44
+ }
45
+ /**
46
+ * Reads one sponsorship row by id.
47
+ *
48
+ * @param db - The database.
49
+ * @param id - The sponsored-transaction id (`stx_…`).
50
+ * @returns The record, or `undefined` when absent.
51
+ */
52
+ export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
53
+ /**
54
+ * Lists pending sponsorships, oldest first, for the finalization job.
55
+ *
56
+ * @param db - The database.
57
+ * @param options - Paging options.
58
+ * @returns The pending records.
59
+ */
60
+ export declare function listPending(db: Db.Db, options?: listPending.Options): Promise<Record[]>;
61
+ export declare namespace listPending {
62
+ /** Options for {@link listPending}. */
63
+ type Options = {
64
+ /** Maximum rows to return. */
65
+ limit?: number | undefined;
66
+ };
67
+ }
68
+ /**
69
+ * Lists hash-less fill intents, oldest first, for the reconciliation pass.
70
+ * Failed intents are included only when the caller supplies a recovery floor.
71
+ *
72
+ * @param db - The database.
73
+ * @param options - Paging options.
74
+ * @returns The pending intents.
75
+ */
76
+ export declare function listIntents(db: Db.Db, options?: listIntents.Options): Promise<Record[]>;
77
+ export declare namespace listIntents {
78
+ /** Options for {@link listIntents}. */
79
+ type Options = listPending.Options & {
80
+ /** Include failed intents whose terminal timestamp is at or after this ISO timestamp. */
81
+ failedSince?: string | undefined;
82
+ };
83
+ }
84
+ /**
85
+ * Fills a reconciled intent's transaction hash and reopens failed intents.
86
+ * A no-op once another pass already assigned the hash.
87
+ *
88
+ * @param db - The database.
89
+ * @param id - The sponsored-transaction id (`stx_…`).
90
+ * @param transactionHash - The matched on-chain transaction hash.
91
+ */
92
+ export declare function assignTransactionHash(db: Db.Db, id: string, transactionHash: string): Promise<void>;
93
+ /**
94
+ * Transitions a pending sponsorship to `finalized` with the receipt's actual
95
+ * fee. A no-op when the row is no longer pending (idempotent re-runs).
96
+ *
97
+ * @param db - The database.
98
+ * @param id - The sponsored-transaction id (`stx_…`).
99
+ * @param input - The finalized fee facts.
100
+ */
101
+ export declare function finalize(db: Db.Db, id: string, input: finalize.Input): Promise<void>;
102
+ export declare namespace finalize {
103
+ /** Fee facts resolved from the transaction receipt. */
104
+ type Input = {
105
+ /** Actual fee paid in fee-token base units. */
106
+ feeAmount: string;
107
+ /** When the sponsorship finalized (ISO 8601). */
108
+ finalizedAt: string;
109
+ };
110
+ }
111
+ /**
112
+ * Transitions a pending sponsorship to `failed` (never landed within the
113
+ * pending TTL). A no-op when the row is no longer pending.
114
+ *
115
+ * @param db - The database.
116
+ * @param id - The sponsored-transaction id (`stx_…`).
117
+ * @param finalizedAt - When the sponsorship was marked failed (ISO 8601).
118
+ */
119
+ export declare function fail(db: Db.Db, id: string, finalizedAt: string): Promise<void>;
120
+ //# sourceMappingURL=sponsoredTransactions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sponsoredTransactions.d.ts","sourceRoot":"","sources":["../../../src/db/tables/sponsoredTransactions.ts"],"names":[],"mappings":"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"}