better-supabase 0.7.1 → 0.9.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 (1377) hide show
  1. package/README.md +146 -81
  2. package/bin/better-supabase.js +14 -2
  3. package/dist/access-sql-DUSSMaC3.js +201 -0
  4. package/dist/actor-BAhb-d1S.d.ts +104 -0
  5. package/dist/actor-KHDOKGb1.js +151 -0
  6. package/dist/adapter-CEjmtazZ.js +1984 -0
  7. package/dist/agents-BCNhIxVZ.d.ts +111 -0
  8. package/dist/ai-cache-Dps7aRu1.d.ts +70 -0
  9. package/dist/ai-cache-zeUL94pB.js +84 -0
  10. package/dist/ai-chat-3GBSlFR4.d.ts +608 -0
  11. package/dist/ai-files-D2_9YLjF.js +331 -0
  12. package/dist/ai-message-DfaP8sis.js +14 -0
  13. package/dist/ai-sdk/agents/index.d.ts +154 -10
  14. package/dist/ai-sdk/agents/index.js +172 -17
  15. package/dist/ai-sdk/batches/index.d.ts +4 -4
  16. package/dist/ai-sdk/batches/index.js +5 -5
  17. package/dist/ai-sdk/cache/index.d.ts +2 -2
  18. package/dist/ai-sdk/cache/index.js +2 -2
  19. package/dist/ai-sdk/chat/index.d.ts +1 -1
  20. package/dist/ai-sdk/chat/index.js +10 -21
  21. package/dist/ai-sdk/embeddings/index.d.ts +3 -3
  22. package/dist/ai-sdk/embeddings/index.js +1 -2
  23. package/dist/ai-sdk/files/index.d.ts +3 -3
  24. package/dist/ai-sdk/files/index.js +4 -4
  25. package/dist/ai-sdk/index.d.ts +38 -9
  26. package/dist/ai-sdk/index.js +5 -3
  27. package/dist/ai-sdk/mcp/index.d.ts +43 -6
  28. package/dist/ai-sdk/mcp/index.js +37 -8
  29. package/dist/ai-sdk/memory/index.d.ts +5 -2
  30. package/dist/ai-sdk/memory/index.js +2 -2
  31. package/dist/ai-sdk/react/index.js +1 -2
  32. package/dist/ai-sdk/workflow/index.d.ts +7 -6
  33. package/dist/ai-sdk/workflow/index.js +15 -26
  34. package/dist/ai-tasks-Ih5oHfyj.d.ts +157 -0
  35. package/dist/announcements-BHCzraR6.js +128 -0
  36. package/dist/api-CFjuYKFY.js +680 -0
  37. package/dist/api-TG3jE5aO.d.ts +411 -0
  38. package/dist/api-keys-BEQatEUW.js +318 -0
  39. package/dist/api-keys-BYoGCM9p.d.ts +205 -0
  40. package/dist/app-tables-BGl5_U2x.js +584 -0
  41. package/dist/approvals-a2KmioBh.d.ts +124 -0
  42. package/dist/arazzo/index.d.ts +255 -0
  43. package/dist/arazzo/index.js +622 -0
  44. package/dist/assistant-Bf2cA6RO.d.ts +148 -0
  45. package/dist/astro/index.d.ts +9 -8
  46. package/dist/astro/index.js +12 -9
  47. package/dist/asyncapi/index.d.ts +103 -0
  48. package/dist/asyncapi/index.js +569 -0
  49. package/dist/attachments-DAj2Yp95.js +264 -0
  50. package/dist/attributes-D4mA7WhI.js +38 -0
  51. package/dist/audit-log-BMMuGPdP.js +786 -0
  52. package/dist/auth-CdBKt0CS.js +20 -0
  53. package/dist/auth-reply-DUCwb8YO.js +31 -0
  54. package/dist/auth-reply-Dj124sbX.d.ts +11 -0
  55. package/dist/authorization-DpRfs6Wx.d.ts +1412 -0
  56. package/dist/authorization-hooks-DkmrnDX7.d.ts +214 -0
  57. package/dist/authorizer-DH7DjkL3.js +126 -0
  58. package/dist/authorizer-eiOjo-3l.d.ts +73 -0
  59. package/dist/base64-BmeCBgGo.js +42 -0
  60. package/dist/batch-limit-DKVQDz4o.js +5 -0
  61. package/dist/before-route-B98js9m_.js +30 -0
  62. package/dist/better-result/index.d.ts +118 -0
  63. package/dist/better-result/index.js +64 -0
  64. package/dist/bind-a7sUgvf4.d.ts +70 -0
  65. package/dist/block-env-CBd_SoL5.js +29 -0
  66. package/dist/block-env-Dxl7rsI0.d.ts +10 -0
  67. package/dist/block-events-DD9Q_NUz.js +96 -0
  68. package/dist/block-fields-5UA84ZUg.d.ts +55 -0
  69. package/dist/block-fields-ffD6Gxe4.js +139 -0
  70. package/dist/block-helpers-C86hPEjI.d.ts +37 -0
  71. package/dist/block-helpers-CfG_MvDR.js +264 -0
  72. package/dist/block-hooks-BLPWD3Jt.d.ts +107 -0
  73. package/dist/block-hooks-BsXncUlZ.js +114 -0
  74. package/dist/block-transport-DaGGXjIw.d.ts +70 -0
  75. package/dist/block-transport-G4t1umrR.js +85 -0
  76. package/dist/blocks/access-requests/index.d.ts +98 -0
  77. package/dist/blocks/access-requests/index.js +99 -0
  78. package/dist/blocks/agents/index.d.ts +21 -3
  79. package/dist/blocks/agents/index.js +65 -18
  80. package/dist/blocks/ai-cache/index.d.ts +8 -3
  81. package/dist/blocks/ai-cache/index.js +15 -3
  82. package/dist/blocks/ai-chat/index.d.ts +28 -4
  83. package/dist/blocks/ai-chat/index.js +31 -5
  84. package/dist/blocks/ai-chat/react/index.d.ts +12 -46
  85. package/dist/blocks/ai-chat/react/index.js +43 -335
  86. package/dist/blocks/ai-chat/solid/index.d.ts +34 -0
  87. package/dist/blocks/ai-chat/solid/index.js +41 -0
  88. package/dist/blocks/ai-chat/svelte/index.d.ts +34 -0
  89. package/dist/blocks/ai-chat/svelte/index.js +41 -0
  90. package/dist/blocks/ai-chat/vue/index.d.ts +34 -0
  91. package/dist/blocks/ai-chat/vue/index.js +41 -0
  92. package/dist/blocks/ai-files/index.d.ts +11 -4
  93. package/dist/blocks/ai-files/index.js +16 -3
  94. package/dist/blocks/ai-providers/index.d.ts +18 -3
  95. package/dist/blocks/ai-providers/index.js +41 -15
  96. package/dist/blocks/ai-tasks/index.d.ts +10 -3
  97. package/dist/blocks/ai-tasks/index.js +71 -21
  98. package/dist/blocks/announcements/index.d.ts +18 -3
  99. package/dist/blocks/announcements/index.js +27 -3
  100. package/dist/blocks/announcements/react/index.d.ts +4 -14
  101. package/dist/blocks/announcements/react/index.js +22 -70
  102. package/dist/blocks/announcements/solid/index.d.ts +13 -0
  103. package/dist/blocks/announcements/solid/index.js +14 -0
  104. package/dist/blocks/announcements/svelte/index.d.ts +13 -0
  105. package/dist/blocks/announcements/svelte/index.js +14 -0
  106. package/dist/blocks/announcements/vue/index.d.ts +13 -0
  107. package/dist/blocks/announcements/vue/index.js +14 -0
  108. package/dist/blocks/api-keys/index.d.ts +24 -7
  109. package/dist/blocks/api-keys/index.js +30 -295
  110. package/dist/blocks/api-keys/react/index.d.ts +29 -0
  111. package/dist/blocks/api-keys/react/index.js +43 -0
  112. package/dist/blocks/api-keys/react/server.d.ts +7 -0
  113. package/dist/blocks/api-keys/react/server.js +7 -0
  114. package/dist/blocks/api-keys/solid/index.d.ts +13 -0
  115. package/dist/blocks/api-keys/solid/index.js +14 -0
  116. package/dist/blocks/api-keys/svelte/index.d.ts +13 -0
  117. package/dist/blocks/api-keys/svelte/index.js +14 -0
  118. package/dist/blocks/api-keys/vue/index.d.ts +13 -0
  119. package/dist/blocks/api-keys/vue/index.js +14 -0
  120. package/dist/blocks/approvals/index.d.ts +22 -0
  121. package/dist/blocks/approvals/index.js +189 -0
  122. package/dist/blocks/attachments/index.d.ts +18 -223
  123. package/dist/blocks/attachments/index.js +26 -233
  124. package/dist/blocks/audit/index.d.ts +72 -354
  125. package/dist/blocks/audit/index.js +91 -695
  126. package/dist/blocks/audit/react/index.d.ts +26 -0
  127. package/dist/blocks/audit/react/index.js +44 -0
  128. package/dist/blocks/audit/react/server.d.ts +7 -0
  129. package/dist/blocks/audit/react/server.js +7 -0
  130. package/dist/blocks/audit/solid/index.d.ts +13 -0
  131. package/dist/blocks/audit/solid/index.js +14 -0
  132. package/dist/blocks/audit/svelte/index.d.ts +13 -0
  133. package/dist/blocks/audit/svelte/index.js +14 -0
  134. package/dist/blocks/audit/vue/index.d.ts +13 -0
  135. package/dist/blocks/audit/vue/index.js +14 -0
  136. package/dist/blocks/billing/index.d.ts +40 -13
  137. package/dist/blocks/billing/index.js +49 -18
  138. package/dist/blocks/billing/react/index.d.ts +34 -0
  139. package/dist/blocks/billing/react/index.js +36 -0
  140. package/dist/blocks/billing/react/server.d.ts +7 -0
  141. package/dist/blocks/billing/react/server.js +7 -0
  142. package/dist/blocks/billing/solid/index.d.ts +15 -0
  143. package/dist/blocks/billing/solid/index.js +14 -0
  144. package/dist/blocks/billing/svelte/index.d.ts +15 -0
  145. package/dist/blocks/billing/svelte/index.js +14 -0
  146. package/dist/blocks/billing/vue/index.d.ts +15 -0
  147. package/dist/blocks/billing/vue/index.js +14 -0
  148. package/dist/blocks/bookings/index.d.ts +36 -0
  149. package/dist/blocks/bookings/index.js +28 -0
  150. package/dist/blocks/bookings/react/index.d.ts +31 -0
  151. package/dist/blocks/bookings/react/index.js +59 -0
  152. package/dist/blocks/bookings/react/server.d.ts +6 -0
  153. package/dist/blocks/bookings/react/server.js +7 -0
  154. package/dist/blocks/bookings/solid/index.d.ts +13 -0
  155. package/dist/blocks/bookings/solid/index.js +14 -0
  156. package/dist/blocks/bookings/svelte/index.d.ts +13 -0
  157. package/dist/blocks/bookings/svelte/index.js +14 -0
  158. package/dist/blocks/bookings/vue/index.d.ts +13 -0
  159. package/dist/blocks/bookings/vue/index.js +14 -0
  160. package/dist/blocks/bulk/index.d.ts +142 -0
  161. package/dist/blocks/bulk/index.js +154 -0
  162. package/dist/blocks/calendar/index.d.ts +20 -0
  163. package/dist/blocks/calendar/index.js +33 -0
  164. package/dist/blocks/calendar/react/index.d.ts +26 -0
  165. package/dist/blocks/calendar/react/index.js +58 -0
  166. package/dist/blocks/calendar/react/server.d.ts +6 -0
  167. package/dist/blocks/calendar/react/server.js +7 -0
  168. package/dist/blocks/calendar/solid/index.d.ts +13 -0
  169. package/dist/blocks/calendar/solid/index.js +14 -0
  170. package/dist/blocks/calendar/svelte/index.d.ts +13 -0
  171. package/dist/blocks/calendar/svelte/index.js +14 -0
  172. package/dist/blocks/calendar/vue/index.d.ts +13 -0
  173. package/dist/blocks/calendar/vue/index.js +14 -0
  174. package/dist/blocks/catalog/index.d.ts +224 -0
  175. package/dist/blocks/catalog/index.js +292 -0
  176. package/dist/blocks/collections/index.d.ts +184 -0
  177. package/dist/blocks/collections/index.js +208 -0
  178. package/dist/blocks/comments/index.d.ts +19 -166
  179. package/dist/blocks/comments/index.js +26 -206
  180. package/dist/blocks/comments/react/index.d.ts +27 -0
  181. package/dist/blocks/comments/react/index.js +45 -0
  182. package/dist/blocks/comments/react/server.d.ts +7 -0
  183. package/dist/blocks/comments/react/server.js +7 -0
  184. package/dist/blocks/comments/solid/index.d.ts +13 -0
  185. package/dist/blocks/comments/solid/index.js +14 -0
  186. package/dist/blocks/comments/svelte/index.d.ts +13 -0
  187. package/dist/blocks/comments/svelte/index.js +14 -0
  188. package/dist/blocks/comments/vue/index.d.ts +13 -0
  189. package/dist/blocks/comments/vue/index.js +14 -0
  190. package/dist/blocks/connectors/index.d.ts +21 -3
  191. package/dist/blocks/connectors/index.js +54 -18
  192. package/dist/blocks/custom-fields/index.d.ts +62 -0
  193. package/dist/blocks/custom-fields/index.js +85 -0
  194. package/dist/blocks/data-lifecycle/index.d.ts +119 -10
  195. package/dist/blocks/data-lifecycle/index.js +103 -12
  196. package/dist/blocks/deals/index.d.ts +262 -0
  197. package/dist/blocks/deals/index.js +380 -0
  198. package/dist/blocks/documents/index.d.ts +17 -0
  199. package/dist/blocks/documents/index.js +118 -0
  200. package/dist/blocks/domains/index.d.ts +117 -0
  201. package/dist/blocks/domains/index.js +118 -0
  202. package/dist/blocks/drive/index.d.ts +296 -0
  203. package/dist/blocks/drive/index.js +483 -0
  204. package/dist/blocks/employees/index.d.ts +205 -0
  205. package/dist/blocks/employees/index.js +289 -0
  206. package/dist/blocks/engagements/index.d.ts +125 -0
  207. package/dist/blocks/engagements/index.js +143 -0
  208. package/dist/blocks/entitlements/index.d.ts +40 -4
  209. package/dist/blocks/entitlements/index.js +14 -24
  210. package/dist/blocks/entitlements/react/index.d.ts +24 -0
  211. package/dist/blocks/entitlements/react/index.js +35 -0
  212. package/dist/blocks/entitlements/react/server.d.ts +6 -0
  213. package/dist/blocks/entitlements/react/server.js +7 -0
  214. package/dist/blocks/entitlements/solid/index.d.ts +13 -0
  215. package/dist/blocks/entitlements/solid/index.js +14 -0
  216. package/dist/blocks/entitlements/svelte/index.d.ts +13 -0
  217. package/dist/blocks/entitlements/svelte/index.js +14 -0
  218. package/dist/blocks/entitlements/vue/index.d.ts +13 -0
  219. package/dist/blocks/entitlements/vue/index.js +14 -0
  220. package/dist/blocks/flags/index.d.ts +61 -187
  221. package/dist/blocks/flags/index.js +65 -252
  222. package/dist/blocks/forms/index.d.ts +302 -0
  223. package/dist/blocks/forms/index.js +341 -0
  224. package/dist/blocks/forms/react/index.d.ts +16 -0
  225. package/dist/blocks/forms/react/index.js +25 -0
  226. package/dist/blocks/forms/react/server.d.ts +6 -0
  227. package/dist/blocks/forms/react/server.js +7 -0
  228. package/dist/blocks/forms/solid/index.d.ts +13 -0
  229. package/dist/blocks/forms/solid/index.js +14 -0
  230. package/dist/blocks/forms/svelte/index.d.ts +13 -0
  231. package/dist/blocks/forms/svelte/index.js +14 -0
  232. package/dist/blocks/forms/vue/index.d.ts +13 -0
  233. package/dist/blocks/forms/vue/index.js +14 -0
  234. package/dist/blocks/hiring/index.d.ts +154 -0
  235. package/dist/blocks/hiring/index.js +180 -0
  236. package/dist/blocks/identities/index.d.ts +83 -0
  237. package/dist/blocks/identities/index.js +103 -0
  238. package/dist/blocks/imports/index.d.ts +91 -0
  239. package/dist/blocks/imports/index.js +123 -0
  240. package/dist/blocks/inbox/index.d.ts +22 -3
  241. package/dist/blocks/inbox/index.js +78 -6
  242. package/dist/blocks/inbox/react/index.d.ts +3 -2
  243. package/dist/blocks/inbox/react/index.js +55 -199
  244. package/dist/blocks/inbox/react/server.d.ts +2 -1
  245. package/dist/blocks/inbox/solid/index.d.ts +27 -0
  246. package/dist/blocks/inbox/solid/index.js +32 -0
  247. package/dist/blocks/inbox/svelte/index.d.ts +27 -0
  248. package/dist/blocks/inbox/svelte/index.js +32 -0
  249. package/dist/blocks/inbox/vue/index.d.ts +27 -0
  250. package/dist/blocks/inbox/vue/index.js +32 -0
  251. package/dist/blocks/index.d.ts +9 -64
  252. package/dist/blocks/index.js +193 -57
  253. package/dist/blocks/inventory/index.d.ts +181 -0
  254. package/dist/blocks/inventory/index.js +219 -0
  255. package/dist/blocks/invoices/index.d.ts +154 -0
  256. package/dist/blocks/invoices/index.js +216 -0
  257. package/dist/blocks/jobs/index.d.ts +188 -49
  258. package/dist/blocks/jobs/index.js +698 -527
  259. package/dist/blocks/knowledge/index.d.ts +10 -3
  260. package/dist/blocks/knowledge/index.js +17 -3
  261. package/dist/blocks/leave/index.d.ts +241 -0
  262. package/dist/blocks/leave/index.js +209 -0
  263. package/dist/blocks/memory/index.d.ts +9 -4
  264. package/dist/blocks/memory/index.js +49 -12
  265. package/dist/blocks/metrics/index.d.ts +174 -0
  266. package/dist/blocks/metrics/index.js +217 -0
  267. package/dist/blocks/mfa/index.d.ts +7 -0
  268. package/dist/blocks/mfa/index.js +12 -0
  269. package/dist/blocks/mfa/react/index.d.ts +30 -0
  270. package/dist/blocks/mfa/react/index.js +45 -0
  271. package/dist/blocks/mfa/react/server.d.ts +9 -0
  272. package/dist/blocks/mfa/react/server.js +12 -0
  273. package/dist/blocks/mfa/solid/index.d.ts +20 -0
  274. package/dist/blocks/mfa/solid/index.js +23 -0
  275. package/dist/blocks/mfa/svelte/index.d.ts +20 -0
  276. package/dist/blocks/mfa/svelte/index.js +23 -0
  277. package/dist/blocks/mfa/vue/index.d.ts +20 -0
  278. package/dist/blocks/mfa/vue/index.js +23 -0
  279. package/dist/blocks/notifications/index.d.ts +345 -26
  280. package/dist/blocks/notifications/index.js +744 -120
  281. package/dist/blocks/notifications/react/index.d.ts +7 -32
  282. package/dist/blocks/notifications/react/index.js +23 -49
  283. package/dist/blocks/notifications/react/server.d.ts +2 -1
  284. package/dist/blocks/notifications/solid/index.d.ts +13 -0
  285. package/dist/blocks/notifications/solid/index.js +14 -0
  286. package/dist/blocks/notifications/svelte/index.d.ts +13 -0
  287. package/dist/blocks/notifications/svelte/index.js +14 -0
  288. package/dist/blocks/notifications/vue/index.d.ts +13 -0
  289. package/dist/blocks/notifications/vue/index.js +14 -0
  290. package/dist/blocks/number-sequences/index.d.ts +39 -0
  291. package/dist/blocks/number-sequences/index.js +38 -0
  292. package/dist/blocks/oauth-server/index.d.ts +228 -0
  293. package/dist/blocks/oauth-server/index.js +309 -0
  294. package/dist/blocks/onboarding/index.d.ts +8 -3
  295. package/dist/blocks/onboarding/index.js +17 -63
  296. package/dist/blocks/onboarding/react/index.d.ts +3 -12
  297. package/dist/blocks/onboarding/react/index.js +18 -60
  298. package/dist/blocks/onboarding/react/server.d.ts +2 -2
  299. package/dist/blocks/onboarding/react/server.js +2 -2
  300. package/dist/blocks/onboarding/solid/index.d.ts +13 -0
  301. package/dist/blocks/onboarding/solid/index.js +14 -0
  302. package/dist/blocks/onboarding/svelte/index.d.ts +13 -0
  303. package/dist/blocks/onboarding/svelte/index.js +14 -0
  304. package/dist/blocks/onboarding/vue/index.d.ts +13 -0
  305. package/dist/blocks/onboarding/vue/index.js +14 -0
  306. package/dist/blocks/orders/index.d.ts +264 -0
  307. package/dist/blocks/orders/index.js +589 -0
  308. package/dist/blocks/organizations/index.d.ts +31 -238
  309. package/dist/blocks/organizations/index.js +49 -399
  310. package/dist/blocks/organizations/react/index.d.ts +108 -0
  311. package/dist/blocks/organizations/react/index.js +113 -0
  312. package/dist/blocks/organizations/react/server.d.ts +11 -0
  313. package/dist/blocks/organizations/react/server.js +15 -0
  314. package/dist/blocks/organizations/solid/index.d.ts +34 -0
  315. package/dist/blocks/organizations/solid/index.js +32 -0
  316. package/dist/blocks/organizations/svelte/index.d.ts +34 -0
  317. package/dist/blocks/organizations/svelte/index.js +32 -0
  318. package/dist/blocks/organizations/vue/index.d.ts +34 -0
  319. package/dist/blocks/organizations/vue/index.js +32 -0
  320. package/dist/blocks/outbox/index.d.ts +12 -3
  321. package/dist/blocks/outbox/index.js +97 -67
  322. package/dist/blocks/parties/index.d.ts +181 -0
  323. package/dist/blocks/parties/index.js +258 -0
  324. package/dist/blocks/pipelines/index.d.ts +189 -0
  325. package/dist/blocks/pipelines/index.js +204 -0
  326. package/dist/blocks/profiles/index.d.ts +14 -9
  327. package/dist/blocks/profiles/index.js +20 -6
  328. package/dist/blocks/promotions/index.d.ts +125 -0
  329. package/dist/blocks/promotions/index.js +123 -0
  330. package/dist/blocks/push/index.d.ts +48 -28
  331. package/dist/blocks/push/index.js +45 -16
  332. package/dist/blocks/quotes/index.d.ts +152 -0
  333. package/dist/blocks/quotes/index.js +209 -0
  334. package/dist/blocks/rank/index.d.ts +71 -0
  335. package/dist/blocks/rank/index.js +53 -0
  336. package/dist/blocks/reactions/index.d.ts +18 -0
  337. package/dist/blocks/reactions/index.js +26 -0
  338. package/dist/blocks/reactions/react/index.d.ts +23 -0
  339. package/dist/blocks/reactions/react/index.js +46 -0
  340. package/dist/blocks/reactions/react/server.d.ts +6 -0
  341. package/dist/blocks/reactions/react/server.js +7 -0
  342. package/dist/blocks/reactions/solid/index.d.ts +13 -0
  343. package/dist/blocks/reactions/solid/index.js +14 -0
  344. package/dist/blocks/reactions/svelte/index.d.ts +13 -0
  345. package/dist/blocks/reactions/svelte/index.js +14 -0
  346. package/dist/blocks/reactions/vue/index.d.ts +13 -0
  347. package/dist/blocks/reactions/vue/index.js +14 -0
  348. package/dist/blocks/relations/index.d.ts +180 -0
  349. package/dist/blocks/relations/index.js +254 -0
  350. package/dist/blocks/reminders/index.d.ts +177 -0
  351. package/dist/blocks/reminders/index.js +171 -0
  352. package/dist/blocks/reviews/index.d.ts +148 -0
  353. package/dist/blocks/reviews/index.js +139 -0
  354. package/dist/blocks/rules/index.d.ts +103 -0
  355. package/dist/blocks/rules/index.js +54 -0
  356. package/dist/blocks/rules/react/index.d.ts +34 -0
  357. package/dist/blocks/rules/react/index.js +55 -0
  358. package/dist/blocks/rules/react/server.d.ts +6 -0
  359. package/dist/blocks/rules/react/server.js +7 -0
  360. package/dist/blocks/rules/solid/index.d.ts +13 -0
  361. package/dist/blocks/rules/solid/index.js +14 -0
  362. package/dist/blocks/rules/svelte/index.d.ts +13 -0
  363. package/dist/blocks/rules/svelte/index.js +14 -0
  364. package/dist/blocks/rules/vue/index.d.ts +13 -0
  365. package/dist/blocks/rules/vue/index.js +14 -0
  366. package/dist/blocks/saved-views/index.d.ts +17 -0
  367. package/dist/blocks/saved-views/index.js +29 -0
  368. package/dist/blocks/saved-views/react/index.d.ts +34 -0
  369. package/dist/blocks/saved-views/react/index.js +57 -0
  370. package/dist/blocks/saved-views/react/server.d.ts +7 -0
  371. package/dist/blocks/saved-views/react/server.js +7 -0
  372. package/dist/blocks/saved-views/solid/index.d.ts +13 -0
  373. package/dist/blocks/saved-views/solid/index.js +14 -0
  374. package/dist/blocks/saved-views/svelte/index.d.ts +13 -0
  375. package/dist/blocks/saved-views/svelte/index.js +14 -0
  376. package/dist/blocks/saved-views/vue/index.d.ts +13 -0
  377. package/dist/blocks/saved-views/vue/index.js +14 -0
  378. package/dist/blocks/search/index.d.ts +31 -0
  379. package/dist/blocks/search/index.js +61 -0
  380. package/dist/blocks/search/react/index.d.ts +36 -0
  381. package/dist/blocks/search/react/index.js +49 -0
  382. package/dist/blocks/search/react/server.d.ts +7 -0
  383. package/dist/blocks/search/react/server.js +8 -0
  384. package/dist/blocks/search/solid/index.d.ts +13 -0
  385. package/dist/blocks/search/solid/index.js +14 -0
  386. package/dist/blocks/search/svelte/index.d.ts +13 -0
  387. package/dist/blocks/search/svelte/index.js +14 -0
  388. package/dist/blocks/search/vue/index.d.ts +13 -0
  389. package/dist/blocks/search/vue/index.js +14 -0
  390. package/dist/blocks/service-principals/index.d.ts +126 -0
  391. package/dist/blocks/service-principals/index.js +107 -0
  392. package/dist/blocks/sessions/index.d.ts +7 -0
  393. package/dist/blocks/sessions/index.js +14 -0
  394. package/dist/blocks/sessions/react/index.d.ts +31 -0
  395. package/dist/blocks/sessions/react/index.js +51 -0
  396. package/dist/blocks/sessions/react/server.d.ts +9 -0
  397. package/dist/blocks/sessions/react/server.js +11 -0
  398. package/dist/blocks/sessions/solid/index.d.ts +20 -0
  399. package/dist/blocks/sessions/solid/index.js +23 -0
  400. package/dist/blocks/sessions/svelte/index.d.ts +20 -0
  401. package/dist/blocks/sessions/svelte/index.js +23 -0
  402. package/dist/blocks/sessions/vue/index.d.ts +20 -0
  403. package/dist/blocks/sessions/vue/index.js +23 -0
  404. package/dist/blocks/settings/index.d.ts +20 -86
  405. package/dist/blocks/settings/index.js +28 -101
  406. package/dist/blocks/settings/react/index.d.ts +25 -0
  407. package/dist/blocks/settings/react/index.js +37 -0
  408. package/dist/blocks/settings/react/server.d.ts +7 -0
  409. package/dist/blocks/settings/react/server.js +7 -0
  410. package/dist/blocks/settings/solid/index.d.ts +13 -0
  411. package/dist/blocks/settings/solid/index.js +14 -0
  412. package/dist/blocks/settings/svelte/index.d.ts +13 -0
  413. package/dist/blocks/settings/svelte/index.js +14 -0
  414. package/dist/blocks/settings/vue/index.d.ts +13 -0
  415. package/dist/blocks/settings/vue/index.js +14 -0
  416. package/dist/blocks/share-links/index.d.ts +99 -0
  417. package/dist/blocks/share-links/index.js +99 -0
  418. package/dist/blocks/shared-signals/index.d.ts +395 -0
  419. package/dist/blocks/shared-signals/index.js +880 -0
  420. package/dist/blocks/signing-keys/index.d.ts +29 -0
  421. package/dist/blocks/signing-keys/index.js +161 -0
  422. package/dist/blocks/sla/index.d.ts +114 -0
  423. package/dist/blocks/sla/index.js +122 -0
  424. package/dist/blocks/sso/index.d.ts +169 -147
  425. package/dist/blocks/sso/index.js +259 -321
  426. package/dist/blocks/state-machine/index.d.ts +105 -0
  427. package/dist/blocks/state-machine/index.js +116 -0
  428. package/dist/blocks/tags/index.d.ts +20 -0
  429. package/dist/blocks/tags/index.js +28 -0
  430. package/dist/blocks/tags/react/index.d.ts +28 -0
  431. package/dist/blocks/tags/react/index.js +47 -0
  432. package/dist/blocks/tags/react/server.d.ts +7 -0
  433. package/dist/blocks/tags/react/server.js +7 -0
  434. package/dist/blocks/tags/solid/index.d.ts +13 -0
  435. package/dist/blocks/tags/solid/index.js +14 -0
  436. package/dist/blocks/tags/svelte/index.d.ts +13 -0
  437. package/dist/blocks/tags/svelte/index.js +14 -0
  438. package/dist/blocks/tags/vue/index.d.ts +13 -0
  439. package/dist/blocks/tags/vue/index.js +14 -0
  440. package/dist/blocks/targets/index.d.ts +82 -0
  441. package/dist/blocks/targets/index.js +73 -0
  442. package/dist/blocks/teams/index.d.ts +61 -0
  443. package/dist/blocks/teams/index.js +83 -0
  444. package/dist/blocks/templates/index.d.ts +362 -0
  445. package/dist/blocks/templates/index.js +483 -0
  446. package/dist/blocks/time-tracking/index.d.ts +250 -0
  447. package/dist/blocks/time-tracking/index.js +317 -0
  448. package/dist/blocks/trash/index.d.ts +78 -0
  449. package/dist/blocks/trash/index.js +79 -0
  450. package/dist/blocks/undo/index.d.ts +9 -0
  451. package/dist/blocks/undo/index.js +14 -0
  452. package/dist/blocks/undo/react/index.d.ts +17 -0
  453. package/dist/blocks/undo/react/index.js +24 -0
  454. package/dist/blocks/undo/react/server.d.ts +7 -0
  455. package/dist/blocks/undo/react/server.js +7 -0
  456. package/dist/blocks/undo/solid/index.d.ts +13 -0
  457. package/dist/blocks/undo/solid/index.js +14 -0
  458. package/dist/blocks/undo/svelte/index.d.ts +13 -0
  459. package/dist/blocks/undo/svelte/index.js +14 -0
  460. package/dist/blocks/undo/vue/index.d.ts +13 -0
  461. package/dist/blocks/undo/vue/index.js +14 -0
  462. package/dist/blocks/usage/index.d.ts +10 -4
  463. package/dist/blocks/usage/index.js +16 -232
  464. package/dist/blocks/usage/react/index.d.ts +23 -0
  465. package/dist/blocks/usage/react/index.js +38 -0
  466. package/dist/blocks/usage/react/server.d.ts +7 -0
  467. package/dist/blocks/usage/react/server.js +7 -0
  468. package/dist/blocks/usage/solid/index.d.ts +13 -0
  469. package/dist/blocks/usage/solid/index.js +14 -0
  470. package/dist/blocks/usage/svelte/index.d.ts +13 -0
  471. package/dist/blocks/usage/svelte/index.js +14 -0
  472. package/dist/blocks/usage/vue/index.d.ts +13 -0
  473. package/dist/blocks/usage/vue/index.js +14 -0
  474. package/dist/blocks/versions/index.d.ts +165 -0
  475. package/dist/blocks/versions/index.js +283 -0
  476. package/dist/blocks/waitlist/index.d.ts +57 -19
  477. package/dist/blocks/waitlist/index.js +47 -12
  478. package/dist/blocks/webhooks/index.d.ts +275 -134
  479. package/dist/blocks/webhooks/index.js +775 -231
  480. package/dist/blocks/work-items/index.d.ts +208 -0
  481. package/dist/blocks/work-items/index.js +305 -0
  482. package/dist/blocks/workflow-builder/index.d.ts +26 -6
  483. package/dist/blocks/workflow-builder/index.js +30 -5
  484. package/dist/blocks/workflow-builder/react/index.d.ts +4 -19
  485. package/dist/blocks/workflow-builder/react/index.js +45 -89
  486. package/dist/blocks/workflow-builder/solid/index.d.ts +20 -0
  487. package/dist/blocks/workflow-builder/solid/index.js +23 -0
  488. package/dist/blocks/workflow-builder/svelte/index.d.ts +20 -0
  489. package/dist/blocks/workflow-builder/svelte/index.js +23 -0
  490. package/dist/blocks/workflow-builder/vue/index.d.ts +20 -0
  491. package/dist/blocks/workflow-builder/vue/index.js +23 -0
  492. package/dist/blocks/workflows/index.d.ts +20 -3
  493. package/dist/blocks/workflows/index.js +27 -3
  494. package/dist/blocks/workflows/react/index.d.ts +5 -20
  495. package/dist/blocks/workflows/react/index.js +41 -113
  496. package/dist/blocks/workflows/solid/index.d.ts +20 -0
  497. package/dist/blocks/workflows/solid/index.js +23 -0
  498. package/dist/blocks/workflows/svelte/index.d.ts +20 -0
  499. package/dist/blocks/workflows/svelte/index.js +23 -0
  500. package/dist/blocks/workflows/vue/index.d.ts +20 -0
  501. package/dist/blocks/workflows/vue/index.js +23 -0
  502. package/dist/blocks-D2WQ63PI.js +84 -0
  503. package/dist/bookings-0XnhHNLM.js +181 -0
  504. package/dist/build-Cm0T5MVG.js +1815 -0
  505. package/dist/build-Cx08LOT7.js +689 -0
  506. package/dist/calendar-DcFrpSOy.js +801 -0
  507. package/dist/casing-DdFWEtqr.js +16 -0
  508. package/dist/channel-D-LHCY11.d.ts +78 -0
  509. package/dist/channels-C-GCoNLd.js +114 -0
  510. package/dist/chat-sdk/index.d.ts +131 -7
  511. package/dist/chat-sdk/index.js +155 -6
  512. package/dist/chat-sdk/react/index.d.ts +2 -1
  513. package/dist/chat-sdk/react/index.js +1 -2
  514. package/dist/chat-sdk/react/server.d.ts +2 -1
  515. package/dist/chat-sdk/react/server.js +1 -2
  516. package/dist/claims-0KZVT804.js +61 -0
  517. package/dist/cli/add-B0zoJUYX.js +651 -0
  518. package/dist/cli/add-Bd5M6uEZ.js +75 -0
  519. package/dist/cli/add-CT6p5psO.js +1 -0
  520. package/dist/cli/adopt-C9jl8z0h.js +1 -0
  521. package/dist/cli/adopt-CebmlHL-.js +393 -0
  522. package/dist/cli/agent-CCt_aXpJ.js +176 -0
  523. package/dist/cli/apply-Dxk8AUNU.js +302 -0
  524. package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
  525. package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
  526. package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
  527. package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
  528. package/dist/cli/bin.js +41 -21
  529. package/dist/cli/blocks-Bzz326nn.js +1 -0
  530. package/dist/cli/blocks-Dq25D80b.js +124 -0
  531. package/dist/cli/cache-Cx6qlRDR.js +502 -0
  532. package/dist/cli/catalog-Di15TkM2.js +187 -0
  533. package/dist/cli/codemod-woL4cVe0.js +985 -0
  534. package/dist/cli/command-CK9Cn8HV.js +836 -0
  535. package/dist/cli/completion-BO5UK6bG.js +1 -0
  536. package/dist/cli/completion-CWoDmFZr.js +205 -0
  537. package/dist/cli/completion-J3dqnNoW.js +30 -0
  538. package/dist/cli/config-C1d-mbUA.js +1 -0
  539. package/dist/cli/config-CLHpTk9Y.js +1421 -0
  540. package/dist/cli/config-MuKY9kUj.js +39 -0
  541. package/dist/cli/config-edit-Ct1lXe8a.js +603 -0
  542. package/dist/cli/db-DT1bGB02.js +78 -0
  543. package/dist/cli/design-edit-B-WsnhUF.js +175 -0
  544. package/dist/cli/detect-DYDUBLU4.js +84 -0
  545. package/dist/cli/dist-D_VbPAMR.js +129 -0
  546. package/dist/cli/dist-DuiMMRbJ.js +1112 -0
  547. package/dist/cli/doctor-SGw36h1D.js +3806 -0
  548. package/dist/cli/emit-ZAYeh4Yn.js +1042 -0
  549. package/dist/cli/env-CVXvJoLP.js +142 -0
  550. package/dist/cli/env-D3gZ-OHj.js +1 -0
  551. package/dist/cli/env-DJ4ZaJpe.js +1 -0
  552. package/dist/cli/env-DMw_MBe5.js +996 -0
  553. package/dist/cli/errors-Caiz_0so.js +98 -0
  554. package/dist/cli/fastest-levenshtein-dhRRvrM2.js +120 -0
  555. package/dist/cli/files-DDvAwTko.js +963 -0
  556. package/dist/cli/gen-B344S1Oy.js +304 -0
  557. package/dist/cli/guards-CUlDNYZs.js +8 -0
  558. package/dist/cli/index.d.ts +297 -140
  559. package/dist/cli/index.js +13 -8
  560. package/dist/cli/init-B1dL-RZL.js +393 -0
  561. package/dist/cli/introspect-BPcFi8ow.js +51 -0
  562. package/dist/cli/io-BiPX-_J1.js +37 -0
  563. package/dist/cli/jsonc-C8M0EhHB.js +1 -0
  564. package/dist/cli/keys-jsxCNJdz.js +106 -0
  565. package/dist/cli/metadata-CxBZo4KM.js +138 -0
  566. package/dist/cli/module-migration-YFFdWC5X.js +592 -0
  567. package/dist/cli/moved-D9OT_Uyy.js +152 -0
  568. package/dist/cli/names-D6LrQnOv.js +6 -0
  569. package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
  570. package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
  571. package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
  572. package/dist/cli/parse-DE59XyWt.js +170 -0
  573. package/dist/cli/preset-DmcC4nWE.js +129 -0
  574. package/dist/cli/prompts-Bvg_DBpe.js +1137 -0
  575. package/dist/cli/redact-PjNswZOs.js +35 -0
  576. package/dist/cli/rolldown-runtime-kJ_i4yPo.js +26 -0
  577. package/dist/cli/run-CM_2g6KQ.js +684 -0
  578. package/dist/cli/run-DaHfUUO9.js +1539 -0
  579. package/dist/cli/scaffold-CFdDq36-.js +898 -0
  580. package/dist/cli/scaffold-Dsjr7sOT.js +1 -0
  581. package/dist/cli/seed-DldDdXWO.js +113 -0
  582. package/dist/cli/seed-DtRFysBe.js +1 -0
  583. package/dist/cli/shell-Btv_4Yhe.js +10 -0
  584. package/dist/cli/skills-v34NDb2D.js +121 -0
  585. package/dist/cli/snapshot-DAxLi4hO.js +347 -0
  586. package/dist/cli/source-args-0I9zylYy.js +47 -0
  587. package/dist/cli/spec-CaaSOYZS.js +7501 -0
  588. package/dist/cli/spec-De0cfceR.js +1 -0
  589. package/dist/cli/sql-0I1EQ3JG.js +2 -0
  590. package/dist/cli/sql-DDLWwzh9.js +326 -0
  591. package/dist/cli/stack-status-CRanl-CN.js +456 -0
  592. package/dist/cli/style-2JfIPVMQ.js +29 -0
  593. package/dist/cli/supabase-toml-DjLgBYEo.js +1153 -0
  594. package/dist/cli/sync-DFx-6t5n.js +88 -0
  595. package/dist/cli/topics-GJuIDwlY.js +30 -0
  596. package/dist/cli/trace-VbdO6bcN.js +7 -0
  597. package/dist/cli/typegen--TfvOPLh.js +494 -0
  598. package/dist/cli/typegen-version-BNBPI4Eu.js +9 -0
  599. package/dist/cli/validate-BfWNKvxy.js +7522 -0
  600. package/dist/cli/version-DNRW4DAP.js +4 -0
  601. package/dist/cli/write-BS6F3Yvz.js +180 -0
  602. package/dist/client/index.d.ts +7 -3
  603. package/dist/client/index.js +207 -4
  604. package/dist/client/native/index.d.ts +71 -4
  605. package/dist/client/native/index.js +65 -6
  606. package/dist/client-01MAuqzW.js +137 -0
  607. package/dist/client-B7QVIrJS.d.ts +263 -0
  608. package/dist/client-B9CqzgPO.js +75 -0
  609. package/dist/client-BAcILZOf.d.ts +122 -0
  610. package/dist/client-BOT2KVIp.js +128 -0
  611. package/dist/client-BUGIS__1.js +1051 -0
  612. package/dist/client-BVZtq_rQ.d.ts +34 -0
  613. package/dist/client-BYaOGCOG.js +84 -0
  614. package/dist/client-BfgwocyT.js +155 -0
  615. package/dist/client-BpS8a6Fm.js +51 -0
  616. package/dist/client-BxnLb9bz.d.ts +58 -0
  617. package/dist/client-BzCv4kKE.js +65 -0
  618. package/dist/client-C-2ajnhM.js +89 -0
  619. package/dist/client-C5mUEb2n.js +55 -0
  620. package/dist/client-C9QrWrnt.js +209 -0
  621. package/dist/client-CFdMJ1h9.d.ts +277 -0
  622. package/dist/client-CHmjaI0j.d.ts +103 -0
  623. package/dist/client-CWs3X4g1.js +120 -0
  624. package/dist/client-Cdedx_lw.js +438 -0
  625. package/dist/client-CiGjS6us.js +169 -0
  626. package/dist/client-CilSKXNu.js +288 -0
  627. package/dist/client-ClZ0D-if.d.ts +162 -0
  628. package/dist/client-Cmensu7l.d.ts +419 -0
  629. package/dist/client-Co6BPmvr.d.ts +108 -0
  630. package/dist/client-CoVGPi0c.js +133 -0
  631. package/dist/client-CvITjt-9.js +310 -0
  632. package/dist/client-CzI4QpG3.d.ts +131 -0
  633. package/dist/client-D5CZ2a34.d.ts +455 -0
  634. package/dist/client-DAHsEOVV.d.ts +155 -0
  635. package/dist/client-DG7FwgZD.js +104 -0
  636. package/dist/client-DIrCmOXz.d.ts +157 -0
  637. package/dist/client-DNq8xYb-.js +52 -0
  638. package/dist/client-DdfSIZ3M.d.ts +107 -0
  639. package/dist/client-DjTRlN3a.d.ts +68 -0
  640. package/dist/client-Ezlbskjq.js +60 -0
  641. package/dist/client-LLmgiCwJ.d.ts +135 -0
  642. package/dist/client-Lx3mlvKO.d.ts +100 -0
  643. package/dist/client-PGRk3DGz.js +98 -0
  644. package/dist/client-Tc47rlSe.d.ts +350 -0
  645. package/dist/client-VvY0K3wr.d.ts +59 -0
  646. package/dist/client-WAdEBBrH.d.ts +65 -0
  647. package/dist/client-WHeWTNVL.d.ts +130 -0
  648. package/dist/client-WgrPIHH-.js +213 -0
  649. package/dist/client-ZTtSV3l8.js +40 -0
  650. package/dist/client-b2_GjzzD.js +438 -0
  651. package/dist/client-ckXfdy1k.js +38 -0
  652. package/dist/client-e-hFkLUf.d.ts +34 -0
  653. package/dist/client-hyP_nS5R.d.ts +218 -0
  654. package/dist/client-i8glKhxh.js +67 -0
  655. package/dist/client-iDLLvGR4.d.ts +52 -0
  656. package/dist/client-pxjbgOz6.js +376 -0
  657. package/dist/client-xkSCp9hN.d.ts +101 -0
  658. package/dist/client-ysNShuJZ.d.ts +39 -0
  659. package/dist/clone-dN9XOL1K.js +29 -0
  660. package/dist/cloud-event-5rCEzIgK.d.ts +64 -0
  661. package/dist/cloud-event-CTh9Sr5w.js +60 -0
  662. package/dist/codecs-Bm46sVxr.d.ts +215 -0
  663. package/dist/codecs-YAekuQ08.js +358 -0
  664. package/dist/codegen-DeoSt1mi.d.ts +1571 -0
  665. package/dist/comments-D7sbd0xG.js +230 -0
  666. package/dist/commerce/index.d.ts +211 -0
  667. package/dist/commerce/index.js +517 -0
  668. package/dist/compiler-BVxepAY0.d.ts +14 -0
  669. package/dist/compose-Djntdacs.js +53 -0
  670. package/dist/composite-M6zPs1Xm.js +130 -0
  671. package/dist/composite-djtGy6bz.d.ts +67 -0
  672. package/dist/config/index.d.ts +7 -6
  673. package/dist/config/index.js +7 -4
  674. package/dist/config-BA1K4OPk.js +557 -0
  675. package/dist/config-C4MozTD7.js +3892 -0
  676. package/dist/connector-Cp8CqssJ.d.ts +107 -0
  677. package/dist/connectors-CjD-R2ks.d.ts +141 -0
  678. package/dist/context-1sSWcd7_.d.ts +365 -0
  679. package/dist/context-B8_p3MXo.js +11 -0
  680. package/dist/context-BDDgjoxz.js +41 -0
  681. package/dist/context-C-bHOtoD.js +5 -0
  682. package/dist/context-D6ZMKc2L.js +19 -0
  683. package/dist/context-wDKxSl9x.js +9 -0
  684. package/dist/controller-D6NyNrlZ.js +79 -0
  685. package/dist/controller-D845qKh2.d.ts +46 -0
  686. package/dist/credentials/index.d.ts +15 -5
  687. package/dist/credentials/index.js +17 -17
  688. package/dist/cron-CUaKTjWC.js +145 -0
  689. package/dist/cron-route-CoL-By8Z.js +24 -0
  690. package/dist/csv-CVfXqaAu.js +89 -0
  691. package/dist/csv-D3eKxV1T.d.ts +28 -0
  692. package/dist/define-B2ln373W.js +1896 -0
  693. package/dist/define-DxHHbNEb.d.ts +1005 -0
  694. package/dist/define-block-B6Gjs57G.js +52 -0
  695. package/dist/define-block-CLZMEFeK.d.ts +256 -0
  696. package/dist/delegation-Dt8hMJWu.js +140 -0
  697. package/dist/delivery-B1mKaOen.js +30 -0
  698. package/dist/delivery-BeHgwS3k.d.ts +69 -0
  699. package/dist/documents-CWn2mtYf.d.ts +96 -0
  700. package/dist/edge/index.d.ts +68 -13
  701. package/dist/edge/index.js +75 -43
  702. package/dist/elysia/index.d.ts +1 -1
  703. package/dist/elysia/index.js +2 -2
  704. package/dist/email-BcmbIWOX.d.ts +42 -0
  705. package/dist/embeddings-C2S14foD.d.ts +78 -0
  706. package/dist/embeddings-CVeOoufZ.js +128 -0
  707. package/dist/ended-nIdGCHxk.d.ts +70 -0
  708. package/dist/entitlements-BvU5dLpW.js +45 -0
  709. package/dist/entitlements-CbzCKalR.d.ts +53 -0
  710. package/dist/env/index.d.ts +1 -1
  711. package/dist/env/index.js +12 -5
  712. package/dist/envelope-CHYk5MXU.js +90 -0
  713. package/dist/errors-8i6tSICm.js +301 -0
  714. package/dist/errors-PIpcoe4z.js +44 -0
  715. package/dist/escape-like-AUEPn-C5.d.ts +15 -0
  716. package/dist/eve/index.d.ts +5 -5
  717. package/dist/eve/index.js +11 -17
  718. package/dist/eve-DUF70Vgi.d.ts +151 -0
  719. package/dist/event-calendar-DJXXMJ3x.d.ts +217 -0
  720. package/dist/event-map-Dy2vKHai.js +19 -0
  721. package/dist/events/index.d.ts +4 -4
  722. package/dist/events/index.js +16 -8
  723. package/dist/events-CTreRrgP.d.ts +800 -0
  724. package/dist/events-xbpHkcK9.js +82 -0
  725. package/dist/executor-BBHgjUJu.d.ts +39 -0
  726. package/dist/executor-BINiCFNp.d.ts +95 -0
  727. package/dist/executor-BXSHYyW2.js +735 -0
  728. package/dist/executor-D1kYY5BA.js +206 -0
  729. package/dist/executor-D3K3tycZ.js +147 -0
  730. package/dist/executor-DKrZr3AC.d.ts +174 -0
  731. package/dist/executor-DoE-5iM8.d.ts +272 -0
  732. package/dist/expo/index.d.ts +4 -4
  733. package/dist/expo/index.js +7 -7
  734. package/dist/expo-sqlite/index.d.ts +3 -3
  735. package/dist/expo-sqlite/index.js +2 -2
  736. package/dist/extra-CGQ2_q3S.js +10 -0
  737. package/dist/field-errors-CWXN_h_E.d.ts +113 -0
  738. package/dist/field-errors-DZVRWRkf.js +13 -0
  739. package/dist/field-formats-Cif5gr7c.js +102 -0
  740. package/dist/field-formats-DCvOQlOy.d.ts +39 -0
  741. package/dist/filter-evaluate-C0ULNfS7.js +214 -0
  742. package/dist/filter-evaluate-CjcFq0RT.d.ts +34 -0
  743. package/dist/filter-query-B3lhckKX.js +518 -0
  744. package/dist/filter-query-BKmRYrTE.d.ts +121 -0
  745. package/dist/flags-D_D1jAHB.d.ts +230 -0
  746. package/dist/flags-XAOsdNAc.js +279 -0
  747. package/dist/flags-sdk/index.d.ts +143 -0
  748. package/dist/flags-sdk/index.js +175 -0
  749. package/dist/form-definition-sagoefQr.d.ts +95 -0
  750. package/dist/format-CNwSjXUU.d.ts +70 -0
  751. package/dist/framework-DG5Bv39u.d.ts +26 -0
  752. package/dist/framework-INbjMZX1.js +51 -0
  753. package/dist/function-contract-B4c0XuTU.d.ts +21 -0
  754. package/dist/function-contract-DmkBg19r.js +5 -0
  755. package/dist/gateway-Cup00l0w.d.ts +109 -0
  756. package/dist/gateway-options-ClvvfuuU.d.ts +29 -0
  757. package/dist/gateway-options-DcLcWL5_.js +27 -0
  758. package/dist/graph-Cs28bOlK.js +360 -0
  759. package/dist/groups-CxonH3u5.js +16 -0
  760. package/dist/guards-6F2bCtQR.js +12 -0
  761. package/dist/h3/index.d.ts +7 -3
  762. package/dist/h3/index.js +3 -3
  763. package/dist/h3/v1/index.d.ts +1 -1
  764. package/dist/h3/v1/index.js +2 -2
  765. package/dist/history-GH1HJWQV.js +271 -0
  766. package/dist/hmac-DCud0myt.js +22 -0
  767. package/dist/hono/index.d.ts +33 -14
  768. package/dist/hono/index.js +58 -25
  769. package/dist/http-BF-V0CUF.js +25 -0
  770. package/dist/impersonation-CDeCzZP6.js +62 -0
  771. package/dist/impersonation-D5chOkrO.d.ts +25 -0
  772. package/dist/inbox-3ql4phyr.d.ts +400 -0
  773. package/dist/index-BIi8i6BO.d.ts +97 -0
  774. package/dist/index-BkzNUPId.d.ts +131 -0
  775. package/dist/index-BlqrGvb3.d.ts +227 -0
  776. package/dist/index-Brhm22eL.d.ts +138 -0
  777. package/dist/index-Bvw9r94Q.d.ts +245 -0
  778. package/dist/index-CETRk4YO.d.ts +82 -0
  779. package/dist/index-CrZitvSC.d.ts +258 -0
  780. package/dist/index-DfVXx4Ia.d.ts +202 -0
  781. package/dist/index-DygICr8c.d.ts +206 -0
  782. package/dist/index-Ej8XQ9w9.d.ts +58 -0
  783. package/dist/index-jhqhynmh.d.ts +58 -0
  784. package/dist/index.d.ts +90 -15
  785. package/dist/index.js +16 -14
  786. package/dist/iso4217-A8ev-CNW.js +176 -0
  787. package/dist/json-schema-CpYINXG8.js +548 -0
  788. package/dist/jws-35a8VhFV.d.ts +60 -0
  789. package/dist/jws-milwSg7E.js +191 -0
  790. package/dist/kit-D5S7KNFe.d.ts +66 -0
  791. package/dist/kit-MUK34-ZG.js +104 -0
  792. package/dist/knowledge-BXQ2-V0a.d.ts +187 -0
  793. package/dist/knowledge-CJ_Mm3ic.js +272 -0
  794. package/dist/lint/index.js +9 -9
  795. package/dist/list/index.d.ts +4 -3
  796. package/dist/list/index.js +4 -2
  797. package/dist/list-query-CBXNfJt4.js +549 -0
  798. package/dist/list-query-PvP3pPGQ.d.ts +194 -0
  799. package/dist/live-DwDreq1n.js +239 -0
  800. package/dist/mcp/index.d.ts +67 -20
  801. package/dist/mcp/index.js +220 -135
  802. package/dist/mcp/sdk/index.d.ts +38 -6
  803. package/dist/mcp/sdk/index.js +89 -7
  804. package/dist/message-B0fNJgq8.d.ts +93 -0
  805. package/dist/messages-Cx4ttLJJ.js +493 -0
  806. package/dist/metric-definition-95HFoW1V.d.ts +70 -0
  807. package/dist/metric-definition-BjxVn4R5.js +117 -0
  808. package/dist/mfa-DtflCXEt.d.ts +30 -0
  809. package/dist/model-lUafmeBQ.d.ts +311 -0
  810. package/dist/model-messages-CTu-6kBu.js +206 -0
  811. package/dist/model-messages-D4GZllOD.d.ts +34 -0
  812. package/dist/money-95Rff2vT.js +185 -0
  813. package/dist/money-DFpWzQvk.d.ts +76 -0
  814. package/dist/money-codec-C_-K5ZUU.js +41 -0
  815. package/dist/nestjs/index.d.ts +2 -2
  816. package/dist/nestjs/index.js +2 -2
  817. package/dist/next/index.d.ts +115 -55
  818. package/dist/next/index.js +208 -173
  819. package/dist/node/index.d.ts +2 -2
  820. package/dist/node/index.js +3 -3
  821. package/dist/nuxt/index.d.ts +2 -2
  822. package/dist/nuxt/index.js +3 -2
  823. package/dist/onboarding-BZvLLPaY.js +68 -0
  824. package/dist/openapi/index.d.ts +4 -2
  825. package/dist/openapi/index.js +21 -343
  826. package/dist/operations-C9-UcReN.d.ts +6 -0
  827. package/dist/operations-CsIfMED7.js +29 -0
  828. package/dist/optional-peer-Dx8TaYXw.js +29 -0
  829. package/dist/options-B0FcEKtH.js +5 -0
  830. package/dist/options-B5BU2Yg7.js +11 -0
  831. package/dist/options-B5woz53h.js +5 -0
  832. package/dist/options-B7EJaOX-.js +5 -0
  833. package/dist/options-B9q8CROT.js +9 -0
  834. package/dist/options-BA6jV6py.js +10 -0
  835. package/dist/options-BAW2ZlZ8.js +8 -0
  836. package/dist/options-BMjcVuaI.js +82 -0
  837. package/dist/options-BOOEzor9.js +5 -0
  838. package/dist/options-BQ07tTYr.js +11 -0
  839. package/dist/options-BZsoPJGX.js +5 -0
  840. package/dist/options-BesyRBnM.js +16 -0
  841. package/dist/options-Bf96aVk5.js +10 -0
  842. package/dist/options-BlOPivzq.js +8 -0
  843. package/dist/options-Blg8lAkz.js +9 -0
  844. package/dist/options-Bn4cu0gt.js +5 -0
  845. package/dist/options-BnoJOwXK.js +8 -0
  846. package/dist/options-Bp7sgKvl.js +30 -0
  847. package/dist/options-BqO9GYig.js +311 -0
  848. package/dist/options-BxcFLL1G.js +8 -0
  849. package/dist/options-C1HR4UZd.js +13 -0
  850. package/dist/options-C239TLRF.js +14 -0
  851. package/dist/options-C2HesT4A.js +9 -0
  852. package/dist/options-C3EzJATk.js +10 -0
  853. package/dist/options-C3hZ1fbC.js +10 -0
  854. package/dist/options-C6rEL6U5.js +8 -0
  855. package/dist/options-CAzVf-1T.js +8 -0
  856. package/dist/options-CGKSUFUq.js +5 -0
  857. package/dist/options-CGjGE8xS.js +12 -0
  858. package/dist/options-CK5WiFwG.js +11 -0
  859. package/dist/options-CN7PHkhU.js +8 -0
  860. package/dist/options-CTZNpb2n.js +5 -0
  861. package/dist/options-CUqQ9pm7.js +9 -0
  862. package/dist/options-CVSWgZpY.js +8 -0
  863. package/dist/options-CXFz0xxS.js +8 -0
  864. package/dist/options-CZk_fbbg.js +9 -0
  865. package/dist/options-C_pb1Nd3.js +5 -0
  866. package/dist/options-CbSOj53r.d.ts +52 -0
  867. package/dist/options-ChD15QxJ.js +9 -0
  868. package/dist/options-CkScQRJR.js +12 -0
  869. package/dist/options-CljDnQt2.js +25 -0
  870. package/dist/options-CmraJhd9.js +5 -0
  871. package/dist/options-CoX6VKGb.js +8 -0
  872. package/dist/options-CrC78Tee.js +5 -0
  873. package/dist/options-Ctac2R0Q.js +11 -0
  874. package/dist/options-CyD7OObW.js +17 -0
  875. package/dist/options-D1blDihM.js +9 -0
  876. package/dist/options-D2Gd6VfS.js +8 -0
  877. package/dist/options-D2d1fFuw.js +11 -0
  878. package/dist/options-D40CQzji.js +8 -0
  879. package/dist/options-D7f2VKzj.js +25 -0
  880. package/dist/options-DARkpk2P.js +8 -0
  881. package/dist/options-DCduTMST.js +17 -0
  882. package/dist/options-DDzggjN7.js +8 -0
  883. package/dist/options-DMR68VAC.js +5 -0
  884. package/dist/options-DNKyN5uq.js +20 -0
  885. package/dist/options-DTDxFT6J.js +13 -0
  886. package/dist/options-DWpz3V3F.js +8 -0
  887. package/dist/options-DXqcJyOP.js +10 -0
  888. package/dist/options-DYBQ973I.js +8 -0
  889. package/dist/options-Dh4wu9Ks.js +15 -0
  890. package/dist/options-Dmg1Da9P.js +25 -0
  891. package/dist/options-DsUgamiy.js +5 -0
  892. package/dist/options-EsUh744F.js +13 -0
  893. package/dist/options-Fz6xqu-b.js +5 -0
  894. package/dist/options-HSv8R6h5.js +13 -0
  895. package/dist/options-I8zVkB_y.js +8 -0
  896. package/dist/options-MHhjOoWz.js +5 -0
  897. package/dist/options-MLxMkd5B.js +11 -0
  898. package/dist/options-OJ5zmgr8.js +10 -0
  899. package/dist/options-QKP9FFcK.js +8 -0
  900. package/dist/options-SViK_2x2.js +12 -0
  901. package/dist/options-XgfTctbI.js +5 -0
  902. package/dist/options-_9arpsX9.js +11 -0
  903. package/dist/options-eBPsk4WI.js +11 -0
  904. package/dist/options-kLKILdIu.js +10 -0
  905. package/dist/options-n22NK3PL.js +8 -0
  906. package/dist/options-oeAq4Ho5.js +12 -0
  907. package/dist/options-qU8vgxhO.js +18 -0
  908. package/dist/options-vXMBEWSH.js +5 -0
  909. package/dist/options-wFnK3qWl.js +9 -0
  910. package/dist/options-xVAy3UsV.js +9 -0
  911. package/dist/organizations-Cw7om8uk.js +398 -0
  912. package/dist/orpc/index.d.ts +26 -10
  913. package/dist/orpc/index.js +66 -44
  914. package/dist/otel/index.d.ts +3 -3
  915. package/dist/otel/index.js +42 -7
  916. package/dist/outbox-BTeqjbum.d.ts +181 -0
  917. package/dist/overlay/index.d.ts +233 -0
  918. package/dist/overlay/index.js +554 -0
  919. package/dist/payments-h45bswA-.js +16 -0
  920. package/dist/pg-error-BV_X8Isq.js +26 -0
  921. package/dist/plugin-CDLJRFFg.d.ts +190 -0
  922. package/dist/plugins/actor/index.d.ts +1 -1
  923. package/dist/plugins/actor/index.js +1 -1
  924. package/dist/plugins/rules/index.d.ts +2 -2
  925. package/dist/plugins/rules/index.js +2 -2
  926. package/dist/plugins/soft-delete/index.d.ts +3 -3
  927. package/dist/plugins/soft-delete/index.js +11 -4
  928. package/dist/plugins/tenant/index.d.ts +9 -3
  929. package/dist/plugins/tenant/index.js +17 -3
  930. package/dist/plugins/timestamps/index.d.ts +1 -1
  931. package/dist/plugins/timestamps/index.js +8 -1
  932. package/dist/plugins/validation/index.d.ts +2 -2
  933. package/dist/plugins/validation/index.js +4 -4
  934. package/dist/pool-CwOCsX9e.d.ts +114 -0
  935. package/dist/pool-errors-GMjlCN0d.js +27 -0
  936. package/dist/ports-Ca63W4cW.d.ts +285 -0
  937. package/dist/ports-DAdQyjZz.d.ts +86 -0
  938. package/dist/ports-DGK3KTDH.js +133 -0
  939. package/dist/postgres/index.d.ts +28 -6
  940. package/dist/postgres/index.js +54 -22
  941. package/dist/postgrest-Cw9Bs5gm.d.ts +53 -0
  942. package/dist/powersync/index.d.ts +5 -5
  943. package/dist/powersync/index.js +4 -4
  944. package/dist/powersync/react/index.d.ts +8 -3
  945. package/dist/powersync/react/index.js +11 -3
  946. package/dist/preset/index.d.ts +352 -0
  947. package/dist/preset/index.js +564 -0
  948. package/dist/problem-CEjyhV5T.d.ts +76 -0
  949. package/dist/problem-pIiL3WbE.js +159 -0
  950. package/dist/provider-9gBq9W6k.d.ts +113 -0
  951. package/dist/provider-DKh2xFZb.js +57 -0
  952. package/dist/push-token-D6REHMMw.js +16 -0
  953. package/dist/push-token-asrmi7-6.d.ts +24 -0
  954. package/dist/query/index.d.ts +2 -2
  955. package/dist/query/index.js +1 -1
  956. package/dist/query-Ctz-qKRx.js +303 -0
  957. package/dist/range-DwpWe8e7.js +7 -0
  958. package/dist/range-p5V4rBhZ.d.ts +8 -0
  959. package/dist/rank-keys-DcPMt_Jk.js +60 -0
  960. package/dist/rank-result-DS8IoLup.js +18 -0
  961. package/dist/rank-result-Dngpt2n5.d.ts +14 -0
  962. package/dist/rate-limit--QSiFA6D.js +325 -0
  963. package/dist/rate-limit-BtbddDnE.js +49 -0
  964. package/dist/rate-limit-C88MEAOm.d.ts +41 -0
  965. package/dist/ratelimit-headers-Bsxx0Tj2.js +62 -0
  966. package/dist/react/index.d.ts +9 -9
  967. package/dist/react/index.js +4 -5
  968. package/dist/react/native/index.d.ts +1 -1
  969. package/dist/react/native/index.js +2 -2
  970. package/dist/react/server.d.ts +10 -10
  971. package/dist/react/server.js +4 -4
  972. package/dist/react/session.d.ts +2 -2
  973. package/dist/react-CKXUkwPx.js +410 -0
  974. package/dist/react-controller-Xn-IU44p.js +40 -0
  975. package/dist/react-env-Cc7Vf6eb.js +13 -0
  976. package/dist/react-router/index.d.ts +6 -6
  977. package/dist/react-router/index.js +10 -12
  978. package/dist/read-set-GEb-i0On.js +314 -0
  979. package/dist/realtime/index.d.ts +8 -4
  980. package/dist/realtime/index.js +5 -333
  981. package/dist/realtime-status-D2dw1hOE.js +12 -0
  982. package/dist/realtime-status-DcsO00Gw.d.ts +8 -0
  983. package/dist/refusal-br4Ma9Cf.js +61 -0
  984. package/dist/refusal-oD3ISM9h.d.ts +18 -0
  985. package/dist/replicas-BvIL4_jL.js +94 -0
  986. package/dist/resolve-CAR9oaKW.js +869 -0
  987. package/dist/resolve-w9EpHzuM.d.ts +266 -0
  988. package/dist/resource-B4ka8dDH.d.ts +106 -0
  989. package/dist/resource-C8r5xGqY.js +463 -0
  990. package/dist/resource-DO4gbVi5.js +91 -0
  991. package/dist/resource-execute-D0yQ-8WR.d.ts +12 -0
  992. package/dist/resource-schemas-BJ518zFH.js +79 -0
  993. package/dist/resource-types-D2vEQVXI.d.ts +141 -0
  994. package/dist/resources-BklF-rjz.d.ts +7 -0
  995. package/dist/resources-BlZdLsWQ.js +64 -0
  996. package/dist/respond-C7I8kLK_.d.ts +93 -0
  997. package/dist/respond-DdhZ9Wbn.js +95 -0
  998. package/dist/result-BlgnMB0H.js +128 -0
  999. package/dist/result-Cj3yWhjH.d.ts +298 -0
  1000. package/dist/rrule-zBh3CA1r.js +290 -0
  1001. package/dist/rules-B0-3Iosu.js +261 -0
  1002. package/dist/run-watch-CQRdpy-f.js +53 -0
  1003. package/dist/sales-lines-BAk8In-Z.js +41 -0
  1004. package/dist/sales-lines-C6gafAwg.d.ts +28 -0
  1005. package/dist/sales-shared-DAAGwQwN.d.ts +8 -0
  1006. package/dist/sales-shared-SblIgCgI.js +22 -0
  1007. package/dist/scope-DgWjuXUw.js +90 -0
  1008. package/dist/search-B6h03cAx.js +106 -0
  1009. package/dist/search-BtoWY6n_.js +9 -0
  1010. package/dist/server/index.d.ts +211 -43
  1011. package/dist/server/index.js +296 -19
  1012. package/dist/server-types-OohhIQb2.d.ts +737 -0
  1013. package/dist/session-DiWHtYrO.d.ts +95 -0
  1014. package/dist/settings-BXFn9zpS.js +90 -0
  1015. package/dist/shared-BmMcMoW9.js +89 -0
  1016. package/dist/shared-DbO3Dfms.js +14 -0
  1017. package/dist/shared-as0EG51f.js +60 -0
  1018. package/dist/sign-in-D0xN6E_l.js +360 -0
  1019. package/dist/signatures-B41ApWXA.js +145 -0
  1020. package/dist/signatures-BMdJ7neI.d.ts +43 -0
  1021. package/dist/signers-CXt_wA9S.d.ts +385 -0
  1022. package/dist/signing-keys-Bq9mMCTh.d.ts +90 -0
  1023. package/dist/solid/index.d.ts +9 -18
  1024. package/dist/solid/index.js +4 -9
  1025. package/dist/solid-controller-DLsmrczT.js +33 -0
  1026. package/dist/solid-controller-DqlvYFZa.d.ts +11 -0
  1027. package/dist/solid-start/index.d.ts +8 -12
  1028. package/dist/solid-start/index.js +10 -9
  1029. package/dist/spec/index.d.ts +154 -0
  1030. package/dist/spec/index.js +386 -0
  1031. package/dist/spec-pins-Dqpml2dZ.d.ts +84 -0
  1032. package/dist/spec-pins-S4PymRxp.js +60 -0
  1033. package/dist/sql/index.d.ts +327 -140
  1034. package/dist/sql/index.js +71245 -23282
  1035. package/dist/sql-DJrXG-3Z.js +422 -0
  1036. package/dist/sso-BDva_-4y.js +217 -0
  1037. package/dist/sso-BN0LnMqE.d.ts +131 -0
  1038. package/dist/ssr/index.d.ts +5 -6
  1039. package/dist/ssr/index.js +4 -3
  1040. package/dist/standard-B5fe2gnW.js +25 -0
  1041. package/dist/standard-C3_AAF3g.d.ts +7 -0
  1042. package/dist/stats-D6vkb89f.js +1128 -0
  1043. package/dist/storage/index.d.ts +4 -6
  1044. package/dist/storage/index.js +23 -20
  1045. package/dist/storage-api-Cx-1iWBd.d.ts +582 -0
  1046. package/dist/store-B5qYKsTh.d.ts +68 -0
  1047. package/dist/streams/index.d.ts +5 -5
  1048. package/dist/streams/index.js +6 -5
  1049. package/dist/streams/redis/index.d.ts +1 -1
  1050. package/dist/streams/redis/index.js +6 -12
  1051. package/dist/stripe/index.d.ts +16 -0
  1052. package/dist/stripe/index.js +14 -0
  1053. package/dist/stripe-NVcNOhHy.d.ts +140 -0
  1054. package/dist/stripe-XZrSmDTf.js +32 -0
  1055. package/dist/subject-readers-DiePmaYP.js +46 -0
  1056. package/dist/subject-readers-fxP5wu0s.d.ts +21 -0
  1057. package/dist/subjects-z8VWA_lF.d.ts +69 -0
  1058. package/dist/subscribers-Cq--DL1E.js +34 -0
  1059. package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
  1060. package/dist/supabase-mcp-DomZ-amK.js +28 -0
  1061. package/dist/support-BsKkvA92.js +522 -0
  1062. package/dist/support-view-BbcZR7Io.d.ts +17 -0
  1063. package/dist/svelte/index.d.ts +8 -17
  1064. package/dist/svelte/index.js +3 -3
  1065. package/dist/svelte-controller-CDAujo-_.js +50 -0
  1066. package/dist/svelte-controller-DxxHEHxD.d.ts +10 -0
  1067. package/dist/sveltekit/index.d.ts +11 -13
  1068. package/dist/sveltekit/index.js +12 -14
  1069. package/dist/table-schema-pQlER3jj.js +283 -0
  1070. package/dist/tags-Dw8vKkcI.d.ts +30 -0
  1071. package/dist/tags-PaG0Ns_9.js +84 -0
  1072. package/dist/tanstack-db/index.d.ts +2 -2
  1073. package/dist/tanstack-db/index.js +1 -1
  1074. package/dist/tanstack-db/supabase/index.d.ts +51 -0
  1075. package/dist/tanstack-db/supabase/index.js +268 -0
  1076. package/dist/tanstack-start/index.d.ts +7 -7
  1077. package/dist/tanstack-start/index.js +9 -13
  1078. package/dist/tax-DDZUB_oc.d.ts +273 -0
  1079. package/dist/tax-D_kSCdWU.js +140 -0
  1080. package/dist/tee-Bsisfd7t.js +101 -0
  1081. package/dist/template-DdgYjIZ5.js +123 -0
  1082. package/dist/temporal-CB5Fpo5d.js +79 -0
  1083. package/dist/temporal-required-DqRzr7i0.js +20 -0
  1084. package/dist/tenant-B-fiItlJ.js +27 -0
  1085. package/dist/tenant-DdmVhsff.d.ts +17 -0
  1086. package/dist/tenant-naming-Bsj3Uvap.js +27 -0
  1087. package/dist/testing/index.d.ts +459 -125
  1088. package/dist/testing/index.js +2368 -720
  1089. package/dist/timing-BMCWgpdZ.js +92 -0
  1090. package/dist/topic-ByDz9edV.js +542 -0
  1091. package/dist/topic-cMS7UtM1.d.ts +359 -0
  1092. package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
  1093. package/dist/types-6oiy6rIa.d.ts +205 -0
  1094. package/dist/types-BRTSpOIh.js +5 -0
  1095. package/dist/types-CdP0z5tS.d.ts +564 -0
  1096. package/dist/types-D0W4fnsc.d.ts +162 -0
  1097. package/dist/types-R6syp1el.js +29 -0
  1098. package/dist/types-YfwpIE-d.d.ts +357 -0
  1099. package/dist/types-pNY_UpDs.d.ts +240 -0
  1100. package/dist/types-vaoP9S9_.d.ts +635 -0
  1101. package/dist/undo-CEGIRkPA.js +44 -0
  1102. package/dist/undo-DGo0skyO.d.ts +43 -0
  1103. package/dist/usage-CdlfuS3i.js +250 -0
  1104. package/dist/usage-DM2rzczj.d.ts +202 -0
  1105. package/dist/vault-tOkPLnMB.d.ts +50 -0
  1106. package/dist/vercel-connect/index.d.ts +1 -1
  1107. package/dist/vercel-connect/index.js +6 -12
  1108. package/dist/verify-D63A2ALE.d.ts +142 -0
  1109. package/dist/verify-EQcC3Khp.js +126 -0
  1110. package/dist/version-D87ZteKy.js +4 -0
  1111. package/dist/view-DZ63nqwt.js +105 -0
  1112. package/dist/view-Dv0A949a.d.ts +90 -0
  1113. package/dist/vue/index.d.ts +9 -18
  1114. package/dist/vue/index.js +4 -17
  1115. package/dist/vue-controller-C9tFzqAc.js +32 -0
  1116. package/dist/vue-controller-HPfMTDa2.d.ts +11 -0
  1117. package/dist/watch-DDuWYv0Y.d.ts +84 -0
  1118. package/dist/watch-DT_B3CnJ.js +139 -0
  1119. package/dist/watch-topic-EFpOIIDE.d.ts +28 -0
  1120. package/dist/watch-topic-miuymrli.js +57 -0
  1121. package/dist/wire-DEY0ajW9.js +45 -0
  1122. package/dist/workflow-builder-OrglbXUh.js +681 -0
  1123. package/dist/workflow-sdk/builder/index.d.ts +46 -15
  1124. package/dist/workflow-sdk/builder/index.js +69 -21
  1125. package/dist/workflow-sdk/index.d.ts +75 -2
  1126. package/dist/workflow-sdk/index.js +83 -3
  1127. package/dist/workflow-sdk/world/index.d.ts +51 -20
  1128. package/dist/workflow-sdk/world/index.js +189 -128
  1129. package/dist/workflow-sdk-BZ6qsRlY.js +243 -0
  1130. package/dist/workflow-sdk-q8cLwW1K.d.ts +161 -0
  1131. package/dist/workflow-sdk-world-DPMdBfzn.js +2103 -0
  1132. package/dist/workflows-C-OvZpeg.js +282 -0
  1133. package/dist/workflows-DFQeXDAI.d.ts +243 -0
  1134. package/dist/yjs/index.d.ts +67 -0
  1135. package/dist/yjs/index.js +212 -0
  1136. package/package.json +837 -44
  1137. package/schemas/cli-commands-v1.json +220 -0
  1138. package/schemas/cli-result-v1.json +138 -0
  1139. package/schemas/config-v1.json +4317 -653
  1140. package/schemas/doctor-report-v1.json +27 -1
  1141. package/schemas/snapshot-v2.json +271 -0
  1142. package/schemas/spec-manifest-v1.json +95 -0
  1143. package/skills/better-supabase/SKILL.md +19 -8
  1144. package/skills/better-supabase/references/plugins.md +2 -2
  1145. package/skills/better-supabase/references/troubleshooting.md +20 -20
  1146. package/skills/better-supabase/references/ui-recipes.md +18652 -0
  1147. package/skills/better-supabase-api/SKILL.md +14 -14
  1148. package/skills/better-supabase-api/references/adapters.md +12 -2
  1149. package/skills/better-supabase-api/references/ai.md +4 -4
  1150. package/skills/better-supabase-api/references/expo.md +7 -4
  1151. package/skills/better-supabase-api/references/powersync.md +2 -1
  1152. package/skills/better-supabase-api/references/streams-credentials.md +8 -5
  1153. package/skills/better-supabase-auth/SKILL.md +18 -11
  1154. package/skills/better-supabase-auth/references/authorization-providers.md +5 -5
  1155. package/skills/better-supabase-testing/SKILL.md +2 -2
  1156. package/testing/act-cases.json +370 -0
  1157. package/dist/access-sql-B0dF-SoF.js +0 -181
  1158. package/dist/actor-CQTlc1Hh.d.ts +0 -43
  1159. package/dist/adapter-iKgjHVPx.js +0 -1190
  1160. package/dist/agents-CVHGd7It.d.ts +0 -94
  1161. package/dist/ai-cache-CBWs1W0k.js +0 -80
  1162. package/dist/ai-cache-DaDu_G5L.d.ts +0 -64
  1163. package/dist/ai-chat-7amvXjmQ.d.ts +0 -590
  1164. package/dist/ai-chat-B24UI962.js +0 -743
  1165. package/dist/ai-files-CSPNswUY.js +0 -319
  1166. package/dist/ai-tasks-Cd1HMFvB.d.ts +0 -131
  1167. package/dist/announcements-CiyOs-xP.js +0 -107
  1168. package/dist/announcements-ZRGnScWI.d.ts +0 -72
  1169. package/dist/api-keys-CIjghYjV.d.ts +0 -156
  1170. package/dist/assistant-DwdpDH1q.d.ts +0 -147
  1171. package/dist/attributes-5dYul0u0.js +0 -13
  1172. package/dist/authorization-BFCqamMs.d.ts +0 -172
  1173. package/dist/base64-D2gsioCY.js +0 -42
  1174. package/dist/before-route-CnR0C0Jr.js +0 -30
  1175. package/dist/bind-Bu_ZNa3W.d.ts +0 -62
  1176. package/dist/bind-l4kAvYSv.js +0 -97
  1177. package/dist/block-events-CrT8r7Fe.js +0 -76
  1178. package/dist/block-fields-GFkxl4dP.js +0 -49
  1179. package/dist/block-fields-SJ6fEf3o.d.ts +0 -31
  1180. package/dist/block-helpers-CKtbFcRv.d.ts +0 -37
  1181. package/dist/block-helpers-DWHxHsEQ.js +0 -190
  1182. package/dist/block-hooks-BmjMyXTa.js +0 -114
  1183. package/dist/block-hooks-plbZ0AbJ.d.ts +0 -107
  1184. package/dist/block-transport-BLr-ZgLc.js +0 -59
  1185. package/dist/block-transport-DvaoPuZ9.d.ts +0 -48
  1186. package/dist/bucket-Cl46E3jS.d.ts +0 -347
  1187. package/dist/build-BXIzE6Xv.js +0 -689
  1188. package/dist/channel-_2Mx1Oyu.d.ts +0 -70
  1189. package/dist/channels-CkgQ_X60.js +0 -114
  1190. package/dist/claims-DDBQT6BK.js +0 -61
  1191. package/dist/cli/bin.d.ts +0 -1
  1192. package/dist/cli/codemod-Bl_tQpHn.js +0 -491
  1193. package/dist/cli/command-CK14fP91.js +0 -502
  1194. package/dist/cli/config-B9HkL8nF.js +0 -2
  1195. package/dist/cli/config-DU7EJImt.js +0 -49
  1196. package/dist/cli/config-NiPxAmUF.js +0 -1077
  1197. package/dist/cli/db-DOBPt660.js +0 -52
  1198. package/dist/cli/diff-SjkO5rNr.js +0 -752
  1199. package/dist/cli/dist-DBPdlPYK.js +0 -1112
  1200. package/dist/cli/dist-DRAVaE6w.js +0 -842
  1201. package/dist/cli/dist-DreZ24Sz.js +0 -129
  1202. package/dist/cli/doctor-DJk0aeBi.js +0 -3591
  1203. package/dist/cli/env-CJLbUVPB.js +0 -108
  1204. package/dist/cli/env-qXgyMV6r.js +0 -511
  1205. package/dist/cli/errors-4v4DTtda.js +0 -56
  1206. package/dist/cli/fastest-levenshtein-CFN-lNDv.js +0 -120
  1207. package/dist/cli/gen-CCMc39Dx.js +0 -3100
  1208. package/dist/cli/gen-DRmzPI75.js +0 -2
  1209. package/dist/cli/init-BHuEQrQK.js +0 -765
  1210. package/dist/cli/introspect-DzR2nyQb.js +0 -81
  1211. package/dist/cli/io-DI1mTdSA.js +0 -33
  1212. package/dist/cli/jsonc-BUniUpOk.js +0 -2
  1213. package/dist/cli/keys-BGCnnb-s.js +0 -85
  1214. package/dist/cli/openapi-BlRJ18s3.js +0 -66
  1215. package/dist/cli/project-DZRaBaY7.js +0 -75
  1216. package/dist/cli/prompts-BNcNfAve.js +0 -1142
  1217. package/dist/cli/prompts-BTYQGunc.js +0 -2
  1218. package/dist/cli/read-sets-CETOSFx4.js +0 -223
  1219. package/dist/cli/rolldown-runtime-BPOCksWG.js +0 -24
  1220. package/dist/cli/run-BqDPh9UH.js +0 -361
  1221. package/dist/cli/seed-DQzqT7LP.js +0 -100
  1222. package/dist/cli/skills-QQs4q68J.js +0 -138
  1223. package/dist/cli/sql-B8csQPyn.js +0 -495
  1224. package/dist/cli/sql-layout-D6cphHT3.js +0 -69
  1225. package/dist/cli/style-C0NFdJRL.js +0 -29
  1226. package/dist/cli/supabase-toml-B-bIukQF.js +0 -1095
  1227. package/dist/cli/typegen-version-DeFbtzYI.js +0 -8
  1228. package/dist/cli/version-59gcepIG.js +0 -4
  1229. package/dist/client-CI0Z2zWX.js +0 -277
  1230. package/dist/clone-BfgmLU90.js +0 -21
  1231. package/dist/cloud-event-BnmD5fb9.js +0 -46
  1232. package/dist/cloud-event-C1JCc1bH.d.ts +0 -50
  1233. package/dist/compiler-DY_wkj4R.d.ts +0 -14
  1234. package/dist/compose-BIBNgAnq.js +0 -53
  1235. package/dist/composite--yqry7uW.d.ts +0 -146
  1236. package/dist/composite-DXVUibdi.js +0 -130
  1237. package/dist/config-D44Y7PAv.d.ts +0 -984
  1238. package/dist/config-Dn7F5k9A.js +0 -202
  1239. package/dist/connector-Dv8kK0MO.d.ts +0 -107
  1240. package/dist/connectors-CrpknU0P.d.ts +0 -120
  1241. package/dist/context-BCrWe7ow.d.ts +0 -237
  1242. package/dist/cron-DVPUg5k3.js +0 -145
  1243. package/dist/csv-DCK-PT1n.js +0 -25
  1244. package/dist/define-B-TVjC25.js +0 -1915
  1245. package/dist/define-CJJkkr1-.d.ts +0 -980
  1246. package/dist/embeddings-4ZvFzjsU.js +0 -127
  1247. package/dist/embeddings-C9KGQnXt.d.ts +0 -68
  1248. package/dist/ended-XjeGQ5XW.d.ts +0 -63
  1249. package/dist/entitlements-BKSVGtrG.d.ts +0 -51
  1250. package/dist/entitlements-DRl6ZJUm.js +0 -24
  1251. package/dist/envelope-DqnYGRw7.js +0 -47
  1252. package/dist/errors-B11Duf73.js +0 -266
  1253. package/dist/errors-DLjJHPLK.js +0 -44
  1254. package/dist/escape-like-ImTK0ps_.d.ts +0 -15
  1255. package/dist/eve-gT2Fpjut.d.ts +0 -151
  1256. package/dist/events-DWDhx77e.d.ts +0 -549
  1257. package/dist/executor-BVBFM86G.d.ts +0 -36
  1258. package/dist/executor-Bq28caBo.js +0 -718
  1259. package/dist/executor-C-R4pucm.js +0 -83
  1260. package/dist/executor-CaWigTyR.d.ts +0 -148
  1261. package/dist/executor-DbvExCFC.d.ts +0 -30
  1262. package/dist/executor-De1Of3m3.js +0 -523
  1263. package/dist/executor-DvsBbNBS.d.ts +0 -261
  1264. package/dist/field-errors-BFOa7WhB.d.ts +0 -99
  1265. package/dist/field-errors-VF1yb8yI.js +0 -13
  1266. package/dist/framework-BmzgK32X.d.ts +0 -25
  1267. package/dist/framework-a7aRCIqv.js +0 -51
  1268. package/dist/gateway-C1ssRHnf.d.ts +0 -130
  1269. package/dist/graph-BGyLLFLX.js +0 -265
  1270. package/dist/guards-BnzDvFrz.js +0 -10
  1271. package/dist/history-BZih6SFP.js +0 -64
  1272. package/dist/hooks-1BTCJsiw.js +0 -309
  1273. package/dist/impersonation-DcqaTBHx.js +0 -148
  1274. package/dist/inbox-i7E1ppo6.d.ts +0 -384
  1275. package/dist/index-ACiNPN4Z.d.ts +0 -74
  1276. package/dist/index-Bepi-Hgg.d.ts +0 -206
  1277. package/dist/index-BkWT_uBO.d.ts +0 -51
  1278. package/dist/index-Bxih3l0u.d.ts +0 -81
  1279. package/dist/index-CLg87OBW.d.ts +0 -76
  1280. package/dist/index-CaxrMD1A.d.ts +0 -1
  1281. package/dist/index-CdZKQF98.d.ts +0 -138
  1282. package/dist/index-CewnYSpv.d.ts +0 -267
  1283. package/dist/index-ClmjK_o-.d.ts +0 -55
  1284. package/dist/index-D48jVS-N.d.ts +0 -246
  1285. package/dist/index-DQh4VCc9.d.ts +0 -98
  1286. package/dist/index-DunNRdnT.d.ts +0 -300
  1287. package/dist/json-schema-CvER4kgT.js +0 -502
  1288. package/dist/keys-4MnkWTTh.js +0 -35
  1289. package/dist/kit-CkNzZUqv.d.ts +0 -60
  1290. package/dist/kit-Fm-Fv7q5.js +0 -78
  1291. package/dist/knowledge-BXBbT0Tr.d.ts +0 -176
  1292. package/dist/knowledge-CDmiMLew.js +0 -255
  1293. package/dist/list-query-BRt-zDF7.d.ts +0 -164
  1294. package/dist/list-query-gl808ac1.js +0 -459
  1295. package/dist/live-CTAZQkwl.js +0 -257
  1296. package/dist/message-CaKlqdsX.js +0 -219
  1297. package/dist/message-CfDoR0Y6.d.ts +0 -94
  1298. package/dist/messages-B9-5887d.js +0 -715
  1299. package/dist/messages-DYP0sUTe.d.ts +0 -59
  1300. package/dist/mfa-Daak8ukG.d.ts +0 -54
  1301. package/dist/modules-DpPwzC7E.d.ts +0 -192
  1302. package/dist/modules-dxrVK3ID.js +0 -228
  1303. package/dist/onboarding-BZGHYJks.d.ts +0 -62
  1304. package/dist/outbox-Cq7pPYvl.d.ts +0 -161
  1305. package/dist/path-Cv__-OTj.d.ts +0 -17
  1306. package/dist/plugin-FGY8UhYm.d.ts +0 -151
  1307. package/dist/pool-CAu2nLrL.d.ts +0 -89
  1308. package/dist/postgrest-BLVdEnfe.d.ts +0 -53
  1309. package/dist/problem-BreOl8b8.js +0 -115
  1310. package/dist/problem-DD8LZFjc.d.ts +0 -67
  1311. package/dist/provider-D-UEMvSD.d.ts +0 -113
  1312. package/dist/provider-Di3sRutW.js +0 -57
  1313. package/dist/query-BQ-NaZon.js +0 -303
  1314. package/dist/queue-CLJurhdy.d.ts +0 -427
  1315. package/dist/react-F80mF4-t.js +0 -409
  1316. package/dist/react-topic-seAWjL3_.js +0 -38
  1317. package/dist/read-set-DuKWC9Mj.js +0 -314
  1318. package/dist/refusal-CeJWxmkH.js +0 -61
  1319. package/dist/refusal-DhSU2Vvr.d.ts +0 -15
  1320. package/dist/replicas-CwrYp5Zj.js +0 -94
  1321. package/dist/resolve-ChTYeTEl.d.ts +0 -169
  1322. package/dist/resolve-tJZY3FEa.js +0 -697
  1323. package/dist/resource-BsvzCMlX.js +0 -212
  1324. package/dist/resource-IPS5xi9q.d.ts +0 -74
  1325. package/dist/respond-BUgsXNgk.js +0 -91
  1326. package/dist/respond-DprrgyXX.d.ts +0 -93
  1327. package/dist/result-D7y2fT87.d.ts +0 -282
  1328. package/dist/result-DzUbqgdW.js +0 -128
  1329. package/dist/scope-CDHcS7dE.js +0 -90
  1330. package/dist/search-CUWCRYKL.js +0 -9
  1331. package/dist/server-Bh0EVSwU.d.ts +0 -558
  1332. package/dist/session-ChiXDZdZ.d.ts +0 -72
  1333. package/dist/shared-CBxosKK3.js +0 -75
  1334. package/dist/shared-CxWmcyqB.js +0 -73
  1335. package/dist/sign-in-Cb1mwv6X.js +0 -86
  1336. package/dist/signers-4y62_VIi.d.ts +0 -166
  1337. package/dist/spec-pins--j6mTok4.js +0 -27
  1338. package/dist/spec-pins-C89s6DyW.d.ts +0 -27
  1339. package/dist/standard-BK0cqJ7y.js +0 -25
  1340. package/dist/standard-CYsm7xpT.d.ts +0 -7
  1341. package/dist/stats-D_AD9GGu.js +0 -1123
  1342. package/dist/store-CGjgWu5n.d.ts +0 -68
  1343. package/dist/stripe-BMj5LtsT.js +0 -38
  1344. package/dist/stripe-D04h-QBT.d.ts +0 -136
  1345. package/dist/support-ig_K4PvS.js +0 -314
  1346. package/dist/support-view-CVOJJLpc.d.ts +0 -17
  1347. package/dist/tags-Cx-LnIQP.d.ts +0 -30
  1348. package/dist/tee-CoEppCER.js +0 -101
  1349. package/dist/template--jDkl3UP.js +0 -114
  1350. package/dist/template-CwO38Do8.d.ts +0 -6
  1351. package/dist/temporal-BJGitm-h.js +0 -79
  1352. package/dist/temporal-required-BVvW7SYJ.js +0 -20
  1353. package/dist/tenant-BxNFk9bx.d.ts +0 -17
  1354. package/dist/tenant-I1TEZ_BX.js +0 -27
  1355. package/dist/timing-CyTQPubY.js +0 -92
  1356. package/dist/types-6BdhkmZe.d.ts +0 -340
  1357. package/dist/types-6cYK9pbJ.js +0 -29
  1358. package/dist/types-6rocye-y.d.ts +0 -156
  1359. package/dist/types-AYOvcyep.d.ts +0 -359
  1360. package/dist/types-C05bxW-W.d.ts +0 -220
  1361. package/dist/types-DGs5L0VN.d.ts +0 -192
  1362. package/dist/usage-CrvrL2vw.d.ts +0 -177
  1363. package/dist/vault-wlbBhqm7.d.ts +0 -50
  1364. package/dist/verify-DL41hbvY.js +0 -232
  1365. package/dist/verify-DPuWngD4.d.ts +0 -172
  1366. package/dist/version-C6OfRAIn.js +0 -4
  1367. package/dist/view-BeFcRV6G.js +0 -99
  1368. package/dist/view-CF7ihnkg.d.ts +0 -87
  1369. package/dist/watch-DI34G86j.d.ts +0 -60
  1370. package/dist/watch-Xuxrvxq-.js +0 -122
  1371. package/dist/wire-DtZQ4sdE.js +0 -45
  1372. package/dist/workflow-builder-DJ1oHn8g.js +0 -398
  1373. package/dist/workflow-sdk-B3yLD6Br.d.ts +0 -98
  1374. package/dist/workflow-sdk-C2WJ_G2O.js +0 -173
  1375. package/dist/workflow-sdk-world-D-prir6O.js +0 -1397
  1376. package/dist/workflows-B0j9WKPu.d.ts +0 -185
  1377. package/dist/workflows-wu1WWBn7.js +0 -216
