better-supabase 0.7.1 → 0.8.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 (499) hide show
  1. package/README.md +6 -2
  2. package/dist/{access-sql-B0dF-SoF.js → access-sql-CrSbK1q-.js} +1 -1
  3. package/dist/{adapter-iKgjHVPx.js → adapter-CN45ibbV.js} +658 -157
  4. package/dist/{agents-CVHGd7It.d.ts → agents-BY_LQXtQ.d.ts} +4 -4
  5. package/dist/{ai-cache-CBWs1W0k.js → ai-cache-Dfgk8nBT.js} +2 -1
  6. package/dist/{ai-cache-DaDu_G5L.d.ts → ai-cache-DrUMMgp6.d.ts} +4 -4
  7. package/dist/{ai-chat-B24UI962.js → ai-chat-CVLRWbtS.js} +4 -3
  8. package/dist/{ai-chat-7amvXjmQ.d.ts → ai-chat-DXkMy74O.d.ts} +5 -5
  9. package/dist/{ai-files-CSPNswUY.js → ai-files-CioLu5du.js} +5 -4
  10. package/dist/ai-message-DfaP8sis.js +14 -0
  11. package/dist/ai-sdk/agents/index.d.ts +4 -4
  12. package/dist/ai-sdk/batches/index.d.ts +4 -4
  13. package/dist/ai-sdk/batches/index.js +4 -4
  14. package/dist/ai-sdk/cache/index.d.ts +2 -2
  15. package/dist/ai-sdk/cache/index.js +2 -2
  16. package/dist/ai-sdk/chat/index.d.ts +1 -1
  17. package/dist/ai-sdk/chat/index.js +8 -20
  18. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  19. package/dist/ai-sdk/files/index.d.ts +3 -3
  20. package/dist/ai-sdk/files/index.js +4 -4
  21. package/dist/ai-sdk/index.d.ts +37 -9
  22. package/dist/ai-sdk/index.js +3 -2
  23. package/dist/ai-sdk/mcp/index.d.ts +43 -6
  24. package/dist/ai-sdk/mcp/index.js +36 -7
  25. package/dist/ai-sdk/memory/index.d.ts +2 -2
  26. package/dist/ai-sdk/memory/index.js +1 -1
  27. package/dist/ai-sdk/workflow/index.d.ts +6 -6
  28. package/dist/ai-sdk/workflow/index.js +13 -24
  29. package/dist/{ai-tasks-Cd1HMFvB.d.ts → ai-tasks-BRQ6iQLc.d.ts} +4 -4
  30. package/dist/{announcements-ZRGnScWI.d.ts → announcements-Bouy0Ski.d.ts} +3 -3
  31. package/dist/{announcements-CiyOs-xP.js → announcements-p_BFofiR.js} +1 -1
  32. package/dist/api-Dnf2q-Ht.d.ts +370 -0
  33. package/dist/api-DtHFC037.js +676 -0
  34. package/dist/{api-keys-CIjghYjV.d.ts → api-keys-C8BlF3L2.d.ts} +4 -4
  35. package/dist/arazzo/index.d.ts +255 -0
  36. package/dist/arazzo/index.js +622 -0
  37. package/dist/{assistant-DwdpDH1q.d.ts → assistant-DBlFDZsi.d.ts} +5 -5
  38. package/dist/astro/index.d.ts +7 -7
  39. package/dist/astro/index.js +7 -7
  40. package/dist/asyncapi/index.d.ts +103 -0
  41. package/dist/asyncapi/index.js +569 -0
  42. package/dist/authorizer-ayxUDXXP.js +126 -0
  43. package/dist/authorizer-eiOjo-3l.d.ts +73 -0
  44. package/dist/better-result/index.d.ts +118 -0
  45. package/dist/better-result/index.js +64 -0
  46. package/dist/{bind-l4kAvYSv.js → bind-ButSzrHe.js} +1 -1
  47. package/dist/{bind-Bu_ZNa3W.d.ts → bind-CQ5mPyX1.d.ts} +3 -3
  48. package/dist/{block-events-CrT8r7Fe.js → block-events-DTxU5tfr.js} +18 -3
  49. package/dist/{block-fields-GFkxl4dP.js → block-fields-CroxUuF2.js} +3 -3
  50. package/dist/{block-fields-SJ6fEf3o.d.ts → block-fields-D1pfrcIY.d.ts} +2 -2
  51. package/dist/{block-helpers-CKtbFcRv.d.ts → block-helpers-C0Xj8War.d.ts} +2 -2
  52. package/dist/{block-helpers-DWHxHsEQ.js → block-helpers-Cy3pB96I.js} +41 -9
  53. package/dist/{block-hooks-BmjMyXTa.js → block-hooks-BPNMIlLl.js} +3 -3
  54. package/dist/{block-hooks-plbZ0AbJ.d.ts → block-hooks-DaOVC7SC.d.ts} +3 -3
  55. package/dist/{block-transport-BLr-ZgLc.js → block-transport-bAKh-dGc.js} +28 -2
  56. package/dist/{block-transport-DvaoPuZ9.d.ts → block-transport-inD4fFq-.d.ts} +24 -2
  57. package/dist/blocks/agents/index.d.ts +3 -3
  58. package/dist/blocks/agents/index.js +5 -4
  59. package/dist/blocks/ai-cache/index.d.ts +3 -3
  60. package/dist/blocks/ai-cache/index.js +3 -3
  61. package/dist/blocks/ai-chat/index.d.ts +9 -4
  62. package/dist/blocks/ai-chat/index.js +5 -5
  63. package/dist/blocks/ai-chat/react/index.d.ts +3 -3
  64. package/dist/blocks/ai-chat/react/index.js +5 -5
  65. package/dist/blocks/ai-files/index.d.ts +3 -3
  66. package/dist/blocks/ai-files/index.js +3 -3
  67. package/dist/blocks/ai-providers/index.d.ts +3 -3
  68. package/dist/blocks/ai-providers/index.js +8 -7
  69. package/dist/blocks/ai-tasks/index.d.ts +3 -3
  70. package/dist/blocks/ai-tasks/index.js +7 -6
  71. package/dist/blocks/announcements/index.d.ts +3 -3
  72. package/dist/blocks/announcements/index.js +3 -3
  73. package/dist/blocks/announcements/react/index.d.ts +3 -3
  74. package/dist/blocks/announcements/react/index.js +3 -3
  75. package/dist/blocks/api-keys/index.d.ts +5 -5
  76. package/dist/blocks/api-keys/index.js +8 -8
  77. package/dist/blocks/attachments/index.d.ts +12 -8
  78. package/dist/blocks/attachments/index.js +22 -13
  79. package/dist/blocks/audit/index.d.ts +21 -10
  80. package/dist/blocks/audit/index.js +30 -11
  81. package/dist/blocks/billing/index.d.ts +11 -9
  82. package/dist/blocks/billing/index.js +15 -15
  83. package/dist/blocks/comments/index.d.ts +8 -8
  84. package/dist/blocks/comments/index.js +8 -7
  85. package/dist/blocks/connectors/index.d.ts +3 -3
  86. package/dist/blocks/connectors/index.js +7 -6
  87. package/dist/blocks/data-lifecycle/index.d.ts +12 -8
  88. package/dist/blocks/data-lifecycle/index.js +13 -8
  89. package/dist/blocks/entitlements/index.d.ts +3 -3
  90. package/dist/blocks/entitlements/index.js +1 -1
  91. package/dist/blocks/flags/index.d.ts +4 -4
  92. package/dist/blocks/flags/index.js +4 -3
  93. package/dist/blocks/inbox/index.d.ts +3 -3
  94. package/dist/blocks/inbox/index.js +4 -5
  95. package/dist/blocks/inbox/react/index.d.ts +1 -1
  96. package/dist/blocks/inbox/react/index.js +1 -1
  97. package/dist/blocks/inbox/react/server.d.ts +1 -1
  98. package/dist/blocks/index.d.ts +10 -10
  99. package/dist/blocks/index.js +6 -6
  100. package/dist/blocks/jobs/index.d.ts +48 -32
  101. package/dist/blocks/jobs/index.js +44 -287
  102. package/dist/blocks/knowledge/index.d.ts +3 -3
  103. package/dist/blocks/knowledge/index.js +3 -3
  104. package/dist/blocks/memory/index.d.ts +4 -4
  105. package/dist/blocks/memory/index.js +7 -6
  106. package/dist/blocks/notifications/index.d.ts +11 -9
  107. package/dist/blocks/notifications/index.js +20 -25
  108. package/dist/blocks/notifications/react/index.d.ts +1 -1
  109. package/dist/blocks/notifications/react/index.js +1 -1
  110. package/dist/blocks/onboarding/index.d.ts +3 -3
  111. package/dist/blocks/onboarding/index.js +3 -3
  112. package/dist/blocks/onboarding/react/index.d.ts +2 -2
  113. package/dist/blocks/onboarding/react/index.js +2 -2
  114. package/dist/blocks/onboarding/react/server.d.ts +1 -1
  115. package/dist/blocks/organizations/index.d.ts +9 -9
  116. package/dist/blocks/organizations/index.js +11 -18
  117. package/dist/blocks/outbox/index.d.ts +2 -2
  118. package/dist/blocks/outbox/index.js +16 -25
  119. package/dist/blocks/profiles/index.d.ts +7 -7
  120. package/dist/blocks/profiles/index.js +7 -6
  121. package/dist/blocks/push/index.d.ts +4 -4
  122. package/dist/blocks/push/index.js +3 -3
  123. package/dist/blocks/settings/index.d.ts +4 -4
  124. package/dist/blocks/settings/index.js +7 -6
  125. package/dist/blocks/sso/index.d.ts +5 -5
  126. package/dist/blocks/sso/index.js +6 -5
  127. package/dist/blocks/usage/index.d.ts +3 -3
  128. package/dist/blocks/usage/index.js +5 -4
  129. package/dist/blocks/waitlist/index.d.ts +5 -5
  130. package/dist/blocks/waitlist/index.js +5 -4
  131. package/dist/blocks/webhooks/index.d.ts +22 -13
  132. package/dist/blocks/webhooks/index.js +41 -70
  133. package/dist/blocks/workflow-builder/index.d.ts +4 -4
  134. package/dist/blocks/workflow-builder/index.js +3 -3
  135. package/dist/blocks/workflow-builder/react/index.d.ts +4 -4
  136. package/dist/blocks/workflow-builder/react/index.js +4 -4
  137. package/dist/blocks/workflows/index.d.ts +3 -3
  138. package/dist/blocks/workflows/index.js +3 -3
  139. package/dist/blocks/workflows/react/index.d.ts +3 -3
  140. package/dist/blocks/workflows/react/index.js +3 -3
  141. package/dist/build-hPwk3_X5.js +1296 -0
  142. package/dist/{build-BXIzE6Xv.js → build-meLuYGri.js} +3 -3
  143. package/dist/casing-DdFWEtqr.js +16 -0
  144. package/dist/chat-sdk/index.d.ts +6 -6
  145. package/dist/chat-sdk/index.js +5 -4
  146. package/dist/chat-sdk/react/index.d.ts +1 -1
  147. package/dist/chat-sdk/react/server.d.ts +1 -1
  148. package/dist/{claims-DDBQT6BK.js → claims-0KZVT804.js} +1 -1
  149. package/dist/cli/add-1dc5wM5k.js +69 -0
  150. package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
  151. package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
  152. package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
  153. package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
  154. package/dist/cli/bin.js +4 -4
  155. package/dist/cli/cache-CIfA-jBV.js +483 -0
  156. package/dist/cli/{codemod-Bl_tQpHn.js → codemod-JVlTQQG2.js} +4 -4
  157. package/dist/cli/{command-CK14fP91.js → command-DV-StG1x.js} +5 -0
  158. package/dist/cli/{config-DU7EJImt.js → config-C2Pz2_4A.js} +7 -4
  159. package/dist/cli/config-DpbF8ML3.js +2 -0
  160. package/dist/cli/{config-NiPxAmUF.js → config-M-WzL9O2.js} +116 -18
  161. package/dist/cli/{db-DOBPt660.js → db-BkcfOlyB.js} +2 -1
  162. package/dist/cli/{diff-SjkO5rNr.js → diff-D1jGdb3Y.js} +1 -1
  163. package/dist/cli/{doctor-DJk0aeBi.js → doctor-VcDtuusV.js} +316 -221
  164. package/dist/cli/emit-BHHfwUoT.js +1136 -0
  165. package/dist/cli/{env-qXgyMV6r.js → env-B--LMhEe.js} +13 -10
  166. package/dist/cli/env-vzBG90Um.js +2 -0
  167. package/dist/cli/{env-CJLbUVPB.js → env-zHJtMIBo.js} +11 -3
  168. package/dist/cli/{errors-4v4DTtda.js → errors-CqTLXe2M.js} +18 -2
  169. package/dist/cli/{fastest-levenshtein-CFN-lNDv.js → fastest-levenshtein-CF7BCi9l.js} +1 -1
  170. package/dist/cli/files-BVupXPIC.js +34 -0
  171. package/dist/cli/gen-DmVj3u4L.js +322 -0
  172. package/dist/cli/{init-BHuEQrQK.js → glue-C1UE8gQN.js} +16 -313
  173. package/dist/cli/index.d.ts +59 -31
  174. package/dist/cli/index.js +8 -6
  175. package/dist/cli/init-CVZ3s5kl.js +258 -0
  176. package/dist/cli/{introspect-DzR2nyQb.js → introspect-BToGNfm-.js} +14 -14
  177. package/dist/cli/{io-DI1mTdSA.js → io-CFzJVJ68.js} +5 -1
  178. package/dist/cli/{keys-BGCnnb-s.js → keys-CJhtIxJ3.js} +4 -4
  179. package/dist/cli/metadata-DSRKCaf-.js +133 -0
  180. package/dist/cli/names-D6LrQnOv.js +6 -0
  181. package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
  182. package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
  183. package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
  184. package/dist/cli/{openapi-BlRJ18s3.js → openapi-DWa4Ir1q.js} +8 -14
  185. package/dist/cli/prompts-BdeVmVpg.js +2 -0
  186. package/dist/cli/{prompts-BNcNfAve.js → prompts-DZJB1nTw.js} +6 -6
  187. package/dist/cli/{rolldown-runtime-BPOCksWG.js → rolldown-runtime-CMFfr-1z.js} +3 -1
  188. package/dist/cli/run-DA6_lg3w.js +389 -0
  189. package/dist/cli/run-DuN1MX-7.js +705 -0
  190. package/dist/cli/scaffold-5DenHSxF.js +292 -0
  191. package/dist/cli/scaffold-CwQUMFRb.js +2 -0
  192. package/dist/cli/{seed-DQzqT7LP.js → seed-CzBmrGON.js} +14 -18
  193. package/dist/cli/seed-DOmit9Hq.js +2 -0
  194. package/dist/cli/{skills-QQs4q68J.js → skills-CnO8QFS7.js} +7 -6
  195. package/dist/cli/snapshot-Bstk6ulj.js +287 -0
  196. package/dist/cli/source-args-BYfq6imV.js +31 -0
  197. package/dist/cli/spec-CzosTYm3.js +7438 -0
  198. package/dist/cli/spec-T_0Bcyw7.js +2 -0
  199. package/dist/cli/{sql-B8csQPyn.js → sql-BKOOQAX3.js} +240 -218
  200. package/dist/cli/sql-DJrNDxQm.js +3 -0
  201. package/dist/cli/{style-C0NFdJRL.js → style-CB3vxgh0.js} +3 -3
  202. package/dist/cli/typegen-Demi5-VQ.js +486 -0
  203. package/dist/cli/validate-Ca13ktgz.js +7522 -0
  204. package/dist/cli/{version-59gcepIG.js → version-B4k0aUxS.js} +1 -1
  205. package/dist/client/index.d.ts +4 -3
  206. package/dist/client/index.js +60 -3
  207. package/dist/client/native/index.d.ts +3 -3
  208. package/dist/client/native/index.js +3 -3
  209. package/dist/{client-CI0Z2zWX.js → client-wxeTQFtB.js} +36 -3
  210. package/dist/{clone-BfgmLU90.js → clone-dN9XOL1K.js} +9 -1
  211. package/dist/{cloud-event-BnmD5fb9.js → cloud-event-CTh9Sr5w.js} +16 -2
  212. package/dist/{cloud-event-C1JCc1bH.d.ts → cloud-event-Dune0KI7.d.ts} +16 -2
  213. package/dist/{compiler-DY_wkj4R.d.ts → compiler-V1qvcST1.d.ts} +2 -2
  214. package/dist/{compose-BIBNgAnq.js → compose-BHej1acw.js} +3 -3
  215. package/dist/{composite--yqry7uW.d.ts → composite-CWAJTRBF.d.ts} +6 -6
  216. package/dist/{composite-DXVUibdi.js → composite-zTe0TCqj.js} +4 -4
  217. package/dist/config/index.d.ts +3 -4
  218. package/dist/config/index.js +4 -4
  219. package/dist/config-DlKvtt95.js +540 -0
  220. package/dist/{connector-Dv8kK0MO.d.ts → connector-CySQEFcW.d.ts} +1 -1
  221. package/dist/{connectors-CrpknU0P.d.ts → connectors--PGhmiu0.d.ts} +4 -4
  222. package/dist/{context-BCrWe7ow.d.ts → context-DsV2SueA.d.ts} +11 -2
  223. package/dist/context-nPDvQ-Zl.js +41 -0
  224. package/dist/credentials/index.d.ts +5 -5
  225. package/dist/credentials/index.js +9 -17
  226. package/dist/{cron-DVPUg5k3.js → cron-D25Ukpxy.js} +1 -1
  227. package/dist/cron-route-D2AN9SA1.js +24 -0
  228. package/dist/{csv-DCK-PT1n.js → csv-BZnHA1Py.js} +1 -1
  229. package/dist/{define-B-TVjC25.js → define-CFQcvM20.js} +263 -229
  230. package/dist/{define-CJJkkr1-.d.ts → define-DmcfoNXB.d.ts} +136 -111
  231. package/dist/edge/index.d.ts +66 -13
  232. package/dist/edge/index.js +65 -39
  233. package/dist/elysia/index.d.ts +1 -1
  234. package/dist/elysia/index.js +1 -1
  235. package/dist/{embeddings-C9KGQnXt.d.ts → embeddings-B4vhS-dY.d.ts} +1 -1
  236. package/dist/{ended-XjeGQ5XW.d.ts → ended-CcvcRqEd.d.ts} +7 -1
  237. package/dist/{entitlements-DRl6ZJUm.js → entitlements-BYFf0Cdh.js} +2 -2
  238. package/dist/{entitlements-BKSVGtrG.d.ts → entitlements-Ds8qoYZ-.d.ts} +1 -1
  239. package/dist/env/index.d.ts +1 -1
  240. package/dist/env/index.js +9 -2
  241. package/dist/{errors-B11Duf73.js → errors-2M6CKMP4.js} +5 -0
  242. package/dist/{errors-DLjJHPLK.js → errors-rZ7VIqp6.js} +2 -2
  243. package/dist/{escape-like-ImTK0ps_.d.ts → escape-like-DDWoHzh_.d.ts} +1 -1
  244. package/dist/eve/index.d.ts +5 -5
  245. package/dist/eve/index.js +5 -11
  246. package/dist/{eve-gT2Fpjut.d.ts → eve-CoAIcCkq.d.ts} +2 -2
  247. package/dist/events/index.d.ts +4 -4
  248. package/dist/events/index.js +7 -2
  249. package/dist/{events-DWDhx77e.d.ts → events-D1BOCll8.d.ts} +6 -4
  250. package/dist/{executor-Bq28caBo.js → executor-B-fD7DLt.js} +52 -35
  251. package/dist/executor-B_Hfobee.js +162 -0
  252. package/dist/{executor-BVBFM86G.d.ts → executor-CpxLPCiz.d.ts} +1 -1
  253. package/dist/{executor-CaWigTyR.d.ts → executor-DfEtf0cq.d.ts} +43 -27
  254. package/dist/{executor-DvsBbNBS.d.ts → executor-Drzu3dBK.d.ts} +2 -2
  255. package/dist/{executor-DbvExCFC.d.ts → executor-ngjKL_Pe.d.ts} +2 -2
  256. package/dist/expo/index.d.ts +4 -4
  257. package/dist/expo/index.js +6 -6
  258. package/dist/expo-sqlite/index.d.ts +3 -3
  259. package/dist/expo-sqlite/index.js +2 -2
  260. package/dist/extra-CGQ2_q3S.js +10 -0
  261. package/dist/{field-errors-BFOa7WhB.d.ts → field-errors-DIe9XYWL.d.ts} +17 -7
  262. package/dist/{field-errors-VF1yb8yI.js → field-errors-DZVRWRkf.js} +1 -1
  263. package/dist/format-DTXdu8ya.d.ts +70 -0
  264. package/dist/{framework-BmzgK32X.d.ts → framework-148t1m3C.d.ts} +5 -5
  265. package/dist/{framework-a7aRCIqv.js → framework-3ey3QmrO.js} +2 -2
  266. package/dist/function-contract-BcZenXMO.d.ts +8 -0
  267. package/dist/{gateway-C1ssRHnf.d.ts → gateway-S9vicgeo.d.ts} +4 -4
  268. package/dist/{guards-BnzDvFrz.js → guards-6F2bCtQR.js} +3 -1
  269. package/dist/h3/index.d.ts +1 -1
  270. package/dist/h3/index.js +1 -1
  271. package/dist/h3/v1/index.d.ts +1 -1
  272. package/dist/h3/v1/index.js +1 -1
  273. package/dist/{message-CaKlqdsX.js → history-GH1HJWQV.js} +65 -13
  274. package/dist/hmac-DCud0myt.js +22 -0
  275. package/dist/hono/index.d.ts +19 -14
  276. package/dist/hono/index.js +21 -16
  277. package/dist/{hooks-1BTCJsiw.js → hooks-Bhza9Hnr.js} +68 -100
  278. package/dist/http-sbmBe5d2.js +25 -0
  279. package/dist/{inbox-i7E1ppo6.d.ts → inbox-Cd1KCEBL.d.ts} +3 -3
  280. package/dist/index-B72Rvv_j.d.ts +89 -0
  281. package/dist/{index-DunNRdnT.d.ts → index-BCHR4Ucl.d.ts} +4 -4
  282. package/dist/{index-CLg87OBW.d.ts → index-BUK7jUzR.d.ts} +6 -0
  283. package/dist/{config-D44Y7PAv.d.ts → index-Ba1SI-uO.d.ts} +625 -278
  284. package/dist/{index-D48jVS-N.d.ts → index-BfxOaOYs.d.ts} +4 -5
  285. package/dist/{index-ClmjK_o-.d.ts → index-CicIyqOe.d.ts} +4 -4
  286. package/dist/{index-ACiNPN4Z.d.ts → index-D69h4QqD.d.ts} +1 -1
  287. package/dist/index-DG2SUXDQ.d.ts +58 -0
  288. package/dist/{index-Bepi-Hgg.d.ts → index-DoNVLHOU.d.ts} +3 -3
  289. package/dist/{index-CdZKQF98.d.ts → index-R274XFlg.d.ts} +1 -1
  290. package/dist/{index-CewnYSpv.d.ts → index-_4R4b01v.d.ts} +8 -18
  291. package/dist/index.d.ts +89 -14
  292. package/dist/index.js +12 -11
  293. package/dist/{json-schema-CvER4kgT.js → json-schema-CT4tvrkA.js} +148 -102
  294. package/dist/{kit-Fm-Fv7q5.js → kit-BhHr9T9v.js} +36 -10
  295. package/dist/{kit-CkNzZUqv.d.ts → kit-W99LCPBS.d.ts} +13 -7
  296. package/dist/{knowledge-BXBbT0Tr.d.ts → knowledge-CAReFpRA.d.ts} +5 -5
  297. package/dist/{knowledge-CDmiMLew.js → knowledge-DnHtb64A.js} +4 -3
  298. package/dist/list/index.d.ts +1 -2
  299. package/dist/{list-query-BRt-zDF7.d.ts → list-query-D3JQeEL7.d.ts} +4 -4
  300. package/dist/mcp/index.d.ts +49 -19
  301. package/dist/mcp/index.js +158 -94
  302. package/dist/mcp/sdk/index.d.ts +38 -6
  303. package/dist/mcp/sdk/index.js +88 -6
  304. package/dist/{message-CfDoR0Y6.d.ts → message-B0fNJgq8.d.ts} +1 -2
  305. package/dist/{messages-B9-5887d.js → messages-CJoHHCWT.js} +4 -205
  306. package/dist/{mfa-Daak8ukG.d.ts → mfa-SZc9YYyb.d.ts} +1 -1
  307. package/dist/model-OgBxvk3N.d.ts +300 -0
  308. package/dist/model-messages-Cxw_Up4f.js +206 -0
  309. package/dist/model-messages-D4GZllOD.d.ts +34 -0
  310. package/dist/modules-DksjZyMW.js +77 -0
  311. package/dist/nestjs/index.d.ts +2 -2
  312. package/dist/nestjs/index.js +1 -1
  313. package/dist/next/index.d.ts +105 -55
  314. package/dist/next/index.js +204 -170
  315. package/dist/node/index.d.ts +2 -2
  316. package/dist/node/index.js +1 -1
  317. package/dist/{onboarding-BZGHYJks.d.ts → onboarding-LZvlK1P4.d.ts} +3 -3
  318. package/dist/openapi/index.d.ts +4 -2
  319. package/dist/openapi/index.js +21 -343
  320. package/dist/optional-peer-D1pi-skw.js +24 -0
  321. package/dist/orpc/index.d.ts +8 -8
  322. package/dist/orpc/index.js +21 -20
  323. package/dist/otel/index.d.ts +3 -3
  324. package/dist/otel/index.js +7 -7
  325. package/dist/{outbox-Cq7pPYvl.d.ts → outbox-DZfAvfzC.d.ts} +6 -6
  326. package/dist/overlay/index.d.ts +233 -0
  327. package/dist/overlay/index.js +554 -0
  328. package/dist/{plugin-FGY8UhYm.d.ts → plugin-CPK2HsbY.d.ts} +42 -3
  329. package/dist/plugins/actor/index.d.ts +1 -1
  330. package/dist/plugins/actor/index.js +1 -1
  331. package/dist/plugins/rules/index.d.ts +2 -2
  332. package/dist/plugins/rules/index.js +1 -1
  333. package/dist/plugins/soft-delete/index.d.ts +3 -3
  334. package/dist/plugins/soft-delete/index.js +9 -2
  335. package/dist/plugins/tenant/index.d.ts +7 -2
  336. package/dist/plugins/tenant/index.js +16 -2
  337. package/dist/plugins/timestamps/index.d.ts +1 -1
  338. package/dist/plugins/timestamps/index.js +8 -1
  339. package/dist/plugins/validation/index.d.ts +2 -2
  340. package/dist/plugins/validation/index.js +4 -4
  341. package/dist/{pool-CAu2nLrL.d.ts → pool-gkhbGp2E.d.ts} +2 -2
  342. package/dist/postgres/index.d.ts +4 -4
  343. package/dist/postgres/index.js +2 -1
  344. package/dist/{postgrest-BLVdEnfe.d.ts → postgrest-BUqLag2Q.d.ts} +1 -1
  345. package/dist/powersync/index.d.ts +5 -5
  346. package/dist/powersync/index.js +4 -4
  347. package/dist/powersync/react/index.d.ts +3 -3
  348. package/dist/powersync/react/index.js +1 -1
  349. package/dist/{problem-BreOl8b8.js → problem-CJvFeGu7.js} +13 -2
  350. package/dist/{problem-DD8LZFjc.d.ts → problem-TvGdxO1t.d.ts} +7 -1
  351. package/dist/{provider-Di3sRutW.js → provider-DxRTex4x.js} +1 -1
  352. package/dist/{provider-D-UEMvSD.d.ts → provider-ib9wzUDz.d.ts} +2 -2
  353. package/dist/query/index.d.ts +2 -2
  354. package/dist/query/index.js +1 -1
  355. package/dist/{query-BQ-NaZon.js → query-Ctz-qKRx.js} +1 -1
  356. package/dist/rate-limit-Bw7HgmFj.js +260 -0
  357. package/dist/react/index.d.ts +9 -9
  358. package/dist/react/index.js +4 -4
  359. package/dist/react/native/index.d.ts +1 -1
  360. package/dist/react/native/index.js +2 -2
  361. package/dist/react/server.d.ts +10 -10
  362. package/dist/react/server.js +3 -3
  363. package/dist/react/session.d.ts +2 -2
  364. package/dist/{react-F80mF4-t.js → react-Bmpo59D7.js} +4 -4
  365. package/dist/react-router/index.d.ts +6 -6
  366. package/dist/react-router/index.js +9 -11
  367. package/dist/{read-set-DuKWC9Mj.js → read-set-DAeWhqPf.js} +2 -2
  368. package/dist/realtime/index.d.ts +3 -3
  369. package/dist/realtime/index.js +30 -36
  370. package/dist/{refusal-DhSU2Vvr.d.ts → refusal-CFI8-5nf.d.ts} +4 -1
  371. package/dist/{refusal-CeJWxmkH.js → refusal-K78A1Vmq.js} +5 -5
  372. package/dist/{resolve-tJZY3FEa.js → resolve-Bvgf3ut_.js} +131 -42
  373. package/dist/{resolve-ChTYeTEl.d.ts → resolve-MxXVWyhd.d.ts} +12 -8
  374. package/dist/resource--vTrBe6I.d.ts +103 -0
  375. package/dist/resource-BqNqlYg9.js +91 -0
  376. package/dist/resource-DA811u_4.js +463 -0
  377. package/dist/resource-execute-rbKvuCsY.d.ts +12 -0
  378. package/dist/resource-schemas-BJ518zFH.js +79 -0
  379. package/dist/resource-types-CqB6GWGT.d.ts +141 -0
  380. package/dist/resources-BVYPnuLo.js +56 -0
  381. package/dist/resources-DZSk8tXJ.d.ts +7 -0
  382. package/dist/{respond-DprrgyXX.d.ts → respond-Cw-zanCm.d.ts} +3 -3
  383. package/dist/{respond-BUgsXNgk.js → respond-volM3ByS.js} +4 -4
  384. package/dist/{result-D7y2fT87.d.ts → result-BchM1XZn.d.ts} +7 -1
  385. package/dist/{result-DzUbqgdW.js → result-DEqHCMKP.js} +1 -1
  386. package/dist/server/index.d.ts +81 -19
  387. package/dist/server/index.js +16 -14
  388. package/dist/{server-Bh0EVSwU.d.ts → server-types-CrAmZ8jv.d.ts} +92 -36
  389. package/dist/{shared-CxWmcyqB.js → shared-DHjhfRdV.js} +2 -15
  390. package/dist/shared-DTneRoxi.js +14 -0
  391. package/dist/{sign-in-Cb1mwv6X.js → sign-in-D_yoP0PF.js} +1 -1
  392. package/dist/signatures-BRS_p3WD.d.ts +34 -0
  393. package/dist/signatures-DsWv_bYR.js +103 -0
  394. package/dist/{signers-4y62_VIi.d.ts → signers-cpdmZYrv.d.ts} +1 -1
  395. package/dist/solid/index.d.ts +9 -18
  396. package/dist/solid/index.js +2 -2
  397. package/dist/solid-start/index.d.ts +6 -6
  398. package/dist/solid-start/index.js +7 -7
  399. package/dist/spec/index.d.ts +134 -0
  400. package/dist/spec/index.js +353 -0
  401. package/dist/{spec-pins-C89s6DyW.d.ts → spec-pins-CwzDY25w.d.ts} +18 -1
  402. package/dist/{spec-pins--j6mTok4.js → spec-pins-DsLfUH7l.js} +14 -1
  403. package/dist/sql/index.d.ts +145 -119
  404. package/dist/sql/index.js +19921 -19798
  405. package/dist/{executor-De1Of3m3.js → sql-CwuqaQ4Y.js} +34 -169
  406. package/dist/ssr/index.d.ts +4 -4
  407. package/dist/ssr/index.js +3 -2
  408. package/dist/{standard-BK0cqJ7y.js → standard-DkzZUneg.js} +2 -2
  409. package/dist/{standard-CYsm7xpT.d.ts → standard-lmkbOtPB.d.ts} +1 -1
  410. package/dist/{stats-D_AD9GGu.js → stats-DhU78Ctf.js} +8 -4
  411. package/dist/storage/index.d.ts +4 -6
  412. package/dist/storage/index.js +16 -17
  413. package/dist/{bucket-Cl46E3jS.d.ts → storage-api-CB7Zl1Ci.d.ts} +243 -8
  414. package/dist/{store-CGjgWu5n.d.ts → store-DsIYEBnv.d.ts} +1 -1
  415. package/dist/streams/index.d.ts +4 -4
  416. package/dist/streams/index.js +5 -4
  417. package/dist/streams/redis/index.d.ts +1 -1
  418. package/dist/streams/redis/index.js +5 -11
  419. package/dist/{stripe-BMj5LtsT.js → stripe-v-Y2lmop.js} +2 -8
  420. package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
  421. package/dist/supabase-mcp-Cpn5A4i-.js +28 -0
  422. package/dist/{support-ig_K4PvS.js → support-D1pFFouF.js} +71 -35
  423. package/dist/{support-view-CVOJJLpc.d.ts → support-view-scqMgtOo.d.ts} +1 -1
  424. package/dist/svelte/index.d.ts +8 -17
  425. package/dist/svelte/index.js +2 -2
  426. package/dist/sveltekit/index.d.ts +7 -7
  427. package/dist/sveltekit/index.js +10 -12
  428. package/dist/table-schema-htM_SbCW.js +286 -0
  429. package/dist/{tags-Cx-LnIQP.d.ts → tags-BO9LjtWG.d.ts} +1 -1
  430. package/dist/tanstack-db/index.d.ts +2 -2
  431. package/dist/tanstack-db/supabase/index.d.ts +52 -0
  432. package/dist/tanstack-db/supabase/index.js +97 -0
  433. package/dist/tanstack-start/index.d.ts +6 -6
  434. package/dist/tanstack-start/index.js +8 -12
  435. package/dist/{tee-CoEppCER.js → tee-Cb98Vn3b.js} +1 -1
  436. package/dist/{template--jDkl3UP.js → template-lPVh-EwW.js} +11 -2
  437. package/dist/{temporal-required-BVvW7SYJ.js → temporal-required-BtynQtM-.js} +1 -1
  438. package/dist/{tenant-BxNFk9bx.d.ts → tenant-CM368LXb.d.ts} +2 -2
  439. package/dist/testing/index.d.ts +249 -118
  440. package/dist/testing/index.js +1418 -870
  441. package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
  442. package/dist/types-BRTSpOIh.js +5 -0
  443. package/dist/{types-C05bxW-W.d.ts → types-Bb_4-vdW.d.ts} +4 -4
  444. package/dist/{types-AYOvcyep.d.ts → types-CD6yCDx3.d.ts} +5 -5
  445. package/dist/{types-6rocye-y.d.ts → types-CbOUc5IH.d.ts} +4 -4
  446. package/dist/{types-6BdhkmZe.d.ts → types-CoE5Zwy4.d.ts} +8 -0
  447. package/dist/{types-DGs5L0VN.d.ts → types-DSJ3-m9X.d.ts} +4 -4
  448. package/dist/{queue-CLJurhdy.d.ts → types-D__3EN0q.d.ts} +17 -19
  449. package/dist/{usage-CrvrL2vw.d.ts → usage-D0NNUFfr.d.ts} +3 -3
  450. package/dist/{vault-wlbBhqm7.d.ts → vault-BpmApxxW.d.ts} +3 -3
  451. package/dist/vercel-connect/index.d.ts +1 -1
  452. package/dist/vercel-connect/index.js +5 -11
  453. package/dist/{verify-DPuWngD4.d.ts → verify-C91Wyp40.d.ts} +5 -35
  454. package/dist/verify-CJbYfADA.js +124 -0
  455. package/dist/{version-C6OfRAIn.js → version-Cq8gfDbd.js} +1 -1
  456. package/dist/{view-BeFcRV6G.js → view-D5ryq3gz.js} +1 -1
  457. package/dist/{view-CF7ihnkg.d.ts → view-TpXEUcVN.d.ts} +3 -3
  458. package/dist/vue/index.d.ts +9 -18
  459. package/dist/vue/index.js +2 -2
  460. package/dist/{watch-Xuxrvxq-.js → watch-BcvtAHOd.js} +2 -2
  461. package/dist/{watch-DI34G86j.d.ts → watch-COzRWvVN.d.ts} +23 -9
  462. package/dist/{wire-DtZQ4sdE.js → wire-Df3EWkG8.js} +2 -2
  463. package/dist/{workflow-builder-DJ1oHn8g.js → workflow-builder-CHqHpAVt.js} +6 -5
  464. package/dist/workflow-sdk/builder/index.d.ts +3 -3
  465. package/dist/workflow-sdk/index.d.ts +1 -1
  466. package/dist/workflow-sdk/world/index.d.ts +23 -17
  467. package/dist/workflow-sdk/world/index.js +59 -76
  468. package/dist/{workflow-sdk-B3yLD6Br.d.ts → workflow-sdk-DTZyrvNo.d.ts} +3 -3
  469. package/dist/{workflow-sdk-world-D-prir6O.js → workflow-sdk-world-CMV1ahFW.js} +528 -526
  470. package/dist/{workflows-B0j9WKPu.d.ts → workflows-CcpCBfIe.d.ts} +3 -3
  471. package/dist/{workflows-wu1WWBn7.js → workflows-IvxzG2cl.js} +5 -4
  472. package/package.json +54 -3
  473. package/schemas/config-v1.json +243 -0
  474. package/schemas/doctor-report-v1.json +4 -1
  475. package/schemas/spec-manifest-v1.json +95 -0
  476. package/skills/better-supabase/SKILL.md +8 -4
  477. package/skills/better-supabase/references/troubleshooting.md +20 -20
  478. package/skills/better-supabase-api/references/expo.md +6 -3
  479. package/skills/better-supabase-api/references/powersync.md +2 -1
  480. package/dist/cli/config-B9HkL8nF.js +0 -2
  481. package/dist/cli/gen-CCMc39Dx.js +0 -3100
  482. package/dist/cli/gen-DRmzPI75.js +0 -2
  483. package/dist/cli/prompts-BTYQGunc.js +0 -2
  484. package/dist/cli/run-BqDPh9UH.js +0 -361
  485. package/dist/config-Dn7F5k9A.js +0 -202
  486. package/dist/history-BZih6SFP.js +0 -64
  487. package/dist/index-BkWT_uBO.d.ts +0 -51
  488. package/dist/index-Bxih3l0u.d.ts +0 -81
  489. package/dist/index-CaxrMD1A.d.ts +0 -1
  490. package/dist/index-DQh4VCc9.d.ts +0 -98
  491. package/dist/keys-4MnkWTTh.js +0 -35
  492. package/dist/messages-DYP0sUTe.d.ts +0 -59
  493. package/dist/modules-dxrVK3ID.js +0 -228
  494. package/dist/path-Cv__-OTj.d.ts +0 -17
  495. package/dist/resource-BsvzCMlX.js +0 -212
  496. package/dist/resource-IPS5xi9q.d.ts +0 -74
  497. package/dist/template-CwO38Do8.d.ts +0 -6
  498. package/dist/verify-DL41hbvY.js +0 -232
  499. package/dist/cli/{read-sets-CETOSFx4.js → read-sets-DjJrm8Wj.js} +1 -1
