better-supabase 0.5.1 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/README.md +187 -46
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect-BKlaIu_M.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-Bo_NLT5n.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BCtlgDQx.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/mfa-Daak8ukG.d.ts +54 -0
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
  385. package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
  386. package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -22
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +313 -212
  413. package/dist/sql/index.js +34872 -6579
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
  430. package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +315 -41
  449. package/dist/testing/index.js +1046 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +461 -20
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +20 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +47 -11
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-CIdSQZad.js +0 -2
  504. package/dist/cli/gen-CjElD1Vw.js +0 -2241
  505. package/dist/cli/read-sets-VQcPgxU9.js +0 -436
  506. package/dist/cli/sql-CVx-1O8G.js +0 -373
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/index-CWMDdEr4.d.ts +0 -50
  512. package/dist/index-DOESKG27.d.ts +0 -100
  513. package/dist/index-DmXSxbLi.d.ts +0 -62
  514. package/dist/index-Dp2VDwog.d.ts +0 -161
  515. package/dist/jobs/index.d.ts +0 -226
  516. package/dist/jobs/index.js +0 -1007
  517. package/dist/json-schema-m1fiwKgN.js +0 -208
  518. package/dist/kit-events-CTFDfSwb.js +0 -60
  519. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  520. package/dist/kits-CGLLrNPd.js +0 -157
  521. package/dist/mfa-Cu96oJdw.d.ts +0 -30
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-B1mZ7CgQ.js +0 -660
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-CEPwlw2G.d.ts +0 -89
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -122
@@ -0,0 +1,199 @@
1
+ import { n as dbError } from "../errors-B11Duf73.js";
2
+ import { r as err } from "../result-DzUbqgdW.js";
3
+ import { n as watch, t as sqliteTables } from "../watch-Xuxrvxq-.js";
4
+ import { a as sqliteCompiler, c as quoteSqliteIdent, i as checkSqlite, l as sqliteValue, n as postgrestTimestamp, o as compileSqlite, r as powersyncExecutor, s as likeToGlob, t as fromSqliteError } from "../executor-Bq28caBo.js";
5
+ //#region src/powersync/auth.ts
6
+ /**
7
+ * Syncs while a user is signed in: connects on sign-in, and on sign-out
8
+ * (or a different user) disconnects and clears the local database. An app
9
+ * that starts signed out clears it too, since the rows may belong to a user
10
+ * whose session ended while the app was closed. Steps
11
+ * run one at a time in order. Returns a function that stops following the
12
+ * session and disconnects.
13
+ *
14
+ * ```ts
15
+ * useEffect(() => syncWithAuth(powersync, bs.auth, { connector }), []);
16
+ * ```
17
+ */
18
+ function syncWithAuth(db, auth, options) {
19
+ const clear = options.clearOnSignOut ?? true;
20
+ let user;
21
+ let stopped = false;
22
+ let queue = Promise.resolve();
23
+ const enqueue = (step) => {
24
+ queue = queue.then(step).catch((cause) => {
25
+ options.onError?.(cause);
26
+ });
27
+ };
28
+ const leave = () => clear ? db.disconnectAndClear() : db.disconnect();
29
+ const follow = () => {
30
+ if (stopped) return;
31
+ const snapshot = auth.current();
32
+ if (snapshot.status === "loading") return;
33
+ const next = snapshot.status === "signed-in" ? snapshot.user.id : null;
34
+ if (next === user) return;
35
+ const previous = user;
36
+ user = next;
37
+ if (previous === void 0 ? next === null && clear : previous !== null) enqueue(leave);
38
+ if (next !== null) enqueue(() => db.connect(options.connector));
39
+ };
40
+ follow();
41
+ const unsubscribe = auth.subscribe(follow);
42
+ return () => {
43
+ stopped = true;
44
+ unsubscribe();
45
+ enqueue(() => db.disconnect());
46
+ };
47
+ }
48
+ //#endregion
49
+ //#region src/powersync/connector.ts
50
+ const OUTCOMES = {
51
+ network: "retry",
52
+ timeout: "retry",
53
+ aborted: "retry",
54
+ rate_limited: "retry",
55
+ quota_exceeded: "retry",
56
+ serialization: "retry",
57
+ unauthorized: "retry",
58
+ unexpected: "retry",
59
+ conflict: "conflict",
60
+ stale: "conflict",
61
+ foreign_key: "conflict",
62
+ not_found: "discard",
63
+ forbidden: "discard",
64
+ check: "discard",
65
+ not_null: "discard",
66
+ exclusion: "discard",
67
+ invalid_input: "discard",
68
+ invalid_value: "discard",
69
+ raised: "discard",
70
+ invalid_request: "discard",
71
+ max_affected: "discard",
72
+ validation: "discard",
73
+ multiple_rows: "discard",
74
+ unsupported: "discard"
75
+ };
76
+ /**
77
+ * The default for a failed upload: transient errors retry, a newer server
78
+ * row is a conflict, and a change the server will never accept is
79
+ * discarded so it doesn't block the queue.
80
+ */
81
+ function uploadOutcome(kind) {
82
+ return OUTCOMES[kind];
83
+ }
84
+ function rejectedStore() {
85
+ let changes = [];
86
+ const listeners = /* @__PURE__ */ new Set();
87
+ const set = (next) => {
88
+ changes = next;
89
+ for (const listener of [...listeners]) listener();
90
+ };
91
+ return {
92
+ current: () => changes,
93
+ subscribe: (listener) => {
94
+ listeners.add(listener);
95
+ return () => {
96
+ listeners.delete(listener);
97
+ };
98
+ },
99
+ dismiss: (change) => {
100
+ set(change ? changes.filter((each) => each !== change) : []);
101
+ },
102
+ add: (change) => {
103
+ set([...changes, change]);
104
+ }
105
+ };
106
+ }
107
+ function replay(route, entry) {
108
+ if (typeof route === "function") return route(entry);
109
+ const data = entry.opData ?? {};
110
+ switch (entry.op) {
111
+ case "PUT": return route.upsert({
112
+ ...data,
113
+ id: entry.id
114
+ });
115
+ case "PATCH": return route.update(entry.id, data);
116
+ case "DELETE": return route.delete(entry.id);
117
+ default: return Promise.resolve(err(dbError("unsupported", `better-supabase: unknown PowerSync op ${entry.op}`)));
118
+ }
119
+ }
120
+ /**
121
+ * A PowerSync connector that authenticates with the Supabase session and
122
+ * replays queued changes through repositories. Changes upload in batches;
123
+ * a transient error keeps the batch queued for PowerSync's retry, and
124
+ * refused changes land in `rejected` instead of blocking the queue. A table
125
+ * without a route stops the upload with an error, so no change is dropped
126
+ * silently. When the session is gone (the refresh token was revoked), the
127
+ * upload stops until the user signs in again.
128
+ *
129
+ * ```ts
130
+ * const connector = createUploadConnector({
131
+ * endpoint: process.env.EXPO_PUBLIC_POWERSYNC_URL,
132
+ * supabase,
133
+ * tables: { customers: bs.db.customers },
134
+ * });
135
+ * await powersync.connect(connector);
136
+ * ```
137
+ */
138
+ function createUploadConnector(options) {
139
+ const rejected = rejectedStore();
140
+ const batchSize = options.batchSize ?? 100;
141
+ const signedIn = async () => {
142
+ const { data } = await options.supabase.auth.getSession();
143
+ return data.session !== null;
144
+ };
145
+ return {
146
+ rejected,
147
+ async fetchCredentials() {
148
+ const { data } = await options.supabase.auth.getSession();
149
+ const session = data.session;
150
+ if (!session) return null;
151
+ return {
152
+ endpoint: options.endpoint,
153
+ token: session.access_token,
154
+ ...session.expires_at === void 0 ? {} : { expiresAt: /* @__PURE__ */ new Date(session.expires_at * 1e3) }
155
+ };
156
+ },
157
+ async uploadData(database) {
158
+ const batch = await database.getCrudBatch(batchSize);
159
+ if (!batch) return;
160
+ for (const entry of batch.crud) {
161
+ const route = options.tables[entry.table];
162
+ if (!route) throw new Error(`better-supabase: no upload route for PowerSync table "${entry.table}"; add it to createUploadConnector({ tables })`);
163
+ const result = await replay(route, entry);
164
+ if (result.ok) continue;
165
+ const { error } = result;
166
+ const outcome = options.classify?.(error, entry) ?? uploadOutcome(error.kind);
167
+ switch (outcome) {
168
+ case "retry":
169
+ if (error.kind === "unauthorized" && !await signedIn()) return;
170
+ throw new Error(error.message);
171
+ case "conflict": {
172
+ const change = {
173
+ entry,
174
+ error,
175
+ outcome
176
+ };
177
+ rejected.add(change);
178
+ options.onConflict?.(change);
179
+ break;
180
+ }
181
+ case "discard": {
182
+ const change = {
183
+ entry,
184
+ error,
185
+ outcome
186
+ };
187
+ rejected.add(change);
188
+ options.onDiscard?.(change);
189
+ break;
190
+ }
191
+ default: throw new TypeError(`Unhandled upload outcome ${String(outcome)}`);
192
+ }
193
+ }
194
+ await batch.complete();
195
+ }
196
+ };
197
+ }
198
+ //#endregion
199
+ export { checkSqlite, compileSqlite, createUploadConnector, fromSqliteError, likeToGlob, postgrestTimestamp, powersyncExecutor, quoteSqliteIdent, sqliteCompiler, sqliteTables, sqliteValue, syncWithAuth, uploadOutcome, watch };
@@ -0,0 +1,87 @@
1
+ import { b as DbError, f as Result } from "../../result-D7y2fT87.js";
2
+ import { t as PowerSyncDatabaseLike } from "../../executor-CaWigTyR.js";
3
+ import { i as RejectedStore, r as RejectedChange } from "../../connector-Dv8kK0MO.js";
4
+ //#region src/powersync/react/index.d.ts
5
+ export interface UseWatchOptions<T> {
6
+ readonly db: PowerSyncDatabaseLike;
7
+ /** The repository call, e.g. `() => list.run(local, query)`. */
8
+ readonly query: () => PromiseLike<Result<T>>;
9
+ /** SQLite tables whose changes rerun the query (`sqliteTables()`). */
10
+ readonly tables: readonly string[];
11
+ /** Values the query reads; a change restarts the watch. */
12
+ readonly deps?: readonly unknown[];
13
+ readonly throttleMs?: number;
14
+ /** False pauses the watch and keeps the last result. Defaults to true. */
15
+ readonly enabled?: boolean;
16
+ }
17
+ export interface WatchState<T> {
18
+ readonly result: Result<T> | undefined;
19
+ readonly data: T | undefined;
20
+ readonly error: DbError | undefined;
21
+ /** No result yet for the current `deps`. */
22
+ readonly loading: boolean;
23
+ }
24
+ /**
25
+ * A live repository call over PowerSync's SQLite database: reruns when
26
+ * one of `tables` changes, keeps unchanged rows' identity, and restarts
27
+ * when `deps` change.
28
+ *
29
+ * ```tsx
30
+ * const { data, loading } = useWatch({
31
+ * db: powersync,
32
+ * query: () => customerList.run(local, { ...customerList.defaults, search }),
33
+ * tables,
34
+ * deps: [search],
35
+ * });
36
+ * ```
37
+ */
38
+ export declare function useWatch<T>(options: UseWatchOptions<T>): WatchState<T>;
39
+ /** The part of PowerSync's `SyncStatus` `useSyncStatus` reads. */
40
+ export interface SyncStatusLike {
41
+ readonly connected: boolean;
42
+ readonly connecting?: boolean;
43
+ readonly hasSynced?: boolean | undefined;
44
+ readonly dataFlowStatus: {
45
+ readonly uploading: boolean;
46
+ readonly downloading: boolean;
47
+ readonly uploadError?: Error | undefined;
48
+ readonly downloadError?: Error | undefined;
49
+ };
50
+ }
51
+ /** The part of a PowerSync database `useSyncStatus` subscribes to. */
52
+ export interface SyncStatusSource {
53
+ readonly currentStatus: SyncStatusLike;
54
+ registerListener(listener: {
55
+ statusChanged?: (status: SyncStatusLike) => void;
56
+ }): () => void;
57
+ }
58
+ export interface SyncState {
59
+ readonly connected: boolean;
60
+ readonly connecting: boolean;
61
+ /** The first full sync finished; before it, local reads may be empty. */
62
+ readonly hasSynced: boolean;
63
+ readonly uploading: boolean;
64
+ readonly downloading: boolean;
65
+ readonly error: Error | undefined;
66
+ }
67
+ /**
68
+ * PowerSync's connection and sync progress, for a status badge or a
69
+ * "syncing" banner. Re-renders only when one of the fields changes.
70
+ */
71
+ export declare function useSyncStatus(db: SyncStatusSource): SyncState;
72
+ export interface Conflicts {
73
+ /** Changes the server refused, oldest first. */
74
+ readonly changes: readonly RejectedChange[];
75
+ /** Forgets one change after the UI handled it, or all of them. */
76
+ readonly dismiss: (change?: RejectedChange) => void;
77
+ }
78
+ /**
79
+ * The changes `createUploadConnector` could not upload: conflicts with a
80
+ * newer server row and changes the server refused. Show them next to the
81
+ * row, then `dismiss` them.
82
+ */
83
+ export declare function useConflicts(connector: {
84
+ readonly rejected: RejectedStore;
85
+ }): Conflicts;
86
+ //#endregion
87
+ export type { RejectedChange, RejectedStore };
@@ -0,0 +1,108 @@
1
+ "use client";
2
+ import { n as watch } from "../../watch-Xuxrvxq-.js";
3
+ import { useEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
4
+ //#region src/powersync/react/index.ts
5
+ /**
6
+ * A live repository call over PowerSync's SQLite database: reruns when
7
+ * one of `tables` changes, keeps unchanged rows' identity, and restarts
8
+ * when `deps` change.
9
+ *
10
+ * ```tsx
11
+ * const { data, loading } = useWatch({
12
+ * db: powersync,
13
+ * query: () => customerList.run(local, { ...customerList.defaults, search }),
14
+ * tables,
15
+ * deps: [search],
16
+ * });
17
+ * ```
18
+ */
19
+ function useWatch(options) {
20
+ const { db, tables, throttleMs } = options;
21
+ const enabled = options.enabled ?? true;
22
+ const key = JSON.stringify([tables, options.deps ?? []]);
23
+ const [state, setState] = useState({
24
+ key,
25
+ result: void 0
26
+ });
27
+ const latest = useRef({
28
+ query: options.query,
29
+ tables
30
+ });
31
+ latest.current = {
32
+ query: options.query,
33
+ tables
34
+ };
35
+ useEffect(() => {
36
+ if (!enabled) return;
37
+ return watch(db, () => latest.current.query(), {
38
+ tables: latest.current.tables,
39
+ onResult: (result) => {
40
+ setState({
41
+ key,
42
+ result
43
+ });
44
+ },
45
+ ...throttleMs === void 0 ? {} : { throttleMs }
46
+ });
47
+ }, [
48
+ db,
49
+ key,
50
+ enabled,
51
+ throttleMs
52
+ ]);
53
+ const result = state.result;
54
+ return {
55
+ result,
56
+ data: result?.ok ? result.data : void 0,
57
+ error: result && !result.ok ? result.error : void 0,
58
+ loading: state.key !== key || result === void 0
59
+ };
60
+ }
61
+ function stateOf(status) {
62
+ const flow = status.dataFlowStatus;
63
+ return {
64
+ connected: status.connected,
65
+ connecting: status.connecting ?? false,
66
+ hasSynced: status.hasSynced ?? false,
67
+ uploading: flow.uploading,
68
+ downloading: flow.downloading,
69
+ error: flow.uploadError ?? flow.downloadError
70
+ };
71
+ }
72
+ function sameState(a, b) {
73
+ return a.connected === b.connected && a.connecting === b.connecting && a.hasSynced === b.hasSynced && a.uploading === b.uploading && a.downloading === b.downloading && a.error === b.error;
74
+ }
75
+ /**
76
+ * PowerSync's connection and sync progress, for a status badge or a
77
+ * "syncing" banner. Re-renders only when one of the fields changes.
78
+ */
79
+ function useSyncStatus(db) {
80
+ const store = useMemo(() => statusStore(db), [db]);
81
+ return useSyncExternalStore(store.subscribe, store.read, store.read);
82
+ }
83
+ /** Keeps the last snapshot while its fields stay equal, as `useSyncExternalStore` needs. */
84
+ function statusStore(db) {
85
+ let snapshot = stateOf(db.currentStatus);
86
+ return {
87
+ read: () => {
88
+ const next = stateOf(db.currentStatus);
89
+ if (!sameState(snapshot, next)) snapshot = next;
90
+ return snapshot;
91
+ },
92
+ subscribe: (listener) => db.registerListener({ statusChanged: listener })
93
+ };
94
+ }
95
+ /**
96
+ * The changes `createUploadConnector` could not upload: conflicts with a
97
+ * newer server row and changes the server refused. Show them next to the
98
+ * row, then `dismiss` them.
99
+ */
100
+ function useConflicts(connector) {
101
+ const { rejected } = connector;
102
+ return {
103
+ changes: useSyncExternalStore(rejected.subscribe, rejected.current, rejected.current),
104
+ dismiss: rejected.dismiss
105
+ };
106
+ }
107
+ //#endregion
108
+ export { useConflicts, useSyncStatus, useWatch };
@@ -1,4 +1,4 @@
1
- import { n as dbError } from "./errors-DtwXa6b8.js";
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
2
  //#region src/core/problem.ts
3
3
  const PROBLEM_TYPE_BASE = "https://bettersupabase.com/problems/";
4
4
  const PROBLEM_CONTENT_TYPE = "application/problem+json";
@@ -22,7 +22,10 @@ const TITLES = {
22
22
  validation: "Validation failed",
23
23
  multiple_rows: "More than one row matched",
24
24
  stale: "Row changed since it was read",
25
+ max_affected: "Too many rows affected",
25
26
  rate_limited: "Too many requests",
27
+ quota_exceeded: "Quota exceeded",
28
+ unsupported: "Not supported by this executor",
26
29
  unexpected: "Unexpected error"
27
30
  };
28
31
  /** Kinds whose message may contain internals (SQL, hostnames), hidden unless `expose` is set. */
@@ -50,6 +53,9 @@ function toProblem(error, options = {}) {
50
53
  if ("required" in error) problem["required"] = error.required;
51
54
  if ("scopes" in error) problem["scopes"] = error.scopes;
52
55
  if ("retryAfter" in error) problem["retryAfter"] = error.retryAfter;
56
+ if ("meter" in error) problem["meter"] = error.meter;
57
+ if ("limit" in error) problem["limit"] = error.limit;
58
+ if ("maxAffected" in error) problem["maxAffected"] = error.maxAffected;
53
59
  return problem;
54
60
  }
55
61
  /**
@@ -69,7 +75,9 @@ function problemResponse(error, options = {}) {
69
75
  headers.set("www-authenticate", `Bearer realm="${realm}", error="insufficient_scope", scope="${scope}"`);
70
76
  }
71
77
  if ("retryAfter" in error && !headers.has("retry-after")) headers.set("retry-after", String(error.retryAfter));
72
- return new Response(JSON.stringify(toProblem(error, options)), {
78
+ const problem = toProblem(error, options);
79
+ const body = options.format ? options.format(problem, error) : problem;
80
+ return new Response(JSON.stringify(body), {
73
81
  status: error.status,
74
82
  headers
75
83
  });
@@ -94,7 +102,10 @@ function fromProblem(problem) {
94
102
  "column",
95
103
  "required",
96
104
  "scopes",
97
- "retryAfter"
105
+ "retryAfter",
106
+ "meter",
107
+ "limit",
108
+ "maxAffected"
98
109
  ]) if (problem[key] !== void 0) extra[key] = problem[key];
99
110
  extra["issues"] = problem.issues ?? [];
100
111
  if (kind !== "validation") delete extra["issues"];
@@ -1,4 +1,4 @@
1
- import { _ as DbError, v as DbErrorKind, w as ValidationIssue } from "./executor-BunPOO-k.js";
1
+ import { E as ValidationIssue, b as DbError, x as DbErrorKind } from "./result-D7y2fT87.js";
2
2
  //#region src/core/problem.d.ts
3
3
  /** RFC 9457 Problem Details, with the `DbError` fields as extension members. */
4
4
  interface ProblemDetails {
@@ -19,8 +19,13 @@ interface ProblemDetails {
19
19
  readonly required?: "aal1" | "aal2";
20
20
  /** The OAuth scopes a `forbidden` answer needs. */
21
21
  readonly scopes?: readonly string[];
22
- /** Seconds until a `rate_limited` caller may retry. */
22
+ /** Seconds until a `rate_limited` or `quota_exceeded` caller may retry. */
23
23
  readonly retryAfter?: number;
24
+ /** The meter a `quota_exceeded` answer ran out of, and its limit. */
25
+ readonly meter?: string;
26
+ readonly limit?: number;
27
+ /** The row limit a `max_affected` write exceeded. */
28
+ readonly maxAffected?: number;
24
29
  }
25
30
  declare const PROBLEM_TYPE_BASE = "https://bettersupabase.com/problems/";
26
31
  declare const PROBLEM_CONTENT_TYPE = "application/problem+json";
@@ -30,10 +35,23 @@ interface ProblemOptions {
30
35
  /** Include messages of internal errors. Defaults to false. */
31
36
  readonly expose?: boolean;
32
37
  }
38
+ /**
39
+ * Rewrites the Problem Details a block answers with into the app's own error
40
+ * body, such as its `type` URIs and error codes. The status, `Retry-After`
41
+ * and `WWW-Authenticate` headers stay as they are.
42
+ */
43
+ type ProblemFormat = (problem: ProblemDetails, error: DbError) => Readonly<Record<string, unknown>>;
44
+ /** The `problem` option of the blocks that answer HTTP requests. */
45
+ interface BlockProblemOptions {
46
+ /** The app's error body for the block's error responses. Defaults to RFC 9457 Problem Details. */
47
+ readonly problem?: ProblemFormat;
48
+ }
33
49
  interface ProblemResponseOptions extends ProblemOptions {
34
50
  readonly headers?: ConstructorParameters<typeof Headers>[0];
35
51
  /** `realm` of the RFC 6750 challenge on 401. */
36
52
  readonly realm?: string;
53
+ /** Rewrites the body; see `ProblemFormat`. */
54
+ readonly format?: ProblemFormat | undefined;
37
55
  }
38
56
  /** Converts a `DbError` to Problem Details. */
39
57
  declare function toProblem(error: DbError, options?: ProblemOptions): ProblemDetails;
@@ -46,4 +64,4 @@ declare function isProblem(value: unknown): value is ProblemDetails;
46
64
  /** Turns a Problem Details body back into a `DbError` (client side). */
47
65
  declare function fromProblem(problem: ProblemDetails): DbError;
48
66
  //#endregion
49
- export { ProblemResponseOptions as a, problemResponse as c, ProblemOptions as i, toProblem as l, PROBLEM_TYPE_BASE as n, fromProblem as o, ProblemDetails as r, isProblem as s, PROBLEM_CONTENT_TYPE as t };
67
+ export { ProblemFormat as a, fromProblem as c, toProblem as d, ProblemDetails as i, isProblem as l, PROBLEM_CONTENT_TYPE as n, ProblemOptions as o, PROBLEM_TYPE_BASE as r, ProblemResponseOptions as s, BlockProblemOptions as t, problemResponse as u };
@@ -0,0 +1,113 @@
1
+ /// <reference lib="esnext.temporal" />
2
+ import { b as DbError, t as AsyncResult } from "./result-D7y2fT87.js";
3
+ import { r as AuthState } from "./resolve-KW8nCeL6.js";
4
+ //#region src/credentials/provider.d.ts
5
+ /**
6
+ * Names a credential without holding it. Tables store this as a
7
+ * `credential_ref jsonb` column; `provider` picks the `CredentialProvider`
8
+ * and the other keys are that provider's.
9
+ */
10
+ type CredentialRef = {
11
+ readonly provider: string;
12
+ /**
13
+ * The tenant that owns the credential. A provider resolves, sets and
14
+ * revokes a ref with `tenant` only inside that tenant's namespace, so a
15
+ * tenant admin who picks a ref can never name another tenant's or the
16
+ * app's secret.
17
+ */
18
+ readonly tenant?: string;
19
+ } & Readonly<Record<string, unknown>>;
20
+ /** `ref` bound to `tenant`'s namespace. */
21
+ declare function tenantCredentialRef<R extends CredentialRef>(tenant: string, ref: R): R & {
22
+ readonly tenant: string;
23
+ };
24
+ /**
25
+ * Whether `ref` belongs to `tenant`: its `tenant` is exactly that tenant.
26
+ * Without a tenant (an app-level row), only a ref without one belongs.
27
+ */
28
+ declare function credentialRefInTenant(ref: CredentialRef, tenant: string | undefined): boolean;
29
+ /** The error for a ref that names a credential outside the row's tenant. */
30
+ declare function foreignCredentialRef(tenant: string | undefined): DbError;
31
+ /** Whose credential to use: the app's own, or one a user connected. */
32
+ type CredentialSubject = {
33
+ readonly type: "app";
34
+ } | {
35
+ readonly type: "user";
36
+ readonly id: string;
37
+ readonly issuer?: string;
38
+ };
39
+ interface GetTokenOptions {
40
+ readonly subject: CredentialSubject;
41
+ readonly scopes?: readonly string[];
42
+ readonly installationId?: string;
43
+ readonly signal?: AbortSignal;
44
+ }
45
+ interface CredentialToken {
46
+ readonly token: string;
47
+ /** Unset when the provider doesn't know when the token expires. */
48
+ readonly expiresAt?: Temporal.Instant;
49
+ /** Headers that authenticate a request with this token. */
50
+ readonly headers: Readonly<Record<string, string>>;
51
+ }
52
+ interface CredentialCapabilities {
53
+ /** The ref holds one credential per user subject. */
54
+ readonly userSubjects: boolean;
55
+ /** `startAuthorization` can send the user to connect the account. */
56
+ readonly authorization: boolean;
57
+ readonly revoke: boolean;
58
+ /** `verifyInbound` can check requests the third party sends. */
59
+ readonly inbound: boolean;
60
+ }
61
+ interface StartAuthorizationOptions {
62
+ readonly subject: CredentialSubject;
63
+ readonly redirectUri: string;
64
+ readonly scopes?: readonly string[];
65
+ readonly state?: string;
66
+ }
67
+ interface CompleteAuthorizationOptions {
68
+ readonly subject: CredentialSubject;
69
+ /** The callback request, or its URL, that carries the code and state. */
70
+ readonly callback: Request | URL | string;
71
+ }
72
+ /**
73
+ * Resolves `CredentialRef`s to tokens. Versioned: a breaking change to this
74
+ * contract ships a new `apiVersion`. Errors are `DbError`s: `invalid_input`
75
+ * for a ref the provider doesn't handle, `not_found` when no credential is
76
+ * stored, `forbidden` when the subject may not use it.
77
+ */
78
+ interface CredentialProvider {
79
+ readonly apiVersion: 1;
80
+ readonly name: string;
81
+ getToken(ref: CredentialRef, options: GetTokenOptions): AsyncResult<CredentialToken>;
82
+ capabilities(ref: CredentialRef): CredentialCapabilities;
83
+ /** The URL to send the user to; only when `capabilities(ref).authorization`. */
84
+ startAuthorization?(ref: CredentialRef, options: StartAuthorizationOptions): AsyncResult<{
85
+ readonly url: string;
86
+ }>;
87
+ completeAuthorization?(ref: CredentialRef, options: CompleteAuthorizationOptions): AsyncResult<void>;
88
+ /** Forgets the stored credential; `false` when there was none. */
89
+ revoke(ref: CredentialRef, options: {
90
+ readonly subject: CredentialSubject;
91
+ }): AsyncResult<boolean>;
92
+ /** Checks a request the third party sent (a webhook) against the ref's secret. */
93
+ verifyInbound?(request: Request, ref: CredentialRef): AsyncResult<boolean>;
94
+ /**
95
+ * Stores or replaces the credential a ref names, for `subject` when the
96
+ * ref is per user. Optional: a provider without it can't take a secret
97
+ * from the app (an OAuth-only provider, say).
98
+ */
99
+ set?(ref: CredentialRef, value: string, options?: SetCredentialOptions): AsyncResult<void>;
100
+ }
101
+ interface SetCredentialOptions {
102
+ readonly subject?: CredentialSubject;
103
+ readonly description?: string;
104
+ }
105
+ /**
106
+ * The subject for a request: the user behind a session or a user-bound API
107
+ * key, the app for the service role, and `undefined` for anyone else.
108
+ */
109
+ declare function subjectFor(context: {
110
+ readonly auth: AuthState;
111
+ }): CredentialSubject | undefined;
112
+ //#endregion
113
+ export { CredentialSubject as a, SetCredentialOptions as c, foreignCredentialRef as d, subjectFor as f, CredentialRef as i, StartAuthorizationOptions as l, CredentialCapabilities as n, CredentialToken as o, tenantCredentialRef as p, CredentialProvider as r, GetTokenOptions as s, CompleteAuthorizationOptions as t, credentialRefInTenant as u };
@@ -0,0 +1,57 @@
1
+ import { n as dbError } from "./errors-B11Duf73.js";
2
+ //#region src/credentials/provider.ts
3
+ /** `ref` bound to `tenant`'s namespace. */
4
+ function tenantCredentialRef(tenant, ref) {
5
+ return {
6
+ ...ref,
7
+ tenant
8
+ };
9
+ }
10
+ /**
11
+ * Whether `ref` belongs to `tenant`: its `tenant` is exactly that tenant.
12
+ * Without a tenant (an app-level row), only a ref without one belongs.
13
+ */
14
+ function credentialRefInTenant(ref, tenant) {
15
+ const owner = ref.tenant;
16
+ return tenant === void 0 ? owner === void 0 : typeof owner === "string" && owner === tenant;
17
+ }
18
+ /** The error for a ref that names a credential outside the row's tenant. */
19
+ function foreignCredentialRef(tenant) {
20
+ return dbError("forbidden", tenant === void 0 ? "An app-level credential_ref can't name a tenant's credential" : `The credential_ref names a credential outside tenant "${tenant}"`, { hint: "CREDENTIAL_REF_FOREIGN" });
21
+ }
22
+ /** Checks the provider's `apiVersion` before the server uses it. */
23
+ function credentialProviderOf(provider) {
24
+ const version = provider.apiVersion;
25
+ if (version !== 1) throw new TypeError(`credentials "${provider.name}" targets credential provider API ${String(version)}; this better-supabase supports 1. Upgrade better-supabase or use a release of the provider for API 1.`);
26
+ return provider;
27
+ }
28
+ /**
29
+ * The subject for a request: the user behind a session or a user-bound API
30
+ * key, the app for the service role, and `undefined` for anyone else.
31
+ */
32
+ function subjectFor(context) {
33
+ const { auth } = context;
34
+ switch (auth.kind) {
35
+ case "user": {
36
+ const issuer = auth.claims.iss;
37
+ return typeof issuer === "string" && issuer.length > 0 ? {
38
+ type: "user",
39
+ id: auth.claims.sub,
40
+ issuer
41
+ } : {
42
+ type: "user",
43
+ id: auth.claims.sub
44
+ };
45
+ }
46
+ case "apiKey": return auth.userId === void 0 ? void 0 : {
47
+ type: "user",
48
+ id: auth.userId
49
+ };
50
+ case "service": return { type: "app" };
51
+ case "anon":
52
+ case "invalid": return;
53
+ default: return auth;
54
+ }
55
+ }
56
+ //#endregion
57
+ export { tenantCredentialRef as a, subjectFor as i, credentialRefInTenant as n, foreignCredentialRef as r, credentialProviderOf as t };
@@ -1,2 +1,4 @@
1
- import { a as MutationOptionsOf, c as QueryKeyOf, d as createQueries, f as invalidateOnMutation, h as invalidateTables, i as InfiniteOptionsOf, l as QueryOptionsOf, m as BetterQueryMeta, n as clearOnUserChange, o as QueriesOptions, p as queryCache, r as BetterQueries, s as QueryHelpers, t as UserChangeSource, u as TableQueries } from "../index-DgILJRXj.js";
2
- export { type BetterQueries, type BetterQueryMeta, type InfiniteOptionsOf, type MutationOptionsOf, type QueriesOptions, type QueryHelpers, type QueryKeyOf, type QueryOptionsOf, type TableQueries, type UserChangeSource, clearOnUserChange, createQueries, invalidateOnMutation, invalidateTables, queryCache };
1
+ import { t as escapeLike } from "../escape-like-ImTK0ps_.js";
2
+ import { n as invalidateTables, t as BetterQueryMeta } from "../invalidate-BBqhpxyB.js";
3
+ import { _ as invalidateOnMutation, a as UserChangeSource, c as InfiniteExtras, d as QueriesOptions, f as QueryHelpers, g as createQueries, h as TableQueries, i as optimistic, l as InfiniteOptionsOf, m as QueryOptionsOf, n as OptimisticSnapshot, o as clearOnUserChange, p as QueryKeyOf, r as OptimisticTarget, s as BetterQueries, t as OptimisticHandlers, u as MutationOptionsOf, v as queryCache } from "../index-Bepi-Hgg.js";
4
+ export { type BetterQueries, type BetterQueryMeta, type InfiniteExtras, type InfiniteOptionsOf, type MutationOptionsOf, type OptimisticHandlers, type OptimisticSnapshot, type OptimisticTarget, type QueriesOptions, type QueryHelpers, type QueryKeyOf, type QueryOptionsOf, type TableQueries, type UserChangeSource, clearOnUserChange, createQueries, escapeLike, invalidateOnMutation, invalidateTables, optimistic, queryCache };
@@ -1,3 +1,4 @@
1
- import { n as invalidateTables, t as clearOnUserChange } from "../user-change-CHFEUro1.js";
2
- import { n as invalidateOnMutation, r as queryCache, t as createQueries } from "../query-CCbo44lG.js";
3
- export { clearOnUserChange, createQueries, invalidateOnMutation, invalidateTables, queryCache };
1
+ import { t as escapeLike } from "../escape-like-DHfx6jRr.js";
2
+ import { r as invalidateTables, t as clearOnUserChange } from "../user-change-XzvgafU4.js";
3
+ import { i as queryCache, n as createQueries, r as invalidateOnMutation, t as optimistic } from "../query-BQ-NaZon.js";
4
+ export { clearOnUserChange, createQueries, escapeLike, invalidateOnMutation, invalidateTables, optimistic, queryCache };