tapimo 0.0.2 → 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 (517) hide show
  1. package/README.md +38 -16
  2. package/dist/ApiKey.d.ts +14 -11
  3. package/dist/ApiKey.d.ts.map +1 -1
  4. package/dist/ApiKey.js +11 -12
  5. package/dist/ApiKey.js.map +1 -1
  6. package/dist/ApiKeys.d.ts +207 -0
  7. package/dist/ApiKeys.d.ts.map +1 -0
  8. package/dist/ApiKeys.js +282 -0
  9. package/dist/ApiKeys.js.map +1 -0
  10. package/dist/App.d.ts +6771 -3819
  11. package/dist/App.d.ts.map +1 -1
  12. package/dist/App.js +145 -317
  13. package/dist/App.js.map +1 -1
  14. package/dist/Handler.d.ts +86 -0
  15. package/dist/Handler.d.ts.map +1 -0
  16. package/dist/Handler.js +83 -0
  17. package/dist/Handler.js.map +1 -0
  18. package/dist/Scope.d.ts +14 -4
  19. package/dist/Scope.d.ts.map +1 -1
  20. package/dist/Scope.js +16 -4
  21. package/dist/Scope.js.map +1 -1
  22. package/dist/Webhooks.d.ts +5 -7
  23. package/dist/Webhooks.d.ts.map +1 -1
  24. package/dist/Webhooks.js +11 -4
  25. package/dist/Webhooks.js.map +1 -1
  26. package/dist/admin/Access.d.ts +1 -3
  27. package/dist/admin/Access.d.ts.map +1 -1
  28. package/dist/admin/Access.js +1 -3
  29. package/dist/admin/Access.js.map +1 -1
  30. package/dist/admin/App.d.ts +167 -205
  31. package/dist/admin/App.d.ts.map +1 -1
  32. package/dist/admin/App.js +2 -4
  33. package/dist/admin/App.js.map +1 -1
  34. package/dist/admin/apps/api-keys.d.ts +105 -5
  35. package/dist/admin/apps/api-keys.d.ts.map +1 -1
  36. package/dist/admin/apps/api-keys.js +75 -9
  37. package/dist/admin/apps/api-keys.js.map +1 -1
  38. package/dist/admin/apps/scopes.d.ts +6 -0
  39. package/dist/admin/apps/scopes.d.ts.map +1 -1
  40. package/dist/admin/apps/verified-tokens.d.ts +35 -149
  41. package/dist/admin/apps/verified-tokens.d.ts.map +1 -1
  42. package/dist/admin/apps/verified-tokens.js +18 -39
  43. package/dist/admin/apps/verified-tokens.js.map +1 -1
  44. package/dist/admin/ui.generated.d.ts +1 -1
  45. package/dist/admin/ui.generated.js +1 -1
  46. package/dist/apps/data/App.d.ts +19176 -0
  47. package/dist/apps/data/App.d.ts.map +1 -0
  48. package/dist/apps/data/App.js +236 -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} +49 -49
  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} +183 -183
  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} +460 -460
  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} +94 -94
  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/{indexer.d.ts → data/routes/indexer.d.ts} +4 -4
  83. package/dist/apps/data/routes/indexer.d.ts.map +1 -0
  84. package/dist/apps/{indexer.js → data/routes/indexer.js} +13 -9
  85. package/dist/apps/data/routes/indexer.js.map +1 -0
  86. package/dist/apps/{receipts.d.ts → data/routes/receipts.d.ts} +6 -6
  87. package/dist/apps/data/routes/receipts.d.ts.map +1 -0
  88. package/dist/apps/{receipts.js → data/routes/receipts.js} +12 -12
  89. package/dist/apps/data/routes/receipts.js.map +1 -0
  90. package/dist/apps/{rpc.d.ts → data/routes/rpc.d.ts} +4 -4
  91. package/dist/apps/data/routes/rpc.d.ts.map +1 -0
  92. package/dist/apps/{rpc.js → data/routes/rpc.js} +6 -6
  93. package/dist/apps/data/routes/rpc.js.map +1 -0
  94. package/dist/apps/{tokenlist.d.ts → data/routes/tokenlist.d.ts} +4 -4
  95. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -0
  96. package/dist/apps/{tokenlist.js → data/routes/tokenlist.js} +8 -8
  97. package/dist/apps/data/routes/tokenlist.js.map +1 -0
  98. package/dist/apps/{tokens.d.ts → data/routes/tokens.d.ts} +11 -11
  99. package/dist/apps/data/routes/tokens.d.ts.map +1 -0
  100. package/dist/apps/{tokens.js → data/routes/tokens.js} +19 -19
  101. package/dist/apps/data/routes/tokens.js.map +1 -0
  102. package/dist/apps/{transactions.d.ts → data/routes/transactions.d.ts} +288 -288
  103. package/dist/apps/data/routes/transactions.d.ts.map +1 -0
  104. package/dist/apps/{transactions.js → data/routes/transactions.js} +13 -13
  105. package/dist/apps/data/routes/transactions.js.map +1 -0
  106. package/dist/apps/{transfers.d.ts → data/routes/transfers.d.ts} +35 -35
  107. package/dist/apps/data/routes/transfers.d.ts.map +1 -0
  108. package/dist/apps/{transfers.js → data/routes/transfers.js} +13 -13
  109. package/dist/apps/data/routes/transfers.js.map +1 -0
  110. package/dist/apps/{verified-tokens.d.ts → data/routes/verified-tokens.d.ts} +42 -42
  111. package/dist/apps/data/routes/verified-tokens.d.ts.map +1 -0
  112. package/dist/apps/{verified-tokens.js → data/routes/verified-tokens.js} +9 -9
  113. package/dist/apps/data/routes/verified-tokens.js.map +1 -0
  114. package/dist/apps/{webhooks.d.ts → data/routes/webhooks.d.ts} +66 -63
  115. package/dist/apps/{webhooks.d.ts.map → data/routes/webhooks.d.ts.map} +1 -1
  116. package/dist/apps/{webhooks.js → data/routes/webhooks.js} +67 -59
  117. package/dist/apps/data/routes/webhooks.js.map +1 -0
  118. package/dist/apps/docs/App.d.ts +27 -0
  119. package/dist/apps/docs/App.d.ts.map +1 -0
  120. package/dist/apps/docs/App.js +122 -0
  121. package/dist/apps/docs/App.js.map +1 -0
  122. package/dist/{internal/OpenApi.fonts.d.ts → apps/docs/fonts.d.ts} +1 -1
  123. package/dist/apps/docs/fonts.d.ts.map +1 -0
  124. package/dist/{internal/OpenApi.fonts.js → apps/docs/fonts.js} +1 -1
  125. package/dist/apps/docs/fonts.js.map +1 -0
  126. package/dist/apps/docs/index.d.ts +2 -0
  127. package/dist/apps/docs/index.d.ts.map +1 -0
  128. package/dist/apps/docs/index.js +2 -0
  129. package/dist/apps/docs/index.js.map +1 -0
  130. package/dist/{internal/OpenApi.logo.d.ts → apps/docs/logo.d.ts} +1 -1
  131. package/dist/apps/docs/logo.d.ts.map +1 -0
  132. package/dist/{internal/OpenApi.logo.js → apps/docs/logo.js} +1 -1
  133. package/dist/apps/docs/logo.js.map +1 -0
  134. package/dist/apps/index.d.ts +4 -0
  135. package/dist/apps/index.d.ts.map +1 -0
  136. package/dist/apps/index.js +4 -0
  137. package/dist/apps/index.js.map +1 -0
  138. package/dist/apps/metadata.d.ts +7 -0
  139. package/dist/apps/metadata.d.ts.map +1 -0
  140. package/dist/apps/metadata.js +15 -0
  141. package/dist/apps/metadata.js.map +1 -0
  142. package/dist/apps/platform/App.d.ts +2985 -0
  143. package/dist/apps/platform/App.d.ts.map +1 -0
  144. package/dist/apps/platform/App.js +74 -0
  145. package/dist/apps/platform/App.js.map +1 -0
  146. package/dist/apps/platform/index.d.ts +2 -0
  147. package/dist/apps/platform/index.d.ts.map +1 -0
  148. package/dist/apps/platform/index.js +2 -0
  149. package/dist/apps/platform/index.js.map +1 -0
  150. package/dist/apps/platform/routes/api-keys.d.ts +681 -0
  151. package/dist/apps/platform/routes/api-keys.d.ts.map +1 -0
  152. package/dist/apps/platform/routes/api-keys.js +328 -0
  153. package/dist/apps/platform/routes/api-keys.js.map +1 -0
  154. package/dist/apps/platform/routes/invitations.d.ts +733 -0
  155. package/dist/apps/platform/routes/invitations.d.ts.map +1 -0
  156. package/dist/apps/platform/routes/invitations.js +413 -0
  157. package/dist/apps/platform/routes/invitations.js.map +1 -0
  158. package/dist/apps/platform/routes/me.d.ts +95 -0
  159. package/dist/apps/platform/routes/me.d.ts.map +1 -0
  160. package/dist/apps/platform/routes/me.js +81 -0
  161. package/dist/apps/platform/routes/me.js.map +1 -0
  162. package/dist/apps/platform/routes/members.d.ts +554 -0
  163. package/dist/apps/platform/routes/members.d.ts.map +1 -0
  164. package/dist/apps/platform/routes/members.js +251 -0
  165. package/dist/apps/platform/routes/members.js.map +1 -0
  166. package/dist/apps/platform/routes/orgs.d.ts +582 -0
  167. package/dist/apps/platform/routes/orgs.d.ts.map +1 -0
  168. package/dist/apps/platform/routes/orgs.js +265 -0
  169. package/dist/apps/platform/routes/orgs.js.map +1 -0
  170. package/dist/apps/platform/routes/projects.d.ts +740 -0
  171. package/dist/apps/platform/routes/projects.d.ts.map +1 -0
  172. package/dist/apps/platform/routes/projects.js +286 -0
  173. package/dist/apps/platform/routes/projects.js.map +1 -0
  174. package/dist/apps/relay/App.d.ts +41 -0
  175. package/dist/apps/relay/App.d.ts.map +1 -0
  176. package/dist/apps/relay/App.js +103 -0
  177. package/dist/apps/relay/App.js.map +1 -0
  178. package/dist/apps/relay/Sponsorships.d.ts +107 -0
  179. package/dist/apps/relay/Sponsorships.d.ts.map +1 -0
  180. package/dist/apps/relay/Sponsorships.js +193 -0
  181. package/dist/apps/relay/Sponsorships.js.map +1 -0
  182. package/dist/apps/relay/index.d.ts +3 -0
  183. package/dist/apps/relay/index.d.ts.map +1 -0
  184. package/dist/apps/relay/index.js +3 -0
  185. package/dist/apps/relay/index.js.map +1 -0
  186. package/dist/{Cli.d.ts → cli/Cli.d.ts} +13 -2
  187. package/dist/cli/Cli.d.ts.map +1 -0
  188. package/dist/cli/Cli.js +19 -0
  189. package/dist/cli/Cli.js.map +1 -0
  190. package/dist/cli/bin.d.ts +3 -0
  191. package/dist/cli/bin.d.ts.map +1 -0
  192. package/dist/cli/bin.js +4 -0
  193. package/dist/cli/bin.js.map +1 -0
  194. package/dist/cli/commands/admin.d.ts +15 -0
  195. package/dist/cli/commands/admin.d.ts.map +1 -0
  196. package/dist/cli/commands/admin.js +60 -0
  197. package/dist/cli/commands/admin.js.map +1 -0
  198. package/dist/cloudflare.d.ts +7 -0
  199. package/dist/cloudflare.d.ts.map +1 -1
  200. package/dist/cloudflare.js +9 -0
  201. package/dist/cloudflare.js.map +1 -1
  202. package/dist/db/Db.d.ts +113 -0
  203. package/dist/db/Db.d.ts.map +1 -0
  204. package/dist/db/Db.js +402 -0
  205. package/dist/db/Db.js.map +1 -0
  206. package/dist/db/Schema.d.ts +168 -0
  207. package/dist/db/Schema.d.ts.map +1 -0
  208. package/dist/db/Schema.js +229 -0
  209. package/dist/db/Schema.js.map +1 -0
  210. package/dist/db/tables/invitations.d.ts +84 -0
  211. package/dist/db/tables/invitations.d.ts.map +1 -0
  212. package/dist/db/tables/invitations.js +165 -0
  213. package/dist/db/tables/invitations.js.map +1 -0
  214. package/dist/db/tables/memberships.d.ts +108 -0
  215. package/dist/db/tables/memberships.d.ts.map +1 -0
  216. package/dist/db/tables/memberships.js +153 -0
  217. package/dist/db/tables/memberships.js.map +1 -0
  218. package/dist/db/tables/organizations.d.ts +123 -0
  219. package/dist/db/tables/organizations.d.ts.map +1 -0
  220. package/dist/db/tables/organizations.js +170 -0
  221. package/dist/db/tables/organizations.js.map +1 -0
  222. package/dist/db/tables/projects.d.ts +65 -0
  223. package/dist/db/tables/projects.d.ts.map +1 -0
  224. package/dist/db/tables/projects.js +75 -0
  225. package/dist/db/tables/projects.js.map +1 -0
  226. package/dist/db/tables/sponsoredTransactions.d.ts +120 -0
  227. package/dist/db/tables/sponsoredTransactions.d.ts.map +1 -0
  228. package/dist/db/tables/sponsoredTransactions.js +161 -0
  229. package/dist/db/tables/sponsoredTransactions.js.map +1 -0
  230. package/dist/db/tables/users.d.ts +48 -0
  231. package/dist/db/tables/users.d.ts.map +1 -0
  232. package/dist/db/tables/users.js +65 -0
  233. package/dist/db/tables/users.js.map +1 -0
  234. package/dist/db/tables/verifiedTokens.d.ts +53 -0
  235. package/dist/db/tables/verifiedTokens.d.ts.map +1 -0
  236. package/dist/db/tables/verifiedTokens.js +74 -0
  237. package/dist/db/tables/verifiedTokens.js.map +1 -0
  238. package/dist/db/tables/webhookDeliveries.d.ts +71 -0
  239. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -0
  240. package/dist/db/tables/webhookDeliveries.js +119 -0
  241. package/dist/db/tables/webhookDeliveries.js.map +1 -0
  242. package/dist/db/tables/webhookSubscriptions.d.ts +158 -0
  243. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -0
  244. package/dist/db/tables/webhookSubscriptions.js +272 -0
  245. package/dist/db/tables/webhookSubscriptions.js.map +1 -0
  246. package/dist/handlers/internal/executionError.d.ts +25 -0
  247. package/dist/handlers/internal/executionError.d.ts.map +1 -0
  248. package/dist/handlers/internal/executionError.js +186 -0
  249. package/dist/handlers/internal/executionError.js.map +1 -0
  250. package/dist/handlers/internal/multisig.d.ts +233 -0
  251. package/dist/handlers/internal/multisig.d.ts.map +1 -0
  252. package/dist/handlers/internal/multisig.js +542 -0
  253. package/dist/handlers/internal/multisig.js.map +1 -0
  254. package/dist/handlers/internal/requestListener.d.ts +124 -0
  255. package/dist/handlers/internal/requestListener.d.ts.map +1 -0
  256. package/dist/handlers/internal/requestListener.js +173 -0
  257. package/dist/handlers/internal/requestListener.js.map +1 -0
  258. package/dist/handlers/internal/sponsorship.d.ts +113 -0
  259. package/dist/handlers/internal/sponsorship.d.ts.map +1 -0
  260. package/dist/handlers/internal/sponsorship.js +128 -0
  261. package/dist/handlers/internal/sponsorship.js.map +1 -0
  262. package/dist/handlers/internal/types.d.ts +284 -0
  263. package/dist/handlers/internal/types.d.ts.map +1 -0
  264. package/dist/handlers/internal/types.js +2 -0
  265. package/dist/handlers/internal/types.js.map +1 -0
  266. package/dist/handlers/internal/utils.d.ts +34 -0
  267. package/dist/handlers/internal/utils.d.ts.map +1 -0
  268. package/dist/handlers/internal/utils.js +131 -0
  269. package/dist/handlers/internal/utils.js.map +1 -0
  270. package/dist/handlers/relay.d.ts +123 -0
  271. package/dist/handlers/relay.d.ts.map +1 -0
  272. package/dist/handlers/relay.js +1278 -0
  273. package/dist/handlers/relay.js.map +1 -0
  274. package/dist/index.d.ts +4 -2
  275. package/dist/index.d.ts.map +1 -1
  276. package/dist/index.js +4 -2
  277. package/dist/index.js.map +1 -1
  278. package/dist/internal/Auth.d.ts +224 -16
  279. package/dist/internal/Auth.d.ts.map +1 -1
  280. package/dist/internal/Auth.js +572 -33
  281. package/dist/internal/Auth.js.map +1 -1
  282. package/dist/internal/Log.d.ts +7 -3
  283. package/dist/internal/Log.d.ts.map +1 -1
  284. package/dist/internal/Log.js +4 -0
  285. package/dist/internal/Log.js.map +1 -1
  286. package/dist/internal/OpenApi.d.ts +0 -19
  287. package/dist/internal/OpenApi.d.ts.map +1 -1
  288. package/dist/internal/OpenApi.js +0 -57
  289. package/dist/internal/OpenApi.js.map +1 -1
  290. package/dist/internal/RpcSchema.d.ts +10 -0
  291. package/dist/internal/RpcSchema.d.ts.map +1 -0
  292. package/dist/internal/RpcSchema.js +2 -0
  293. package/dist/internal/RpcSchema.js.map +1 -0
  294. package/dist/internal/Store.d.ts +49 -4
  295. package/dist/internal/Store.d.ts.map +1 -1
  296. package/dist/internal/Store.js +81 -5
  297. package/dist/internal/Store.js.map +1 -1
  298. package/dist/internal/VerifiedTokens.d.ts +15 -34
  299. package/dist/internal/VerifiedTokens.d.ts.map +1 -1
  300. package/dist/internal/VerifiedTokens.js +115 -159
  301. package/dist/internal/VerifiedTokens.js.map +1 -1
  302. package/dist/internal/Viem.d.ts +84 -0
  303. package/dist/internal/Viem.d.ts.map +1 -1
  304. package/dist/internal/Webhooks.d.ts +50 -36
  305. package/dist/internal/Webhooks.d.ts.map +1 -1
  306. package/dist/internal/Webhooks.js +92 -205
  307. package/dist/internal/Webhooks.js.map +1 -1
  308. package/package.json +37 -6
  309. package/src/ApiKey.test.ts +3 -3
  310. package/src/ApiKey.ts +11 -12
  311. package/src/ApiKeys.test.ts +278 -0
  312. package/src/ApiKeys.ts +358 -0
  313. package/src/App.test-d.ts +1 -1
  314. package/src/App.test.ts +40508 -19083
  315. package/src/App.ts +239 -416
  316. package/src/Client.test-d.ts +307 -16
  317. package/src/Handler.ts +154 -0
  318. package/src/Scope.ts +17 -4
  319. package/src/Webhooks.test.ts +8 -7
  320. package/src/Webhooks.ts +13 -7
  321. package/src/admin/Access.ts +1 -3
  322. package/src/admin/App.ts +19 -24
  323. package/src/admin/apps/api-keys.test.ts +70 -18
  324. package/src/admin/apps/api-keys.ts +92 -9
  325. package/src/admin/apps/scopes.test.ts +8 -0
  326. package/src/admin/apps/verified-tokens.test.ts +3 -30
  327. package/src/admin/apps/verified-tokens.ts +18 -37
  328. package/src/admin/ui.generated.ts +1 -1
  329. package/src/apps/composition.test.ts +66 -0
  330. package/src/apps/data/App.ts +295 -0
  331. package/src/apps/data/index.ts +2 -0
  332. package/src/apps/{activities.test.ts → data/routes/activities.test.ts} +3 -3
  333. package/src/apps/{activities.ts → data/routes/activities.ts} +15 -15
  334. package/src/apps/{addresses.ts → data/routes/addresses.ts} +6 -6
  335. package/src/apps/{balances.test.ts → data/routes/balances.test.ts} +6 -5
  336. package/src/apps/{balances.ts → data/routes/balances.ts} +46 -12
  337. package/src/apps/{blocks.test.ts → data/routes/blocks.test.ts} +4 -4
  338. package/src/apps/{blocks.ts → data/routes/blocks.ts} +14 -14
  339. package/src/apps/{coingecko.test.ts → data/routes/coingecko.test.ts} +2 -2
  340. package/src/apps/{coingecko.ts → data/routes/coingecko.ts} +14 -14
  341. package/src/apps/{exchanges.test.ts → data/routes/exchanges.test.ts} +2 -2
  342. package/src/apps/{exchanges.ts → data/routes/exchanges.ts} +20 -20
  343. package/src/apps/{fee-amm.test.ts → data/routes/fee-amm.test.ts} +3 -3
  344. package/src/apps/{fee-amm.ts → data/routes/fee-amm.ts} +18 -18
  345. package/src/apps/{indexer.test.ts → data/routes/indexer.test.ts} +27 -6
  346. package/src/apps/{indexer.ts → data/routes/indexer.ts} +13 -10
  347. package/src/apps/{receipts.test.ts → data/routes/receipts.test.ts} +4 -4
  348. package/src/apps/{receipts.ts → data/routes/receipts.ts} +13 -13
  349. package/src/apps/{rpc.test.ts → data/routes/rpc.test.ts} +142 -13
  350. package/src/apps/{rpc.ts → data/routes/rpc.ts} +7 -7
  351. package/src/apps/{tokenlist.test.ts → data/routes/tokenlist.test.ts} +8 -10
  352. package/src/apps/{tokenlist.ts → data/routes/tokenlist.ts} +9 -9
  353. package/src/apps/{tokens.test.ts → data/routes/tokens.test.ts} +6 -5
  354. package/src/apps/{tokens.ts → data/routes/tokens.ts} +20 -20
  355. package/src/apps/{transactions.test.ts → data/routes/transactions.test.ts} +4 -4
  356. package/src/apps/{transactions.ts → data/routes/transactions.ts} +15 -15
  357. package/src/apps/{transfers.test.ts → data/routes/transfers.test.ts} +3 -3
  358. package/src/apps/{transfers.ts → data/routes/transfers.ts} +15 -15
  359. package/src/apps/{verified-tokens.test.ts → data/routes/verified-tokens.test.ts} +27 -15
  360. package/src/apps/{verified-tokens.ts → data/routes/verified-tokens.ts} +10 -10
  361. package/src/apps/{webhooks.test.ts → data/routes/webhooks.test.ts} +137 -150
  362. package/src/apps/{webhooks.ts → data/routes/webhooks.ts} +83 -81
  363. package/src/apps/docs/App.ts +136 -0
  364. package/src/apps/docs/index.ts +1 -0
  365. package/src/apps/index.ts +3 -0
  366. package/src/apps/metadata.ts +23 -0
  367. package/src/apps/platform/App.ts +130 -0
  368. package/src/apps/platform/index.ts +1 -0
  369. package/src/apps/platform/routes/api-keys.test.ts +330 -0
  370. package/src/apps/platform/routes/api-keys.ts +427 -0
  371. package/src/apps/platform/routes/invitations.test.ts +361 -0
  372. package/src/apps/platform/routes/invitations.ts +519 -0
  373. package/src/apps/platform/routes/me.test.ts +121 -0
  374. package/src/apps/platform/routes/me.ts +106 -0
  375. package/src/apps/platform/routes/members.test.ts +195 -0
  376. package/src/apps/platform/routes/members.ts +313 -0
  377. package/src/apps/platform/routes/orgs.test.ts +313 -0
  378. package/src/apps/platform/routes/orgs.ts +343 -0
  379. package/src/apps/platform/routes/projects.test.ts +181 -0
  380. package/src/apps/platform/routes/projects.ts +367 -0
  381. package/src/apps/relay/App.test.ts +484 -0
  382. package/src/apps/relay/App.ts +128 -0
  383. package/src/apps/relay/Sponsorships.test.ts +375 -0
  384. package/src/apps/relay/Sponsorships.ts +305 -0
  385. package/src/apps/relay/index.ts +2 -0
  386. package/src/{Cli.test.ts → cli/Cli.test.ts} +10 -9
  387. package/src/{Cli.ts → cli/Cli.ts} +16 -9
  388. package/src/cli/bin.ts +4 -0
  389. package/src/cli/commands/admin.test.ts +71 -0
  390. package/src/cli/commands/admin.ts +60 -0
  391. package/src/cloudflare.ts +10 -0
  392. package/src/db/Db.test.ts +84 -0
  393. package/src/db/Db.ts +542 -0
  394. package/src/db/Schema.ts +301 -0
  395. package/src/db/tables/invitations.ts +198 -0
  396. package/src/db/tables/memberships.ts +208 -0
  397. package/src/db/tables/organizations.test.ts +160 -0
  398. package/src/db/tables/organizations.ts +232 -0
  399. package/src/db/tables/projects.ts +107 -0
  400. package/src/db/tables/sponsoredTransactions.test.ts +218 -0
  401. package/src/db/tables/sponsoredTransactions.ts +236 -0
  402. package/src/db/tables/users.ts +85 -0
  403. package/src/db/tables/verifiedTokens.ts +111 -0
  404. package/src/db/tables/webhookDeliveries.ts +159 -0
  405. package/src/db/tables/webhookSubscriptions.ts +358 -0
  406. package/src/handlers/internal/executionError.ts +207 -0
  407. package/src/handlers/internal/multisig.test.ts +818 -0
  408. package/src/handlers/internal/multisig.ts +823 -0
  409. package/src/handlers/internal/requestListener.ts +273 -0
  410. package/src/handlers/internal/sponsorship.ts +245 -0
  411. package/src/handlers/internal/types.ts +378 -0
  412. package/src/handlers/internal/utils.ts +153 -0
  413. package/src/handlers/relay.test.ts +2035 -0
  414. package/src/handlers/relay.ts +1623 -0
  415. package/src/index.ts +4 -2
  416. package/src/internal/Auth.test.ts +337 -21
  417. package/src/internal/Auth.ts +783 -44
  418. package/src/internal/Cursor.test.ts +3 -2
  419. package/src/internal/Log.test.ts +1 -1
  420. package/src/internal/Log.ts +11 -3
  421. package/src/internal/MetricSink.ts +1 -1
  422. package/src/internal/OpenApi.ts +0 -59
  423. package/src/internal/RateLimit.test.ts +1 -1
  424. package/src/internal/RpcSchema.ts +10 -0
  425. package/src/internal/Store.test.ts +150 -10
  426. package/src/internal/Store.ts +136 -11
  427. package/src/internal/Tidx.local.test.ts +1 -1
  428. package/src/internal/VerifiedTokens.test.ts +99 -115
  429. package/src/internal/VerifiedTokens.ts +123 -175
  430. package/src/internal/WebhookDestination.test.ts +1 -1
  431. package/src/internal/Webhooks.test.ts +111 -111
  432. package/src/internal/Webhooks.ts +103 -221
  433. package/dist/ApiKeySource.d.ts +0 -166
  434. package/dist/ApiKeySource.d.ts.map +0 -1
  435. package/dist/ApiKeySource.js +0 -234
  436. package/dist/ApiKeySource.js.map +0 -1
  437. package/dist/Cli.d.ts.map +0 -1
  438. package/dist/Cli.js +0 -13
  439. package/dist/Cli.js.map +0 -1
  440. package/dist/apps/activities.js.map +0 -1
  441. package/dist/apps/addresses.js.map +0 -1
  442. package/dist/apps/balances.d.ts.map +0 -1
  443. package/dist/apps/balances.js.map +0 -1
  444. package/dist/apps/blocks.d.ts.map +0 -1
  445. package/dist/apps/blocks.js.map +0 -1
  446. package/dist/apps/coingecko.d.ts.map +0 -1
  447. package/dist/apps/coingecko.js.map +0 -1
  448. package/dist/apps/exchanges.d.ts.map +0 -1
  449. package/dist/apps/exchanges.js.map +0 -1
  450. package/dist/apps/fee-amm.d.ts.map +0 -1
  451. package/dist/apps/fee-amm.js.map +0 -1
  452. package/dist/apps/indexer.d.ts.map +0 -1
  453. package/dist/apps/indexer.js.map +0 -1
  454. package/dist/apps/receipts.d.ts.map +0 -1
  455. package/dist/apps/receipts.js.map +0 -1
  456. package/dist/apps/rpc.d.ts.map +0 -1
  457. package/dist/apps/rpc.js.map +0 -1
  458. package/dist/apps/tokenlist.d.ts.map +0 -1
  459. package/dist/apps/tokenlist.js.map +0 -1
  460. package/dist/apps/tokens.d.ts.map +0 -1
  461. package/dist/apps/tokens.js.map +0 -1
  462. package/dist/apps/transactions.d.ts.map +0 -1
  463. package/dist/apps/transactions.js.map +0 -1
  464. package/dist/apps/transfers.d.ts.map +0 -1
  465. package/dist/apps/transfers.js.map +0 -1
  466. package/dist/apps/verified-tokens.d.ts.map +0 -1
  467. package/dist/apps/verified-tokens.js.map +0 -1
  468. package/dist/apps/webhooks.js.map +0 -1
  469. package/dist/internal/OpenApi.fonts.d.ts.map +0 -1
  470. package/dist/internal/OpenApi.fonts.js.map +0 -1
  471. package/dist/internal/OpenApi.logo.d.ts.map +0 -1
  472. package/dist/internal/OpenApi.logo.js.map +0 -1
  473. package/seeds/31318/icons/0x20c0000000000000000000000000000000000000.svg +0 -1
  474. package/seeds/31318/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
  475. package/seeds/31318/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
  476. package/seeds/31318/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
  477. package/seeds/31318/verified-tokens.json +0 -30
  478. package/seeds/4217/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
  479. package/seeds/4217/icons/0x20c000000000000000000000048c8f36df1c9a4a.svg +0 -1
  480. package/seeds/4217/icons/0x20c0000000000000000000000520792dcccccccc.svg +0 -1
  481. package/seeds/4217/icons/0x20c0000000000000000000000a6da882d075a4c3.svg +0 -4
  482. package/seeds/4217/icons/0x20c000000000000000000000111111111e910f0f.svg +0 -30
  483. package/seeds/4217/icons/0x20c00000000000000000000014f22ca97301eb73.svg +0 -1
  484. package/seeds/4217/icons/0x20c0000000000000000000001621e21f71cf12fb.svg +0 -1
  485. package/seeds/4217/icons/0x20c0000000000000000000002f52d5cc21a3207b.svg +0 -1
  486. package/seeds/4217/icons/0x20c0000000000000000000003158081efd85bfc2.svg +0 -11
  487. package/seeds/4217/icons/0x20c0000000000000000000003554d28269e0f3c2.svg +0 -1
  488. package/seeds/4217/icons/0x20c000000000000000000000383a23bacb546ab9.svg +0 -1
  489. package/seeds/4217/icons/0x20c00000000000000000000042109aef2f8b28e1.png +0 -0
  490. package/seeds/4217/icons/0x20c0000000000000000000005c0bac7cef389a11.svg +0 -1
  491. package/seeds/4217/icons/0x20c0000000000000000000006fd9a167923ba194.png +0 -0
  492. package/seeds/4217/icons/0x20c0000000000000000000007f7ba549dd0251b9.svg +0 -1
  493. package/seeds/4217/icons/0x20c0000000000000000000008191667423f70e67.svg +0 -5
  494. package/seeds/4217/icons/0x20c0000000000000000000008ee4fcff88888888.svg +0 -1
  495. package/seeds/4217/icons/0x20c0000000000000000000009a4a4b17e0dc6651.svg +0 -1
  496. package/seeds/4217/icons/0x20c000000000000000000000ab02d39df30bd17e.svg +0 -1
  497. package/seeds/4217/icons/0x20c000000000000000000000ae247a1130450f09.svg +0 -1
  498. package/seeds/4217/icons/0x20c000000000000000000000aeed2ec36a54d0e5.svg +0 -1
  499. package/seeds/4217/icons/0x20c000000000000000000000b9537d11c60e8b50.svg +0 -1
  500. package/seeds/4217/icons/0x20c000000000000000000000bd95bfb69fbe6ce3.svg +0 -1
  501. package/seeds/4217/icons/0x20c000000000000000000000c412ec89d0c08be5.svg +0 -1
  502. package/seeds/4217/icons/0x20c000000000000000000000f047dd7018e50367.png +0 -0
  503. package/seeds/4217/verified-tokens.json +0 -177
  504. package/seeds/42431/icons/0x20c0000000000000000000000000000000000000.svg +0 -25
  505. package/seeds/42431/icons/0x20c0000000000000000000000000000000000001.svg +0 -1
  506. package/seeds/42431/icons/0x20c0000000000000000000000000000000000002.svg +0 -1
  507. package/seeds/42431/icons/0x20c0000000000000000000000000000000000003.svg +0 -1
  508. package/seeds/42431/icons/0x20c0000000000000000000009e8d7eb59b783726.svg +0 -1
  509. package/seeds/42431/icons/0x20c000000000000000000000d72572838bbee59c.svg +0 -1
  510. package/seeds/42431/verified-tokens.json +0 -44
  511. package/seeds/openrpc/README.md +0 -27
  512. package/seeds/openrpc/execution-apis.json +0 -8989
  513. package/src/ApiKeySource.test-d.ts +0 -11
  514. package/src/ApiKeySource.test.ts +0 -295
  515. package/src/ApiKeySource.ts +0 -303
  516. /package/src/{internal/OpenApi.fonts.ts → apps/docs/fonts.ts} +0 -0
  517. /package/src/{internal/OpenApi.logo.ts → apps/docs/logo.ts} +0 -0
