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,94 @@
1
+ import { parseCookieHeader, serializeCookieHeader } from "@supabase/ssr";
2
+ //#region src/server/replicas.ts
3
+ /** Cookie holding the epoch ms until which reads stay on the primary. */
4
+ const PRIMARY_COOKIE = "bs-primary-until";
5
+ /** Default time reads stay on the primary after a write. */
6
+ const DEFAULT_PIN_MS = 5e3;
7
+ function replicaState(pinnedUntil = 0, now = Date.now()) {
8
+ let wrote = false;
9
+ const inherited = pinnedUntil > now;
10
+ return {
11
+ get pinned() {
12
+ return wrote || inherited;
13
+ },
14
+ get wrote() {
15
+ return wrote;
16
+ },
17
+ pin() {
18
+ wrote = true;
19
+ }
20
+ };
21
+ }
22
+ /** `bs-primary-until` from a `cookie` header or parsed cookies, or 0. */
23
+ function pinnedUntil(cookies) {
24
+ if (!cookies) return 0;
25
+ const value = (typeof cookies === "string" ? parseCookieHeader(cookies) : cookies).find((cookie) => cookie.name === PRIMARY_COOKIE)?.value;
26
+ const until = Number(value);
27
+ return value !== void 0 && Number.isFinite(until) ? until : 0;
28
+ }
29
+ /** Options of the `bs-primary-until` cookie. */
30
+ function primaryCookieOptions(pinMs) {
31
+ return {
32
+ path: "/",
33
+ maxAge: Math.max(1, Math.ceil(pinMs / 1e3)),
34
+ httpOnly: true,
35
+ sameSite: "lax"
36
+ };
37
+ }
38
+ /** The `bs-primary-until` cookie write after a write, for cookie-jar APIs. */
39
+ function primaryCookieWrite(replica, pinMs, now = Date.now()) {
40
+ if (!replica?.wrote) return void 0;
41
+ return {
42
+ name: PRIMARY_COOKIE,
43
+ value: String(now + pinMs),
44
+ options: primaryCookieOptions(pinMs)
45
+ };
46
+ }
47
+ /** A `Set-Cookie` value keeping the next requests on the primary for `pinMs`. */
48
+ function primaryCookie(pinMs, now = Date.now()) {
49
+ return serializeCookieHeader(PRIMARY_COOKIE, String(now + pinMs), primaryCookieOptions(pinMs));
50
+ }
51
+ /**
52
+ * `response` with the `bs-primary-until` cookie when the request wrote, so the
53
+ * caller's next requests read their own writes. A response with immutable
54
+ * headers is copied.
55
+ */
56
+ function withPrimaryPin(response, replica, pinMs) {
57
+ if (!replica?.wrote) return response;
58
+ const cookie = primaryCookie(pinMs);
59
+ try {
60
+ response.headers.append("set-cookie", cookie);
61
+ return response;
62
+ } catch {
63
+ const copy = new Response(response.body, response);
64
+ copy.headers.append("set-cookie", cookie);
65
+ return copy;
66
+ }
67
+ }
68
+ /**
69
+ * Reads go to `replica` until the context is pinned; writes, and every read
70
+ * after a successful write, go to `primary`.
71
+ */
72
+ function routedExecutor(primary, replica, state) {
73
+ const batch = primary.batch?.bind(primary);
74
+ const replicaBatch = replica.batch?.bind(replica);
75
+ return {
76
+ name: primary.name,
77
+ ...primary.functionSources && replica.functionSources ? { functionSources: true } : {},
78
+ async execute(op, context) {
79
+ if (op.kind === "select" && !state.pinned) return replica.execute(op, context);
80
+ const result = await primary.execute(op, context);
81
+ if (op.kind !== "select" && result.ok) state.pin();
82
+ return result;
83
+ },
84
+ ...primary.rpc ? { async rpc(name, args, context) {
85
+ if (context.get && !state.pinned && replica.rpc) return replica.rpc(name, args, context);
86
+ const result = await primary.rpc(name, args, context);
87
+ if (!context.get && result.ok) state.pin();
88
+ return result;
89
+ } } : {},
90
+ ...batch ? { batch: (ops, context) => !state.pinned && replicaBatch ? replicaBatch(ops, context) : batch(ops, context) } : {}
91
+ };
92
+ }
93
+ //#endregion
94
+ export { replicaState as a, primaryCookieWrite as i, PRIMARY_COOKIE as n, routedExecutor as o, pinnedUntil as r, withPrimaryPin as s, DEFAULT_PIN_MS as t };
@@ -1,9 +1,184 @@
1
- import { n as dbError } from "./errors-DtwXa6b8.js";
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
2
  import { t as consoleLogger } from "./logger-glM28NVN.js";
