better-supabase 0.5.1 → 0.6.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 (536) hide show
  1. package/README.md +187 -46
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect-BKlaIu_M.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-Bo_NLT5n.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BCtlgDQx.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/mfa-Daak8ukG.d.ts +54 -0
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
  385. package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
  386. package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -22
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +313 -212
  413. package/dist/sql/index.js +34872 -6579
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
  430. package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +315 -41
  449. package/dist/testing/index.js +1046 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +461 -20
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +20 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +47 -11
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-CIdSQZad.js +0 -2
  504. package/dist/cli/gen-CjElD1Vw.js +0 -2241
  505. package/dist/cli/read-sets-VQcPgxU9.js +0 -436
  506. package/dist/cli/sql-CVx-1O8G.js +0 -373
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/index-CWMDdEr4.d.ts +0 -50
  512. package/dist/index-DOESKG27.d.ts +0 -100
  513. package/dist/index-DmXSxbLi.d.ts +0 -62
  514. package/dist/index-Dp2VDwog.d.ts +0 -161
  515. package/dist/jobs/index.d.ts +0 -226
  516. package/dist/jobs/index.js +0 -1007
  517. package/dist/json-schema-m1fiwKgN.js +0 -208
  518. package/dist/kit-events-CTFDfSwb.js +0 -60
  519. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  520. package/dist/kits-CGLLrNPd.js +0 -157
  521. package/dist/mfa-Cu96oJdw.d.ts +0 -30
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-B1mZ7CgQ.js +0 -660
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-CEPwlw2G.d.ts +0 -89
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -122
@@ -1,8 +1,9 @@
1
- import { P as TableKey, n as AnyFunctions, r as AnyModels } from "../types-Dnf_wRDz.js";
2
- import { t as BetterSupabase } from "../define-Bp_BZa5h.js";
3
- import { f as ServerContext, n as GuardOptions, p as ServerOptions, u as BetterServer } from "../respond-BR1fJWOB.js";
4
- import { i as ResourceOperation } from "../index-C7f8cOBM.js";
5
- import { a as ResourceRouteOptions } from "../resource-DNRFP7KR.js";
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-CeVeeXwz.js";
4
+ import { r as GuardOptions } from "../respond-DoBijysA.js";
5
+ import { i as ResourceOperation } from "../index-Bxih3l0u.js";
6
+ import { a as ResourceRouteOptions } from "../resource-D6Uc7Sk7.js";
6
7
  import { StandardSchemaV1 } from "@standard-schema/spec";
7
8
  //#region src/mcp/mcp.d.ts
8
9
  export declare const MCP_PROTOCOL_VERSION: string;
@@ -39,7 +40,7 @@ interface McpTool<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P
39
40
  /** What the `authorize` and `visible` hooks see of a tool. */
40
41
  interface ToolRef {
41
42
  readonly info: ToolInfo;
42
- /** The tool's `meta`, e.g. a PermDock permission. For table tools, the resource's `meta` for that operation. */
43
+ /** The tool's `meta`, e.g. a permission. For table tools, the resource's `meta` for that operation. */
43
44
  readonly meta: unknown;
44
45
  }
45
46
  /** The outcome of `authorize`. `scopes` turns a refusal into an OAuth challenge. */
@@ -70,7 +71,7 @@ interface ToolDefinition<M extends AnyModels, F extends AnyFunctions, E, I, C =
70
71
  /** A table's tools: the REST resource options, plus `meta` per operation for `authorize` and `visible`. */
