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
package/dist/mcp/index.js CHANGED
@@ -1,16 +1,117 @@
1
- import { n as dbError } from "../errors-B11Duf73.js";
1
+ import { n as dbError } from "../errors-2M6CKMP4.js";
2
+ import { a as ok } from "../result-DEqHCMKP.js";
2
3
  import { t as base64ToText } from "../base64-D2gsioCY.js";
3
- import { n as validate } from "../standard-BK0cqJ7y.js";
4
- import { a as problemResponse, o as toProblem } from "../problem-BreOl8b8.js";
5
- import { t as SPEC_PINS } from "../spec-pins--j6mTok4.js";
6
- import { t as buildJsonSchema } from "../json-schema-CvER4kgT.js";
7
- import { c as extendServer, l as withExtra, n as flushEvents, s as createServer } from "../adapter-iKgjHVPx.js";
4
+ import { n as validate } from "../standard-DkzZUneg.js";
5
+ import { a as methodNotAllowed, o as problemResponse, s as toProblem } from "../problem-CJvFeGu7.js";
6
+ import { t as SPEC_PINS } from "../spec-pins-DsLfUH7l.js";
7
+ import { t as buildJsonSchema, v as toDraft07 } from "../json-schema-CT4tvrkA.js";
8
+ import { c as extendServer, n as flushEvents, s as createServer } from "../adapter-CN45ibbV.js";
8
9
  import { n as jsonResponse, t as jsonReplacer } from "../json-CEnpTHlZ.js";
9
- import { o as settle, r as guard, t as defaultExpose } from "../respond-BUgsXNgk.js";
10
- import { t as defineResource } from "../resource-BsvzCMlX.js";
11
- import { r as hasRole } from "../kit-Fm-Fv7q5.js";
10
+ import { o as settle, r as guard, t as defaultExpose } from "../respond-volM3ByS.js";
11
+ import { t as boundedTtlCache } from "../ttl-cache-XzZ-Q2eX.js";
12
+ import { n as checkPermission, t as checkEach } from "../authorizer-ayxUDXXP.js";
13
+ import { t as defineResource } from "../resource-DA811u_4.js";
14
+ import { r as hasRole } from "../kit-BhHr9T9v.js";
15
+ import { t as withExtra } from "../extra-CGQ2_q3S.js";
16
+ import { r as pageSchema, t as pageInputSchema } from "../resource-schemas-BJ518zFH.js";
12
17
  import { a as withCors, i as metadataPreflight, n as endpointPreflight, r as isMetadataRequest, t as discovery } from "../http-DdYadv-o.js";
13
18
  import { resourceMetadataResponse, unauthorizedResponse } from "@supabase/server/oauth-protected-resource";