@@ -1,8 +1,8 @@
1
1
  import { t as and } from "../../types-6cYK9pbJ.js";
2
- import { a as ok, t as AsyncResult } from "../../result-DzUbqgdW.js";
2
+ import { a as ok, t as AsyncResult } from "../../result-DEqHCMKP.js";
3
3
  import { r as definePlugin } from "../../plugin-tfXW1-qO.js";
4
4
  import { n as scopeOperation } from "../../scope-CDHcS7dE.js";
5
- import { a as insertsOnly, i as guardManaged, o as isNotNull, s as isNull, t as dbName, u as withDefault } from "../../shared-CxWmcyqB.js";
5
+ import { a as insertsOnly, c as withDefault, i as guardManaged, o as isNotNull, s as isNull, t as dbName } from "../../shared-DHjhfRdV.js";
6
6
  //#region src/plugins/soft-delete/index.ts
7
7
  function deletedColumn(table) {
8
8
  return dbName(table, table.flags.softDelete);
@@ -28,6 +28,13 @@ function softDelete() {
28
28
  name: "softDelete",
29
29
  enforce: "pre",
30
30
  scopes: ["softDelete"],
31
+ describe(api) {
32
+ for (const { table } of api.resources) {
33
+ const flag = table.flags.softDelete;
34
+ if (!flag) continue;
35
+ api.markReadOnly(table.key, flag, "Set when the row is deleted. Deleted rows are not returned, and delete sets this column instead of removing the row.");
36
+ }
37
+ },
31
38
  transformQuery(op, { options }) {
32
39
  const hardDelete = op.kind === "delete" && options["hard"] === true;
33
40
  const withDeleted = options["withDeleted"] === true || hardDelete;
@@ -1,5 +1,5 @@
1
- import { P as SchemaMeta } from "../../types-6BdhkmZe.js";
2
- import { d as Plugin, m as RequestContext, o as HasFlag, p as RepositoryExtension } from "../../plugin-FGY8UhYm.js";
1
+ import { P as SchemaMeta } from "../../types-CoE5Zwy4.js";
2
+ import { d as Plugin, m as RequestContext, o as HasFlag, p as RepositoryExtension } from "../../plugin-CPK2HsbY.js";
3
3
  //#region src/plugins/tenant/index.d.ts
4
4
  /**
5
5
  * Dotted paths to the string claims of `C` (up to three levels), e.g.
@@ -23,6 +23,11 @@ export interface TenantOptions<C = unknown> {
23
23
  * `error` (default) fails with `forbidden`; `skip` leaves it to RLS.
24
24
  */
25
25
  readonly onMissing?: "error" | "skip";
26
+ /**
27
+ * The request header `resolve` reads the tenant from. The plugin does not
28
+ * read it; `defineApi` documents it as a parameter of tenant tables.
29
+ */
30
+ readonly header?: string;
26
31
  }
27
32
  export interface TenantFindArgs {
28
33
  /** Skip the tenant filter for this call (admin tooling, jobs). RLS still applies. */
@@ -1,9 +1,9 @@
1
1
  import { t as DbException } from "../../db-exception-CnWcYPxL.js";
2
- import { n as dbError } from "../../errors-B11Duf73.js";
2
+ import { n as dbError } from "../../errors-2M6CKMP4.js";
3
3
  import { a as spansAllTenants, r as definePlugin } from "../../plugin-tfXW1-qO.js";
4
4
  import { n as scopeOperation } from "../../scope-CDHcS7dE.js";
5
5
  import { o as tenantFrom, s as tenantPathsFor } from "../../claims-PqzCxaTD.js";
6
- import { a as insertsOnly, n as equals, r as forbidden, t as dbName } from "../../shared-CxWmcyqB.js";
6
+ import { a as insertsOnly, n as equals, r as forbidden, t as dbName } from "../../shared-DHjhfRdV.js";
7
7
  //#region src/plugins/tenant/index.ts
8
8
  /**
9
9
  * The tenant for a request: `context.tenant`, then the configured claim.
@@ -52,6 +52,20 @@ function tenant(options = {}) {
52
52
  return definePlugin({
53
53
  name: "tenant",
54
54
  scopes: ["tenant"],
55
+ describe(api) {
56
+ for (const { table } of api.resources) {
57
+ const flag = table.flags.tenant;
58
+ if (!flag) continue;
59
+ api.markReadOnly(table.key, flag, "Set from the request's tenant.");
60
+ if (options.header) api.addParameter(table.key, {
61
+ name: options.header,
62
+ in: "header",
63
+ required: onMissing === "error",
64
+ description: "The tenant the request acts for.",
65
+ schema: { type: "string" }
66
+ });
67
+ }
68
+ },
55
69
  context(context, { schema }) {
56
70
  if (spansAllTenants(context)) return context;
57
71
  const id = resolvedFor(context, schema);
@@ -1,4 +1,4 @@
1
- import { d as Plugin } from "../../plugin-FGY8UhYm.js";
1
+ import { d as Plugin } from "../../plugin-CPK2HsbY.js";
2
2
  //#region src/plugins/timestamps/index.d.ts
3
3
  /**
4
4
  * Stamps the columns generated as `Flags.timestamps`: `createdAt` on insert,
@@ -1,5 +1,5 @@
1
1
  import { r as definePlugin } from "../../plugin-tfXW1-qO.js";
2
- import { a as insertsOnly, i as guardManaged, t as dbName, u as withDefault } from "../../shared-CxWmcyqB.js";
2
+ import { a as insertsOnly, c as withDefault, i as guardManaged, t as dbName } from "../../shared-DHjhfRdV.js";
3
3
  //#region src/plugins/timestamps/index.ts
4
4
  /**
5
5
  * Stamps the columns generated as `Flags.timestamps`: `createdAt` on insert,
@@ -11,6 +11,13 @@ import { a as insertsOnly, i as guardManaged, t as dbName, u as withDefault } fr
11
11
  function timestamps() {
12
12
  return definePlugin({
13
13
  name: "timestamps",
14
+ describe(api) {
15
+ for (const { table } of api.resources) {
16
+ const flags = table.flags.timestamps;
17
+ if (flags?.createdAt) api.markReadOnly(table.key, flags.createdAt, "Set by the server when the row is created.");
18
+ if (flags?.updatedAt) api.markReadOnly(table.key, flags.updatedAt, "Set by the server on every write.");
19
+ }
20
+ },
14
21
  beforeMutation(op, { table, now, options }) {
15
22
  const flags = table.flags.timestamps;
16
23
  if (!flags) return op;
@@ -1,5 +1,5 @@
1
- import { d as Plugin } from "../../plugin-FGY8UhYm.js";
2
- import { t as StandardSchemaV1 } from "../../standard-CYsm7xpT.js";
1
+ import { d as Plugin } from "../../plugin-CPK2HsbY.js";
2
+ import { t as StandardSchemaV1 } from "../../standard-lmkbOtPB.js";
3
3
  //#region src/plugins/validation/index.d.ts
4
4
  export interface TableValidators {
5
5
  /** Validates inserts and upserts, with app-cased keys. */
@@ -1,9 +1,9 @@
1
1
  import { t as DbException } from "../../db-exception-CnWcYPxL.js";
2
- import { n as dbError } from "../../errors-B11Duf73.js";
3
- import { i as encodeValue, r as decodeValue } from "../../wire-DtZQ4sdE.js";
2
+ import { n as dbError } from "../../errors-2M6CKMP4.js";
3
+ import { i as encodeValue, r as decodeValue } from "../../wire-Df3EWkG8.js";
4
4
  import { r as definePlugin } from "../../plugin-tfXW1-qO.js";
5
- import { n as validate } from "../../standard-BK0cqJ7y.js";
6
- import { c as toApp, l as toDb } from "../../shared-CxWmcyqB.js";
5
+ import { n as validate } from "../../standard-DkzZUneg.js";
6
+ import { n as toDb, t as toApp } from "../../casing-DdFWEtqr.js";
7
7
  //#region src/plugins/validation/index.ts
8
8
  /**
9
9
  * Rows reach plugins in wire form (ISO text, decimal text), while generated
@@ -1,5 +1,5 @@
1
- import { r as Executor } from "./executor-DvsBbNBS.js";
2
- import { t as SqlClient } from "./executor-DbvExCFC.js";
1
+ import { r as Executor } from "./executor-Drzu3dBK.js";
2
+ import { t as SqlClient } from "./executor-ngjKL_Pe.js";
3
3
  //#region src/postgres/pool.d.ts
4
4
  /** The part of a `pg` pool client `createPostgres` uses. */
5
5
  interface PgPoolClient {
@@ -1,7 +1,7 @@
1
- import { v as Operation } from "../executor-DvsBbNBS.js";
2
- import { n as fromPgError, r as postgresExecutor, t as SqlClient } from "../executor-DbvExCFC.js";
3
- import { a as PostgresTimeouts, c as createPostgres, i as PostgresOptions, n as PgPool, o as SessionOptions, r as PgPoolClient, s as SqlClaims, t as BetterPostgres } from "../pool-CAu2nLrL.js";
4
- import { t as Compiler } from "../compiler-DY_wkj4R.js";
1
+ import { v as Operation } from "../executor-Drzu3dBK.js";
2
+ import { n as fromPgError, r as postgresExecutor, t as SqlClient } from "../executor-ngjKL_Pe.js";
3
+ import { a as PostgresTimeouts, c as createPostgres, i as PostgresOptions, n as PgPool, o as SessionOptions, r as PgPoolClient, s as SqlClaims, t as BetterPostgres } from "../pool-gkhbGp2E.js";
4
+ import { t as Compiler } from "../compiler-V1qvcST1.js";
5
5
  //#region src/compile/sql.d.ts
6
6
  interface SqlQuery {
7
7
  readonly text: string;
@@ -1,4 +1,5 @@
1
- import { i as quoteIdent, n as postgresExecutor, r as compileSql, t as fromPgError } from "../executor-De1Of3m3.js";
1
+ import { n as quoteIdent, t as compileSql } from "../sql-CwuqaQ4Y.js";
2
+ import { n as postgresExecutor, t as fromPgError } from "../executor-B_Hfobee.js";
2
3
  import { Pool } from "pg";
3
4
  //#region src/postgres/pool.ts
4
5
  const DEFAULT_TIMEOUTS = {
@@ -1,4 +1,4 @@
1
- import { v as Operation } from "./executor-DvsBbNBS.js";
1
+ import { v as Operation } from "./executor-Drzu3dBK.js";
2
2
  //#region src/compile/postgrest.d.ts
3
3
  /**
4
4
  * A compiled PostgREST request, expressed as calls on the public
@@ -1,7 +1,7 @@
1
- import { t as AuthSnapshot } from "../bind-Bu_ZNa3W.js";
2
- import { _ as SqliteValue, a as postgrestTimestamp, b as quoteSqliteIdent, c as SqliteCompilerOptions, d as SqliteKeyedPlan, f as SqliteKeys, g as SqliteSelectPlan, h as SqliteReturning, i as fromSqliteError, l as SqliteDecode, m as SqliteQuery, n as PowerSyncExecutorOptions, o as powersyncExecutor, p as SqlitePlan, r as SqliteContextLike, s as SqliteColumn, t as PowerSyncDatabaseLike, u as SqliteInsertPlan, v as compileSqlite, x as sqliteValue, y as likeToGlob } from "../executor-CaWigTyR.js";
3
- import { a as sqliteCompiler, i as checkSqlite, n as sqliteTables, r as watch, t as WatchOptions } from "../watch-DI34G86j.js";
4
- import { a as UploadConnector, c as UploadRepository, d as uploadOutcome, i as RejectedStore, l as UploadRoute, n as CrudQueueLike, o as UploadConnectorOptions, r as RejectedChange, s as UploadOutcome, t as CrudEntryLike, u as createUploadConnector } from "../connector-Dv8kK0MO.js";
1
+ import { t as AuthSnapshot } from "../bind-CQ5mPyX1.js";
2
+ import { _ as SqliteValue, a as fromSqliteError, b as quoteSqliteIdent, c as SqliteCompilerOptions, d as SqliteKeyedPlan, f as SqliteKeys, g as SqliteSelectPlan, h as SqliteReturning, i as SqliteContextLike, l as SqliteDecode, m as SqliteQuery, n as PowerSyncExecutorOptions, o as postgrestTimestamp, p as SqlitePlan, r as powersyncExecutor, s as SqliteColumn, t as PowerSyncDatabaseLike, u as SqliteInsertPlan, v as compileSqlite, x as sqliteValue, y as likeToGlob } from "../executor-DfEtf0cq.js";
3
+ import { a as checkSqlite, i as CheckSqliteOptions, n as sqliteTables, o as sqliteCompiler, r as watch, t as WatchOptions } from "../watch-COzRWvVN.js";
4
+ import { a as UploadConnector, c as UploadRepository, d as uploadOutcome, i as RejectedStore, l as UploadRoute, n as CrudQueueLike, o as UploadConnectorOptions, r as RejectedChange, s as UploadOutcome, t as CrudEntryLike, u as createUploadConnector } from "../connector-CySQEFcW.js";
5
5
  //#region src/powersync/auth.d.ts
6
6
  /** The part of a PowerSync database `syncWithAuth` drives. */
7
7
  interface SyncedDatabaseLike<C> {
@@ -40,4 +40,4 @@ interface SyncWithAuthOptions<C> {
40
40
  */
41
41
  export declare function syncWithAuth<C>(db: SyncedDatabaseLike<C>, auth: AuthSourceLike, options: SyncWithAuthOptions<C>): () => void;
42
42
  //#endregion
43
- export { type AuthSourceLike, type CrudEntryLike, type CrudQueueLike, type PowerSyncDatabaseLike, type PowerSyncExecutorOptions, type RejectedChange, type RejectedStore, type SqliteColumn, type SqliteCompilerOptions, type SqliteContextLike, type SqliteDecode, type SqliteInsertPlan, type SqliteKeyedPlan, type SqliteKeys, type SqlitePlan, type SqliteQuery, type SqliteReturning, type SqliteSelectPlan, type SqliteValue, type SyncWithAuthOptions, type SyncedDatabaseLike, type UploadConnector, type UploadConnectorOptions, type UploadOutcome, type UploadRepository, type UploadRoute, type WatchOptions, checkSqlite, compileSqlite, createUploadConnector, fromSqliteError, likeToGlob, postgrestTimestamp, powersyncExecutor, quoteSqliteIdent, sqliteCompiler, sqliteTables, sqliteValue, uploadOutcome, watch };
43
+ export { type AuthSourceLike, type CheckSqliteOptions, type CrudEntryLike, type CrudQueueLike, type PowerSyncDatabaseLike, type PowerSyncExecutorOptions, type RejectedChange, type RejectedStore, type SqliteColumn, type SqliteCompilerOptions, type SqliteContextLike, type SqliteDecode, type SqliteInsertPlan, type SqliteKeyedPlan, type SqliteKeys, type SqlitePlan, type SqliteQuery, type SqliteReturning, type SqliteSelectPlan, type SqliteValue, type SyncWithAuthOptions, type SyncedDatabaseLike, type UploadConnector, type UploadConnectorOptions, type UploadOutcome, type UploadRepository, type UploadRoute, type WatchOptions, checkSqlite, compileSqlite, createUploadConnector, fromSqliteError, likeToGlob, postgrestTimestamp, powersyncExecutor, quoteSqliteIdent, sqliteCompiler, sqliteTables, sqliteValue, uploadOutcome, watch };
@@ -1,7 +1,7 @@
1
- import { n as dbError } from "../errors-B11Duf73.js";
2
- import { r as err } from "../result-DzUbqgdW.js";
3
- import { n as watch, t as sqliteTables } from "../watch-Xuxrvxq-.js";
4
- import { a as sqliteCompiler, c as quoteSqliteIdent, i as checkSqlite, l as sqliteValue, n as postgrestTimestamp, o as compileSqlite, r as powersyncExecutor, s as likeToGlob, t as fromSqliteError } from "../executor-Bq28caBo.js";
1
+ import { n as dbError } from "../errors-2M6CKMP4.js";
2
+ import { r as err } from "../result-DEqHCMKP.js";
3
+ import { n as watch, t as sqliteTables } from "../watch-BcvtAHOd.js";
4
+ import { a as sqliteCompiler, c as quoteSqliteIdent, i as checkSqlite, l as sqliteValue, n as fromSqliteError, o as compileSqlite, r as postgrestTimestamp, s as likeToGlob, t as powersyncExecutor } from "../executor-B-fD7DLt.js";
5
5
  //#region src/powersync/auth.ts
6
6
  /**
7
7
  * Syncs while a user is signed in: connects on sign-in, and on sign-out
@@ -1,6 +1,6 @@
1
- import { b as DbError, f as Result } from "../../result-D7y2fT87.js";
2
- import { t as PowerSyncDatabaseLike } from "../../executor-CaWigTyR.js";
3
- import { i as RejectedStore, r as RejectedChange } from "../../connector-Dv8kK0MO.js";
1
+ import { b as DbError, f as Result } from "../../result-BchM1XZn.js";
2
+ import { t as PowerSyncDatabaseLike } from "../../executor-DfEtf0cq.js";
3
+ import { i as RejectedStore, r as RejectedChange } from "../../connector-CySQEFcW.js";
4
4
  //#region src/powersync/react/index.d.ts
5
5
  export interface UseWatchOptions<T> {
6
6
  readonly db: PowerSyncDatabaseLike;
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import { n as watch } from "../../watch-Xuxrvxq-.js";
2
+ import { n as watch } from "../../watch-BcvtAHOd.js";
3
3
  import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
4
4
  //#region src/powersync/react/index.ts
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { n as dbError } from "./errors-B11Duf73.js";
1
+ import { n as dbError } from "./errors-2M6CKMP4.js";
2
2
  //#region src/core/problem.ts
3
3
  const PROBLEM_TYPE_BASE = "https://bettersupabase.com/problems/";
4
4
  const PROBLEM_CONTENT_TYPE = "application/problem+json";
@@ -52,6 +52,8 @@ function toProblem(error, options = {}) {
52
52
  if ("issues" in error) problem["issues"] = error.issues;
53
53
  if ("required" in error) problem["required"] = error.required;
54
54
  if ("scopes" in error) problem["scopes"] = error.scopes;
55
+ if ("permission" in error) problem["permission"] = error.permission;
56
+ if ("approval" in error) problem["approval"] = error.approval;
55
57
  if ("retryAfter" in error) problem["retryAfter"] = error.retryAfter;
56
58
  if ("meter" in error) problem["meter"] = error.meter;
57
59
  if ("limit" in error) problem["limit"] = error.limit;
@@ -102,6 +104,8 @@ function fromProblem(problem) {
102
104
  "column",
103
105
  "required",
104
106
  "scopes",
107
+ "permission",
108
+ "approval",
105
109
  "retryAfter",
106
110
  "meter",
107
111
  "limit",
@@ -111,5 +115,12 @@ function fromProblem(problem) {
111
115
  if (kind !== "validation") delete extra["issues"];
112
116
  return dbError(kind, problem.detail ?? problem.title, extra);
113
117
  }
118
+ /** An empty `405` that lists the methods a route does accept. */
119
+ function methodNotAllowed(allowed) {
120
+ return new Response(null, {
121
+ status: 405,
122
+ headers: { allow: allowed.join(", ") }
123
+ });
124
+ }
114
125
  //#endregion
115
- export { problemResponse as a, isProblem as i, PROBLEM_TYPE_BASE as n, toProblem as o, fromProblem as r, PROBLEM_CONTENT_TYPE as t };
126
+ export { methodNotAllowed as a, isProblem as i, PROBLEM_TYPE_BASE as n, problemResponse as o, fromProblem as r, toProblem as s, PROBLEM_CONTENT_TYPE as t };
@@ -1,4 +1,4 @@
1
- import { E as ValidationIssue, b as DbError, x as DbErrorKind } from "./result-D7y2fT87.js";
1
+ import { E as ValidationIssue, b as DbError, x as DbErrorKind } from "./result-BchM1XZn.js";
2
2
  //#region src/core/problem.d.ts
3
3
  /** RFC 9457 Problem Details, with the `DbError` fields as extension members. */
4
4
  interface ProblemDetails {
@@ -19,6 +19,12 @@ interface ProblemDetails {
19
19
  readonly required?: "aal1" | "aal2";
20
20
  /** The OAuth scopes a `forbidden` answer needs. */
21
21
  readonly scopes?: readonly string[];
22
+ /** The permission key an authorizer denied. */
23
+ readonly permission?: string;
24
+ /** The pending approval of an `APPROVAL_REQUIRED` answer. */
25
+ readonly approval?: {
26
+ readonly id: string;
27
+ };
22
28
  /** Seconds until a `rate_limited` or `quota_exceeded` caller may retry. */
23
29
  readonly retryAfter?: number;
24
30
  /** The meter a `quota_exceeded` answer ran out of, and its limit. */
@@ -1,4 +1,4 @@
1
- import { n as dbError } from "./errors-B11Duf73.js";
1
+ import { n as dbError } from "./errors-2M6CKMP4.js";
2
2
  //#region src/credentials/provider.ts
3
3
  /** `ref` bound to `tenant`'s namespace. */
4
4
  function tenantCredentialRef(tenant, ref) {
@@ -1,6 +1,6 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { b as DbError, t as AsyncResult } from "./result-D7y2fT87.js";
3
- import { r as AuthState } from "./resolve-ChTYeTEl.js";
2
+ import { b as DbError, t as AsyncResult } from "./result-BchM1XZn.js";
3
+ import { r as AuthState } from "./resolve-MxXVWyhd.js";
4
4
  //#region src/credentials/provider.d.ts
5
5
  /**
6
6
  * Names a credential without holding it. Tables store this as a
@@ -1,4 +1,4 @@
1
- import { t as escapeLike } from "../escape-like-ImTK0ps_.js";
1
+ import { t as escapeLike } from "../escape-like-DDWoHzh_.js";
2
2
  import { n as invalidateTables, t as BetterQueryMeta } from "../invalidate-BBqhpxyB.js";
3
- import { _ as invalidateOnMutation, a as UserChangeSource, c as InfiniteExtras, d as QueriesOptions, f as QueryHelpers, g as createQueries, h as TableQueries, i as optimistic, l as InfiniteOptionsOf, m as QueryOptionsOf, n as OptimisticSnapshot, o as clearOnUserChange, p as QueryKeyOf, r as OptimisticTarget, s as BetterQueries, t as OptimisticHandlers, u as MutationOptionsOf, v as queryCache } from "../index-Bepi-Hgg.js";
3
+ import { _ as invalidateOnMutation, a as UserChangeSource, c as InfiniteExtras, d as QueriesOptions, f as QueryHelpers, g as createQueries, h as TableQueries, i as optimistic, l as InfiniteOptionsOf, m as QueryOptionsOf, n as OptimisticSnapshot, o as clearOnUserChange, p as QueryKeyOf, r as OptimisticTarget, s as BetterQueries, t as OptimisticHandlers, u as MutationOptionsOf, v as queryCache } from "../index-DoNVLHOU.js";
4
4
  export { type BetterQueries, type BetterQueryMeta, type InfiniteExtras, type InfiniteOptionsOf, type MutationOptionsOf, type OptimisticHandlers, type OptimisticSnapshot, type OptimisticTarget, type QueriesOptions, type QueryHelpers, type QueryKeyOf, type QueryOptionsOf, type TableQueries, type UserChangeSource, clearOnUserChange, createQueries, escapeLike, invalidateOnMutation, invalidateTables, optimistic, queryCache };
@@ -1,4 +1,4 @@
1
1
  import { t as escapeLike } from "../escape-like-DHfx6jRr.js";
2
2
  import { r as invalidateTables, t as clearOnUserChange } from "../user-change-XzvgafU4.js";
3
- import { i as queryCache, n as createQueries, r as invalidateOnMutation, t as optimistic } from "../query-BQ-NaZon.js";
3
+ import { i as queryCache, n as createQueries, r as invalidateOnMutation, t as optimistic } from "../query-Ctz-qKRx.js";
4
4
  export { clearOnUserChange, createQueries, escapeLike, invalidateOnMutation, invalidateTables, optimistic, queryCache };
@@ -1,4 +1,4 @@
1
- import { n as isPlainObject } from "./clone-BfgmLU90.js";
1
+ import { r as isPlainObject } from "./clone-dN9XOL1K.js";
2
2
  import { t as DbException } from "./db-exception-CnWcYPxL.js";
3
3
  import { t as invalidationTargets } from "./tables-Cb-3_VWc.js";
4
4
  import { r as invalidateTables } from "./user-change-XzvgafU4.js";
@@ -0,0 +1,260 @@
1
+ import { n as dbError } from "./errors-2M6CKMP4.js";
2
+ import { a as ok, t as AsyncResult } from "./result-DEqHCMKP.js";
3
+ import { n as isRecord } from "./guards-6F2bCtQR.js";
4
+ import { o as problemResponse } from "./problem-CJvFeGu7.js";
5
+ import { a as verifyWebhook } from "./signatures-DsWv_bYR.js";
6
+ import { D as seconds, E as run, N as toInstant, P as workerId, a as budget, f as leaseHeartbeat, i as blockCall, l as errorText, n as applyTemporal, x as readBodyCapped } from "./block-helpers-Cy3pB96I.js";
7
+ //#region src/blocks/jobs/webhook-inbox.ts
8
+ function defaultType(payload) {
9
+ if (typeof payload !== "object" || payload === null) return null;
10
+ const type = payload.type;
11
+ return typeof type === "string" ? type : null;
12
+ }
13
+ /** Stores one webhook through `receive_webhook`; `duplicate` when the id was stored before. */
14
+ async function receiveWebhook(sql, input) {
15
+ const [row] = await sql.queryRaw("select * from better_supabase.receive_webhook($1, $2, $3, $4, $5, $6, $7)", [
16
+ input.source,
17
+ input.id,
18
+ input.type ?? null,
19
+ JSON.stringify(input.payload),
20
+ JSON.stringify(input.headers),
21
+ input.tenant,
22
+ input.maxAttempts ?? null
23
+ ]);
24
+ return {
25
+ id: Number(row.id),
26
+ duplicate: row.duplicate
27
+ };
28
+ }
29
+ /** Store-then-process webhooks: acknowledge fast, process with retries, never twice. */
30
+ function createWebhookInbox(sql, options) {
31
+ applyTemporal(options);
32
+ const worker = options.worker ?? workerId();
33
+ const format = options.problem;
34
+ const maxAttempts = options.maxAttempts ?? 8;
35
+ if (!Number.isInteger(maxAttempts) || maxAttempts < 1) throw new TypeError(`createWebhookInbox maxAttempts must be a positive integer, not ${String(maxAttempts)}`);
36
+ const maxBodyBytes = options.maxBodyBytes ?? 1048576;
37
+ if (!Number.isInteger(maxBodyBytes) || maxBodyBytes < 1) throw new TypeError(`createWebhookInbox maxBodyBytes must be a positive integer, not ${String(maxBodyBytes)}`);
38
+ const verified = async (request, body) => {
39
+ if (options.verify) return options.verify(request, body);
40
+ const result = await verifyWebhook({
41
+ headers: request.headers,
42
+ body
43
+ }, options.secrets ?? []);
44
+ return result.ok ? ok({
45
+ id: result.data.id,
46
+ payload: result.data.payload
47
+ }) : result;
48
+ };
49
+ const save = (event) => run(() => receiveWebhook(sql, {
50
+ source: options.source,
51
+ id: event.id,
52
+ type: event.type === void 0 ? (options.typeOf ?? defaultType)(event.payload) : event.type,
53
+ payload: event.payload,
54
+ headers: event.headers ?? {},
55
+ tenant: (event.tenant === void 0 ? options.tenantOf?.(event.payload) : event.tenant) ?? null,
56
+ maxAttempts
57
+ }));
58
+ return {
59
+ store: save,
60
+ list: (listOptions) => run(async () => {
61
+ return (await sql.queryRaw("select * from better_supabase.list_webhooks($1, $2, $3, $4)", [
62
+ listOptions.tenant,
63
+ options.source,
64
+ listOptions.status ?? null,
65
+ listOptions.limit ?? 100
66
+ ])).map((row) => ({
67
+ id: Number(row.id),
68
+ messageId: row.message_id,
69
+ type: row.event_type,
70
+ status: row.status ?? "pending",
71
+ attempts: row.attempts,
72
+ maxAttempts: row.max_attempts ?? maxAttempts,
73
+ lastError: row.last_error ?? null,
74
+ tenant: row.tenant ?? null,
75
+ receivedAt: toInstant(row.received_at),
76
+ processedAt: row.processed_at === null || row.processed_at === void 0 ? null : toInstant(row.processed_at)
77
+ }));
78
+ }),
79
+ purge: (purgeOptions = {}) => run(async () => {
80
+ const [row] = await sql.queryRaw("select better_supabase.purge_webhooks($1::interval, $2, $3, $4) as purged", [
81
+ seconds(purgeOptions.olderThan ?? "30 days"),
82
+ purgeOptions.includeDead ?? false,
83
+ purgeOptions.batch ?? 1e4,
84
+ purgeOptions.tenant ?? null
85
+ ]);
86
+ return row?.purged ?? 0;
87
+ }),
88
+ async receive(request) {
89
+ const instance = new URL(request.url).pathname;
90
+ if (request.method !== "POST") return new Response(null, {
91
+ status: 405,
92
+ headers: { allow: "POST" }
93
+ });
94
+ 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\``);
95
+ const body = await readBodyCapped(request.clone(), maxBodyBytes);
96
+ if (body === void 0) return problemResponse({
97
+ ...dbError("invalid_input", "The body is too large", { code: "WEBHOOK_TOO_LARGE" }),
98
+ status: 413
99
+ }, {
100
+ instance,
101
+ format
102
+ });
103
+ const message = await verified(request, body);
104
+ if (!message.ok) return problemResponse(message.error, {
105
+ instance,
106
+ format
107
+ });
108
+ const headers = Object.fromEntries((options.keepHeaders ?? []).flatMap((name) => {
109
+ const value = request.headers.get(name);
110
+ return value === null ? [] : [[name.toLowerCase(), value]];
111
+ }));
112
+ const stored = await save({
113
+ id: message.data.id,
114
+ payload: message.data.payload,
115
+ headers,
116
+ ...message.data.tenant === void 0 ? {} : { tenant: message.data.tenant }
117
+ });
118
+ if (!stored.ok) return problemResponse(stored.error, {
119
+ instance,
120
+ format
121
+ });
122
+ return Response.json(stored.data, { status: stored.data.duplicate ? 200 : 202 });
123
+ },
124
+ async process(handler, processOptions = {}) {
125
+ let succeeded = 0;
126
+ let failed = 0;
127
+ const lease = seconds(processOptions.lease ?? 300);
128
+ const spent = budget(processOptions.budgetMs);
129
+ for (;;) {
130
+ if (spent.expired()) return {
131
+ succeeded,
132
+ failed
133
+ };
134
+ const rows = await sql.queryRaw("select * from better_supabase.claim_webhooks($1, $2, $3, $4::interval)", [
135
+ options.source,
136
+ worker,
137
+ processOptions.batch ?? 10,
138
+ lease
139
+ ]);
140
+ if (rows.length === 0) return {
141
+ succeeded,
142
+ failed
143
+ };
144
+ for (const row of rows) {
145
+ const id = Number(row.id);
146
+ const attempt = row.attempts;
147
+ const extend = async () => {
148
+ const [held] = await sql.queryRaw("select better_supabase.extend_webhook($1, $2, $3, $4::interval) as lease", [
149
+ id,
150
+ worker,
151
+ attempt,
152
+ lease
153
+ ]);
154
+ return held?.lease ?? void 0;
155
+ };
156
+ const leaseSeconds = await extend();
157
+ if (leaseSeconds === void 0) continue;
158
+ const message = {
159
+ id,
160
+ source: row.source,
161
+ messageId: row.message_id,
162
+ type: row.event_type,
163
+ payload: row.payload,
164
+ headers: row.headers,
165
+ attempts: row.attempts,
166
+ maxAttempts: row.max_attempts ?? maxAttempts,
167
+ receivedAt: toInstant(row.received_at),
168
+ tenant: row.tenant ?? null,
169
+ progress: row.checkpoint ?? {},
170
+ async checkpoint(fields) {
171
+ const [saved] = await sql.queryRaw("select better_supabase.checkpoint_webhook($1, $2, $3, $4) as saved", [
172
+ id,
173
+ worker,
174
+ JSON.stringify(fields),
175
+ attempt
176
+ ]);
177
+ return saved?.saved ?? false;
178
+ }
179
+ };
180
+ const stopHeartbeat = leaseHeartbeat(leaseSeconds, () => void extend().catch(() => void 0));
181
+ try {
182
+ const outcome = await handler(message);
183
+ if (typeof outcome === "object" && outcome !== null && "ok" in outcome && outcome.ok === false) throw new Error(errorText(outcome.error ?? "The handler failed"));
184
+ const [done] = await sql.queryRaw("select better_supabase.complete_webhook($1, $2, $3) as done", [
185
+ message.id,
186
+ worker,
187
+ attempt
188
+ ]);
189
+ if (done?.done !== false) succeeded += 1;
190
+ } catch (cause) {
191
+ await sql.queryRaw("select better_supabase.fail_webhook($1, $2, $3, null, $4)", [
192
+ message.id,
193
+ worker,
194
+ errorText(cause),
195
+ attempt
196
+ ]);
197
+ failed += 1;
198
+ } finally {
199
+ stopHeartbeat();
200
+ }
201
+ }
202
+ }
203
+ }
204
+ };
205
+ }
206
+ //#endregion
207
+ //#region src/blocks/jobs/rate-limit.ts
208
+ const isTransport = (source) => "call" in source;
209
+ /**
210
+ * Fixed-window limits for keys that aren't claims, over the `rate-limit`
211
+ * module's counters. Pass a service SQL connection (`ctx.postgresAdmin`,
212
+ * `postgres.admin`), or a service-role `BlockTransport` such as
213
+ * `rpcTransport(adminClient)`.
214
+ */
215
+ function createRateLimit(source, options = {}) {
216
+ applyTemporal(options);
217
+ const hit = isTransport(source) ? overTransport(blockCall(source, void 0, options.mappers)) : overSql(source);
218
+ return { check: (scope, key, rule) => {
219
+ 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"));
220
+ return hit(scope, key, rule?.max ?? null, rule === void 0 ? null : seconds(rule.period));
221
+ } };
222
+ }
223
+ const overTransport = (call) => (scope, key, max, period) => call("check_rate_limit", {
224
+ scope,
225
+ key,
226
+ max_requests: max ?? void 0,
227
+ period: period ?? void 0
228
+ }, (value) => {
229
+ const row = isRecord(value) ? value : {};
230
+ return {
231
+ allowed: row["allowed"] === true,
232
+ remaining: Number(row["remaining"] ?? 0),
233
+ retryAfter: Number(row["retry_after"] ?? 0)
234
+ };
235
+ });
236
+ /** One `hit_rate_limit` call: whether the hit is allowed, what is left and when to retry. */
237
+ async function hitRateLimit(sql, scope, key, max, period) {
238
+ const [row] = await sql.queryRaw("select * from better_supabase.hit_rate_limit($1, $2, $3, $4::interval)", [
239
+ scope,
240
+ key,
241
+ max,
242
+ period
243
+ ]);
244
+ return {
245
+ allowed: row?.allowed ?? false,
246
+ remaining: row?.remaining ?? 0,
247
+ retryAfter: row?.retry_after ?? 0
248
+ };
249
+ }
250
+ const overSql = (sql) => (scope, key, max, period) => run(() => hitRateLimit(sql, scope, key, max, period));
251
+ /** A `problem+json` 429 with `Retry-After`, for a refused `check`. */
252
+ function rateLimited(decision, options = {}) {
253
+ const retryAfter = Math.max(1, Math.ceil(decision.retryAfter));
254
+ return problemResponse(dbError("rate_limited", options.detail ?? `Too many requests. Retry after ${retryAfter} seconds.`, { retryAfter }), {
255
+ ...options.instance === void 0 ? {} : { instance: options.instance },
256
+ format: options.problem
257
+ });
258
+ }
259
+ //#endregion
260
+ export { receiveWebhook as a, createWebhookInbox as i, hitRateLimit as n, rateLimited as r, createRateLimit as t };
@@ -1,12 +1,12 @@
1
- import { t as escapeLike } from "../escape-like-ImTK0ps_.js";
2
- import { s as Impersonator } from "../mfa-Daak8ukG.js";
3
- import { t as tenantOf } from "../tenant-BxNFk9bx.js";
4
- import { t as AuthSession } from "../view-CF7ihnkg.js";
5
- import { r as LiveCountSeed } from "../index-DunNRdnT.js";
6
- import { r as MembershipClaim } from "../entitlements-BKSVGtrG.js";
7
- import { n as supportOf, t as SupportView } from "../support-view-CVOJJLpc.js";
8
- import { a as BroadcastOptions, f as UseActionOptions, l as LiveQueryHookOptions, n as ActionInputOf, o as ClientLike, r as ActionResultOf, s as LiveCountHookOptions, t as fieldErrorsOf } from "../field-errors-BFOa7WhB.js";
9
- import { A as useLiveCount, C as BetterSupabaseProviderProps, D as createHooks, E as ProfileOf, M as useSupabase, O as useAuth, S as BetterSupabaseProvider, T as LiveCount, _ as ActionHandle, a as UploadTarget, b as useActionForm, c as useUpload, d as useDebouncedSearch, f as Presence, g as ActionForm, h as usePresence, i as UploadStatus, j as useLiveQuery, k as useBroadcast, l as DebouncedSearch, m as PresenceTopic, n as SignedUrlSource, o as UseUploadOptions, p as PresenceHookOptions, r as Upload, s as useSignedUrl, t as SignedUrl, u as DebouncedSearchOptions, v as UseActionFormOptions, w as ClaimsOf, x as BetterHooks, y as useAction } from "../index-CewnYSpv.js";
1
+ import { t as escapeLike } from "../escape-like-DDWoHzh_.js";
2
+ import { s as Impersonator } from "../mfa-SZc9YYyb.js";
3
+ import { t as tenantOf } from "../tenant-CM368LXb.js";
4
+ import { t as AuthSession } from "../view-TpXEUcVN.js";
5
+ import { r as LiveCountSeed } from "../index-BCHR4Ucl.js";
6
+ import { r as MembershipClaim } from "../entitlements-Ds8qoYZ-.js";
7
+ import { n as supportOf, t as SupportView } from "../support-view-scqMgtOo.js";
8
+ import { a as BroadcastOptions, c as LiveCountHookOptions, m as UseActionOptions, n as ActionInputOf, o as ClaimsOf, p as ProfileOf, r as ActionResultOf, s as ClientLike, t as fieldErrorsOf, u as LiveQueryHookOptions } from "../field-errors-DIe9XYWL.js";
9
+ import { A as useSupabase, C as BetterSupabaseProviderProps, D as useBroadcast, E as useAuth, O as useLiveCount, S as BetterSupabaseProvider, T as createHooks, _ as ActionHandle, a as UploadTarget, b as useActionForm, c as useUpload, d as useDebouncedSearch, f as Presence, g as ActionForm, h as usePresence, i as UploadStatus, k as useLiveQuery, l as DebouncedSearch, m as PresenceTopic, n as SignedUrlSource, o as UseUploadOptions, p as PresenceHookOptions, r as Upload, s as useSignedUrl, t as SignedUrl, u as DebouncedSearchOptions, v as UseActionFormOptions, w as LiveCount, x as BetterHooks, y as useAction } from "../index-_4R4b01v.js";
10
10
  import { SessionProvider, SessionProviderProps, useSession, useSupportSession } from "./session.js";
11
11
  import { a as useSignIn, i as SignOut, n as PendingState, o as useSignOut, r as SignIn, t as AuthHookOptions } from "../sign-in-BCV5S2WZ.js";
12
12
  export { type ActionForm, type ActionHandle, type ActionInputOf, type ActionResultOf, type AuthHookOptions, type AuthSession, type BetterHooks, BetterSupabaseProvider, type BetterSupabaseProviderProps, type BroadcastOptions, type ClaimsOf, type ClientLike, type DebouncedSearch, type DebouncedSearchOptions, type Impersonator, type LiveCount, type LiveCountHookOptions, type LiveCountSeed, type LiveQueryHookOptions, type MembershipClaim, type PendingState, type Presence, type PresenceHookOptions, type PresenceTopic, type ProfileOf, SessionProvider, type SessionProviderProps, type SignIn, type SignOut, type SignedUrl, type SignedUrlSource, type SupportView, type Upload, type UploadStatus, type UploadTarget, type UseActionFormOptions, type UseActionOptions, type UseUploadOptions, createHooks, escapeLike, fieldErrorsOf, supportOf, tenantOf, useAction, useActionForm, useAuth, useBroadcast, useDebouncedSearch, useLiveCount, useLiveQuery, usePresence, useSession, useSignIn, useSignOut, useSignedUrl, useSupabase, useSupportSession, useUpload };
@@ -2,9 +2,9 @@
2
2
  import { t as escapeLike } from "../escape-like-DHfx6jRr.js";
3
3
  import { t as supportOf } from "../support-view-g4YLBeqX.js";
4
4
  import { SessionProvider, useSession, useSupportSession } from "./session.js";
5
- import { a as useBroadcast, c as useLiveQuery, i as useAuth, l as useSupabase, r as createHooks, s as useLiveCount, t as BetterSupabaseProvider } from "../hooks-1BTCJsiw.js";
6
- import { t as fieldErrorsOf } from "../field-errors-VF1yb8yI.js";
7
- import { a as useAction, i as usePresence, n as useUpload, o as useActionForm, r as useDebouncedSearch, t as useSignedUrl } from "../react-F80mF4-t.js";
5
+ import { a as useBroadcast, c as useLiveQuery, i as useAuth, l as useSupabase, r as createHooks, s as useLiveCount, t as BetterSupabaseProvider } from "../hooks-Bhza9Hnr.js";
6
+ import { t as fieldErrorsOf } from "../field-errors-DZVRWRkf.js";
7
+ import { a as useAction, i as usePresence, n as useUpload, o as useActionForm, r as useDebouncedSearch, t as useSignedUrl } from "../react-Bmpo59D7.js";
8
8
  import { t as tenantOf } from "../tenant-I1TEZ_BX.js";
9
- import { n as useSignIn, r as useSignOut } from "../sign-in-Cb1mwv6X.js";
9
+ import { n as useSignIn, r as useSignOut } from "../sign-in-D_yoP0PF.js";
10
10
  export { BetterSupabaseProvider, SessionProvider, createHooks, escapeLike, fieldErrorsOf, supportOf, tenantOf, useAction, useActionForm, useAuth, useBroadcast, useDebouncedSearch, useLiveCount, useLiveQuery, usePresence, useSession, useSignIn, useSignOut, useSignedUrl, useSupabase, useSupportSession, useUpload };
@@ -1,4 +1,4 @@
1
- import { t as AuthSnapshot } from "../../bind-Bu_ZNa3W.js";
1
+ import { t as AuthSnapshot } from "../../bind-CQ5mPyX1.js";
2
2
  import { a as OAuthSignInOptions, i as OAuthClient, n as AuthLinkClient, o as WebBrowserLike, r as AuthLinkResult, t as AuthFailure } from "../../auth-link-BjFPqwLz.js";
3
3
  import { n as PendingState } from "../../sign-in-BCV5S2WZ.js";
4
4
  import { Provider } from "@supabase/supabase-js";