@@ -1,16 +1,23 @@
1
1
  import { t as DbException } from "../../db-exception-CnWcYPxL.js";
2
- import { n as dbError } from "../../errors-B11Duf73.js";
3
- import { s as nowInstant } from "../../temporal-BJGitm-h.js";
4
- import { t as temporal } from "../../temporal-required-BVvW7SYJ.js";
5
- import { a as ok, r as err, s as toDbError, t as AsyncResult } from "../../result-DzUbqgdW.js";
2
+ import { n as dbError } from "../../errors-8i6tSICm.js";
3
+ import { s as nowInstant } from "../../temporal-CB5Fpo5d.js";
4
+ import { t as temporal } from "../../temporal-required-DqRzr7i0.js";
5
+ import { a as ok, r as err, s as toDbError, t as AsyncResult } from "../../result-BlgnMB0H.js";
6
+ import { n as isRecord } from "../../guards-6F2bCtQR.js";
6
7
  import { n as allTenantsContext } from "../../plugin-tfXW1-qO.js";
7
- import { n as validate } from "../../standard-BK0cqJ7y.js";
8
- import { a as problemResponse } from "../../problem-BreOl8b8.js";
8
+ import { n as validate } from "../../standard-B5fe2gnW.js";
9
+ import { o as problemResponse } from "../../problem-pIiL3WbE.js";
9
10
  import { o as tenantFrom, s as tenantPathsFor } from "../../claims-PqzCxaTD.js";