71
72
  type ToolResourceOptions<M extends AnyModels, T extends TableKey<M>> = ResourceRouteOptions<M, T> & {
72
73
  /**
73
- * Opaque data per operation, e.g. a PermDock permission, passed to
74
+ * Opaque data per operation, e.g. a permission, passed to
74
75
  * `authorize` and `visible` as the table tool's `meta`. Never sent to
75
76
  * clients. An operation without an entry gets `undefined`.
76
77
  */
@@ -88,10 +89,14 @@ interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown
88
89
  readonly tools?: readonly McpTool<M, F, E, C, P>[];
89
90
  /**
90
91
  * Canonical URL of this MCP server (RFC 9728 `resource`). Defaults to the
91
- * request URL without query.
92
+ * request URL without query; on Supabase Edge Functions, to the public
93
+ * `<origin>/functions/v1/<slug>` the gateway forwards.
92
94
  */
93
95
  readonly resource?: string | ((request: Request) => string);
94
- /** Defaults to Supabase Auth of `env.url` (`<url>/auth/v1`). */
96
+ /**
97
+ * Defaults to Supabase Auth of `env.url` (`<url>/auth/v1`); on Supabase Edge
98
+ * Functions, to Auth on the public origin.
99
+ */
95
100
  readonly authorizationServers?: readonly string[];
96
101
  /**
97
102
  * Scopes the tools need, published as RFC 9728 `scopes_supported` and in
@@ -99,15 +104,32 @@ interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown
99
104
  * tokens are between the client and the authorization server.
100
105
  */
101
106
  readonly advertisedScopes?: readonly string[];
102
- /** @deprecated Use `advertisedScopes`; `requiredScopes` is what `guard` enforces. */
103
- readonly scopes?: readonly string[];
104
107
  /**
105
108
  * Scopes a delegated token (an OAuth client or an `act` chain) needs to call
106
109
  * the server at all. A missing one answers 403 `insufficient_scope`.
107
110
  */
108
111
  readonly requiredScopes?: readonly string[];
112
+ /**
113
+ * Roles a signed-in user needs to call the server at all, read from a
114
+ * claim (`app_metadata.role` by default; a string or an array of
115
+ * strings). Users without one get 403; service-role callers pass.
116
+ *
117
+ * ```ts
118
+ * requiredRoles: { roles: ['admin', 'support'], claim: 'app_metadata.roles' }
119
+ * ```
120
+ */
121
+ readonly requiredRoles?: readonly string[] | {
122
+ readonly roles: readonly string[];
123
+ readonly claim?: string;
124
+ };
109
125
  /** Origins allowed to call the server (DNS rebinding protection). Defaults to any. */
110
126
  readonly allowedOrigins?: readonly string[];
127
+ /**
128
+ * Answers CORS preflights and adds `Access-Control-*` headers, so browser
129
+ * MCP clients can call the server. The allowed origin is `allowedOrigins`
130
+ * when set, any origin otherwise. Defaults to true.
131
+ */
132
+ readonly cors?: boolean;
111
133
  /**
112
134
  * Hostnames the `Host` header may name, without the port (DNS rebinding
113
135
  * protection). List the production, preview and local hosts. Defaults to any.
@@ -119,6 +141,11 @@ interface McpOptions<M extends AnyModels, F extends AnyFunctions, E, C = unknown
119
141
  readonly json?: Readonly<Record<string, unknown>>;
120
142
  /** Include internal error messages in tool results. Defaults to `NODE_ENV === 'development'`. */
121
143
  readonly exposeErrors?: boolean;
144
+ /**
145
+ * Keeps the invocation alive for event sink sends a tool started, e.g.
146
+ * `EdgeRuntime.waitUntil` or Next's `after`.
147
+ */
148
+ readonly waitUntil?: (promise: Promise<unknown>) => void;
122
149
  /**
123
150
  * Decides each `tools/call` after the arguments are validated and before
124
151
  * `run`. `args` are the validated arguments (raw for table tools, which
package/dist/mcp/index.js CHANGED
@@ -1,15 +1,18 @@
1
- import { n as dbError } from "../errors-DtwXa6b8.js";
1
+ import { n as dbError } from "../errors-B11Duf73.js";
2
2
  import { t as base64ToText } from "../base64-D2gsioCY.js";
3
- import { t as validate } from "../standard-D7r6dMUu.js";
4
- import { a as problemResponse, o as toProblem } from "../problem-BW1KhzSG.js";
5
- import { t as SPEC_PINS } from "../spec-pins-C3oc-Tdp.js";
6
- import { t as buildJsonSchema } from "../json-schema-m1fiwKgN.js";
7
- import { a as withExtra, d as guard, g as jsonResponse, h as jsonReplacer, m as settle, n as createServer, r as extendServer, u as defaultExpose } from "../server-B1mZ7CgQ.js";
8
- import { t as defineResource } from "../resource-mqfJW4YF.js";
9
- import { fromSupabaseUrl, unauthorizedResponse } from "@supabase/server/oauth-protected-resource";
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-Bc1o3zyy.js";
8
+ 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";
12
+ import { a as withCors, i as metadataPreflight, n as endpointPreflight, r as isMetadataRequest, t as discovery } from "../http-DdYadv-o.js";
13
+ import { resourceMetadataResponse, unauthorizedResponse } from "@supabase/server/oauth-protected-resource";
10
14
  //#region src/mcp/mcp.ts
11
15
  const MCP_PROTOCOL_VERSION = SPEC_PINS.mcp;
12
- const WELL_KNOWN = "/.well-known/oauth-protected-resource";
13
16
  /** Revisions before 2026-07-28 open with an `initialize` handshake. */
14
17
  const LEGACY_VERSIONS = [
15
18
  "2025-11-25",
@@ -17,9 +20,8 @@ const LEGACY_VERSIONS = [
17
20
  "2025-03-26"
18
21
  ];
19
22
  const SUPPORTED_VERSIONS = [MCP_PROTOCOL_VERSION, ...LEGACY_VERSIONS];
20
- /** The `Host` header's hostname is in the list; a missing or malformed header is not. */
21
- function hostAllowed(request, allowed) {
22
- const host = request.headers.get("host");
23
+ /** The host's hostname is in the list; a missing or malformed host is not. */
24
+ function hostAllowed(host, allowed) {
23
25
  if (!host) return false;
24
26
  try {
25
27
  return allowed.includes(new URL(`http://${host}`).hostname);
@@ -27,6 +29,16 @@ function hostAllowed(request, allowed) {
27
29
  return false;
28
30
  }
29
31
  }
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
+ }
30
42
  /** A custom tool. Pass it in `createMcp({ tools: [...] })`. */
31
43
  function defineTool(definition) {
32
44
  if (!/^[A-Za-z0-9_.-]{1,64}$/.test(definition.name)) throw new TypeError(`Invalid tool name "${definition.name}": use 1-64 letters, digits, "_", "-" or "."`);
@@ -184,6 +196,8 @@ const META_CAPABILITIES = "io.modelcontextprotocol/clientCapabilities";
184
196
  const META_SERVER_INFO = "io.modelcontextprotocol/serverInfo";
185
197
  /** How long clients may cache `tools/list` and `server/discover` (per token). */
186
198
  const LIST_TTL_MS = 3e5;
199
+ /** Callers whose visible tool lists are kept; the oldest goes first. */
200
+ const VISIBLE_LISTS_MAX = 1e3;
187
201
  function rpcError(id, code, message, status = 200, data) {
188
202
  return Response.json({
189
203
  jsonrpc: "2.0",
@@ -221,10 +235,6 @@ function textResult(value, isError = false) {
221
235
  ...isError ? { isError: true } : {}
222
236
  };
223
237
  }
224
- function canonical(request) {
225
- const url = new URL(request.url);
226
- return `${url.origin}${url.pathname.replace(/\/$/, "")}`;
227
- }
228
238
  /**
229
239
  * An MCP server (Streamable HTTP, stateless) whose tools run as the caller:
230
240
  * the Bearer token from the MCP client is verified and every query goes
@@ -240,10 +250,13 @@ function createMcp(betterSupabase, options) {
240
250
  })["$defs"];
241
251
  const registry = /* @__PURE__ */ new Map();
242
252
  let allTools;
253
+ /** Bumped on every registration, so cached visible lists built before it miss. */
254
+ let generation = 0;
243
255
  const register = (entry) => {
244
256
  if (registry.has(entry.info.name)) throw new TypeError(`Duplicate MCP tool "${entry.info.name}"`);
245
257
  registry.set(entry.info.name, entry);
246
258
  allTools = void 0;
259
+ generation++;
247
260
  };
248
261
  const failure = (error) => textResult(toProblem(error, { expose }), true);
249
262
  const refused = async (tool, args, ctx) => {
@@ -308,25 +321,38 @@ function createMcp(betterSupabase, options) {
308
321
  };
309
322
  for (const tool of options.tools ?? []) addTool(tool);
310
323
  const listTools = () => allTools ??= [...registry.values()].map((entry) => entry.info);
324
+ /**
325
+ * A user's visible list per token, for as long as clients may cache it
326
+ * (`ttlMs`). `tools/call` still checks `visible` on every call.
327
+ */
328
+ const visibleLists = /* @__PURE__ */ new Map();
311
329
  /** Without a `visible` hook every caller sees the same list, built once. */
312
330
  const visibleTools = async (context) => {
313
331
  if (!options.visible) return listTools();
314
332
  const ctx = context();
333
+ const token = ctx.auth.kind === "user" ? ctx.auth.token : void 0;
334
+ const now = Date.now();
335
+ const cached = token === void 0 ? void 0 : visibleLists.get(token);
336
+ if (cached && cached.until > now && cached.generation === generation) return cached.tools;
315
337
  const entries = [...registry.values()];
316
338
  const shown = await Promise.all(entries.map((entry) => isVisible(entry, ctx)));
317
- return entries.filter((_, index) => shown[index]).map((e) => e.info);
318
- };
319
- const authorizationServers = () => options.authorizationServers ?? [fromSupabaseUrl(server.env.url)];
320
- const resourceOf = (request) => {
321
- if (typeof options.resource === "function") return options.resource(request);
322
- if (options.resource) return options.resource;
323
- const url = new URL(canonical(request));
324
- return url.pathname.startsWith(WELL_KNOWN) ? `${url.origin}${url.pathname.slice(37)}` : url.href.replace(/\/$/, "");
325
- };
326
- const metadataUrl = (request) => {
327
- const resource = new URL(resourceOf(request));
328
- return `${resource.origin}${WELL_KNOWN}${resource.pathname.replace(/\/$/, "")}`;
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;
329
353
  };
354
+ const urls = discovery(options, () => server.env.url);
355
+ const { metadataUrl } = urls;
330
356
  const invoke = async (name, args, ctx, checkVisible = true) => {
331
357
  const entry = registry.get(name);
332
358
  try {
@@ -341,7 +367,7 @@ function createMcp(betterSupabase, options) {
341
367
  const outcome = await invoke(name, args, ctx);
342
368
  return isRefusal(outcome) ? failure(dbError("forbidden", outcome.refusal)) : outcome;
343
369
  };
344
- const scopes = (options.advertisedScopes ?? options.scopes ?? []).filter((scope) => scope !== "offline_access");
370
+ const scopes = (options.advertisedScopes ?? []).filter((scope) => scope !== "offline_access");
345
371
  const serverInfo = {
346
372
  name: options.name,
347
373
  version: options.version,
@@ -390,19 +416,28 @@ function createMcp(betterSupabase, options) {
390
416
  if (sent === null || headerName(sent) !== name) return mismatch(`Mcp-Name must be ${name}`);
391
417
  }
392
418
  };
419
+ const cors = options.cors ?? true;
393
420
  const endpoint = async (request) => {
421
+ const response = await answer(request);
422
+ flushEvents(server, options.waitUntil);
423
+ return cors ? withCors(response, request, options.allowedOrigins) : response;
424
+ };
425
+ const answer = async (request) => {
394
426
  const origin = request.headers.get("origin");
395
427
  if (origin && options.allowedOrigins && !options.allowedOrigins.includes(origin)) return rpcError(null, INVALID_REQUEST, "Origin not allowed", 403);
396
- if (options.allowedHosts && !hostAllowed(request, options.allowedHosts)) return rpcError(null, INVALID_REQUEST, "Host not allowed", 403);
428
+ if (options.allowedHosts && !hostAllowed(urls.host(request), options.allowedHosts)) return rpcError(null, INVALID_REQUEST, "Host not allowed", 403);
429
+ if (request.method === "OPTIONS" && cors) return endpointPreflight(request, options.allowedOrigins);
397
430
  if (request.method !== "POST") return new Response(null, {
398
431
  status: 405,
399
- headers: { allow: "POST" }
432
+ headers: { allow: cors ? "POST, OPTIONS" : "POST" }
400
433
  });
401
434
  const header = request.headers.get("mcp-protocol-version");
402
435
  if (header && !SUPPORTED_VERSIONS.includes(header)) return unsupportedVersion(null, header);
403
436
  const ctx = await server.context(request, { cookies: false });
404
437
  const denied = guard(ctx.auth, options.allow, options.aal, options.requiredScopes);
405
438
  if (denied) return refuse(request, denied);
439
+ const roleDenied = missingRole(ctx.auth, options.requiredRoles);
440
+ if (roleDenied) return refuse(request, roleDenied);
406
441
  let message;
407
442
  try {
408
443
  message = await request.json();
@@ -470,13 +505,21 @@ function createMcp(betterSupabase, options) {
470
505
  default: return notFound();
471
506
  }
472
507
  };
473
- const metadata = (request) => Response.json({
474
- resource: resourceOf(request),
475
- authorization_servers: [...authorizationServers()],
476
- bearer_methods_supported: ["header"],
477
- ...scopes.length > 0 ? { scopes_supported: scopes } : {},
478
- ...options.resourceDocumentation === void 0 ? {} : { resource_documentation: options.resourceDocumentation }
479
- }, { headers: { "access-control-allow-origin": "*" } });
508
+ const metadata = (request) => {
509
+ const resource = urls.resource(request);
510
+ const authorizationServers = [...urls.authorizationServers(request)];
511
+ if (scopes.length === 0 && options.resourceDocumentation === void 0) return resourceMetadataResponse(request, {
512
+ resource,
513
+ authorizationServers
514
+ });
515
+ return Response.json({
516
+ resource,
517
+ authorization_servers: authorizationServers,
518
+ bearer_methods_supported: ["header"],
519
+ ...scopes.length > 0 ? { scopes_supported: scopes } : {},
520
+ ...options.resourceDocumentation === void 0 ? {} : { resource_documentation: options.resourceDocumentation }
521
+ }, { headers: { "access-control-allow-origin": "*" } });
522
+ };
480
523
  const mcp = extendServer(server, {
481
524
  get tools() {
482
525
  return [...listTools()];
@@ -489,14 +532,7 @@ function createMcp(betterSupabase, options) {
489
532
  endpoint,
490
533
  metadata,
491
534
  fetch(request) {
492
- const { pathname } = new URL(request.url);
493
- if (pathname.startsWith(WELL_KNOWN)) return Promise.resolve(request.method === "OPTIONS" ? new Response(null, {
494
- status: 204,
495
- headers: {
496
- "access-control-allow-origin": "*",
497
- "access-control-allow-methods": "GET"
498
- }
499
- }) : metadata(request));
535
+ if (isMetadataRequest(request)) return Promise.resolve(request.method === "OPTIONS" ? metadataPreflight() : metadata(request));
500
536
  return endpoint(request);
501
537
  }
502
538
  });
@@ -0,0 +1,105 @@
1
+ import { a as AnyModels, i as AnyFunctions } from "../../types-6BdhkmZe.js";
2
+ import { r as AuthState } from "../../resolve-KW8nCeL6.js";
3
+ import { t as BetterSupabase } from "../../define-CJJkkr1-.js";
4
+ import { i as ServerContext$1, o as ServerOptions, t as BetterServer } from "../../server-CeVeeXwz.js";
5
+ import { r as GuardOptions, t as AllowedCaller } from "../../respond-DoBijysA.js";
6
+ import { AuthInfo, CallToolResult, Icon, InputRequiredResult, OAuthTokenVerifier, RegisteredTool, ScopeChallengeHandler, ServerContext, StandardSchemaWithJSON, ToolAnnotations } from "@modelcontextprotocol/server";
7
+ //#region src/mcp/sdk/sdk.d.ts
8
+ interface McpAuthOptions extends ServerOptions, Omit<GuardOptions, "scopes"> {
9
+ /**
10
+ * The MCP endpoint's public URL, the RFC 9728 `resource`. Defaults to the
11
+ * request URL without a trailing slash, and on Supabase Edge Functions to
12
+ * the public `<origin>/functions/v1/<slug>`; pass it when a proxy rewrites
13
+ * the host or path.
14
+ */
15
+ readonly resource?: string | ((request: Request) => string);
16
+ /** Defaults to the project's Supabase Auth issuer. */
17
+ readonly authorizationServers?: readonly string[];
18
+ /**
19
+ * Answers CORS preflights in `serve` and adds `Access-Control-*` headers
20
+ * (any origin), so browser MCP clients can call the server. Defaults to true.
21
+ */
22
+ readonly cors?: boolean;
23
+ /** Scopes published as `scopes_supported`; `offline_access` is never listed. */
24
+ readonly advertisedScopes?: readonly string[];
25
+ /**
26
+ * Scopes a delegated token (an OAuth client) needs; one without them gets a
27
+ * 403 `insufficient_scope` challenge. The user's own session is not limited.
28
+ */
29
+ readonly requiredScopes?: readonly string[];
30
+ /** Published as `resource_documentation`. */
31
+ readonly resourceDocumentation?: string;
32
+ /**
33
+ * Keeps the invocation alive for event sink sends a tool started, e.g.
34
+ * `EdgeRuntime.waitUntil` or Next's `after`.
35
+ */
36
+ readonly waitUntil?: (promise: Promise<unknown>) => void;
37
+ }
38
+ /** A fetch handler that takes verified auth, like the SDK's `createMcpHandler(...)`. */
39
+ interface McpFetchHandler {
40
+ fetch(request: Request, options?: {
41
+ readonly authInfo?: AuthInfo;
42
+ }): Promise<Response>;
43
+ }
44
+ interface BetterMcpAuth<M extends AnyModels = AnyModels, F extends AnyFunctions = AnyFunctions, E = unknown, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
45
+ /** An `OAuthTokenVerifier` for the SDK's bearer helpers; it verifies the token locally. */
46
+ readonly verifier: OAuthTokenVerifier;
47
+ /** The RFC 9728 Protected Resource Metadata document. */
48
+ metadata(request: Request): Response;
49
+ /** Where the metadata is served, for `WWW-Authenticate` challenges. */
50
+ metadataUrl(request: Request): string;
51
+ /**
52
+ * A fetch handler that serves the metadata, refuses callers without a
53
+ * valid bearer token (401 or 403 with an RFC 9728 challenge), then calls
54
+ * `handler.fetch(request, { authInfo })`.
55
+ */
56
+ serve(handler: McpFetchHandler): (request: Request) => Promise<Response>;
57
+ /** The caller's context for a tool call, from `ctx.http.authInfo`. */
58
+ contextOf(ctx: ServerContext): Promise<ServerContext$1<M, F, E, C, P>>;
59
+ }
60
+ /** What `withBetterSupabaseMcp` adds to the SDK's tool context. */
61
+ interface BetterToolExtra<M extends AnyModels = AnyModels, F extends AnyFunctions = AnyFunctions, E = unknown, C = unknown, P = unknown> {
62
+ /** Repositories bound to the verified caller, with RLS. */
63
+ readonly db: ServerContext$1<M, F, E, C, P>["db"];
64
+ readonly auth: AuthState<C, P>;
65
+ /** The full server context: `db`, `auth`, `supabase` and the rest. */
66
+ readonly bs: ServerContext$1<M, F, E, C, P>;
67
+ }
68
+ type BetterToolContext<M extends AnyModels = AnyModels, F extends AnyFunctions = AnyFunctions, E = unknown, C = unknown, P = unknown> = ServerContext & BetterToolExtra<M, F, E, C, P>;
69
+ interface BetterToolConfig<InputArgs extends StandardSchemaWithJSON | undefined, OutputArgs extends StandardSchemaWithJSON | undefined> {
70
+ readonly title?: string;
71
+ readonly description?: string;
72
+ readonly inputSchema?: InputArgs;
73
+ readonly outputSchema?: OutputArgs;
74
+ readonly annotations?: ToolAnnotations;
75
+ readonly icons?: Icon[];
76
+ readonly scopeChallenge?: ScopeChallengeHandler;
77
+ readonly _meta?: Record<string, unknown>;
78
+ /** Extra keys for wrappers registered in between, such as an authorization library's `permission`. */
79
+ readonly [key: string]: unknown;
80
+ }
81
+ type ToolReturn = CallToolResult | InputRequiredResult | Promise<CallToolResult | InputRequiredResult>;
82
+ type BetterToolCallback<InputArgs extends StandardSchemaWithJSON | undefined, Ctx> = InputArgs extends StandardSchemaWithJSON ? (args: StandardSchemaWithJSON.InferOutput<InputArgs>, ctx: Ctx) => ToolReturn : (ctx: Ctx) => ToolReturn;
83
+ /** An SDK server whose tool callbacks also get `db`, `auth` and `bs`. */
84
+ type BetterMcpServer<S, M extends AnyModels = AnyModels, F extends AnyFunctions = AnyFunctions, E = unknown, C = unknown, P = unknown> = Omit<S, "registerTool"> & {
85
+ registerTool<OutputArgs extends StandardSchemaWithJSON | undefined = undefined, InputArgs extends StandardSchemaWithJSON | undefined = undefined>(name: string, config: BetterToolConfig<InputArgs, OutputArgs>, cb: BetterToolCallback<InputArgs, BetterToolContext<M, F, E, C, P>>): RegisteredTool;
86
+ };
87
+ /** The structural part of `McpServer` (or a wrapper of it) that `withBetterSupabaseMcp` needs. */
88
+ interface ToolRegistrar {
89
+ registerTool(name: string, config: never, cb: (...params: never[]) => unknown): unknown;
90
+ }
91
+ /**
92
+ * Bearer auth for an MCP server built on the official SDK
93
+ * (`@modelcontextprotocol/server` 2.3 or later). Verifies Supabase access
94
+ * tokens locally, serves the RFC 9728 metadata, and binds repositories to
95
+ * the caller. Pair it with `withBetterSupabaseMcp` and `createMcpHandler`.
96
+ */
97
+ export declare function createMcpAuth<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: McpAuthOptions): BetterMcpAuth<M, F, E, C, P>;
98
+ /**
99
+ * Wraps `server.registerTool` so every tool callback gets `db`, `auth` and
100
+ * `bs` for the caller on its context. Wrap after an authorization wrapper
101
+ * so permissions are checked before the context is built.
102
+ */
103
+ 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
+ //#endregion
105
+ export type { AllowedCaller, BetterMcpAuth, BetterMcpServer, BetterToolCallback, BetterToolConfig, BetterToolContext, BetterToolExtra, GuardOptions, McpAuthOptions, McpFetchHandler, ToolRegistrar };
@@ -0,0 +1,126 @@
1
+ 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-Bc1o3zyy.js";
3
+ import { r as guard } from "../../respond-BUgsXNgk.js";
4
+ import { a as withCors, i as metadataPreflight, n as endpointPreflight, r as isMetadataRequest, t as discovery } from "../../http-DdYadv-o.js";
5
+ import { OAuthError, bearerAuthChallengeResponse, verifyBearerToken } from "@modelcontextprotocol/server";
6
+ //#region src/mcp/sdk/sdk.ts
7
+ const STATE_KEY = "betterSupabase";
8
+ function claimString(claims, key) {
9
+ const value = claims[key];
10
+ return typeof value === "string" ? value : void 0;
11
+ }
12
+ function isUserState(value, verified) {
13
+ return typeof value === "object" && value !== null && verified.has(value) && "kind" in value && value.kind === "user";
14
+ }
15
+ /**
16
+ * Bearer auth for an MCP server built on the official SDK
17
+ * (`@modelcontextprotocol/server` 2.3 or later). Verifies Supabase access
18
+ * tokens locally, serves the RFC 9728 metadata, and binds repositories to
19
+ * the caller. Pair it with `withBetterSupabaseMcp` and `createMcpHandler`.
20
+ */
21
+ function createMcpAuth(betterSupabase, options = {}) {
22
+ const server = createServer(betterSupabase, options);
23
+ /** Auth states this instance verified and guarded; any other `AuthInfo.extra` is ignored. */
24
+ const verified = /* @__PURE__ */ new WeakSet();
25
+ const allow = options.allow ?? ["user"];
26
+ const scopes = options.requiredScopes ?? [];
27
+ const advertised = (options.advertisedScopes ?? []).filter((scope) => scope !== "offline_access");
28
+ const urls = discovery(options, () => server.env.url);
29
+ const { metadataUrl } = urls;
30
+ const cors = options.cors ?? true;
31
+ const metadata = (request) => Response.json({
32
+ resource: urls.resource(request),
33
+ authorization_servers: [...urls.authorizationServers(request)],
34
+ bearer_methods_supported: ["header"],
35
+ ...advertised.length > 0 ? { scopes_supported: advertised } : {},
36
+ ...options.resourceDocumentation === void 0 ? {} : { resource_documentation: options.resourceDocumentation }
37
+ }, { headers: { "access-control-allow-origin": "*" } });
38
+ const verifier = { async verifyAccessToken(token) {
39
+ const auth = await resolveToken(server, token);
40
+ if (auth.kind !== "user") throw new OAuthError("invalid_token", "The access token is not valid");
41
+ const denied = guard(auth, allow, options.aal, scopes);
42
+ if (denied) throw new OAuthError(denied.kind === "unauthorized" ? "invalid_token" : "insufficient_scope", denied.message);
43
+ verified.add(auth);
44
+ const exp = auth.claims.exp;
45
+ return {
46
+ token,
47
+ clientId: claimString(auth.claims, "client_id") ?? claimString(auth.claims, "azp") ?? "",
48
+ scopes: [...delegationOf(auth.claims)?.scopes ?? []],
49
+ ...auth.expiresAt === null ? typeof exp === "number" ? { expiresAt: exp } : {} : { expiresAt: auth.expiresAt },
50
+ extra: { [STATE_KEY]: auth }
51
+ };
52
+ } };
53
+ const anon = {
54
+ kind: "anon",
55
+ reason: "none"
56
+ };
57
+ const contextOf = async (ctx) => {
58
+ const info = ctx.http?.authInfo;
59
+ const state = info?.extra?.[STATE_KEY];
60
+ if (isUserState(state, verified)) return server.contextFor(state);
61
+ if (info?.token) {
62
+ const auth = await resolveToken(server, info.token);
63
+ const allowed = auth.kind === "user" && guard(auth, allow, options.aal, scopes) === void 0;
64
+ return server.contextFor(allowed ? auth : anon);
65
+ }
66
+ return server.contextFor(anon);
67
+ };
68
+ const serve = (handler) => async (request) => {
69
+ if (isMetadataRequest(request)) return request.method === "OPTIONS" ? metadataPreflight() : metadata(request);
70
+ if (cors && request.method === "OPTIONS") return endpointPreflight(request);
71
+ const response = await answer(handler, request);
72
+ flushEvents(server, options.waitUntil);
73
+ return cors ? withCors(response, request) : response;
74
+ };
75
+ const answer = async (handler, request) => {
76
+ const header = request.headers.get("authorization");
77
+ if (!header && allow.includes("anon")) return handler.fetch(request);
78
+ const resourceMetadataUrl = metadataUrl(request);
79
+ try {
80
+ const authInfo = await verifyBearerToken(header, {
81
+ verifier,
82
+ resourceMetadataUrl
83
+ });
84
+ return await handler.fetch(request, { authInfo });
85
+ } catch (error) {
86
+ if (!(error instanceof OAuthError)) throw error;
87
+ return bearerAuthChallengeResponse(error, {
88
+ resourceMetadataUrl,
89
+ ...scopes.length > 0 || advertised.length > 0 ? { requiredScopes: [.../* @__PURE__ */ new Set([...advertised, ...scopes])] } : {}
90
+ });
91
+ }
92
+ };
93
+ return extendServer(server, {
94
+ verifier,
95
+ metadata,
96
+ metadataUrl,
97
+ serve,
98
+ contextOf
99
+ });
100
+ }
101
+ /**
102
+ * Wraps `server.registerTool` so every tool callback gets `db`, `auth` and
103
+ * `bs` for the caller on its context. Wrap after an authorization wrapper
104
+ * so permissions are checked before the context is built.
105
+ */
106
+ function withBetterSupabaseMcp(server, auth) {
107
+ const register = server.registerTool.bind(server);
108
+ const registerTool = (name, config, cb) => register(name, config, async (...params) => {
109
+ const ctx = params.at(-1);
110
+ const bs = await auth.contextOf(ctx);
111
+ const extended = withExtra(ctx, {
112
+ db: bs.db,
113
+ auth: bs.auth,
114
+ bs
115
+ });
116
+ return cb(...params.slice(0, -1), extended);
117
+ });
118
+ Object.defineProperty(server, "registerTool", {
119
+ value: registerTool,
120
+ configurable: true,
121
+ writable: true
122
+ });
123
+ return server;
124
+ }
125
+ //#endregion
126
+ export { createMcpAuth, withBetterSupabaseMcp };