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,7 +1,32 @@
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, r as MiddlewareOptions, u as BetterServer } from "../respond-BR1fJWOB.js";
4
- 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 { t as AuthSession } from "../view-DbxLNu8L.js";
5
+ import { i as MiddlewareOptions, r as GuardOptions } from "../respond-DoBijysA.js";
6
+ import { s as BlockRequireOptions } from "../kit-B5tid-q5.js";
7
+ import { t as Validated } from "../shared-DDSjEGDR.js";
8
+ import { a as ResourceRouteOptions } from "../resource-D6Uc7Sk7.js";
9
+ import { AnyEntry, Contributions } from "@supabase/middleware";
10
+ import { WithCorsConfig } from "@supabase/middleware/cors";
11
+ //#region src/bridges/edge.d.ts
12
+ /** The platform context Workers pass as the third `fetch` argument. */
13
+ interface EdgeExecutionContext {
14
+ waitUntil(promise: Promise<unknown>): void;
15
+ }
16
+ /** `Deno.serve` passes `(request, info)`, Workers `fetch` passes `(request, env, ctx)`. */
17
+ type EdgeHandler = (request: Request, env?: unknown, executionContext?: EdgeExecutionContext) => Promise<Response>;
18
+ /**
19
+ * Runs an entry array around `handler` as a fetch handler for Supabase Edge
20
+ * Functions, Deno, Bun and Workers. The host's second argument seeds the
21
+ * context, so on Workers `getEnv` inside the entries reads the bindings.
22
+ *
23
+ * ```ts
24
+ * Deno.serve(toEdge([withBetterSupabase(server)], async (req, ctx) =>
25
+ * Response.json(await ctx.db.notes.findMany().orThrow())))
26
+ * ```
27
+ */
28
+ export declare function toEdge<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>, handler: (request: Request, ctx: Contributions<Entries>, executionContext: EdgeExecutionContext | undefined, env: unknown) => Response | Promise<Response>): EdgeHandler;
29
+ //#endregion
5
30
  //#region src/edge/index.d.ts
