better-supabase 0.7.0 → 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 (500) 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-B-tL8hqg.js → adapter-CN45ibbV.js} +663 -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-CVdnLahA.js → doctor-VcDtuusV.js} +317 -222
  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-Cr6arjXU.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-Bzuv1HHj.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-Bp4fyubI.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-CpHLEo-G.d.ts → composite-CWAJTRBF.d.ts} +6 -6
  216. package/dist/{composite-C6I8ZyaF.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-KIPvRQJU.d.ts → framework-148t1m3C.d.ts} +5 -5
  265. package/dist/{framework-BDCpJI7o.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-ZSJ9rCcV.d.ts → server-types-CrAmZ8jv.d.ts} +110 -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-DWwzVf-O.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--AolB5ej.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/skills/better-supabase-auth/SKILL.md +8 -4
  481. package/dist/cli/config-B9HkL8nF.js +0 -2
  482. package/dist/cli/gen-AIf4MREI.js +0 -3100
  483. package/dist/cli/gen-DSrahEdX.js +0 -2
  484. package/dist/cli/prompts-BTYQGunc.js +0 -2
  485. package/dist/cli/run-BO052mki.js +0 -361
  486. package/dist/config-Dn7F5k9A.js +0 -202
  487. package/dist/history-BZih6SFP.js +0 -64
  488. package/dist/index-BkWT_uBO.d.ts +0 -51
  489. package/dist/index-Bxih3l0u.d.ts +0 -81
  490. package/dist/index-CaxrMD1A.d.ts +0 -1
  491. package/dist/index-DQh4VCc9.d.ts +0 -98
  492. package/dist/keys-4MnkWTTh.js +0 -35
  493. package/dist/messages-DYP0sUTe.d.ts +0 -59
  494. package/dist/modules-dxrVK3ID.js +0 -228
  495. package/dist/path-Cv__-OTj.d.ts +0 -17
  496. package/dist/resource-BsvzCMlX.js +0 -212
  497. package/dist/resource-IPS5xi9q.d.ts +0 -74
  498. package/dist/template-CwO38Do8.d.ts +0 -6
  499. package/dist/verify-DL41hbvY.js +0 -232
  500. package/dist/cli/{read-sets-CETOSFx4.js → read-sets-DjJrm8Wj.js} +1 -1
