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,361 @@
1
+ import { n as dbError } from "../../errors-B11Duf73.js";
2
+ import { r as err, s as toDbError, t as AsyncResult } from "../../result-DzUbqgdW.js";
3
+ import { i as toBase64, r as fromBase64 } from "../../base64-D2gsioCY.js";
4
+ import { t as bindClient } from "../../bind-l4kAvYSv.js";
5
+ import { n as linkParams, r as signInWithOAuthBrowser, t as handleAuthDeepLink } from "../../auth-link-DrDX9KOT.js";
6
+ //#region src/client/native/auto-refresh.ts
7
+ /**
8
+ * Refreshes the Supabase session only while the app is in the foreground,
9
+ * as supabase-js requires on React Native. Returns a function that removes
10
+ * the listener and stops refreshing.
11
+ *
12
+ * ```ts
13
+ * import { AppState } from 'react-native';
14
+ * autoRefreshOnForeground(supabase, AppState);
15
+ * ```
16
+ */
17
+ function autoRefreshOnForeground(supabase, appState) {
18
+ const apply = (state) => {
19
+ if (state === "active") supabase.auth.startAutoRefresh();
20
+ else supabase.auth.stopAutoRefresh();
21
+ };
22
+ if (appState.currentState === "active") apply("active");
23
+ const subscription = appState.addEventListener("change", apply);
24
+ return () => {
25
+ subscription.remove();
26
+ supabase.auth.stopAutoRefresh();
27
+ };
28
+ }
29
+ //#endregion
30
+ //#region src/client/native/key-value.ts
31
+ function isMmkv(store) {
32
+ return "getString" in store;
33
+ }
34
+ function keyValue(store) {
35
+ if (!isMmkv(store)) return {
36
+ get: (key) => store.getItem(key),
37
+ set: (key, value) => store.setItem(key, value),
38
+ remove: (key) => store.removeItem(key)
39
+ };
40
+ return {
41
+ get: (key) => Promise.resolve(store.getString(key) ?? null),
42
+ set: (key, value) => {
43
+ store.set(key, value);
44
+ return Promise.resolve();
45
+ },
46
+ remove: (key) => {
47
+ if (store.remove) store.remove(key);
48
+ else store.delete?.(key);
49
+ return Promise.resolve();
50
+ }
51
+ };
52
+ }
53
+ //#endregion
54
+ //#region src/client/native/storage.ts
55
+ const UNSAFE = /[^\w.-]/g;
56
+ /** FNV-1a, enough to tell apart keys that map to the same safe name. */
57
+ function hashOf(text) {
58
+ let hash = 2166136261;
59
+ for (const char of text) {
60
+ hash ^= char.codePointAt(0) ?? 0;
61
+ hash = Math.imul(hash, 16777619);
62
+ }
63
+ return (hash >>> 0).toString(36);
64
+ }
65
+ /**
66
+ * expo-secure-store keys allow letters, digits, `.`, `-` and `_` only. A key
67
+ * that needs no change keeps its name (sessions stored before stay
68
+ * readable); one that does gets a hash suffix, so `a:b` and `a/b` differ.
69
+ */
70
+ function safeKey(key) {
71
+ const safe = key.replaceAll(UNSAFE, "_");
72
+ return safe === key ? key : `${safe}-${hashOf(key)}`;
73
+ }
74
+ /** `<count>` or `<count>b` in `<key>.chunks`. */
75
+ const POINTER = /^([1-9]\d*)(b?)$/;
76
+ /**
77
+ * Supabase Auth storage on the device keychain (`expo-secure-store`),
78
+ * split into chunks so sessions above the platform's value size fit.
79
+ * Operations on one key run one at a time, and a write moves the pointer
80
+ * only after every chunk is stored, so a reader never joins chunks of two
81
+ * values and a write that fails part way keeps the previous value.
82
+ *
83
+ * ```ts
84
+ * import * as SecureStore from 'expo-secure-store';
85
+ * createClient(url, key, { auth: { storage: secureStorage(SecureStore) } });
86
+ * ```
87
+ */
88
+ function secureStorage(store, options = {}) {
89
+ const size = options.chunkSize ?? 1800;
90
+ const extra = options.storeOptions;
91
+ const get = (key) => extra ? store.getItemAsync(key, extra) : store.getItemAsync(key);
92
+ const set = (key, value) => extra ? store.setItemAsync(key, value, extra) : store.setItemAsync(key, value);
93
+ const remove = (key) => extra ? store.deleteItemAsync(key, extra) : store.deleteItemAsync(key);
94
+ if (!Number.isInteger(size) || size < 1) throw new TypeError("better-supabase: chunkSize must be a positive integer");
95
+ const countKey = (key) => `${safeKey(key)}.chunks`;
96
+ const chunkKey = (key, slot, index) => `${safeKey(key)}.${index}${slot}`;
97
+ const pointerOf = async (key) => {
98
+ const raw = await get(countKey(key));
99
+ const match = raw === null ? null : POINTER.exec(raw);
100
+ return match ? {
101
+ count: Number(match[1]),
102
+ slot: match[2] === "b" ? "b" : ""
103
+ } : {
104
+ count: 0,
105
+ slot: "b"
106
+ };
107
+ };
108
+ const removeChunks = async (key, slot, count) => {
109
+ await Promise.all(Array.from({ length: count }, (_, index) => remove(chunkKey(key, slot, index))));
110
+ };
111
+ const queues = /* @__PURE__ */ new Map();
112
+ /** Runs `task` after every earlier operation on `key` settled. */
113
+ const serial = (key, task) => {
114
+ const run = (queues.get(key) ?? Promise.resolve()).then(task);
115
+ const settled = run.then(() => void 0, () => void 0);
116
+ queues.set(key, settled);
117
+ settled.then(() => {
118
+ if (queues.get(key) === settled) queues.delete(key);
119
+ });
120
+ return run;
121
+ };
122
+ return {
123
+ getItem: (key) => serial(key, async () => {
124
+ const { count, slot } = await pointerOf(key);
125
+ if (count === 0) return null;
126
+ const chunks = await Promise.all(Array.from({ length: count }, (_, index) => get(chunkKey(key, slot, index))));
127
+ if (chunks.some((chunk) => chunk === null)) return null;
128
+ return chunks.join("");
129
+ }),
130
+ setItem: (key, value) => serial(key, async () => {
131
+ const chunks = [];
132
+ for (let start = 0; start < value.length; start += size) chunks.push(value.slice(start, start + size));
133
+ if (chunks.length === 0) chunks.push("");
134
+ const previous = await pointerOf(key);
135
+ const slot = previous.slot === "b" ? "" : "b";
136
+ await Promise.all(chunks.map((chunk, index) => set(chunkKey(key, slot, index), chunk)));
137
+ await set(countKey(key), `${chunks.length}${slot}`);
138
+ await removeChunks(key, previous.slot, previous.count);
139
+ }),
140
+ removeItem: (key) => serial(key, async () => {
141
+ const previous = await pointerOf(key);
142
+ await remove(countKey(key));
143
+ await removeChunks(key, previous.slot, previous.count);
144
+ })
145
+ };
146
+ }
147
+ //#endregion
148
+ //#region src/client/native/large-storage.ts
149
+ const VERSION = "v1";
150
+ const IV_BYTES = 12;
151
+ function globalCrypto() {
152
+ const { crypto } = globalThis;
153
+ return crypto?.subtle && crypto.getRandomValues ? crypto : void 0;
154
+ }
155
+ /**
156
+ * Supabase Auth storage for sessions of any size: the session is encrypted
157
+ * with AES-GCM and kept in MMKV or AsyncStorage, and only its key lives in
158
+ * the keychain. A key that no longer decrypts (the app was reinstalled and
159
+ * one store kept its data) reads as signed out and is replaced on the next
160
+ * sign-in.
161
+ *
162
+ * ```ts
163
+ * import * as SecureStore from 'expo-secure-store';
164
+ * import AsyncStorage from '@react-native-async-storage/async-storage';
165
+ * createClient(url, key, { auth: { storage: largeSecureStorage({ secureStore: SecureStore, storage: AsyncStorage }) } });
166
+ * ```
167
+ */
168
+ function largeSecureStorage(options) {
169
+ const store = keyValue(options.storage);
170
+ const secure = options.secureStore;
171
+ const extra = options.storeOptions;
172
+ const keyName = (key) => `${safeKey(key)}.aes`;
173
+ const getSecret = (key) => extra ? secure.getItemAsync(keyName(key), extra) : secure.getItemAsync(keyName(key));
174
+ const setSecret = (key, value) => extra ? secure.setItemAsync(keyName(key), value, extra) : secure.setItemAsync(keyName(key), value);
175
+ const removeSecret = (key) => extra ? secure.deleteItemAsync(keyName(key), extra) : secure.deleteItemAsync(keyName(key));
176
+ const cryptoOf = () => {
177
+ const found = options.crypto ?? globalCrypto();
178
+ if (!found) throw new Error("better-supabase: largeSecureStorage needs WebCrypto; pass { crypto } from react-native-quick-crypto");
179
+ return found;
180
+ };
181
+ const importKey = (raw) => cryptoOf().subtle.importKey("raw", raw, "AES-GCM", false, ["encrypt", "decrypt"]);
182
+ return {
183
+ async getItem(key) {
184
+ const [secret, sealed] = await Promise.all([getSecret(key), store.get(key)]);
185
+ if (secret === null || sealed === null) return null;
186
+ const [version, iv, data] = sealed.split(".");
187
+ if (version !== VERSION || iv === void 0 || data === void 0) return null;
188
+ try {
189
+ const plain = await cryptoOf().subtle.decrypt({
190
+ name: "AES-GCM",
191
+ iv: fromBase64(iv)
192
+ }, await importKey(fromBase64(secret)), fromBase64(data));
193
+ return new TextDecoder().decode(plain);
194
+ } catch {
195
+ return null;
196
+ }
197
+ },
198
+ async setItem(key, value) {
199
+ const crypto = cryptoOf();
200
+ const raw = crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(32));
201
+ const iv = crypto.getRandomValues(new Uint8Array(IV_BYTES));
202
+ const sealed = await crypto.subtle.encrypt({
203
+ name: "AES-GCM",
204
+ iv
205
+ }, await importKey(raw), new TextEncoder().encode(value));
206
+ await setSecret(key, toBase64(raw));
207
+ await store.set(key, `${VERSION}.${toBase64(iv)}.${toBase64(new Uint8Array(sealed))}`);
208
+ },
209
+ async removeItem(key) {
210
+ await Promise.all([store.remove(key), removeSecret(key)]);
211
+ }
212
+ };
213
+ }
214
+ //#endregion
215
+ //#region src/client/native/persist.ts
216
+ /**
217
+ * Persists the query cache to MMKV or AsyncStorage, so a cold start shows
218
+ * the last rows before the first fetch. The provider's `clearOnUserChange`
219
+ * drops them when another user signs in.
220
+ *
221
+ * ```tsx
222
+ * <PersistQueryClientProvider client={queryClient} persistOptions={{ persister: persistQueryCache(storage) }}>
223
+ * ```
224
+ */
225
+ function persistQueryCache(storage, options = {}) {
226
+ const store = keyValue(storage);
227
+ const key = options.key ?? "better-supabase.query-cache";
228
+ const throttleMs = options.throttleMs ?? 1e3;
229
+ let pending;
230
+ let timer;
231
+ let writing = Promise.resolve();
232
+ const flush = () => {
233
+ timer = void 0;
234
+ const next = pending;
235
+ pending = void 0;
236
+ if (!next) return writing;
237
+ writing = writing.then(() => store.set(key, next.value));
238
+ return writing;
239
+ };
240
+ return {
241
+ persistClient(client) {
242
+ pending = { value: JSON.stringify(client) };
243
+ timer ??= setTimeout(() => void flush(), throttleMs);
244
+ return Promise.resolve();
245
+ },
246
+ async restoreClient() {
247
+ const raw = await store.get(key);
248
+ let restored;
249
+ if (raw !== null) try {
250
+ restored = JSON.parse(raw);
251
+ } catch {}
252
+ return restored;
253
+ },
254
+ async removeClient() {
255
+ if (timer !== void 0) clearTimeout(timer);
256
+ timer = void 0;
257
+ pending = void 0;
258
+ await writing;
259
+ await store.remove(key);
260
+ }
261
+ };
262
+ }
263
+ //#endregion
264
+ //#region src/client/native/query.ts
265
+ const NOOP = () => void 0;
266
+ /**
267
+ * Wires TanStack Query to the app lifecycle on React Native: queries count
268
+ * as focused while the app is active, and as online while NetInfo reports
269
+ * a connection (an unreachable internet counts as offline). Returns a
270
+ * function that removes every listener.
271
+ *
272
+ * ```ts
273
+ * import { focusManager, onlineManager } from '@tanstack/react-query';
274
+ * import NetInfo from '@react-native-community/netinfo';
275
+ * import { AppState } from 'react-native';
276
+ * syncQueryWithApp({ focusManager, onlineManager, appState: AppState, netInfo: NetInfo, supabase });
277
+ * ```
278
+ */
279
+ function syncQueryWithApp(options) {
280
+ const { focusManager, onlineManager, appState, netInfo, supabase } = options;
281
+ focusManager.setEventListener((setFocused) => {
282
+ setFocused(appState.currentState === "active");
283
+ const subscription = appState.addEventListener("change", (state) => {
284
+ setFocused(state === "active");
285
+ });
286
+ return () => {
287
+ subscription.remove();
288
+ };
289
+ });
290
+ if (onlineManager && netInfo) onlineManager.setEventListener((setOnline) => netInfo.addEventListener((state) => {
291
+ setOnline(state.isConnected === true && state.isInternetReachable !== false);
292
+ }));
293
+ const stopRefresh = supabase ? autoRefreshOnForeground(supabase, appState) : void 0;
294
+ return () => {
295
+ focusManager.setEventListener(NOOP);
296
+ if (onlineManager && netInfo) onlineManager.setEventListener(NOOP);
297
+ stopRefresh?.();
298
+ };
299
+ }
300
+ //#endregion
301
+ //#region src/client/native/upload.ts
302
+ const TYPES = {
303
+ jpg: "image/jpeg",
304
+ jpeg: "image/jpeg",
305
+ png: "image/png",
306
+ gif: "image/gif",
307
+ webp: "image/webp",
308
+ heic: "image/heic",
309
+ heif: "image/heif",
310
+ mp4: "video/mp4",
311
+ mov: "video/quicktime",
312
+ m4a: "audio/mp4",
313
+ mp3: "audio/mpeg",
314
+ pdf: "application/pdf",
315
+ json: "application/json",
316
+ txt: "text/plain",
317
+ csv: "text/csv"
318
+ };
319
+ /** The content type for a file URI's extension, ignoring a query or fragment. */
320
+ function contentTypeOf(uri) {
321
+ const path = uri.split(/[?#]/, 1)[0] ?? uri;
322
+ const dot = path.lastIndexOf(".");
323
+ if (dot === -1 || dot < path.lastIndexOf("/")) return void 0;
324
+ return TYPES[path.slice(dot + 1).toLowerCase()];
325
+ }
326
+ /**
327
+ * Uploads a local file (an `expo-image-picker` or `expo-document-picker`
328
+ * URI) to a connected bucket. The file is read into an `ArrayBuffer`, as
329
+ * React Native's `Blob` can't be uploaded; the content type comes from the
330
+ * option, the response or the extension.
331
+ *
332
+ * ```ts
333
+ * const picked = await ImagePicker.launchImageLibraryAsync();
334
+ * await uploadFromUri(avatars, { userId }, picked.assets[0].uri, { upsert: true });
335
+ * ```
336
+ */
337
+ function uploadFromUri(bucket, target, uri, options = {}) {
338
+ const { fetch: read = (value) => fetch(value), ...upload } = options;
339
+ return AsyncResult.from(async () => {
340
+ let body;
341
+ let type;
342
+ try {
343
+ const response = await read(uri);
344
+ if (!response.ok) return err(unreadable(uri, response.status));
345
+ type = response.headers.get("content-type") ?? void 0;
346
+ body = await response.arrayBuffer();
347
+ } catch (cause) {
348
+ return err(toDbError(cause));
349
+ }
350
+ const contentType = upload.contentType ?? contentTypeOf(uri) ?? type;
351
+ return bucket.upload(target, body, {
352
+ ...upload,
353
+ ...contentType ? { contentType } : {}
354
+ });
355
+ });
356
+ }
357
+ function unreadable(uri, status) {
358
+ return dbError("invalid_input", `better-supabase: could not read ${uri} (status ${String(status)})`);
359
+ }
360
+ //#endregion
361
+ export { autoRefreshOnForeground, contentTypeOf, bindClient as createNativeClient, handleAuthDeepLink, keyValue, largeSecureStorage, linkParams, persistQueryCache, secureStorage, signInWithOAuthBrowser, syncQueryWithApp, uploadFromUri };
@@ -0,0 +1,277 @@
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ import { r as invalidateTables } from "./user-change-XzvgafU4.js";
3
+ import { n as sessionUserId, r as specKey, t as claimedTenant } from "./keys-4MnkWTTh.js";
4
+ import { n as liveQuery, t as liveCount } from "./live-CTAZQkwl.js";
5
+ //#region src/bindings/client.ts
6
+ /** The caller of the client's auth store. */
7
+ function callerOf(auth) {
8
+ return {
9
+ status: auth.status,
10
+ userId: auth.user?.id ?? null
11
+ };
12
+ }
13
+ /**
14
+ * The caller of a plain supabase-js client, for subscriptions made without
15
+ * the provider. `loading` until auth-js reports the first state.
16
+ */
17
+ function plainCaller(supabase) {
18
+ let caller = {
19
+ status: "loading",
20
+ userId: null
21
+ };
22
+ return {
23
+ current: () => caller,
24
+ subscribe: (listener) => {
25
+ const { data } = supabase.auth.onAuthStateChange((_event, session) => {
26
+ caller = {
27
+ status: session ? "signed-in" : "signed-out",
28
+ userId: session ? sessionUserId(session) : null
29
+ };
30
+ listener();
31
+ });
32
+ return () => {
33
+ data.subscription.unsubscribe();
34
+ };
35
+ }
36
+ };
37
+ }
38
+ /** Throws when `invalidate` has no query client to refetch with. */
39
+ function assertInvalidateClient(hook, options, queryClient) {
40
+ if (options?.invalidate && !queryClient) throw new Error(`better-supabase: ${hook}({ invalidate }) needs a queryClient on the provider or in the options`);
41
+ }
42
+ /**
43
+ * Subscribes to a topic by its rendered name. Returns the function that
44
+ * leaves, or `undefined` when the name does not match the topic.
45
+ */
46
+ function startBroadcast(run) {
47
+ const matched = run.topic.match(run.name);
48
+ if (!matched) return void 0;
49
+ const { queryClient } = run;
50
+ const forward = (payload, message) => {
51
+ const current = run.latest();
52
+ const table = current.handlers;
53
+ (table?.[message.event] ?? table?.["*"])?.(payload, message);
54
+ const invalidate = current.options?.invalidate;
55
+ if (!invalidate || !queryClient) return;
56
+ if (typeof invalidate !== "function") {
57
+ invalidateTables(queryClient, invalidate);
58
+ return;
59
+ }
60
+ for (const queryKey of invalidate(message)) queryClient.invalidateQueries({ queryKey });
61
+ };
62
+ const self = run.latest().options?.self;
63
+ const subscription = run.topic.subscribe(run.supabase, matched, { "*": forward }, {
64
+ ...self === void 0 ? {} : { self },
65
+ onStatus: run.onStatus,
66
+ onInvalid: (message, issues) => run.latest().options?.onInvalid?.(message, issues)
67
+ });
68
+ return () => {
69
+ subscription.unsubscribe();
70
+ run.onStatus("closed");
71
+ };
72
+ }
73
+ /** The key a live subscription restarts on: spec, tenant and caller. */
74
+ function liveKey(client, spec, auth, options) {
75
+ if (!spec || auth.status === "loading") return null;
76
+ const tenant = options.tenant ?? claimedTenant(auth, client.betterSupabase.meta);
77
+ return JSON.stringify([
78
+ specKey(spec),
79
+ tenant ?? null,
80
+ auth.user?.id ?? null,
81
+ options.debounceMs ?? null
82
+ ]);
83
+ }
84
+ /** Invalidates the cached queries that read a table whenever one changes. */
85
+ function startLiveQuery(run) {
86
+ const { client, queryClient, options } = run;
87
+ const tenant = options.tenant ?? claimedTenant(run.auth, client.betterSupabase.meta);
88
+ const userId = run.auth.user?.id ?? null;
89
+ const live = liveQuery(client.betterSupabase, client.supabase, run.spec, {
90
+ onChange: (tables) => void invalidateTables(queryClient, tables),
91
+ onStatus: run.onStatus,
92
+ ...tenant === void 0 ? {} : { tenant },
93
+ ...userId === null ? {} : { user: userId },
94
+ ...options.debounceMs === void 0 ? {} : { debounceMs: options.debounceMs }
95
+ });
96
+ if (run.resumed) live.ready.then(() => void invalidateTables(queryClient, live.tables), () => void 0);
97
+ return () => {
98
+ live.unsubscribe();
99
+ };
100
+ }
101
+ /** Splits a count source into its spec and the seed's count and time. */
102
+ function countSource(source, options) {
103
+ const seed = source && "spec" in source ? source : void 0;
104
+ return {
105
+ spec: (seed ? seed.spec : source) ?? null,
106
+ initial: seed?.count ?? options.initial,
107
+ seedAt: seed?.at,
108
+ seeded: seed !== void 0 && seed.count !== null
109
+ };
110
+ }
111
+ const NO_COUNT = {
112
+ key: null,
113
+ count: void 0,
114
+ at: 0,
115
+ error: void 0
116
+ };
117
+ /** Refetches the count after each debounced change to a table it reads. */
118
+ function startLiveCount(run) {
119
+ const { client, key, options } = run;
120
+ const tenant = options.tenant ?? claimedTenant(run.auth, client.betterSupabase.meta);
121
+ const userId = run.auth.user?.id ?? null;
122
+ const live = liveCount(client.betterSupabase, client.supabase, client.db, run.spec, {
123
+ immediate: run.immediate,
124
+ ...run.since === void 0 ? {} : { since: run.since },
125
+ onCount: (count) => {
126
+ const at = Date.now();
127
+ run.onState(() => ({
128
+ key,
129
+ count,
130
+ at,
131
+ error: void 0
132
+ }));
133
+ },
134
+ onError: (error) => {
135
+ run.onState((last) => ({
136
+ key,
137
+ count: last.key === key ? last.count : void 0,
138
+ at: last.key === key ? last.at : 0,
139
+ error
140
+ }));
141
+ },
142
+ onStatus: run.onStatus,
143
+ ...tenant === void 0 ? {} : { tenant },
144
+ ...userId === null ? {} : { user: userId },
145
+ ...options.debounceMs === void 0 ? {} : { debounceMs: options.debounceMs }
146
+ });
147
+ return () => {
148
+ live.unsubscribe();
149
+ };
150
+ }
151
+ /** The count to show: the client's, unless a newer server seed arrived. */
152
+ function shownCount(state, key, source) {
153
+ const fresh = state.key === key;
154
+ const seedNewer = source.seedAt !== void 0 && source.seeded && source.seedAt > state.at;
155
+ return {
156
+ count: fresh && state.count !== void 0 && !seedNewer ? state.count : source.initial,
157
+ error: fresh ? state.error : void 0
158
+ };
159
+ }
160
+ const NO_HANDLERS = {};
161
+ /** Joins a presence topic by its rendered name, or `undefined` when it does not match. */
162
+ function joinPresence(supabase, topic, name, handlers) {
163
+ const matched = topic.match(name);
164
+ if (!matched) return void 0;
165
+ const joined = topic.subscribe(supabase, matched, NO_HANDLERS, handlers);
166
+ let tracked;
167
+ return {
168
+ track: async (state) => {
169
+ const result = await joined.track(state);
170
+ return result.ok ? void 0 : result.error;
171
+ },
172
+ untrack: async () => {
173
+ const result = await joined.untrack();
174
+ return result.ok ? void 0 : result.error;
175
+ },
176
+ sync(state) {
177
+ const key = state === void 0 ? void 0 : JSON.stringify(state);
178
+ if (key === void 0 || key === tracked) return;
179
+ tracked = key;
180
+ if (state === null || state === void 0) joined.untrack();
181
+ else joined.track(state);
182
+ },
183
+ leave() {
184
+ joined.unsubscribe();
185
+ }
186
+ };
187
+ }
188
+ /** The error `track` and `untrack` return before the join. */
189
+ const notJoined = () => Promise.resolve(dbError("invalid_request", "better-supabase: the presence topic is not joined"));
190
+ /**
191
+ * Tracks the runs of an action outside React: the inputs in flight, the
192
+ * last data and the last error. `latest` is read on each run, so the action
193
+ * and the callbacks can change between runs.
194
+ */
195
+ function createActionRunner(latest) {
196
+ const listeners = /* @__PURE__ */ new Set();
197
+ let inFlight = [];
198
+ let data;
199
+ let error;
200
+ let state = snapshot();
201
+ function snapshot() {
202
+ const pendingInputs = inFlight.map((item) => item.input);
203
+ return {
204
+ pending: inFlight.length > 0,
205
+ pendingInputs,
206
+ pendingInput: pendingInputs.at(-1),
207
+ data,
208
+ error
209
+ };
210
+ }
211
+ const emit = () => {
212
+ state = snapshot();
213
+ for (const listener of listeners) listener();
214
+ };
215
+ return {
216
+ current: () => state,
217
+ subscribe: (listener) => {
218
+ listeners.add(listener);
219
+ return () => {
220
+ listeners.delete(listener);
221
+ };
222
+ },
223
+ run: async (input) => {
224
+ const entry = { input };
225
+ inFlight = [...inFlight, entry];
226
+ error = void 0;
227
+ emit();
228
+ const done = () => {
229
+ inFlight = inFlight.filter((item) => item !== entry);
230
+ };
231
+ const { action, options } = latest();
232
+ let result;
233
+ try {
234
+ result = await action(input);
235
+ } catch (cause) {
236
+ done();
237
+ emit();
238
+ throw cause;
239
+ }
240
+ done();
241
+ if (result.ok) data = result.data;
242
+ else error = result.error;
243
+ emit();
244
+ if (result.ok) options.onSuccess?.(result.data, input);
245
+ else options.onError?.(result.error, input);
246
+ return result;
247
+ },
248
+ reset: () => {
249
+ data = void 0;
250
+ error = void 0;
251
+ emit();
252
+ }
253
+ };
254
+ }
255
+ /**
256
+ * One run per key: `update` restarts `start` when the key changes and stops
257
+ * the run when the key is `null`.
258
+ */
259
+ function keyed() {
260
+ let current;
261
+ return {
262
+ update: (key, start) => {
263
+ if (current?.key === key) return;
264
+ current?.stop?.();
265
+ current = key === null ? void 0 : {
266
+ key,
267
+ stop: start()
268
+ };
269
+ },
270
+ stop: () => {
271
+ current?.stop?.();
272
+ current = void 0;
273
+ }
274
+ };
275
+ }
276
+ //#endregion
277
+ export { createActionRunner as a, liveKey as c, shownCount as d, startBroadcast as f, countSource as i, notJoined as l, startLiveQuery as m, assertInvalidateClient as n, joinPresence as o, startLiveCount as p, callerOf as r, keyed as s, NO_COUNT as t, plainCaller as u };
@@ -0,0 +1,46 @@
1
+ //#region src/events/cloud-event.ts
2
+ /**
3
+ * A block event as a CloudEvent: `dev.better-supabase.support.started` with
4
+ * the event data and the actor (`actorId`) as `data` and the tenant as
5
+ * `partitionkey`.
6
+ */
7
+ function blockCloudEvent(event, options) {
8
+ return {
9
+ specversion: "1.0",
10
+ id: options.id?.() ?? crypto.randomUUID(),
11
+ source: options.source,
12
+ type: `${options.typePrefix ?? "dev.better-supabase"}.${event.type}`,
13
+ ...event.subject ? { subject: event.subject } : {},
14
+ time: (options.now?.() ?? event.time).toString(),
15
+ datacontenttype: "application/json",
16
+ data: event.actorId ? {
17
+ ...event.data,
18
+ actorId: event.actorId
19
+ } : event.data,
20
+ ...event.tenant ? { partitionkey: event.tenant } : {}
21
+ };
22
+ }
23
+ /**
24
+ * Sends a CloudEvent for every block event (`support.*`, `organization.*`, ...) to
25
+ * `sink`. Returns a function that stops forwarding. Like
26
+ * `forwardMutations`, sends are tracked on `betterSupabase.events`.
27
+ */
28
+ function forwardBlockEvents(betterSupabase, sink, options) {
29
+ const types = options.types;
30
+ return betterSupabase.events.on("block", (event) => {
31
+ if (types && !types.some((pattern) => pattern.endsWith(".*") ? event.type.startsWith(pattern.slice(0, -1)) : pattern === event.type)) return;
32
+ const events = [blockCloudEvent(event, options)];
33
+ const report = (error) => {
34
+ (options.onError ?? ((cause) => {
35
+ betterSupabase.events.logger.error("event sink failed", { cause });
36
+ }))(error, events);
37
+ };
38
+ try {
39
+ betterSupabase.events.track(Promise.resolve(sink.send(events)).catch(report));
40
+ } catch (error) {
41
+ report(error);
42
+ }
43
+ });
44
+ }
45
+ //#endregion
46
+ export { forwardBlockEvents as n, blockCloudEvent as t };