6
31
  export interface CorsOptions {
7
32
  /** Allowed origins, or `*`. Defaults to `*`. */
@@ -23,28 +48,61 @@ export interface EdgeOptions extends ServerOptions {
23
48
  */
24
49
  readonly waitUntil?: (promise: Promise<unknown>) => void;
25
50
  }
26
- /** The platform context Workers pass as the third `fetch` argument. */
27
- export interface EdgeExecutionContext {
28
- waitUntil(promise: Promise<unknown>): void;
29
- }
30
- /** `Deno.serve` passes `(request, info)`, Workers `fetch` passes `(request, env, ctx)`. */
31
- export type EdgeHandler = (request: Request, env?: unknown, executionContext?: EdgeExecutionContext) => Promise<Response>;
32
51
  export type ResourceMap<M extends AnyModels> = { readonly [T in TableKey<M>]?: ResourceRouteOptions<M, T> | true; };
33
52
  export interface ResourcesOptions extends MiddlewareOptions {
34
53
  /** Path before the resources, e.g. `/api` (Supabase: `/<function-name>`). */
35
54
  readonly basePath?: string;
36
55
  }
56
+ type ParamNames<K extends string> = K extends `${string}:${infer Name}/${infer Rest}` ? Name | ParamNames<Rest> : K extends `${string}:${infer Name}` ? Name : never;
57
+ /**
58
+ * The params a route key declares: one per `:name` segment, and `*` for a
59
+ * final wildcard. `RouteParams<"GET /orgs/:org/files/*">` is
60
+ * `{ org: string; "*": string }`.
61
+ */
62
+ export type RouteParams<K extends string> = { readonly [N in ParamNames<K> | (K extends `${string}/*` ? "*" : never)]: string; };
63
+ /** A route handler: the request, the caller's context and the path params. */
64
+ export type EdgeRouteHandler<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown, Params = Readonly<Record<string, string>>> = (request: Request, ctx: ServerContext<M, F, E, C, P> & {
65
+ readonly params: Params;
66
+ readonly session: AuthSession<C, P>;
67
+ readonly tenant: string | undefined;
68
+ }) => unknown;
69
+ /** A route with its own guard: `allow`, `aal`, `scopes`, `requireTenant`, `authorize`. */
70
+ export interface EdgeRoute<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown, Params = Readonly<Record<string, string>>> extends BlockRequireOptions<C, P> {
71
+ readonly handler: EdgeRouteHandler<M, F, E, C, P, Params>;
72
+ }
73
+ /**
74
+ * Routes by `"METHOD /path"` (or `"/path"` for every method). `:name`
75
+ * segments are params, a final `*` matches the rest of the path.
76
+ */
77
+ export type EdgeRoutes<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> = Readonly<Record<string, EdgeRouteHandler<M, F, E, C, P> | EdgeRoute<M, F, E, C, P>>>;
37
78
  export interface BetterEdge<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
38
79
  /**
39
80
  * A fetch handler (`Deno.serve`, Workers `fetch`) running as the caller.
40
81
  * `Result`s become JSON or Problem Details; `undefined` becomes 204.
41
82
  */
42
83
  handler(fn: (request: Request, ctx: ServerContext<M, F, E, C, P>) => unknown, options?: MiddlewareOptions): EdgeHandler;
84
+ /**
85
+ * A router: each route runs as the caller, behind the shared guard in
86
+ * `options` and its own. An unknown path answers 404 and a known path
87
+ * with another method 405, both before auth resolves. `ctx.params` is
88
+ * typed from the key: `"GET /customers/:id"` gets `params.id`.
89
+ *
90
+ * ```ts
91
+ * Deno.serve(bs.routes({
92
+ * 'GET /customers': (req, ctx) => ctx.db.customers.findMany(),
93
+ * 'GET /customers/:id': (req, ctx) => ctx.db.customers.find(ctx.params.id),
94
+ * 'POST /invites': { requireTenant: true, handler: (req, ctx) => invite(req, ctx) },
95
+ * }, { basePath: '/api' }))
96
+ * ```
97
+ */
98
+ routes<K extends string>(routes: { readonly [Key in K]: EdgeRouteHandler<M, F, E, C, P, RouteParams<Key>> | EdgeRoute<M, F, E, C, P, RouteParams<Key>>; }, options?: ResourcesOptions): EdgeHandler;
43
99
  /** REST resources matching `createOpenApi`, e.g. `Deno.serve(bs.resources({ customers: true }))`. */
44
100
  resources(map: ResourceMap<M>, options?: ResourcesOptions): EdgeHandler;
45
101
  }
46
102
  export declare const SUPABASE_CORS_HEADERS: readonly string[];
103
+ /** `CorsOptions` as `withCors` from `@supabase/middleware/cors` takes them. */
104
+ export declare function corsConfig(cors: CorsOptions): WithCorsConfig;
47
105
  /** Fetch-handler integration for Supabase Edge Functions, Deno, Bun and Workers. */
48
106
  export declare function createEdge<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: EdgeOptions): BetterEdge<M, F, E, C, P>;
49
107
  //#endregion