19
+ //#region src/mcp/dialect.ts
20
+ /**
21
+ * Revisions before 2025-11-25 have no default dialect, and clients written
22
+ * for them validate tool schemas as draft-07.
23
+ */
24
+ function schemaTargetFor(version) {
25
+ return version < "2025-11-25" ? "draft-07" : "draft-2020-12";
26
+ }
27
+ /**
28
+ * Returns the listed tool with its schemas in a target's dialect, built
29
+ * once per target. `convert` asks the input's Standard Schema library for
30
+ * the target; without it, or when it can't, the 2020-12 schema is lowered.
31
+ */
32
+ function toolDialects(info, convert) {
33
+ const built = /* @__PURE__ */ new Map();
34
+ return (target) => {
35
+ const cached = built.get(target);
36
+ if (cached) return cached;
37
+ const input = convert?.(target);
38
+ const lower = target === "draft-07";
39
+ const result = input === void 0 && !lower ? info : {
40
+ ...info,
41
+ inputSchema: input ?? toDraft07(info.inputSchema),
42
+ ...info.outputSchema && lower ? { outputSchema: toDraft07(info.outputSchema) } : {}
43
+ };
44
+ built.set(target, result);
45
+ return result;
46
+ };
47
+ }
48
+ //#endregion
49
+ //#region src/mcp/permissions.ts
50
+ /** The refusal for a caller without one of `required`'s roles. */
51
+ function missingRole(auth, required) {
52
+ if (!required || auth.kind === "service") return void 0;
53
+ const { roles, claim } = "roles" in required ? required : {
54
+ roles: required,
55
+ claim: void 0
56
+ };
57
+ if (roles.length === 0 || hasRole(auth, roles, claim)) return void 0;
58
+ return dbError("forbidden", `This server needs the role ${roles.join(" or ")}`, { code: "MISSING_ROLE" });
59
+ }
60
+ /** The context of a `tools/call` or `tools/list` request, if the client has one. */
61
+ function contextOf(db) {
62
+ if (typeof db !== "object" || db === null || !("$context" in db)) return;
63
+ return db.$context;
64
+ }
65
+ /**
66
+ * Checks a tool call as the caller of `db`: the tool is the resource, its
67
+ * arguments its properties. A tool without a permission passes.
68
+ */
69
+ async function checkTool(authorizer, tool, args, db) {
70
+ if (tool.permission === void 0) return ok(void 0);
71
+ const properties = typeof args === "object" && args !== null && !Array.isArray(args) ? args : void 0;
72
+ return checkPermission({
73
+ authorizer,
74
+ permission: tool.permission,
75
+ resource: {
76
+ type: "mcp_tool",
77
+ id: tool.info.name,
78
+ ...properties ? { properties } : {}
79
+ },
80
+ context: contextOf(db)
81
+ });
82
+ }
83
+ /**
84
+ * Which tools the caller may see, in `tools` order: one batch per
85
+ * permission, and a tool without a permission is always shown.
86
+ */
87
+ async function permittedTools(authorizer, tools, context) {
88
+ const shown = tools.map((tool) => tool.permission === void 0);
89
+ const groups = /* @__PURE__ */ new Map();
90
+ for (const [index, tool] of tools.entries()) {
91
+ if (tool.permission === void 0 || !authorizer) continue;
92
+ let key;
93
+ try {
94
+ key = authorizer.key(tool.permission);
95
+ } catch {
96
+ continue;
97
+ }
98
+ const group = groups.get(key) ?? {
99
+ permission: tool.permission,
100
+ indexes: []
101
+ };
102
+ group.indexes.push(index);
103
+ groups.set(key, group);
104
+ }
105
+ await Promise.all([...groups.values()].map(async ({ permission, indexes }) => {
106
+ const granted = await checkEach(authorizer, permission, indexes.map((index) => ({
107
+ type: "mcp_tool",
108
+ id: tools[index].name
109
+ })), context);
110
+ for (const [position, index] of indexes.entries()) shown[index] = granted[position] ?? false;
111
+ }));
112
+ return shown;
113
+ }
114
+ //#endregion
14
115
  //#region src/mcp/mcp.ts
15
116
  const MCP_PROTOCOL_VERSION = SPEC_PINS.mcp;
16
117
  /** Revisions before 2026-07-28 open with an `initialize` handshake. */
@@ -29,27 +130,26 @@ function hostAllowed(host, allowed) {
29
130
  return false;
30
131
  }
31
132
  }
32
- /** The refusal for a caller without one of `required`'s roles. */
33
- function missingRole(auth, required) {
34
- if (!required || auth.kind === "service") return void 0;
35
- const { roles, claim } = "roles" in required ? required : {
36
- roles: required,
37
- claim: void 0
38
- };
39
- if (roles.length === 0 || hasRole(auth, roles, claim)) return void 0;
40
- return dbError("forbidden", `This server needs the role ${roles.join(" or ")}`, { code: "MISSING_ROLE" });
41
- }
42
133
  /** A custom tool. Pass it in `createMcp({ tools: [...] })`. */