10
- import { n as nextCronRun, t as assertCron } from "../../cron-DVPUg5k3.js";
11
- import { A as workerId, C as run, E as sleep, c as errorText, d as isRecord, g as pageOf, i as blockCall, k as toInstant, n as applyTemporal, v as readBodyCapped, w as seconds } from "../../block-helpers-DWHxHsEQ.js";
12
- import { d as verifyWebhook, l as verifySharedSecret } from "../../verify-DL41hbvY.js";
13
- import { n as withContext, t as unwrap } from "../../envelope-DqnYGRw7.js";
11
+ import { t as cronRoute } from "../../cron-route-CoL-By8Z.js";
12
+ import { i as sqlTransport, r as rpcTransport, t as dbTransport } from "../../block-transport-G4t1umrR.js";
13
+ import { M as seconds, P as sleep, R as toInstant, f as errorText, g as leaseHeartbeat, j as run, n as applyTemporal, o as blockCall, s as budget, w as pageOf } from "../../block-helpers-CfG_MvDR.js";
14
+ import { n as periodSeconds } from "../../ratelimit-headers-Bsxx0Tj2.js";
15
+ import { n as nextCronRun, t as assertCron } from "../../cron-CUaKTjWC.js";
16
+ import { r as withBlockHooks } from "../../block-hooks-BsXncUlZ.js";
17
+ import { a as purgeWebhookInbox, i as createWebhookInbox, r as rateLimited, t as createRateLimit } from "../../rate-limit--QSiFA6D.js";
18
+ import { r as wrapPayload, t as unwrap } from "../../envelope-CHYk5MXU.js";
19
+ import { n as defineBlock } from "../../define-block-B6Gjs57G.js";
20
+ import { n as rateLimitSqlOptions, r as webhookInboxSqlOptions, t as jobsSqlOptions } from "../../options-OJ5zmgr8.js";
14
21
  //#region src/blocks/jobs/dev.ts