50
- export type { GuardOptions, MiddlewareOptions, ResourceRouteOptions };
108
+ export type { BlockRequireOptions, EdgeExecutionContext, EdgeHandler, GuardOptions, MiddlewareOptions, ResourceRouteOptions };
@@ -1,7 +1,104 @@
1
- import { n as dbError } from "../errors-DtwXa6b8.js";
2
- import { a as problemResponse } from "../problem-BW1KhzSG.js";
3
- import { d as guard, n as createServer, p as respond, r as extendServer, u as defaultExpose } from "../server-B1mZ7CgQ.js";
4
- import { t as defineResource } from "../resource-mqfJW4YF.js";
1
+ import { n as dbError } from "../errors-B11Duf73.js";
2
+ import { r as err } from "../result-DzUbqgdW.js";
3
+ import { a as problemResponse } from "../problem-BreOl8b8.js";
4
+ import { a as unexpectedResponse, c as extendServer, l as withExtra, n as flushEvents, s as createServer } from "../adapter-Bc1o3zyy.js";
5
+ import { a as respond, t as defaultExpose } from "../respond-BUgsXNgk.js";
6
+ import { t as withBetterSupabase } from "../composite-DhE66P5u.js";
7
+ import { t as defineResource } from "../resource-BsvzCMlX.js";
8
+ import { i as requireCaller } from "../kit-Fm-Fv7q5.js";
9
+ import { t as EVERY_CALLER } from "../framework-CONDyPYx.js";
10
+ import { bufferRequest, pipeline, seedContext } from "@supabase/middleware";
11
+ import { withCors } from "@supabase/middleware/cors";
12
+ //#region src/bridges/edge.ts
13
+ /**
14
+ * Runs an entry array around `handler` as a fetch handler for Supabase Edge
15
+ * Functions, Deno, Bun and Workers. The host's second argument seeds the
16
+ * context, so on Workers `getEnv` inside the entries reads the bindings.
17
+ *
18
+ * ```ts
19
+ * Deno.serve(toEdge([withBetterSupabase(server)], async (req, ctx) =>
20
+ * Response.json(await ctx.db.notes.findMany().orThrow())))
21
+ * ```
22
+ */
23
+ function toEdge(entries, handler) {
24
+ const EXECUTION = Symbol("toEdge.execution");
25
+ const ENV = Symbol("toEdge.env");
26
+ const run = pipeline(entries, (request, ctx) => Promise.resolve(handler(request, ctx, ctx[EXECUTION], ctx[ENV])));
27
+ return (request, env, executionContext) => run(request.body ? bufferRequest(request) : request, {
28
+ ...seedContext(env),
29
+ [EXECUTION]: executionContext,
30
+ [ENV]: env
31
+ });
32
+ }
33
+ //#endregion
34
+ //#region src/edge/routes.ts
35
+ const METHOD = /^([A-Z]+)\s+(\/.*)$/;
36
+ function split(path) {
37
+ return path.split("/").filter((segment) => segment !== "");
38
+ }
39
+ /** Parses `"METHOD /path"` keys once; static routes sort before params. */
40
+ function compileRoutes(routes) {
41
+ const compiled = [];
42
+ for (const [key, value] of Object.entries(routes)) {
43
+ const matched = METHOD.exec(key.trim());
44
+ const method = matched?.[1];
45
+ const path = matched?.[2] ?? key.trim();
46
+ if (!path.startsWith("/")) throw new TypeError(`better-supabase: route "${key}" must be "/path" or "METHOD /path"`);
47
+ const segments = split(path);
48
+ const rest = segments.at(-1) === "*";
49
+ if (rest) segments.pop();
50
+ const { handler, ...options } = typeof value === "function" ? { handler: value } : value;
51
+ compiled.push({
52
+ method,
53
+ segments,
54
+ rest,
55
+ handler,
56
+ options
57
+ });
58
+ }
59
+ const weight = (route) => route.segments.filter((segment) => segment.startsWith(":")).length + (route.rest ? 100 : 0);
60
+ return compiled.toSorted((a, b) => weight(a) - weight(b));
61
+ }
62
+ function paramsOf(segments, rest, parts) {
63
+ if (rest ? parts.length < segments.length : parts.length !== segments.length) return void 0;
64
+ const params = {};
65
+ for (const [index, segment] of segments.entries()) {
66
+ const part = parts[index] ?? "";
67
+ if (segment.startsWith(":")) try {
68
+ params[segment.slice(1)] = decodeURIComponent(part);
69
+ } catch {
70
+ return;
71
+ }
72
+ else if (segment !== part) return void 0;
73
+ }
74
+ if (rest) params["*"] = parts.slice(segments.length).join("/");
75
+ return params;
76
+ }
77
+ /**
78
+ * The route for `method` and `path`: a match, the allowed methods when the
79
+ * path matches under another method (`HEAD` falls back to `GET`), or `"none"`.
80
+ */
81
+ function matchRoute(routes, method, path) {
82
+ const parts = split(path);
83
+ const allowed = /* @__PURE__ */ new Set();
84
+ let fallback;
85
+ for (const route of routes) {
86
+ const params = paramsOf(route.segments, route.rest, parts);
87
+ if (!params) continue;
88
+ if (route.method === void 0 || route.method === method) return {
89
+ route,
90
+ params
91
+ };
92
+ if (method === "HEAD" && route.method === "GET") fallback ??= {
93
+ route,
94
+ params
95
+ };
96
+ allowed.add(route.method);
97
+ }
98
+ if (fallback) return fallback;
99
+ return allowed.size > 0 ? [...allowed] : "none";
100
+ }
101
+ //#endregion
5
102
  //#region src/edge/index.ts
