tapimo 0.11.0 → 0.12.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 (339) hide show
  1. package/dist/App.d.ts +2296 -1010
  2. package/dist/App.d.ts.map +1 -1
  3. package/dist/App.js +2 -2
  4. package/dist/App.js.map +1 -1
  5. package/dist/Assets.d.ts +15 -0
  6. package/dist/Assets.d.ts.map +1 -1
  7. package/dist/Assets.js +7 -0
  8. package/dist/Assets.js.map +1 -1
  9. package/dist/admin/App.d.ts +53 -4
  10. package/dist/admin/App.d.ts.map +1 -1
  11. package/dist/admin/apps/api-keys.d.ts +4 -4
  12. package/dist/admin/apps/earn-vaults.d.ts +114 -0
  13. package/dist/admin/apps/earn-vaults.d.ts.map +1 -1
  14. package/dist/admin/apps/earn-vaults.js +59 -6
  15. package/dist/admin/apps/earn-vaults.js.map +1 -1
  16. package/dist/admin/apps/organizations.d.ts.map +1 -1
  17. package/dist/admin/apps/organizations.js +4 -2
  18. package/dist/admin/apps/organizations.js.map +1 -1
  19. package/dist/admin/apps/verified-tokens.d.ts +9 -9
  20. package/dist/admin/ui.generated.d.ts +1 -1
  21. package/dist/admin/ui.generated.d.ts.map +1 -1
  22. package/dist/admin/ui.generated.js +151 -151
  23. package/dist/admin/ui.generated.js.map +1 -1
  24. package/dist/apps/data/App.d.ts +1699 -749
  25. package/dist/apps/data/App.d.ts.map +1 -1
  26. package/dist/apps/data/App.js +56 -7
  27. package/dist/apps/data/App.js.map +1 -1
  28. package/dist/apps/data/ZoneSelection.d.ts +62 -0
  29. package/dist/apps/data/ZoneSelection.d.ts.map +1 -0
  30. package/dist/apps/data/ZoneSelection.js +44 -0
  31. package/dist/apps/data/ZoneSelection.js.map +1 -0
  32. package/dist/apps/data/routes/activities.d.ts +2367 -4
  33. package/dist/apps/data/routes/activities.d.ts.map +1 -1
  34. package/dist/apps/data/routes/activities.js +368 -87
  35. package/dist/apps/data/routes/activities.js.map +1 -1
  36. package/dist/apps/data/routes/addresses.d.ts +471 -340
  37. package/dist/apps/data/routes/addresses.d.ts.map +1 -1
  38. package/dist/apps/data/routes/balances.d.ts +28 -28
  39. package/dist/apps/data/routes/balances.js +1 -1
  40. package/dist/apps/data/routes/balances.js.map +1 -1
  41. package/dist/apps/data/routes/blocks.d.ts +4 -4
  42. package/dist/apps/data/routes/blocks.js +1 -1
  43. package/dist/apps/data/routes/blocks.js.map +1 -1
  44. package/dist/apps/data/routes/coingecko.d.ts +176 -176
  45. package/dist/apps/data/routes/earn.d.ts +131 -6
  46. package/dist/apps/data/routes/earn.d.ts.map +1 -1
  47. package/dist/apps/data/routes/earn.js +157 -25
  48. package/dist/apps/data/routes/earn.js.map +1 -1
  49. package/dist/apps/data/routes/exchanges.d.ts +825 -119
  50. package/dist/apps/data/routes/exchanges.d.ts.map +1 -1
  51. package/dist/apps/data/routes/exchanges.js +16 -13
  52. package/dist/apps/data/routes/exchanges.js.map +1 -1
  53. package/dist/apps/data/routes/fee-amm.d.ts.map +1 -1
  54. package/dist/apps/data/routes/fee-amm.js +9 -11
  55. package/dist/apps/data/routes/fee-amm.js.map +1 -1
  56. package/dist/apps/data/routes/indexer.d.ts +34 -34
  57. package/dist/apps/data/routes/receipts.d.ts +230 -230
  58. package/dist/apps/data/routes/receipts.js +1 -1
  59. package/dist/apps/data/routes/receipts.js.map +1 -1
  60. package/dist/apps/data/routes/rpc.js +24 -10
  61. package/dist/apps/data/routes/rpc.js.map +1 -1
  62. package/dist/apps/data/routes/tokenlist.d.ts.map +1 -1
  63. package/dist/apps/data/routes/tokenlist.js +16 -15
  64. package/dist/apps/data/routes/tokenlist.js.map +1 -1
  65. package/dist/apps/data/routes/tokens.d.ts +14 -0
  66. package/dist/apps/data/routes/tokens.d.ts.map +1 -1
  67. package/dist/apps/data/routes/tokens.js +34 -15
  68. package/dist/apps/data/routes/tokens.js.map +1 -1
  69. package/dist/apps/data/routes/transactions.js +1 -1
  70. package/dist/apps/data/routes/transactions.js.map +1 -1
  71. package/dist/apps/data/routes/transfers.d.ts.map +1 -1
  72. package/dist/apps/data/routes/transfers.js +7 -9
  73. package/dist/apps/data/routes/transfers.js.map +1 -1
  74. package/dist/apps/data/routes/webhooks.d.ts +4 -4
  75. package/dist/apps/data/routes/webhooks.d.ts.map +1 -1
  76. package/dist/apps/data/routes/webhooks.js +2 -2
  77. package/dist/apps/data/routes/webhooks.js.map +1 -1
  78. package/dist/apps/data/routes/zones.d.ts +30 -30
  79. package/dist/apps/funding/App.d.ts +27 -27
  80. package/dist/apps/funding/routes/chains.d.ts.map +1 -1
  81. package/dist/apps/funding/routes/chains.js +5 -4
  82. package/dist/apps/funding/routes/chains.js.map +1 -1
  83. package/dist/apps/funding/routes/deposit-addresses.d.ts +16 -16
  84. package/dist/apps/funding/routes/deposit-addresses.d.ts.map +1 -1
  85. package/dist/apps/funding/routes/deposit-addresses.js +8 -8
  86. package/dist/apps/funding/routes/deposit-addresses.js.map +1 -1
  87. package/dist/apps/funding/routes/providers.d.ts +13 -13
  88. package/dist/apps/funding/routes/providers.d.ts.map +1 -1
  89. package/dist/apps/funding/routes/providers.js +3 -2
  90. package/dist/apps/funding/routes/providers.js.map +1 -1
  91. package/dist/apps/funding/routes/quotes.d.ts.map +1 -1
  92. package/dist/apps/funding/routes/quotes.js +2 -2
  93. package/dist/apps/funding/routes/quotes.js.map +1 -1
  94. package/dist/apps/management/App.d.ts +627 -293
  95. package/dist/apps/management/App.d.ts.map +1 -1
  96. package/dist/apps/management/Billing.d.ts.map +1 -1
  97. package/dist/apps/management/Billing.js +19 -6
  98. package/dist/apps/management/Billing.js.map +1 -1
  99. package/dist/apps/management/routes/api-keys.d.ts +114 -54
  100. package/dist/apps/management/routes/api-keys.d.ts.map +1 -1
  101. package/dist/apps/management/routes/api-keys.js +76 -30
  102. package/dist/apps/management/routes/api-keys.js.map +1 -1
  103. package/dist/apps/management/routes/billing.d.ts +103 -30
  104. package/dist/apps/management/routes/billing.d.ts.map +1 -1
  105. package/dist/apps/management/routes/billing.js +91 -32
  106. package/dist/apps/management/routes/billing.js.map +1 -1
  107. package/dist/apps/management/routes/faucet.d.ts +33 -33
  108. package/dist/apps/management/routes/faucet.d.ts.map +1 -1
  109. package/dist/apps/management/routes/faucet.js +23 -12
  110. package/dist/apps/management/routes/faucet.js.map +1 -1
  111. package/dist/apps/management/routes/invitations.d.ts +46 -13
  112. package/dist/apps/management/routes/invitations.d.ts.map +1 -1
  113. package/dist/apps/management/routes/invitations.js +79 -29
  114. package/dist/apps/management/routes/invitations.js.map +1 -1
  115. package/dist/apps/management/routes/invite-links.d.ts +86 -41
  116. package/dist/apps/management/routes/invite-links.d.ts.map +1 -1
  117. package/dist/apps/management/routes/invite-links.js +100 -41
  118. package/dist/apps/management/routes/invite-links.js.map +1 -1
  119. package/dist/apps/management/routes/me.d.ts +5 -5
  120. package/dist/apps/management/routes/me.d.ts.map +1 -1
  121. package/dist/apps/management/routes/me.js +14 -10
  122. package/dist/apps/management/routes/me.js.map +1 -1
  123. package/dist/apps/management/routes/members.d.ts +93 -72
  124. package/dist/apps/management/routes/members.d.ts.map +1 -1
  125. package/dist/apps/management/routes/members.js +37 -18
  126. package/dist/apps/management/routes/members.js.map +1 -1
  127. package/dist/apps/management/routes/orgs.d.ts +48 -8
  128. package/dist/apps/management/routes/orgs.d.ts.map +1 -1
  129. package/dist/apps/management/routes/orgs.js +48 -19
  130. package/dist/apps/management/routes/orgs.js.map +1 -1
  131. package/dist/apps/management/routes/projects.d.ts +90 -28
  132. package/dist/apps/management/routes/projects.d.ts.map +1 -1
  133. package/dist/apps/management/routes/projects.js +72 -21
  134. package/dist/apps/management/routes/projects.js.map +1 -1
  135. package/dist/apps/management/routes/scopes.d.ts.map +1 -1
  136. package/dist/apps/management/routes/scopes.js +8 -5
  137. package/dist/apps/management/routes/scopes.js.map +1 -1
  138. package/dist/apps/management/routes/usage.d.ts +78 -78
  139. package/dist/apps/management/routes/usage.d.ts.map +1 -1
  140. package/dist/apps/management/routes/usage.js +41 -31
  141. package/dist/apps/management/routes/usage.js.map +1 -1
  142. package/dist/apps/management/routes/verified-token-requests.d.ts +34 -6
  143. package/dist/apps/management/routes/verified-token-requests.d.ts.map +1 -1
  144. package/dist/apps/management/routes/verified-token-requests.js +36 -17
  145. package/dist/apps/management/routes/verified-token-requests.js.map +1 -1
  146. package/dist/apps/management/routes/webhooks.d.ts +147 -130
  147. package/dist/apps/management/routes/webhooks.d.ts.map +1 -1
  148. package/dist/apps/management/routes/webhooks.js +80 -35
  149. package/dist/apps/management/routes/webhooks.js.map +1 -1
  150. package/dist/apps/mpp/internal/Adapter.d.ts +1 -1
  151. package/dist/apps/mpp/internal/Adapter.d.ts.map +1 -1
  152. package/dist/apps/mpp/internal/Adapter.js +12 -0
  153. package/dist/apps/mpp/internal/Adapter.js.map +1 -1
  154. package/dist/db/Db.d.ts +2 -0
  155. package/dist/db/Db.d.ts.map +1 -1
  156. package/dist/db/Db.js +40 -0
  157. package/dist/db/Db.js.map +1 -1
  158. package/dist/db/Schema.d.ts +23 -1
  159. package/dist/db/Schema.d.ts.map +1 -1
  160. package/dist/db/Schema.js +19 -3
  161. package/dist/db/Schema.js.map +1 -1
  162. package/dist/db/tables/earnVaults.d.ts +5 -1
  163. package/dist/db/tables/earnVaults.d.ts.map +1 -1
  164. package/dist/db/tables/earnVaults.js +5 -0
  165. package/dist/db/tables/earnVaults.js.map +1 -1
  166. package/dist/db/tables/webhookDeliveries.d.ts.map +1 -1
  167. package/dist/db/tables/webhookDeliveries.js +10 -0
  168. package/dist/db/tables/webhookDeliveries.js.map +1 -1
  169. package/dist/db/tables/webhookQueueCompletions.d.ts +15 -0
  170. package/dist/db/tables/webhookQueueCompletions.d.ts.map +1 -0
  171. package/dist/db/tables/webhookQueueCompletions.js +32 -0
  172. package/dist/db/tables/webhookQueueCompletions.js.map +1 -0
  173. package/dist/db/tables/webhookQueueEvents.d.ts +14 -20
  174. package/dist/db/tables/webhookQueueEvents.d.ts.map +1 -1
  175. package/dist/db/tables/webhookQueueEvents.js +68 -47
  176. package/dist/db/tables/webhookQueueEvents.js.map +1 -1
  177. package/dist/db/tables/webhookSubscriptions.d.ts +16 -5
  178. package/dist/db/tables/webhookSubscriptions.d.ts.map +1 -1
  179. package/dist/db/tables/webhookSubscriptions.js +29 -5
  180. package/dist/db/tables/webhookSubscriptions.js.map +1 -1
  181. package/dist/internal/Auth.d.ts +8 -1
  182. package/dist/internal/Auth.d.ts.map +1 -1
  183. package/dist/internal/Auth.js +13 -3
  184. package/dist/internal/Auth.js.map +1 -1
  185. package/dist/internal/Cache.d.ts.map +1 -1
  186. package/dist/internal/Cache.js +11 -7
  187. package/dist/internal/Cache.js.map +1 -1
  188. package/dist/internal/EarnVaults.d.ts +41 -2
  189. package/dist/internal/EarnVaults.d.ts.map +1 -1
  190. package/dist/internal/EarnVaults.js +167 -0
  191. package/dist/internal/EarnVaults.js.map +1 -1
  192. package/dist/internal/OpenApi.d.ts +26 -22
  193. package/dist/internal/OpenApi.d.ts.map +1 -1
  194. package/dist/internal/OpenApi.js +128 -39
  195. package/dist/internal/OpenApi.js.map +1 -1
  196. package/dist/internal/Response.d.ts +13 -8
  197. package/dist/internal/Response.d.ts.map +1 -1
  198. package/dist/internal/Response.js +16 -5
  199. package/dist/internal/Response.js.map +1 -1
  200. package/dist/internal/Schema.d.ts +5 -7
  201. package/dist/internal/Schema.d.ts.map +1 -1
  202. package/dist/internal/Schema.js +6 -7
  203. package/dist/internal/Schema.js.map +1 -1
  204. package/dist/internal/Store.d.ts +15 -6
  205. package/dist/internal/Store.d.ts.map +1 -1
  206. package/dist/internal/Store.js +45 -15
  207. package/dist/internal/Store.js.map +1 -1
  208. package/dist/internal/Tidx.d.ts +2 -0
  209. package/dist/internal/Tidx.d.ts.map +1 -1
  210. package/dist/internal/Tidx.js +16 -4
  211. package/dist/internal/Tidx.js.map +1 -1
  212. package/dist/internal/Webhooks.d.ts +29 -12
  213. package/dist/internal/Webhooks.d.ts.map +1 -1
  214. package/dist/internal/Webhooks.js +37 -20
  215. package/dist/internal/Webhooks.js.map +1 -1
  216. package/dist/internal/funding/Deposit.d.ts +2 -2
  217. package/dist/internal/funding/Deposit.d.ts.map +1 -1
  218. package/dist/internal/funding/Deposit.js +9 -8
  219. package/dist/internal/funding/Deposit.js.map +1 -1
  220. package/dist/internal/funding/DepositAddress.d.ts +4 -4
  221. package/dist/internal/funding/DepositAddress.d.ts.map +1 -1
  222. package/dist/internal/funding/DepositAddress.js +9 -8
  223. package/dist/internal/funding/DepositAddress.js.map +1 -1
  224. package/dist/internal/funding/Provider.d.ts.map +1 -1
  225. package/dist/internal/funding/Provider.js +13 -12
  226. package/dist/internal/funding/Provider.js.map +1 -1
  227. package/dist/internal/funding/providers/stargate.d.ts +19 -0
  228. package/dist/internal/funding/providers/stargate.d.ts.map +1 -0
  229. package/dist/internal/funding/providers/stargate.js +143 -0
  230. package/dist/internal/funding/providers/stargate.js.map +1 -0
  231. package/dist/providers/index.d.ts +7 -0
  232. package/dist/providers/index.d.ts.map +1 -1
  233. package/dist/providers/index.js +3 -0
  234. package/dist/providers/index.js.map +1 -1
  235. package/package.json +2 -2
  236. package/src/App.test.ts +48 -0
  237. package/src/App.ts +4 -2
  238. package/src/Assets.test.ts +18 -0
  239. package/src/Assets.ts +22 -0
  240. package/src/Client.test-d.ts +265 -16
  241. package/src/admin/apps/earn-vaults.test.ts +143 -0
  242. package/src/admin/apps/earn-vaults.ts +83 -6
  243. package/src/admin/apps/organizations.ts +6 -2
  244. package/src/admin/ui/src/routes/api-keys.tsx +36 -0
  245. package/src/admin/ui.generated.ts +151 -189
  246. package/src/apps/data/App.test.ts +31 -0
  247. package/src/apps/data/App.ts +56 -8
  248. package/src/apps/data/ZoneSelection.test.ts +196 -0
  249. package/src/apps/data/ZoneSelection.ts +108 -0
  250. package/src/apps/data/routes/activities.test.ts +328 -1
  251. package/src/apps/data/routes/activities.ts +498 -93
  252. package/src/apps/data/routes/balances.ts +1 -1
  253. package/src/apps/data/routes/blocks.ts +1 -1
  254. package/src/apps/data/routes/earn.test.ts +183 -23
  255. package/src/apps/data/routes/earn.ts +225 -29
  256. package/src/apps/data/routes/earn.zone-access.test.ts +46 -0
  257. package/src/apps/data/routes/exchanges.test.ts +31 -1
  258. package/src/apps/data/routes/exchanges.ts +19 -15
  259. package/src/apps/data/routes/fee-amm.ts +18 -11
  260. package/src/apps/data/routes/receipts.ts +1 -1
  261. package/src/apps/data/routes/rpc.test.ts +75 -0
  262. package/src/apps/data/routes/rpc.ts +23 -9
  263. package/src/apps/data/routes/tokenlist.ts +21 -18
  264. package/src/apps/data/routes/tokens.test.ts +29 -0
  265. package/src/apps/data/routes/tokens.ts +38 -15
  266. package/src/apps/data/routes/transactions.ts +1 -1
  267. package/src/apps/data/routes/transfers.test.ts +3 -3
  268. package/src/apps/data/routes/transfers.ts +12 -9
  269. package/src/apps/data/routes/webhooks.ts +6 -2
  270. package/src/apps/data/routes/zones.test.ts +19 -13
  271. package/src/apps/funding/routes/chains.test.ts +211 -7
  272. package/src/apps/funding/routes/chains.ts +19 -12
  273. package/src/apps/funding/routes/deposit-addresses.test.ts +394 -0
  274. package/src/apps/funding/routes/deposit-addresses.ts +84 -72
  275. package/src/apps/funding/routes/providers.ts +9 -5
  276. package/src/apps/funding/routes/quotes.test.ts +46 -0
  277. package/src/apps/funding/routes/quotes.ts +8 -5
  278. package/src/apps/funding/routes/transfers.test.ts +35 -32
  279. package/src/apps/management/Billing.test.ts +26 -0
  280. package/src/apps/management/Billing.ts +24 -7
  281. package/src/apps/management/routes/api-keys.test.ts +178 -0
  282. package/src/apps/management/routes/api-keys.ts +203 -144
  283. package/src/apps/management/routes/billing.test.ts +209 -0
  284. package/src/apps/management/routes/billing.ts +254 -177
  285. package/src/apps/management/routes/faucet.test.ts +39 -0
  286. package/src/apps/management/routes/faucet.ts +75 -41
  287. package/src/apps/management/routes/invitations.test.ts +216 -0
  288. package/src/apps/management/routes/invitations.ts +186 -109
  289. package/src/apps/management/routes/invite-links.test.ts +263 -1
  290. package/src/apps/management/routes/invite-links.ts +295 -214
  291. package/src/apps/management/routes/me.test.ts +49 -0
  292. package/src/apps/management/routes/me.ts +42 -32
  293. package/src/apps/management/routes/members.test.ts +124 -1
  294. package/src/apps/management/routes/members.ts +81 -51
  295. package/src/apps/management/routes/orgs.test.ts +176 -0
  296. package/src/apps/management/routes/orgs.ts +101 -59
  297. package/src/apps/management/routes/projects.test.ts +183 -0
  298. package/src/apps/management/routes/projects.ts +124 -60
  299. package/src/apps/management/routes/scopes.test.ts +44 -0
  300. package/src/apps/management/routes/scopes.ts +37 -28
  301. package/src/apps/management/routes/usage.test.ts +92 -0
  302. package/src/apps/management/routes/usage.ts +186 -151
  303. package/src/apps/management/routes/verified-token-requests.test.ts +114 -0
  304. package/src/apps/management/routes/verified-token-requests.ts +166 -133
  305. package/src/apps/management/routes/webhooks.test.ts +234 -0
  306. package/src/apps/management/routes/webhooks.ts +191 -78
  307. package/src/apps/mpp/internal/Adapter.ts +13 -1
  308. package/src/db/Db.test.ts +41 -0
  309. package/src/db/Db.ts +62 -0
  310. package/src/db/Schema.ts +28 -3
  311. package/src/db/tables/earnVaults.test.ts +22 -0
  312. package/src/db/tables/earnVaults.ts +11 -1
  313. package/src/db/tables/webhookDeliveries.ts +13 -0
  314. package/src/db/tables/webhookQueueCompletions.ts +55 -0
  315. package/src/db/tables/webhookQueueEvents.ts +95 -61
  316. package/src/db/tables/webhookSubscriptions.ts +45 -6
  317. package/src/internal/Auth.ts +23 -5
  318. package/src/internal/Cache.ts +14 -7
  319. package/src/internal/EarnVaults.capabilities.test.ts +33 -0
  320. package/src/internal/EarnVaults.test.ts +79 -0
  321. package/src/internal/EarnVaults.ts +277 -0
  322. package/src/internal/OpenApi.ts +165 -49
  323. package/src/internal/Response.test.ts +95 -0
  324. package/src/internal/Response.ts +40 -2
  325. package/src/internal/Schema.test.ts +16 -0
  326. package/src/internal/Schema.ts +7 -7
  327. package/src/internal/Store.test.ts +186 -0
  328. package/src/internal/Store.ts +57 -17
  329. package/src/internal/Tidx.test.ts +19 -0
  330. package/src/internal/Tidx.ts +16 -4
  331. package/src/internal/Webhooks.test.ts +122 -8
  332. package/src/internal/Webhooks.ts +59 -29
  333. package/src/internal/funding/Deposit.ts +71 -64
  334. package/src/internal/funding/DepositAddress.ts +50 -43
  335. package/src/internal/funding/Provider.ts +164 -142
  336. package/src/internal/funding/providers/index.test.ts +185 -0
  337. package/src/internal/funding/providers/stargate.ts +184 -0
  338. package/src/providers/index.test.ts +1 -0
  339. package/src/providers/index.ts +9 -0