43
134
  function defineTool(definition) {
44
135
  if (!/^[A-Za-z0-9_.-]{1,64}$/.test(definition.name)) throw new TypeError(`Invalid tool name "${definition.name}": use 1-64 letters, digits, "_", "-" or "."`);
45
136
  const standard = definition.input?.["~standard"];
46
- const inputSchema = definition.inputSchema ?? standard?.jsonSchema?.input({ target: "draft-2020-12" }) ?? (definition.input ? void 0 : {
137
+ const convert = definition.inputSchema === void 0 ? standard?.jsonSchema : void 0;
138
+ const inputSchema = definition.inputSchema ?? convert?.input({ target: definition.jsonSchemaTarget ?? "draft-2020-12" }) ?? (definition.input ? void 0 : {
47
139
  type: "object",
48
140
  properties: {}
49
141
  });
50
142
  if (!inputSchema) throw new TypeError(`Tool "${definition.name}": the input schema has no JSON Schema; pass inputSchema`);
51
143
  const { $schema: _, ...schema } = inputSchema;
52
144
  return {
145
+ ...convert ? { inputSchemaFor: (target) => {
146
+ try {
147
+ const { $schema: _dialect, ...converted } = convert.input({ target });
148
+ return converted;
149
+ } catch {
150
+ return;
151
+ }
152
+ } } : {},
53
153
  info: {
54
154
  name: definition.name,
55
155
  ...definition.title ? { title: definition.title } : {},
@@ -60,6 +160,7 @@ function defineTool(definition) {
60
160
  },
61
161
  ...definition.input ? { input: definition.input } : {},
62
162
  ...definition.meta === void 0 ? {} : { meta: definition.meta },
163
+ ...definition.permission === void 0 ? {} : { permission: definition.permission },
63
164
  run: (args, ctx) => definition.run(args, ctx)
64
165
  };
65
166
  }
@@ -90,25 +191,6 @@ const ANNOTATIONS = {
90
191
  openWorldHint: false
91
192
  }
92
193
  };
93
- function pageSchema(max, cursor) {
94
- return {
95
- type: "object",
96
- properties: {
97
- ...cursor ? { after: { type: "string" } } : { page: {
98
- type: "integer",
99
- minimum: 1,
100
- default: 1
101
- } },
102
- size: {
103
- type: "integer",
104
- minimum: 1,
105
- maximum: max,
106
- default: 50
107
- }
108
- },
109
- additionalProperties: false
110
- };
111
- }
112
194
  function tableTools(resource, defs) {
113
195
  const { table, keyParam } = resource;
114
196
  const row = defs[`${table}Row`] ?? { type: "object" };
@@ -123,32 +205,7 @@ function tableTools(resource, defs) {
123
205
  additionalProperties: false
124
206
  });
125
207
  const cursor = resource.pagination === "cursor";
126
- const page = cursor ? {
127
- type: "object",
128
- properties: {
129
- items: {
130
- type: "array",
131
- items: row
132
- },
133
- nextCursor: { type: ["string", "null"] },
134
- hasMore: { type: "boolean" }
135
- },
136
- required: [
137
- "items",
138
- "nextCursor",
139
- "hasMore"
140
- ]
141
- } : {
142
- type: "object",
143
- properties: {
144
- items: {
145
- type: "array",
146
- items: row
147
- },
148
- page: { type: "object" }
149
- },
150
- required: ["items", "page"]
151
- };
208
+ const page = pageSchema(row, cursor);
152
209
  const tools = [];
153
210
  const add = (operation, description, inputSchema, outputSchema) => {
154
211
  tools.push({
@@ -165,7 +222,7 @@ function tableTools(resource, defs) {
165
222
  };
166
223
  for (const operation of resource.operations) switch (operation) {
167
224
  case "list": {
168
- const { $schema: _, ...listSchema } = resource.list?.jsonSchema ?? pageSchema(resource.maxPageSize, cursor);
225
+ const { $schema: _, ...listSchema } = resource.list?.jsonSchema ?? pageInputSchema(cursor, resource.maxPageSize);
169
226
  add("list", `List ${table} rows visible to the caller, one page at a time.`, listSchema, page);
170
227
  break;
171
228
  }
@@ -250,12 +307,14 @@ function createMcp(betterSupabase, options) {
250
307
  })["$defs"];
251
308
  const registry = /* @__PURE__ */ new Map();
252
309
  let allTools;
310
+ const listed = /* @__PURE__ */ new Map();
253
311
  /** Bumped on every registration, so cached visible lists built before it miss. */
254
312
  let generation = 0;
255
313
  const register = (entry) => {
256
314
  if (registry.has(entry.info.name)) throw new TypeError(`Duplicate MCP tool "${entry.info.name}"`);
257
315
  registry.set(entry.info.name, entry);
258
316
  allTools = void 0;
317
+ listed.clear();
259
318
  generation++;
260
319
  };
261
320
  const failure = (error) => textResult(toProblem(error, { expose }), true);
@@ -274,7 +333,7 @@ function createMcp(betterSupabase, options) {
274
333
  const key = table;
275
334
  const entry = raw;
276
335
  const { meta, ...route } = entry === true ? {} : entry;
277
- const resource = defineResource(betterSupabase, key, route);
336
+ const resource = defineResource(betterSupabase, key, route, options.authorizer);
278
337
  for (const { info, operation } of tableTools(resource, defs)) {
279
338
  const ref = {
280
339
  info,
@@ -282,6 +341,7 @@ function createMcp(betterSupabase, options) {
282
341
  };
283
342
  register({
284
343
  ...ref,
344
+ infoFor: toolDialects(info),
285
345
  async call(args, ctx) {
286
346
  const input = args ?? {};
287
347
  const refusal = await refused(ref, input, ctx);
@@ -305,6 +365,8 @@ function createMcp(betterSupabase, options) {
305
365
  };
306
366
  register({
307
367
  ...ref,
368
+ ...tool.permission === void 0 ? {} : { permission: tool.permission },
369
+ infoFor: toolDialects(tool.info, tool.inputSchemaFor),
308
370
  async call(args, ctx) {
309
371
  let value = args ?? {};
310
372
  if (tool.input) {
@@ -312,6 +374,8 @@ function createMcp(betterSupabase, options) {
312
374
  if (!parsed.ok) return failure(parsed.error);
313
375
  value = parsed.data;
314
376
  }
377
+ const checked = await checkTool(options.authorizer, tool, value, ctx.db);
378
+ if (!checked.ok) return failure(checked.error);
315
379
  const refusal = await refused(ref, value, ctx);
316
380
  if (refusal) return refusal;
317
381
  const outcome = await settle(() => tool.run(value, ctx));
@@ -321,35 +385,38 @@ function createMcp(betterSupabase, options) {
321
385
  };
322
386
  for (const tool of options.tools ?? []) addTool(tool);
323
387
  const listTools = () => allTools ??= [...registry.values()].map((entry) => entry.info);
388
+ const listFor = (target) => {
389
+ let tools = listed.get(target);
390
+ if (!tools) {
391
+ tools = [...registry.values()].map((entry) => entry.infoFor(target));
392
+ listed.set(target, tools);
393
+ }
394
+ return tools;
395
+ };
324
396
  /**
325
397
  * A user's visible list per token, for as long as clients may cache it
326
398
  * (`ttlMs`). `tools/call` still checks `visible` on every call.
327
399
  */
328
- const visibleLists = /* @__PURE__ */ new Map();
329
- /** Without a `visible` hook every caller sees the same list, built once. */
330
- const visibleTools = async (context) => {
331
- if (!options.visible) return listTools();
400
+ const visibleLists = boundedTtlCache({ max: VISIBLE_LISTS_MAX });
401
+ /** Without a `visible` hook or permissions every caller sees the same list, built once. */
402
+ const visibleTools = async (context, target) => {
403
+ const all = [...registry.values()];
404
+ const gated = all.some((entry) => entry.permission !== void 0);
405
+ if (!options.visible && !gated) return listFor(target);
332
406
  const ctx = context();
333
407
  const token = ctx.auth.kind === "user" ? ctx.auth.token : void 0;
334
- const now = Date.now();
335
408
  const cached = token === void 0 ? void 0 : visibleLists.get(token);
336
- if (cached && cached.until > now && cached.generation === generation) return cached.tools;
337
- const entries = [...registry.values()];
338
- const shown = await Promise.all(entries.map((entry) => isVisible(entry, ctx)));
339
- const tools = entries.filter((_, index) => shown[index]).map((e) => e.info);
340
- if (token !== void 0) {
341
- visibleLists.delete(token);
342
- if (visibleLists.size >= VISIBLE_LISTS_MAX) {
343
- const oldest = visibleLists.keys().next();
344
- if (!oldest.done) visibleLists.delete(oldest.value);
345
- }
346
- visibleLists.set(token, {
347
- tools,
348
- until: now + LIST_TTL_MS,
349
- generation
350
- });
351
- }
352
- return tools;
409
+ if (cached?.generation === generation) return cached.entries.map((entry) => entry.infoFor(target));
410
+ const [shown, permitted] = await Promise.all([Promise.all(all.map((entry) => isVisible(entry, ctx))), permittedTools(options.authorizer, all.map((entry) => ({
411
+ name: entry.info.name,
412
+ ...entry
413
+ })), contextOf(ctx.db))]);
414
+ const entries = all.filter((_, index) => shown[index] && permitted[index]);
415
+ if (token !== void 0) visibleLists.set(token, {
416
+ entries,
417
+ generation
418
+ }, Date.now() + LIST_TTL_MS);
419
+ return entries.map((entry) => entry.infoFor(target));
353
420
  };
354
421
  const urls = discovery(options, () => server.env.url);
355
422
  const { metadataUrl } = urls;
@@ -427,10 +494,7 @@ function createMcp(betterSupabase, options) {
427
494
  if (origin && options.allowedOrigins && !options.allowedOrigins.includes(origin)) return rpcError(null, INVALID_REQUEST, "Origin not allowed", 403);
428
495
  if (options.allowedHosts && !hostAllowed(urls.host(request), options.allowedHosts)) return rpcError(null, INVALID_REQUEST, "Host not allowed", 403);
429
496
  if (request.method === "OPTIONS" && cors) return endpointPreflight(request, options.allowedOrigins);
430
- if (request.method !== "POST") return new Response(null, {
431
- status: 405,
432
- headers: { allow: cors ? "POST, OPTIONS" : "POST" }
433
- });
497
+ if (request.method !== "POST") return methodNotAllowed(cors ? ["POST", "OPTIONS"] : ["POST"]);
434
498
  const header = request.headers.get("mcp-protocol-version");
435
499
  if (header && !SUPPORTED_VERSIONS.includes(header)) return unsupportedVersion(null, header);
436
500
  const ctx = await server.context(request, { cookies: false });
@@ -486,7 +550,7 @@ function createMcp(betterSupabase, options) {
486
550
  }
487
551
  case "ping": return modern ? notFound() : reply({});
488
552
  case "tools/list": return reply({
489
- tools: await visibleTools(toolContext),
553
+ tools: await visibleTools(toolContext, schemaTargetFor(modern ? MCP_PROTOCOL_VERSION : header ?? "2025-03-26")),
490
554
  ...modern ? {
491
555
  ttlMs: LIST_TTL_MS,
492
556
  cacheScope: "private"
@@ -1,8 +1,10 @@
1
- import { a as AnyModels, i as AnyFunctions } from "../../types-6BdhkmZe.js";
2
- import { r as AuthState } from "../../resolve-ChTYeTEl.js";
3
- import { t as BetterSupabase } from "../../define-CJJkkr1-.js";
4
- import { i as ServerContext$1, o as ServerOptions, t as BetterServer } from "../../server-Bh0EVSwU.js";
5
- import { r as GuardOptions, t as AllowedCaller } from "../../respond-DprrgyXX.js";
1
+ import { a as AnyModels, i as AnyFunctions } from "../../types-CoE5Zwy4.js";
2
+ import { r as AuthState } from "../../resolve-MxXVWyhd.js";
3
+ import { i as CredentialRef, r as CredentialProvider } from "../../provider-ib9wzUDz.js";
4
+ import { i as SupabaseMcpScope, n as SupabaseMcpModule, r as SupabaseMcpPlatformModule, t as SupabaseMcpFeature } from "../../supabase-mcp-C6tMoEjn.js";
5
+ import { t as BetterSupabase } from "../../define-DmcfoNXB.js";
6
+ import { i as ServerContext$1, s as ServerOptions, t as BetterServer } from "../../server-types-CrAmZ8jv.js";
7
+ import { r as GuardOptions, t as AllowedCaller } from "../../respond-Cw-zanCm.js";
6
8
  import { AuthInfo, CallToolResult, Icon, InputRequiredResult, OAuthTokenVerifier, RegisteredTool, ScopeChallengeHandler, ServerContext, StandardSchemaWithJSON, ToolAnnotations } from "@modelcontextprotocol/server";
7
9
  //#region src/mcp/sdk/sdk.d.ts
8
10
  interface McpAuthOptions extends ServerOptions, Omit<GuardOptions, "scopes"> {
@@ -102,4 +104,34 @@ export declare function createMcpAuth<M extends AnyModels, D, F extends AnyFunct
102
104
  */
103
105
  export declare function withBetterSupabaseMcp<S extends ToolRegistrar, M extends AnyModels, F extends AnyFunctions, E, C, P>(server: S, auth: Pick<BetterMcpAuth<M, F, E, C, P>, "contextOf">): BetterMcpServer<S, M, F, E, C, P>;
104
106
  //#endregion
105
- export type { AllowedCaller, BetterMcpAuth, BetterMcpServer, BetterToolCallback, BetterToolConfig, BetterToolContext, BetterToolExtra, GuardOptions, McpAuthOptions, McpFetchHandler, ToolRegistrar };
107
+ //#region src/mcp/sdk/supabase.d.ts
108
+ type UserAuth<C, P> = Extract<AuthState<C, P>, {
109
+ kind: "user";
110
+ }>;
111
+ interface SupabaseMcpHandlerOptions<C = unknown, P = unknown> extends SupabaseMcpScope {
112
+ /** Resolves the Management API token, as the app; never the caller's JWT. */
113
+ readonly credentials: CredentialProvider;
114
+ /** The app credential that holds a Management API access token. */
115
+ readonly credentialRef: CredentialRef;
116
+ /**
117
+ * Who may use the server once the bearer token verified. Its tools
118
+ * administer the project, so allow only the people who run it.
119
+ */
120
+ readonly authorize: (auth: UserAuth<C, P>) => boolean | Promise<boolean>;
121
+ /** The Management API URL; Supabase's when unset. */
122
+ readonly apiUrl?: string;
123
+ }
124
+ /** Loads `@supabase/mcp-server-supabase`; tests pass their own. */
125
+ interface SupabaseMcpLoaders {
126
+ readonly server?: () => Promise<SupabaseMcpModule>;
127
+ readonly platform?: () => Promise<SupabaseMcpPlatformModule>;
128
+ }
129
+ /**
130
+ * Serves Supabase's MCP server (`@supabase/mcp-server-supabase`) behind
131
+ * `createMcpAuth`: the bearer check and metadata of `auth.serve`, then
132
+ * `authorize`, then a server built for the request with the Management API
133
+ * token from `credentials`. The server closes when its response ends.
134
+ */
135
+ export declare function supabaseMcpHandler<M extends AnyModels, F extends AnyFunctions, E, C, P>(auth: Pick<BetterMcpAuth<M, F, E, C, P>, "serve">, options: SupabaseMcpHandlerOptions<C, P>, loaders?: SupabaseMcpLoaders): (request: Request) => Promise<Response>;
136
+ //#endregion
137
+ export type { AllowedCaller, BetterMcpAuth, BetterMcpServer, BetterToolCallback, BetterToolConfig, BetterToolContext, BetterToolExtra, GuardOptions, McpAuthOptions, McpFetchHandler, SupabaseMcpFeature, SupabaseMcpHandlerOptions, SupabaseMcpLoaders, SupabaseMcpModule, SupabaseMcpPlatformModule, SupabaseMcpScope, ToolRegistrar };
@@ -1,10 +1,15 @@
1
+ import { n as dbError } from "../../errors-2M6CKMP4.js";
2
+ import { o as problemResponse } from "../../problem-CJvFeGu7.js";
1
3
  import { o as delegationOf } from "../../impersonation-DcqaTBHx.js";
2
- import { c as extendServer, i as resolveToken, l as withExtra, n as flushEvents, s as createServer } from "../../adapter-iKgjHVPx.js";
3
- import { r as guard } from "../../respond-BUgsXNgk.js";
4
+ import { c as extendServer, i as resolveToken, n as flushEvents, s as createServer } from "../../adapter-CN45ibbV.js";
5
+ import { r as guard } from "../../respond-volM3ByS.js";
6
+ import { t as withExtra } from "../../extra-CGQ2_q3S.js";
4
7
  import { a as withCors, i as metadataPreflight, n as endpointPreflight, r as isMetadataRequest, t as discovery } from "../../http-DdYadv-o.js";
8
+ import { n as loadSupabaseMcp, r as loadSupabaseMcpPlatform, t as isRecord } from "../../supabase-mcp-Cpn5A4i-.js";
5
9
  import { OAuthError, bearerAuthChallengeResponse, verifyBearerToken } from "@modelcontextprotocol/server";
6
10
  //#region src/mcp/sdk/sdk.ts
7
- const STATE_KEY = "betterSupabase";
11
+ /** Where `serve` keeps the verified `AuthState` in `AuthInfo.extra`. */
12
+ const MCP_AUTH_STATE_KEY = "betterSupabase";
8
13
  function claimString(claims, key) {
9
14
  const value = claims[key];
10
15
  return typeof value === "string" ? value : void 0;
@@ -47,7 +52,7 @@ function createMcpAuth(betterSupabase, options = {}) {
47
52
  clientId: claimString(auth.claims, "client_id") ?? claimString(auth.claims, "azp") ?? "",
48
53
  scopes: [...delegationOf(auth.claims)?.scopes ?? []],
49
54
  ...auth.expiresAt === null ? typeof exp === "number" ? { expiresAt: exp } : {} : { expiresAt: auth.expiresAt },
50
- extra: { [STATE_KEY]: auth }
55
+ extra: { [MCP_AUTH_STATE_KEY]: auth }
51
56
  };
52
57
  } };
53
58
  const anon = {
@@ -56,7 +61,7 @@ function createMcpAuth(betterSupabase, options = {}) {
56
61
  };
57
62
  const contextOf = async (ctx) => {
58
63
  const info = ctx.http?.authInfo;
59
- const state = info?.extra?.[STATE_KEY];
64
+ const state = info?.extra?.[MCP_AUTH_STATE_KEY];
60
65
  if (isUserState(state, verified)) return server.contextFor(state);
61
66
  if (info?.token) {
62
67
  const auth = await resolveToken(server, info.token);
@@ -123,4 +128,81 @@ function withBetterSupabaseMcp(server, auth) {
123
128
  return server;
124
129
  }
125
130
  //#endregion
126
- export { createMcpAuth, withBetterSupabaseMcp };
131
+ //#region src/mcp/sdk/supabase.ts
132
+ function userOf(authInfo) {
133
+ if (!isRecord(authInfo) || !isRecord(authInfo["extra"])) return void 0;
134
+ const state = authInfo["extra"][MCP_AUTH_STATE_KEY];
135
+ return isRecord(state) && state["kind"] === "user" ? state : void 0;
136
+ }
137
+ /** The response, with `done` called once its body is read, cancelled or fails. */
138
+ function onFinish(response, done) {
139
+ const source = response.body;
140
+ if (source === null) {
141
+ done();
142
+ return response;
143
+ }
144
+ const reader = source.getReader();
145
+ const body = new ReadableStream({
146
+ async pull(controller) {
147
+ try {
148
+ const chunk = await reader.read();
149
+ if (chunk.done) {
150
+ controller.close();
151
+ done();
152
+ } else controller.enqueue(chunk.value);
153
+ } catch (error) {
154
+ controller.error(error);
155
+ done();
156
+ }
157
+ },
158
+ cancel(reason) {
159
+ done();
160
+ return reader.cancel(reason);
161
+ }
162
+ });
163
+ return new Response(body, {
164
+ status: response.status,
165
+ statusText: response.statusText,
166
+ headers: response.headers
167
+ });
168
+ }
169
+ /**
170
+ * Serves Supabase's MCP server (`@supabase/mcp-server-supabase`) behind
171
+ * `createMcpAuth`: the bearer check and metadata of `auth.serve`, then
172
+ * `authorize`, then a server built for the request with the Management API
173
+ * token from `credentials`. The server closes when its response ends.
174
+ */
175
+ function supabaseMcpHandler(auth, options, loaders = {}) {
176
+ const loadServer = loaders.server ?? loadSupabaseMcp;
177
+ const loadPlatform = loaders.platform ?? loadSupabaseMcpPlatform;
178
+ return auth.serve({ async fetch(request, init) {
179
+ const user = userOf(init?.authInfo);
180
+ if (user === void 0 || !await options.authorize(user)) return problemResponse(dbError("forbidden", "Supabase's MCP server is not open to you"));
181
+ const token = await options.credentials.getToken(options.credentialRef, { subject: { type: "app" } });
182
+ if (!token.ok) return problemResponse(token.error);
183
+ const [server, platform] = await Promise.all([loadServer(), loadPlatform()]);
184
+ const handler = server.createSupabaseMcpHandler({
185
+ platform: platform.createSupabaseApiPlatform({
186
+ accessToken: token.data.token,
187
+ ...options.apiUrl === void 0 ? {} : { apiUrl: options.apiUrl }
188
+ }),
189
+ readOnly: options.readOnly ?? true,
190
+ ...options.projectRef === void 0 ? {} : { projectId: options.projectRef },
191
+ ...options.features === void 0 ? {} : { features: [...options.features] }
192
+ });
193
+ let closed = false;
194
+ const close = () => {
195
+ if (closed) return;
196
+ closed = true;
197
+ handler.close().catch(() => {});
198
+ };
199
+ try {
200
+ return onFinish(await handler.fetch(request, init), close);
201
+ } catch (error) {
202
+ close();
203
+ throw error;
204
+ }
205
+ } });
206
+ }
207
+ //#endregion
208
+ export { createMcpAuth, supabaseMcpHandler, withBetterSupabaseMcp };
@@ -82,7 +82,6 @@ interface AiMessage {
82
82
  readonly parts: readonly AiMessagePart[];
83
83
  readonly metadata?: Readonly<Record<string, unknown>>;
84
84
  }
85
- declare const AI_MESSAGE_PART_TYPES: readonly AiMessagePartType[];
86
85
  /**
87
86
  * A Standard Schema for `AiMessage`, matching `schemas/ai-message-v1.json`.
88
87
  * Pass it to `validate()` or any library that takes a Standard Schema.
@@ -91,4 +90,4 @@ declare const aiMessageSchema: StandardSchemaV1<unknown, AiMessage>;
91
90
  /** Whether `value` is a canonical message, without collecting the issues. */
92
91
  declare function isAiMessage(value: unknown): value is AiMessage;
93
92
  //#endregion
94
- export { isAiMessage as _, AiMessage as a, AiMessageRole as c, AiStepPart as d, AiTextPart as f, aiMessageSchema as g, AiToolResultPart as h, AiFilePart as i, AiReasoningPart as l, AiToolCallPart as m, AI_MESSAGE_SCHEMA_ID as n, AiMessagePart as o, AiToolApprovalPart as p, AiDataPart as r, AiMessagePartType as s, AI_MESSAGE_PART_TYPES as t, AiSourcePart as u };
93
+ export { AiMessagePart as a, AiReasoningPart as c, AiTextPart as d, AiToolApprovalPart as f, isAiMessage as g, aiMessageSchema as h, AiMessage as i, AiSourcePart as l, AiToolResultPart as m, AiDataPart as n, AiMessagePartType as o, AiToolCallPart as p, AiFilePart as r, AiMessageRole as s, AI_MESSAGE_SCHEMA_ID as t, AiStepPart as u };