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
@@ -0,0 +1,164 @@
1
+ import { a as routeRefusal, n as guardedLocals, t as errorResponse } from "../refusal-CeJWxmkH.js";
2
+ import { t as beforeRoute } from "../before-route-CnR0C0Jr.js";
3
+ import { t as applyWebHeaders } from "../node-headers-C71zNQHe.js";
4
+ import { n as toWebRequest, t as sendWebResponse } from "../http-Cv4T29xh.js";
5
+ import { createRequire } from "node:module";
6
+ //#region src/nestjs/index.ts
7
+ const contexts = /* @__PURE__ */ new WeakMap();
8
+ /** The Node request under an Express request or a Fastify request (`request.raw`). */
9
+ function rawOf(value) {
10
+ return "raw" in value && typeof value.raw === "object" && value.raw !== null ? value.raw : value;
11
+ }
12
+ function isServerResponse(value) {
13
+ return "setHeader" in value && typeof value.setHeader === "function" && "end" in value && typeof value.end === "function";
14
+ }
15
+ function responseOf(host) {
16
+ const raw = rawOf(host.switchToHttp().getResponse());
17
+ if (!isServerResponse(raw)) throw new TypeError("better-supabase: not an HTTP response");
18
+ return raw;
19
+ }
20
+ function requestOf(host) {
21
+ return rawOf(host.switchToHttp().getRequest());
22
+ }
23
+ /** The contributions `toNestMiddleware` stored for a request (Express or Fastify), if it ran. */
24
+ function contextOf(request) {
25
+ return contexts.get(rawOf(request));
26
+ }
27
+ /** Calls `next()` when `step` resolves true and `next(error)` when it rejects. */
28
+ async function continueWith(step, next) {
29
+ let proceed;
30
+ try {
31
+ proceed = await step;
32
+ } catch (error) {
33
+ next(error);
34
+ return;
35
+ }
36
+ if (proceed) next();
37
+ }
38
+ /**
39
+ * Nest middleware that runs the entries before the route: a short circuit
40
+ * (a 401, a CORS preflight) is the answer; otherwise the entries' cookies
41
+ * go on the response and `@Ctx()` reads the contributions.
42
+ *
43
+ * ```ts title="src/app.module.ts"
44
+ * export class AppModule implements NestModule {
45
+ * configure(consumer: MiddlewareConsumer) {
46
+ * consumer.apply(toNestMiddleware([withBetterSupabase(server)])).forRoutes('*')
47
+ * }
48
+ * }
49
+ * ```
50
+ */
51
+ function toNestMiddleware(entries, options = {}) {
52
+ const run = beforeRoute(entries);
53
+ const handle = async (req, res) => {
54
+ const outcome = await run(toWebRequest(req, {
55
+ ...options,
56
+ body: false
57
+ }), options.env?.(req));
58
+ if (!outcome.reached) {
59
+ await sendWebResponse(res, outcome.response);
60
+ return false;
61
+ }
62
+ applyWebHeaders(res, outcome.headers);
63
+ contexts.set(req, outcome.contributions);
64
+ return true;
65
+ };
66
+ return (req, res, next) => {
67
+ continueWith(handle(req, res), next);
68
+ };
69
+ }
70
+ function isNestCommon(value) {
71
+ return typeof value === "object" && value !== null && "createParamDecorator" in value && typeof value.createParamDecorator === "function" && "HttpException" in value && typeof value.HttpException === "function";
72
+ }
73
+ const NEST_COMMON = "@nestjs/common";
74
+ let nest;
75
+ /**
76
+ * `@nestjs/common` is an optional peer, loaded on first use with a
77
+ * variable specifier so apps on other frameworks never resolve it. It is
78
+ * required synchronously because decorators run while the class is defined.
79
+ */
80
+ function nestCommon() {
81
+ if (nest) return nest;
82
+ let loaded;
83
+ try {
84
+ loaded = createRequire(import.meta.url)(NEST_COMMON);
85
+ } catch (cause) {
86
+ throw new Error("better-supabase/nestjs needs @nestjs/common. Install it with `pnpm add @nestjs/common`.", { cause });
87
+ }
88
+ if (!isNestCommon(loaded)) throw new Error("better-supabase/nestjs: @nestjs/common has no createParamDecorator");
89
+ nest = loaded;
90
+ return nest;
91
+ }
92
+ let ctxDecorator;
93
+ /**
94
+ * A parameter decorator for the request's contributions, or one of them:
95
+ * `@Ctx() ctx` or `@Ctx('db') db`.
96
+ *
97
+ * ```ts
98
+ * @Get('notes')
99
+ * list(@Ctx('db') db: Db) { return db.notes.findMany().orThrow() }
100
+ * ```
101
+ */
102
+ function Ctx(key) {
103
+ ctxDecorator ??= nestCommon().createParamDecorator((data, context) => {
104
+ const contributions = contextOf(context.switchToHttp().getRequest());
105
+ if (contributions === void 0) throw new Error("better-supabase: no request context; apply toNestMiddleware(...) for this route");
106
+ return typeof data === "string" ? contributions[data] : contributions;
107
+ });
108
+ return ctxDecorator(key);
109
+ }
110
+ /**
111
+ * A guard instance that refuses callers outside `options`: Problem Details,
112
+ * or a 303 to `signIn` or `mfa`, thrown as Nest's `HttpException`.
113
+ *
114
+ * ```ts
115
+ * @UseGuards(guard({ roles: ['admin'] }))
116
+ * ```
117
+ */
118
+ function guard(options = {}) {
119
+ return { canActivate: async (context) => {
120
+ const req = requestOf(context);
121
+ const contributions = contexts.get(req);
122
+ if (contributions === void 0) throw new Error("better-supabase: no request context; apply toNestMiddleware(...) before the guard");
123
+ const refused = await routeRefusal(guardedLocals(contributions), toWebRequest(req, { body: false }), options);
124
+ if (!refused) return true;
125
+ const location = refused.headers.get("location");
126
+ if (location !== null) responseOf(context).setHeader("location", location);
127
+ const body = refused.body ? await refused.json() : {};
128
+ const { HttpException } = nestCommon();
129
+ throw new HttpException(typeof body === "object" && body !== null ? body : {}, refused.status);
130
+ } };
131
+ }
132
+ /**
133
+ * An exception filter that answers thrown `DbException`s (from
134
+ * `.orThrow()`) with Problem Details. Register it with `@Catch()` scope in
135
+ * mind: other exceptions are answered the way Nest's base filter does.
136
+ */
137
+ function problemFilter(options = {}) {
138
+ return { catch(exception, host) {
139
+ const req = requestOf(host);
140
+ const res = responseOf(host);
141
+ const response = errorResponse(exception, toWebRequest(req, { body: false }), options) ?? nestErrorResponse(exception);
142
+ if (res.headersSent) return;
143
+ sendWebResponse(res, response);
144
+ } };
145
+ }
146
+ function isHttpException(value) {
147
+ return typeof value === "object" && value !== null && "getStatus" in value && typeof value.getStatus === "function" && "getResponse" in value && typeof value.getResponse === "function";
148
+ }
149
+ function nestErrorResponse(exception) {
150
+ if (isHttpException(exception)) {
151
+ const status = exception.getStatus();
152
+ const body = exception.getResponse();
153
+ return Response.json(typeof body === "string" ? {
154
+ statusCode: status,
155
+ message: body
156
+ } : body, { status: typeof status === "number" ? status : 500 });
157
+ }
158
+ return Response.json({
159
+ statusCode: 500,
160
+ message: "Internal server error"
161
+ }, { status: 500 });
162
+ }
163
+ //#endregion
164
+ export { Ctx, contextOf, guard, problemFilter, toNestMiddleware };
@@ -0,0 +1,35 @@
1
+ //#region src/next/client/index.d.ts
2
+ /** The `push` and `refresh` `useSessionChange` needs; next-intl's router fits. */
3
+ export interface SessionChangeRouter {
4
+ push(href: string): void;
5
+ refresh(): void;
6
+ }
7
+ /** The part of a supabase-js client `refreshToken` calls, e.g. `useSupabase()`. */
8
+ export interface TokenRefresher {
9
+ readonly auth: {
10
+ refreshSession(): Promise<{
11
+ readonly error: Error | null;
12
+ }>;
13
+ };
14
+ }
15
+ export interface SessionChangeOptions {
16
+ /**
17
+ * Refresh the browser's access token first, so the server reads the new
18
+ * claims (an organization switch, a new membership) from the cookie.
19
+ */
20
+ readonly refreshToken?: TokenRefresher;
21
+ }
22
+ /**
23
+ * After a session change, expire the server cache (`changed`), navigate,
24
+ * then refresh the client router. `refresh()` in a Server Action leaves
25
+ * prefetched private App Shells, so `router.push` alone shows the old
26
+ * session. Pass a next-intl (or other) router when `push` must keep the
27
+ * locale prefix.
28
+ *
29
+ * ```ts
30
+ * const switched = useSessionChange(sessionChanged, router, { refreshToken: useSupabase() });
31
+ * await switched('/dashboard');
32
+ * ```
33
+ */
34
+ export declare function useSessionChange(changed: () => Promise<void>, router?: SessionChangeRouter, options?: SessionChangeOptions): (to?: string) => Promise<void>;
35
+ //#endregion
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { useCallback } from "react";
3
+ import { useRouter } from "next/navigation.js";
4
+ //#region src/next/client/index.ts
5
+ /**
6
+ * After a session change, expire the server cache (`changed`), navigate,
7
+ * then refresh the client router. `refresh()` in a Server Action leaves
8
+ * prefetched private App Shells, so `router.push` alone shows the old
9
+ * session. Pass a next-intl (or other) router when `push` must keep the
10
+ * locale prefix.
11
+ *
12
+ * ```ts
13
+ * const switched = useSessionChange(sessionChanged, router, { refreshToken: useSupabase() });
14
+ * await switched('/dashboard');
15
+ * ```
16
+ */
17
+ function useSessionChange(changed, router, options = {}) {
18
+ const nextRouter = useRouter();
19
+ const used = router ?? nextRouter;
20
+ const refresher = options.refreshToken;
21
+ return useCallback(async (to) => {
22
+ if (refresher) {
23
+ const { error } = await refresher.auth.refreshSession();
24
+ if (error) throw error;
25
+ }
26
+ await changed();
27
+ if (to !== void 0) used.push(to);
28
+ used.refresh();
29
+ }, [
30
+ changed,
31
+ used,
32
+ refresher
33
+ ]);
34
+ }
35
+ //#endregion
36
+ export { useSessionChange };
@@ -1,11 +1,5 @@
1
+ import { t as storageImageUrl } from "../../image-url-pIVlO6R1.js";
1
2
  //#region src/next/image/index.ts