@@ -1 +1 @@
1
- {"version":3,"file":"earnVaults.js","sourceRoot":"","sources":["../../../src/db/tables/earnVaults.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"earnVaults.js","sourceRoot":"","sources":["../../../src/db/tables/earnVaults.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"webhookDeliveries.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookDeliveries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookDeliveries.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookDeliveries.ts"],"names":[],"mappings":"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"}
@@ -138,6 +138,9 @@ export async function get(db, subscriptionId, deliveryId, now) {
138
138
  .executeTakeFirst();
139
139
  return row ? toDelivery(row) : null;
140
140
  }
141
+ // Per-statement delete bound: prune runs every minute, so a backlog drains in
142
+ // a few ticks instead of one unbounded DELETE churning the origin.
143
+ const pruneBatchLimit = 50_000;
141
144
  /**
142
145
  * Deletes deliveries past their retention deadline. Called best-effort from
143
146
  * the poller tick.
@@ -149,7 +152,14 @@ export async function get(db, subscriptionId, deliveryId, now) {
149
152
  export async function pruneExpired(db, now) {
150
153
  const result = await db.kysely
151
154
  .deleteFrom('webhook_deliveries')
155
+ // Repeated on the outer delete: the row recheck under concurrency re-runs
156
+ // only this predicate, so a row renewed mid-statement survives.
152
157
  .where('expiresAt', '<=', now)
158
+ .where('id', 'in', (eb) => eb
159
+ .selectFrom('webhook_deliveries')
160
+ .select('id')
161
+ .where('expiresAt', '<=', now)
162
+ .limit(pruneBatchLimit))
153
163
  .executeTakeFirst();
154
164
  return Number(result.numDeletedRows);
155
165
  }
@@ -1 +1 @@
1
- {"version":3,"file":"webhookDeliveries.js","sourceRoot":"","sources":["../../../src/db/tables/webhookDeliveries.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookDeliveries.js","sourceRoot":"","sources":["../../../src/db/tables/webhookDeliveries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type * as Webhooks from '../../internal/Webhooks.js';
2
+ import type * as Db from '../Db.js';
3
+ import type * as db_Schema from '../Schema.js';
4
+ /** Columns of the `webhook_queue_completions` table, derived from `Schema.WebhookQueueCompletion`. */
5
+ export type Table = db_Schema.WebhookQueueCompletion;
6
+ /** A terminal delivery-obligation outcome. */
7
+ export type TerminalStatus = db_Schema.WebhookQueueCompletion['status'];
8
+ /**
9
+ * Reads the unexpired completion for a reference, if any. Rows are written by
10
+ * the queue-event terminal transition and only ever read for dedupe.
11
+ */
12
+ export declare function get(db: Db.Db, reference: Webhooks.QueueReference, now: string): Promise<Table | null>;
13
+ /** Deletes expired completions, bounded per call; expiry is filtered at query time, so pruning is space-only. */
14
+ export declare function pruneExpired(db: Db.Db, now: string): Promise<number>;
15
+ //# sourceMappingURL=webhookQueueCompletions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookQueueCompletions.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookQueueCompletions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,4BAA4B,CAAA;AAC3D,OAAO,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,KAAK,KAAK,SAAS,MAAM,cAAc,CAAA;AAE9C,sGAAsG;AACtG,MAAM,MAAM,KAAK,GAAG,SAAS,CAAC,sBAAsB,CAAA;AAEpD,8CAA8C;AAC9C,MAAM,MAAM,cAAc,GAAG,SAAS,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAA;AAEvE;;;GAGG;AACH,wBAAsB,GAAG,CACvB,EAAE,EAAE,EAAE,CAAC,EAAE,EACT,SAAS,EAAE,QAAQ,CAAC,cAAc,EAClC,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAUvB;AAMD,iHAAiH;AACjH,wBAAsB,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAmB1E"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Reads the unexpired completion for a reference, if any. Rows are written by
3
+ * the queue-event terminal transition and only ever read for dedupe.
4
+ */
5
+ export async function get(db, reference, now) {
6
+ return ((await db.kysely
7
+ .selectFrom('webhook_queue_completions')
8
+ .selectAll()
9
+ .where('eventId', '=', reference.eventId)
10
+ .where('subscriptionId', '=', reference.subscriptionId)
11
+ .where('expiresAt', '>', now)
12
+ .executeTakeFirst()) ?? null);
13
+ }
14
+ // Per-statement delete bound: prune runs every minute, so a backlog drains in
15
+ // a few ticks instead of one unbounded DELETE churning the origin.
16
+ const pruneBatchLimit = 50_000;
17
+ /** Deletes expired completions, bounded per call; expiry is filtered at query time, so pruning is space-only. */
18
+ export async function pruneExpired(db, now) {
19
+ const result = await db.kysely
20
+ .deleteFrom('webhook_queue_completions')
21
+ // Repeated on the outer delete: the row recheck under concurrency re-runs
22
+ // only this predicate, so a completion renewed mid-statement survives.
23
+ .where('expiresAt', '<=', now)
24
+ .where(({ eb, refTuple, selectFrom }) => eb(refTuple('subscriptionId', 'eventId'), 'in', selectFrom('webhook_queue_completions')
25
+ .select(['subscriptionId', 'eventId'])
26
+ .where('expiresAt', '<=', now)
27
+ .limit(pruneBatchLimit)
28
+ .$asTuple('subscriptionId', 'eventId')))
29
+ .executeTakeFirst();
30
+ return Number(result.numDeletedRows);
31
+ }
32
+ //# sourceMappingURL=webhookQueueCompletions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhookQueueCompletions.js","sourceRoot":"","sources":["../../../src/db/tables/webhookQueueCompletions.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,EAAS,EACT,SAAkC,EAClC,GAAW;IAEX,OAAO,CACL,CAAC,MAAM,EAAE,CAAC,MAAM;SACb,UAAU,CAAC,2BAA2B,CAAC;SACvC,SAAS,EAAE;SACX,KAAK,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,OAAO,CAAC;SACxC,KAAK,CAAC,gBAAgB,EAAE,GAAG,EAAE,SAAS,CAAC,cAAc,CAAC;SACtD,KAAK,CAAC,WAAW,EAAE,GAAG,EAAE,GAAG,CAAC;SAC5B,gBAAgB,EAAE,CAAC,IAAI,IAAI,CAC/B,CAAA;AACH,CAAC;AAED,8EAA8E;AAC9E,mEAAmE;AACnE,MAAM,eAAe,GAAG,MAAM,CAAA;AAE9B,iHAAiH;AACjH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,EAAS,EAAE,GAAW;IACvD,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,MAAM;SAC3B,UAAU,CAAC,2BAA2B,CAAC;QACxC,0EAA0E;QAC1E,uEAAuE;SACtE,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC;SAC7B,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CACtC,EAAE,CACA,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,EACrC,IAAI,EACJ,UAAU,CAAC,2BAA2B,CAAC;SACpC,MAAM,CAAC,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC;SACrC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,GAAG,CAAC;SAC7B,KAAK,CAAC,eAAe,CAAC;SACtB,QAAQ,CAAC,gBAAgB,EAAE,SAAS,CAAC,CACzC,CACF;SACA,gBAAgB,EAAE,CAAA;IACrB,OAAO,MAAM,CAAC,MAAM,CAAC,cAAc,CAAC,CAAA;AACtC,CAAC"}
@@ -1,13 +1,16 @@
1
1
  import { type Generated, type Insertable, type Selectable } from 'kysely';