3
3
  import { n as decodeJwtPayload } from "./base64-D2gsioCY.js";
4
- import { a as delegationOf, i as actorOf, n as impersonatorOf, r as userContext } from "./impersonation-BgSHAYLf.js";
4
+ import { a as actorOf, i as userContext } from "./impersonation-DcqaTBHx.js";
5
5
  import { DEFAULT_COOKIE_OPTIONS, createChunks, isChunkLike, parseCookieHeader, serializeCookieHeader, stringFromBase64URL, stringToBase64URL } from "@supabase/ssr";
6
6
  import { extractCredentials, verifyCredentials } from "@supabase/server/core";
7
+ //#region src/auth/session.ts
8
+ const DEFAULT_SESSION_ENCODING = "user-and-tokens";
9
+ const BASE64_PREFIX = "base64-";
10
+ /** Headers that keep responses carrying session cookies out of shared caches. */
11
+ const AUTH_CACHE_HEADERS = {
12
+ "Cache-Control": "private, no-cache, no-store, must-revalidate, max-age=0",
13
+ Expires: "0",
14
+ Pragma: "no-cache"
15
+ };
16
+ /** `sb-<first label of the hostname>-auth-token`, the supabase-js default. */
17
+ function sessionCookieName(url) {
18
+ let name = cookieNames.get(url);
19
+ if (name === void 0) {
20
+ name = `sb-${new URL(url).hostname.split(".")[0] ?? ""}-auth-token`;
21
+ if (cookieNames.size < 16) cookieNames.set(url, name);
22
+ }
23
+ return name;
24
+ }
25
+ /** Project URLs come from configuration, so a handful of entries suffice. */
26
+ const cookieNames = /* @__PURE__ */ new Map();
27
+ function parseCookies(header) {
28
+ return header ? parseCookieHeader(header) : [];
29
+ }
30
+ function serializeCookie(write) {
31
+ return serializeCookieHeader(write.name, write.value, write.options);
32
+ }
33
+ /** Cookie values by name, per parsed cookie list: one request reads its session more than once. */
34
+ const cookieMaps = /* @__PURE__ */ new WeakMap();
35
+ function combine(cookies, name) {
36
+ let byName = cookieMaps.get(cookies);
37
+ if (!byName) {
38
+ byName = new Map(cookies.map((cookie) => [cookie.name, cookie.value]));
39
+ cookieMaps.set(cookies, byName);
40
+ }
41
+ const whole = byName.get(name);
42
+ if (whole) return whole;
43
+ const parts = [];
44
+ for (let index = 0;; index++) {
45
+ const part = byName.get(`${name}.${index}`);
46
+ if (!part) break;
47
+ parts.push(part);
48
+ }
49
+ return parts.length > 0 ? parts.join("") : void 0;
50
+ }
51
+ function isStoredSession(value) {
52
+ if (typeof value !== "object" || value === null) return false;
53
+ const session = value;
54
+ return typeof session["access_token"] === "string" && typeof session["refresh_token"] === "string";
55
+ }
56
+ /**
57
+ * Reads the session written by `@supabase/ssr` (plain or `base64-`, whole or
58
+ * chunked, `user-and-tokens` or `tokens-only`). Mismatched chunks from a
59
+ * partial write read as no session.
60
+ */
61
+ function readSession(cookies, name) {
62
+ const raw = combine(cookies, name);
63
+ if (!raw) return null;
64
+ try {
65
+ const json = raw.startsWith(BASE64_PREFIX) ? stringFromBase64URL(raw.slice(7)) : raw;
66
+ const parsed = JSON.parse(json);
67
+ return isStoredSession(parsed) ? parsed : null;
68
+ } catch {
69
+ return null;
70
+ }
71
+ }
72
+ /** The encoding a stored session was written with: `tokens-only` without a `user`. */
73
+ function sessionEncoding(session) {
74
+ return session.user === void 0 || session.user === null ? "tokens-only" : "user-and-tokens";
75
+ }
76
+ function encoded(session, encode) {
77
+ switch (encode) {
78
+ case "user-and-tokens": return JSON.stringify(session);
79
+ case "tokens-only": {
80
+ const { user: _user, ...tokens } = session;
81
+ return JSON.stringify(tokens);
82
+ }
83
+ default: return encode;
84
+ }
85
+ }
86
+ /**
87
+ * Cookie writes that store `session` (or clear it with `null`) exactly like
88
+ * `@supabase/ssr` with the same `encode`, and expire chunks the new value no
89
+ * longer uses.
90
+ */
91
+ function writeSession(existing, name, session, options = {}, { encode = DEFAULT_SESSION_ENCODING } = {}) {
92
+ const base = {
93
+ ...DEFAULT_COOKIE_OPTIONS,
94
+ ...options
95
+ };
96
+ const chunks = session ? createChunks(name, BASE64_PREFIX + stringToBase64URL(encoded(session, encode))) : [];
97
+ const kept = new Set(chunks.map((chunk) => chunk.name));
98
+ return [...existing.filter((cookie) => isChunkLike(cookie.name, name) && !kept.has(cookie.name)).map((cookie) => ({
99
+ name: cookie.name,
100
+ value: "",
101
+ options: {
102
+ ...base,
103
+ maxAge: 0
104
+ }
105
+ })), ...chunks.map((chunk) => ({
106
+ name: chunk.name,
107
+ value: chunk.value,
108
+ options: base
109
+ }))];
110
+ }
111
+ /**
112
+ * `Max-Age=0` writes for every chunk of the session cookie at each of
113
+ * `scopes`, like `clearAuthCookiesAtScopes` from `@supabase/ssr`. Use it once
114
+ * the cookie `domain` or `path` changed, for the scopes earlier deploys
115
+ * wrote: browsers ignore writes for scopes the host doesn't own, but a scope
116
+ * equal to the current one clears the live session.
117
+ */
118
+ function clearSessionAtScopes(existing, name, scopes) {
119
+ if (scopes.length === 0) return [];
120
+ const chunks = existing.map((cookie) => cookie.name).filter((cookie) => isChunkLike(cookie, name));
121
+ return scopes.flatMap((scope) => {
122
+ const options = {
123
+ ...DEFAULT_COOKIE_OPTIONS,
124
+ ...scope.domain === void 0 ? {} : { domain: scope.domain },
125
+ ...scope.path === void 0 ? {} : { path: scope.path },
126
+ maxAge: 0
127
+ };
128
+ return chunks.map((chunk) => ({
129
+ name: chunk,
130
+ value: "",
131
+ options
132
+ }));
133
+ });
134
+ }
135
+ /** Applies cookie writes to a cookie list, as the next request would see it. */
136
+ function applyCookieWrites(cookies, writes) {
137
+ const next = new Map(cookies.map((cookie) => [cookie.name, cookie.value]));
138
+ for (const write of writes) if (write.options.maxAge === 0) next.delete(write.name);
139
+ else next.set(write.name, write.value);
140
+ return [...next].map(([name, value]) => ({
141
+ name,
142
+ value
143
+ }));
144
+ }
145
+ //#endregion
146
+ //#region src/auth/ended.ts
147
+ const DEFAULT_TIMEOUT_MS$1 = 5e3;
148
+ function accessTokenOf(request, options) {
149
+ const bearer = extractCredentials(request).token;
150
+ if (bearer) return bearer;
151
+ return readSession(parseCookies(request.headers.get("cookie")), options.cookieName ?? sessionCookieName(options.url))?.access_token;
152
+ }
153
+ async function sessionStatus(input, options) {
154
+ const token = typeof input === "string" ? input : accessTokenOf(input, options);
155
+ if (!token) return "unknown";
156
+ const exp = decodeJwtPayload(token)?.["exp"];
157
+ if (typeof exp === "number" && exp * 1e3 <= (options.now ?? Date.now)()) return "unknown";
158
+ const doFetch = options.fetch ?? fetch;
159
+ try {
160
+ const response = await doFetch(`${options.url}/auth/v1/user`, {
161
+ headers: {
162
+ apikey: options.publishableKey,
163
+ authorization: `Bearer ${token}`
164
+ },
165
+ signal: AbortSignal.timeout(options.timeoutMs ?? DEFAULT_TIMEOUT_MS$1)
166
+ });
167
+ await response.body?.cancel();
168
+ if (response.status === 401 || response.status === 403) return "ended";
169
+ return response.ok ? "active" : "unknown";
170
+ } catch {
171
+ return "unknown";
172
+ }
173
+ }
174
+ function clearSessionCookies(request, response, options) {
175
+ const writes = writeSession(parseCookies(request.headers.get("cookie")), options.cookieName ?? sessionCookieName(options.url), null, options.cookie);
176
+ if (writes.length === 0) return response;
177
+ for (const write of writes) response.headers.append("set-cookie", serializeCookie(write));
178
+ for (const [key, value] of Object.entries(AUTH_CACHE_HEADERS)) response.headers.set(key, value);
179
+ return response;
180
+ }
181
+ //#endregion
7
182
  //#region src/auth/refresh.ts