2
- /** Storage's image transformation limits. */
3
- const MAX_WIDTH = 2500;
4
- const QUALITY = {
5
- min: 20,
6
- max: 100
7
- };
8
- const clamp = (value, min, max) => Math.min(max, Math.max(min, Math.round(value)));
9
3
  /**
10
4
  * A `next/image` loader that serves public Storage objects through
11
5
  * Supabase image transformations (`/render/image/public`), so Next.js does
@@ -20,24 +14,9 @@ const clamp = (value, min, max) => Math.min(max, Math.max(min, Math.round(value)
20
14
  * were signed with, so sign them with `renderUrl()` at the size you render.
21
15
  */
22
16
  function createImageLoader(options) {
23
- const storage = `${options.url.replace(/\/+$/, "")}/storage/v1`;
24
- const publicPrefixes = [`${storage}/object/public/`, `${storage}/render/image/public/`].map((prefix) => ({
25
- prefix,
26
- length: new URL(prefix).pathname.length
27
- }));
17
+ const imageUrl = storageImageUrl(options);
28
18
  const fallback = options.fallback ?? (({ src }) => src);
29
- return (props) => {
30
- const prefix = publicPrefixes.find((candidate) => props.src.startsWith(candidate.prefix));
31
- if (prefix === void 0) return fallback(props);
32
- const source = new URL(props.src);
33
- const object = source.pathname.slice(prefix.length);
34
- const target = new URL(`${storage}/render/image/public/${object}`);
35
- for (const [key, value] of source.searchParams) target.searchParams.set(key, value);
36
- target.searchParams.set("width", String(clamp(props.width, 1, MAX_WIDTH)));
37
- if (props.quality !== void 0) target.searchParams.set("quality", String(clamp(props.quality, QUALITY.min, QUALITY.max)));
38
- if (options.resize) target.searchParams.set("resize", options.resize);
39
- return target.toString();
40
- };
19
+ return (props) => imageUrl(props.src, props) ?? fallback(props);
41
20
  }