@@ -0,0 +1,91 @@
1
+ //#region src/spec/resource.ts
2
+ const ACTION_NAME = /^[A-Za-z][A-Za-z0-9_]*$/u;
3
+ const RESERVED = /* @__PURE__ */ new Set([
4
+ "list",
5
+ "get",
6
+ "create",
7
+ "update",
8
+ "delete"
9
+ ]);
10
+ function planAction(table, name, action, keyParam) {
11
+ if (!ACTION_NAME.test(name) || RESERVED.has(name)) throw new TypeError(`${table}.actions.${name}: use a name of letters, digits and "_" that is not an operation`);
12
+ if (!action.path.startsWith("/") || action.path === "/") throw new TypeError(`${table}.actions.${name}: the path must start with "/" and name a segment, e.g. "/{id}/send"`);
13
+ const segments = action.path.slice(1).split("/");
14
+ const params = [];
15
+ for (const segment of segments) {
16
+ const match = /^\{(\w+)\}$/u.exec(segment);
17
+ if (match) params.push(match[1]);
18
+ else if (segment === "" || /[{}]/u.test(segment)) throw new TypeError(`${table}.actions.${name}: "${action.path}" has an invalid segment`);
19
+ }
20
+ if (params.some((param) => param !== keyParam)) throw new TypeError(`${table}.actions.${name}: the only path parameter is the key ${keyParam ? `"{${keyParam}}"` : "(this table has none)"}`);
21
+ return {
22
+ ...action,
23
+ name,
24
+ params,
25
+ segments
26
+ };
27
+ }
28
+ /**
29
+ * Resolves what a resource serves: the operations, the key, paging,
30
+ * actions and permissions. Shared by `defineResource` and the API model.
31
+ */
32
+ function planResource(schema, table, description = {}, authorizer) {
33
+ const meta = schema.tables[table];
34
+ if (!meta) throw new TypeError(`Unknown table "${table}"`);
35
+ const operations = description.operations ?? (meta.kind === "view" ? ["list", "get"] : [
36
+ "list",
37
+ "get",
38
+ "create",
39
+ "update",
40
+ "delete"
41
+ ]);
42
+ const keyParam = meta.primaryKey.length === 1 ? meta.primaryKey[0] : void 0;
43
+ const pagination = description.list ? description.list.pagination ?? "offset" : description.pagination ?? "offset";
44
+ const actions = Object.entries(description.actions ?? {}).map(([name, action]) => planAction(table, name, action, keyParam));
45
+ const permissions = {};
46
+ if (description.permissions === true) {
47
+ if (!authorizer?.forOperation) throw new TypeError(`${table}: permissions: true needs an authorizer with forOperation()`);
48
+ for (const operation of operations) {
49
+ const ref = authorizer.forOperation(table, operation);
50
+ if (ref !== void 0) permissions[operation] = ref;
51
+ }
52
+ } else if (description.permissions) {
53
+ for (const [operation, ref] of Object.entries(description.permissions)) if (ref !== void 0) permissions[operation] = ref;
54
+ }
55
+ for (const action of actions) if (action.permission !== void 0) permissions[action.name] = action.permission;
56
+ return {
57
+ table,
58
+ meta,
59
+ operations,
60
+ keyParam,
61
+ pagination,
62
+ maxPageSize: description.maxPageSize ?? 200,
63
+ description,
64
+ actions,
65
+ permissions
66
+ };
67
+ }
68
+ /** The action whose method and segments match, with its params. */
69
+ function matchAction(plan, method, segments) {
70
+ let wrongMethod = false;
71
+ for (const action of plan.actions) {
72
+ if (action.segments.length !== segments.length) continue;
73
+ const params = {};
74
+ if (!action.segments.every((segment, index) => {
75
+ const value = segments[index];
76
+ if (segment.startsWith("{")) {
77
+ params[segment.slice(1, -1)] = value;
78
+ return value !== "";
79
+ }
80
+ return segment === value;
81
+ })) continue;
82
+ if (action.method === method) return {
83
+ action,
84
+ params
85
+ };
86
+ wrongMethod = true;
87
+ }
88
+ return wrongMethod ? "method" : void 0;
89
+ }
90
+ //#endregion
91
+ export { planResource as n, matchAction as t };
@@ -0,0 +1,463 @@
1
+ import { n as dbError, o as isDbError } from "./errors-2M6CKMP4.js";
2
+ import { a as ok, r as err, s as toDbError } from "./result-DEqHCMKP.js";
3
+ import { n as isRecord } from "./guards-6F2bCtQR.js";
4
+ import { n as validate } from "./standard-DkzZUneg.js";
5
+ import { a as methodNotAllowed } from "./problem-CJvFeGu7.js";
6
+ import { a as respond, i as isResult } from "./respond-volM3ByS.js";
7
+ import { n as checkPermission, t as checkEach } from "./authorizer-ayxUDXXP.js";
8
+ import { n as planResource, t as matchAction } from "./resource-BqNqlYg9.js";
9
+ //#region src/server/resource-execute.ts
10
+ async function settled(value) {
11
+ return await value;
12
+ }
13
+ function failure(cause, message) {
14
+ if (isDbError(cause)) return err(cause);
15
+ const error = toDbError(cause);
16
+ return err(error.kind === "unexpected" ? dbError("unexpected", message) : error);
17
+ }
18
+ /** Runs a hook: its `Result` passes through, anything else is an `unexpected` error. */
19
+ async function runHook(name, call) {
20
+ try {
21
+ const value = await call();
22
+ if (!isResult(value)) return err(dbError("unexpected", `The ${name} hook must return a Result`));
23
+ return value.ok ? ok(value.data) : failure(value.error, `The ${name} hook failed`);
24
+ } catch (cause) {
25
+ return failure(cause, `The ${name} hook failed`);
26
+ }
27
+ }
28
+ /** Runs an action handler: a `Result` unwraps, a plain value is the data. */
29
+ async function runHandler(name, call) {
30
+ try {
31
+ const value = await call();
32
+ if (!isResult(value)) return ok(value);
33
+ return value.ok ? ok(value.data) : failure(value.error, `The ${name} action failed`);
34
+ } catch (cause) {
35
+ return failure(cause, `The ${name} action failed`);
36
+ }
37
+ }
38
+ /** Defines an action and types its handler's `data` and `query` from the schemas. */
39
+ function defineAction(action) {
40
+ return action;
41
+ }
42
+ //#endregion
43
+ //#region src/server/resource-http.ts
44
+ const INTEGER = /* @__PURE__ */ new Set([
45
+ "int2",
46
+ "int4",
47
+ "int8"
48
+ ]);
49
+ function keyValue(table, raw) {
50
+ const invalid = err(dbError("invalid_input", `${JSON.stringify(raw)} is not a valid ${table.key} key`));
51
+ const column = table.columns[table.primaryKey[0]];
52
+ if (column && INTEGER.has(column.type)) {
53
+ const value = typeof raw === "string" ? Number(raw) : raw;
54
+ return typeof value === "number" && Number.isSafeInteger(value) ? ok(value) : invalid;
55
+ }
56
+ return typeof raw === "string" && raw !== "" ? ok(raw) : invalid;
57
+ }
58
+ /**
59
+ * A cross-site browser request that needed no CORS preflight: a form post
60
+ * riding on the session cookie. Bearer requests and JSON bodies (which need a
61
+ * preflight) pass, as do requests without an `Origin` (not a browser).
62
+ */
63
+ function crossSiteSimpleRequest(request) {
64
+ if (request.method === "GET" || request.method === "HEAD") return false;
65
+ if (request.headers.has("authorization")) return false;
66
+ const origin = request.headers.get("origin");
67
+ if (!origin || origin === new URL(request.url).origin) return false;
68
+ if (request.headers.get("sec-fetch-site") === "same-origin") return false;
69
+ const type = request.headers.get("content-type") ?? "";
70
+ return !/^application\/(?:[\w.+-]+\+)?json\b/iu.test(type);
71
+ }
72
+ async function readBody(request) {
73
+ try {
74
+ const body = await request.json();
75
+ if (typeof body === "object" && body !== null && !Array.isArray(body)) return ok(body);
76
+ } catch {}
77
+ return err(dbError("invalid_input", "The request body must be a JSON object"));
78
+ }
79
+ /** Any JSON body; an empty body is `undefined`. */
80
+ async function readJson(request) {
81
+ const text = await request.text();
82
+ if (text.trim() === "") return ok(void 0);
83
+ try {
84
+ return ok(JSON.parse(text));
85
+ } catch {
86
+ return err(dbError("invalid_input", "The request body must be JSON"));
87
+ }
88
+ }
89
+ /** URL parameters as an object; a repeated name becomes an array. */
90
+ function queryObject(query) {
91
+ if (!(query instanceof URLSearchParams)) return query ?? {};
92
+ const values = {};
93
+ for (const [name, value] of query) {
94
+ const seen = values[name];
95
+ values[name] = seen === void 0 ? value : [...Array.isArray(seen) ? seen : [seen], value];
96
+ }
97
+ return values;
98
+ }
99
+ function pageArgs(query, max, pagination) {
100
+ const raw = (name) => {
101
+ const value = query instanceof URLSearchParams ? query.get(name) : query?.[name];
102
+ return value === null || value === "" ? void 0 : value;
103
+ };
104
+ const read = (name, fallback) => {
105
+ const value = raw(name);
106
+ if (value === void 0) return fallback;
107
+ const number = Number(value);
108
+ return Number.isSafeInteger(number) && number >= 1 ? number : void 0;
109
+ };
110
+ const issues = [];
111
+ const size = read("size", 50);
112
+ if (size === void 0 || size > max) issues.push({
113
+ message: `Must be between 1 and ${max}`,
114
+ path: ["size"]
115
+ });
116
+ const [used, unused] = pagination === "cursor" ? ["after", "page"] : ["page", "after"];
117
+ if (raw(unused) !== void 0) issues.push({
118
+ message: `This list pages with \`${used}\``,
119
+ path: [unused]
120
+ });
121
+ const page = read("page", 1);
122
+ if (pagination === "offset" && page === void 0) issues.push({
123
+ message: "Must be a positive integer",
124
+ path: ["page"]
125
+ });
126
+ const after = raw("after");
127
+ if (pagination === "cursor" && after !== void 0 && typeof after !== "string") issues.push({
128
+ message: "Must be text",
129
+ path: ["after"]
130
+ });
131
+ if (issues.length > 0 || size === void 0) return err(dbError("validation", "Invalid page parameters", { issues }));
132
+ return pagination === "cursor" ? ok({
133
+ after: typeof after === "string" ? after : null,
134
+ size
135
+ }) : ok({
136
+ page: page ?? 1,
137
+ size
138
+ });
139
+ }
140
+ function asObject(value) {
141
+ return typeof value === "object" && value !== null && !Array.isArray(value) ? ok(value) : err(dbError("invalid_input", "Expected an object of column values"));
142
+ }
143
+ function splitPath(subpath) {
144
+ if (typeof subpath !== "string") return ok(subpath);
145
+ try {
146
+ return ok(subpath.split("/").filter((segment) => segment !== "").map((segment) => decodeURIComponent(segment)));
147
+ } catch {
148
+ return err(dbError("invalid_input", `Malformed path ${subpath}`));
149
+ }
150
+ }
151
+ function contextOf(db) {
152
+ const value = "$context" in db ? db.$context : void 0;
153
+ return isRecord(value) ? value : {};
154
+ }
155
+ /** Whether an action's path fits these segments, whatever the method. */
156
+ function actionFits(action, segments) {
157
+ return action.segments.length === segments.length && action.segments.every((segment, index) => segment.startsWith("{") ? segments[index] !== "" : segment === segments[index]);
158
+ }
159
+ //#endregion
160
+ //#region src/server/resource.ts
161
+ /**
162
+ * Operations over one table, matching the paths and responses of the API
163
+ * model: `GET/POST /<table>`, `GET/PATCH/DELETE /<table>/{id}` and each
164
+ * action's path. Shared by the HTTP adapters and the MCP table tools.
165
+ *
166
+ * With permissions, the authorizer decides before the repository runs:
167
+ * `get`, `update` and `delete` fetch the row first (under RLS) and pass it
168
+ * as the resource's properties, and `list` keeps only the rows it grants.
169
+ */
170
+ function defineResource(betterSupabase, table, options = {}, authorizer) {
171
+ if (options.list && options.list.table !== table) throw new TypeError(`The list query is for "${options.list.table}", not "${table}"`);
172
+ const plan = planResource(betterSupabase.meta, table, options, authorizer);
173
+ const { meta, operations, keyParam, pagination, maxPageSize } = plan;
174
+ const has = (operation) => operations.includes(operation);
175
+ const extra = options.select === void 0 ? {} : { select: options.select };
176
+ const list = options.list;
177
+ const hooks = options.hooks ?? {};
178
+ const resourceOf = (id, row) => ({
179
+ type: table,
180
+ ...id === void 0 ? {} : { id: String(id) },
181
+ ...isRecord(row) ? { properties: row } : {}
182
+ });
183
+ const permit = (name, db, resource) => {
184
+ const permission = plan.permissions[name];
185
+ if (permission === void 0) return ok(void 0);
186
+ return checkPermission({
187
+ authorizer,
188
+ permission,
189
+ resource,
190
+ context: contextOf(db)
191
+ });
192
+ };
193
+ const ctxOf = (db, input) => ({
194
+ db,
195
+ table,
196
+ request: input.request,
197
+ context: contextOf(db)
198
+ });
199
+ const after = async (name, ctx, result) => {
200
+ const run = hooks[name];
201
+ if (!run || !result.ok) return result;
202
+ return runHook(name, () => run.call(hooks, ctx, result.data));
203
+ };
204
+ const authorize = async (ctx, operation, target) => hooks.authorize ? runHook("authorize", () => hooks.authorize(ctx, operation, target)) : ok(void 0);
205
+ const repositoryOf = (db) => {
206
+ const repository = db[table];
207
+ if (!repository) throw new TypeError(`The db has no "${table}" repository`);
208
+ return repository;
209
+ };
210
+ const key = (raw) => keyParam ? keyValue(meta, raw) : err(dbError("invalid_request", `${table} has no single-column key`));
211
+ /** Fetches the row a permission decision reads, under the caller's RLS. */
212
+ const rowFor = async (name, db, id) => {
213
+ if (plan.permissions[name] === void 0) return ok(void 0);
214
+ return settled(repositoryOf(db).findById(id));
215
+ };
216
+ const filterRows = async (db, result) => {
217
+ const permission = plan.permissions["list"];
218
+ if (permission === void 0 || !result.ok) return result;
219
+ if (!authorizer) {
220
+ const denied = await checkPermission({
221
+ authorizer,
222
+ permission,
223
+ resource: { type: table },
224
+ context: contextOf(db)
225
+ });
226
+ if (!denied.ok) return denied;
227
+ }
228
+ const page = result.data;
229
+ if (!isRecord(page) || !Array.isArray(page["items"])) return result;
230
+ const items = page["items"];
231
+ const granted = await checkEach(authorizer, permission, items.map((row) => resourceOf(keyParam && isRecord(row) ? row[keyParam] : void 0, row)), contextOf(db));
232
+ return ok({
233
+ ...page,
234
+ items: items.filter((_, index) => granted[index])
235
+ });
236
+ };
237
+ const execute = async (db, operation, input = {}) => {
238
+ const repository = repositoryOf(db);
239
+ if (!has(operation)) return err(dbError("forbidden", `${operation} is not enabled for ${table}`));
240
+ const ctx = ctxOf(db, input);
241
+ switch (operation) {
242
+ case "list": {
243
+ let run;
244
+ let query = input.query;
245
+ if (list) {
246
+ const parsed = list.parse(input.query ?? {});
247
+ if (!parsed.ok) return err(dbError("validation", "Invalid list query", { issues: parsed.issues }));
248
+ query = parsed.value;
249
+ run = () => settled(list.run(db, parsed.value, extra));
250
+ } else {
251
+ const page = pageArgs(input.query, maxPageSize, pagination);
252
+ if (!page.ok) return page;
253
+ query = page.data;
254
+ run = () => settled(repository.paginate({
255
+ ...extra,
256
+ ...page.data,
257
+ ..."page" in page.data ? { count: "exact" } : {}
258
+ }));
259
+ }
260
+ const allowed = await authorize(ctx, "list", { query });
261
+ if (!allowed.ok) return allowed;
262
+ return after("afterList", ctx, await filterRows(db, await run()));
263
+ }
264
+ case "get": {
265
+ const id = key(input.id);
266
+ if (!id.ok) return id;
267
+ const row = await settled(repository.findById(id.data, extra));
268
+ if (!row.ok) return row;
269
+ const permitted = await permit("get", db, resourceOf(id.data, row.data));
270
+ if (!permitted.ok) return permitted;
271
+ const allowed = await authorize(ctx, "get", {
272
+ id: id.data,
273
+ row: row.data
274
+ });
275
+ if (!allowed.ok) return allowed;
276
+ return after("afterGet", ctx, row);
277
+ }
278
+ case "create": {
279
+ const body = asObject(input.data);
280
+ if (!body.ok) return body;
281
+ const data = options.input?.create ? await validate(options.input.create, body.data, "data") : body;
282
+ if (!data.ok) return data;
283
+ const permitted = await permit("create", db, resourceOf(void 0, data.data));
284
+ if (!permitted.ok) return permitted;
285
+ const allowed = await authorize(ctx, "create", { data: data.data });
286
+ if (!allowed.ok) return allowed;
287
+ const values = hooks.beforeCreate ? await runHook("beforeCreate", () => hooks.beforeCreate(ctx, data.data)) : data;
288
+ if (!values.ok) return values;
289
+ const created = await settled(repository.create(values.data, extra));
290
+ return after("afterCreate", ctx, created);
291
+ }
292
+ case "update": {
293
+ const id = key(input.id);
294
+ if (!id.ok) return id;
295
+ const body = asObject(input.data);
296
+ if (!body.ok) return body;
297
+ const data = options.input?.update ? await validate(options.input.update, body.data, "data") : body;
298
+ if (!data.ok) return data;
299
+ const row = await rowFor("update", db, id.data);
300
+ if (!row.ok) return row;
301
+ const permitted = await permit("update", db, resourceOf(id.data, row.data));
302
+ if (!permitted.ok) return permitted;
303
+ const target = {
304
+ id: id.data,
305
+ data: data.data,
306
+ ...row.data === void 0 ? {} : { row: row.data }
307
+ };
308
+ const allowed = await authorize(ctx, "update", target);
309
+ if (!allowed.ok) return allowed;
310
+ const values = hooks.beforeUpdate ? await runHook("beforeUpdate", () => hooks.beforeUpdate(ctx, data.data, target)) : data;
311
+ if (!values.ok) return values;
312
+ const updated = await settled(repository.update(id.data, values.data, extra));
313
+ return after("afterUpdate", ctx, updated);
314
+ }
315
+ case "delete": {
316
+ const id = key(input.id);
317
+ if (!id.ok) return id;
318
+ const row = await rowFor("delete", db, id.data);
319
+ if (!row.ok) return row;
320
+ const permitted = await permit("delete", db, resourceOf(id.data, row.data));
321
+ if (!permitted.ok) return permitted;
322
+ const target = {
323
+ id: id.data,
324
+ ...row.data === void 0 ? {} : { row: row.data }
325
+ };
326
+ const allowed = await authorize(ctx, "delete", target);
327
+ if (!allowed.ok) return allowed;
328
+ if (hooks.beforeDelete) {
329
+ const before = await runHook("beforeDelete", () => hooks.beforeDelete(ctx, target));
330
+ if (!before.ok) return before;
331
+ }
332
+ return settled(repository.delete(id.data));
333
+ }
334
+ default: throw new TypeError(`Unknown operation ${String(operation)}`);
335
+ }
336
+ };
337
+ const action = async (db, name, input = {}) => {
338
+ const planned = plan.actions.find((candidate) => candidate.name === name);
339
+ const definition = options.actions?.[name];
340
+ if (!planned || !definition) return err(dbError("not_found", `${table} has no action ${name}`));
341
+ let id;
342
+ if (planned.params.length > 0) {
343
+ const parsed = key(input.id);
344
+ if (!parsed.ok) return parsed;
345
+ id = parsed.data;
346
+ }
347
+ let data = input.data;
348
+ if (planned.input) {
349
+ const parsed = await validate(planned.input, data, "data");
350
+ if (!parsed.ok) return parsed;
351
+ data = parsed.data;
352
+ }
353
+ let query = queryObject(input.query);
354
+ if (planned.query) {
355
+ const parsed = await validate(planned.query, query, "query");
356
+ if (!parsed.ok) return parsed;
357
+ query = parsed.data;
358
+ }
359
+ const row = id === void 0 ? ok(void 0) : await rowFor(name, db, id);
360
+ if (!row.ok) return row;
361
+ const permitted = await permit(name, db, resourceOf(id, row.data ?? data));
362
+ if (!permitted.ok) return permitted;
363
+ const ctx = ctxOf(db, input);
364
+ const allowed = await authorize(ctx, name, {
365
+ id,
366
+ data,
367
+ query,
368
+ ...row.data === void 0 ? {} : { row: row.data }
369
+ });
370
+ if (!allowed.ok) return allowed;
371
+ return runHandler(name, () => definition.handler(ctx, {
372
+ id,
373
+ data,
374
+ query
375
+ }));
376
+ };
377
+ const collectionMethods = [...has("list") ? ["GET"] : [], ...has("create") ? ["POST"] : []];
378
+ const itemMethods = [
379
+ ...has("get") ? ["GET"] : [],
380
+ ...has("update") ? ["PATCH"] : [],
381
+ ...has("delete") ? ["DELETE"] : []
382
+ ];
383
+ const route = async (request, db, segments, actions) => {
384
+ if (crossSiteSimpleRequest(request)) return [err(dbError("forbidden", "Cross-site requests need Content-Type: application/json or a bearer token", { code: "CROSS_SITE_REQUEST" }))];
385
+ if (actions && segments.length > 0) {
386
+ const method = request.method === "HEAD" ? "GET" : request.method;
387
+ const found = matchAction(plan, method, segments);
388
+ if (found === "method") return [methodNotAllowed(plan.actions.filter((candidate) => actionFits(candidate, segments)).map((candidate) => candidate.method))];
389
+ if (found) {
390
+ const body = method === "GET" ? ok(void 0) : await readJson(request);
391
+ if (!body.ok) return [body];
392
+ const id = keyParam ? found.params[keyParam] : void 0;
393
+ return [await action(db, found.action.name, {
394
+ id,
395
+ data: body.data,
396
+ query: new URL(request.url).searchParams,
397
+ request
398
+ }), found.action.status ?? 200];
399
+ }
400
+ }
401
+ if (segments.length === 0) {
402
+ if (request.method === "GET" && has("list")) return [await execute(db, "list", {
403
+ query: new URL(request.url).searchParams,
404
+ request
405
+ })];
406
+ if (request.method === "POST" && has("create")) {
407
+ const body = await readBody(request);
408
+ return [body.ok ? await execute(db, "create", {
409
+ data: body.data,
410
+ request
411
+ }) : body, 201];
412
+ }
413
+ return [methodNotAllowed(collectionMethods)];
414
+ }
415
+ if (segments.length > 1 || !keyParam) return [new Response(null, { status: 404 })];
416
+ const id = segments[0];
417
+ if (request.method === "GET" && has("get")) return [await execute(db, "get", {
418
+ id,
419
+ request
420
+ })];
421
+ if (request.method === "PATCH" && has("update")) {
422
+ const body = await readBody(request);
423
+ return [body.ok ? await execute(db, "update", {
424
+ id,
425
+ data: body.data,
426
+ request
427
+ }) : body];
428
+ }
429
+ if (request.method === "DELETE" && has("delete")) return [await execute(db, "delete", {
430
+ id,
431
+ request
432
+ })];
433
+ return [methodNotAllowed(itemMethods)];
434
+ };
435
+ const reply = async (routed, respondOptions) => {
436
+ const [value, status] = await routed();
437
+ return respond(() => value, status === void 0 ? respondOptions : {
438
+ ...respondOptions,
439
+ status
440
+ });
441
+ };
442
+ return {
443
+ table,
444
+ meta,
445
+ operations,
446
+ keyParam,
447
+ list,
448
+ pagination,
449
+ maxPageSize,
450
+ plan,
451
+ execute,
452
+ action,
453
+ handle(request, db, id, respondOptions = {}) {
454
+ return reply(() => route(request, db, id === void 0 ? [] : [id], false), respondOptions);
455
+ },
456
+ serve(request, db, subpath, respondOptions = {}) {
457
+ const segments = splitPath(subpath);
458
+ return reply(async () => segments.ok ? route(request, db, segments.data, true) : [segments], respondOptions);
459
+ }
460
+ };
461
+ }
462
+ //#endregion
463
+ export { actionFits as n, defineAction as r, defineResource as t };
@@ -0,0 +1,12 @@
1
+ import { n as ResourceActionSpec } from "./resource--vTrBe6I.js";
2
+ import { i as ResourceContext, n as Parsed, r as ResourceAction, t as ActionArgs } from "./resource-types-CqB6GWGT.js";
3
+ import { StandardSchemaV1 } from "@standard-schema/spec";
4
+ //#region src/server/resource-execute.d.ts
5
+ /** Defines an action and types its handler's `data` and `query` from the schemas. */
6
+ declare function defineAction<DbT = unknown, Ref = string, I extends StandardSchemaV1 | undefined = undefined, Q extends StandardSchemaV1 | undefined = undefined>(action: Omit<ResourceActionSpec<Ref>, "input" | "query"> & {
7
+ readonly input?: I;
8
+ readonly query?: Q;
9
+ handler(ctx: ResourceContext<DbT>, args: ActionArgs<Parsed<I>, Parsed<Q>>): unknown;
10
+ }): ResourceAction<Ref, DbT>;
11
+ //#endregion
12
+ export { defineAction as t };
@@ -0,0 +1,79 @@
1
+ //#region src/spec/resource-schemas.ts
2
+ /** The `after` or `page` parameter and `size` of a list, for the spec and the MCP tools alike. */
3
+ function pageQuery(cursor, maxPageSize) {
4
+ return [cursor ? {
5
+ name: "after",
6
+ description: "`nextCursor` of the previous page. Leave it out for the first page.",
7
+ schema: { type: "string" }
8
+ } : {
9
+ name: "page",
10
+ description: "1-based page number.",
11
+ schema: {
12
+ type: "integer",
13
+ minimum: 1,
14
+ default: 1
15
+ }
16
+ }, {
17
+ name: "size",
18
+ description: "Page size.",
19
+ schema: {
20
+ type: "integer",
21
+ minimum: 1,
22
+ maximum: maxPageSize,
23
+ default: 50
24
+ }
25
+ }];
26
+ }
27
+ /** The list input as one object schema, for tools that take a body. */
28
+ function pageInputSchema(cursor, maxPageSize) {
29
+ return {
30
+ type: "object",
31
+ properties: Object.fromEntries(pageQuery(cursor, maxPageSize).map((p) => [p.name, p.schema])),
32
+ additionalProperties: false
33
+ };
34
+ }
35
+ /** The page a list answers with: `items` plus the cursor or the page counts. */
36
+ function pageSchema(row, cursor) {
37
+ const items = {
38
+ type: "array",
39
+ items: row
40
+ };
41
+ return cursor ? {
42
+ type: "object",
43
+ required: [
44
+ "items",
45
+ "nextCursor",
46
+ "hasMore"
47
+ ],
48
+ properties: {
49
+ items,
50
+ nextCursor: { type: ["string", "null"] },
51
+ hasMore: { type: "boolean" }
52
+ }
53
+ } : {
54
+ type: "object",
55
+ required: ["items", "page"],
56
+ properties: {
57
+ items,
58
+ page: {
59
+ type: "object",
60
+ required: [
61
+ "number",
62
+ "size",
63
+ "total",
64
+ "pages",
65
+ "hasMore"
66
+ ],
67
+ properties: {
68
+ number: { type: "integer" },
69
+ size: { type: "integer" },
70
+ total: { type: ["integer", "null"] },
71
+ pages: { type: ["integer", "null"] },
72
+ hasMore: { type: "boolean" }
73
+ }
74
+ }
75
+ }
76
+ };
77
+ }
78
+ //#endregion
79
+ export { pageQuery as n, pageSchema as r, pageInputSchema as t };