15
22
  function devDrainSecret(env, name = "CRON_SECRET") {
16
23
  const current = env[name];
@@ -55,364 +62,6 @@ function devDrain(options) {
55
62
  };
56
63
  }
57
64
  //#endregion
58
- //#region src/blocks/jobs/jobs.ts
59
- async function sha256(text) {
60
- const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(text));
61
- return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
62
- }
63
- const AUTH_COOKIE = /^sb-.+-auth-token(?:\.\d+)?$/;
64
- /** A hash of the credentials the request carries, or `''` without any. */
65
- async function callerScope(request) {
66
- const authorization = request.headers.get("authorization");
67
- const cookies = (request.headers.get("cookie") ?? "").split(";").map((pair) => pair.trim()).filter((pair) => AUTH_COOKIE.test(pair.split("=", 1)[0] ?? "")).sort();
68
- const credential = authorization ?? cookies.join(";");
69
- return credential === "" ? "" : `caller:${await sha256(credential)}`;
70
- }
71
- /** HTTP idempotency keys (IETF `Idempotency-Key` header) over the `idempotency` SQL module. */
72
- function createIdempotency(sql, options = {}) {
73
- applyTemporal(options);
74
- const headerName = options.header ?? "idempotency-key";
75
- const format = options.problem;
76
- const ttl = seconds(options.ttl ?? "24 hours");
77
- const lock = seconds(options.lock ?? "1 minute");
78
- const begin = (key, fingerprint, scope = "") => run(async () => {
79
- const [row] = await sql.queryRaw("select * from better_supabase.begin_idempotent($1, $2, $3, $4::interval, $5::interval)", [
80
- scope,
81
- key,
82
- fingerprint,
83
- ttl,
84
- lock
85
- ]);
86
- return {
87
- state: row.state,
88
- status: row.status_code,
89
- body: row.response,
90
- holder: row.holder ?? void 0
91
- };
92
- });
93
- const complete = (key, holder, status, body, scope = "") => run(async () => {
94
- const [row] = await sql.queryRaw("select better_supabase.complete_idempotent($1, $2, $3, $4, $5) as done", [
95
- scope,
96
- key,
97
- holder,
98
- status,
99
- JSON.stringify(body)
100
- ]);
101
- return row?.done === true;
102
- });
103
- const release = (key, holder, scope = "") => run(async () => {
104
- const [row] = await sql.queryRaw("select better_supabase.release_idempotent($1, $2, $3) as done", [
105
- scope,
106
- key,
107
- holder
108
- ]);
109
- return row?.done === true;
110
- });
111
- return {
112
- begin,
113
- complete,
114
- release,
115
- async handle(request, handler) {
116
- const key = request.headers.get(headerName);
117
- const instance = new URL(request.url).pathname;
118
- if (!key) return options.required ? problemResponse(dbError("invalid_request", `The ${headerName} header is required`, { code: "IDEMPOTENCY_KEY_MISSING" }), {
119
- instance,
120
- format
121
- }) : handler(request);
122
- if (key.length > 255) return problemResponse(dbError("invalid_request", `The ${headerName} header is too long`, { code: "IDEMPOTENCY_KEY_INVALID" }), {
123
- instance,
124
- format
125
- });
126
- const scope = typeof options.scope === "function" ? options.scope(request) : options.scope ?? await callerScope(request);
127
- const body = await request.clone().text();
128
- const fingerprint = await sha256(`${request.method} ${instance}\n${body}`);
129
- const started = await begin(key, fingerprint, scope);
130
- if (!started.ok) return problemResponse(started.error, {
131
- instance,
132
- format
133
- });
134
- const { state, holder = "" } = started.data;
135
- switch (state) {
136
- case "replay": {
137
- const stored = started.data.body;
138
- return new Response(stored.body, {
139
- status: started.data.status ?? 200,
140
- headers: {
141
- ...stored.contentType ? { "content-type": stored.contentType } : {},
142
- "idempotency-replayed": "true"
143
- }
144
- });
145
- }
146
- case "running": return problemResponse(dbError("conflict", "A request with this idempotency key is still running", { code: "IDEMPOTENCY_KEY_IN_USE" }), {
147
- instance,
148
- format,
149
- headers: { "retry-after": "1" }
150
- });
151
- case "mismatch": return problemResponse(dbError("validation", "This idempotency key was used for a different request", {
152
- code: "IDEMPOTENCY_KEY_REUSED",
153
- issues: [{
154
- message: "Use a new key for a new request",
155
- path: [headerName]
156
- }]
157
- }), {
158
- instance,
159
- format
160
- });
161
- case "started": break;
162
- default: throw new TypeError(`Unknown idempotency state ${String(state)}`);
163
- }
164
- let response;
165
- try {
166
- response = await handler(request);
167
- } catch (cause) {
168
- await release(key, holder, scope);
169
- throw cause;
170
- }
171
- if (response.status >= 500) {
172
- await release(key, holder, scope);
173
- return response;
174
- }
175
- const stored = {
176
- body: await response.clone().text(),
177
- contentType: response.headers.get("content-type")
178
- };
179
- await complete(key, holder, response.status, stored, scope);
180
- return response;
181
- }
182
- };
183
- }
184
- /**
185
- * Runs `fn` while holding the lease on `key`, one holder at a time, and
186
- * releases it afterwards, also when `fn` throws. `{ acquired: false }` while
187
- * another holder has it. A lease that expires mid-run is taken by the next
188
- * caller; call `lease.extend()` for long work.
189
- */
190
- function withLease(sql, key, fn, options = {}) {
191
- const scope = options.scope ?? "";
192
- const ttl = options.seconds ?? 60;
193
- return run(async () => {
194
- const [row] = await sql.queryRaw("select better_supabase.acquire_lease($1, $2, $3) as holder", [
195
- key,
196
- ttl,
197
- scope
198
- ]);
199
- const holder = row?.holder;
200
- if (!holder) return { acquired: false };
201
- const lease = {
202
- holder,
203
- extend: (next = ttl) => run(async () => {
204
- const [extended] = await sql.queryRaw("select better_supabase.extend_lease($1, $2, $3, $4) as done", [
205
- key,
206
- holder,
207
- next,
208
- scope
209
- ]);
210
- return extended?.done === true;
211
- })
212
- };
213
- try {
214
- return {
215
- acquired: true,
216
- value: await fn(lease)
217
- };
218
- } finally {
219
- await sql.queryRaw("select better_supabase.release_lease($1, $2, $3)", [
220
- key,
221
- holder,
222
- scope
223
- ]);
224
- }
225
- });
226
- }
227
- function defaultType(payload) {
228
- if (typeof payload !== "object" || payload === null) return null;
229
- const type = payload.type;
230
- return typeof type === "string" ? type : null;
231
- }
232
- /** Store-then-process webhooks: acknowledge fast, process with retries, never twice. */
233
- function createWebhookInbox(sql, options) {
234
- applyTemporal(options);
235
- const worker = options.worker ?? workerId();
236
- const format = options.problem;
237
- const maxAttempts = options.maxAttempts ?? 8;
238
- if (!Number.isInteger(maxAttempts) || maxAttempts < 1) throw new TypeError(`createWebhookInbox maxAttempts must be a positive integer, not ${String(maxAttempts)}`);
239
- const maxBodyBytes = options.maxBodyBytes ?? 1048576;
240
- if (!Number.isInteger(maxBodyBytes) || maxBodyBytes < 1) throw new TypeError(`createWebhookInbox maxBodyBytes must be a positive integer, not ${String(maxBodyBytes)}`);
241
- const verified = async (request, body) => {
242
- if (options.verify) return options.verify(request, body);
243
- const result = await verifyWebhook({
244
- headers: request.headers,
245
- body
246
- }, options.secrets ?? []);
247
- return result.ok ? ok({
248
- id: result.data.id,
249
- payload: result.data.payload
250
- }) : result;
251
- };
252
- const save = (event) => run(async () => {
253
- const [row] = await sql.queryRaw("select * from better_supabase.receive_webhook($1, $2, $3, $4, $5, $6, $7)", [
254
- options.source,
255
- event.id,
256
- event.type === void 0 ? (options.typeOf ?? defaultType)(event.payload) : event.type,
257
- JSON.stringify(event.payload),
258
- JSON.stringify(event.headers ?? {}),
259
- (event.tenant === void 0 ? options.tenantOf?.(event.payload) : event.tenant) ?? null,
260
- maxAttempts
261
- ]);
262
- return {
263
- id: Number(row.id),
264
- duplicate: row.duplicate
265
- };
266
- });
267
- return {
268
- store: save,
269
- list: (listOptions) => run(async () => {
270
- return (await sql.queryRaw("select * from better_supabase.list_webhooks($1, $2, $3, $4)", [
271
- listOptions.tenant,
272
- options.source,
273
- listOptions.status ?? null,
274
- listOptions.limit ?? 100
275
- ])).map((row) => ({
276
- id: Number(row.id),
277
- messageId: row.message_id,
278
- type: row.event_type,
279
- status: row.status ?? "pending",
280
- attempts: row.attempts,
281
- maxAttempts: row.max_attempts ?? maxAttempts,
282
- lastError: row.last_error ?? null,
283
- tenant: row.tenant ?? null,
284
- receivedAt: toInstant(row.received_at),
285
- processedAt: row.processed_at === null || row.processed_at === void 0 ? null : toInstant(row.processed_at)
286
- }));
287
- }),
288
- purge: (purgeOptions = {}) => run(async () => {
289
- const [row] = await sql.queryRaw("select better_supabase.purge_webhooks($1::interval, $2, $3, $4) as purged", [
290
- seconds(purgeOptions.olderThan ?? "30 days"),
291
- purgeOptions.includeDead ?? false,
292
- purgeOptions.batch ?? 1e4,
293
- purgeOptions.tenant ?? null
294
- ]);
295
- return row?.purged ?? 0;
296
- }),
297
- async receive(request) {
298
- const instance = new URL(request.url).pathname;
299
- if (request.method !== "POST") return new Response(null, {
300
- status: 405,
301
- headers: { allow: "POST" }
302
- });
303
- if (!options.verify && !options.secrets) throw new TypeError(`The inbox for "${options.source}" has no \`secrets\` or \`verify\`, so it only stores events through \`store\``);
304
- const body = await readBodyCapped(request.clone(), maxBodyBytes);
305
- if (body === void 0) return problemResponse({
306
- ...dbError("invalid_input", "The body is too large", { code: "WEBHOOK_TOO_LARGE" }),
307
- status: 413
308
- }, {
309
- instance,
310
- format
311
- });
312
- const message = await verified(request, body);
313
- if (!message.ok) return problemResponse(message.error, {
314
- instance,
315
- format
316
- });
317
- const headers = Object.fromEntries((options.keepHeaders ?? []).flatMap((name) => {
318
- const value = request.headers.get(name);
319
- return value === null ? [] : [[name.toLowerCase(), value]];
320
- }));
321
- const stored = await save({
322
- id: message.data.id,
323
- payload: message.data.payload,
324
- headers,
325
- ...message.data.tenant === void 0 ? {} : { tenant: message.data.tenant }
326
- });
327
- if (!stored.ok) return problemResponse(stored.error, {
328
- instance,
329
- format
330
- });
331
- return Response.json(stored.data, { status: stored.data.duplicate ? 200 : 202 });
332
- },
333
- async process(handler, processOptions = {}) {
334
- let succeeded = 0;
335
- let failed = 0;
336
- const lease = seconds(processOptions.lease ?? 300);
337
- const deadline = processOptions.budgetMs === void 0 ? void 0 : Date.now() + processOptions.budgetMs;
338
- for (;;) {
339
- if (deadline !== void 0 && Date.now() >= deadline) return {
340
- succeeded,
341
- failed
342
- };
343
- const rows = await sql.queryRaw("select * from better_supabase.claim_webhooks($1, $2, $3, $4::interval)", [
344
- options.source,
345
- worker,
346
- processOptions.batch ?? 10,
347
- lease
348
- ]);
349
- if (rows.length === 0) return {
350
- succeeded,
351
- failed
352
- };
353
- for (const row of rows) {
354
- const id = Number(row.id);
355
- const attempt = row.attempts;
356
- const extend = async () => {
357
- const [held] = await sql.queryRaw("select better_supabase.extend_webhook($1, $2, $3, $4::interval) as lease", [
358
- id,
359
- worker,
360
- attempt,
361
- lease
362
- ]);
363
- return held?.lease ?? void 0;
364
- };
365
- const leaseSeconds = await extend();
366
- if (leaseSeconds === void 0) continue;
367
- const message = {
368
- id,
369
- source: row.source,
370
- messageId: row.message_id,
371
- type: row.event_type,
372
- payload: row.payload,
373
- headers: row.headers,
374
- attempts: row.attempts,
375
- maxAttempts: row.max_attempts ?? maxAttempts,
376
- receivedAt: toInstant(row.received_at),
377
- tenant: row.tenant ?? null,
378
- progress: row.checkpoint ?? {},
379
- async checkpoint(fields) {
380
- const [saved] = await sql.queryRaw("select better_supabase.checkpoint_webhook($1, $2, $3, $4) as saved", [
381
- id,
382
- worker,
383
- JSON.stringify(fields),
384
- attempt
385
- ]);
386
- return saved?.saved ?? false;
387
- }
388
- };
389
- const heartbeat = setInterval(() => void extend().catch(() => void 0), Math.max(1e3, leaseSeconds * 500));
390
- try {
391
- const outcome = await handler(message);
392
- if (typeof outcome === "object" && outcome !== null && "ok" in outcome && outcome.ok === false) throw new Error(errorText(outcome.error ?? "The handler failed"));
393
- const [done] = await sql.queryRaw("select better_supabase.complete_webhook($1, $2, $3) as done", [
394
- message.id,
395
- worker,
396
- attempt
397
- ]);
398
- if (done?.done !== false) succeeded += 1;
399
- } catch (cause) {
400
- await sql.queryRaw("select better_supabase.fail_webhook($1, $2, $3, null, $4)", [
401
- message.id,
402
- worker,
403
- errorText(cause),
404
- attempt
405
- ]);
406
- failed += 1;
407
- } finally {
408
- clearInterval(heartbeat);
409
- }
410
- }
411
- }
412
- }
413
- };
414
- }
415
- //#endregion
416
65
  //#region src/blocks/jobs/backends.ts
