better-supabase 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (499) hide show
  1. package/README.md +6 -2
  2. package/dist/{access-sql-B0dF-SoF.js → access-sql-CrSbK1q-.js} +1 -1
  3. package/dist/{adapter-iKgjHVPx.js → adapter-CN45ibbV.js} +658 -157
  4. package/dist/{agents-CVHGd7It.d.ts → agents-BY_LQXtQ.d.ts} +4 -4
  5. package/dist/{ai-cache-CBWs1W0k.js → ai-cache-Dfgk8nBT.js} +2 -1
  6. package/dist/{ai-cache-DaDu_G5L.d.ts → ai-cache-DrUMMgp6.d.ts} +4 -4
  7. package/dist/{ai-chat-B24UI962.js → ai-chat-CVLRWbtS.js} +4 -3
  8. package/dist/{ai-chat-7amvXjmQ.d.ts → ai-chat-DXkMy74O.d.ts} +5 -5
  9. package/dist/{ai-files-CSPNswUY.js → ai-files-CioLu5du.js} +5 -4
  10. package/dist/ai-message-DfaP8sis.js +14 -0
  11. package/dist/ai-sdk/agents/index.d.ts +4 -4
  12. package/dist/ai-sdk/batches/index.d.ts +4 -4
  13. package/dist/ai-sdk/batches/index.js +4 -4
  14. package/dist/ai-sdk/cache/index.d.ts +2 -2
  15. package/dist/ai-sdk/cache/index.js +2 -2
  16. package/dist/ai-sdk/chat/index.d.ts +1 -1
  17. package/dist/ai-sdk/chat/index.js +8 -20
  18. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  19. package/dist/ai-sdk/files/index.d.ts +3 -3
  20. package/dist/ai-sdk/files/index.js +4 -4
  21. package/dist/ai-sdk/index.d.ts +37 -9
  22. package/dist/ai-sdk/index.js +3 -2
  23. package/dist/ai-sdk/mcp/index.d.ts +43 -6
  24. package/dist/ai-sdk/mcp/index.js +36 -7
  25. package/dist/ai-sdk/memory/index.d.ts +2 -2
  26. package/dist/ai-sdk/memory/index.js +1 -1
  27. package/dist/ai-sdk/workflow/index.d.ts +6 -6
  28. package/dist/ai-sdk/workflow/index.js +13 -24
  29. package/dist/{ai-tasks-Cd1HMFvB.d.ts → ai-tasks-BRQ6iQLc.d.ts} +4 -4
  30. package/dist/{announcements-ZRGnScWI.d.ts → announcements-Bouy0Ski.d.ts} +3 -3
  31. package/dist/{announcements-CiyOs-xP.js → announcements-p_BFofiR.js} +1 -1
  32. package/dist/api-Dnf2q-Ht.d.ts +370 -0
  33. package/dist/api-DtHFC037.js +676 -0
  34. package/dist/{api-keys-CIjghYjV.d.ts → api-keys-C8BlF3L2.d.ts} +4 -4
  35. package/dist/arazzo/index.d.ts +255 -0
  36. package/dist/arazzo/index.js +622 -0
  37. package/dist/{assistant-DwdpDH1q.d.ts → assistant-DBlFDZsi.d.ts} +5 -5
  38. package/dist/astro/index.d.ts +7 -7
  39. package/dist/astro/index.js +7 -7
  40. package/dist/asyncapi/index.d.ts +103 -0
  41. package/dist/asyncapi/index.js +569 -0
  42. package/dist/authorizer-ayxUDXXP.js +126 -0
  43. package/dist/authorizer-eiOjo-3l.d.ts +73 -0
  44. package/dist/better-result/index.d.ts +118 -0
  45. package/dist/better-result/index.js +64 -0
  46. package/dist/{bind-l4kAvYSv.js → bind-ButSzrHe.js} +1 -1
  47. package/dist/{bind-Bu_ZNa3W.d.ts → bind-CQ5mPyX1.d.ts} +3 -3
  48. package/dist/{block-events-CrT8r7Fe.js → block-events-DTxU5tfr.js} +18 -3
  49. package/dist/{block-fields-GFkxl4dP.js → block-fields-CroxUuF2.js} +3 -3
  50. package/dist/{block-fields-SJ6fEf3o.d.ts → block-fields-D1pfrcIY.d.ts} +2 -2
  51. package/dist/{block-helpers-CKtbFcRv.d.ts → block-helpers-C0Xj8War.d.ts} +2 -2
  52. package/dist/{block-helpers-DWHxHsEQ.js → block-helpers-Cy3pB96I.js} +41 -9
  53. package/dist/{block-hooks-BmjMyXTa.js → block-hooks-BPNMIlLl.js} +3 -3
  54. package/dist/{block-hooks-plbZ0AbJ.d.ts → block-hooks-DaOVC7SC.d.ts} +3 -3
  55. package/dist/{block-transport-BLr-ZgLc.js → block-transport-bAKh-dGc.js} +28 -2
  56. package/dist/{block-transport-DvaoPuZ9.d.ts → block-transport-inD4fFq-.d.ts} +24 -2
  57. package/dist/blocks/agents/index.d.ts +3 -3
  58. package/dist/blocks/agents/index.js +5 -4
  59. package/dist/blocks/ai-cache/index.d.ts +3 -3
  60. package/dist/blocks/ai-cache/index.js +3 -3
  61. package/dist/blocks/ai-chat/index.d.ts +9 -4
  62. package/dist/blocks/ai-chat/index.js +5 -5
  63. package/dist/blocks/ai-chat/react/index.d.ts +3 -3
  64. package/dist/blocks/ai-chat/react/index.js +5 -5
  65. package/dist/blocks/ai-files/index.d.ts +3 -3
  66. package/dist/blocks/ai-files/index.js +3 -3
  67. package/dist/blocks/ai-providers/index.d.ts +3 -3
  68. package/dist/blocks/ai-providers/index.js +8 -7
  69. package/dist/blocks/ai-tasks/index.d.ts +3 -3
  70. package/dist/blocks/ai-tasks/index.js +7 -6
  71. package/dist/blocks/announcements/index.d.ts +3 -3
  72. package/dist/blocks/announcements/index.js +3 -3
  73. package/dist/blocks/announcements/react/index.d.ts +3 -3
  74. package/dist/blocks/announcements/react/index.js +3 -3
  75. package/dist/blocks/api-keys/index.d.ts +5 -5
  76. package/dist/blocks/api-keys/index.js +8 -8
  77. package/dist/blocks/attachments/index.d.ts +12 -8
  78. package/dist/blocks/attachments/index.js +22 -13
  79. package/dist/blocks/audit/index.d.ts +21 -10
  80. package/dist/blocks/audit/index.js +30 -11
  81. package/dist/blocks/billing/index.d.ts +11 -9
  82. package/dist/blocks/billing/index.js +15 -15
  83. package/dist/blocks/comments/index.d.ts +8 -8
  84. package/dist/blocks/comments/index.js +8 -7
  85. package/dist/blocks/connectors/index.d.ts +3 -3
  86. package/dist/blocks/connectors/index.js +7 -6
  87. package/dist/blocks/data-lifecycle/index.d.ts +12 -8
  88. package/dist/blocks/data-lifecycle/index.js +13 -8
  89. package/dist/blocks/entitlements/index.d.ts +3 -3
  90. package/dist/blocks/entitlements/index.js +1 -1
  91. package/dist/blocks/flags/index.d.ts +4 -4
  92. package/dist/blocks/flags/index.js +4 -3
  93. package/dist/blocks/inbox/index.d.ts +3 -3
  94. package/dist/blocks/inbox/index.js +4 -5
  95. package/dist/blocks/inbox/react/index.d.ts +1 -1
  96. package/dist/blocks/inbox/react/index.js +1 -1
  97. package/dist/blocks/inbox/react/server.d.ts +1 -1
  98. package/dist/blocks/index.d.ts +10 -10
  99. package/dist/blocks/index.js +6 -6
  100. package/dist/blocks/jobs/index.d.ts +48 -32
  101. package/dist/blocks/jobs/index.js +44 -287
  102. package/dist/blocks/knowledge/index.d.ts +3 -3
  103. package/dist/blocks/knowledge/index.js +3 -3
  104. package/dist/blocks/memory/index.d.ts +4 -4
  105. package/dist/blocks/memory/index.js +7 -6
  106. package/dist/blocks/notifications/index.d.ts +11 -9
  107. package/dist/blocks/notifications/index.js +20 -25
  108. package/dist/blocks/notifications/react/index.d.ts +1 -1
  109. package/dist/blocks/notifications/react/index.js +1 -1
  110. package/dist/blocks/onboarding/index.d.ts +3 -3
  111. package/dist/blocks/onboarding/index.js +3 -3
  112. package/dist/blocks/onboarding/react/index.d.ts +2 -2
  113. package/dist/blocks/onboarding/react/index.js +2 -2
  114. package/dist/blocks/onboarding/react/server.d.ts +1 -1
  115. package/dist/blocks/organizations/index.d.ts +9 -9
  116. package/dist/blocks/organizations/index.js +11 -18
  117. package/dist/blocks/outbox/index.d.ts +2 -2
  118. package/dist/blocks/outbox/index.js +16 -25
  119. package/dist/blocks/profiles/index.d.ts +7 -7
  120. package/dist/blocks/profiles/index.js +7 -6
  121. package/dist/blocks/push/index.d.ts +4 -4
  122. package/dist/blocks/push/index.js +3 -3
  123. package/dist/blocks/settings/index.d.ts +4 -4
  124. package/dist/blocks/settings/index.js +7 -6
  125. package/dist/blocks/sso/index.d.ts +5 -5
  126. package/dist/blocks/sso/index.js +6 -5
  127. package/dist/blocks/usage/index.d.ts +3 -3
  128. package/dist/blocks/usage/index.js +5 -4
  129. package/dist/blocks/waitlist/index.d.ts +5 -5
  130. package/dist/blocks/waitlist/index.js +5 -4
  131. package/dist/blocks/webhooks/index.d.ts +22 -13
  132. package/dist/blocks/webhooks/index.js +41 -70
  133. package/dist/blocks/workflow-builder/index.d.ts +4 -4
  134. package/dist/blocks/workflow-builder/index.js +3 -3
  135. package/dist/blocks/workflow-builder/react/index.d.ts +4 -4
  136. package/dist/blocks/workflow-builder/react/index.js +4 -4
  137. package/dist/blocks/workflows/index.d.ts +3 -3
  138. package/dist/blocks/workflows/index.js +3 -3
  139. package/dist/blocks/workflows/react/index.d.ts +3 -3
  140. package/dist/blocks/workflows/react/index.js +3 -3
  141. package/dist/build-hPwk3_X5.js +1296 -0
  142. package/dist/{build-BXIzE6Xv.js → build-meLuYGri.js} +3 -3
  143. package/dist/casing-DdFWEtqr.js +16 -0
  144. package/dist/chat-sdk/index.d.ts +6 -6
  145. package/dist/chat-sdk/index.js +5 -4
  146. package/dist/chat-sdk/react/index.d.ts +1 -1
  147. package/dist/chat-sdk/react/server.d.ts +1 -1
  148. package/dist/{claims-DDBQT6BK.js → claims-0KZVT804.js} +1 -1
  149. package/dist/cli/add-1dc5wM5k.js +69 -0
  150. package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
  151. package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
  152. package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
  153. package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
  154. package/dist/cli/bin.js +4 -4
  155. package/dist/cli/cache-CIfA-jBV.js +483 -0
  156. package/dist/cli/{codemod-Bl_tQpHn.js → codemod-JVlTQQG2.js} +4 -4
  157. package/dist/cli/{command-CK14fP91.js → command-DV-StG1x.js} +5 -0
  158. package/dist/cli/{config-DU7EJImt.js → config-C2Pz2_4A.js} +7 -4
  159. package/dist/cli/config-DpbF8ML3.js +2 -0
  160. package/dist/cli/{config-NiPxAmUF.js → config-M-WzL9O2.js} +116 -18
  161. package/dist/cli/{db-DOBPt660.js → db-BkcfOlyB.js} +2 -1
  162. package/dist/cli/{diff-SjkO5rNr.js → diff-D1jGdb3Y.js} +1 -1
  163. package/dist/cli/{doctor-DJk0aeBi.js → doctor-VcDtuusV.js} +316 -221
  164. package/dist/cli/emit-BHHfwUoT.js +1136 -0
  165. package/dist/cli/{env-qXgyMV6r.js → env-B--LMhEe.js} +13 -10
  166. package/dist/cli/env-vzBG90Um.js +2 -0
  167. package/dist/cli/{env-CJLbUVPB.js → env-zHJtMIBo.js} +11 -3
  168. package/dist/cli/{errors-4v4DTtda.js → errors-CqTLXe2M.js} +18 -2
  169. package/dist/cli/{fastest-levenshtein-CFN-lNDv.js → fastest-levenshtein-CF7BCi9l.js} +1 -1
  170. package/dist/cli/files-BVupXPIC.js +34 -0
  171. package/dist/cli/gen-DmVj3u4L.js +322 -0
  172. package/dist/cli/{init-BHuEQrQK.js → glue-C1UE8gQN.js} +16 -313
  173. package/dist/cli/index.d.ts +59 -31
  174. package/dist/cli/index.js +8 -6
  175. package/dist/cli/init-CVZ3s5kl.js +258 -0
  176. package/dist/cli/{introspect-DzR2nyQb.js → introspect-BToGNfm-.js} +14 -14
  177. package/dist/cli/{io-DI1mTdSA.js → io-CFzJVJ68.js} +5 -1
  178. package/dist/cli/{keys-BGCnnb-s.js → keys-CJhtIxJ3.js} +4 -4
  179. package/dist/cli/metadata-DSRKCaf-.js +133 -0
  180. package/dist/cli/names-D6LrQnOv.js +6 -0
  181. package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
  182. package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
  183. package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
  184. package/dist/cli/{openapi-BlRJ18s3.js → openapi-DWa4Ir1q.js} +8 -14
  185. package/dist/cli/prompts-BdeVmVpg.js +2 -0
  186. package/dist/cli/{prompts-BNcNfAve.js → prompts-DZJB1nTw.js} +6 -6
  187. package/dist/cli/{rolldown-runtime-BPOCksWG.js → rolldown-runtime-CMFfr-1z.js} +3 -1
  188. package/dist/cli/run-DA6_lg3w.js +389 -0
  189. package/dist/cli/run-DuN1MX-7.js +705 -0
  190. package/dist/cli/scaffold-5DenHSxF.js +292 -0
  191. package/dist/cli/scaffold-CwQUMFRb.js +2 -0
  192. package/dist/cli/{seed-DQzqT7LP.js → seed-CzBmrGON.js} +14 -18
  193. package/dist/cli/seed-DOmit9Hq.js +2 -0
  194. package/dist/cli/{skills-QQs4q68J.js → skills-CnO8QFS7.js} +7 -6
  195. package/dist/cli/snapshot-Bstk6ulj.js +287 -0
  196. package/dist/cli/source-args-BYfq6imV.js +31 -0
  197. package/dist/cli/spec-CzosTYm3.js +7438 -0
  198. package/dist/cli/spec-T_0Bcyw7.js +2 -0
  199. package/dist/cli/{sql-B8csQPyn.js → sql-BKOOQAX3.js} +240 -218
  200. package/dist/cli/sql-DJrNDxQm.js +3 -0
  201. package/dist/cli/{style-C0NFdJRL.js → style-CB3vxgh0.js} +3 -3
  202. package/dist/cli/typegen-Demi5-VQ.js +486 -0
  203. package/dist/cli/validate-Ca13ktgz.js +7522 -0
  204. package/dist/cli/{version-59gcepIG.js → version-B4k0aUxS.js} +1 -1
  205. package/dist/client/index.d.ts +4 -3
  206. package/dist/client/index.js +60 -3
  207. package/dist/client/native/index.d.ts +3 -3
  208. package/dist/client/native/index.js +3 -3
  209. package/dist/{client-CI0Z2zWX.js → client-wxeTQFtB.js} +36 -3
  210. package/dist/{clone-BfgmLU90.js → clone-dN9XOL1K.js} +9 -1
  211. package/dist/{cloud-event-BnmD5fb9.js → cloud-event-CTh9Sr5w.js} +16 -2
  212. package/dist/{cloud-event-C1JCc1bH.d.ts → cloud-event-Dune0KI7.d.ts} +16 -2
  213. package/dist/{compiler-DY_wkj4R.d.ts → compiler-V1qvcST1.d.ts} +2 -2
  214. package/dist/{compose-BIBNgAnq.js → compose-BHej1acw.js} +3 -3
  215. package/dist/{composite--yqry7uW.d.ts → composite-CWAJTRBF.d.ts} +6 -6
  216. package/dist/{composite-DXVUibdi.js → composite-zTe0TCqj.js} +4 -4
  217. package/dist/config/index.d.ts +3 -4
  218. package/dist/config/index.js +4 -4
  219. package/dist/config-DlKvtt95.js +540 -0
  220. package/dist/{connector-Dv8kK0MO.d.ts → connector-CySQEFcW.d.ts} +1 -1
  221. package/dist/{connectors-CrpknU0P.d.ts → connectors--PGhmiu0.d.ts} +4 -4
  222. package/dist/{context-BCrWe7ow.d.ts → context-DsV2SueA.d.ts} +11 -2
  223. package/dist/context-nPDvQ-Zl.js +41 -0
  224. package/dist/credentials/index.d.ts +5 -5
  225. package/dist/credentials/index.js +9 -17
  226. package/dist/{cron-DVPUg5k3.js → cron-D25Ukpxy.js} +1 -1
  227. package/dist/cron-route-D2AN9SA1.js +24 -0
  228. package/dist/{csv-DCK-PT1n.js → csv-BZnHA1Py.js} +1 -1
  229. package/dist/{define-B-TVjC25.js → define-CFQcvM20.js} +263 -229
  230. package/dist/{define-CJJkkr1-.d.ts → define-DmcfoNXB.d.ts} +136 -111
  231. package/dist/edge/index.d.ts +66 -13
  232. package/dist/edge/index.js +65 -39
  233. package/dist/elysia/index.d.ts +1 -1
  234. package/dist/elysia/index.js +1 -1
  235. package/dist/{embeddings-C9KGQnXt.d.ts → embeddings-B4vhS-dY.d.ts} +1 -1
  236. package/dist/{ended-XjeGQ5XW.d.ts → ended-CcvcRqEd.d.ts} +7 -1
  237. package/dist/{entitlements-DRl6ZJUm.js → entitlements-BYFf0Cdh.js} +2 -2
  238. package/dist/{entitlements-BKSVGtrG.d.ts → entitlements-Ds8qoYZ-.d.ts} +1 -1
  239. package/dist/env/index.d.ts +1 -1
  240. package/dist/env/index.js +9 -2
  241. package/dist/{errors-B11Duf73.js → errors-2M6CKMP4.js} +5 -0
  242. package/dist/{errors-DLjJHPLK.js → errors-rZ7VIqp6.js} +2 -2
  243. package/dist/{escape-like-ImTK0ps_.d.ts → escape-like-DDWoHzh_.d.ts} +1 -1
  244. package/dist/eve/index.d.ts +5 -5
  245. package/dist/eve/index.js +5 -11
  246. package/dist/{eve-gT2Fpjut.d.ts → eve-CoAIcCkq.d.ts} +2 -2
  247. package/dist/events/index.d.ts +4 -4
  248. package/dist/events/index.js +7 -2
  249. package/dist/{events-DWDhx77e.d.ts → events-D1BOCll8.d.ts} +6 -4
  250. package/dist/{executor-Bq28caBo.js → executor-B-fD7DLt.js} +52 -35
  251. package/dist/executor-B_Hfobee.js +162 -0
  252. package/dist/{executor-BVBFM86G.d.ts → executor-CpxLPCiz.d.ts} +1 -1
  253. package/dist/{executor-CaWigTyR.d.ts → executor-DfEtf0cq.d.ts} +43 -27
  254. package/dist/{executor-DvsBbNBS.d.ts → executor-Drzu3dBK.d.ts} +2 -2
  255. package/dist/{executor-DbvExCFC.d.ts → executor-ngjKL_Pe.d.ts} +2 -2
  256. package/dist/expo/index.d.ts +4 -4
  257. package/dist/expo/index.js +6 -6
  258. package/dist/expo-sqlite/index.d.ts +3 -3
  259. package/dist/expo-sqlite/index.js +2 -2
  260. package/dist/extra-CGQ2_q3S.js +10 -0
  261. package/dist/{field-errors-BFOa7WhB.d.ts → field-errors-DIe9XYWL.d.ts} +17 -7
  262. package/dist/{field-errors-VF1yb8yI.js → field-errors-DZVRWRkf.js} +1 -1
  263. package/dist/format-DTXdu8ya.d.ts +70 -0
  264. package/dist/{framework-BmzgK32X.d.ts → framework-148t1m3C.d.ts} +5 -5
  265. package/dist/{framework-a7aRCIqv.js → framework-3ey3QmrO.js} +2 -2
  266. package/dist/function-contract-BcZenXMO.d.ts +8 -0
  267. package/dist/{gateway-C1ssRHnf.d.ts → gateway-S9vicgeo.d.ts} +4 -4
  268. package/dist/{guards-BnzDvFrz.js → guards-6F2bCtQR.js} +3 -1
  269. package/dist/h3/index.d.ts +1 -1
  270. package/dist/h3/index.js +1 -1
  271. package/dist/h3/v1/index.d.ts +1 -1
  272. package/dist/h3/v1/index.js +1 -1
  273. package/dist/{message-CaKlqdsX.js → history-GH1HJWQV.js} +65 -13
  274. package/dist/hmac-DCud0myt.js +22 -0
  275. package/dist/hono/index.d.ts +19 -14
  276. package/dist/hono/index.js +21 -16
  277. package/dist/{hooks-1BTCJsiw.js → hooks-Bhza9Hnr.js} +68 -100
  278. package/dist/http-sbmBe5d2.js +25 -0
  279. package/dist/{inbox-i7E1ppo6.d.ts → inbox-Cd1KCEBL.d.ts} +3 -3
  280. package/dist/index-B72Rvv_j.d.ts +89 -0
  281. package/dist/{index-DunNRdnT.d.ts → index-BCHR4Ucl.d.ts} +4 -4
  282. package/dist/{index-CLg87OBW.d.ts → index-BUK7jUzR.d.ts} +6 -0
  283. package/dist/{config-D44Y7PAv.d.ts → index-Ba1SI-uO.d.ts} +625 -278
  284. package/dist/{index-D48jVS-N.d.ts → index-BfxOaOYs.d.ts} +4 -5
  285. package/dist/{index-ClmjK_o-.d.ts → index-CicIyqOe.d.ts} +4 -4
  286. package/dist/{index-ACiNPN4Z.d.ts → index-D69h4QqD.d.ts} +1 -1
  287. package/dist/index-DG2SUXDQ.d.ts +58 -0
  288. package/dist/{index-Bepi-Hgg.d.ts → index-DoNVLHOU.d.ts} +3 -3
  289. package/dist/{index-CdZKQF98.d.ts → index-R274XFlg.d.ts} +1 -1
  290. package/dist/{index-CewnYSpv.d.ts → index-_4R4b01v.d.ts} +8 -18
  291. package/dist/index.d.ts +89 -14
  292. package/dist/index.js +12 -11
  293. package/dist/{json-schema-CvER4kgT.js → json-schema-CT4tvrkA.js} +148 -102
  294. package/dist/{kit-Fm-Fv7q5.js → kit-BhHr9T9v.js} +36 -10
  295. package/dist/{kit-CkNzZUqv.d.ts → kit-W99LCPBS.d.ts} +13 -7
  296. package/dist/{knowledge-BXBbT0Tr.d.ts → knowledge-CAReFpRA.d.ts} +5 -5
  297. package/dist/{knowledge-CDmiMLew.js → knowledge-DnHtb64A.js} +4 -3
  298. package/dist/list/index.d.ts +1 -2
  299. package/dist/{list-query-BRt-zDF7.d.ts → list-query-D3JQeEL7.d.ts} +4 -4
  300. package/dist/mcp/index.d.ts +49 -19
  301. package/dist/mcp/index.js +158 -94
  302. package/dist/mcp/sdk/index.d.ts +38 -6
  303. package/dist/mcp/sdk/index.js +88 -6
  304. package/dist/{message-CfDoR0Y6.d.ts → message-B0fNJgq8.d.ts} +1 -2
  305. package/dist/{messages-B9-5887d.js → messages-CJoHHCWT.js} +4 -205
  306. package/dist/{mfa-Daak8ukG.d.ts → mfa-SZc9YYyb.d.ts} +1 -1
  307. package/dist/model-OgBxvk3N.d.ts +300 -0
  308. package/dist/model-messages-Cxw_Up4f.js +206 -0
  309. package/dist/model-messages-D4GZllOD.d.ts +34 -0
  310. package/dist/modules-DksjZyMW.js +77 -0
  311. package/dist/nestjs/index.d.ts +2 -2
  312. package/dist/nestjs/index.js +1 -1
  313. package/dist/next/index.d.ts +105 -55
  314. package/dist/next/index.js +204 -170
  315. package/dist/node/index.d.ts +2 -2
  316. package/dist/node/index.js +1 -1
  317. package/dist/{onboarding-BZGHYJks.d.ts → onboarding-LZvlK1P4.d.ts} +3 -3
  318. package/dist/openapi/index.d.ts +4 -2
  319. package/dist/openapi/index.js +21 -343
  320. package/dist/optional-peer-D1pi-skw.js +24 -0
  321. package/dist/orpc/index.d.ts +8 -8
  322. package/dist/orpc/index.js +21 -20
  323. package/dist/otel/index.d.ts +3 -3
  324. package/dist/otel/index.js +7 -7
  325. package/dist/{outbox-Cq7pPYvl.d.ts → outbox-DZfAvfzC.d.ts} +6 -6
  326. package/dist/overlay/index.d.ts +233 -0
  327. package/dist/overlay/index.js +554 -0
  328. package/dist/{plugin-FGY8UhYm.d.ts → plugin-CPK2HsbY.d.ts} +42 -3
  329. package/dist/plugins/actor/index.d.ts +1 -1
  330. package/dist/plugins/actor/index.js +1 -1
  331. package/dist/plugins/rules/index.d.ts +2 -2
  332. package/dist/plugins/rules/index.js +1 -1
  333. package/dist/plugins/soft-delete/index.d.ts +3 -3
  334. package/dist/plugins/soft-delete/index.js +9 -2
  335. package/dist/plugins/tenant/index.d.ts +7 -2
  336. package/dist/plugins/tenant/index.js +16 -2
  337. package/dist/plugins/timestamps/index.d.ts +1 -1
  338. package/dist/plugins/timestamps/index.js +8 -1
  339. package/dist/plugins/validation/index.d.ts +2 -2
  340. package/dist/plugins/validation/index.js +4 -4
  341. package/dist/{pool-CAu2nLrL.d.ts → pool-gkhbGp2E.d.ts} +2 -2
  342. package/dist/postgres/index.d.ts +4 -4
  343. package/dist/postgres/index.js +2 -1
  344. package/dist/{postgrest-BLVdEnfe.d.ts → postgrest-BUqLag2Q.d.ts} +1 -1
  345. package/dist/powersync/index.d.ts +5 -5
  346. package/dist/powersync/index.js +4 -4
  347. package/dist/powersync/react/index.d.ts +3 -3
  348. package/dist/powersync/react/index.js +1 -1
  349. package/dist/{problem-BreOl8b8.js → problem-CJvFeGu7.js} +13 -2
  350. package/dist/{problem-DD8LZFjc.d.ts → problem-TvGdxO1t.d.ts} +7 -1
  351. package/dist/{provider-Di3sRutW.js → provider-DxRTex4x.js} +1 -1
  352. package/dist/{provider-D-UEMvSD.d.ts → provider-ib9wzUDz.d.ts} +2 -2
  353. package/dist/query/index.d.ts +2 -2
  354. package/dist/query/index.js +1 -1
  355. package/dist/{query-BQ-NaZon.js → query-Ctz-qKRx.js} +1 -1
  356. package/dist/rate-limit-Bw7HgmFj.js +260 -0
  357. package/dist/react/index.d.ts +9 -9
  358. package/dist/react/index.js +4 -4
  359. package/dist/react/native/index.d.ts +1 -1
  360. package/dist/react/native/index.js +2 -2
  361. package/dist/react/server.d.ts +10 -10
  362. package/dist/react/server.js +3 -3
  363. package/dist/react/session.d.ts +2 -2
  364. package/dist/{react-F80mF4-t.js → react-Bmpo59D7.js} +4 -4
  365. package/dist/react-router/index.d.ts +6 -6
  366. package/dist/react-router/index.js +9 -11
  367. package/dist/{read-set-DuKWC9Mj.js → read-set-DAeWhqPf.js} +2 -2
  368. package/dist/realtime/index.d.ts +3 -3
  369. package/dist/realtime/index.js +30 -36
  370. package/dist/{refusal-DhSU2Vvr.d.ts → refusal-CFI8-5nf.d.ts} +4 -1
  371. package/dist/{refusal-CeJWxmkH.js → refusal-K78A1Vmq.js} +5 -5
  372. package/dist/{resolve-tJZY3FEa.js → resolve-Bvgf3ut_.js} +131 -42
  373. package/dist/{resolve-ChTYeTEl.d.ts → resolve-MxXVWyhd.d.ts} +12 -8
  374. package/dist/resource--vTrBe6I.d.ts +103 -0
  375. package/dist/resource-BqNqlYg9.js +91 -0
  376. package/dist/resource-DA811u_4.js +463 -0
  377. package/dist/resource-execute-rbKvuCsY.d.ts +12 -0
  378. package/dist/resource-schemas-BJ518zFH.js +79 -0
  379. package/dist/resource-types-CqB6GWGT.d.ts +141 -0
  380. package/dist/resources-BVYPnuLo.js +56 -0
  381. package/dist/resources-DZSk8tXJ.d.ts +7 -0
  382. package/dist/{respond-DprrgyXX.d.ts → respond-Cw-zanCm.d.ts} +3 -3
  383. package/dist/{respond-BUgsXNgk.js → respond-volM3ByS.js} +4 -4
  384. package/dist/{result-D7y2fT87.d.ts → result-BchM1XZn.d.ts} +7 -1
  385. package/dist/{result-DzUbqgdW.js → result-DEqHCMKP.js} +1 -1
  386. package/dist/server/index.d.ts +81 -19
  387. package/dist/server/index.js +16 -14
  388. package/dist/{server-Bh0EVSwU.d.ts → server-types-CrAmZ8jv.d.ts} +92 -36
  389. package/dist/{shared-CxWmcyqB.js → shared-DHjhfRdV.js} +2 -15
  390. package/dist/shared-DTneRoxi.js +14 -0
  391. package/dist/{sign-in-Cb1mwv6X.js → sign-in-D_yoP0PF.js} +1 -1
  392. package/dist/signatures-BRS_p3WD.d.ts +34 -0
  393. package/dist/signatures-DsWv_bYR.js +103 -0
  394. package/dist/{signers-4y62_VIi.d.ts → signers-cpdmZYrv.d.ts} +1 -1
  395. package/dist/solid/index.d.ts +9 -18
  396. package/dist/solid/index.js +2 -2
  397. package/dist/solid-start/index.d.ts +6 -6
  398. package/dist/solid-start/index.js +7 -7
  399. package/dist/spec/index.d.ts +134 -0
  400. package/dist/spec/index.js +353 -0
  401. package/dist/{spec-pins-C89s6DyW.d.ts → spec-pins-CwzDY25w.d.ts} +18 -1
  402. package/dist/{spec-pins--j6mTok4.js → spec-pins-DsLfUH7l.js} +14 -1
  403. package/dist/sql/index.d.ts +145 -119
  404. package/dist/sql/index.js +19921 -19798
  405. package/dist/{executor-De1Of3m3.js → sql-CwuqaQ4Y.js} +34 -169
  406. package/dist/ssr/index.d.ts +4 -4
  407. package/dist/ssr/index.js +3 -2
  408. package/dist/{standard-BK0cqJ7y.js → standard-DkzZUneg.js} +2 -2
  409. package/dist/{standard-CYsm7xpT.d.ts → standard-lmkbOtPB.d.ts} +1 -1
  410. package/dist/{stats-D_AD9GGu.js → stats-DhU78Ctf.js} +8 -4
  411. package/dist/storage/index.d.ts +4 -6
  412. package/dist/storage/index.js +16 -17
  413. package/dist/{bucket-Cl46E3jS.d.ts → storage-api-CB7Zl1Ci.d.ts} +243 -8
  414. package/dist/{store-CGjgWu5n.d.ts → store-DsIYEBnv.d.ts} +1 -1
  415. package/dist/streams/index.d.ts +4 -4
  416. package/dist/streams/index.js +5 -4
  417. package/dist/streams/redis/index.d.ts +1 -1
  418. package/dist/streams/redis/index.js +5 -11
  419. package/dist/{stripe-BMj5LtsT.js → stripe-v-Y2lmop.js} +2 -8
  420. package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
  421. package/dist/supabase-mcp-Cpn5A4i-.js +28 -0
  422. package/dist/{support-ig_K4PvS.js → support-D1pFFouF.js} +71 -35
  423. package/dist/{support-view-CVOJJLpc.d.ts → support-view-scqMgtOo.d.ts} +1 -1
  424. package/dist/svelte/index.d.ts +8 -17
  425. package/dist/svelte/index.js +2 -2
  426. package/dist/sveltekit/index.d.ts +7 -7
  427. package/dist/sveltekit/index.js +10 -12
  428. package/dist/table-schema-htM_SbCW.js +286 -0
  429. package/dist/{tags-Cx-LnIQP.d.ts → tags-BO9LjtWG.d.ts} +1 -1
  430. package/dist/tanstack-db/index.d.ts +2 -2
  431. package/dist/tanstack-db/supabase/index.d.ts +52 -0
  432. package/dist/tanstack-db/supabase/index.js +97 -0
  433. package/dist/tanstack-start/index.d.ts +6 -6
  434. package/dist/tanstack-start/index.js +8 -12
  435. package/dist/{tee-CoEppCER.js → tee-Cb98Vn3b.js} +1 -1
  436. package/dist/{template--jDkl3UP.js → template-lPVh-EwW.js} +11 -2
  437. package/dist/{temporal-required-BVvW7SYJ.js → temporal-required-BtynQtM-.js} +1 -1
  438. package/dist/{tenant-BxNFk9bx.d.ts → tenant-CM368LXb.d.ts} +2 -2
  439. package/dist/testing/index.d.ts +249 -118
  440. package/dist/testing/index.js +1418 -870
  441. package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
  442. package/dist/types-BRTSpOIh.js +5 -0
  443. package/dist/{types-C05bxW-W.d.ts → types-Bb_4-vdW.d.ts} +4 -4
  444. package/dist/{types-AYOvcyep.d.ts → types-CD6yCDx3.d.ts} +5 -5
  445. package/dist/{types-6rocye-y.d.ts → types-CbOUc5IH.d.ts} +4 -4
  446. package/dist/{types-6BdhkmZe.d.ts → types-CoE5Zwy4.d.ts} +8 -0
  447. package/dist/{types-DGs5L0VN.d.ts → types-DSJ3-m9X.d.ts} +4 -4
  448. package/dist/{queue-CLJurhdy.d.ts → types-D__3EN0q.d.ts} +17 -19
  449. package/dist/{usage-CrvrL2vw.d.ts → usage-D0NNUFfr.d.ts} +3 -3
  450. package/dist/{vault-wlbBhqm7.d.ts → vault-BpmApxxW.d.ts} +3 -3
  451. package/dist/vercel-connect/index.d.ts +1 -1
  452. package/dist/vercel-connect/index.js +5 -11
  453. package/dist/{verify-DPuWngD4.d.ts → verify-C91Wyp40.d.ts} +5 -35
  454. package/dist/verify-CJbYfADA.js +124 -0
  455. package/dist/{version-C6OfRAIn.js → version-Cq8gfDbd.js} +1 -1
  456. package/dist/{view-BeFcRV6G.js → view-D5ryq3gz.js} +1 -1
  457. package/dist/{view-CF7ihnkg.d.ts → view-TpXEUcVN.d.ts} +3 -3
  458. package/dist/vue/index.d.ts +9 -18
  459. package/dist/vue/index.js +2 -2
  460. package/dist/{watch-Xuxrvxq-.js → watch-BcvtAHOd.js} +2 -2
  461. package/dist/{watch-DI34G86j.d.ts → watch-COzRWvVN.d.ts} +23 -9
  462. package/dist/{wire-DtZQ4sdE.js → wire-Df3EWkG8.js} +2 -2
  463. package/dist/{workflow-builder-DJ1oHn8g.js → workflow-builder-CHqHpAVt.js} +6 -5
  464. package/dist/workflow-sdk/builder/index.d.ts +3 -3
  465. package/dist/workflow-sdk/index.d.ts +1 -1
  466. package/dist/workflow-sdk/world/index.d.ts +23 -17
  467. package/dist/workflow-sdk/world/index.js +59 -76
  468. package/dist/{workflow-sdk-B3yLD6Br.d.ts → workflow-sdk-DTZyrvNo.d.ts} +3 -3
  469. package/dist/{workflow-sdk-world-D-prir6O.js → workflow-sdk-world-CMV1ahFW.js} +528 -526
  470. package/dist/{workflows-B0j9WKPu.d.ts → workflows-CcpCBfIe.d.ts} +3 -3
  471. package/dist/{workflows-wu1WWBn7.js → workflows-IvxzG2cl.js} +5 -4
  472. package/package.json +54 -3
  473. package/schemas/config-v1.json +243 -0
  474. package/schemas/doctor-report-v1.json +4 -1
  475. package/schemas/spec-manifest-v1.json +95 -0
  476. package/skills/better-supabase/SKILL.md +8 -4
  477. package/skills/better-supabase/references/troubleshooting.md +20 -20
  478. package/skills/better-supabase-api/references/expo.md +6 -3
  479. package/skills/better-supabase-api/references/powersync.md +2 -1
  480. package/dist/cli/config-B9HkL8nF.js +0 -2
  481. package/dist/cli/gen-CCMc39Dx.js +0 -3100
  482. package/dist/cli/gen-DRmzPI75.js +0 -2
  483. package/dist/cli/prompts-BTYQGunc.js +0 -2
  484. package/dist/cli/run-BqDPh9UH.js +0 -361
  485. package/dist/config-Dn7F5k9A.js +0 -202
  486. package/dist/history-BZih6SFP.js +0 -64
  487. package/dist/index-BkWT_uBO.d.ts +0 -51
  488. package/dist/index-Bxih3l0u.d.ts +0 -81
  489. package/dist/index-CaxrMD1A.d.ts +0 -1
  490. package/dist/index-DQh4VCc9.d.ts +0 -98
  491. package/dist/keys-4MnkWTTh.js +0 -35
  492. package/dist/messages-DYP0sUTe.d.ts +0 -59
  493. package/dist/modules-dxrVK3ID.js +0 -228
  494. package/dist/path-Cv__-OTj.d.ts +0 -17
  495. package/dist/resource-BsvzCMlX.js +0 -212
  496. package/dist/resource-IPS5xi9q.d.ts +0 -74
  497. package/dist/template-CwO38Do8.d.ts +0 -6
  498. package/dist/verify-DL41hbvY.js +0 -232
  499. package/dist/cli/{read-sets-CETOSFx4.js → read-sets-DjJrm8Wj.js} +1 -1