@@ -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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"}
@@ -0,0 +1,161 @@
1
+ import { sql } from 'kysely';
2
+ import { nanoid } from 'nanoid';
3
+ /**
4
+ * Records one sponsorship commitment as `pending`, keyed by its fee-payer
5
+ * sign payload. Written after fee-payer signing and before any broadcast, so
6
+ * no sponsored transaction goes unrecorded; a later recording site for the
7
+ * same envelope (raw submission after a fill intent) upgrades the row with
8
+ * its transaction hash, reopening failed rows for finalization.
9
+ *
10
+ * @param db - The database.
11
+ * @param input - Attribution and envelope facts captured at signing time.
12
+ * @returns The stored record.
13
+ */
14
+ export async function upsert(db, input) {
15
+ const record = {
16
+ apiKeyId: input.apiKeyId,
17
+ billable: input.billable,
18
+ chainId: input.chainId,
19
+ createdAt: new Date().toISOString(),
20
+ environment: input.environment,
21
+ feeAmount: null,
22
+ feeToken: input.feeToken ?? null,
23
+ finalizedAt: null,
24
+ id: `stx_${nanoid()}`,
25
+ orgId: input.orgId,
26
+ projectId: input.projectId,
27
+ signPayload: input.signPayload,
28
+ status: 'pending',
29
+ transaction: input.transaction,
30
+ transactionHash: input.transactionHash ?? null,
31
+ };
32
+ return await db.kysely
33
+ .insertInto('sponsored_transactions')
34
+ .values(record)
35
+ .onConflict((oc) => oc.column('signPayload').doUpdateSet((eb) => ({
36
+ // A raw submission fills the intent's hash; a duplicate intent never
37
+ // clears an already-known hash.
38
+ transactionHash: eb.fn.coalesce(eb.ref('excluded.transactionHash'), eb.ref('sponsored_transactions.transactionHash')),
39
+ createdAt: sql `CASE WHEN ${eb.ref('sponsored_transactions.status')} = 'failed' THEN ${eb.ref('excluded.createdAt')} ELSE ${eb.ref('sponsored_transactions.createdAt')} END`,
40
+ finalizedAt: sql `CASE WHEN ${eb.ref('sponsored_transactions.status')} = 'failed' THEN NULL ELSE ${eb.ref('sponsored_transactions.finalizedAt')} END`,
41
+ status: sql `CASE WHEN ${eb.ref('sponsored_transactions.status')} = 'failed' THEN 'pending' ELSE ${eb.ref('sponsored_transactions.status')} END`,
42
+ })))
43
+ .returningAll()
44
+ .executeTakeFirstOrThrow();
45
+ }
46
+ /**
47
+ * Reads one sponsorship row by id.
48
+ *
49
+ * @param db - The database.
50
+ * @param id - The sponsored-transaction id (`stx_…`).
51
+ * @returns The record, or `undefined` when absent.
52
+ */
53
+ export function get(db, id) {
54
+ return db.kysely
55
+ .selectFrom('sponsored_transactions')
56
+ .selectAll()
57
+ .where('id', '=', id)
58
+ .executeTakeFirst();
59
+ }
60
+ /**
61
+ * Lists pending sponsorships, oldest first, for the finalization job.
62
+ *
63
+ * @param db - The database.
64
+ * @param options - Paging options.
65
+ * @returns The pending records.
66
+ */
67
+ export function listPending(db, options = {}) {
68
+ let query = db.kysely
69
+ .selectFrom('sponsored_transactions')
70
+ .selectAll()
71
+ .where('status', '=', 'pending')
72
+ // `id` breaks same-millisecond `createdAt` ties for a deterministic scan.
73
+ .orderBy('createdAt', 'asc')
74
+ .orderBy('id', 'asc');
75
+ if (options.limit !== undefined)
76
+ query = query.limit(options.limit);
77
+ return query.execute();
78
+ }
79
+ /**
80
+ * Lists hash-less fill intents, oldest first, for the reconciliation pass.
81
+ * Failed intents are included only when the caller supplies a recovery floor.
82
+ *
83
+ * @param db - The database.
84
+ * @param options - Paging options.
85
+ * @returns The pending intents.
86
+ */
87
+ export function listIntents(db, options = {}) {
88
+ let query = db.kysely
89
+ .selectFrom('sponsored_transactions')
90
+ .selectAll()
91
+ .where(intentStatus(options.failedSince))
92
+ .where('transactionHash', 'is', null)
93
+ // `pending` sorts after `failed`; descending keeps active intents first.
94
+ .orderBy('status', 'desc')
95
+ .orderBy('createdAt', 'asc')
96
+ .orderBy('id', 'asc');
97
+ if (options.limit !== undefined)
98
+ query = query.limit(options.limit);
99
+ return query.execute();
100
+ }
101
+ /**
102
+ * Fills a reconciled intent's transaction hash and reopens failed intents.
103
+ * A no-op once another pass already assigned the hash.
104
+ *
105
+ * @param db - The database.
106
+ * @param id - The sponsored-transaction id (`stx_…`).
107
+ * @param transactionHash - The matched on-chain transaction hash.
108
+ */
109
+ export async function assignTransactionHash(db, id, transactionHash) {
110
+ await db.kysely
111
+ .updateTable('sponsored_transactions')
112
+ .set({ finalizedAt: null, status: 'pending', transactionHash })
113
+ .where('id', '=', id)
114
+ .where('status', 'in', ['failed', 'pending'])
115
+ .where('transactionHash', 'is', null)
116
+ .execute();
117
+ }
118
+ /**
119
+ * Transitions a pending sponsorship to `finalized` with the receipt's actual
120
+ * fee. A no-op when the row is no longer pending (idempotent re-runs).
121
+ *
122
+ * @param db - The database.
123
+ * @param id - The sponsored-transaction id (`stx_…`).
124
+ * @param input - The finalized fee facts.
125
+ */
126
+ export async function finalize(db, id, input) {
127
+ await db.kysely
128
+ .updateTable('sponsored_transactions')
129
+ .set({ feeAmount: input.feeAmount, finalizedAt: input.finalizedAt, status: 'finalized' })
130
+ .where('id', '=', id)
131
+ .where('status', '=', 'pending')
132
+ .execute();
133
+ }
134
+ /**
135
+ * Transitions a pending sponsorship to `failed` (never landed within the
136
+ * pending TTL). A no-op when the row is no longer pending.
137
+ *
138
+ * @param db - The database.
139
+ * @param id - The sponsored-transaction id (`stx_…`).
140
+ * @param finalizedAt - When the sponsorship was marked failed (ISO 8601).
141
+ */
142
+ export async function fail(db, id, finalizedAt) {
143
+ await db.kysely
144
+ .updateTable('sponsored_transactions')
145
+ .set({ finalizedAt, status: 'failed' })
146
+ .where('id', '=', id)
147
+ .where('status', '=', 'pending')
148
+ .execute();
149
+ }
150
+ /** Intent status predicate; failed rows are recovery candidates only briefly. */
151
+ function intentStatus(failedSince) {
152
+ return (eb) => {
153
+ if (failedSince === undefined)
154
+ return eb('status', '=', 'pending');
155
+ return eb.or([
156
+ eb('status', '=', 'pending'),
157
+ eb.and([eb('status', '=', 'failed'), eb('finalizedAt', '>=', failedSince)]),
158
+ ]);
159
+ };
160
+ }
161
+ //# sourceMappingURL=sponsoredTransactions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sponsoredTransactions.js","sourceRoot":"","sources":["../../../src/db/tables/sponsoredTransactions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
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 `users` table, derived from `Schema.User`. */
5
+ export type Table = db_Schema.User;
6
+ /** A stored user row. */
7
+ export type Record = Selectable<Table>;
8
+ /**
9
+ * Reads a user by id (`usr_…`).
10
+ *
11
+ * @param db - The database.
12
+ * @param id - The user id.
13
+ * @returns The record, or `undefined` when absent.
14
+ */
15
+ export declare function get(db: Db.Db, id: string): Promise<Record | undefined>;
16
+ /**
17
+ * Reads a user by wallet address (compared lowercase).
18
+ *
19
+ * @param db - The database.
20
+ * @param address - The wallet address.
21
+ * @returns The record, or `undefined` when absent.
22
+ */
23
+ export declare function getByAddress(db: Db.Db, address: string): Promise<Record | undefined>;
24
+ /**
25
+ * Inserts a user for `address` when absent and returns the stored record.
26
+ * Existing users are returned unchanged, so repeated sign-ins are idempotent.
27
+ *
28
+ * @param db - The database.
29
+ * @param input - The user to ensure.
30
+ * @returns The stored record.
31
+ */
32
+ export declare function upsertByAddress(db: Db.Db, input: upsertByAddress.Input): Promise<Record>;
33
+ export declare namespace upsertByAddress {
34
+ /** Fields accepted when ensuring a user. */
35
+ type Input = {
36
+ /** Wallet address that signed in (stored lowercase). */
37
+ address: string;
38
+ };
39
+ }
40
+ /**
41
+ * Sets a user's verified email, bumping `updatedAt`.
42
+ *
43
+ * @param db - The database.
44
+ * @param id - The user id (`usr_…`).
45
+ * @param email - The verified email.
46
+ */
47
+ export declare function setEmail(db: Db.Db, id: string, email: string): Promise<void>;
48
+ //# sourceMappingURL=users.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.d.ts","sourceRoot":"","sources":["../../../src/db/tables/users.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,gEAAgE;AAChE,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAA;AAElC,yBAAyB;AACzB,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC;;;;;;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,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAMpF;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,eAAe,CAAC,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAe9F;AAED,MAAM,CAAC,OAAO,WAAW,eAAe,CAAC;IACvC,4CAA4C;IAC5C,KAAK,KAAK,GAAG;QACX,wDAAwD;QACxD,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED;;;;;;GAMG;AACH,wBAAsB,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMlF"}
@@ -0,0 +1,65 @@
1
+ import { nanoid } from 'nanoid';
2
+ /**
3
+ * Reads a user by id (`usr_…`).
4
+ *
5
+ * @param db - The database.
6
+ * @param id - The user id.
7
+ * @returns The record, or `undefined` when absent.
8
+ */
9
+ export function get(db, id) {
10
+ return db.kysely.selectFrom('users').selectAll().where('id', '=', id).executeTakeFirst();
11
+ }
12
+ /**
13
+ * Reads a user by wallet address (compared lowercase).
14
+ *
15
+ * @param db - The database.
16
+ * @param address - The wallet address.
17
+ * @returns The record, or `undefined` when absent.
18
+ */
19
+ export function getByAddress(db, address) {
20
+ return db.kysely
21
+ .selectFrom('users')
22
+ .selectAll()
23
+ .where('address', '=', address.toLowerCase())
24
+ .executeTakeFirst();
25
+ }
26
+ /**
27
+ * Inserts a user for `address` when absent and returns the stored record.
28
+ * Existing users are returned unchanged, so repeated sign-ins are idempotent.
29
+ *
30
+ * @param db - The database.
31
+ * @param input - The user to ensure.
32
+ * @returns The stored record.
33
+ */
34
+ export async function upsertByAddress(db, input) {
35
+ const address = input.address.toLowerCase();
36
+ const now = new Date().toISOString();
37
+ const inserted = await db.kysely
38
+ .insertInto('users')
39
+ .values({ address, createdAt: now, email: null, id: `usr_${nanoid()}`, updatedAt: now })
40
+ .onConflict((oc) => oc.column('address').doNothing())
41
+ .returningAll()
42
+ .executeTakeFirst();
43
+ if (inserted)
44
+ return inserted;
45
+ return db.kysely
46
+ .selectFrom('users')
47
+ .selectAll()
48
+ .where('address', '=', address)
49
+ .executeTakeFirstOrThrow();
50
+ }
51
+ /**
52
+ * Sets a user's verified email, bumping `updatedAt`.
53
+ *
54
+ * @param db - The database.
55
+ * @param id - The user id (`usr_…`).
56
+ * @param email - The verified email.
57
+ */
58
+ export async function setEmail(db, id, email) {
59
+ await db.kysely
60
+ .updateTable('users')
61
+ .set({ email, updatedAt: new Date().toISOString() })
62
+ .where('id', '=', id)
63
+ .execute();
64
+ }
65
+ //# sourceMappingURL=users.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"users.js","sourceRoot":"","sources":["../../../src/db/tables/users.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAW/B;;;;;;GAMG;AACH,MAAM,UAAU,GAAG,CAAC,EAAS,EAAE,EAAU;IACvC,OAAO,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,gBAAgB,EAAE,CAAA;AAC1F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,EAAS,EAAE,OAAe;IACrD,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,OAAO,CAAC;SACnB,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;SAC5C,gBAAgB,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,EAAS,EAAE,KAA4B;IAC3E,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,CAAA;IAC3C,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACpC,MAAM,QAAQ,GAAG,MAAM,EAAE,CAAC,MAAM;SAC7B,UAAU,CAAC,OAAO,CAAC;SACnB,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;SACvF,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,SAAS,EAAE,CAAC;SACpD,YAAY,EAAE;SACd,gBAAgB,EAAE,CAAA;IACrB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAA;IAC7B,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,OAAO,CAAC;SACnB,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,uBAAuB,EAAE,CAAA;AAC9B,CAAC;AAUD;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,EAAS,EAAE,EAAU,EAAE,KAAa;IACjE,MAAM,EAAE,CAAC,MAAM;SACZ,WAAW,CAAC,OAAO,CAAC;SACpB,GAAG,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;SACnD,KAAK,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE,CAAC;SACpB,OAAO,EAAE,CAAA;AACd,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { Selectable } from 'kysely';
2
+ import type * as VerifiedTokens from '../../internal/VerifiedTokens.js';
3
+ import type * as Db from '../Db.js';
4
+ import type * as db_Schema from '../Schema.js';
5
+ /** Columns of the `verified_tokens` table, derived from `Schema.VerifiedToken`. */
6
+ export type Table = db_Schema.VerifiedToken;
7
+ /** Columns of the `verified_token_lists` table, derived from `Schema.VerifiedTokenList`. */
8
+ export type ListTable = db_Schema.VerifiedTokenList;
9
+ /** A stored verified-token row. */
10
+ export type Row = Selectable<Table>;
11
+ /** A chain's list-level metadata. */
12
+ export type Meta = Selectable<ListTable>;
13
+ /**
14
+ * Reads a chain's list metadata — the "head" the soft-refresh cache compares
15
+ * versions against.
16
+ *
17
+ * @param db - The database.
18
+ * @param chainId - The chain id.
19
+ * @returns The metadata, or `undefined` when the chain has no list yet.
20
+ */
21
+ export declare function head(db: Db.Db, chainId: number): Promise<Meta | undefined>;
22
+ /**
23
+ * Reads a chain's tokens in canonical list order.
24
+ *
25
+ * @param db - The database.
26
+ * @param chainId - The chain id.
27
+ * @returns The rows.
28
+ */
29
+ export declare function list(db: Db.Db, chainId: number): Promise<Row[]>;
30
+ /**
31
+ * Publishes a chain's whole list: replaces its token rows (positions rewritten
32
+ * wholesale) and bumps the list metadata. Callers run this inside the
33
+ * per-chain publish lock/transaction, so the rewrite is atomic.
34
+ *
35
+ * @param db - The database (a transaction-scoped handle).
36
+ * @param chainId - The chain id.
37
+ * @param input - The validated list and its new version metadata.
38
+ */
39
+ export declare function publish(db: Db.Db, chainId: number, input: publish.Input): Promise<void>;
40
+ export declare namespace publish {
41
+ /** A validated list to publish. */
42
+ type Input = {
43
+ /** Tokens in canonical order (addresses lowercased by the domain layer). */
44
+ tokens: readonly VerifiedTokens.Token[];
45
+ /** ISO timestamp of the publish. */
46
+ updatedAt: string;
47
+ /** New opaque list version. */
48
+ version: string;
49
+ };
50
+ }
51
+ /** Maps a stored row to the domain token (null `logoUri` → absent field). */
52
+ export declare function toToken(row: Row): VerifiedTokens.Token;
53
+ //# sourceMappingURL=verifiedTokens.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifiedTokens.d.ts","sourceRoot":"","sources":["../../../src/db/tables/verifiedTokens.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAGxC,OAAO,KAAK,KAAK,cAAc,MAAM,kCAAkC,CAAA;AACvE,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,mFAAmF;AACnF,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,aAAa,CAAA;AAE3C,4FAA4F;AAC5F,MAAM,MAAM,SAAS,GAAG,SAAS,CAAC,iBAAiB,CAAA;AAEnD,mCAAmC;AACnC,MAAM,MAAM,GAAG,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEnC,qCAAqC;AACrC,MAAM,MAAM,IAAI,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAExC;;;;;;;GAOG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,SAAS,CAAC,CAM1E;AAED;;;;;;GAMG;AACH,wBAAgB,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,CAO/D;AAED;;;;;;;;GAQG;AACH,wBAAsB,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB7F;AAED,MAAM,CAAC,OAAO,WAAW,OAAO,CAAC;IAC/B,mCAAmC;IACnC,KAAK,KAAK,GAAG;QACX,4EAA4E;QAC5E,MAAM,EAAE,SAAS,cAAc,CAAC,KAAK,EAAE,CAAA;QACvC,oCAAoC;QACpC,SAAS,EAAE,MAAM,CAAA;QACjB,+BAA+B;QAC/B,OAAO,EAAE,MAAM,CAAA;KAChB,CAAA;CACF;AAED,6EAA6E;AAC7E,wBAAgB,OAAO,CAAC,GAAG,EAAE,GAAG,GAAG,cAAc,CAAC,KAAK,CAUtD"}
@@ -0,0 +1,74 @@
1
+ /**
2
+ * Reads a chain's list metadata — the "head" the soft-refresh cache compares
3
+ * versions against.
4
+ *
5
+ * @param db - The database.
6
+ * @param chainId - The chain id.
7
+ * @returns The metadata, or `undefined` when the chain has no list yet.
8
+ */
9
+ export function head(db, chainId) {
10
+ return db.kysely
11
+ .selectFrom('verified_token_lists')
12
+ .selectAll()
13
+ .where('chainId', '=', chainId)
14
+ .executeTakeFirst();
15
+ }
16
+ /**
17
+ * Reads a chain's tokens in canonical list order.
18
+ *
19
+ * @param db - The database.
20
+ * @param chainId - The chain id.
21
+ * @returns The rows.
22
+ */
23
+ export function list(db, chainId) {
24
+ return db.kysely
25
+ .selectFrom('verified_tokens')
26
+ .selectAll()
27
+ .where('chainId', '=', chainId)
28
+ .orderBy('position')
29
+ .execute();
30
+ }
31
+ /**
32
+ * Publishes a chain's whole list: replaces its token rows (positions rewritten
33
+ * wholesale) and bumps the list metadata. Callers run this inside the
34
+ * per-chain publish lock/transaction, so the rewrite is atomic.
35
+ *
36
+ * @param db - The database (a transaction-scoped handle).
37
+ * @param chainId - The chain id.
38
+ * @param input - The validated list and its new version metadata.
39
+ */
40
+ export async function publish(db, chainId, input) {
41
+ await db.kysely.deleteFrom('verified_tokens').where('chainId', '=', chainId).execute();
42
+ if (input.tokens.length > 0)
43
+ await db.kysely
44
+ .insertInto('verified_tokens')
45
+ .values(input.tokens.map((token, position) => ({
46
+ address: token.address,
47
+ chainId,
48
+ currency: token.currency,
49
+ decimals: token.decimals,
50
+ logoUri: token.logoUri ?? null,
51
+ name: token.name,
52
+ position,
53
+ symbol: token.symbol,
54
+ })))
55
+ .execute();
56
+ await db.kysely
57
+ .insertInto('verified_token_lists')
58
+ .values({ chainId, updatedAt: input.updatedAt, version: input.version })
59
+ .onConflict((oc) => oc.column('chainId').doUpdateSet({ updatedAt: input.updatedAt, version: input.version }))
60
+ .execute();
61
+ }
62
+ /** Maps a stored row to the domain token (null `logoUri` → absent field). */
63
+ export function toToken(row) {
64
+ return {
65
+ address: row.address,
66
+ currency: row.currency,
67
+ decimals: row.decimals,
68
+ id: row.address,
69
+ name: row.name,
70
+ symbol: row.symbol,
71
+ ...(row.logoUri === null ? {} : { logoUri: row.logoUri }),
72
+ };
73
+ }
74
+ //# sourceMappingURL=verifiedTokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifiedTokens.js","sourceRoot":"","sources":["../../../src/db/tables/verifiedTokens.ts"],"names":[],"mappings":"AAmBA;;;;;;;GAOG;AACH,MAAM,UAAU,IAAI,CAAC,EAAS,EAAE,OAAe;IAC7C,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,sBAAsB,CAAC;SAClC,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,gBAAgB,EAAE,CAAA;AACvB,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,IAAI,CAAC,EAAS,EAAE,OAAe;IAC7C,OAAO,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,iBAAiB,CAAC;SAC7B,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC;SAC9B,OAAO,CAAC,UAAU,CAAC;SACnB,OAAO,EAAE,CAAA;AACd,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,EAAS,EAAE,OAAe,EAAE,KAAoB;IAC5E,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC,OAAO,EAAE,CAAA;IACtF,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QACzB,MAAM,EAAE,CAAC,MAAM;aACZ,UAAU,CAAC,iBAAiB,CAAC;aAC7B,MAAM,CACL,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,CAAC;YACrC,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,OAAO;YACP,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;YAC9B,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ;YACR,MAAM,EAAE,KAAK,CAAC,MAAM;SACrB,CAAC,CAAC,CACJ;aACA,OAAO,EAAE,CAAA;IACd,MAAM,EAAE,CAAC,MAAM;SACZ,UAAU,CAAC,sBAAsB,CAAC;SAClC,MAAM,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;SACvE,UAAU,CAAC,CAAC,EAAE,EAAE,EAAE,CACjB,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CACzF;SACA,OAAO,EAAE,CAAA;AACd,CAAC;AAcD,6EAA6E;AAC7E,MAAM,UAAU,OAAO,CAAC,GAAQ;IAC9B,OAAO;QACL,OAAO,EAAE,GAAG,CAAC,OAAkB;QAC/B,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,EAAE,EAAE,GAAG,CAAC,OAAkB;QAC1B,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,GAAG,CAAC,GAAG,CAAC,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;KAC1D,CAAA;AACH,CAAC"}
@@ -0,0 +1,71 @@
1
+ import type { Selectable } from 'kysely';
2
+ import type * as Webhooks from '../../internal/Webhooks.js';
3
+ import type * as Db from '../Db.js';
4
+ import type * as db_Schema from '../Schema.js';
5
+ /** Columns of the `webhook_deliveries` table, derived from `Schema.WebhookDelivery`. */
6
+ export type Table = db_Schema.WebhookDelivery;
7
+ /** A stored webhook-delivery row. */
8
+ export type Record = Selectable<Table>;
9
+ /** Maps a stored row to the domain delivery (null columns → absent fields). */
10
+ export declare function toDelivery(row: Record): Webhooks.Delivery;
11
+ /**
12
+ * Inserts a delivery row from its domain value.
13
+ *
14
+ * @param db - The database.
15
+ * @param delivery - The delivery to insert.
16
+ * @param expiresAt - Retention deadline (ISO); the row is invisible past it.
17
+ */
18
+ export declare function insert(db: Db.Db, delivery: Webhooks.Delivery, expiresAt: string): Promise<void>;
19
+ /**
20
+ * Lists a subscription's unexpired deliveries, newest first, with keyset
21
+ * paging (`id < cursor` — ids embed a zero-padded timestamp, so lexical order
22
+ * is chronological).
23
+ *
24
+ * @param db - The database.
25
+ * @param subscriptionId - The owning subscription id (`wh_…`).
26
+ * @param options - Paging options plus the retention timestamp.
27
+ * @returns The deliveries.
28
+ */
29
+ export declare function list(db: Db.Db, subscriptionId: string, options: list.Options): Promise<Webhooks.Delivery[]>;
30
+ export declare namespace list {
31
+ /** Options for {@link list}. */
32
+ type Options = {
33
+ /** Return deliveries whose id sorts before this one (older entries). */
34
+ cursor?: string | undefined;
35
+ /** Maximum deliveries to return. */
36
+ limit?: number | undefined;
37
+ /** ISO timestamp retention is evaluated against. */
38
+ now: string;
39
+ /** Rows to skip from the head (positional pagination; exclusive with `cursor`). */
40
+ offset?: number | undefined;
41
+ };
42
+ }
43
+ /**
44
+ * Counts a subscription's unexpired deliveries.
45
+ *
46
+ * @param db - The database.
47
+ * @param subscriptionId - The owning subscription id (`wh_…`).
48
+ * @param now - ISO timestamp retention is evaluated against.
49
+ * @returns The count.
50
+ */
51
+ export declare function count(db: Db.Db, subscriptionId: string, now: string): Promise<number>;
52
+ /**
53
+ * Reads a single unexpired delivery scoped to its subscription.
54
+ *
55
+ * @param db - The database.
56
+ * @param subscriptionId - The owning subscription id (`wh_…`).
57
+ * @param deliveryId - The delivery id (`whd_…`).
58
+ * @param now - ISO timestamp retention is evaluated against.
59
+ * @returns The delivery, or `null` when absent.
60
+ */
61
+ export declare function get(db: Db.Db, subscriptionId: string, deliveryId: string, now: string): Promise<Webhooks.Delivery | null>;
62
+ /**
63
+ * Deletes deliveries past their retention deadline. Called best-effort from
64
+ * the poller tick.
65
+ *
66
+ * @param db - The database.
67
+ * @param now - ISO timestamp retention is evaluated against.
68
+ * @returns The number of rows deleted.
69
+ */
70
+ export declare function pruneExpired(db: Db.Db, now: string): Promise<number>;
71
+ //# sourceMappingURL=webhookDeliveries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookDeliveries.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookDeliveries.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAExC,OAAO,KAAK,KAAK,QAAQ,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,wFAAwF;AACxF,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,eAAe,CAAA;AAE7C,qCAAqC;AACrC,MAAM,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAA;AAEtC,+EAA+E;AAC/E,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAczD;AAED;;;;;;GAMG;AACH,wBAAsB,MAAM,CAC1B,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAC3B,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED;;;;;;;;;GASG;AACH,wBAAsB,IAAI,CACxB,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,cAAc,EAAE,MAAM,EACtB,OAAO,EAAE,IAAI,CAAC,OAAO,GACpB,OAAO,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAW9B;AAED,MAAM,CAAC,OAAO,WAAW,IAAI,CAAC;IAC5B,gCAAgC;IAChC,KAAK,OAAO,GAAG;QACb,wEAAwE;QACxE,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC3B,oCAAoC;QACpC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;QAC1B,oDAAoD;QACpD,GAAG,EAAE,MAAM,CAAA;QACX,mFAAmF;QACnF,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAC5B,CAAA;CACF;AAED;;;;;;;GAOG;AACH,wBAAsB,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,cAAc,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQ3F;AAED;;;;;;;;GAQG;AACH,wBAAsB,GAAG,CACvB,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,cAAc,EAAE,MAAM,EACtB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,QAAQ,CAAC,QAAQ,GAAG,IAAI,CAAC,CASnC;AAED;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAM1E"}