2
2
  import type * as Webhooks from '../../internal/Webhooks.js';
3
3
  import type * as Db from '../Db.js';
4
+ import * as WebhookQueueCompletions from './webhookQueueCompletions.js';
4
5
  import type * as db_Schema from '../Schema.js';
5
6
  /** Columns of the `webhook_queue_events` table, derived from `Schema.WebhookQueueEvent`. */
6
- export type Table = Omit<db_Schema.WebhookQueueEvent, 'attemptCount' | 'attemptingAt' | 'nextAttemptAt' | 'observedAt' | 'status'> & {
7
+ export type Table = Omit<db_Schema.WebhookQueueEvent, 'attemptCount' | 'attemptingAt' | 'expiresAt' | 'nextAttemptAt' | 'observedAt' | 'status'> & {
7
8
  /** Delivery attempts claimed so far; database default 0. */
8
9
  attemptCount: Generated<number>;
9
10
  /** ISO timestamp of the current claim; database default null. */
10
11
  attemptingAt: Generated<string | null>;
12
+ /** Legacy dedupe deadline; unwritten since completions took over. */
13
+ expiresAt: Generated<string | null>;
11
14
  /** ISO retry due time; database default null (due immediately). */
12
15
  nextAttemptAt: Generated<string | null>;
13
16
  /** ISO head-observation stamp; database default null (replays carry none). */
@@ -17,18 +20,15 @@ export type Table = Omit<db_Schema.WebhookQueueEvent, 'attemptCount' | 'attempti
17
20
  };
18
21
  /** A stored webhook Queue event. */
19
22
  export type Record = Selectable<Table>;
20
- /** A terminal delivery-obligation outcome. */
21
- export type TerminalStatus = Exclude<db_Schema.WebhookQueueEvent['status'], 'pending'>;
22
23
  /**
23
- * Reads one pending envelope. Terminal rows read as absent so no consumer
24
- * can redeliver a completed obligation or disturb its dedupe row.
24
+ * Reads one pending envelope. The status filter only ever excludes rows
25
+ * completed before the completions split; completions now leave the table.
25
26
  */
26
27
  export declare function get(db: Db.Db, reference: Webhooks.QueueReference): Promise<Webhooks.QueueEvent | null>;
27
28
  /**
28
- * Stages envelopes as fresh obligations. Pending conflicts keep their first
29
- * envelope and backoff position; terminal conflicts inside the dedupe window
30
- * suppress the replay; terminal conflicts past it are replaced, so an expired
31
- * dedupe row pruning has not yet reclaimed never blocks a replay.
29
+ * Stages envelopes as fresh obligations. Unexpired completions and any
30
+ * existing row suppress the replay; a replay stages only when neither exists,
31
+ * which a completion past its dedupe window guarantees for completed work.
32
32
  */
33
33
  export declare function ensure(db: Db.Db, rows: readonly Insertable<Table>[]): Promise<number>;
34
34
  /** Claims one due pending obligation with a single atomic update. */
@@ -53,13 +53,13 @@ export declare namespace claim {
53
53
  nextAttemptAt: string | null;
54
54
  type: 'scheduled';
55
55
  } | {
56
- status: TerminalStatus;
56
+ status: WebhookQueueCompletions.TerminalStatus;
57
57
  type: 'terminal';
58
58
  };
59
59
  }