8
183
  /**
9
184
  * How long a finished refresh is reused for requests still carrying the old
@@ -12,6 +187,8 @@ import { extractCredentials, verifyCredentials } from "@supabase/server/core";
12
187
  */
13
188
  const REUSE_MS = 1e4;
14
189
  const DEFAULT_TIMEOUT_MS = 5e3;
190
+ /** Finished refreshes kept for reuse; a burst of sign-ins can't grow it past this. */
191
+ const RECENT_MAX = 1e3;
15
192
  const inflight = /* @__PURE__ */ new Map();
16
193
  const recent = /* @__PURE__ */ new Map();
17
194
  function shared(outcome) {
@@ -80,120 +257,34 @@ async function request(refreshToken, options, now) {
80
257
  * window so parallel requests carrying the old cookie converge on one session.
81
258
  */
82
259
  function refreshSession(refreshToken, options) {
83
- const now = (options.now ?? Date.now)();
260
+ const clock = options.now ?? Date.now;
261
+ const now = clock();
84
262
  prune(now);
85
- const cached = recent.get(refreshToken);
263
+ const key = `${options.url}\n${refreshToken}`;
264
+ const cached = recent.get(key);
86
265
  if (cached) return Promise.resolve(shared(cached.outcome));
87
- const pending = inflight.get(refreshToken);
266
+ const pending = inflight.get(key);
88
267
  if (pending) return pending.then(shared);
89
268
  const promise = request(refreshToken, options, now).then((outcome) => {
90
269
  if (outcome.ok || outcome.reason === "rejected") {
91
- recent.delete(refreshToken);
92
- recent.set(refreshToken, {
270
+ recent.delete(key);
271
+ recent.set(key, {
93
272
  outcome,
94
- until: now + REUSE_MS
273
+ until: clock() + REUSE_MS
95
274
  });
275
+ if (recent.size > RECENT_MAX) {
276
+ const oldest = recent.keys().next();
277
+ if (!oldest.done) recent.delete(oldest.value);
278
+ }
96
279
  }
97
280
  return outcome;
98
281
  }).finally(() => {
99
- inflight.delete(refreshToken);
282
+ inflight.delete(key);
100
283
  });
101
- inflight.set(refreshToken, promise);
284
+ inflight.set(key, promise);
102
285
  return promise;
103
286
  }
104
287
  //#endregion
105
- //#region src/auth/session.ts
106
- const BASE64_PREFIX = "base64-";
107
- /** Headers that keep responses carrying session cookies out of shared caches. */
108
- const AUTH_CACHE_HEADERS = {
109
- "Cache-Control": "private, no-cache, no-store, must-revalidate, max-age=0",
110
- Expires: "0",
111
- Pragma: "no-cache"
112
- };
113
- /** `sb-<first label of the hostname>-auth-token`, the supabase-js default. */
114
- function sessionCookieName(url) {
115
- let name = cookieNames.get(url);
116
- if (name === void 0) {
117
- name = `sb-${new URL(url).hostname.split(".")[0] ?? ""}-auth-token`;
118
- if (cookieNames.size < 16) cookieNames.set(url, name);
119
- }
120
- return name;
121
- }
122
- /** Project URLs come from configuration, so a handful of entries suffice. */
123
- const cookieNames = /* @__PURE__ */ new Map();
124
- function parseCookies(header) {
125
- return header ? parseCookieHeader(header) : [];
126
- }
127
- function serializeCookie(write) {
128
- return serializeCookieHeader(write.name, write.value, write.options);
129
- }
130
- function combine(cookies, name) {
131
- const byName = new Map(cookies.map((cookie) => [cookie.name, cookie.value]));
132
- const whole = byName.get(name);
133
- if (whole) return whole;
134
- const parts = [];
135
- for (let index = 0;; index++) {
136
- const part = byName.get(`${name}.${index}`);
137
- if (!part) break;
138
- parts.push(part);
139
- }
140
- return parts.length > 0 ? parts.join("") : void 0;
141
- }
142
- function isStoredSession(value) {
143
- if (typeof value !== "object" || value === null) return false;
144
- const session = value;
145
- return typeof session["access_token"] === "string" && typeof session["refresh_token"] === "string";
146
- }
147
- /**
148
- * Reads the session written by `@supabase/ssr` (plain or `base64-`, whole or
149
- * chunked). Mismatched chunks from a partial write read as no session.
150
- */
151
- function readSession(cookies, name) {
152
- const raw = combine(cookies, name);
153
- if (!raw) return null;
154
- try {
155
- const json = raw.startsWith(BASE64_PREFIX) ? stringFromBase64URL(raw.slice(7)) : raw;
156
- const parsed = JSON.parse(json);
157
- return isStoredSession(parsed) ? parsed : null;
158
- } catch {
159
- return null;
160
- }
161
- }
162
- /**
163
- * Cookie writes that store `session` (or clear it with `null`) exactly like
164
- * `@supabase/ssr`, and expire chunks the new value no longer uses.
165
- */
166
- function writeSession(existing, name, session, options = {}) {
167
- const base = {
168
- ...DEFAULT_COOKIE_OPTIONS,
169
- ...options
170
- };
171
- const chunks = session ? createChunks(name, BASE64_PREFIX + stringToBase64URL(JSON.stringify(session))) : [];
172
- const kept = new Set(chunks.map((chunk) => chunk.name));
173
- return [...existing.filter((cookie) => isChunkLike(cookie.name, name) && !kept.has(cookie.name)).map((cookie) => ({
174
- name: cookie.name,
175
- value: "",
176
- options: {
177
- ...base,
178
- maxAge: 0
179
- }
180
- })), ...chunks.map((chunk) => ({
181
- name: chunk.name,
182
- value: chunk.value,
183
- options: base
184
- }))];
185
- }
186
- /** Applies cookie writes to a cookie list, as the next request would see it. */
187
- function applyCookieWrites(cookies, writes) {
188
- const next = new Map(cookies.map((cookie) => [cookie.name, cookie.value]));
189
- for (const write of writes) if (write.options.maxAge === 0) next.delete(write.name);
190
- else next.set(write.name, write.value);
191
- return [...next].map(([name, value]) => ({
192
- name,
193
- value
194
- }));
195
- }
196
- //#endregion
197
288
  //#region src/auth/resolve.ts
198
289
  function expiryOf(session) {
199
290
  if (typeof session.expires_at === "number") return session.expires_at;
@@ -215,60 +306,28 @@ let memoByJwks = /* @__PURE__ */ new WeakMap();
215
306
  /**
216
307
  * Tokens that already verified, until they expire. Every private-cache scope
217
308
  * and island resolves the same token again; this skips the signature check.
309
+ * A hit skips the audience and issuer checks too, so both are part of the key.
218
310
  */
219
311
  function memoFor(options) {
220
312
  const jwks = options.jwks ?? options.env.jwks;
221
- if (jwks && typeof jwks === "object" && !(jwks instanceof URL)) {
222
- let memo = memoByJwks.get(jwks);
223
- if (!memo) memoByJwks.set(jwks, memo = /* @__PURE__ */ new Map());
224
- return memo;
225
- }
313
+ const inline = jwks && typeof jwks === "object" && !(jwks instanceof URL);
226
314
  const key = JSON.stringify([
227
- String(jwks ?? options.env.jwksUrl),
315
+ inline ? null : String(jwks ?? options.env.jwksUrl),
228
316
  options.env.url,
229
317
  options.audience ?? null,
230
318
  options.issuer ?? null
231
319
  ]);
320
+ if (inline) {
321
+ let byKey = memoByJwks.get(jwks);
322
+ if (!byKey) memoByJwks.set(jwks, byKey = /* @__PURE__ */ new Map());
323
+ let memo = byKey.get(key);
324
+ if (!memo) byKey.set(key, memo = /* @__PURE__ */ new Map());
325
+ return memo;
326
+ }
232
327
  let memo = memoByUrl.get(key);
233
328
  if (!memo) memoByUrl.set(key, memo = /* @__PURE__ */ new Map());
234
329
  return memo;
235
330
  }
236
- function sameJson(a, b) {
237
- if (a === b) return true;
238
- if (typeof a !== "object" || typeof b !== "object" || !a || !b) return false;
239
- if (Array.isArray(a) !== Array.isArray(b)) return false;
240
- const left = Object.entries(a);
241
- const right = new Map(Object.entries(b));
242
- return left.length === right.size && left.every(([key, value]) => right.has(key) && sameJson(value, right.get(key)));
243
- }
244
- /**
245
- * Records a token that `@supabase/server` verified for this request, so the
246
- * next `resolveAuth` with these options doesn't verify it again. Only when
247
- * `claims` is the token's own payload, it hasn't expired, and its `iss` and
248
- * `aud` pass the checks these options would apply; otherwise returns false
249
- * and the token is verified as usual.
250
- */
251
- function rememberVerified(options, verified) {
252
- const { token, claims, user } = verified;
253
- const now = Math.floor((options.now ?? Date.now)() / 1e3);
254
- const expiresAt = typeof claims.exp === "number" ? claims.exp : null;
255
- if (expiresAt === null || expiresAt <= now) return false;
256
- if (!sameJson(decodeJwtPayload(token), claims)) return false;
257
- const issuers = [options.issuer ?? `${options.env.url}/auth/v1`].flat();
258
- if (typeof claims.iss !== "string" || !issuers.includes(claims.iss)) return false;
259
- const audiences = [options.audience ?? "authenticated"].flat();
260
- const aud = claims.aud;
261
- const given = Array.isArray(aud) ? aud : [aud];
262
- if (!audiences.some((audience) => given.includes(audience))) return false;
263
- remember(memoFor(options), token, {
264
- kind: "user",
265
- token,
266
- claims,
267
- user,
268
- expiresAt
269
- }, expiresAt);
270
- return true;
271
- }
272
331
  function remembered(memo, token, now) {
273
332
  const hit = memo.get(token);
274
333
  if (!hit) return void 0;
@@ -443,11 +502,12 @@ async function verifyOnce(credentials, modes, options, source) {
443
502
  reason: "none"
444
503
  };
445
504
  }
446
- function resolution(auth, cookies, writes = []) {
505
+ function resolution(auth, cookies, writes = [], ended = false) {
447
506
  const headers = writes.length > 0 ? AUTH_CACHE_HEADERS : {};
448
507
  let requestCookies;
449
508
  return {
450
509
  auth,
510
+ ...ended ? { sessionEnded: true } : {},
451
511
  cookies: writes,
452
512
  headers,
453
513
  /** Parsed on first read: bearer requests rarely need their cookies. */
@@ -509,10 +569,11 @@ async function resolveAuth(request, options) {
509
569
  reason: "none"
510
570
  }, cookies);
511
571
  const name = options.cookie?.name ?? sessionCookieName(options.env.url);
572
+ const encoding = options.cookie?.encode === void 0 ? {} : { encode: options.cookie.encode };
512
573
  const session = readSession(cookies(), name);
513
574
  if (!session) {
514
575
  const stale = cookies().some((cookie) => cookie.name === name || cookie.name.startsWith(`${name}.`));
515
- const writes = stale && options.refresh ? writeSession(cookies(), name, null, options.cookie?.options) : [];
576
+ const writes = stale && options.refresh ? writeSession(cookies(), name, null, options.cookie?.options, encoding) : [];
516
577
  return resolution({
517
578
  kind: "anon",
518
579
  reason: stale ? "signed_out" : "none"
@@ -521,11 +582,22 @@ async function resolveAuth(request, options) {
521
582
  const now = Math.floor((options.now ?? Date.now)() / 1e3);
522
583
  const expiry = expiryOf(session);
523
584
  const leeway = options.refresh ? options.leeway ?? 60 : 0;
524
- if (expiry !== void 0 && expiry - leeway > now) {
585
+ const fresh = expiry !== void 0 && expiry - leeway > now;
586
+ if (fresh) {
525
587
  const state = await verify({
526
588
  token: session.access_token,
527
589
  apikey: null
528
590
  }, ["user"], options, "cookie");
591
+ if (state.kind === "user" && options.checkSession && await sessionStatus(state.token, {
592
+ url: options.env.url,
593
+ publishableKey: options.env.publishableKey,
594
+ ...options.fetch ? { fetch: options.fetch } : {},
595
+ ...options.refreshTimeoutMs === void 0 ? {} : { timeoutMs: options.refreshTimeoutMs },
596
+ ...options.now ? { now: options.now } : {}
597
+ }) === "ended") return resolution({
598
+ kind: "anon",
599
+ reason: "signed_out"
600
+ }, cookies, options.refresh ? writeSession(cookies(), name, null, options.cookie?.options, encoding) : [], true);
529
601
  if (state.kind !== "invalid" || state.reason !== "token" || state.error.kind === "network") return resolution(state, cookies);
530
602
  if (!options.refresh) return resolution({
531
603
  kind: "anon",
@@ -555,16 +627,25 @@ async function resolveAuth(request, options) {
555
627
  durationMs: performance.now() - started
556
628
  });
557
629
  if (!outcome.ok) {
558
- if (outcome.reason === "network") return resolution({
559
- kind: "anon",
560
- reason: "refresh_failed"
561
- }, cookies);
630
+ if (outcome.reason === "network") {
631
+ if (!fresh && expiry !== void 0 && expiry > now) {
632
+ const state = await verify({
633
+ token: session.access_token,
634
+ apikey: null
635
+ }, ["user"], options, "cookie");
636
+ if (state.kind !== "invalid") return resolution(state, cookies);
637
+ }
638
+ return resolution({
639
+ kind: "anon",
640
+ reason: "refresh_failed"
641
+ }, cookies);
642
+ }
562
643
  return resolution({
563
644
  kind: "anon",
564
645
  reason: "signed_out"
565
- }, cookies, writeSession(cookies(), name, null, options.cookie?.options));
646
+ }, cookies, writeSession(cookies(), name, null, options.cookie?.options, encoding));
566
647
  }
567
- const writes = writeSession(cookies(), name, outcome.session, options.cookie?.options);
648
+ const writes = writeSession(cookies(), name, outcome.session, options.cookie?.options, encoding);
568
649
  return resolution(await verify({
569
650
  token: outcome.session.access_token,
570
651
  apikey: null
@@ -582,6 +663,19 @@ function authContext(auth) {
582
663
  },
583
664
  claims: { role: "service_role" }
584
665
  };
666
+ case "apiKey": return {
667
+ actor: auth.userId ? {
668
+ id: auth.userId,
669
+ kind: "user",
670
+ role: "authenticated"
671
+ } : {
672
+ id: `api-key:${auth.keyId}`,
673
+ kind: "service",
674
+ role: "authenticated"
675
+ },
676
+ claims: auth.claims,
677
+ ...auth.organizationId ? { tenant: auth.organizationId } : {}
678
+ };
585
679
  case "anon":
586
680
  case "invalid": return {
587
681
  actor: {
@@ -595,90 +689,4 @@ function authContext(auth) {
595
689
  }
596
690
  }
597
691
  //#endregion
598
- //#region src/auth/mfa.ts
599
- /** The session's assurance level from its claims; anything but `aal2` reads as `aal1`. */
600
- function aalOf(claims) {
601
- return claims["aal"] === "aal2" ? "aal2" : "aal1";
602
- }
603
- /** The `amr` claim as typed entries, skipping malformed ones. */
604
- function amrOf(claims) {
605
- const amr = claims["amr"];
606
- if (!Array.isArray(amr)) return [];
607
- return amr.flatMap((entry) => {
608
- if (typeof entry !== "object" || entry === null) return [];
609
- const { method, timestamp, provider } = entry;
610
- if (typeof method !== "string" || typeof timestamp !== "number") return [];
611
- return [typeof provider === "string" ? {
612
- method,
613
- timestamp,
614
- provider
615
- } : {
616
- method,
617
- timestamp
618
- }];
619
- });
620
- }
621
- /**
622
- * `undefined` when a user session meets `required`; otherwise a `forbidden`
623
- * error with `required` and code `INSUFFICIENT_AAL`, for the client to start
624
- * an MFA challenge. Non-user sessions pass: `allow` decides about them.
625
- */
626
- function checkAal(auth, required) {
627
- if (required === "aal1" || auth.kind !== "user" || !("claims" in auth)) return void 0;
628
- if (aalOf(auth.claims) === "aal2") return void 0;
629
- return dbError("forbidden", "Verify a second factor to continue", {
630
- code: "INSUFFICIENT_AAL",
631
- required
632
- });
633
- }
634
- //#endregion
635
- //#region src/auth/view.ts
636
- /** Whether the token belongs to an anonymous user (`signInAnonymously()`). */
637
- function isAnonymousUser(claims) {
638
- return "is_anonymous" in claims && claims.is_anonymous === true;
639
- }
640
- /** Drops the token from an `AuthState`, leaving only serializable fields. */
641
- function toSession(auth) {
642
- switch (auth.kind) {
643
- case "user": {
644
- const impersonator = impersonatorOf(auth.claims);
645
- const outcome = actorOf(auth.claims);
646
- const actor = outcome.ok ? outcome.actor : void 0;
647
- const client = actor?.kind === "oauth-client" ? actor : void 0;
648
- const scopes = client ? delegationOf(auth.claims)?.scopes : void 0;
649
- const delegation = client && (scopes || client.chain) ? {
650
- scopes: scopes ?? [],
651
- ...client.chain ? { chain: client.chain } : {}
652
- } : void 0;
653
- return {
654
- kind: "user",
655
- user: auth.user,
656
- claims: auth.claims,
657
- expiresAt: auth.expiresAt,
658
- ...auth.profile === void 0 ? {} : { profile: auth.profile },
659
- aal: aalOf(auth.claims),
660
- anonymous: isAnonymousUser(auth.claims),
661
- amr: amrOf(auth.claims),
662
- ...impersonator ? { impersonator } : {},
663
- ...actor ? { actor } : {},
664
- ...delegation ? { delegation } : {}
665
- };
666
- }
667
- case "service": return {
668
- kind: "service",
669
- keyName: auth.keyName
670
- };
671
- case "anon": return {
672
- kind: "anon",
673
- reason: auth.reason
674
- };
675
- case "invalid": return {
676
- kind: "invalid",
677
- reason: auth.reason,
678
- error: auth.error
679
- };
680
- default: return auth;
681
- }
682
- }
683
- //#endregion
684
- export { writeSession as _, checkAal as a, prefetchJwks as c, AUTH_CACHE_HEADERS as d, applyCookieWrites as f, sessionCookieName as g, serializeCookie as h, amrOf as i, rememberVerified as l, readSession as m, toSession as n, authContext as o, parseCookies as p, aalOf as r, clientIp as s, isAnonymousUser as t, resolveAuth as u, refreshSession as v };
692
+ export { writeSession as _, refreshSession as a, AUTH_CACHE_HEADERS as c, clearSessionAtScopes as d, parseCookies as f, sessionEncoding as g, sessionCookieName as h, resolveAuth as i, DEFAULT_SESSION_ENCODING as l, serializeCookie as m, clientIp as n, clearSessionCookies as o, readSession as p, prefetchJwks as r, sessionStatus as s, authContext as t, applyCookieWrites as u };