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,16 +1,25 @@
1
- import { n as dbError } from "../errors-DtwXa6b8.js";
2
- import { n as StatsRecorder, t as EMPTY_STATS } from "../stats-Bqob3WqT.js";
3
- import { o as isReadSet } from "../read-set-DQFt1N_Y.js";
4
- import { t as validate } from "../standard-D7r6dMUu.js";
5
- import { a as problemResponse } from "../problem-BW1KhzSG.js";
1
+ import { t as DbException } from "../db-exception-CnWcYPxL.js";
2
+ import { n as dbError } from "../errors-B11Duf73.js";
3
+ import { r as err } from "../result-DzUbqgdW.js";
4
+ import { n as StatsRecorder, t as EMPTY_STATS } from "../stats-D_AD9GGu.js";
5
+ import { o as isReadSet } from "../read-set-DuKWC9Mj.js";
6
6
  import { t as isList } from "../guards-BnzDvFrz.js";
7
+ import { n as validate } from "../standard-BK0cqJ7y.js";
8
+ import { a as problemResponse } from "../problem-BreOl8b8.js";
9
+ import { i as claimsOf } from "../claims-PqzCxaTD.js";
7
10
  import { t as supportOf } from "../support-view-g4YLBeqX.js";
8
- import { t as hasEntitlement } from "../entitlements-CTEBm7IB.js";
9
- import { a as withExtra, b as withPrimaryPin, d as guard, m as settle, n as createServer, p as respond, r as extendServer, u as defaultExpose, v as PRIMARY_COOKIE, y as primaryCookieOptions } from "../server-B1mZ7CgQ.js";
10
- import { a as checkAal, n as toSession } from "../view-Bn6HNKUe.js";
11
- import { t as supportSessions } from "../support-wHnK6zp-.js";
11
+ import { t as tenantOf } from "../tenant-I1TEZ_BX.js";
12
+ import { C as serverCore, c as extendServer, l as withExtra, n as flushEvents, p as supportCookieMaxAge, r as handle, s as createServer, t as bearerRequest, v as isPrefetch } from "../adapter-Bc1o3zyy.js";
13
+ import { a as checkAal, n as toSession } from "../view-BeFcRV6G.js";
14
+ import { o as settle, r as guard, t as defaultExpose } from "../respond-BUgsXNgk.js";
15
+ import { t as supportSessions } from "../support-BivNqSpK.js";
16
+ import { r as tagFor, t as cacheTagsOf } from "../tags-B99_U9Pp.js";
17
+ import { n as formDataObject } from "../kit-Fm-Fv7q5.js";
12
18
  import { cache } from "react";
13
- import { cacheLife, cacheTag, revalidateTag, updateTag } from "next/cache.js";
19
+ import { cacheLife, cacheTag, io, revalidateTag, updateTag } from "next/cache.js";
20
+ import { forbidden } from "next/dist/client/components/forbidden.js";
21
+ import { notFound } from "next/dist/client/components/not-found.js";
22
+ import { unauthorized } from "next/dist/client/components/unauthorized.js";
14
23
  import { cookies, headers } from "next/headers.js";
15
24
  import { NextResponse, after } from "next/server.js";
16
25
  //#region src/next/collector.ts