6
103
  const SUPABASE_CORS_HEADERS = [
7
104
  "authorization",
@@ -9,89 +106,107 @@ const SUPABASE_CORS_HEADERS = [
9
106
  "apikey",
10
107
  "content-type"
11
108
  ];
12
- /** The CORS headers for a request's origin; the fixed ones are joined once. */
13
- function corsFor(cors) {
14
- const allowed = cors.origin ?? "*";
15
- const origins = new Set(typeof allowed === "string" ? [allowed] : allowed);
16
- const fixed = {
17
- "access-control-allow-headers": (cors.headers ?? SUPABASE_CORS_HEADERS).join(", "),
18
- "access-control-allow-methods": (cors.methods ?? [
109
+ /** `CorsOptions` as `withCors` from `@supabase/middleware/cors` takes them. */
110
+ function corsConfig(cors) {
111
+ return {
112
+ origin: cors.origin === void 0 || typeof cors.origin === "string" ? cors.origin ?? "*" : [...cors.origin],
113
+ allowedHeaders: [...cors.headers ?? SUPABASE_CORS_HEADERS],
114
+ methods: [...cors.methods ?? [
19
115
  "GET",
20
116
  "POST",
21
117
  "PATCH",
22
118
  "DELETE",
23
119
  "OPTIONS"
24
- ]).join(", "),
25
- ...cors.maxAge === void 0 ? {} : { "access-control-max-age": String(cors.maxAge) }
26
- };
27
- const any = {
28
- "access-control-allow-origin": "*",
29
- ...fixed
30
- };
31
- return (request) => {
32
- if (allowed === "*") return any;
33
- const origin = request.headers.get("origin");
34
- if (!origin || !origins.has(origin)) return;
35
- return {
36
- "access-control-allow-origin": origin,
37
- ...fixed,
38
- vary: "origin"
39
- };
120
+ ]],
121
+ ...cors.maxAge === void 0 ? {} : { maxAge: cors.maxAge }
40
122
  };
41
123
  }
42
- function withHeaders(response, headers) {
43
- let target = response;
44
- try {
45
- for (const [name, value] of Object.entries(headers)) target.headers.set(name, value);
46
- } catch {
47
- target = new Response(response.body, response);
48
- for (const [name, value] of Object.entries(headers)) target.headers.set(name, value);
49
- }
50
- return target;
51
- }
52
124
  /** Fetch-handler integration for Supabase Edge Functions, Deno, Bun and Workers. */
53
125
  function createEdge(betterSupabase, options = {}) {
54
126
  const server = createServer(betterSupabase, options);
55
127
  const expose = options.exposeErrors ?? defaultExpose();
56
128
  const cors = options.cors === true ? {} : options.cors === false ? void 0 : options.cors;
57
- const corsHeaders = cors ? corsFor(cors) : void 0;
129
+ const withCorsConfig = cors ? corsConfig(cors) : void 0;
58
130
  const serve = (run, handlerOptions, early) => {
59
- return async (request, _env, executionContext) => {
60
- const extra = corsHeaders?.(request);
61
- if (cors && request.method === "OPTIONS") return new Response(null, {
62
- status: 204,
63
- headers: extra ?? {}
64
- });
65
- const answered = early?.(request);
66
- if (answered) return extra ? withHeaders(answered, extra) : answered;
67
- const ctx = await server.context(request, { refresh: handlerOptions.refresh ?? false });
131
+ const authorized = toEdge([withBetterSupabase(server, {
132
+ ...handlerOptions,
133
+ expose
134
+ })], async (request, ctx) => {
68
135
  const instance = new URL(request.url).pathname;
69
- const denied = guard(ctx.auth, handlerOptions.allow, handlerOptions.aal, handlerOptions.scopes);
70
- let response;
71
136
  try {
72
- response = denied ? problemResponse(denied, {
137
+ return await respond(() => run(request, ctx.bs, ctx.tenant), {
73
138
  instance,
74
139
  expose
75
- }) : await run(request, ctx);
140
+ });
76
141
  } catch (cause) {
77
- response = problemResponse(dbError("unexpected", expose && cause instanceof Error ? cause.message : "Internal server error"), {
142
+ return unexpectedResponse(cause, {
78
143
  instance,
79
144
  expose
80
145
  });
81
146
  }
82
- response = ctx.apply(response);
83
- const { events } = betterSupabase;
84
- const waitUntil = options.waitUntil ?? executionContext?.waitUntil.bind(executionContext);
85
- if (events.pending && waitUntil) waitUntil(events.settled());
86
- return extra ? withHeaders(response, extra) : response;
147
+ });
148
+ const routed = (request, env, executionContext) => Promise.resolve(early?.(request) ?? authorized(request, env, executionContext));
149
+ const answer = withCorsConfig ? toEdge([withCors(withCorsConfig)], (request, _ctx, executionContext, env) => routed(request, env, executionContext)) : routed;
150
+ return async (request, env, executionContext) => {
151
+ const response = await answer(request, env, executionContext);
152
+ flushEvents(server, options.waitUntil ?? executionContext?.waitUntil.bind(executionContext));
153
+ return response;
87
154
  };
88
155
  };
89
156
  return extendServer(server, {
90
157
  handler(fn, handlerOptions = {}) {
91
- return serve((request, ctx) => respond(() => fn(request, ctx), {
92
- instance: new URL(request.url).pathname,
93
- expose
94
- }), handlerOptions);
158
+ return serve(fn, handlerOptions);
159
+ },
160
+ routes(routes, routesOptions = {}) {
161
+ const base = (routesOptions.basePath ?? "").replace(/\/$/, "");
162
+ const compiled = compileRoutes(routes);
163
+ const { allow, aal, scopes, ...middlewareOptions } = routesOptions;
164
+ const shared = {
165
+ ...allow === void 0 ? {} : { allow },
166
+ ...aal === void 0 ? {} : { aal },
167
+ ...scopes === void 0 ? {} : { scopes }
168
+ };
169
+ const find = (request) => {
170
+ const { pathname } = new URL(request.url);
171
+ const path = base === "" ? pathname : pathname === base || pathname.startsWith(`${base}/`) ? pathname.slice(base.length) || "/" : void 0;
172
+ const found = path === void 0 ? void 0 : matchRoute(compiled, request.method, path);
173
+ if (found === void 0 || found === "none") return problemResponse(dbError("not_found", `No route for ${pathname}`), { instance: pathname });
174
+ if (!("route" in found)) return Response.json({
175
+ type: "about:blank",
176
+ title: "Method Not Allowed",
177
+ status: 405,
178
+ detail: `${request.method} is not allowed on ${pathname}`,
179
+ instance: pathname
180
+ }, {
181
+ status: 405,
182
+ headers: {
183
+ allow: found.join(", "),
184
+ "content-type": "application/problem+json"
185
+ }
186
+ });
187
+ return found;
188
+ };
189
+ return serve(async (request, ctx, tenant) => {
190
+ const found = find(request);
191
+ if (found instanceof Response) return found;
192
+ const { route, params } = found;
193
+ const caller = await requireCaller(ctx.auth, {
194
+ ...shared,
195
+ ...route.options
196
+ }, tenant);
197
+ if ("kind" in caller) return err(caller);
198
+ return route.handler(request, withExtra(ctx, {
199
+ params,
200
+ session: caller.session,
201
+ tenant
202
+ }));
203
+ }, {
204
+ ...middlewareOptions,
205
+ allow: EVERY_CALLER
206
+ }, (request) => {
207
+ const found = find(request);
208
+ return found instanceof Response ? found : void 0;
209
+ });
95
210
  },
96
211
  resources(map, resourcesOptions = {}) {
97
212
  const base = (resourcesOptions.basePath ?? "").replace(/\/$/, "");
@@ -100,33 +215,34 @@ function createEdge(betterSupabase, options = {}) {
100
215
  if (!resource) continue;
101
216
  handlers.set(table, defineResource(betterSupabase, table, resource === true ? {} : resource));
102
217
  }
103
- const routes = /* @__PURE__ */ new WeakMap();
104
- const notFound = (request) => {
218
+ const match = (request) => {
105
219
  const { pathname } = new URL(request.url);
106
220
  const [table, id, extra] = (pathname.startsWith(`${base}/`) ? pathname.slice(base.length + 1) : void 0)?.split("/") ?? [];
107
221
  const handler = table ? handlers.get(table) : void 0;
108
222
  if (!handler || extra !== void 0 || id !== void 0 && !handler.keyParam) return problemResponse(dbError("not_found", `No route for ${pathname}`), { instance: pathname });
109
- let key;
110
223
  try {
111
- key = id === void 0 || id === "" ? void 0 : decodeURIComponent(id);
224
+ return {
225
+ handler,
226
+ id: id === void 0 || id === "" ? void 0 : decodeURIComponent(id),
227
+ instance: pathname
228
+ };
112
229
  } catch {
113
230
  return problemResponse(dbError("invalid_input", `Malformed id in ${pathname}`), { instance: pathname });
114
231
  }
115
- routes.set(request, {
116
- handler,
117
- id: key,
118
- instance: pathname
119
- });
120
232
  };
121
233
  return serve((request, ctx) => {
122
- const { handler, id, instance } = routes.get(request);
123
- return handler.handle(request, ctx.db, id, {
124
- instance,
234
+ const route = match(request);
235
+ if (route instanceof Response) return route;
236
+ return route.handler.handle(request, ctx.db, route.id, {
237
+ instance: route.instance,
125
238
  expose
126
239
  });
127
- }, resourcesOptions, notFound);
240
+ }, resourcesOptions, (request) => {
241
+ const route = match(request);
242
+ return route instanceof Response ? route : void 0;
243
+ });
128
244
  }
129
245
  });
130
246
  }
131
247
  //#endregion
132
- export { SUPABASE_CORS_HEADERS, createEdge };
248
+ export { SUPABASE_CORS_HEADERS, corsConfig, createEdge, toEdge };
@@ -0,0 +1,59 @@
1
+ import { n as RouteGuardOptions } from "../refusal-D1rgbzNq.js";
2
+ import { t as Validated } from "../shared-DDSjEGDR.js";
3
+ import { AnyEntry, Contributions } from "@supabase/middleware";
4
+ //#region src/bridges/elysia.d.ts
5
+ interface ElysiaBridge<Entries extends readonly AnyEntry[]> {
6
+ /**
7
+ * Runs the entries around the app's fetch (`app.handle`), so short
8
+ * circuits answer before Elysia routes and the route's response passes
9
+ * back through the entries.
10
+ */
11
+ wrap(handle: (request: Request) => Promise<Response>): (request: Request, env?: unknown) => Promise<Response>;
12
+ /**
13
+ * The contributions for a request `wrap` is serving. Throws for any other
14
+ * request, so a route reached without the entries fails closed.
15
+ * Expose it with `.derive(({ request }) => bridge.context(request))`.
16
+ */
17
+ context(request: Request): Contributions<Entries>;
18
+ }
19
+ /**
20
+ * Runs an entry array around an Elysia app. Elysia has no middleware slot
21
+ * that sees the response it produces, so the bridge wraps the app's fetch
22
+ * and hands the contributions to routes through `context(request)`.
23
+ *
24
+ * ```ts
25
+ * const bridge = toElysia([withBetterSupabase(server)])
26
+ * const app = new Elysia().derive(({ request }) => bridge.context(request)).get('/notes', ({ db }) => ...)
27
+ * export default { fetch: bridge.wrap((request) => app.handle(request)) }
28
+ * ```
29
+ */
30
+ export declare function toElysia<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>): ElysiaBridge<Entries>;
31
+ //#endregion
32
+ //#region src/elysia/guard.d.ts
33
+ /**
34
+ * A `beforeHandle` hook that refuses callers outside `options`: Problem
35
+ * Details, or a redirect to `signIn` or `mfa`.
36
+ *
37
+ * ```ts
38
+ * app.get('/admin', handler, { beforeHandle: guard(bridge, { roles: ['admin'] }) })
39
+ * ```
40
+ */
41
+ export declare function guard<Entries extends readonly AnyEntry[]>(bridge: ElysiaBridge<Entries>, options?: RouteGuardOptions): (context: {
42
+ readonly request: Request;
43
+ }) => Promise<Response | undefined>;
44
+ /**
45
+ * An `onError` hook that answers thrown `DbException`s (from `.orThrow()`)
46
+ * with Problem Details and leaves every other error to Elysia.
47
+ *
48
+ * ```ts
49
+ * new Elysia().onError(problemOnError())
50
+ * ```
51
+ */
52
+ export declare function problemOnError(options?: {
53
+ readonly expose?: boolean;
54
+ }): (context: {
55
+ readonly error: unknown;
56
+ readonly request: Request;
57
+ }) => Response | undefined;
58
+ //#endregion
59
+ export type { ElysiaBridge, RouteGuardOptions };
@@ -0,0 +1,62 @@
1
+ import { t as around } from "../shared-CBxosKK3.js";
2
+ import { a as routeRefusal, n as guardedLocals, t as errorResponse } from "../refusal-CeJWxmkH.js";
3
+ import { bufferRequest } from "@supabase/middleware";
4
+ //#region src/bridges/elysia.ts
5
+ /**
6
+ * Runs an entry array around an Elysia app. Elysia has no middleware slot
7
+ * that sees the response it produces, so the bridge wraps the app's fetch
8
+ * and hands the contributions to routes through `context(request)`.
9
+ *
10
+ * ```ts
11
+ * const bridge = toElysia([withBetterSupabase(server)])
12
+ * const app = new Elysia().derive(({ request }) => bridge.context(request)).get('/notes', ({ db }) => ...)
13
+ * export default { fetch: bridge.wrap((request) => app.handle(request)) }
14
+ * ```
15
+ */
16
+ function toElysia(entries) {
17
+ const run = around(entries);
18
+ const contexts = /* @__PURE__ */ new WeakMap();
19
+ return {
20
+ wrap: (handle) => (incoming, env) => {
21
+ const request = incoming.body ? bufferRequest(incoming) : incoming;
22
+ return run(request, env, (contributions) => {
23
+ contexts.set(request, contributions);
24
+ return handle(request);
25
+ });
26
+ },
27
+ context(request) {
28
+ const contributions = contexts.get(request);
29
+ if (!contributions) throw new Error("better-supabase: this request did not pass through toElysia().wrap(); serve the app with the wrapped fetch");
30
+ return contributions;
31
+ }
32
+ };
33
+ }
34
+ //#endregion
35
+ //#region src/elysia/guard.ts
36
+ /**
37
+ * A `beforeHandle` hook that refuses callers outside `options`: Problem
38
+ * Details, or a redirect to `signIn` or `mfa`.
39
+ *
40
+ * ```ts
41
+ * app.get('/admin', handler, { beforeHandle: guard(bridge, { roles: ['admin'] }) })
42
+ * ```
43
+ */
44
+ function guard(bridge, options = {}) {
45
+ return ({ request }) => {
46
+ const locals = guardedLocals(bridge.context(request));
47
+ return routeRefusal(locals, request, options);
48
+ };
49
+ }
50
+ /**
51
+ * An `onError` hook that answers thrown `DbException`s (from `.orThrow()`)
52
+ * with Problem Details and leaves every other error to Elysia.
53
+ *
54
+ * ```ts
55
+ * new Elysia().onError(problemOnError())
56
+ * ```
57
+ */
58
+ function problemOnError(options = {}) {
59
+ return ({ error, request }) => errorResponse(error, request, options);
60
+ }
61
+ //#endregion
62
+ export { guard, problemOnError, toElysia };
@@ -0,0 +1,127 @@
1
+ import { t as DbException } from "./db-exception-CnWcYPxL.js";
2
+ import { embedMany, jsonSchema, rerank, tool } from "ai";
3
+ //#region src/ai-sdk/embeddings/embeddings.ts
4
+ /** The name of an SDK model: the string itself, or `provider/modelId`. */
5
+ function modelName(model) {
6
+ return typeof model === "string" ? model : `${model.provider}/${model.modelId}`;
7
+ }
8
+ /** An `Embedder` for the knowledge and memory blocks over `embedMany`. */
9
+ function embedWith(model, options = {}) {
10
+ return {
11
+ apiVersion: 1,
12
+ model: options.name ?? modelName(model),
13
+ embed: async (values, embedOptions) => {
14
+ if (values.length === 0) return [];
15
+ const { embeddings } = await embedMany({
16
+ model,
17
+ values: [...values],
18
+ maxParallelCalls: options.maxParallelCalls ?? 4,
19
+ ...options.providerOptions === void 0 ? {} : { providerOptions: options.providerOptions },
20
+ ...embedOptions?.signal === void 0 ? {} : { abortSignal: embedOptions.signal }
21
+ });
22
+ return embeddings;
23
+ }
24
+ };
25
+ }
26
+ /** Reorders search hits with a reranking model, keeping the best `topN`. */
27
+ function rerankWith(model, options = {}) {
28
+ return async (query, hits, rerankOptions) => {
29
+ if (hits.length <= 1) return hits;
30
+ const { ranking } = await rerank({
31
+ model,
32
+ query,
33
+ documents: hits.map((hit) => hit.content),
34
+ ...options.topN === void 0 ? {} : { topN: options.topN },
35
+ ...rerankOptions?.signal === void 0 ? {} : { abortSignal: rerankOptions.signal }
36
+ });
37
+ return ranking.flatMap((entry) => {
38
+ const hit = hits[entry.originalIndex];
39
+ return hit === void 0 ? [] : [{
40
+ ...hit,
41
+ score: entry.score
42
+ }];
43
+ });
44
+ };
45
+ }
46
+ /**
47
+ * A tool that searches the knowledge base as the caller. Each result id
48
+ * is `documentId#index`, the `sourceId` that `toSourceParts` gives it.
49
+ */
50
+ function searchTool(knowledge, organizationId, options = {}) {
51
+ const { description, rerank: reorder, onHits, ...search } = options;
52
+ return tool({
53
+ description: description ?? "Search the knowledge base for passages relevant to a query. Cite results by their id.",
54
+ inputSchema: jsonSchema({
55
+ type: "object",
56
+ properties: { query: {
57
+ type: "string",
58
+ description: "What to look for"
59
+ } },
60
+ required: ["query"],
61
+ additionalProperties: false
62
+ }),
63
+ execute: async ({ query }, { abortSignal }) => {
64
+ const found = await knowledge.search(organizationId, query, {
65
+ ...search,
66
+ ...abortSignal === void 0 ? {} : { signal: abortSignal }
67
+ });
68
+ if (!found.ok) throw new DbException(found.error);
69
+ const hits = reorder ? await reorder(query, found.data, abortSignal === void 0 ? void 0 : { signal: abortSignal }) : found.data;
70
+ onHits?.(hits);
71
+ return { results: hits.map((hit) => ({
72
+ id: sourceId(hit),
73
+ title: hit.title,
74
+ content: hit.content
75
+ })) };
76
+ }
77
+ });
78
+ }
79
+ const sourceId = (hit) => `${hit.documentId}#${String(hit.index)}`;
80
+ /** One `source-document` part per document among the hits, in hit order. */
81
+ function toSourceParts(hits) {
82
+ const seen = /* @__PURE__ */ new Set();
83
+ const parts = [];
84
+ for (const hit of hits) {
85
+ if (seen.has(hit.documentId)) continue;
86
+ seen.add(hit.documentId);
87
+ parts.push({
88
+ type: "source-document",
89
+ sourceId: sourceId(hit),
90
+ mediaType: "text/plain",
91
+ title: hit.title
92
+ });
93
+ }
94
+ return parts;
95
+ }
96
+ function supabaseSession(model) {
97
+ const Session = globalThis.Supabase?.ai?.Session;
98
+ if (typeof Session !== "function") throw new TypeError("supabaseEmbed runs in Supabase Edge Functions, where Supabase.ai.Session exists; pass session elsewhere");
99
+ return new Session(model);
100
+ }
101
+ /**
102
+ * An `Embedder` over the model built into Supabase Edge Functions. Set the
103
+ * module's `dimensions` option to the model's size (384 for `gte-small`).
104
+ */
105
+ function supabaseEmbed(options = {}) {
106
+ const name = options.model ?? "gte-small";
107
+ let session = options.session;
108
+ return {
109
+ apiVersion: 1,
110
+ model: `supabase/${name}`,
111
+ embed: async (values) => {
112
+ session ??= supabaseSession(name);
113
+ const vectors = [];
114
+ for (const value of values) {
115
+ const output = await session.run(value, {
116
+ mean_pool: true,
117
+ normalize: true
118
+ });
119
+ if (!Array.isArray(output) || !output.every((x) => typeof x === "number")) throw new TypeError(`Supabase.ai.Session returned no vector for ${name}`);
120
+ vectors.push(output);
121
+ }
122
+ return vectors;
123
+ }
124
+ };
125
+ }
126
+ //#endregion
127
+ export { supabaseEmbed as a, searchTool as i, modelName as n, toSourceParts as o, rerankWith as r, embedWith as t };