60
60
  /**
61
- * Marks a claimed obligation terminal, starting its dedupe retention window;
62
- * pending rows never expire, so this stamp is the only expiry that matters.
61
+ * Marks a claimed obligation terminal: one atomic statement deletes the queue
62
+ * row and writes the insert-only completion that starts the dedupe window.
63
63
  * The `attemptingAt` predicate fences stale claimants.
64
64
  */
65
65
  export declare function complete(db: Db.Db, reference: Webhooks.QueueReference, options: complete.Options): Promise<boolean>;
@@ -68,10 +68,10 @@ export declare namespace complete {
68
68
  type Options = {
69
69
  /** Claim marker returned by {@link claim}; fences stale claimants. */
70
70
  claimedAt: string;
71
- /** Replacement ISO retention deadline for the terminal dedupe row. */
71
+ /** ISO retention deadline for the dedupe completion. */
72
72
  expiresAt: string;
73
73
  /** Terminal outcome. */
74
- status: TerminalStatus;
74
+ status: WebhookQueueCompletions.TerminalStatus;
75
75
  };
76
76
  }
77
77
  /** Releases a claim and schedules the next attempt; fenced like {@link complete}. */
@@ -115,10 +115,4 @@ export declare namespace pending {
115
115
  oldestDueAt: string | null;
116
116
  };