@@ -1,4 +1,76 @@
1
- import { t as isList } from "./guards-BnzDvFrz.js";
1
+ import { t as isList } from "./guards-6F2bCtQR.js";
2
+ import { r as tableJsonSchema, t as forTarget } from "./table-schema-htM_SbCW.js";
3
+ //#region src/generators/json-schema-target.ts
4
+ function isObject(value) {
5
+ return typeof value === "object" && value !== null && !isList(value);
6
+ }
7
+ /** Keywords whose value is one subschema. */
8
+ const SINGLE = /* @__PURE__ */ new Set([
9
+ "additionalProperties",
10
+ "additionalItems",
11
+ "contains",
12
+ "propertyNames",
13
+ "not",
14
+ "if",
15
+ "then",
16
+ "else"
17
+ ]);
18
+ /** Keywords whose value is a list of subschemas. */
19
+ const LISTS = /* @__PURE__ */ new Set([
20
+ "allOf",
21
+ "anyOf",
22
+ "oneOf"
23
+ ]);
24
+ /** Keywords whose value maps names to subschemas. */
25
+ const MAPS = /* @__PURE__ */ new Set([
26
+ "properties",
27
+ "patternProperties",
28
+ "definitions"
29
+ ]);
30
+ /** 2020-12 keywords draft-07 has no equivalent for; draft-07 would ignore them. */
31
+ const DROPPED = /* @__PURE__ */ new Set([
32
+ "$dynamicAnchor",
33
+ "$anchor",
34
+ "unevaluatedProperties",
35
+ "unevaluatedItems"
36
+ ]);
37
+ function mapValues(value, convert) {
38
+ if (!isObject(value)) return value;
39
+ return Object.fromEntries(Object.entries(value).map(([key, child]) => [key, isObject(child) ? convert(child) : child]));
40
+ }
41
+ /**
42
+ * Rewrites a 2020-12 schema into draft-07: `$defs` becomes `definitions`
43
+ * (and `$ref`s into it follow), `prefixItems` becomes the array form of
44
+ * `items`, `dependentRequired` and `dependentSchemas` become
45
+ * `dependencies`, and keywords without a draft-07 form are left out. A
46
+ * draft-07 schema passes through unchanged.
47
+ */
48
+ function toDraft07(schema) {
49
+ const out = {};
50
+ const dependencies = {};
51
+ for (const [key, value] of Object.entries(schema)) {
52
+ if (DROPPED.has(key)) continue;
53
+ if (key === "$schema") continue;
54
+ if (key === "$defs") out["definitions"] = mapValues(value, toDraft07);
55
+ else if (key === "$ref" || key === "$dynamicRef") out["$ref"] = typeof value === "string" ? value.replace(/^#\/\$defs\//, "#/definitions/") : value;
56
+ else if (key === "prefixItems" && isList(value)) out["items"] = value.map((item) => isObject(item) ? toDraft07(item) : item);
57
+ else if (key === "items") {
58
+ const converted = isObject(value) ? toDraft07(value) : value;
59
+ if (schema["prefixItems"] === void 0) out["items"] = converted;
60
+ else out["additionalItems"] = converted;
61
+ } else if (key === "dependentRequired" || key === "dependentSchemas") Object.assign(dependencies, mapValues(value, toDraft07));
62
+ else if (SINGLE.has(key) && isObject(value)) out[key] = toDraft07(value);
63
+ else if (LISTS.has(key) && isList(value)) out[key] = value.map((item) => isObject(item) ? toDraft07(item) : item);
64
+ else if (MAPS.has(key)) out[key] = mapValues(value, toDraft07);
65
+ else out[key] = value;
66
+ }
67
+ if (Object.keys(dependencies).length > 0) out["dependencies"] = {
68
+ ...isObject(out["dependencies"]) ? out["dependencies"] : {},
69
+ ...dependencies
70
+ };
71
+ return out;
72
+ }
73
+ //#endregion
2
74
  //#region src/generators/shared.ts
3
75
  const INTEGER = /* @__PURE__ */ new Set([
4
76
  "int2",
@@ -86,15 +158,20 @@ function temporalGuardImport(input) {
86
158
  const guard = TEMPORAL_GUARDS[plan.scalar.kind];
87
159
  if (guard) names.add(guard);
88
160
  }
89
- return names.size === 0 ? void 0 : `import { ${[...names].sort().join(", ")} } from "better-supabase";`;
161
+ return names.size === 0 ? void 0 : `import { ${[...names].sort().join(", ")} } from ${JSON.stringify(input.runtimeImport ?? "better-supabase")};`;
90
162
  }
91
163
  const EXAMPLE = /^\s*@example\s+(.+?)\s*$/gm;
164
+ const DEPRECATED = /^\s*@deprecated\b.*$/gm;
165
+ const IS_DEPRECATED = /^\s*@deprecated\b/m;
92
166
  /**
93
167
  * Splits a comment into its description and `@example` lines. An example is
94
168
  * JSON (`@example 42`, `@example "KVK-1"`) or, when it doesn't parse, text.
169
+ * A `@deprecated` line (with or without text) sets `deprecated` and is left
170
+ * out of the description.
95
171
  */
96
172
  function parseComment(comment) {
97
173
  if (!comment) return { examples: [] };
174
+ const deprecated = IS_DEPRECATED.test(comment);
98
175
  const examples = [...comment.matchAll(EXAMPLE)].map((match) => {
99
176
  const raw = match[1] ?? "";
100
177
  try {
@@ -103,11 +180,12 @@ function parseComment(comment) {
103
180
  return raw;
104
181
  }
105
182
  });
106
- const description = comment.replace(EXAMPLE, "").trim();
107
- return description ? {
108
- description,
109
- examples
110
- } : { examples };
183
+ const description = comment.replace(EXAMPLE, "").replace(DEPRECATED, "").trim();
184
+ return {
185
+ ...description ? { description } : {},
186
+ examples,
187
+ ...deprecated ? { deprecated: true } : {}
188
+ };
111
189
  }
112
190
  const COMPARISON = /^(?:(char_length|length)\(\(?"?(\w+)"?\)?(?:::[\w ]+)?\)|\(?"?(\w+)"?\)?(?:::[\w ]+)?)\s*(>=|>|<=|<)\s*\(?'?(-?\d+(?:\.\d+)?)'?\)?(?:::[\w ]+)?$/;
113
191
  const REVERSED = /^\(?'?(-?\d+(?:\.\d+)?)'?\)?(?:::[\w ]+)?\s*(>=|>|<=|<)\s*(?:(char_length|length)\(\(?"?(\w+)"?\)?(?:::[\w ]+)?\)|\(?"?(\w+)"?\)?(?:::[\w ]+)?)$/;
@@ -332,6 +410,21 @@ function fieldDocs(docs, plan) {
332
410
  ...text ? pick(found, ["minLength", "maxLength"]) : {}
333
411
  };
334
412
  }
413
+ /**
414
+ * A field as `tableSchema()` and `tableJsonSchema()` read it. A jsonb column
415
+ * with a configured TypeScript type becomes `custom`; set `schema` on the
416
+ * result for one with a validator.
417
+ */
418
+ function fieldSpec(plan, docs) {
419
+ return {
420
+ ...plan.customJson ? { kind: "custom" } : plan.scalar,
421
+ ...plan.nullable ? { nullable: true } : {},
422
+ ...plan.optional ? { optional: true } : {},
423
+ ...plan.column.array ? { array: true } : {},
424
+ ...plan.managed ? { readOnly: true } : {},
425
+ ...docs
426
+ };
427
+ }
335
428
  function pick(bounds, keys) {
336
429
  const out = {};
337
430
  for (const key of keys) {
@@ -382,108 +475,61 @@ function parseImport(spec) {
382
475
  }
383
476
  //#endregion
384
477
  //#region src/generators/json-schema.ts
385
- function scalar(kind) {
386
- switch (kind.kind) {
387
- case "uuid": return {
388
- type: "string",
389
- format: "uuid"
390
- };
391
- case "string": return { type: "string" };
392
- case "integer": return { type: "integer" };
393
- case "number": return { type: "number" };
394
- case "boolean": return { type: "boolean" };
395
- case "datetime": return {
396
- type: "string",
397
- format: "date-time"
398
- };
399
- case "date": return {
400
- type: "string",
401
- format: "date"
402
- };
403
- case "instant": return {
404
- type: "string",
405
- format: "date-time"
406
- };
407
- case "plainDateTime": return {
408
- type: "string",
409
- pattern: "^\\d{4}-\\d{2}-\\d{2}[T ]\\d{2}:\\d{2}:\\d{2}(\\.\\d+)?$"
410
- };
411
- case "bigint": return {
412
- type: "string",
413
- pattern: "^-?\\d+$"
414
- };
415
- case "json":
416
- case "unknown": return {};
417
- case "enum": return {
418
- type: "string",
419
- enum: [...kind.values]
420
- };
421
- default: return kind;
422
- }
423
- }
424
- function property(plan, docs) {
425
- const { description, examples, ...bounds } = docs;
426
- const schema = {
427
- ...nullable(plan, bounds),
428
- ...description === void 0 ? {} : { description },
429
- ...examples === void 0 ? {} : { examples: [...examples] }
430
- };
431
- return plan.managed ? {
478
+ /** Marks the deprecated table and columns, which only `meta` knows about. */
479
+ function withDeprecated(schema, deprecated, columns) {
480
+ if (!deprecated && columns.length === 0) return schema;
481
+ const properties = schema["properties"];
482
+ return {
432
483
  ...schema,
433
- readOnly: true
434
- } : schema;
435
- }
436
- function nullable(plan, bounds) {
437
- let schema = {
438
- ...scalar(plan.scalar),
439
- ...bounds
484
+ ...deprecated ? { deprecated: true } : {},
485
+ ...columns.length > 0 && typeof properties === "object" && properties ? { properties: Object.fromEntries(Object.entries(properties).map(([name, value]) => [name, columns.includes(name) && typeof value === "object" && value ? {
486
+ ...value,
487
+ deprecated: true
488
+ } : value])) } : {}
440
489
  };
441
- if (plan.column.array) schema = {
442
- type: "array",
443
- items: schema
444
- };
445
- if (!plan.nullable) return schema;
446
- if (Object.keys(schema).length === 0) return schema;
447
- const { enum: values, ...rest } = schema;
448
- if (isList(values)) return {
449
- ...rest,
450
- type: ["string", "null"],
451
- enum: [...values, null]
452
- };
453
- return typeof schema["type"] === "string" ? {
454
- ...schema,
455
- type: [schema["type"], "null"]
456
- } : { anyOf: [schema, { type: "null" }] };
457
490
  }
458
- /** JSON Schema (2020-12) `$defs` for every table: `customersRow`, `customersInsert`, ... */
459
- function buildJsonSchema(input, id) {
491
+ /**
492
+ * JSON Schema `$defs` for every table: `customersRow`, `customersInsert`,
493
+ * ... `target` lowers the document to draft-07 or the OpenAPI 3.0 dialect,
494
+ * which keep the schemas under `definitions`.
495
+ */
496
+ function buildJsonSchema(input, id, target = "draft-2020-12") {
460
497
  const defs = {};
461
498
  for (const [key, table] of tableEntries(input)) {
462
499
  const docs = tableDocs(input, table);
500
+ const description = docs ? docs.description : table.description;
463
501
  for (const variant of variantsFor(table)) {
464
- const properties = {};
465
- const required = [];
466
- for (const plan of fieldsFor(table, variant, input)) {
467
- properties[plan.name] = property(plan, fieldDocs(docs, plan));
468
- if (!plan.optional) required.push(plan.name);
469
- }
470
- defs[`${key}${variant}`] = {
471
- ...docs ? {
472
- title: variantTitle(docs, variant),
473
- ...docs.description === void 0 ? {} : { description: docs.description }
474
- } : {},
475
- type: "object",
476
- properties,
477
- ...required.length > 0 ? { required } : {},
478
- additionalProperties: false
479
- };
502
+ const plans = fieldsFor(table, variant, input);
503
+ const schema = tableJsonSchema({
504
+ ...docs ? { title: variantTitle(docs, variant) } : {},
505
+ ...description === void 0 ? {} : { description },
506
+ fields: Object.fromEntries(plans.map((plan) => {
507
+ const spec = fieldSpec(plan, fieldDocs(docs, plan));
508
+ return [plan.name, docs || plan.column.description === void 0 ? spec : {
509
+ description: plan.column.description,
510
+ ...spec
511
+ }];
512
+ }))
513
+ });
514
+ defs[`${key}${variant}`] = withDeprecated(schema, table.deprecated === true, plans.filter((plan) => plan.column.deprecated).map((plan) => plan.name));
480
515
  }
481
516
  }
482
- return {
483
- $schema: "https://json-schema.org/draft/2020-12/schema",
484
- ...id ? { $id: id } : {},
485
- $defs: defs
486
- };
517
+ switch (target) {
518
+ case "draft-2020-12": return {
519
+ $schema: "https://json-schema.org/draft/2020-12/schema",
520
+ ...id ? { $id: id } : {},
521
+ $defs: defs
522
+ };
523
+ case "draft-07": return forTarget({
524
+ ...id ? { $id: id } : {},
525
+ definitions: Object.fromEntries(Object.entries(defs).map(([name, def]) => [name, toDraft07(def)]))
526
+ }, "draft-07");
527
+ case "openapi-3.0": return {
528
+ ...id ? { $id: id } : {},
529
+ definitions: Object.fromEntries(Object.entries(defs).map(([name, def]) => [name, forTarget(def, "openapi-3.0")]))
530
+ };
531
+ default: return target;
532
+ }
487
533
  }
488
534
  /** Writes the JSON Schema document; `createOpenApi` reuses the same `$defs`. */
489
535
  function jsonSchema(options = {}) {
@@ -493,10 +539,10 @@ function jsonSchema(options = {}) {
493
539
  generate(input) {
494
540
  return [{
495
541
  path: options.output ?? siblingPath(input.config.output, "schema.json"),
496
- contents: `${JSON.stringify(buildJsonSchema(input, options.id), null, 2)}\n`
542
+ contents: `${JSON.stringify(buildJsonSchema(input, options.id, options.target), null, 2)}\n`
497
543
  }];
498
544
  }
499
545
  };
500
546
  }
501
547
  //#endregion
502
- export { fieldsFor as a, propertyKey as c, siblingPath as d, tableDocs as f, variantsFor as g, variantTitle as h, fieldDocs as i, rowType as l, temporalGuardImport as m, jsonSchema as n, optionalLine as o, tableEntries as p, HEADER as r, parseImport as s, buildJsonSchema as t, schemaName as u };
548
+ export { variantsFor as _, fieldSpec as a, parseImport as c, schemaName as d, siblingPath as f, variantTitle as g, temporalGuardImport as h, fieldDocs as i, propertyKey as l, tableEntries as m, jsonSchema as n, fieldsFor as o, tableDocs as p, HEADER as r, optionalLine as s, buildJsonSchema as t, rowType as u, toDraft07 as v };
@@ -1,8 +1,10 @@
1
- import { n as dbError } from "./errors-B11Duf73.js";
2
- import { n as validate } from "./standard-BK0cqJ7y.js";
1
+ import { n as dbError } from "./errors-2M6CKMP4.js";
2
+ import { n as validate } from "./standard-DkzZUneg.js";
3
3
  import { n as claimAt } from "./claims-PqzCxaTD.js";
4
- import { n as toSession } from "./view-BeFcRV6G.js";
5
- import { o as settle, r as guard } from "./respond-BUgsXNgk.js";
4
+ import { t as authContext } from "./context-nPDvQ-Zl.js";
5
+ import { n as toSession } from "./view-D5ryq3gz.js";
6
+ import { o as settle, r as guard } from "./respond-volM3ByS.js";
7
+ import { n as checkPermission } from "./authorizer-ayxUDXXP.js";
6
8
  //#region src/server/kit.ts
7
9
  /** `FormData` as a plain object; repeated keys become arrays. */
8
10
  function formDataObject(form) {
@@ -21,11 +23,35 @@ function actionError(error) {
21
23
  error
22
24
  };
23
25
  }
24
- /** `requireTenant` and `authorize`: the session and tenant, or why the caller is refused. */
25
- async function authorizeCaller(auth, checks, input, tenant) {
26
+ /** What a `permission` on an action or route is checked against. */
27
+ function callerResource(input) {
28
+ if (input === void 0 || input instanceof Request) return { type: "route" };
29
+ if (typeof input !== "object" || input === null || Array.isArray(input) || input instanceof FormData) return { type: "action" };
30
+ return {
31
+ type: "action",
32
+ properties: input
33
+ };
34
+ }
35
+ /**
36
+ * `requireTenant`, `roles`, `permission` and `authorize`, in that order: the
37
+ * session and tenant, or why the caller is refused.
38
+ */
39
+ async function authorizeCaller(auth, checks, input, tenant, authorizer) {
26
40
  const session = toSession(auth);
27
41
  if (checks.requireTenant && tenant === void 0) return dbError("forbidden", "Choose an organization first", { code: "NO_TENANT" });
28
42
  if (checks.roles && !hasRole(auth, checks.roles, checks.roleClaim)) return dbError("forbidden", "You do not have the role this needs", { code: "MISSING_ROLE" });
43
+ if (checks.permission !== void 0) {
44
+ const permitted = await checkPermission({
45
+ authorizer,
46
+ permission: checks.permission,
47
+ resource: callerResource(input),
48
+ context: {
49
+ ...authContext(auth),
50
+ ...tenant === void 0 ? {} : { tenant }
51
+ }
52
+ });
53
+ if (!permitted.ok) return permitted.error;
54
+ }
29
55
  if (checks.authorize && !await checks.authorize(session, input)) return dbError("forbidden", "You are not allowed to do this", { code: "NOT_AUTHORIZED" });
30
56
  return {
31
57
  session,
@@ -33,8 +59,8 @@ async function authorizeCaller(auth, checks, input, tenant) {
33
59
  };
34
60
  }
35
61
  /** `guard`, then `authorizeCaller`: the caller, or the refusal. */
36
- async function requireCaller(auth, options, tenant) {
37
- return guard(auth, options.allow, options.aal, options.scopes) ?? authorizeCaller(auth, options, void 0, tenant);
62
+ async function requireCaller(auth, options, tenant, authorizer) {
63
+ return guard(auth, options.allow, options.aal, options.scopes) ?? authorizeCaller(auth, options, void 0, tenant, authorizer);
38
64
  }
39
65
  /**
40
66
  * Runs an action body with the guard, input validation and authorize checks
@@ -42,7 +68,7 @@ async function requireCaller(auth, options, tenant) {
42
68
  * unwrap, thrown `DbException`s become errors, other throws propagate (so
43
69
  * framework redirects keep working).
44
70
  */
45
- async function runAction(auth, options, input, tenant, body) {
71
+ async function runAction(auth, options, input, tenant, body, authorizer) {
46
72
  const denied = guard(auth, options.allow, options.aal, options.scopes);
47
73
  if (denied) return actionError(denied);
48
74
  let parsed = input instanceof FormData ? formDataObject(input) : input;
@@ -51,7 +77,7 @@ async function runAction(auth, options, input, tenant, body) {
51
77
  if (!checked.ok) return actionError(checked.error);
52
78
  parsed = checked.data;
53
79
  }
54
- const caller = await authorizeCaller(auth, options, parsed, tenant);
80
+ const caller = await authorizeCaller(auth, options, parsed, tenant, authorizer);
55
81
  if ("kind" in caller) return actionError(caller);
56
82
  const settled = await settle(() => body(parsed, caller));
57
83
  return settled.ok ? {
@@ -1,7 +1,7 @@
1
- import { b as DbError } from "./result-D7y2fT87.js";
2
- import { r as AuthState } from "./resolve-ChTYeTEl.js";
3
- import { t as AuthSession } from "./view-CF7ihnkg.js";
4
- import { r as GuardOptions } from "./respond-DprrgyXX.js";
1
+ import { b as DbError } from "./result-BchM1XZn.js";
2
+ import { r as AuthState } from "./resolve-MxXVWyhd.js";
3
+ import { t as AuthSession } from "./view-TpXEUcVN.js";
4
+ import { r as GuardOptions } from "./respond-Cw-zanCm.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
6
  //#region src/server/kit.d.ts
7
7
  /** What a server action returns: plain data, safe across any serialization boundary. */
@@ -18,13 +18,19 @@ type ActionResult<T> = {
18
18
  * Checks after `allow`, `aal` and `scopes`. A caller who fails one gets
19
19
  * `forbidden`: an `ActionResult` error, a 403, or the framework's refusal.
20
20
  */
21
- interface AuthorizeOptions<I, C, P, R extends boolean> {
21
+ interface AuthorizeOptions<I, C, P, R extends boolean, Ref = unknown> {
22
22
  /** Refuse callers without an active tenant, so `ctx.tenant` is a string. */
23
23
  readonly requireTenant?: R;
24
24
  /** Admit only users holding one of these roles at `roleClaim`. */
25
25
  readonly roles?: readonly string[];
26
26
  /** The dotted claim path `roles` reads: one string or an array. Defaults to `app_metadata.role`. */
27
27
  readonly roleClaim?: string;
28
+ /**
29
+ * The permission the server's `authorizer` must grant. Without an
30
+ * authorizer, or on any outcome but `granted`, the caller is refused;
31
+ * `approval-required` refuses with `code: "APPROVAL_REQUIRED"`.
32
+ */
33
+ readonly permission?: Ref;
28
34
  /** Return `false` to refuse the caller, e.g. `(session, input) => input.ownerId === session.user.id`. */
29
35
  readonly authorize?: (session: AuthSession<C, P>, input: I) => boolean | Promise<boolean>;
30
36
  }
@@ -46,12 +52,12 @@ type Unwrapped<T> = T extends {
46
52
  readonly ok: false;
47
53
  } ? never : T;
48
54
  /** Guard, authorize and validate options of a framework-neutral action. */
49
- interface BlockActionOptions<S extends StandardSchemaV1 | undefined, C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<ActionParsed<S>, C, P, R> {
55
+ interface BlockActionOptions<S extends StandardSchemaV1 | undefined, C = unknown, P = unknown, R extends boolean = boolean, Ref = unknown> extends GuardOptions, AuthorizeOptions<ActionParsed<S>, C, P, R, Ref> {
50
56
  /** Validates the input (plain object or `FormData`) with any Standard Schema. */
51
57
  readonly input?: S;
52
58
  }
53
59
  /** The guard and authorize checks of a loader, page or route. */
54
- interface BlockRequireOptions<C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<undefined, C, P, R> {}
60
+ interface BlockRequireOptions<C = unknown, P = unknown, R extends boolean = boolean, Ref = unknown> extends GuardOptions, AuthorizeOptions<undefined, C, P, R, Ref> {}
55
61
  /** The strings at a dotted claim path: one string, or every string in an array. */
56
62
  declare function rolesAt(claims: Readonly<Record<string, unknown>> | undefined, path: string): readonly string[];
57
63
  /** Whether a signed-in caller holds one of `roles` at the claim `path`. */
@@ -1,9 +1,9 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
3
- import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
4
- import { r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
5
- import { f as AiFiles, o as AiFile } from "./types-C05bxW-W.js";
6
- import { m as JobHandler } from "./queue-CLJurhdy.js";
2
+ import { t as AsyncResult, w as ErrorMapper } from "./result-BchM1XZn.js";
3
+ import { t as BlockTransport } from "./block-transport-inD4fFq-.js";
4
+ import { r as BlockTemporalOptions } from "./block-helpers-C0Xj8War.js";
5
+ import { f as AiFiles, o as AiFile } from "./types-Bb_4-vdW.js";
6
+ import { m as JobHandler } from "./types-D__3EN0q.js";
7
7
  //#region src/blocks/knowledge/knowledge.d.ts
8
8
  /**
9
9
  * Turns texts into vectors. `model` is stored with each document, so a
@@ -1,8 +1,9 @@
1
1
  import { t as DbException } from "./db-exception-CnWcYPxL.js";
2
- import { n as dbError } from "./errors-B11Duf73.js";
3
- import { a as ok, r as err, t as AsyncResult } from "./result-DzUbqgdW.js";
2
+ import { n as dbError } from "./errors-2M6CKMP4.js";
3
+ import { a as ok, r as err, t as AsyncResult } from "./result-DEqHCMKP.js";
4
4
  import { t as vectorLiteral } from "./search-CUWCRYKL.js";
5
- import { C as run, O as textOf, b as recordOrEmpty, c as errorText, d as isRecord, h as optionalText, i as blockCall, k as toInstant, l as injectableOf, n as applyTemporal, x as recordsOf, y as recordOf } from "./block-helpers-DWHxHsEQ.js";
5
+ import { n as isRecord } from "./guards-6F2bCtQR.js";
6
+ import { C as recordOrEmpty, E as run, N as toInstant, S as recordOf, i as blockCall, j as textOf, l as errorText, n as applyTemporal, u as injectableOf, v as optionalText, w as recordsOf } from "./block-helpers-Cy3pB96I.js";
6
7
  //#region src/blocks/knowledge/knowledge.ts
7
8
  const SCOPES = /* @__PURE__ */ new Set([
8
9
  "organization",
@@ -1,3 +1,2 @@
1
- import { _ as defineListQuery, a as ListExtra, c as ListParseResult, d as ListQueryConfig, f as ListQueryInput, g as UNSET, h as ParserSpec, i as ListDefinition, l as ListParsers, m as OpenApiParameter, n as FacetCounts, o as ListPage, p as ListSearchParams, r as FacetInfo, s as ListPagination, t as FacetCountFields, u as ListQuery } from "../list-query-BRt-zDF7.js";
2
- import "../index-CaxrMD1A.js";
1
+ import { _ as defineListQuery, a as ListExtra, c as ListParseResult, d as ListQueryConfig, f as ListQueryInput, g as UNSET, h as ParserSpec, i as ListDefinition, l as ListParsers, m as OpenApiParameter, n as FacetCounts, o as ListPage, p as ListSearchParams, r as FacetInfo, s as ListPagination, t as FacetCountFields, u as ListQuery } from "../list-query-D3JQeEL7.js";
3
2
  export { type FacetCountFields, type FacetCounts, type FacetInfo, type ListDefinition, type ListExtra, type ListPage, type ListPagination, type ListParseResult, type ListParsers, type ListQuery, type ListQueryConfig, type ListQueryInput, type ListSearchParams, type OpenApiParameter, type ParserSpec, UNSET, defineListQuery };
@@ -1,7 +1,7 @@
1
- import { E as ValidationIssue, t as AsyncResult } from "./result-D7y2fT87.js";
2
- import { L as TableKey, M as Row, a as AnyModels, i as AnyFunctions } from "./types-6BdhkmZe.js";
3
- import { l as CountMode } from "./executor-DvsBbNBS.js";
4
- import { At as OrderByArg, Ct as IncludeArg, D as OffsetPage, It as SelectArg, M as RepositoryOf, Mt as Payload, O as OffsetPageArgs, t as BetterSupabase, v as CursorPage, w as FindExt, y as CursorPageArgs, zt as WhereInput } from "./define-CJJkkr1-.js";
1
+ import { E as ValidationIssue, t as AsyncResult } from "./result-BchM1XZn.js";
2
+ import { L as TableKey, M as Row, a as AnyModels, i as AnyFunctions } from "./types-CoE5Zwy4.js";
3
+ import { l as CountMode } from "./executor-Drzu3dBK.js";
4
+ import { Bt as WhereInput, E as OffsetPageArgs, F as RepositoryOf, Lt as SelectArg, Nt as Payload, T as OffsetPage, g as CursorPageArgs, h as CursorPage, jt as OrderByArg, t as BetterSupabase, wt as IncludeArg, x as FindExt } from "./define-DmcfoNXB.js";
5
5
  import { StandardSchemaV1 } from "@standard-schema/spec";
6
6
  //#region src/list/list-query.d.ts
7
7
  /** Facet value meaning "not set": filters with `is null`. */
@@ -1,10 +1,22 @@
1
- import { L as TableKey, a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
2
- import { t as BetterSupabase } from "../define-CJJkkr1-.js";
3
- import { i as ServerContext, o as ServerOptions, t as BetterServer } from "../server-Bh0EVSwU.js";
4
- import { r as GuardOptions } from "../respond-DprrgyXX.js";
5
- import { i as ResourceOperation } from "../index-Bxih3l0u.js";
6
- import { a as ResourceRouteOptions } from "../resource-IPS5xi9q.js";
1
+ import { L as TableKey, a as AnyModels, i as AnyFunctions } from "../types-CoE5Zwy4.js";
2
+ import { E as ResourceOperation } from "../model-OgBxvk3N.js";
3
+ import { s as PermissionRef, t as AnyAuthorizer } from "../authorizer-eiOjo-3l.js";
4
+ import { t as BetterSupabase } from "../define-DmcfoNXB.js";
5
+ import { i as ServerContext, s as ServerOptions, t as BetterServer } from "../server-types-CrAmZ8jv.js";
6
+ import { r as GuardOptions } from "../respond-Cw-zanCm.js";
7
+ import { l as ResourceRouteOptions } from "../resource-types-CqB6GWGT.js";
7
8
  import { StandardSchemaV1 } from "@standard-schema/spec";
9
+ //#region src/mcp/dialect.d.ts
10
+ /** The JSON Schema dialect of tool schemas, which depends on the protocol revision. */
11
+ type ToolSchemaTarget = "draft-2020-12" | "draft-07";
12
+ //#endregion
13
+ //#region src/mcp/permissions.d.ts
14
+ /** `McpOptions.requiredRoles`: the roles, or the roles and the claim to read. */
15
+ type RequiredRoles = readonly string[] | {
16
+ readonly roles: readonly string[];
17
+ readonly claim?: string;
18
+ };
19
+ //#endregion
8
20
  //#region src/mcp/mcp.d.ts
9
21
  export declare const MCP_PROTOCOL_VERSION: string;
10
22
  type Json = Readonly<Record<string, unknown>>;
@@ -31,10 +43,17 @@ interface ToolContext<M extends AnyModels, F extends AnyFunctions, E, C = unknow
31
43
  }
32
44
  interface McpTool<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> {
33
45
  readonly info: ToolInfo;
46
+ /**
47
+ * The input schema in another dialect, for clients on an older protocol
48
+ * revision. Without it, `info.inputSchema` is rewritten.
49
+ */
50
+ readonly inputSchemaFor?: (target: ToolSchemaTarget) => Json | undefined;
34
51
  /** Validates arguments; its output is what `run` receives. */
35
52
  readonly input?: StandardSchemaV1;
36
53
  /** Opaque data for the `authorize` and `visible` hooks. Never sent to clients. */
37
54
  readonly meta?: unknown;
55
+ /** Checked by the authorizer on every call; callers it denies don't see the tool. */
56
+ readonly permission?: unknown;
38
57
  run(args: never, ctx: ToolContext<M, F, E, C, P>): unknown;
39
58
  }
40
59
  /** What the `authorize` and `visible` hooks see of a tool. */
@@ -52,7 +71,7 @@ type ToolDecision = {
52
71
  /** OAuth scopes the call needs, sent in an `insufficient_scope` challenge. */
53
72
  readonly scopes?: readonly string[];
54
73
  };
55
- interface ToolDefinition<M extends AnyModels, F extends AnyFunctions, E, I, C = unknown, P = unknown> {
74
+ interface ToolDefinition<M extends AnyModels, F extends AnyFunctions, E, I, C = unknown, P = unknown, Ref = unknown> {
56
75
  readonly name: string;
57
76
  readonly title?: string;
58
77
  readonly description: string;
@@ -63,13 +82,25 @@ interface ToolDefinition<M extends AnyModels, F extends AnyFunctions, E, I, C =
63
82
  readonly input?: StandardSchemaV1<unknown, I>;
64
83
  readonly inputSchema?: Json;
65
84
  readonly outputSchema?: Json;
85
+ /**
86
+ * The dialect `input` converts to for `ToolInfo` and the `tools` list.
87
+ * Defaults to `draft-2020-12`. `tools/list` converts again for clients on
88
+ * 2025-06-18 and earlier, which get draft-07.
89
+ */
90
+ readonly jsonSchemaTarget?: ToolSchemaTarget;
66
91
  readonly annotations?: ToolAnnotations;
67
92
  /** Opaque data for the `authorize` and `visible` hooks. Never sent to clients. */
68
93
  readonly meta?: unknown;
94
+ /**
95
+ * Checked by the authorizer after the arguments are validated, with the
96
+ * tool as the resource (`mcp_tool`). `tools/list` hides the tool from
97
+ * callers it denies.
98
+ */
99
+ readonly permission?: Ref;
69
100
  run(args: I, ctx: ToolContext<M, F, E, C, P>): unknown;
70
101
  }
71
102
  /** A table's tools: the REST resource options, plus `meta` per operation for `authorize` and `visible`. */
72
- type ToolResourceOptions<M extends AnyModels, T extends TableKey<M>> = ResourceRouteOptions<M, T> & {
103
+ type ToolResourceOptions<M extends AnyModels, T extends TableKey<M>, Ref = string> = ResourceRouteOptions<M, T, Ref> & {
73
104
  /**
74
105
  * Opaque data per operation, e.g. a permission, passed to
75
106
  * `authorize` and `visible` as the table tool's `meta`. Never sent to
@@ -77,15 +108,15 @@ type ToolResourceOptions<M extends AnyModels, T extends TableKey<M>> = ResourceR
77
108
  */
78
109
  readonly meta?: { readonly [K in ResourceOperation]?: unknown; };
79
110
  };
80
- type ToolResources<M extends AnyModels> = { readonly [T in TableKey<M>]?: ToolResourceOptions<M, T> | true; };
81
- interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends ServerOptions, Omit<GuardOptions, "scopes"> {
111
+ type ToolResources<M extends AnyModels, Ref = string> = { readonly [T in TableKey<M>]?: ToolResourceOptions<M, T, Ref> | true; };
112
+ interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown, Ref = string> extends ServerOptions, Omit<GuardOptions, "scopes"> {
82
113
  readonly name: string;
83
114
  readonly version: string;
84
115
  readonly title?: string;
85
116
  /** Sent to clients on `initialize`, e.g. how the tools fit together. */
86
117
  readonly instructions?: string;
87
118
  /** Tables exposed as tools: `<table>_list`, `_get`, `_create`, `_update`, `_delete`. */
88
- readonly resources?: ToolResources<M>;
119
+ readonly resources?: ToolResources<M, Ref>;
89
120
  readonly tools?: readonly McpTool<M, F, E, C, P>[];
90
121
  /**
91
122
  * Canonical URL of this MCP server (RFC 9728 `resource`). Defaults to the
@@ -118,10 +149,7 @@ interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown
118
149
  * requiredRoles: { roles: ['admin', 'support'], claim: 'app_metadata.roles' }
119
150
  * ```
120
151
  */
121
- readonly requiredRoles?: readonly string[] | {
122
- readonly roles: readonly string[];
123
- readonly claim?: string;
124
- };
152
+ readonly requiredRoles?: RequiredRoles;
125
153
  /** Origins allowed to call the server (DNS rebinding protection). Defaults to any. */
126
154
  readonly allowedOrigins?: readonly string[];
127
155
  /**
@@ -159,7 +187,7 @@ interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown
159
187
  */
160
188
  readonly visible?: (ctx: ToolContext<M, F, E, C, P>, tool: ToolRef) => boolean | Promise<boolean>;
161
189
  }
162
- interface BetterMcp<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
190
+ interface BetterMcp<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown, Ref = string> extends BetterServer<M, F, E, C, P> {
163
191
  /** Everything in one handler: the MCP endpoint and `/.well-known/oauth-protected-resource`. */
164
192
  readonly fetch: (request: Request) => Promise<Response>;
165
193
  /** The Streamable HTTP endpoint (POST JSON-RPC). */
@@ -168,7 +196,7 @@ interface BetterMcp<M extends AnyModels, F extends AnyFunctions, E, C = unknown,
168
196
  metadata(request: Request): Response;
169
197
  readonly tools: readonly ToolInfo[];
170
198
  /** Adds a tool typed against this app's repositories. */
171
- tool<I = Record<string, unknown>>(definition: ToolDefinition<M, F, E, I, C, P>): this;
199
+ tool<I = Record<string, unknown>>(definition: ToolDefinition<M, F, E, I, C, P, Ref>): this;
172
200
  /** Calls a tool directly, e.g. from tests or another transport. */
173
201
  call(name: string, args: unknown, ctx: ToolContext<M, F, E, C, P>): Promise<ToolResult>;
174
202
  }
@@ -181,13 +209,15 @@ interface ToolResult {
181
209
  readonly isError?: boolean;
182
210
  }
183
211
  /** A custom tool. Pass it in `createMcp({ tools: [...] })`. */
184
- export declare function defineTool<M extends AnyModels, F extends AnyFunctions, E, I = Record<string, unknown>, C = unknown, P = unknown>(definition: ToolDefinition<M, F, E, I, C, P>): McpTool<M, F, E, C, P>;
212
+ export declare function defineTool<M extends AnyModels, F extends AnyFunctions, E, I = Record<string, unknown>, C = unknown, P = unknown, Ref = unknown>(definition: ToolDefinition<M, F, E, I, C, P, Ref>): McpTool<M, F, E, C, P>;
185
213
  /**
186
214
  * An MCP server (Streamable HTTP, stateless) whose tools run as the caller:
187
215
  * the Bearer token from the MCP client is verified and every query goes
188
216
  * through RLS. Answers 401 with RFC 9728 metadata so clients can sign in with
189
217
  * Supabase Auth's OAuth server.
190
218
  */
191
- export declare function createMcp<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options: McpOptions<M, F, E, C, P>): BetterMcp<M, F, E, C, P>;
219
+ export declare function createMcp<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown, A extends AnyAuthorizer | undefined = undefined>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options: McpOptions<M, F, E, C, P, PermissionRef<A>> & {
220
+ readonly authorizer?: A;
221
+ }): BetterMcp<M, F, E, C, P, PermissionRef<A>>;
192
222
  //#endregion
193
223
  export type { BetterMcp, GuardOptions, McpOptions, McpTool, ResourceRouteOptions, ToolAnnotations, ToolContext, ToolDecision, ToolDefinition, ToolInfo, ToolRef, ToolResourceOptions, ToolResources, ToolResult };