better-supabase 0.5.0 → 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 +299 -41
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/actor-CQTlc1Hh.d.ts +43 -0
  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-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
  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-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect--H7oGmcd.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-BKR2W_79.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-BDJuO0UR.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-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
  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-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-DUxU4oHe.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-DcqaTBHx.js +148 -0
  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-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
  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-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
  385. package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
  386. package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-D8iqWMr-.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 -21
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
  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 +330 -194
  413. package/dist/sql/index.js +34901 -6489
  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-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
  430. package/dist/{support-view-Da5peKFg.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 +343 -37
  449. package/dist/testing/index.js +1186 -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-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
  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 +470 -29
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +21 -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 +62 -18
  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-BJc9vdyu.js +0 -2
  504. package/dist/cli/gen-C2osRcr5.js +0 -2204
  505. package/dist/cli/read-sets-BfMQcKy8.js +0 -289
  506. package/dist/cli/sql-DzPbfngx.js +0 -348
  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/impersonation-VfaGc4Q_.js +0 -41
  512. package/dist/index-BGdgBPdf.d.ts +0 -161
  513. package/dist/index-DOESKG27.d.ts +0 -100
  514. package/dist/index-DmXSxbLi.d.ts +0 -62
  515. package/dist/index-Dxn2a5cw.d.ts +0 -50
  516. package/dist/jobs/index.d.ts +0 -226
  517. package/dist/jobs/index.js +0 -1007
  518. package/dist/json-schema-m1fiwKgN.js +0 -208
  519. package/dist/kit-events-CTFDfSwb.js +0 -60
  520. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  521. package/dist/kits-CGLLrNPd.js +0 -157
  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-Csx2sRjg.js +0 -655
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-DT-OhSxD.d.ts +0 -88
  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 -100
@@ -0,0 +1,409 @@
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ import { t as escapeLike } from "./escape-like-DHfx6jRr.js";
3
+ import { r as err, s as toDbError } from "./result-DzUbqgdW.js";
4
+ import "./react/session.js";
5
+ import { n as ClientContext, o as useBroadcastAuth } from "./hooks-1BTCJsiw.js";
6
+ import { t as fieldErrorsOf } from "./field-errors-VF1yb8yI.js";
7
+ import { n as ttlSeconds } from "./ttl-Hr34gRu8.js";
8
+ import { useCallback, useContext, useEffect, useMemo, useRef, useState, useTransition } from "react";
9
+ //#region src/react/actions.ts
10
+ const IDLE$1 = {
11
+ data: void 0,
12
+ error: void 0
13
+ };
14
+ /**
15
+ * Calls a Server Action from an event handler: tracks pending inputs and the
16
+ * last result, and calls `onSuccess` or `onError`.
17
+ *
18
+ * ```tsx
19
+ * const remove = useAction(removeMember, { onError: (e) => toast.error(message(e)) });
20
+ * <Button disabled={remove.pendingInputs.some((p) => p.userId === id)} onClick={() => remove.run({ userId: id })} />
21
+ * ```
22
+ */
23
+ function useAction(action, options = {}) {
24
+ const [transitioning, startTransition] = useTransition();
25
+ const [inFlight, setInFlight] = useState([]);
26
+ const [settled, setSettled] = useState(IDLE$1);
27
+ const latest = useRef({
28
+ action,
29
+ options
30
+ });
31
+ latest.current = {
32
+ action,
33
+ options
34
+ };
35
+ const run = useCallback((input) => {
36
+ const entry = { input };
37
+ setInFlight((current) => [...current, entry]);
38
+ setSettled((current) => current.error === void 0 ? current : {
39
+ ...current,
40
+ error: void 0
41
+ });
42
+ const settledRun = new Promise((resolve, reject) => {
43
+ const done = () => {
44
+ setInFlight((current) => current.filter((item) => item !== entry));
45
+ };
46
+ startTransition(async () => {
47
+ let result;
48
+ try {
49
+ result = await latest.current.action(input);
50
+ } catch (cause) {
51
+ done();
52
+ reject(cause instanceof Error ? cause : new Error(String(cause)));
53
+ throw cause;
54
+ }
55
+ done();
56
+ setSettled(result.ok ? {
57
+ data: result.data,
58
+ error: void 0
59
+ } : (current) => ({
60
+ data: current.data,
61
+ error: result.error
62
+ }));
63
+ const { onSuccess, onError } = latest.current.options;
64
+ if (result.ok) onSuccess?.(result.data, input);
65
+ else onError?.(result.error, input);
66
+ resolve(result);
67
+ });
68
+ });
69
+ settledRun.catch(() => void 0);
70
+ return settledRun;
71
+ }, []);
72
+ const reset = useCallback(() => {
73
+ setSettled(IDLE$1);
74
+ }, []);
75
+ const pendingInputs = inFlight.map((item) => item.input);
76
+ return {
77
+ run,
78
+ pending: transitioning || inFlight.length > 0,
79
+ pendingInputs,
80
+ pendingInput: pendingInputs.at(-1),
81
+ data: settled.data,
82
+ error: settled.error,
83
+ reset
84
+ };
85
+ }
86
+ /**
87
+ * A `<form>` that submits `FormData` to a Server Action. Fields keep what
88
+ * the user typed when the action fails (a `<form action>` resets them) and
89
+ * clear only on success.
90
+ *
91
+ * ```tsx
92
+ * const form = useActionForm(createCustomer, { onSuccess: () => toast.success('Saved') });
93
+ * <form {...form.formProps}>
94
+ * <Input name="name" aria-invalid={form.fieldErrors.name !== undefined} />
95
+ * </form>
96
+ * ```
97
+ */
98
+ function useActionForm(action, options = {}) {
99
+ const handle = useAction(action);
100
+ return {
101
+ formProps: { onSubmit: (event) => {
102
+ event.preventDefault();
103
+ const form = event.currentTarget;
104
+ handle.run(new FormData(form)).then((result) => {
105
+ if (!result.ok) {
106
+ options.onError?.(result.error, form);
107
+ return;
108
+ }
109
+ if (options.resetOnSuccess ?? true) form.reset();
110
+ options.onSuccess?.(result.data, form);
111
+ }, () => void 0);
112
+ } },
113
+ pending: handle.pending,
114
+ data: handle.data,
115
+ error: handle.error,
116
+ fieldErrors: fieldErrorsOf(handle.error),
117
+ reset: () => {
118
+ handle.reset();
119
+ }
120
+ };
121
+ }
122
+ //#endregion
123
+ //#region src/react/presence.ts
124
+ const NONE = [];
125
+ const NO_HANDLERS = {};
126
+ const notJoined = () => Promise.resolve(dbError("invalid_request", "better-supabase: the presence topic is not joined"));
127
+ /**
128
+ * Joins a presence topic while mounted and returns who is on it. Pass
129
+ * `null` values to pause. It rejoins when the topic or the user changes.
130
+ *
131
+ * ```tsx
132
+ * const { members } = usePresence(roomTopic, { roomId }, { state: { name } });
133
+ * ```
134
+ */
135
+ function usePresence(topic, values, options = {}) {
136
+ const context = useContext(ClientContext);
137
+ const supabase = options.client ?? context?.client.supabase;
138
+ if (!supabase) throw new Error("better-supabase: usePresence needs <BetterSupabaseProvider client={bs}> or { client: supabase }");
139
+ const auth = useBroadcastAuth(options.client === void 0 ? context?.client : void 0, supabase);
140
+ const [members, setMembers] = useState(NONE);
141
+ const [status, setStatus] = useState("closed");
142
+ const joinedRef = useRef(null);
143
+ const trackedKey = useRef(void 0);
144
+ const name = values ? topic.topic(values) : null;
145
+ const userId = auth.userId;
146
+ const state = options.state;
147
+ const stateKey = state === void 0 ? void 0 : JSON.stringify(state);
148
+ const latest = useRef({
149
+ state,
150
+ stateKey
151
+ });
152
+ latest.current = {
153
+ state,
154
+ stateKey
155
+ };
156
+ useEffect(() => {
157
+ if (!name || auth.status === "loading") return;
158
+ const matched = topic.match(name);
159
+ if (!matched) return;
160
+ const joined = topic.subscribe(supabase, matched, NO_HANDLERS, {
161
+ onStatus: setStatus,
162
+ onPresence: setMembers
163
+ });
164
+ joinedRef.current = joined;
165
+ syncState(joined, latest.current, trackedKey);
166
+ return () => {
167
+ joinedRef.current = null;
168
+ trackedKey.current = void 0;
169
+ setMembers(NONE);
170
+ setStatus("closed");
171
+ joined.unsubscribe();
172
+ };
173
+ }, [
174
+ supabase,
175
+ topic,
176
+ name,
177
+ userId,
178
+ auth.status
179
+ ]);
180
+ useEffect(() => {
181
+ const joined = joinedRef.current;
182
+ if (joined) syncState(joined, {
183
+ state: latest.current.state,
184
+ stateKey
185
+ }, trackedKey);
186
+ }, [stateKey]);
187
+ return {
188
+ members,
189
+ status,
190
+ ...useMemo(() => ({
191
+ track: async (next) => {
192
+ const joined = joinedRef.current;
193
+ if (!joined) return notJoined();
194
+ const result = await joined.track(next);
195
+ return result.ok ? void 0 : result.error;
196
+ },
197
+ untrack: async () => {
198
+ const joined = joinedRef.current;
199
+ if (!joined) return notJoined();
200
+ const result = await joined.untrack();
201
+ return result.ok ? void 0 : result.error;
202
+ }
203
+ }), [])
204
+ };
205
+ }
206
+ /** Tracks or untracks the `state` option once per distinct value. */
207
+ function syncState(joined, current, tracked) {
208
+ if (current.stateKey === void 0 || current.stateKey === tracked.current) return;
209
+ tracked.current = current.stateKey;
210
+ if (current.state === null || current.state === void 0) joined.untrack();
211
+ else joined.track(current.state);
212
+ }
213
+ //#endregion
214
+ //#region src/react/search.ts
215
+ /**
216
+ * A search box's value, debounced. Pass `term` to `contains` (which
217
+ * escapes it) or `pattern` to `ilike`; both are `undefined` while empty.
218
+ *
219
+ * ```tsx
220
+ * const search = useDebouncedSearch();
221
+ * useQuery(q.customers.findMany({ where: search.term ? { name: { contains: search.term } } : {} }));
222
+ * ```
223
+ */
224
+ function useDebouncedSearch(initial = "", options = {}) {
225
+ const delayMs = options.delayMs ?? 250;
226
+ const minLength = options.minLength ?? 1;
227
+ const [value, setValue] = useState(initial);
228
+ const [settled, setSettled] = useState(initial);
229
+ useEffect(() => {
230
+ if (value === settled) return;
231
+ const timer = setTimeout(() => {
232
+ setSettled(value);
233
+ }, delayMs);
234
+ return () => {
235
+ clearTimeout(timer);
236
+ };
237
+ }, [
238
+ value,
239
+ settled,
240
+ delayMs
241
+ ]);
242
+ const trimmed = settled.trim();
243
+ const term = trimmed.length >= minLength ? trimmed : void 0;
244
+ return {
245
+ value,
246
+ setValue,
247
+ term,
248
+ pattern: term === void 0 ? void 0 : `%${escapeLike(term)}%`,
249
+ pending: value !== settled
250
+ };
251
+ }
252
+ //#endregion
253
+ //#region src/react/storage.ts
254
+ /** Re-sign this share of the TTL before the URL expires. */
255
+ const REFRESH_AT = .9;
256
+ /**
257
+ * A signed URL for an object, signed again before it expires. Pass `null`
258
+ * as the target to pause. Connect the bucket with `cacheSignedUrls: true`
259
+ * so components showing the same object share one URL.
260
+ *
261
+ * ```tsx
262
+ * const { url } = useSignedUrl(avatars, user ? { userId: user.id } : null, { ttl: 'hour' });
263
+ * ```
264
+ */
265
+ function useSignedUrl(bucket, target, options = {}) {
266
+ const key = target === null || target === void 0 ? null : JSON.stringify([target, options]);
267
+ const [state, setState] = useState({
268
+ key: null,
269
+ url: void 0,
270
+ error: void 0
271
+ });
272
+ const latest = useRef({
273
+ target,
274
+ options
275
+ });
276
+ latest.current = {
277
+ target,
278
+ options
279
+ };
280
+ const ttl = ttlSeconds(options.ttl);
281
+ useEffect(() => {
282
+ if (key === null) return;
283
+ let active = true;
284
+ const sign = () => {
285
+ const current = latest.current.target;
286
+ if (current === null || current === void 0) return;
287
+ bucket.signedUrl(current, latest.current.options).then((result) => {
288
+ if (!active) return;
289
+ if (!result.ok) {
290
+ setState((last) => ({
291
+ key,
292
+ url: last.key === key ? last.url : void 0,
293
+ error: result.error
294
+ }));
295
+ return;
296
+ }
297
+ setState({
298
+ key,
299
+ url: result.data,
300
+ error: void 0
301
+ });
302
+ });
303
+ };
304
+ sign();
305
+ const timer = setInterval(sign, ttl * 1e3 * REFRESH_AT);
306
+ return () => {
307
+ active = false;
308
+ clearInterval(timer);
309
+ };
310
+ }, [
311
+ bucket,
312
+ key,
313
+ ttl
314
+ ]);
315
+ const fresh = key !== null && state.key === key;
316
+ return {
317
+ url: fresh ? state.url : void 0,
318
+ error: fresh ? state.error : void 0,
319
+ loading: key !== null && (!fresh || state.url === void 0 && !state.error)
320
+ };
321
+ }
322
+ const IDLE = {
323
+ status: "idle",
324
+ progress: 0,
325
+ data: void 0,
326
+ error: void 0
327
+ };
328
+ /**
329
+ * Uploads to a connected bucket with progress, abort and status state.
330
+ * Unmounting aborts the upload in flight.
331
+ *
332
+ * ```tsx
333
+ * const avatar = useUpload(avatars, { onSuccess: ({ path }) => save(path) });
334
+ * <input type="file" onChange={(e) => avatar.upload({ userId }, e.target.files[0], { upsert: true })} />
335
+ * <progress value={avatar.progress} />
336
+ * ```
337
+ */
338
+ function useUpload(bucket, options = {}) {
339
+ const [state, setState] = useState(IDLE);
340
+ const latest = useRef({
341
+ controller: void 0,
342
+ options
343
+ });
344
+ latest.current.options = options;
345
+ useEffect(() => () => {
346
+ latest.current.controller?.abort();
347
+ }, []);
348
+ const calls = useMemo(() => {
349
+ const stop = () => {
350
+ latest.current.controller?.abort();
351
+ latest.current.controller = void 0;
352
+ setState(IDLE);
353
+ };
354
+ return {
355
+ upload: async (target, body, uploadOptions) => {
356
+ latest.current.controller?.abort();
357
+ const controller = new AbortController();
358
+ latest.current.controller = controller;
359
+ const mine = () => latest.current.controller === controller;
360
+ setState({
361
+ ...IDLE,
362
+ status: "uploading"
363
+ });
364
+ let result;
365
+ try {
366
+ result = await bucket.upload(target, body, {
367
+ ...uploadOptions,
368
+ signal: controller.signal,
369
+ onProgress: (progress) => {
370
+ if (mine()) setState((last) => ({
371
+ ...last,
372
+ progress
373
+ }));
374
+ }
375
+ });
376
+ } catch (cause) {
377
+ result = err(toDbError(cause));
378
+ }
379
+ if (!mine() || controller.signal.aborted) return result;
380
+ latest.current.controller = void 0;
381
+ if (result.ok) {
382
+ setState({
383
+ status: "done",
384
+ progress: 1,
385
+ data: result.data,
386
+ error: void 0
387
+ });
388
+ latest.current.options.onSuccess?.(result.data);
389
+ } else {
390
+ setState((last) => ({
391
+ ...last,
392
+ status: "error",
393
+ error: result.error
394
+ }));
395
+ latest.current.options.onError?.(result.error);
396
+ }
397
+ return result;
398
+ },
399
+ abort: stop,
400
+ reset: stop
401
+ };
402
+ }, [bucket]);
403
+ return {
404
+ ...state,
405
+ ...calls
406
+ };
407
+ }
408
+ //#endregion
409
+ export { useAction as a, usePresence as i, useUpload as n, useActionForm as o, useDebouncedSearch as r, useSignedUrl as t };
@@ -0,0 +1,83 @@
1
+ import { a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
2
+ import { t as BetterSupabase } from "../define-CJJkkr1-.js";
3
+ import { t as BetterServer } from "../server-CeVeeXwz.js";
4
+ import { a as AuthorizedContext, c as Unwrapped, i as AuthorizeOptions, n as ActionParsed, o as BlockActionOptions, r as ActionResult, s as BlockRequireOptions } from "../kit-B5tid-q5.js";
5
+ import { t as RefusalRedirects } from "../refusal-D1rgbzNq.js";
6
+ import { n as FrameworkOptions, t as FrameworkLocals } from "../framework-DuVb4Xa8.js";
7
+ import { t as Validated } from "../shared-DDSjEGDR.js";
8
+ import { AnyEntry, Contributions } from "@supabase/middleware";
9
+ import { StandardSchemaV1 } from "@standard-schema/spec";
10
+ //#region src/bridges/react-router.d.ts
11
+ /** The part of React Router's `RouterContextProvider` the bridge writes. */
12
+ interface ReactRouterContext<Key, Value> {
13
+ set(key: Key, value: Value): void;
14
+ }
15
+ /** React Router's server middleware, typed structurally so the package does not import `react-router`. */
16
+ type ReactRouterMiddleware<Key, Value> = (args: {
17
+ readonly request: Request;
18
+ readonly context: ReactRouterContext<Key, Value>;
19
+ }, next: () => Promise<Response>) => Promise<Response>;
20
+ interface ToReactRouterOptions<Key, Value> {
21
+ /**
22
+ * The host's env object for `getEnv`, e.g.
23
+ * `({ context }) => context.get(cloudflareContext).env` on Workers.
24
+ */
25
+ readonly env?: (args: Parameters<ReactRouterMiddleware<Key, Value>>[0]) => unknown;
26
+ }
27
+ /**
28
+ * Runs an entry array as React Router server middleware. The contributions
29
+ * are set under `key` (a `createContext()` key), so loaders and actions
30
+ * read `context.get(key).db`.
31
+ *
32
+ * ```ts title="app/root.tsx"
33
+ * export const supabase = createContext<BetterSupabaseContributions<...>>()
34
+ * export const middleware = [toReactRouter([withBetterSupabase(server)], supabase)]
35
+ * ```
36
+ */
37
+ export declare function toReactRouter<const Entries extends readonly AnyEntry[], Key>(entries: Entries & Validated<Entries>, key: Key, options?: ToReactRouterOptions<Key, Contributions<Entries>>): ReactRouterMiddleware<Key, Contributions<Entries>>;
38
+ //#endregion
39
+ //#region src/react-router/create.d.ts
40
+ /** React Router's `RouterContextProvider`, typed structurally. */
41
+ interface ReactRouterContextProvider {
42
+ get(key: never): unknown;
43
+ set(key: never, value: never): void;
44
+ }
45
+ /** The arguments of a loader, action or middleware. */
46
+ interface ReactRouterArgs {
47
+ readonly request: Request;
48
+ readonly context: ReactRouterContextProvider;
49
+ readonly params?: Readonly<Record<string, string | undefined>>;
50
+ }
51
+ interface ReactRouterOptions extends FrameworkOptions {
52
+ /** `createContext` from `react-router`; the factory makes its own context key. */
53
+ readonly createContext: () => unknown;
54
+ /**
55
+ * The host's env object for `getEnv`, e.g.
56
+ * `({ context }) => context.get(cloudflareContext).env` on Workers.
57
+ */
58
+ readonly platformEnv?: (args: ReactRouterArgs) => unknown;
59
+ }
60
+ interface BetterReactRouter<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
61
+ /** The context key the middleware sets: `context.get(bs.contextKey)`, or `bs.locals(args)`. */
62
+ readonly contextKey: unknown;
63
+ /**
64
+ * Server middleware for `root.tsx`: verifies the caller, refreshes the
65
+ * session cookie on navigations and form posts, and sets the context.
66
+ */
67
+ readonly middleware: (args: ReactRouterArgs, next: () => Promise<Response>) => Promise<Response>;
68
+ /** `db`, `bs`, `auth`, `tenant` and the serializable `session` of the request. */
69
+ locals(args: ReactRouterArgs): FrameworkLocals<M, F, E, C, P>;
70
+ /**
71
+ * A loader that runs the guard first. A refused caller gets a redirect to
72
+ * `signIn` or `mfa` when configured, else a thrown Problem Details
73
+ * response for the `ErrorBoundary`. `Result`s unwrap, and a failed one
74
+ * is thrown the same way.
75
+ */
76
+ loader<A extends ReactRouterArgs, T, R extends boolean = false>(options: BlockRequireOptions<C, P, R>, fn: (args: A, ctx: FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>) => T): (args: A) => Promise<Unwrapped<Awaited<T>>>;
77
+ /** An action returning an `ActionResult`, for `useActionData` or `useAction`. */
78
+ action<S extends StandardSchemaV1 | undefined, T, A extends ReactRouterArgs = ReactRouterArgs, R extends boolean = false>(options: BlockActionOptions<S, C, P, R>, fn: (input: ActionParsed<S>, ctx: FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>, args: A) => T): (args: A) => Promise<ActionResult<Unwrapped<Awaited<T>>>>;
79
+ }
80
+ /** React Router integration: middleware, guarded loaders and actions. */
81
+ export declare function createReactRouter<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options: ReactRouterOptions): BetterReactRouter<M, F, E, C, P>;
82
+ //#endregion
83
+ export type { ActionResult, AuthorizeOptions, AuthorizedContext, BetterReactRouter, BlockActionOptions, BlockRequireOptions, FrameworkLocals, FrameworkOptions, ReactRouterArgs, ReactRouterContext, ReactRouterContextProvider, ReactRouterMiddleware, ReactRouterOptions, RefusalRedirects, ToReactRouterOptions };
@@ -0,0 +1,89 @@
1
+ import { a as problemResponse } from "../problem-BreOl8b8.js";
2
+ import { c as extendServer, n as flushEvents, s as createServer } from "../adapter-Bc1o3zyy.js";
3
+ import { o as settle, t as defaultExpose } from "../respond-BUgsXNgk.js";
4
+ import { i as requireCaller, o as runAction } from "../kit-Fm-Fv7q5.js";
5
+ import { n as bufferInPlace, t as around } from "../shared-CBxosKK3.js";
6
+ import { i as localsOf, n as actionInput, r as frameworkEntry } from "../framework-CONDyPYx.js";
7
+ import { r as refusalResponse } from "../refusal-CeJWxmkH.js";
8
+ //#region src/bridges/react-router.ts
9
+ /**
10
+ * Runs an entry array as React Router server middleware. The contributions
11
+ * are set under `key` (a `createContext()` key), so loaders and actions
12
+ * read `context.get(key).db`.
13
+ *
14
+ * ```ts title="app/root.tsx"
15
+ * export const supabase = createContext<BetterSupabaseContributions<...>>()
16
+ * export const middleware = [toReactRouter([withBetterSupabase(server)], supabase)]
17
+ * ```
18
+ */
19
+ function toReactRouter(entries, key, options = {}) {
20
+ const run = around(entries);
21
+ return (args, next) => {
22
+ const { request, context } = args;
23
+ bufferInPlace(request);
24
+ return run(request, options.env?.(args), async (contributions) => {
25
+ context.set(key, contributions);
26
+ return next();
27
+ });
28
+ };
29
+ }
30
+ //#endregion
31
+ //#region src/react-router/create.ts
32
+ /** React Router integration: middleware, guarded loaders and actions. */
33
+ function createReactRouter(betterSupabase, options) {
34
+ const server = createServer(betterSupabase, options);
35
+ const expose = options.exposeErrors ?? defaultExpose();
36
+ const run = around([frameworkEntry(server, options, expose)]);
37
+ const key = options.createContext();
38
+ const locals = (args) => {
39
+ let value;
40
+ try {
41
+ value = args.context.get(key);
42
+ } catch {
43
+ value = void 0;
44
+ }
45
+ if (typeof value !== "object" || value === null || !("bs" in value)) throw new TypeError("better-supabase: no context; add bs.middleware to the root route's middleware export");
46
+ return value;
47
+ };
48
+ return extendServer(server, {
49
+ contextKey: key,
50
+ middleware(args, next) {
51
+ bufferInPlace(args.request);
52
+ return run(args.request, options.platformEnv?.(args), async (contributions) => {
53
+ args.context.set(key, localsOf(contributions));
54
+ const response = await next();
55
+ flushEvents(server, options.waitUntil);
56
+ return response;
57
+ });
58
+ },
59
+ locals,
60
+ loader(loaderOptions, fn) {
61
+ return async (args) => {
62
+ const scope = locals(args);
63
+ const caller = await requireCaller(scope.bs.auth, loaderOptions, scope.tenant);
64
+ if ("kind" in caller) throw refusalResponse(caller, args.request, options, expose);
65
+ const ctx = {
66
+ ...scope,
67
+ ...caller
68
+ };
69
+ const settled = await settle(() => fn(args, ctx));
70
+ if (!settled.ok) throw problemResponse(settled.error, {
71
+ instance: new URL(args.request.url).pathname,
72
+ expose
73
+ });
74
+ return settled.data;
75
+ };
76
+ },
77
+ action(actionOptions, fn) {
78
+ return async (args) => {
79
+ const scope = locals(args);
80
+ return await runAction(scope.bs.auth, actionOptions, await actionInput(args.request), scope.tenant, (parsed, caller) => fn(parsed, {
81
+ ...scope,
82
+ ...caller
83
+ }, args));
84
+ };
85
+ }
86
+ });
87
+ }
88
+ //#endregion
89
+ export { createReactRouter, toReactRouter };
@@ -0,0 +1,38 @@
1
+ import { t as joinTopic } from "./channels-CkgQ_X60.js";
2
+ //#region src/blocks/react-topic.ts
3
+ /**
4
+ * Joins a private topic and returns the function that leaves it. Watches on
5
+ * the same client and topic share one channel, as `defineTopic` subscriptions
6
+ * do, and the channel closes when the last one leaves.
7
+ */
8
+ function watchTopic(supabase, topic, watch) {
9
+ let joined = false;
10
+ let left = false;
11
+ let leave;
12
+ try {
13
+ ({leave} = joinTopic(supabase, topic, true, false, false, {
14
+ onStatus: (status) => {
15
+ if (left) return;
16
+ if (status === "subscribed") {
17
+ if (joined) watch.onRejoin();
18
+ joined = true;
19
+ }
20
+ watch.onStatus(status);
21
+ },
22
+ receive: (message) => {
23
+ if (!left) watch.onMessage(message.event, message.payload);
24
+ }
25
+ }));
26
+ } catch {
27
+ watch.onStatus("error");
28
+ return () => void 0;
29
+ }
30
+ return () => {
31
+ if (left) return;
32
+ left = true;
33
+ watch.onStatus("closed");
34
+ queueMicrotask(() => void leave());
35
+ };
36
+ }
37
+ //#endregion
38
+ export { watchTopic as t };