117
117
  }
118
- /**
119
- * Deletes terminal dedupe rows past their retention deadline. Pending rows
120
- * never expire: owed work drains only through terminal transitions
121
- * (delivery, permanent failure, or the skip after auto-disable).
122
- */
123
- export declare function pruneExpired(db: Db.Db, now: string): Promise<number>;
124
118
  //# sourceMappingURL=webhookQueueEvents.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhookQueueEvents.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookQueueEvents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookQueueEvents.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookQueueEvents.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,8 @@
1
1
  import { sql } from 'kysely'; // prettier-ignore
2
+ import * as WebhookQueueCompletions from './webhookQueueCompletions.js';
2
3
  /**
3
- * Reads one pending envelope. Terminal rows read as absent so no consumer
4
- * can redeliver a completed obligation or disturb its dedupe row.
4
+ * Reads one pending envelope. The status filter only ever excludes rows
5
+ * completed before the completions split; completions now leave the table.
5
6
  */
6
7
  export async function get(db, reference) {
7
8
  return ((await db.kysely
@@ -13,39 +14,44 @@ export async function get(db, reference) {
13
14
  .executeTakeFirst()) ?? null);
14
15
  }
15
16
  /**
16
- * Stages envelopes as fresh obligations. Pending conflicts keep their first
17
- * envelope and backoff position; terminal conflicts inside the dedupe window
18
- * suppress the replay; terminal conflicts past it are replaced, so an expired
19
- * dedupe row pruning has not yet reclaimed never blocks a replay.
17
+ * Stages envelopes as fresh obligations. Unexpired completions and any
18
+ * existing row suppress the replay; a replay stages only when neither exists,
19
+ * which a completion past its dedupe window guarantees for completed work.
20
20
  */
21
21
  export async function ensure(db, rows) {
22
22
  if (rows.length === 0)
23
23
  return 0;
24
+ const values = sql.join(rows.map((row) => sql `(${row.subscriptionId}::text, ${row.eventId}::text, ${JSON.stringify(row.envelope)}::jsonb, ${row.createdAt}::text, ${row.nextAttemptAt ?? null}::text, ${row.observedAt ?? null}::text)`));
25
+ // The VALUES source is raw because kysely has no table constructor for it,
26
+ // but both real tables stay in the builder so WithSchemaPlugin qualifies
27
+ // them (previews isolate by schema; raw identifiers would escape it). The
28
+ // completion check must ride the insert: a separate read would let a
29
+ // completion commit between the statements and re-stage just-finished work.
30
+ // `column1..6` are Postgres's default VALUES names, in the row order above;
31
+ // the window comparison uses each row's own staging time, not a shared clock.
32
+ // Conflicts only ever hit pending rows (or pre-split terminal rows during
33
+ // the drain), and both suppress the replay; a legitimate post-expiry replay
34
+ // meets no conflict because its completed row was deleted.
24
35
  const result = await db.kysely
25
36
  .insertInto('webhook_queue_events')
26
- .values([...rows])
27
- .onConflict((oc) => oc
28
- .columns(['subscriptionId', 'eventId'])
29
- .doUpdateSet((eb) => ({
30
- attemptCount: 0,
31
- attemptingAt: null,
32
- createdAt: eb.ref('excluded.createdAt'),
33
- envelope: eb.ref('excluded.envelope'),
34
- expiresAt: eb.ref('excluded.expiresAt'),
35
- nextAttemptAt: eb.ref('excluded.nextAttemptAt'),
36
- // Refreshed with the rest: a replacement keeping the replaced row's
37
- // stamp would measure observation-to-attempt from an observation
38
- // that belongs to a delivery made days earlier.
39
- observedAt: eb.ref('excluded.observedAt'),
40
- status: 'pending',
41
- }))
42
- .where((eb) => eb.and([
43
- eb('webhook_queue_events.status', '!=', 'pending'),
44
- eb('webhook_queue_events.expiresAt', '<=', eb.ref('excluded.createdAt')),
45
- ])))
37
+ .columns(['subscriptionId', 'eventId', 'envelope', 'createdAt', 'nextAttemptAt', 'observedAt'])
38
+ .expression((eb) => eb
39
+ .selectFrom(sql `(VALUES ${values})`.as('v'))
40
+ .select([
41
+ sql `v.column1`.as('subscriptionId'),
42
+ sql `v.column2`.as('eventId'),
43
+ sql `v.column3`.as('envelope'),
44
+ sql `v.column4`.as('createdAt'),
45
+ sql `v.column5`.as('nextAttemptAt'),
46
+ sql `v.column6`.as('observedAt'),
47
+ ])
48
+ .where(({ exists, not, selectFrom }) => not(exists(selectFrom('webhook_queue_completions')
49
+ .select('eventId')
50
+ .where('subscriptionId', '=', sql `v.column1`)
51
+ .where('eventId', '=', sql `v.column2`)
52
+ .where('expiresAt', '>', sql `v.column4`)))))
53
+ .onConflict((oc) => oc.columns(['subscriptionId', 'eventId']).doNothing())
46
54
  .executeTakeFirst();
47
- // The command tag counts inserted rows plus replaced expired rows; live
48
- // conflicts fall out of the conditional update and are not counted.
49
55
  return Number(result.numInsertedOrUpdatedRows ?? 0n);
50
56
  }
51
57
  /** Due, unclaimed pending work: shared by {@link claim} and {@link due}. */
@@ -68,14 +74,24 @@ export async function claim(db, reference, options) {
68
74
  .executeTakeFirst();
69
75
  if (claimed)
70
76
  return { record: claimed, type: 'claimed' };
77
+ // Queue first, completions second: a complete() landing between the reads
78
+ // then still surfaces its completion, so a finished obligation never reads
79
+ // as missing, the one claim outcome alerts treat as a fault.
71
80
  const existing = await db.kysely
72
81
  .selectFrom('webhook_queue_events')
73
82
  .select(['attemptingAt', 'nextAttemptAt', 'status'])
74
83
  .where('subscriptionId', '=', reference.subscriptionId)
75
84
  .where('eventId', '=', reference.eventId)
76
85
  .executeTakeFirst();
77
- if (!existing)
86
+ if (!existing) {
87
+ // An unexpired completion reads as terminal so claim-outcome metrics keep
88
+ // their meaning; an expired one reads as missing, like a pruned row.
89
+ const completed = await WebhookQueueCompletions.get(db, reference, options.now);
90
+ if (completed)
91
+ return { status: completed.status, type: 'terminal' };
78
92
  return { type: 'missing' };
93
+ }
94
+ // Reachable only for rows completed before the completions split.
79
95
  if (existing.status !== 'pending')
80
96
  return { status: existing.status, type: 'terminal' };
81
97
  if (existing.attemptingAt !== null && existing.attemptingAt > options.staleBefore)
@@ -83,20 +99,38 @@ export async function claim(db, reference, options) {
83
99
  return { nextAttemptAt: existing.nextAttemptAt, type: 'scheduled' };
84
100
  }
85
101
  /**
86
- * Marks a claimed obligation terminal, starting its dedupe retention window;
87
- * pending rows never expire, so this stamp is the only expiry that matters.
102
+ * Marks a claimed obligation terminal: one atomic statement deletes the queue
103
+ * row and writes the insert-only completion that starts the dedupe window.
88
104
  * The `attemptingAt` predicate fences stale claimants.
89
105
  */
90
106
  export async function complete(db, reference, options) {
91
107
  const result = await db.kysely
92
- .updateTable('webhook_queue_events')
93
- .set({ attemptingAt: null, expiresAt: options.expiresAt, status: options.status })
108
+ .with('done', (qb) => qb
109
+ .deleteFrom('webhook_queue_events')
94
110
  .where('subscriptionId', '=', reference.subscriptionId)
95
111
  .where('eventId', '=', reference.eventId)
96
112
  .where('status', '=', 'pending')
97
113
  .where('attemptingAt', '=', options.claimedAt)
114
+ .returning(['subscriptionId', 'eventId']))
115
+ .insertInto('webhook_queue_completions')
116
+ .columns(['subscriptionId', 'eventId', 'status', 'expiresAt'])
117
+ .expression((eb) => eb
118
+ .selectFrom('done')
119
+ .select((s) => [
120
+ 'subscriptionId',
121
+ 'eventId',
122
+ s.val(options.status).as('status'),
123
+ s.val(options.expiresAt).as('expiresAt'),
124
+ ]))
125
+ // Re-completing a replayed obligation: the latest delivery outcome wins
126
+ // and retention restarts, matching pre-split replay semantics; doNothing
127
+ // would also report zero rows and fail a fence that won.
128
+ .onConflict((oc) => oc.columns(['subscriptionId', 'eventId']).doUpdateSet((eb) => ({
129
+ expiresAt: eb.ref('excluded.expiresAt'),
130
+ status: eb.ref('excluded.status'),
131
+ })))
98
132
  .executeTakeFirst();
99
- return result.numUpdatedRows === 1n;
133
+ return result.numInsertedOrUpdatedRows === 1n;
100
134
  }
101
135
  /** Releases a claim and schedules the next attempt; fenced like {@link complete}. */
102
136
  export async function schedule(db, reference, options) {
@@ -148,17 +182,4 @@ export async function pending(db, options) {
148
182
  oldestDueAt: row.oldestDueAt,
149
183
  };
150
184
  }
151
- /**
152
- * Deletes terminal dedupe rows past their retention deadline. Pending rows
153
- * never expire: owed work drains only through terminal transitions
154
- * (delivery, permanent failure, or the skip after auto-disable).
155
- */
156
- export async function pruneExpired(db, now) {
157
- const result = await db.kysely
158
- .deleteFrom('webhook_queue_events')
159
- .where('expiresAt', '<=', now)
160
- .where('status', '!=', 'pending')
161
- .executeTakeFirst();
162
- return Number(result.numDeletedRows);
163
- }
164
185
  //# sourceMappingURL=webhookQueueEvents.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"webhookQueueEvents.js","sourceRoot":"","sources":["../../../src/db/tables/webhookQueueEvents.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookQueueEvents.js","sourceRoot":"","sources":["../../../src/db/tables/webhookQueueEvents.ts"],"names":[],"mappings":"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"}
@@ -189,24 +189,35 @@ export declare namespace listActiveForFundingDeposit {
189
189
  export declare function getCursor(db: Db.Db, id: string): Promise<string | null>;
190
190
  /**
191
191
  * Records a successful delivery: resets the consecutive-failure counter and
192
- * stamps `lastDeliveryAt`.
192
+ * stamps `lastDeliveryAt`. Skipped when neither field would move, so
193
+ * deliveries stop contending on the row's lock.
193
194
  *
194
195
  * @param db - The database.
195
196
  * @param id - The subscription id (`wh_…`).
196
- * @param now - Delivery timestamp (ISO).
197
- * @returns The updated subscription, or `undefined` when the row is absent.
197
+ * @param options - Delivery timestamp and stamp-staleness bound.
198
+ * @returns The updated subscription, or `undefined` when nothing was written.
198
199
  */
199
- export declare function recordSuccess(db: Db.Db, id: string, now: string): Promise<Webhooks.Subscription | undefined>;
200
+ export declare function recordSuccess(db: Db.Db, id: string, options: recordSuccess.Options): Promise<Webhooks.Subscription | undefined>;
201
+ export declare namespace recordSuccess {
202
+ /** Clock bounds for one success record. */
203
+ type Options = {
204
+ /** Delivery timestamp (ISO). */
205
+ now: string;
206
+ /** Rewrite the stamp only when it predates this (ISO). */
207
+ staleBefore: string;
208
+ };
209
+ }
200
210
  /**
201
211
  * Records a failed delivery: atomically increments the consecutive-failure
202
212
  * counter and disables the subscription once it reaches `maxFailures` (raw
203
213
  * fragments use storage column names — they bypass the camelCase mapping).
214
+ * Skipped once disabled at the cap, when nothing would move.
204
215
  *
205
216
  * @param db - The database.
206
217
  * @param id - The subscription id (`wh_…`).
207
218
  * @param maxFailures - Consecutive failures before auto-disabling.
208
219
  * @param now - Failure timestamp (ISO).
209
- * @returns The updated subscription, or `undefined` when the row is absent.
220
+ * @returns The updated subscription, or `undefined` when nothing was written.
210
221
  */
211
222
  export declare function recordFailure(db: Db.Db, id: string, maxFailures: number, now: string): Promise<Webhooks.Subscription | undefined>;
212
223
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"webhookSubscriptions.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookSubscriptions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"webhookSubscriptions.d.ts","sourceRoot":"","sources":["../../../src/db/tables/webhookSubscriptions.ts"],"names":[],"mappings":"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"}
@@ -292,18 +292,25 @@ export async function getCursor(db, id) {
292
292
  }
293
293
  /**
294
294
  * Records a successful delivery: resets the consecutive-failure counter and
295
- * stamps `lastDeliveryAt`.
295
+ * stamps `lastDeliveryAt`. Skipped when neither field would move, so
296
+ * deliveries stop contending on the row's lock.
296
297
  *
297
298
  * @param db - The database.
298
299
  * @param id - The subscription id (`wh_…`).
299
- * @param now - Delivery timestamp (ISO).
300
- * @returns The updated subscription, or `undefined` when the row is absent.
300
+ * @param options - Delivery timestamp and stamp-staleness bound.
301
+ * @returns The updated subscription, or `undefined` when nothing was written.
301
302
  */
302
- export async function recordSuccess(db, id, now) {
303
+ export async function recordSuccess(db, id, options) {
304
+ const { now, staleBefore } = options;
303
305
  const row = await db.kysely
304
306
  .updateTable('webhook_subscriptions')
305
307
  .set({ failureCount: 0, lastDeliveryAt: now, updatedAt: now })
306
308
  .where('id', '=', id)
309
+ .where((eb) => eb.or([
310
+ eb('failureCount', '>', 0),
311
+ eb('lastDeliveryAt', 'is', null),
312
+ eb('lastDeliveryAt', '<', staleBefore),
313
+ ]))
307
314
  .returningAll()
308
315
  .executeTakeFirst();
309
316
  return row ? toSubscription(row) : undefined;
@@ -312,12 +319,13 @@ export async function recordSuccess(db, id, now) {
312
319
  * Records a failed delivery: atomically increments the consecutive-failure
313
320
  * counter and disables the subscription once it reaches `maxFailures` (raw
314
321
  * fragments use storage column names — they bypass the camelCase mapping).
322
+ * Skipped once disabled at the cap, when nothing would move.
315
323
  *
316
324
  * @param db - The database.
317
325
  * @param id - The subscription id (`wh_…`).
318
326
  * @param maxFailures - Consecutive failures before auto-disabling.
319
327
  * @param now - Failure timestamp (ISO).
320
- * @returns The updated subscription, or `undefined` when the row is absent.
328
+ * @returns The updated subscription, or `undefined` when nothing was written.
321
329
  */
322
330
  export async function recordFailure(db, id, maxFailures, now) {
323
331
  const row = await db.kysely
@@ -328,10 +336,17 @@ export async function recordFailure(db, id, maxFailures, now) {
328
336
  updatedAt: now,
329
337
  })
330
338
  .where('id', '=', id)
339
+ // In-flight failures race the disable and would queue on the row lock. A
340
+ // re-enabled subscription keeps its capped counter; the status arm lets
341
+ // its next failure re-disable it.
342
+ .where((eb) => eb.or([eb('failureCount', '<', maxFailures), eb('status', '!=', 'disabled')]))
331
343
  .returningAll()
332
344
  .executeTakeFirst();
333
345
  return row ? toSubscription(row) : undefined;
334
346
  }
347
+ // Smaller than the ledger-table bounds: each subscription delete cascades
348
+ // into deliveries, queue events, and completions, fanning the statement out.
349
+ const pruneBatchLimit = 1_000;
335
350
  /**
336
351
  * Deletes expired subscriptions (their delivery rows cascade). Called
337
352
  * best-effort on a schedule.
@@ -341,10 +356,19 @@ export async function recordFailure(db, id, maxFailures, now) {
341
356
  * @returns The number of rows deleted.
342
357
  */
343
358
  export async function pruneExpired(db, now) {
359
+ // Bounded like the ledger prunes: this delete cascades into deliveries,
360
+ // queue events, and completions, so it fans out the widest of the four.
344
361
  const result = await db.kysely
345
362
  .deleteFrom('webhook_subscriptions')
363
+ // Repeated on the outer delete: the row recheck under concurrency re-runs
364
+ // only this predicate, so a subscription renewed mid-statement survives.
365
+ .where('expiresAt', '<=', now)
366
+ .where('id', 'in', (eb) => eb
367
+ .selectFrom('webhook_subscriptions')
368
+ .select('id')
346
369
  .where('expiresAt', 'is not', null)
347
370
  .where('expiresAt', '<=', now)
371
+ .limit(pruneBatchLimit))
348
372
  .executeTakeFirst();
349
373
  return Number(result.numDeletedRows);
350
374
  }