417
66
  const instantOrNull = (value) => value === null ? null : toInstant(value);
418
67
  /** Schedule times are stored to the millisecond, the precision `Date` reads back. */
@@ -421,19 +70,75 @@ const millis = (instant) => instant.round({
421
70
  roundingMode: "floor"
422
71
  });
423
72
  /** The first run of a schedule written without one, or undefined for a cron the drain can't read. */
424
- function firstRun(row) {
73
+ function firstRun(row, now) {
425
74
  try {
426
- return millis(nextCronRun(row.schedule, row.timezone, row.first_after ? toInstant(row.first_after) : nowInstant()));
75
+ return millis(nextCronRun(row.schedule, row.timezone, row.first_after ? toInstant(row.first_after) : now()));
427
76
  } catch {
428
77
  return;
429
78
  }
430
79
  }
431
80
  /**
81
+ * The due schedules among claimed rows. A row written in SQL without a next
82
+ * run gets its first run here; one not due yet is moved to it with `advance`.
83
+ */
84
+ async function dueOf(rows, now, advance) {
85
+ const due = [];
86
+ for (const row of rows) {
87
+ const schedule = {
88
+ name: row.job_name,
89
+ cron: row.schedule,
90
+ timeZone: row.timezone,
91
+ queue: row.queue,
92
+ payload: row.payload
93
+ };
94
+ if (row.next_run !== null) {
95
+ due.push({
96
+ ...schedule,
97
+ nextRun: toInstant(row.next_run)
98
+ });
99
+ continue;
100
+ }
101
+ const first = firstRun(row, now);
102
+ if (first === void 0) continue;
103
+ if (temporal().Instant.compare(first, now()) <= 0) due.push({
104
+ ...schedule,
105
+ nextRun: first
106
+ });
107
+ else await advance(row.job_name, first);
108
+ }
109
+ return due;
110
+ }
111
+ const scheduleInfo = (row) => ({
112
+ name: row.job_name,
113
+ cron: row.schedule,
114
+ timeZone: row.timezone,
115
+ queue: row.queue,
116
+ tenant: row.tenant,
117
+ nextRun: instantOrNull(row.next_run),
118
+ lastRun: instantOrNull(row.last_run),
119
+ leasedUntil: instantOrNull(row.locked_until),
120
+ createdAt: instantOrNull(row.created_at)
121
+ });
122
+ const statsOf = (row) => ({
123
+ ready: Number(row?.ready ?? 0),
124
+ inFlight: Number(row?.in_flight ?? 0),
125
+ delayed: Number(row?.delayed ?? 0),
126
+ dead: Number(row?.dead ?? 0),
127
+ oldestAgeSeconds: row?.oldest_age_seconds === null || row?.oldest_age_seconds === void 0 ? null : Number(row.oldest_age_seconds)
128
+ });
129
+ const onceOf = (row) => {
130
+ if (!row) throw new TypeError("enqueue_job_once returned no row");
131
+ return {
132
+ id: Number(row.id),
133
+ duplicate: row.duplicate
134
+ };
135
+ };
136
+ /**
432
137
  * The `jobs` SQL module over a service SQL connection. The same
433
- * functions back both `sql.modules.jobs.options.backend` values (pgmq and table)
434
- * and both schedulers.
138
+ * functions back both `blocks.jobs.options.backend` values (pgmq and table)
139
+ * and both schedulers. `now` dates a schedule's first run.
435
140
  */
436
- function sqlQueueBackend(sql) {
141
+ function sqlQueueBackend(sql, now = nowInstant) {
437
142
  return {
438
143
  apiVersion: 1,
439
144
  name: "sql",
@@ -449,6 +154,16 @@ function sqlQueueBackend(sql) {
449
154
  ]);
450
155
  return Number(row.id);
451
156
  },
157
+ async sendOnce(queue, payload, delay, maxAttempts, dedupeKey) {
158
+ const [row] = await sql.queryRaw("select * from better_supabase.enqueue_job_once($1, $2, $3, $4, $5)", [
159
+ queue,
160
+ JSON.stringify(payload ?? {}),
161
+ dedupeKey,
162
+ delay,
163
+ maxAttempts
164
+ ]);
165
+ return onceOf(row);
166
+ },
452
167
  read: (queue, lease, batch) => sql.queryRaw("select * from better_supabase.claim_jobs($1, $2, $3)", [
453
168
  queue,
454
169
  lease,
@@ -487,13 +202,7 @@ function sqlQueueBackend(sql) {
487
202
  },
488
203
  async stats(queue) {
489
204
  const [row] = await sql.queryRaw("select * from better_supabase.job_queue_stats($1)", [queue]);
490
- return {
491
- ready: Number(row?.ready ?? 0),
492
- inFlight: Number(row?.in_flight ?? 0),
493
- delayed: Number(row?.delayed ?? 0),
494
- dead: Number(row?.dead ?? 0),
495
- oldestAgeSeconds: row?.oldest_age_seconds === null || row?.oldest_age_seconds === void 0 ? null : Number(row.oldest_age_seconds)
496
- };
205
+ return statsOf(row);
497
206
  },
498
207
  listDead: (queue, limit, before) => sql.queryRaw("select * from better_supabase.list_dead_jobs($1, $2, $3)", [
499
208
  queue,
@@ -508,6 +217,15 @@ function sqlQueueBackend(sql) {
508
217
  ]);
509
218
  return row?.retried ?? 0;
510
219
  },
220
+ async purge(queue, args) {
221
+ const named = Object.entries({
222
+ older_than: args.olderThan,
223
+ batch: args.batch,
224
+ dead_older_than: args.deadOlderThan
225
+ }).filter(([, value]) => value !== void 0);
226
+ const [row] = await sql.queryRaw(`select better_supabase.purge_job_archive(${["queue => $1", ...named.map(([name], index) => `${name} => $${String(index + 2)}`)].join(", ")}) as purged`, [queue, ...named.map(([, value]) => value)]);
227
+ return row?.purged ?? 0;
228
+ },
511
229
  async schedule(name, cron, queue, payload, timeZone, nextRun, tenant) {
512
230
  await sql.queryRaw("select better_supabase.schedule_job($1, $2, $3, $4, $5, $6, $7)", [
513
231
  name,
@@ -520,17 +238,7 @@ function sqlQueueBackend(sql) {
520
238
  ]);
521
239
  },
522
240
  async listSchedules(filter) {
523
- return (await sql.queryRaw("select * from better_supabase.list_schedules($1, $2)", [filter.prefix ?? null, filter.tenant ?? null])).map((row) => ({
524
- name: row.job_name,
525
- cron: row.schedule,
526
- timeZone: row.timezone,
527
- queue: row.queue,
528
- tenant: row.tenant,
529
- nextRun: instantOrNull(row.next_run),
530
- lastRun: instantOrNull(row.last_run),
531
- leasedUntil: instantOrNull(row.locked_until),
532
- createdAt: instantOrNull(row.created_at)
533
- }));
241
+ return (await sql.queryRaw("select * from better_supabase.list_schedules($1, $2)", [filter.prefix ?? null, filter.tenant ?? null])).map(scheduleInfo);
534
242
  },
535
243
  async unscheduleTenant(tenant) {
536
244
  const [row] = await sql.queryRaw("select better_supabase.unschedule_tenant($1) as removed", [tenant]);
@@ -541,32 +249,9 @@ function sqlQueueBackend(sql) {
541
249
  return row?.done ?? false;
542
250
  },
543
251
  async dueSchedules(lease, batch) {
544
- const rows = await sql.queryRaw("select * from better_supabase.claim_due_schedules($1, $2)", [lease, batch]);
545
- const due = [];
546
- for (const row of rows) {
547
- const schedule = {
548
- name: row.job_name,
549
- cron: row.schedule,
550
- timeZone: row.timezone,
551
- queue: row.queue,
552
- payload: row.payload
553
- };
554
- if (row.next_run !== null) {
555
- due.push({
556
- ...schedule,
557
- nextRun: toInstant(row.next_run)
558
- });
559
- continue;
560
- }
561
- const first = firstRun(row);
562
- if (first === void 0) continue;
563
- if (temporal().Instant.compare(first, nowInstant()) <= 0) due.push({
564
- ...schedule,
565
- nextRun: first
566
- });
567
- else await sql.queryRaw("select better_supabase.advance_schedule($1, null, $2)", [row.job_name, first.toString()]);
568
- }
569
- return due;
252
+ return dueOf(await sql.queryRaw("select * from better_supabase.claim_due_schedules($1, $2)", [lease, batch]), now, async (name, first) => {
253
+ await sql.queryRaw("select better_supabase.advance_schedule($1, null, $2)", [name, first.toString()]);
254
+ });
570
255
  },
571
256
  async advanceSchedule(name, ran, next) {
572
257
  const [row] = await sql.queryRaw("select better_supabase.advance_schedule($1, $2, $3) as advanced", [
@@ -578,6 +263,142 @@ function sqlQueueBackend(sql) {
578
263
  }
579
264
  };
580
265
  }
266
+ /** The named arguments of each `jobs` function, in call order. */
267
+ const PARAMS = {
268
+ enqueue_job: [
269
+ "queue",
270
+ "payload",
271
+ "delay",
272
+ "max_attempts",
273
+ "dedupe_key",
274
+ "dedupe_running"
275
+ ],
276
+ enqueue_job_once: [
277
+ "queue",
278
+ "payload",
279
+ "dedupe_key",
280
+ "delay",
281
+ "max_attempts"
282
+ ],
283
+ claim_jobs: [
284
+ "queue",
285
+ "lease",
286
+ "batch"
287
+ ],
288
+ complete_job: [
289
+ "queue",
290
+ "job_id",
291
+ "attempt"
292
+ ],
293
+ fail_job: [
294
+ "queue",
295
+ "job_id",
296
+ "attempt",
297
+ "error",
298
+ "retry_in"
299
+ ],
300
+ extend_job_lease: [
301
+ "queue",
302
+ "job_id",
303
+ "attempt",
304
+ "lease"
305
+ ],
306
+ replay_dead_job: ["queue", "job_id"],
307
+ job_queue_stats: ["queue"],
308
+ list_dead_jobs: [
309
+ "queue",
310
+ "max_rows",
311
+ "before_id"
312
+ ],
313
+ retry_dead_jobs: [
314
+ "queue",
315
+ "ids",
316
+ "batch"
317
+ ],
318
+ schedule_job: [
319
+ "job_name",
320
+ "schedule",
321
+ "queue",
322
+ "payload",
323
+ "timezone",
324
+ "next_run",
325
+ "tenant"
326
+ ],
327
+ unschedule_job: ["job_name"],
328
+ list_schedules: ["name_prefix", "for_tenant"],
329
+ unschedule_tenant: ["tenant"],
330
+ claim_due_schedules: ["lease", "batch"],
331
+ advance_schedule: [
332
+ "job_name",
333
+ "ran",
334
+ "next_run"
335
+ ],
336
+ purge_job_archive: [
337
+ "queue",
338
+ "older_than",
339
+ "batch",
340
+ "dead_older_than"
341
+ ]
342
+ };
343
+ /**
344
+ * The rows a set-returning function answered with. PostgREST and `dbTransport`
345
+ * return an array; a single object is one row.
346
+ */
347
+ function transportRows(fn, value) {
348
+ if (value === null || value === void 0) return [];
349
+ if (Array.isArray(value)) return value;
350
+ if (isRecord(value)) return [value];
351
+ throw new TypeError(`${fn} returned ${typeof value}, not rows: pass a SqlClient instead of sqlTransport for set-returning functions`);
352
+ }
353
+ /**
354
+ * The `jobs` SQL module over a `BlockTransport`, with named arguments: a
355
+ * service-role `rpcTransport(supabase, { schema: "api" })` reaches the
356
+ * wrappers `blocks.jobs.api` writes, so stats, dead letters, replays
357
+ * and schedules work without a direct Postgres connection. Over Postgres,
358
+ * pass the `SqlClient` to `createJobs` instead.
359
+ */
360
+ function transportQueueBackend(transport, options = {}) {
361
+ const schema = options.schema ?? "better_supabase";
362
+ const now = options.now ?? nowInstant;
363
+ const call = (fn, ...args) => transport.call(schema, fn, Object.fromEntries(PARAMS[fn].flatMap((name, index) => index < args.length ? [[name, args[index]]] : [])));
364
+ const rows = async (fn, ...args) => transportRows(fn, await call(fn, ...args));
365
+ const bool = async (fn, ...args) => await call(fn, ...args) === true;
366
+ const count = async (fn, ...args) => Number(await call(fn, ...args) ?? 0);
367
+ const id = (value) => value === null || value === void 0 ? null : Number(value);
368
+ return {
369
+ apiVersion: 1,
370
+ name: "transport",
371
+ leases: true,
372
+ async send(queue, payload, delay, maxAttempts, dedupeKey, dedupe) {
373
+ const sent = id(await call("enqueue_job", queue, payload ?? {}, delay, maxAttempts, dedupeKey ?? null, dedupe !== "waiting"));
374
+ if (sent === null) throw new TypeError("enqueue_job returned no id");
375
+ return sent;
376
+ },
377
+ sendOnce: async (queue, payload, delay, maxAttempts, dedupeKey) => onceOf((await rows("enqueue_job_once", queue, payload ?? {}, dedupeKey, delay, maxAttempts))[0]),
378
+ read: (queue, lease, batch) => rows("claim_jobs", queue, lease, batch),
379
+ complete: (job) => bool("complete_job", job.queue, job.id, job.attempts),
380
+ async fail(job, error, retryIn) {
381
+ const status = await call("fail_job", job.queue, job.id, job.attempts, error, retryIn ?? null);
382
+ return status === "queued" || status === "dead" ? status : null;
383
+ },
384
+ extend: (job, lease) => bool("extend_job_lease", job.queue, job.id, job.attempts, lease),
385
+ replay: async (queue, jobId) => id(await call("replay_dead_job", queue, jobId)),
386
+ stats: async (queue) => statsOf((await rows("job_queue_stats", queue))[0]),
387
+ listDead: (queue, limit, before) => rows("list_dead_jobs", queue, limit, before ?? null),
388
+ retryDead: (queue, ids, limit) => count("retry_dead_jobs", queue, ids === void 0 ? null : [...ids], limit),
389
+ purge: (queue, args) => count("purge_job_archive", queue, args.olderThan, args.batch, args.deadOlderThan),
390
+ async schedule(name, cron, queue, payload, timeZone, nextRun, tenant) {
391
+ await call("schedule_job", name, cron, queue, payload ?? {}, timeZone, nextRun.toString(), tenant ?? null);
392
+ },
393
+ unschedule: (name) => bool("unschedule_job", name),
394
+ listSchedules: async (filter) => (await rows("list_schedules", filter.prefix ?? null, filter.tenant ?? null)).map(scheduleInfo),
395
+ unscheduleTenant: (tenant) => count("unschedule_tenant", tenant),
396
+ dueSchedules: async (lease, batch) => dueOf(await rows("claim_due_schedules", lease, batch), now, async (name, first) => {
397
+ await call("advance_schedule", name, null, first.toString());
398
+ }),
399
+ advanceSchedule: (name, ran, next) => bool("advance_schedule", name, ran.toString(), next.toString())
400
+ };
401
+ }
581
402
  /** Throws for a feature the transport doesn't support. */
582
403
  function sqlOnly(feature) {
583
404
  throw new DbException(dbError("invalid_request", `${feature} needs a SQL connection; pgmq_public (PostgREST) does not support it`));
@@ -623,12 +444,12 @@ function pgmqPublicBackend(client) {
623
444
  sleep_seconds: lease,
624
445
  n: batch
625
446
  });
626
- const live = [];
627
- for (const row of rows) if (row.read_ct > (row.message?.max_attempts ?? 5)) await call("archive", {
447
+ const dead = (row) => row.read_ct > (row.message?.max_attempts ?? 5);
448
+ const live = rows.filter((row) => !dead(row));
449
+ await Promise.all(rows.filter(dead).map((row) => call("archive", {
628
450
  queue_name: queue,
629
451
  message_id: row.msg_id
630
- });
631
- else live.push(row);
452
+ })));
632
453
  return live.map((row) => ({
633
454
  id: row.msg_id,
634
455
  attempts: row.read_ct,
@@ -649,9 +470,300 @@ function pgmqPublicBackend(client) {
649
470
  };
650
471
  }
651
472
  //#endregion
473
+ //#region src/blocks/jobs/idempotency.ts
474
+ async function sha256(text) {
475
+ const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(text));
476
+ return Array.from(new Uint8Array(digest), (byte) => byte.toString(16).padStart(2, "0")).join("");
477
+ }
478
+ const AUTH_COOKIE = /^sb-.+-auth-token(?:\.\d+)?$/;
479
+ /** A hash of the credentials the request carries, or `''` without any. */
480
+ async function callerScope(request) {
481
+ const authorization = request.headers.get("authorization");
482
+ const cookies = (request.headers.get("cookie") ?? "").split(";").map((pair) => pair.trim()).filter((pair) => AUTH_COOKIE.test(pair.split("=", 1)[0] ?? "")).sort();
483
+ const credential = authorization ?? cookies.join(";");
484
+ return credential === "" ? "" : `caller:${await sha256(credential)}`;
485
+ }
486
+ function sqlCalls$1(sql) {
487
+ return {
488
+ begin: (scope, key, fingerprint, ttl, lock) => run(async () => {
489
+ const [row] = await sql.queryRaw("select * from better_supabase.begin_idempotent($1, $2, $3, $4::interval, $5::interval)", [
490
+ scope,
491
+ key,
492
+ fingerprint,
493
+ ttl,
494
+ lock
495
+ ]);
496
+ return row;
497
+ }),
498
+ complete: (scope, key, holder, status, body) => run(async () => {
499
+ const [row] = await sql.queryRaw("select better_supabase.complete_idempotent($1, $2, $3, $4, $5) as done", [
500
+ scope,
501
+ key,
502
+ holder,
503
+ status,
504
+ JSON.stringify(body)
505
+ ]);
506
+ return row?.done === true;
507
+ }),
508
+ extend: (scope, key, holder, lock) => run(async () => {
509
+ const [row] = await sql.queryRaw("select better_supabase.extend_idempotent($1, $2, $3, $4::interval) as done", [
510
+ scope,
511
+ key,
512
+ holder,
513
+ lock
514
+ ]);
515
+ return row?.done === true;
516
+ }),
517
+ release: (scope, key, holder) => run(async () => {
518
+ const [row] = await sql.queryRaw("select better_supabase.release_idempotent($1, $2, $3) as done", [
519
+ scope,
520
+ key,
521
+ holder
522
+ ]);
523
+ return row?.done === true;
524
+ }),
525
+ purge: () => run(async () => {
526
+ const [row] = await sql.queryRaw("select better_supabase.purge_idempotency_keys() as purged");
527
+ return row?.purged ?? 0;
528
+ })
529
+ };
530
+ }
531
+ function transportCalls$1(transport, schema, mappers) {
532
+ const call = blockCall(transport, schema, mappers);
533
+ return {
534
+ begin: (scope, key, fingerprint, ttl, lock) => call("begin_idempotent", {
535
+ scope,
536
+ key,
537
+ request_hash: fingerprint,
538
+ ttl,
539
+ lock
540
+ }, (value) => transportRows("begin_idempotent", value)[0]),
541
+ complete: (scope, key, holder, status, body) => call("complete_idempotent", {
542
+ scope,
543
+ key,
544
+ holder,
545
+ status_code: status,
546
+ response: body
547
+ }, (value) => value === true),
548
+ extend: (scope, key, holder, lock) => call("extend_idempotent", {
549
+ scope,
550
+ key,
551
+ holder,
552
+ lock
553
+ }, (value) => value === true),
554
+ release: (scope, key, holder) => call("release_idempotent", {
555
+ scope,
556
+ key,
557
+ holder
558
+ }, (value) => value === true),
559
+ purge: () => call("purge_idempotency_keys", {}, (value) => Number(value ?? 0))
560
+ };
561
+ }
562
+ /**
563
+ * HTTP idempotency keys (IETF `Idempotency-Key` header) over the
564
+ * `idempotency` SQL module: a service SQL connection, or a service-role
565
+ * `rpcTransport` over the wrappers `blocks.idempotency.api` writes.
566
+ */
567
+ function createIdempotency(options) {
568
+ applyTemporal(options);
569
+ const headerName = options.header ?? "idempotency-key";
570
+ const format = options.problem;
571
+ const ttl = seconds(options.ttl ?? "24 hours");
572
+ const lock = seconds(options.lock ?? "1 minute");
573
+ const lockSeconds = periodSeconds(options.lock ?? 60) ?? 2;
574
+ const calls = options.transport === void 0 ? sqlCalls$1(options.sql) : transportCalls$1(options.transport, options.schema, options.mappers);
575
+ const hooked = withBlockHooks({
576
+ purge: () => calls.purge(),
577
+ purgeJob: () => async () => hooked.purge().orThrow(),
578
+ begin: (key, fingerprint, scope = "") => calls.begin(scope, key, fingerprint, ttl, lock).andThen((row) => row ? AsyncResult.ok({
579
+ state: row.state,
580
+ status: row.status_code,
581
+ body: row.response,
582
+ holder: row.holder ?? void 0
583
+ }) : AsyncResult.err(dbError("unexpected", "begin_idempotent returned no row"))),
584
+ extend: (key, holder, scope = "") => calls.extend(scope, key, holder, lock),
585
+ complete: (key, holder, status, body, scope = "") => calls.complete(scope, key, holder, status, body),
586
+ release: (key, holder, scope = "") => calls.release(scope, key, holder),
587
+ async handle(request, handler) {
588
+ const key = request.headers.get(headerName);
589
+ const url = new URL(request.url);
590
+ const instance = url.pathname;
591
+ if (!key) return options.required ? problemResponse(dbError("invalid_request", `The ${headerName} header is required`, { code: "IDEMPOTENCY_KEY_MISSING" }), {
592
+ instance,
593
+ format
594
+ }) : handler(request);
595
+ if (key.length > 255) return problemResponse(dbError("invalid_request", `The ${headerName} header is too long`, { code: "IDEMPOTENCY_KEY_INVALID" }), {
596
+ instance,
597
+ format
598
+ });
599
+ const scope = typeof options.scope === "function" ? options.scope(request) : options.scope ?? await callerScope(request);
600
+ const body = await request.clone().text();
601
+ const fingerprint = await sha256(`${request.method} ${instance}${url.search}\n${body}`);
602
+ const started = await hooked.begin(key, fingerprint, scope);
603
+ if (!started.ok) return problemResponse(started.error, {
604
+ instance,
605
+ format
606
+ });
607
+ const { state, holder = "" } = started.data;
608
+ switch (state) {
609
+ case "replay": {
610
+ const stored = started.data.body;
611
+ return new Response(stored.body, {
612
+ status: started.data.status ?? 200,
613
+ headers: {
614
+ ...stored.contentType ? { "content-type": stored.contentType } : {},
615
+ "idempotency-replayed": "true"
616
+ }
617
+ });
618
+ }
619
+ case "running": return problemResponse(dbError("conflict", "A request with this idempotency key is still running", { code: "IDEMPOTENCY_KEY_IN_USE" }), {
620
+ instance,
621
+ format,
622
+ headers: { "retry-after": "1" }
623
+ });
624
+ case "mismatch": return problemResponse(dbError("validation", "This idempotency key was used for a different request", {
625
+ code: "IDEMPOTENCY_KEY_REUSED",
626
+ issues: [{
627
+ message: "Use a new key for a new request",
628
+ path: [headerName]
629
+ }]
630
+ }), {
631
+ instance,
632
+ format
633
+ });
634
+ case "started": break;
635
+ default: throw new TypeError(`Unknown idempotency state ${String(state)}`);
636
+ }
637
+ let renewing = true;
638
+ const stopHeartbeat = leaseHeartbeat(lockSeconds, () => {
639
+ if (!renewing) return;
640
+ hooked.extend(key, holder, scope).then((extended) => {
641
+ if (extended.ok && !extended.data) renewing = false;
642
+ });
643
+ });
644
+ try {
645
+ let response;
646
+ try {
647
+ response = await handler(request);
648
+ } catch (cause) {
649
+ await hooked.release(key, holder, scope);
650
+ throw cause;
651
+ }
652
+ if (response.status >= 500) {
653
+ await hooked.release(key, holder, scope);
654
+ return response;
655
+ }
656
+ const stored = {
657
+ body: await response.clone().text(),
658
+ contentType: response.headers.get("content-type")
659
+ };
660
+ const completed = await hooked.complete(key, holder, response.status, stored, scope);
661
+ if (!completed.ok || !completed.data) return problemResponse(completed.ok ? dbError("conflict", "The idempotency key's lock expired before the response was saved", { code: "IDEMPOTENCY_KEY_LOST" }) : completed.error, {
662
+ instance,
663
+ format,
664
+ headers: { "retry-after": "1" }
665
+ });
666
+ return response;
667
+ } finally {
668
+ stopHeartbeat();
669
+ }
670
+ }
671
+ }, options.hooks, {
672
+ block: "idempotency",
673
+ ...options.logger ? { logger: options.logger } : {}
674
+ });
675
+ return hooked;
676
+ }
677
+ //#endregion
678
+ //#region src/blocks/jobs/lease.ts
679
+ function sqlCalls(sql) {
680
+ return {
681
+ async acquire(key, ttl, scope) {
682
+ const [row] = await sql.queryRaw("select better_supabase.acquire_lease($1, $2, $3) as holder", [
683
+ key,
684
+ ttl,
685
+ scope
686
+ ]);
687
+ return row?.holder ?? null;
688
+ },
689
+ async extend(key, holder, ttl, scope) {
690
+ const [row] = await sql.queryRaw("select better_supabase.extend_lease($1, $2, $3, $4) as done", [
691
+ key,
692
+ holder,
693
+ ttl,
694
+ scope
695
+ ]);
696
+ return row?.done === true;
697
+ },
698
+ async release(key, holder, scope) {
699
+ await sql.queryRaw("select better_supabase.release_lease($1, $2, $3)", [
700
+ key,
701
+ holder,
702
+ scope
703
+ ]);
704
+ }
705
+ };
706
+ }
707
+ function transportCalls(transport, schema) {
708
+ return {
709
+ async acquire(key, ttl, scope) {
710
+ const holder = await transport.call(schema, "acquire_lease", {
711
+ key,
712
+ seconds: ttl,
713
+ scope
714
+ });
715
+ return typeof holder === "string" ? holder : null;
716
+ },
717
+ extend: async (key, holder, ttl, scope) => await transport.call(schema, "extend_lease", {
718
+ key,
719
+ holder,
720
+ seconds: ttl,
721
+ scope
722
+ }) === true,
723
+ async release(key, holder, scope) {
724
+ await transport.call(schema, "release_lease", {
725
+ key,
726
+ holder,
727
+ scope
728
+ });
729
+ }
730
+ };
731
+ }
732
+ /**
733
+ * Runs `fn` while holding the lease on `key`, one holder at a time, and
734
+ * releases it afterwards, also when `fn` throws. `{ acquired: false }` while
735
+ * another holder has it. A lease that expires mid-run is taken by the next
736
+ * caller; call `lease.extend()` for long work. Takes a service SQL
737
+ * connection, or a service-role `rpcTransport` over the wrappers
738
+ * `blocks.idempotency.api` writes.
739
+ */
740
+ function withLease(source, key, fn, options = {}) {
741
+ const scope = options.scope ?? "";
742
+ const ttl = options.seconds ?? 60;
743
+ const calls = "call" in source ? transportCalls(source, options.schema ?? "better_supabase") : sqlCalls(source);
744
+ return run(async () => {
745
+ const holder = await calls.acquire(key, ttl, scope);
746
+ if (!holder) return { acquired: false };
747
+ const lease = {
748
+ holder,
749
+ extend: (next = ttl) => run(() => calls.extend(key, holder, next, scope))
750
+ };
751
+ try {
752
+ return {
753
+ acquired: true,
754
+ value: await fn(lease)
755
+ };
756
+ } finally {
757
+ await calls.release(key, holder, scope);
758
+ }
759
+ });
760
+ }
761
+ //#endregion
652
762
  //#region src/blocks/jobs/queue.ts
653
763
  /** Transient claim errors in a row a lane retries, with backoff, before the loop throws. */
654
764
  const CLAIM_RETRIES = 3;
765
+ /** The abort reason of a job whose lease couldn't be extended. */
766
+ const LEASE_LOST = Symbol("lease lost");
655
767
  const TRANSIENT = /* @__PURE__ */ new Set([
656
768
  "network",
657
769
  "timeout",
@@ -674,30 +786,48 @@ function toJob(queue, row) {
674
786
  };
675
787
  }
676
788
  const QUEUE_NAME = /^[a-z_][a-z0-9_]{0,46}$/;
677
- function isBackend(source) {
678
- return "apiVersion" in source;
679
- }
680
- function isSqlClient(source) {
681
- return typeof source.queryRaw === "function";
789
+ /**
790
+ * `transport` with every call made through `blockCall`, so a rejection is
791
+ * mapped to a `DbError` (with the app's `mappers` first), as in every block.
792
+ */
793
+ function mappedTransport(transport, mappers) {
794
+ return { async call(schema, fn, args) {
795
+ const result = await blockCall(transport, schema, mappers)(fn, args, (value) => value);
796
+ if (!result.ok) throw new DbException(result.error);
797
+ return result.data;
798
+ } };
682
799
  }
683
- function backendOf(source) {
684
- if (isBackend(source)) return source;
685
- return isSqlClient(source) ? sqlQueueBackend(source) : pgmqPublicBackend(source);
800
+ function backendOf(options, now) {
801
+ if (options.backend) return options.backend;
802
+ if (options.sql) return sqlQueueBackend(options.sql, now);
803
+ if (options.client && options.schema) return transportQueueBackend(mappedTransport(rpcTransport(options.client, { schema: options.schema }), options.mappers), {
804
+ now,
805
+ schema: options.schema
806
+ });
807
+ if (options.client) return pgmqPublicBackend(options.client);
808
+ if (options.transport) return transportQueueBackend(mappedTransport(options.transport, options.mappers), {
809
+ now,
810
+ ...options.schema ? { schema: options.schema } : {}
811
+ });
812
+ throw new TypeError("createJobs needs a backend, sql, client or transport to store jobs");
686
813
  }
687
814
  const later = (a, b) => temporal().Instant.compare(a, b) >= 0 ? a : b;
688
815
  /**
689
816
  * Typed jobs on Supabase Queues (pgmq), over the `jobs` SQL module.
690
817
  *
691
818
  * Pass a service SQL connection (`postgres.admin`, `ctx.sql`) for the full
692
- * feature set, a service-role Supabase client to go through the
693
- * `pgmq_public` RPCs where no direct connection exists (edge functions), or
694
- * any `QueueBackend`. Queue names are lowercase letters, digits and
695
- * underscores.
819
+ * feature set, a service-role `rpcTransport` over the wrappers
820
+ * `blocks.jobs.api` writes for the same features over the Data API (or a
821
+ * service-role Supabase client with `schema` set to that schema), a
822
+ * service-role Supabase client to go through the `pgmq_public` RPCs, or any
823
+ * `QueueBackend`. Queue names are lowercase letters, digits and underscores.
696
824
  */
697
- function createJobs(source, queues, options = {}) {
825
+ function createJobs(options) {
698
826
  applyTemporal(options);
827
+ const queues = options.queues ?? {};
828
+ const now = options.now ?? nowInstant;
699
829
  for (const name of Object.keys(queues)) if (!QUEUE_NAME.test(name)) throw new TypeError(`Queue "${name}": pgmq queue names are lowercase letters, digits and underscores (at most 47)`);
700
- const transport = backendOf(source);
830
+ const transport = backendOf(options, now);
701
831
  const schemaOf = (queue) => {
702
832
  const schema = queues[queue];
703
833
  if (!schema) throw new TypeError(`Unknown queue "${queue}". Queues: ${Object.keys(queues).join(", ")}`);
@@ -712,12 +842,20 @@ function createJobs(source, queues, options = {}) {
712
842
  /**
713
843
  * Extends the lease of every job in `held` at half the lease, so jobs
714
844
  * waiting their turn in a claimed batch don't expire before they run.
845
+ * A job whose lease can't be extended is aborted: another worker may
846
+ * already hold it.
715
847
  */
716
- const heartbeat = (held, lease) => transport.leases ? setInterval(() => {
717
- for (const job of held) run(() => transport.extend(job, lease));
718
- }, Math.max(1e3, lease * 1e3 / 2)) : void 0;
719
- const handle = async (job, handler, workOptions) => {
720
- const controller = new AbortController();
848
+ const heartbeat = (held, lease) => transport.leases ? leaseHeartbeat(lease, () => {
849
+ for (const [job, controller] of held) run(() => transport.extend(job, lease)).then((extended) => {
850
+ if (!extended.ok || !extended.data) controller.abort(LEASE_LOST);
851
+ });
852
+ }) : void 0;
853
+ const leaseLost = (job, workOptions) => {
854
+ workOptions.onError?.(dbError("conflict", `The lease on job ${String(job.id)} in "${job.queue}" was lost, so another worker may run it`, { code: "JOB_LEASE_LOST" }), job);
855
+ return false;
856
+ };
857
+ const handle = async (job, handler, workOptions, controller = new AbortController()) => {
858
+ if (controller.signal.reason === LEASE_LOST) return leaseLost(job, workOptions);
721
859
  try {
722
860
  const payload = await validate(schemaOf(job.queue), job.payload, "payload");
723
861
  if (!payload.ok) {
@@ -732,16 +870,22 @@ function createJobs(source, queues, options = {}) {
732
870
  context
733
871
  }, controller.signal);
734
872
  if (typeof outcome === "object" && outcome !== null && "ok" in outcome && outcome.ok === false && "error" in outcome) throw outcome.error;
735
- await complete(job);
736
- return true;
873
+ if (controller.signal.reason === LEASE_LOST) return leaseLost(job, workOptions);
874
+ const completed = await complete(job);
875
+ if (!completed.ok) {
876
+ workOptions.onError?.(completed.error, job);
877
+ return false;
878
+ }
879
+ return completed.data || leaseLost(job, workOptions);
737
880
  } catch (cause) {
881
+ if (controller.signal.reason === LEASE_LOST) return leaseLost(job, workOptions);
738
882
  controller.abort();
739
883
  await fail(job, cause);
740
884
  workOptions.onError?.(typeof cause === "object" && cause !== null && "kind" in cause ? cause : toDbError(cause), job);
741
885
  return false;
742
886
  }
743
887
  };
744
- const loop = async (queue, handler, workOptions, forever, deadline) => {
888
+ const loop = async (queue, handler, workOptions, forever, spent = budget(void 0)) => {
745
889
  const concurrency = Math.max(1, workOptions.concurrency ?? 1);
746
890
  const lease = workOptions.lease ?? 300;
747
891
  const firstWait = workOptions.pollInterval ?? 1e3;
@@ -754,7 +898,7 @@ function createJobs(source, queues, options = {}) {
754
898
  let wait = firstWait;
755
899
  let misses = 0;
756
900
  while (!signal.aborted) {
757
- if (deadline !== void 0 && Date.now() >= deadline) return;
901
+ if (spent.expired()) return;
758
902
  const claimed = await claim(queue, {
759
903
  ...workOptions,
760
904
  batch: workOptions.batch ?? 1
@@ -765,8 +909,7 @@ function createJobs(source, queues, options = {}) {
765
909
  stop.abort();
766
910
  throw new TypeError(claimed.error.message, { cause: claimed.error });
767
911
  }
768
- const left = deadline === void 0 ? Infinity : deadline - Date.now();
769
- await sleep(Math.min(firstWait * 2 ** (misses - 1), left), signal);
912
+ await sleep(Math.min(firstWait * 2 ** (misses - 1), spent.remaining()), signal);
770
913
  continue;
771
914
  }
772
915
  misses = 0;
@@ -777,16 +920,16 @@ function createJobs(source, queues, options = {}) {
777
920
  continue;
778
921
  }
779
922
  wait = firstWait;
780
- const held = new Set(claimed.data);
781
- const timer = heartbeat(held, lease);
923
+ const held = new Map(claimed.data.map((job) => [job, new AbortController()]));
924
+ const stopHeartbeat = heartbeat(held, lease);
782
925
  try {
783
926
  for (const job of claimed.data) {
784
- if (await handle(job, handler, workOptions)) succeeded += 1;
927
+ if (await handle(job, handler, workOptions, held.get(job))) succeeded += 1;
785
928
  else failed += 1;
786
929
  held.delete(job);
787
930
  }
788
931
  } finally {
789
- clearInterval(timer);
932
+ stopHeartbeat?.();
790
933
  }
791
934
  }
792
935
  });
@@ -803,7 +946,7 @@ function createJobs(source, queues, options = {}) {
803
946
  let ran = 0;
804
947
  for (const schedule of due) {
805
948
  await transport.send(schedule.queue, schedule.payload, 0, 5, `schedule:${schedule.name}:${schedule.nextRun.toString()}`);
806
- const next = millis(nextCronRun(schedule.cron, schedule.timeZone, later(nowInstant(), schedule.nextRun)));
949
+ const next = millis(nextCronRun(schedule.cron, schedule.timeZone, later(now(), schedule.nextRun)));
807
950
  if (await transport.advanceSchedule(schedule.name, schedule.nextRun, next)) ran += 1;
808
951
  }
809
952
  return ran;
@@ -813,30 +956,77 @@ function createJobs(source, queues, options = {}) {
813
956
  if (!valid.ok) return valid;
814
957
  const timeZone = scheduleOptions.timeZone ?? "UTC";
815
958
  try {
816
- nextCronRun(cron, timeZone, nowInstant());
959
+ nextCronRun(cron, timeZone, now());
817
960
  } catch (cause) {
818
961
  return err(dbError("validation", errorText(cause), { issues: [{
819
962
  message: errorText(cause),
820
963
  path: [name, "cron"]
821
964
  }] }));
822
965
  }
966
+ const wrapped = wrapPayload(valid.data, scheduleOptions.context);
967
+ if (!wrapped.ok) return wrapped;
823
968
  return ok({
824
969
  name,
825
970
  cron,
826
971
  queue,
827
- payload: withContext(valid.data, scheduleOptions.context),
972
+ payload: wrapped.data,
828
973
  timeZone,
829
974
  tenant: scheduleOptions.tenant ?? (scheduleOptions.context ? tenantFrom(scheduleOptions.context, tenantPathsFor(void 0)) : void 0) ?? tenantDefault
830
975
  });
831
976
  };
832
- const write = (prepared) => transport.schedule(prepared.name, prepared.cron, prepared.queue, prepared.payload, prepared.timeZone, millis(nextCronRun(prepared.cron, prepared.timeZone, nowInstant())), prepared.tenant);
833
- return {
977
+ const write = (prepared) => transport.schedule(prepared.name, prepared.cron, prepared.queue, prepared.payload, prepared.timeZone, millis(nextCronRun(prepared.cron, prepared.timeZone, now())), prepared.tenant);
978
+ const purge = (purgeOptions = {}) => run(async () => {
979
+ if (!transport.purge) sqlOnly("purge");
980
+ const backendPurge = transport.purge.bind(transport);
981
+ const interval = (value) => value === void 0 ? void 0 : seconds(value);
982
+ return (await Promise.all((purgeOptions.queues ?? Object.keys(queues)).map((queue) => {
983
+ schemaOf(queue);
984
+ return backendPurge(queue, {
985
+ olderThan: interval(purgeOptions.olderThan),
986
+ deadOlderThan: interval(purgeOptions.deadOlderThan),
987
+ batch: purgeOptions.batch
988
+ });
989
+ }))).reduce((sum, count) => sum + count, 0);
990
+ });
991
+ const delayOf = (enqueueOptions) => {
992
+ const delay = enqueueOptions.delay;
993
+ if (delay !== void 0 && (!Number.isInteger(delay) || delay < 0)) return err(dbError("validation", "delay is a whole number of seconds", { issues: [{
994
+ message: "Expected a non-negative integer",
995
+ path: ["delay"]
996
+ }] }));
997
+ return ok(delay ?? (enqueueOptions.runAt ? Math.max(0, Math.ceil((enqueueOptions.runAt.epochMilliseconds - now().epochMilliseconds) / 1e3)) : 0));
998
+ };
999
+ /** The validated payload in its envelope, and the delay, for `enqueue` and `enqueueOnce`. */
1000
+ const prepareSend = async (queue, payload, enqueueOptions) => {
1001
+ const valid = await validate(schemaOf(queue), payload, "payload");
1002
+ if (!valid.ok) return valid;
1003
+ const delay = delayOf(enqueueOptions);
1004
+ if (!delay.ok) return delay;
1005
+ const message = wrapPayload(valid.data, enqueueOptions.context, { ...enqueueOptions.ticket === void 0 ? {} : { ticket: enqueueOptions.ticket } });
1006
+ if (!message.ok) return message;
1007
+ return ok({
1008
+ message: message.data,
1009
+ delay: delay.data
1010
+ });
1011
+ };
1012
+ return withBlockHooks({
834
1013
  enqueue(queue, payload, enqueueOptions = {}) {
835
1014
  return AsyncResult.from(async () => {
836
- const valid = await validate(schemaOf(queue), payload, "payload");
837
- if (!valid.ok) return valid;
838
- const delay = enqueueOptions.delay ?? (enqueueOptions.runAt ? Math.max(0, Math.ceil((enqueueOptions.runAt.epochMilliseconds - nowInstant().epochMilliseconds) / 1e3)) : 0);
839
- return run(() => transport.send(queue, withContext(valid.data, enqueueOptions.context), delay, enqueueOptions.maxAttempts ?? 5, enqueueOptions.dedupeKey, enqueueOptions.dedupe));
1015
+ const prepared = await prepareSend(queue, payload, enqueueOptions);
1016
+ if (!prepared.ok) return prepared;
1017
+ const { message, delay } = prepared.data;
1018
+ return run(() => transport.send(queue, message, delay, enqueueOptions.maxAttempts ?? 5, enqueueOptions.dedupeKey, enqueueOptions.dedupe));
1019
+ });
1020
+ },
1021
+ enqueueOnce(queue, payload, enqueueOptions) {
1022
+ return AsyncResult.from(async () => {
1023
+ const prepared = await prepareSend(queue, payload, enqueueOptions);
1024
+ if (!prepared.ok) return prepared;
1025
+ const { message, delay } = prepared.data;
1026
+ return run(() => {
1027
+ if (!transport.sendOnce) sqlOnly("enqueueOnce");
1028
+ return transport.sendOnce(queue, message, delay, enqueueOptions.maxAttempts ?? 5, enqueueOptions.dedupeKey);
1029
+ });
840
1030
  });
841
1031
  },
842
1032
  claim,
@@ -876,6 +1066,8 @@ function createJobs(source, queues, options = {}) {
876
1066
  schemaOf(queue);
877
1067
  return transport.retryDead(queue, retryOptions.ids, retryOptions.limit ?? 1e3);
878
1068
  }),
1069
+ purge,
1070
+ purgeJob: (purgeOptions) => async () => purge(purgeOptions).orThrow(),
879
1071
  replay: (queue, id) => run(() => {
880
1072
  if (!transport.replay) sqlOnly("replay");
881
1073
  return transport.replay(queue, id);
@@ -929,23 +1121,16 @@ function createJobs(source, queues, options = {}) {
929
1121
  return transport.unscheduleTenant(filter.tenant);
930
1122
  }),
931
1123
  runSchedules: (scheduleOptions = {}) => run(() => runSchedules(scheduleOptions)),
932
- drain: (queue, handler, drainOptions = {}) => loop(queue, handler, drainOptions, false, drainOptions.budgetMs === void 0 ? void 0 : Date.now() + drainOptions.budgetMs),
1124
+ drain: (queue, handler, drainOptions = {}) => loop(queue, handler, drainOptions, false, budget(drainOptions.budgetMs)),
933
1125
  work: (queue, handler, workOptions = {}) => loop(queue, handler, workOptions, true),
934
1126
  drainRoute(routeOptions) {
935
- const secret = routeOptions.secret;
936
- if (!secret) throw new TypeError("drainRoute needs a secret, such as process.env.CRON_SECRET");
937
1127
  for (const queue of Object.keys(routeOptions.handlers)) schemaOf(queue);
938
- return async (request) => {
939
- const instance = new URL(request.url).pathname;
940
- if (request.method !== "GET" && request.method !== "POST") return new Response(null, {
941
- status: 405,
942
- headers: { allow: "GET, POST" }
943
- });
944
- if (!verifySharedSecret(request, secret)) return problemResponse(dbError("unauthorized", "The drain route needs its bearer secret"), {
945
- instance,
946
- format: routeOptions.problem
947
- });
948
- const deadline = Date.now() + (routeOptions.budgetMs ?? 5e4);
1128
+ return cronRoute({
1129
+ name: "drain",
1130
+ secret: routeOptions.secret,
1131
+ problem: routeOptions.problem
1132
+ }, async (request) => {
1133
+ const spent = budget(routeOptions.budgetMs ?? 5e4);
949
1134
  const monitor = routeOptions.monitor;
950
1135
  let errors = 0;
951
1136
  const report = (cause) => {
@@ -973,9 +1158,9 @@ function createJobs(source, queues, options = {}) {
973
1158
  const results = {};
974
1159
  for (const [queue, handler] of Object.entries(routeOptions.handlers)) {
975
1160
  if (handler === void 0) continue;
976
- if (Date.now() >= deadline) break;
1161
+ if (spent.expired()) break;
977
1162
  try {
978
- results[queue] = await loop(queue, handler, routeOptions, false, deadline);
1163
+ results[queue] = await loop(queue, handler, routeOptions, false, spent);
979
1164
  } catch (cause) {
980
1165
  report(cause);
981
1166
  results[queue] = {
@@ -987,65 +1172,51 @@ function createJobs(source, queues, options = {}) {
987
1172
  const result = {
988
1173
  schedules: scheduled,
989
1174
  queues: results,
990
- budgetExhausted: Date.now() >= deadline,
1175
+ budgetExhausted: spent.expired(),
991
1176
  errors
992
1177
  };
993
1178
  if (monitor?.onFinish) await watch(() => monitor.onFinish?.(result, started));
994
1179
  return Response.json(result);
995
- };
1180
+ });
996
1181
  }
997
- };
1182
+ }, options.hooks, {
1183
+ block: "jobs",
1184
+ ...options.logger ? { logger: options.logger } : {}
1185
+ });
998
1186
  }
999
1187
  //#endregion
1000
- //#region src/blocks/jobs/rate-limit.ts
1001
- const isTransport = (source) => "call" in source;
1002
- /**
1003
- * Fixed-window limits for keys that aren't claims, over the `rate-limit`
1004
- * module's counters. Pass a service SQL connection (`ctx.postgresAdmin`,
1005
- * `postgres.admin`), or a service-role `BlockTransport` such as
1006
- * `rpcTransport(adminClient)`.
1007
- */
1008
- function createRateLimit(source, options = {}) {
1009
- applyTemporal(options);
1010
- const hit = isTransport(source) ? overTransport(blockCall(source, void 0, options.mappers)) : overSql(source);
1011
- return { check: (scope, key, rule) => {
1012
- if (rule !== void 0 && (!Number.isInteger(rule.max) || rule.max < 1)) return AsyncResult.err(dbError("invalid_input", "A rate limit's max must be a positive integer"));
1013
- return hit(scope, key, rule?.max ?? null, rule === void 0 ? null : seconds(rule.period));
1014
- } };
1015
- }
1016
- const overTransport = (call) => (scope, key, max, period) => call("check_rate_limit", {
1017
- scope,
1018
- key,
1019
- max_requests: max ?? void 0,
1020
- period: period ?? void 0
1021
- }, (value) => {
1022
- const row = isRecord(value) ? value : {};
1023
- return {
1024
- allowed: row["allowed"] === true,
1025
- remaining: Number(row["remaining"] ?? 0),
1026
- retryAfter: Number(row["retry_after"] ?? 0)
1027
- };
1188
+ //#region src/blocks/jobs/manifest.ts
1189
+ /** The `jobs` block's manifest (ADR 0029). */
1190
+ const jobsBlock = defineBlock({
1191
+ name: "jobs",
1192
+ sql: ["jobs"],
1193
+ options: { jobs: jobsSqlOptions },
1194
+ create: createJobs,
1195
+ category: "automation",
1196
+ recipes: ["job-runs-table"]
1028
1197
  });
1029
- const overSql = (sql) => (scope, key, max, period) => run(async () => {
1030
- const [row] = await sql.queryRaw("select * from better_supabase.hit_rate_limit($1, $2, $3, $4::interval)", [
1031
- scope,
1032
- key,
1033
- max,
1034
- period
1035
- ]);
1036
- return {
1037
- allowed: row?.allowed ?? false,
1038
- remaining: row?.remaining ?? 0,
1039
- retryAfter: row?.retry_after ?? 0
1040
- };
1198
+ /** The `idempotency` block's manifest (ADR 0029). */
1199
+ const idempotencyBlock = defineBlock({
1200
+ name: "idempotency",
1201
+ sql: ["idempotency"],
1202
+ create: createIdempotency,
1203
+ category: "developer"
1204
+ });
1205
+ /** The `rate-limit` block's manifest (ADR 0029). */
1206
+ const rateLimitBlock = defineBlock({
1207
+ name: "rate-limit",
1208
+ sql: ["rate-limit"],
1209
+ options: { "rate-limit": rateLimitSqlOptions },
1210
+ create: createRateLimit,
1211
+ category: "developer"
1212
+ });
1213
+ /** The `webhook-inbox` block's manifest (ADR 0029). */
1214
+ const webhookInboxBlock = defineBlock({
1215
+ name: "webhook-inbox",
1216
+ sql: ["webhook-inbox"],
1217
+ options: { "webhook-inbox": webhookInboxSqlOptions },
1218
+ create: createWebhookInbox,
1219
+ category: "developer"
1041
1220
  });
1042
- /** A `problem+json` 429 with `Retry-After`, for a refused `check`. */
1043
- function rateLimited(decision, options = {}) {
1044
- const retryAfter = Math.max(1, Math.ceil(decision.retryAfter));
1045
- return problemResponse(dbError("rate_limited", options.detail ?? `Too many requests. Retry after ${retryAfter} seconds.`, { retryAfter }), {
1046
- ...options.instance === void 0 ? {} : { instance: options.instance },
1047
- format: options.problem
1048
- });
1049
- }
1050
1221
  //#endregion
1051
- export { assertCron, createIdempotency, createJobs, createRateLimit, createWebhookInbox, devDrain, devDrainSecret, nextCronRun, pgmqPublicBackend, rateLimited, sqlQueueBackend, withLease };
1222
+ export { assertCron, createIdempotency, createJobs, createRateLimit, createWebhookInbox, dbTransport, devDrain, devDrainSecret, idempotencyBlock, jobsBlock, nextCronRun, pgmqPublicBackend, purgeWebhookInbox, rateLimitBlock, rateLimited, rpcTransport, sqlQueueBackend, sqlTransport, transportQueueBackend, webhookInboxBlock, withLease };