@@ -37,13 +46,17 @@ var StatsCollector = class {
37
46
  constructor(options) {
38
47
  this.#options = options;
39
48
  }
40
- /** The recorder for a request id, created on first use. */
41
- recorderFor(id) {
49
+ /**
50
+ * The recorder for a request id, created on first use. `options` sets the
51
+ * budget and logger of a new entry; the collector's own are the default.
52
+ */
53
+ recorderFor(id, options) {
42
54
  const existing = this.#entries.get(id);
43
55
  if (existing) return existing.recorder;
44
56
  this.#prune();
45
57
  const entry = {
46
58
  created: Date.now(),
59
+ options: options ?? this.#options,
47
60
  recorder: new CollectedRecorder(() => {
48
61
  this.#schedule(id);
49
62
  })
@@ -55,19 +68,20 @@ var StatsCollector = class {
55
68
  return this.#entries.get(id)?.recorder.snapshot();
56
69
  }
57
70
  #schedule(id) {
58
- const { budget, warn } = this.#options;
59
71
  const entry = this.#entries.get(id);
60
- if (!entry || !warn || !budget) return;
72
+ if (!entry) return;
73
+ const { budget, warn, logger, idleMs } = entry.options;
74
+ if (!warn || !budget) return;
61
75
  if (entry.timer) clearTimeout(entry.timer);
62
76
  entry.timer = setTimeout(() => {
63
77
  entry.timer = void 0;
64
78
  const stats = entry.recorder.snapshot();
65
79
  if (!overBudget(stats, budget)) return;
66
- this.#options.logger.warn(`request ${id} made ${stats.calls} database calls in ${stats.waves} waves, over the budget of ${describeBudget(budget)}`, {
80
+ logger.warn(`request ${id} made ${stats.calls} database calls in ${stats.waves} waves, over the budget of ${describeBudget(budget)}`, {
67
81
  requestId: id,
68
82
  ...stats
69
83
  });
70
- }, this.#options.idleMs ?? 250);
84
+ }, idleMs ?? 250);
71
85
  }
72
86
  #prune() {
73
87
  const cutoff = Date.now() - (this.#options.ttlMs ?? 6e4);
@@ -81,13 +95,18 @@ var StatsCollector = class {
81
95
  };
82
96
  const SHARED = Symbol.for("better-supabase.next.stats-collector");
83
97
  /**
84
- * One collector per process. Next.js can load the proxy, pages and route
85
- * handlers as separate module instances, and they must see the same totals.
98
+ * One store of request totals per process. Next.js can load the proxy, pages
99
+ * and route handlers as separate module instances, and they must see the
100
+ * same totals. Each caller's budget and logger apply to the requests it
101
+ * starts, so a second app in the process keeps its own.
86
102
  */
87
103
  function sharedCollector(options) {
88
104
  const scope = globalThis;
89
- scope[SHARED] ??= new StatsCollector(options);
90
- return scope[SHARED];
105
+ const shared = scope[SHARED] ??= new StatsCollector(options);
106
+ return {
107
+ recorderFor: (id) => shared.recorderFor(id, options),
108
+ get: (id) => shared.get(id)
109
+ };
91
110
  }
92
111
  function overBudget(stats, budget) {
93
112
  return budget.calls !== void 0 && stats.calls > budget.calls || budget.waves !== void 0 && stats.waves > budget.waves;
@@ -150,55 +169,97 @@ const STATS_URL_HEADER = "x-bs-stats";
150
169
  function supportTag(sessionId) {
151
170
  return `bs:support:${sessionId}`;
152
171
  }
172
+ /** The shortest time the Next.js client router keeps a prefetched entry. */
173
+ const MIN_CLIENT_STALE = 30;
153
174
  /**
154
175
  * `cacheLife` `stale` seconds for a view of `session`: `max`, but never past
155
- * the token's expiry, and at least `min`.
176
+ * the token's expiry, and 0 once fewer than `min` seconds are left. A
177
+ * signed-out view that a refresh would change (an `expired` or
178
+ * `refresh_failed` cookie, or an `invalid` token) is 0 as well, so it never
179
+ * joins the App Shell.
156
180
  */
157
181
  function sessionStale(session, options = {}, now = Date.now()) {
158
- const min = options.min ?? 30;
182
+ const min = Math.max(MIN_CLIENT_STALE, options.min ?? MIN_CLIENT_STALE);
159
183
  const max = options.max ?? 300;
160
- if (session.kind !== "user" || session.expiresAt === null) return max;
161
- const remaining = session.expiresAt - Math.floor(now / 1e3);
162
- return Math.min(max, Math.max(min, remaining));
184
+ switch (session.kind) {
185
+ case "invalid": return 0;
186
+ case "anon": return session.reason === "expired" || session.reason === "refresh_failed" ? 0 : max;
187
+ case "service":
188
+ case "apiKey": return max;
189
+ case "user": {
190
+ if (session.expiresAt === null) return max;
191
+ const remaining = session.expiresAt - Math.floor(now / 1e3);
192
+ return remaining < min ? 0 : Math.min(max, remaining);
193
+ }
194
+ default: return session;
195
+ }
163
196
  }
164
197
  /** The tag `bs.cached()` puts on a user's entries. */
165
198
  function sessionTag(userId) {
166
199
  return `bs:session:${userId}`;
167
200
  }
168
- /** `bs:<table>` or `bs:<table>:<id>`. Mutations invalidate both. */
169
- function tagFor(table, id) {
170
- return id === void 0 ? `bs:${table}` : `bs:${table}:${String(id)}`;
201
+ /**
202
+ * The table tags of a read: the tenant's and every tenant's, or the table's.
203
+ * A read across tenants (`"*"`) also carries the table's, which every
204
+ * mutation invalidates, including one scoped to a single tenant.
205
+ */
206
+ function tableTags(table, options) {
207
+ if (options.tenant === "*") return [tagFor(table), tagFor(table, void 0, options)];
208
+ return options.tenant === void 0 ? [tagFor(table)] : [tagFor(table, void 0, options), tagFor(table, void 0, { tenant: "*" })];
171
209
  }
172
- function invalidate(tag) {
210
+ /** The next read waits for fresh data instead of serving the stale entry. */
211
+ const EXPIRE_NOW = { expire: 0 };
212
+ /**
213
+ * Invalidates tags with `updateTag` (Server Actions), else `revalidateTag`
214
+ * (Route Handlers), else not at all (jobs, scripts). The first tag decides
215
+ * for the rest, so a mutation outside an action throws once, not per tag.
216
+ */
217
+ function invalidateAll(tags, profile = EXPIRE_NOW) {
218
+ let index = 0;
173
219
  try {
174
- updateTag(tag);
175
- } catch {
176
- try {
177
- revalidateTag(tag, "max");
178
- } catch {}
179
- }
220
+ for (; index < tags.length; index++) updateTag(tags[index]);
221
+ return;
222
+ } catch {}
223
+ try {
224
+ for (; index < tags.length; index++) revalidateTag(tags[index], profile);
225
+ } catch {}
180
226
  }
181
227
  /**
182
- * Invalidates `bs:<table>` for every table in the target and
183
- * `bs:<table>:<id>` for the changed rows. `createNext` attaches it unless
184
- * `cacheTags: false`.
228
+ * Invalidates `bs:<table>` for every table in the target, the tenant's
229
+ * `bs:<table>@<tenant>` (every tenant's `bs:<table>@*` when the mutation has
230
+ * no tenant) and `bs:<table>:<id>` for the changed rows. Reads another tenant
231
+ * tagged stay cached. `createNext` attaches it unless `cacheTags: false`.
185
232
  */
186
- function nextCache() {
233
+ function nextCache(options = {}) {
187
234
  return {
188
235
  name: "next",
189
236
  invalidate: (target) => {
190
- for (const table of target.tables) invalidate(tagFor(table));
191
- for (const id of target.ids) invalidate(tagFor(target.table, id));
237
+ invalidateAll(cacheTagsOf(target), options.revalidate);
192
238
  }
193
239
  };
194
240
  }
195
- function formDataObject(form) {
196
- const out = {};
197
- for (const key of new Set(form.keys())) {
198
- const values = form.getAll(key);
199
- out[key] = values.length > 1 ? values : values[0];
241
+ /** Whether `cause` is one of Next's own control-flow errors (they carry a `digest`). */
242
+ function isNextInterrupt(cause) {
243
+ return cause instanceof Error && "digest" in cause && typeof cause.digest === "string";
244
+ }
245
+ /**
246
+ * `unauthorized()` and `forbidden()` throw a plain error without
247
+ * `experimental.authInterrupts`; `notFound()` is the fallback then.
248
+ */
249
+ function authInterrupt(fn) {
250
+ try {
251
+ fn();
252
+ } catch (cause) {
253
+ if (isNextInterrupt(cause)) throw cause;
200
254
  }
201
- return out;
255
+ notFound();
256
+ }
257
+ /** The Next.js interrupt for a refused Server Component render. */
258
+ function interrupt(error) {
259
+ if (error.kind === "unauthorized") authInterrupt(unauthorized);
260
+ if (error.kind === "forbidden") authInterrupt(forbidden);
261
+ if (error.kind === "not_found") notFound();
262
+ throw new DbException(error);
202
263
  }
203
264
  /**
204
265
  * A `proxy` `protect` that keeps signed-in users below `level` out of the
@@ -225,17 +286,35 @@ function requireAal(level, options = {}) {
225
286
  return NextResponse.redirect(target);
226
287
  };
227
288
  }
289
+ function endedRedirect(request, path) {
290
+ const target = new URL(path, request.url);
291
+ target.searchParams.set("reason", "session_ended");
292
+ return NextResponse.redirect(target);
293
+ }
294
+ function shouldCheckSession(request, options = {}) {
295
+ if (request.method !== "GET" && request.method !== "HEAD") return false;
296
+ if (isPrefetch(request)) return false;
297
+ if (request.headers.get("sec-fetch-dest") === "document") return true;
298
+ return options.paths?.includes(request.nextUrl.pathname) ?? false;
299
+ }
228
300
  /** Page loads, client navigations and server actions; never prefetches or assets. */
229
301
  function shouldRefresh(request) {
230
302
  const h = request.headers;
231
303
  if (request.method !== "GET" && request.method !== "HEAD") return h.has("next-action");
232
- if (h.has("next-router-prefetch") || h.get("purpose") === "prefetch" || h.get("sec-purpose")?.includes("prefetch")) return false;
304
+ if (isPrefetch(request)) return false;
233
305
  if (h.get("rsc") === "1") return true;
234
306
  const dest = h.get("sec-fetch-dest");
235
307
  if (dest) return dest === "document";
236
308
  return h.get("accept")?.includes("text/html") ?? false;
237
309
  }
238
310
  /**
311
+ * Event hubs that already invalidate Next.js cache tags. Every instance a
312
+ * definition derives shares its hub, and `createNext` can run again for one
313
+ * definition (hot reload, a definition in another package), so tags are
314
+ * invalidated once per mutation.
315
+ */
316
+ const nextCacheAttached = /* @__PURE__ */ new WeakSet();
317
+ /**
239
318
  * The Next.js adapter: proxy, Server Components, route handlers, server
240
319
  * actions and cache tags, on top of `createServer`.
241
320
  *
@@ -245,9 +324,12 @@ function shouldRefresh(request) {
245
324
  */
246
325
  function createNext(betterSupabase, options = {}) {
247
326
  const base = createServer(betterSupabase, options);
248
- const pinMs = options.replicas?.pinMs ?? 5e3;
327
+ const core = serverCore(base);
249
328
  const expose = options.exposeErrors ?? defaultExpose();
250
- if (options.cacheTags !== false) betterSupabase.cache(nextCache());
329
+ if (options.cacheTags !== false && !nextCacheAttached.has(betterSupabase.events)) {
330
+ nextCacheAttached.add(betterSupabase.events);
331
+ betterSupabase.cache(nextCache());
332
+ }
251
333
  const debug = options.debug;
252
334
  const statsHeader = debug?.header ?? "x-bs-db-calls";
253
335
  const statsRoute = debug?.route ?? "/api/bs-stats";
@@ -261,35 +343,62 @@ function createNext(betterSupabase, options = {}) {
261
343
  const id = collector && request.headers.get("x-bs-request-id");
262
344
  return id ? { stats: collector.recorderFor(id) } : {};
263
345
  };
264
- /** Keeps the function alive for event sink sends the handler started. */
265
- const flushAfter = () => {
266
- const { events } = betterSupabase;
267
- if (!events.pending) return;
346
+ const waitUntil = (work) => {
268
347
  try {
269
- after(() => events.settled());
348
+ after(() => work);
270
349
  } catch (cause) {
271
- events.logger.warn("after() is unavailable; event sends may be cut off", { cause });
350
+ betterSupabase.events.logger.warn("after() is unavailable; event sends may be cut off", { cause });
272
351
  }
273
352
  };
353
+ /** Keeps the function alive for event sink sends the handler started. */
354
+ const flushAfter = () => {
355
+ flushEvents(betterSupabase, waitUntil);
356
+ };
357
+ /** Sets the context's cookies (the replica pin) through Next's cookie jar. */
358
+ const writeCookies = async (ctx) => {
359
+ const writes = ctx.cookies();
360
+ if (writes.length === 0) return;
361
+ const jar = await cookies();
362
+ for (const write of writes) jar.set(write.name, write.value, write.options);
363
+ };
274
364
  const incomingRequest = async () => new Request("http://next.local/", { headers: new Headers(await headers()) });
275
365
  /** One token verification per render scope backs `context()`, `session()` and `cached()`. */
276
366
  const incoming = cache(async () => {
367
+ await io();
277
368
  const request = await incomingRequest();
278
369
  return {
279
370
  request,
280
371
  resolution: await base.resolve(request, { refresh: false })
281
372
  };
282
373
  });
283
- const current = cache(async () => {
374
+ const tenantClaim = claimsOf(betterSupabase.meta).tenant;
375
+ /** The tenant `scoped` resolved for a context, when it wasn't the claim. */
376
+ const scopedTenants = /* @__PURE__ */ new WeakMap();
377
+ const tenantFor = (ctx, view) => scopedTenants.get(ctx) ?? tenantOf(view, tenantClaim);
378
+ /** `requireTenant` and `authorize`: the session and tenant, or why the caller is refused. */
379
+ const authorizeCaller = async (ctx, checks, input) => {
380
+ const view = toSession(ctx.auth);
381
+ const tenant = tenantFor(ctx, view);
382
+ if (checks.requireTenant && tenant === void 0) return dbError("forbidden", "Choose an organization first", { code: "NO_TENANT" });
383
+ if (checks.authorize && !await checks.authorize(view, input)) return dbError("forbidden", "You are not allowed to do this", { code: "NOT_AUTHORIZED" });
384
+ return {
385
+ session: view,
386
+ tenant
387
+ };
388
+ };
389
+ /** `null` runs `NextOptions.tenant`; a string is the caller's explicit tenant. */
390
+ const scoped = cache(async (explicit) => {
284
391
  const { request, resolution } = await incoming();
285
- const [tenant, support] = await Promise.all([options.tenant?.(request, resolution.auth), base.support.current(request, resolution.auth)]);
286
- return base.contextFromResolution(resolution, request, {
392
+ const [tenant, support] = await Promise.all([explicit ?? options.tenant?.(request, resolution.auth), base.support.current(request, resolution.auth)]);
393
+ const ctx = core.context(resolution, request, {
287
394
  ...statsFor(request),
288
- ...tenant === void 0 ? {} : { tenant },
289
395
  ...support ? { support } : {}
290
- });
396
+ }, tenant);
397
+ if (tenant !== void 0) scopedTenants.set(ctx, tenant);
398
+ return ctx;
291
399
  });
292
- const context = (request, contextOptions) => request ? base.context(request, contextOptions) : current();
400
+ const current = (tenant) => scoped(tenant ?? null);
401
+ const context = (first, contextOptions) => first instanceof Request ? base.context(first, contextOptions) : current(first?.tenant ?? contextOptions?.tenant);
293
402
  /** In a support session, the target's view: `impersonator` names the admin. */
294
403
  const session = cache(async () => toSession(options.support ? (await current()).auth : (await incoming()).resolution.auth));
295
404
  const supportCookieName = options.support?.options.cookie?.name ?? "bs-support";
@@ -300,8 +409,8 @@ function createNext(betterSupabase, options = {}) {
300
409
  secure: options.support?.options.cookie?.secure ?? true
301
410
  };
302
411
  const contextForSession = async (view, { token }) => {
303
- const request = new Request("http://next.local/", { headers: token ? { authorization: `Bearer ${token}` } : {} });
304
- const ctx = await base.context(request);
412
+ const ctx = await base.context(bearerRequest(token));
413
+ if (ctx.auth.kind === "invalid") return ctx;
305
414
  if (ctx.auth.kind === "user" ? view.kind === "user" && view.user.id === ctx.auth.user.id : view.kind === ctx.auth.kind) return ctx;
306
415
  return base.contextFor({
307
416
  kind: "invalid",
@@ -312,7 +421,15 @@ function createNext(betterSupabase, options = {}) {
312
421
  const withAccounts = withExtra(base, {
313
422
  context,
314
423
  deleteAccount: ((userId, deleteOptions) => base.deleteAccount(userId, deleteOptions).map((result) => {
315
- invalidate(sessionTag(userId));
424
+ invalidateAll([sessionTag(userId)]);
425
+ return result;
426
+ })),
427
+ endSessions: ((userId) => base.endSessions(userId).map((result) => {
428
+ invalidateAll([sessionTag(userId)]);
429
+ return result;
430
+ })),
431
+ suspendAccount: ((userId, suspendOptions) => base.suspendAccount(userId, suspendOptions).map((result) => {
432
+ invalidateAll([sessionTag(userId)]);
316
433
  return result;
317
434
  }))
318
435
  });
@@ -320,7 +437,7 @@ function createNext(betterSupabase, options = {}) {
320
437
  session,
321
438
  contextForSession,
322
439
  async cached(cachedOptions = {}) {
323
- const [view, ctx] = await Promise.all([session(), current()]);
440
+ const [view, ctx] = await Promise.all([session(), current(cachedOptions.tenant)]);
324
441
  const life = cachedOptions.life;
325
442
  const stale = sessionStale(view, life);
326
443
  cacheLife({
@@ -328,36 +445,52 @@ function createNext(betterSupabase, options = {}) {
328
445
  ...life?.revalidate === void 0 ? {} : { revalidate: life.revalidate },
329
446
  ...life?.expire === void 0 ? {} : { expire: life.expire }
330
447
  });
448
+ const tables = cachedOptions.tables ?? [];
449
+ const tenant = tables.length > 0 ? tenantFor(ctx, view) : void 0;
450
+ const first = tables[0];
331
451
  const tags = [
332
452
  ...view.kind === "user" ? [sessionTag(view.user.id)] : [],
333
453
  ...ctx.support ? [supportTag(ctx.support.session.id)] : [],
334
- ...cachedOptions.tags ?? []
454
+ ...cachedOptions.tags ?? [],
455
+ ...tables.flatMap((table) => tableTags(table, tenant === void 0 ? {} : { tenant })),
456
+ ...first !== void 0 && cachedOptions.id !== void 0 ? [tagFor(first, cachedOptions.id)] : []
335
457
  ];
336
458
  if (tags.length > 0) cacheTag(...tags);
337
459
  return withExtra(ctx, { session: view });
338
460
  },
339
461
  invalidateSession(userId, invalidateOptions = {}) {
340
- invalidate(sessionTag(userId));
341
- for (const tag of invalidateOptions.tags ?? []) invalidate(tag);
462
+ invalidateAll([sessionTag(userId), ...invalidateOptions.tags ?? []]);
342
463
  },
343
464
  async liveCount(spec, db) {
344
465
  const result = await (db ?? (await current()).db).$run(spec);
345
466
  return {
346
467
  spec,
347
- count: result.ok && typeof result.data === "number" ? result.data : null
468
+ count: result.ok && typeof result.data === "number" ? result.data : null,
469
+ at: Date.now()
348
470
  };
349
471
  },
350
472
  async proxy(request, proxyOptions = {}) {
351
473
  const started = performance.now();
352
474
  const id = collector ? crypto.randomUUID() : void 0;
353
475
  let verifyMs = 0;
354
- const [early, resolution] = await Promise.all([proxyOptions.before?.(request), base.resolve(request, { refresh: shouldRefresh(request) }).then((resolved) => {
476
+ const sessionCheck = proxyOptions.endedSession === true ? {} : proxyOptions.endedSession;
477
+ const checkSession = sessionCheck !== void 0 && shouldCheckSession(request, sessionCheck);
478
+ const [early, resolution] = await Promise.all([proxyOptions.before?.(request), base.resolve(request, {
479
+ refresh: shouldRefresh(request),
480
+ ...checkSession ? { checkSession } : {}
481
+ }).then((resolved) => {
355
482
  verifyMs = performance.now() - started;
356
483
  return resolved;
357
484
  })]);
358
- const custom = await proxyOptions.protect?.(resolution.auth, request);
485
+ const rendersSignedOut = proxyOptions.expiredPrefetch === "render" && resolution.auth.kind === "anon" && resolution.auth.reason === "expired" && isPrefetch(request);
486
+ const protectMethods = proxyOptions.protectMethods;
487
+ const runsProtect = protectMethods === true ? true : (protectMethods ?? ["GET", "HEAD"]).includes(request.method);
488
+ const custom = (resolution.sessionEnded === true && sessionCheck?.redirect !== void 0 && request.nextUrl.pathname !== sessionCheck.redirect ? endedRedirect(request, sessionCheck.redirect) : void 0) ?? (rendersSignedOut || !runsProtect ? void 0 : await proxyOptions.protect?.(resolution.auth, request));
359
489
  const initial = custom ?? early;
360
- if (!initial && resolution.cookies.length === 0 && !id && !proxyOptions.after && !proxyOptions.serverTiming) return NextResponse.next();
490
+ if (!initial && resolution.cookies.length === 0 && !id && !proxyOptions.after && !proxyOptions.serverTiming) {
491
+ flushAfter();
492
+ return NextResponse.next();
493
+ }
361
494
  let response = resolution.apply(mutableResponse(initial ?? NextResponse.next()));
362
495
  if (!custom && !isRedirect(response)) {
363
496
  const forwarded = {};
@@ -377,35 +510,38 @@ function createNext(betterSupabase, options = {}) {
377
510
  "bs-proxy": performance.now() - started,
378
511
  "bs-verify": verifyMs
379
512
  }));
513
+ flushAfter();
380
514
  return response;
381
515
  },
382
516
  route(handler, guardOptions = {}) {
383
517
  return async (request, segment) => {
384
- const ctx = await base.context(request, statsFor(request));
385
- const denied = guard(ctx.auth, guardOptions.allow, guardOptions.aal, guardOptions.scopes);
386
- const instance = request.nextUrl.pathname;
387
- if (denied) return problemResponse(denied, {
388
- instance,
389
- expose
390
- });
391
- const params = await segment.params;
518
+ let stats;
519
+ let current;
392
520
  let response;
393
521
  try {
394
- response = await respond(() => handler(request, withExtra(ctx, { params })), {
395
- instance,
396
- expose
522
+ response = await handle(base, request, async (ctx) => {
523
+ current = ctx;
524
+ stats = () => ctx.stats();
525
+ const [params, caller] = await Promise.all([segment.params, authorizeCaller(ctx, guardOptions, request)]);
526
+ if ("kind" in caller) return err(caller);
527
+ return handler(request, withExtra(ctx, {
528
+ ...caller,
529
+ params
530
+ }));
531
+ }, {
532
+ ...guardOptions,
533
+ expose,
534
+ instance: request.nextUrl.pathname,
535
+ context: statsFor(request),
536
+ waitUntil,
537
+ rethrow: rethrowNextControlFlow
397
538
  });
398
539
  } catch (cause) {
399
- rethrowNextControlFlow(cause);
400
- response = problemResponse(dbError("unexpected", expose && cause instanceof Error ? cause.message : "Internal server error"), {
401
- instance,
402
- expose
403
- });
540
+ if (current) await writeCookies(current);
541
+ throw cause;
404
542
  }
405
- response = withPrimaryPin(response, ctx.replica, pinMs);
406
- flushAfter();
407
- if (collector) try {
408
- response.headers.set(statsHeader, formatStats(ctx.stats()));
543
+ if (collector && stats) try {
544
+ response.headers.set(statsHeader, formatStats(stats()));
409
545
  } catch {}
410
546
  return response;
411
547
  };
@@ -426,8 +562,8 @@ function createNext(betterSupabase, options = {}) {
426
562
  },
427
563
  action(actionOptions, fn) {
428
564
  return async (input) => {
429
- const ctx = await current();
430
- const denied = guard(ctx.auth, actionOptions.allow, actionOptions.aal, actionOptions.scopes);
565
+ const early = actionOptions.tenant && !options.support ? void 0 : await current();
566
+ const denied = guard(early?.auth ?? (await incoming()).resolution.auth, actionOptions.allow, actionOptions.aal, actionOptions.scopes);
431
567
  if (denied) return {
432
568
  ok: false,
433
569
  data: null,
@@ -443,9 +579,22 @@ function createNext(betterSupabase, options = {}) {
443
579
  };
444
580
  parsed = checked.data;
445
581
  }
446
- const settled = await settle(() => fn(parsed, ctx));
447
- flushAfter();
448
- if (ctx.replica?.wrote) (await cookies()).set(PRIMARY_COOKIE, String(Date.now() + pinMs), primaryCookieOptions(pinMs));
582
+ const tenant = actionOptions.tenant?.(parsed);
583
+ const ctx = tenant === void 0 ? early ?? await current() : await current(tenant);
584
+ const caller = await authorizeCaller(ctx, actionOptions, parsed);
585
+ if ("kind" in caller) return {
586
+ ok: false,
587
+ data: null,
588
+ error: caller
589
+ };
590
+ const scope = ctx;
591
+ let settled;
592
+ try {
593
+ settled = await settle(() => fn(parsed, withExtra(scope, caller)));
594
+ } finally {
595
+ flushAfter();
596
+ await writeCookies(ctx);
597
+ }
449
598
  return settled.ok ? {
450
599
  ok: true,
451
600
  data: settled.data,
@@ -457,6 +606,12 @@ function createNext(betterSupabase, options = {}) {
457
606
  };
458
607
  };
459
608
  },
609
+ require: async (requireOptions = {}) => {
610
+ const ctx = await current(requireOptions.tenant);
611
+ const caller = guard(ctx.auth, requireOptions.allow, requireOptions.aal, requireOptions.scopes) ?? await authorizeCaller(ctx, requireOptions, void 0);
612
+ if ("kind" in caller) interrupt(caller);
613
+ return withExtra(ctx, caller);
614
+ },
460
615
  async startSupport(request) {
461
616
  const { resolution } = await incoming();
462
617
  const started = await base.support.start(resolution.auth, request);
@@ -469,9 +624,9 @@ function createNext(betterSupabase, options = {}) {
469
624
  const { session: support } = started.data;
470
625
  (await cookies()).set(supportCookieName, support.id, {
471
626
  ...supportCookieOptions,
472
- maxAge: Math.max(0, Math.floor((support.expiresAt.epochMilliseconds - Date.now()) / 1e3))
627
+ maxAge: supportCookieMaxAge(support)
473
628
  });
474
- if (resolution.auth.kind === "user") invalidate(sessionTag(resolution.auth.user.id));
629
+ if (resolution.auth.kind === "user") invalidateAll([sessionTag(resolution.auth.user.id)]);
475
630
  return {
476
631
  ok: true,
477
632
  data: {
@@ -498,8 +653,7 @@ function createNext(betterSupabase, options = {}) {
498
653
  };
499
654
  const stopped = await base.support.stop(resolution.auth, id);
500
655
  flushAfter();
501
- invalidate(supportTag(id));
502
- if (resolution.auth.kind === "user") invalidate(sessionTag(resolution.auth.user.id));
656
+ invalidateAll([supportTag(id), ...resolution.auth.kind === "user" ? [sessionTag(resolution.auth.user.id)] : []]);
503
657
  return stopped.ok ? {
504
658
  ok: true,
505
659
  data: { ended: stopped.data.ended },
@@ -510,14 +664,14 @@ function createNext(betterSupabase, options = {}) {
510
664
  error: stopped.error
511
665
  };
512
666
  },
513
- cacheTag(table, id) {
514
- cacheTag(tagFor(table), ...id === void 0 ? [] : [tagFor(table, id)]);
667
+ cacheTag(table, id, tagOptions = {}) {
668
+ cacheTag(...tableTags(table, tagOptions), ...id === void 0 ? [] : [tagFor(table, id)]);
515
669
  },
516
- cacheTags(target) {
670
+ cacheTags(target, tagOptions = {}) {
517
671
  const specs = isReadSet(target) ? Object.values(target.specs) : isList(target) ? target : [target];
518
672
  const tags = /* @__PURE__ */ new Set();
519
673
  for (const spec of specs) {
520
- for (const table of betterSupabase.tablesOf(spec)) tags.add(tagFor(table));
674
+ for (const table of betterSupabase.tablesOf(spec)) for (const tag of tableTags(table, tagOptions)) tags.add(tag);
521
675
  const [id] = spec.args;
522
676
  if (spec.method === "findById" && (typeof id === "string" || typeof id === "number")) tags.add(tagFor(spec.table, id));
523
677
  }
@@ -546,4 +700,4 @@ function rethrowNextControlFlow(error) {
546
700
  if ("cause" in error) rethrowNextControlFlow(error.cause);
547
701
  }
548
702
  //#endregion
549
- export { REQUEST_ID_HEADER, STATS_URL_HEADER, createNext, hasEntitlement, nextCache, requireAal, sessionStale, sessionTag, shouldRefresh, supportOf, supportSessions, supportTag, tagFor, toSession };
703
+ export { REQUEST_ID_HEADER, STATS_URL_HEADER, createNext, nextCache, requireAal, sessionStale, sessionTag, shouldCheckSession, shouldRefresh, supportOf, supportSessions, supportTag, tagFor, tenantOf, toSession };
@@ -0,0 +1,4 @@
1
+ import { n as RouteGuardOptions } from "../refusal-D1rgbzNq.js";
2
+ import { i as toWebHeaders, r as applyWebHeaders, t as NodeHeaderTarget } from "../node-headers-AO06VhqH.js";
3
+ import { _ as toNodeHandler, a as FastifyReplyLike, b as toWebRequest, c as KoaMiddleware, d as guard, f as koaGuard, g as toKoa, h as toFastify, i as FastifyHook, l as ToNodeOptions, m as toExpress, n as ExpressMiddleware, o as FastifyRequestLike, p as problemErrorHandler, r as ExpressResponse, s as KoaContextLike, t as ExpressErrorHandler, u as fastifyGuard, v as WebRequestOptions, y as sendWebResponse } from "../index-DDrYaUcq.js";
4
+ export { ExpressErrorHandler, ExpressMiddleware, ExpressResponse, FastifyHook, FastifyReplyLike, FastifyRequestLike, KoaContextLike, KoaMiddleware, type NodeHeaderTarget, type RouteGuardOptions, ToNodeOptions, type WebRequestOptions, applyWebHeaders, fastifyGuard, guard, koaGuard, problemErrorHandler, sendWebResponse, toExpress, toFastify, toKoa, toNodeHandler, toWebHeaders, toWebRequest };