42
21
  //#endregion
43
22
  export { createImageLoader };
@@ -1,13 +1,16 @@
1
- import { n as AnyFunctions, r as AnyModels } from "../types-Dnf_wRDz.js";
2
- import { _ as DbError } from "../executor-BunPOO-k.js";
3
- import { B as ReadSet, P as DbStats, Z as QuerySpec, l as CacheAdapter, t as BetterSupabase } from "../define-Bp_BZa5h.js";
4
- import { n as Impersonator, o as AuthState } from "../impersonation-BmePsuxz.js";
5
- import { C as SupportOptions, D as supportSessions, E as SupportStartRequest, T as SupportSessions, b as ActiveSupport, d as ContextOptions, f as ServerContext, n as GuardOptions, p as ServerOptions, t as AuthKind, u as BetterServer, w as SupportPolicy } from "../respond-BR1fJWOB.js";
6
- import { n as AmrEntry, t as Aal } from "../mfa-Cu96oJdw.js";
7
- import { n as toSession, t as AuthSession } from "../view-CbgObAeb.js";
8
- import { r as LiveCountSeed, t as CountRunner } from "../live-D9W2M5aO.js";
9
- import { n as supportOf, t as SupportView } from "../support-view-B8SlToQX.js";
10
- import { n as MembershipClaim, r as hasEntitlement, t as EntitlementKey } from "../entitlements-BiJZ4t49.js";
1
+ import { a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
2
+ import { r as AuthState } from "../resolve-KW8nCeL6.js";
3
+ import { B as DbStats, K as ReadSet, it as QuerySpec, t as BetterSupabase, u as CacheAdapter } from "../define-CJJkkr1-.js";
4
+ import { C as SupportOptions, D as supportSessions, E as SupportStartRequest, T as SupportSessions, b as ActiveSupport, i as ServerContext, n as ContextOptions, o as ServerOptions, t as BetterServer, w as SupportPolicy } from "../server-CeVeeXwz.js";
5
+ import { n as AmrEntry, s as Impersonator, t as Aal } from "../mfa-Daak8ukG.js";
6
+ import { t as tenantOf } from "../tenant-icPeuUBN.js";
7
+ import { n as toSession, t as AuthSession } from "../view-DbxLNu8L.js";
8
+ import { n as AuthKind, r as GuardOptions } from "../respond-DoBijysA.js";
9
+ import { a as AuthorizedContext, c as Unwrapped, i as AuthorizeOptions, n as ActionParsed, r as ActionResult, t as ActionInput } from "../kit-B5tid-q5.js";
10
+ import { r as LiveCountSeed, t as CountRunner } from "../index-DunNRdnT.js";
11
+ import { r as MembershipClaim } from "../entitlements-DHrY2UDZ.js";
12
+ import { i as tagFor, t as TagOptions } from "../tags-Cx-LnIQP.js";
13
+ import { n as supportOf, t as SupportView } from "../support-view-33Oi07TT.js";
11
14
  import { NextRequest } from "next/server.js";
12
15
  import { StandardSchemaV1 } from "@standard-schema/spec";
13
16
  //#region src/next/collector.d.ts
@@ -48,6 +51,21 @@ interface ProxyOptions<C = unknown, P = unknown> {
48
51
  readonly before?: (request: NextRequest) => Response | undefined | Promise<Response | undefined>;
49
52
  /** Answer before rendering, e.g. redirect signed-out users. Refreshed cookies are kept. */
50
53
  readonly protect?: (auth: AuthState<C, P>, request: NextRequest) => Response | undefined | Promise<Response | undefined>;
54
+ /**
55
+ * A prefetch never refreshes, so a session cookie whose token expired
56
+ * resolves to `{ kind: 'anon', reason: 'expired' }` there. `'protect'`
57
+ * (the default) passes that to `protect` like any other caller.
58
+ * `'render'` skips `protect` for it, so the prefetch renders signed out
59
+ * instead of caching a redirect to sign-in; `sessionStale` keeps that view
60
+ * out of the App Shell, and the navigation itself refreshes the session.
61
+ */
62
+ readonly expiredPrefetch?: "protect" | "render";
63
+ /**
64
+ * Methods that run `protect`. Defaults to `GET` and `HEAD`, so a Server
65
+ * Action POST is not redirected before the action runs. Set `true` to
66
+ * include mutations, or pass the methods yourself.
67
+ */
68
+ readonly protectMethods?: true | readonly string[];
51
69
  /** Post-processes the final response; return a new one to replace it. */
52
70
  readonly after?: (response: Response, auth: AuthState<C, P>) => Response | undefined | void | Promise<Response | undefined | void>;
53
71
  /**
@@ -55,36 +73,57 @@ interface ProxyOptions<C = unknown, P = unknown> {
55
73
  * proxy, and resolving the session (a local verify, or a refresh).
56
74
  */
57
75
  readonly serverTiming?: boolean;
76
+ readonly endedSession?: true | EndedSessionOptions;
58
77
  }
59
- type ActionResult<T> = {
60
- readonly ok: true;
61
- readonly data: T;
62
- readonly error: null;
63
- } | {
64
- readonly ok: false;
65
- readonly data: null;
66
- readonly error: DbError;
67
- };
68
- interface ActionOptions<S extends StandardSchemaV1 | undefined> extends GuardOptions {
78
+ interface EndedSessionOptions {
79
+ readonly paths?: readonly string[];
80
+ readonly redirect?: string;
81
+ }
82
+ interface ActionOptions<S extends StandardSchemaV1 | undefined, C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<ActionParsed<S>, C, P, R> {
69
83
  /** Validates the input (plain object or `FormData`) with any Standard Schema. */
70
84
  readonly input?: S;
85
+ /**
86
+ * The active tenant for the action's context, from the validated input,
87
+ * instead of `NextOptions.tenant`. It is checked the same way: the
88
+ * `tenant()` plugin and `current_tenant_id()` only honor a tenant the
89
+ * caller belongs to.
90
+ */
91
+ readonly tenant?: (input: ActionParsed<S>) => string | undefined;
92
+ }
93
+ interface RouteOptions<C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<NextRequest, C, P, R> {
94
+ /**
95
+ * Refresh an expired session cookie in the route and send the new cookies
96
+ * with its response. For routes the proxy's matcher skips; off by default
97
+ * because the proxy refreshes everything it matches.
98
+ */
99
+ readonly refresh?: boolean;
100
+ }
101
+ interface RequireOptions<C = unknown, P = unknown, R extends boolean = boolean> extends GuardOptions, AuthorizeOptions<undefined, C, P, R> {
102
+ /** The active tenant, as for `bs.context({ tenant })`. */
103
+ readonly tenant?: string;
104
+ }
105
+ interface ScopeOptions {
106
+ /**
107
+ * The active tenant, e.g. from route params, instead of `NextOptions.tenant`
108
+ * (whose request has the incoming headers but no URL here). It goes where
109
+ * the resolver's result goes, so it gets the same checks: the `tenant()`
110
+ * plugin and `current_tenant_id()` only honor a tenant the caller belongs to.
111
+ */
112
+ readonly tenant?: string;
71
113
  }
72
- type ActionInput<S> = S extends StandardSchemaV1 ? StandardSchemaV1.InferInput<S> | FormData : unknown;
73
- type ActionParsed<S> = S extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<S> : unknown;
74
- type Unwrapped<T> = T extends {
75
- readonly ok: true;
76
- readonly data: infer D;
77
- } | {
78
- readonly ok: false;
79
- } ? D : T;
80
114
  interface BetterNext<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
81
115
  /** `proxy.ts`: refreshes sessions for page loads and server actions. */
82
116
  proxy(request: NextRequest, options?: ProxyOptions<C, P>): Promise<Response>;
83
117
  /**
84
118
  * The caller's context. Without a request (Server Components, actions) it
85
- * reads the incoming headers and is memoized per request.
119
+ * reads the incoming headers and is memoized per request and tenant.
120
+ *
121
+ * ```ts
122
+ * const { db } = await bs.context({ tenant: organizationId });
123
+ * ```
86
124
  */
87
- context(request?: Request, options?: ContextOptions): Promise<ServerContext<M, F, E, C, P>>;
125
+ context(options?: ScopeOptions): Promise<ServerContext<M, F, E, C, P>>;
126
+ context(request: Request | undefined, options?: ContextOptions): Promise<ServerContext<M, F, E, C, P>>;
88
127
  /**
89
128
  * The verified caller as serializable data (no token, no clients), memoized
90
129
  * per request. Wrap it in a `'use cache: private'` function with Cache
@@ -113,10 +152,14 @@ interface BetterNext<M extends AnyModels, F extends AnyFunctions, E, C = unknown
113
152
  * }
114
153
  * ```
115
154
  */
116
- cached(options?: CachedOptions): Promise<CachedContext<M, F, E, C, P>>;
155
+ cached(options?: CachedOptions<Extract<keyof M, string>>): Promise<CachedContext<M, F, E, C, P>>;
117
156
  /**
118
157
  * Drops every `bs.cached()` entry of a user, e.g. after a role change,
119
- * and the entries tagged with `tags` (such as PermDock's `snapshotTag(userId)`).
158
+ * and the entries tagged with `tags` (such as a permission snapshot's tag).
159
+ * In a Server Action it also re-renders the caller's page, so no
160
+ * `refresh()` is needed. It reaches server caches and the caller's router
161
+ * only: another user's browser keeps its `'use cache: private'` entries
162
+ * until they go stale or that user's token changes.
120
163
  */
121
164
  invalidateSession(userId: string, options?: {
122
165
  readonly tags?: readonly string[];
@@ -130,21 +173,44 @@ interface BetterNext<M extends AnyModels, F extends AnyFunctions, E, C = unknown
130
173
  */
131
174
  liveCount<T extends Extract<keyof M, string>>(spec: QuerySpec<T, "count", number>, db?: CountRunner): Promise<LiveCountSeed<T>>;
132
175
  /** Route handler with auth, Result unwrapping and Problem Details errors. */
133
- route<Params = Record<string, string | string[]>>(handler: (request: NextRequest, ctx: ServerContext<M, F, E, C, P> & {
176
+ route<Params = Record<string, string | string[]>, R extends boolean = false>(handler: (request: NextRequest, ctx: ServerContext<M, F, E, C, P> & AuthorizedContext<C, P, R> & {
134
177
  readonly params: Params;
135
- }) => unknown, options?: GuardOptions): (request: NextRequest, segment: {
178
+ }) => unknown, options?: RouteOptions<C, P, R>): (request: NextRequest, segment: {
136
179
  readonly params: Promise<Params>;
137
180
  }) => Promise<Response>;
138
- /** Server action returning a serializable `ActionResult`. */
139
- action<S extends StandardSchemaV1 | undefined, T>(options: ActionOptions<S>, fn: (input: ActionParsed<S>, ctx: ServerContext<M, F, E, C, P>) => Promise<T> | T): (input: ActionInput<S>) => Promise<ActionResult<Unwrapped<Awaited<T>>>>;
140
- /** Tags the current `"use cache"` scope with a table (and row) tag. */
141
- cacheTag(table: Extract<keyof M, string>, id?: string | number): void;
181
+ /**
182
+ * Server action returning a serializable `ActionResult`.
183
+ *
184
+ * ```ts
185
+ * export const invite = bs.action(
186
+ * { input: Invite, requireTenant: true, roles: ['admin'] },
187
+ * async (input, { db, tenant }) => db.invitations.create({ ...input, organizationId: tenant }),
188
+ * );
189
+ * ```
190
+ */
191
+ action<S extends StandardSchemaV1 | undefined, T, R extends boolean = false>(options: ActionOptions<S, C, P, R>, fn: (input: ActionParsed<S>, ctx: ServerContext<M, F, E, C, P> & AuthorizedContext<C, P, R>) => Promise<T> | T): (input: ActionInput<S>) => Promise<ActionResult<Unwrapped<Awaited<T>>>>;
192
+ /**
193
+ * For Server Components: the caller's context, or the Next.js interrupt
194
+ * for a refused caller. `unauthorized` calls `unauthorized()`, `forbidden`
195
+ * calls `forbidden()` (both need `experimental.authInterrupts`, else
196
+ * `notFound()`), and `not_found` calls `notFound()`.
197
+ *
198
+ * ```ts
199
+ * const { db, tenant } = await bs.require({ requireTenant: true, roles: ['admin'] });
200
+ * ```
201
+ */
202
+ require<R extends boolean = false>(options?: RequireOptions<C, P, R>): Promise<ServerContext<M, F, E, C, P> & AuthorizedContext<C, P, R>>;
203
+ /**
204
+ * Tags the current `"use cache"` scope with a table (and row) tag. With a
205
+ * `tenant`, mutations in other tenants leave the entry cached.
206
+ */
207
+ cacheTag(table: Extract<keyof M, string>, id?: string | number, options?: TagOptions): void;
142
208
  /**
143
209
  * Tags the current `"use cache"` scope with every table the specs (or a
144
210
  * read set) read, plus the row of each `findById`, so any mutation that
145
211
  * changes one revalidates it.
146
212
  */
147
- cacheTags(target: QuerySpec<Extract<keyof M, string>> | readonly QuerySpec<Extract<keyof M, string>>[] | ReadSet): void;
213
+ cacheTags(target: QuerySpec<Extract<keyof M, string>> | readonly QuerySpec<Extract<keyof M, string>>[] | ReadSet, options?: TagOptions): void;
148
214
  /**
149
215
  * GET handler serving a request's database totals (`?id=<request id>`) for
150
216
  * `expectDbBudget`. Answers 404 unless `debug` is on.
@@ -172,20 +238,34 @@ interface SupportStarted {
172
238
  /** The tag `bs.cached()` adds to entries rendered in a support session. */
173
239
  export declare function supportTag(sessionId: string): string;
174
240
  interface SessionStaleOptions {
175
- /** Below this, the result would not be prefetched anyway. Defaults to 30. */
241
+ /**
242
+ * With fewer seconds left on the token, the view is not reused at all (0):
243
+ * Next.js would not prefetch it anyway. Defaults to 30, and values below
244
+ * 30 count as 30: the client router keeps any entry for at least 30
245
+ * seconds, so a shorter stale time would outlive the token.
246
+ */
176
247
  readonly min?: number;
177
248
  /** 300 (5 minutes) joins the route's App Shell. Defaults to 300. */
178
249
  readonly max?: number;
179
250
  }
180
251
  /**
181
252
  * `cacheLife` `stale` seconds for a view of `session`: `max`, but never past
182
- * the token's expiry, and at least `min`.
253
+ * the token's expiry, and 0 once fewer than `min` seconds are left. A
254
+ * signed-out view that a refresh would change (an `expired` or
255
+ * `refresh_failed` cookie, or an `invalid` token) is 0 as well, so it never
256
+ * joins the App Shell.
183
257
  */
184
258
  export declare function sessionStale(session: AuthSession, options?: SessionStaleOptions, now?: number): number;
185
- interface CachedOptions {
259
+ interface CachedOptions<T extends string = string> extends ScopeOptions {
260
+ /**
261
+ * The active tenant, as for `bs.context({ tenant })`. Next.js keys the
262
+ * private cache on your function's arguments, so take the tenant as an
263
+ * argument and pass it through; never read it from anywhere else.
264
+ */
265
+ readonly tenant?: string;
186
266
  /**
187
267
  * `cacheLife` for the entry. `stale` is `sessionStale`, and never more than
188
- * `stale` when it is set: pass PermDock's `cacheLifeFor(snapshot)` so the
268
+ * `stale` when it is set: pass a permission snapshot's lifetime so the
189
269
  * entry goes stale with the snapshot too.
190
270
  */
191
271
  readonly life?: SessionStaleOptions & {
@@ -193,22 +273,40 @@ interface CachedOptions {
193
273
  readonly revalidate?: number;
194
274
  readonly expire?: number;
195
275
  };
196
- /** More `cacheTag`s for the entry, e.g. `snapshotTag(sub)` or `org:<id>`. */
276
+ /** More `cacheTag`s for the entry, e.g. `snapshotTag(sub)` or `organization:<id>`. */
197
277
  readonly tags?: readonly string[];
278
+ /**
279
+ * Tables the entry reads, so the `updateTag` after a mutation drops it:
280
+ * `bs:<table>`, or with an active tenant `bs:<table>@<tenant>` and
281
+ * `bs:<table>@*`, so other tenants' writes leave it cached.
282
+ */
283
+ readonly tables?: readonly T[];
284
+ /** With `tables`, also tags the row `bs:<first table>:<id>`. */
285
+ readonly id?: string | number;
198
286
  }
199
287
  type CachedContext<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> = ServerContext<M, F, E, C, P> & {
200
288
  readonly session: AuthSession<C, P>;
201
289
  };
202
290
  /** The tag `bs.cached()` puts on a user's entries. */
203
291
  export declare function sessionTag(userId: string): string;
204
- /** `bs:<table>` or `bs:<table>:<id>`. Mutations invalidate both. */
205
- export declare function tagFor(table: string, id?: string | number): string;
292
+ interface NextCacheOptions {
293
+ /**
294
+ * How a mutation outside a Server Action (a route handler, a webhook)
295
+ * expires its tags with `revalidateTag`. Defaults to `{ expire: 0 }`, so
296
+ * the next read waits for fresh data; `'max'` serves the stale entry
297
+ * while it revalidates.
298
+ */
299
+ readonly revalidate?: string | {
300
+ readonly expire?: number;
301
+ };
302
+ }
206
303
  /**
207
- * Invalidates `bs:<table>` for every table in the target and
208
- * `bs:<table>:<id>` for the changed rows. `createNext` attaches it unless
209
- * `cacheTags: false`.
304
+ * Invalidates `bs:<table>` for every table in the target, the tenant's
305
+ * `bs:<table>@<tenant>` (every tenant's `bs:<table>@*` when the mutation has
306
+ * no tenant) and `bs:<table>:<id>` for the changed rows. Reads another tenant
307
+ * tagged stay cached. `createNext` attaches it unless `cacheTags: false`.
210
308
  */
211
- export declare function nextCache(): CacheAdapter;
309
+ export declare function nextCache(options?: NextCacheOptions): CacheAdapter;
212
310
  interface RequireAalOptions {
213
311
  /**
214
312
  * Page that enrolls or challenges a second factor. Signed-in users below
@@ -232,6 +330,7 @@ interface RequireAalOptions {
232
330
  * ```
233
331
  */
234
332
  export declare function requireAal(level: Aal, options?: RequireAalOptions): (auth: AuthState, request: NextRequest) => Response | undefined;
333
+ export declare function shouldCheckSession(request: NextRequest, options?: EndedSessionOptions): boolean;
235
334
  /** Page loads, client navigations and server actions; never prefetches or assets. */
236
335
  export declare function shouldRefresh(request: Request): boolean;
237
336
  /**
@@ -244,4 +343,4 @@ export declare function shouldRefresh(request: Request): boolean;
244
343
  */
245
344
  export declare function createNext<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: NextOptions): BetterNext<M, F, E, C, P>;
246
345
  //#endregion
247
- export { type Aal, type ActionOptions, type ActionResult, type ActiveSupport, type AmrEntry, type AuthKind, type AuthSession, type BetterNext, type CachedContext, type CachedOptions, type DbBudget, type DbStats, type EntitlementKey, type GuardOptions, type Impersonator, type LiveCountSeed, type MembershipClaim, type NextDebugOptions, type NextOptions, type ProxyOptions, type RequireAalOptions, type SessionStaleOptions, type SupportOptions, type SupportPolicy, type SupportSessions, type SupportStartRequest, type SupportStarted, type SupportView, hasEntitlement, supportOf, supportSessions, toSession };
346
+ export { type Aal, type ActionOptions, type ActionResult, type ActiveSupport, type AmrEntry, type AuthKind, type AuthSession, type AuthorizeOptions, type AuthorizedContext, type BetterNext, type CachedContext, type CachedOptions, type DbBudget, type DbStats, type EndedSessionOptions, type GuardOptions, type Impersonator, type LiveCountSeed, type MembershipClaim, type NextCacheOptions, type NextDebugOptions, type NextOptions, type ProxyOptions, type RequireAalOptions, type RequireOptions, type RouteOptions, type ScopeOptions, type SessionStaleOptions, type SupportOptions, type SupportPolicy, type SupportSessions, type SupportStartRequest, type SupportStarted, type SupportView, type TagOptions, supportOf, supportSessions, tagFor, tenantOf, toSession };