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
@@ -1,13 +1,15 @@
1
- import { P as TableKey, S as PermdockTopicPolicy, j as SchemaMeta, k as Row, n as AnyFunctions, r as AnyModels } from "./types-Dnf_wRDz.js";
2
- import { _ as DbError, a as AsyncResult, u as Result, w as ValidationIssue } from "./executor-BunPOO-k.js";
3
- import { Z as QuerySpec, t as BetterSupabase } from "./define-Bp_BZa5h.js";
4
- import { n as PermdockCatalog } from "./permdock-sql-C2Inc6Xc.js";
5
- import { n as TemplateValues, t as TemplateParams } from "./template-mbvlysOo.js";
1
+ import { E as ValidationIssue, b as DbError, f as Result, t as AsyncResult } from "./result-D7y2fT87.js";
2
+ import { L as TableKey, M as Row, P as SchemaMeta, a as AnyModels, i as AnyFunctions, r as AccessTopicPolicy } from "./types-6BdhkmZe.js";
3
+ import { it as QuerySpec, t as BetterSupabase } from "./define-CJJkkr1-.js";
4
+ import { n as TemplateValues, t as TemplateParams } from "./template-CwO38Do8.js";
5
+ import { t as AuthorizationFunctions } from "./authorization-BFCqamMs.js";
6
6
  import { RealtimeChannel, SupabaseClient } from "@supabase/supabase-js";
7
7
  import { StandardSchemaV1 } from "@standard-schema/spec";
8
8
  //#region src/realtime/topic.d.ts
9
9
  type EventSchemas = Readonly<Record<string, StandardSchemaV1>>;
10
- interface TopicOptions<E extends EventSchemas> {
10
+ /** `true`, or a schema every tracked presence state is validated against. */
11
+ type PresenceSchema = boolean | StandardSchemaV1;
12
+ interface TopicOptions<E extends EventSchemas, R extends PresenceSchema = PresenceSchema> {
11
13
  /** Name used for generated policies and functions. Defaults to the template's literal parts. */
12
14
  readonly name?: string;
13
15
  /** Payload schemas per event. Incoming and outgoing payloads are validated. */
@@ -15,8 +17,8 @@ interface TopicOptions<E extends EventSchemas> {
15
17
  /** Private channels are authorized by `realtime.messages` policies. Defaults to `true`. */
16
18
  readonly private?: boolean;
17
19
  /**
18
- * Tenant check for the generated policy. Defaults to `{orgId}` against
19
- * `tenant_id` / `app_metadata.tenant_id` when the template has `{orgId}`.
20
+ * Tenant check for the generated policy. Defaults to `{organizationId}` against
21
+ * `tenant_id` / `app_metadata.tenant_id` when the template has `{organizationId}`.
20
22
  */
21
23
  readonly tenant?: false | {
22
24
  readonly param?: string;
@@ -28,27 +30,25 @@ interface TopicOptions<E extends EventSchemas> {
28
30
  readonly param?: string;
29
31
  };
30
32
  /**
31
- * Authorize with PermDock's SQL helpers instead of the tenant claim:
32
- * `permitted_<scope>_ids(receive)` on the scope segment (or
33
- * `permdock_has` for `scope: 'global'`), and `send` for broadcasting.
33
+ * Authorize with the SQL modules' access contract instead of the tenant
34
+ * claim: `tenant_ids_with(receive)` on the tenant segment (or
35
+ * `is_platform` for `scope: 'platform'`), or the `sql` templates it is
36
+ * given, and `send` for broadcasting.
34
37
  *
35
- * The helpers check role and scope only. Use this just for permissions
36
- * whose grants have no row conditions beyond the scope: for a permission
37
- * with row conditions (e.g. `authorId = principal.id`) every member of the
38
- * scope could join. Pass `catalog` to refuse those keys here;
39
- * `better-supabase doctor` (BS214) refuses them from the catalog file.
38
+ * The checks decide by role and scope only: for a permission with row
39
+ * conditions (e.g. `authorId = principal.id`) every member of the scope
40
+ * could join. `better-supabase doctor` (BS214) refuses keys the
41
+ * authorization provider doesn't mark `sqlComplete: true`.
40
42
  */
41
- readonly permdock?: PermdockTopicPolicy;
42
- /**
43
- * PermDock's `permissions.catalog.json`. With it, a `permdock` policy
44
- * naming a permission without `rowConditions: false` (including one the
45
- * catalog doesn't list) throws.
46
- */
47
- readonly catalog?: PermdockCatalog;
43
+ readonly access?: AccessTopicPolicy;
48
44
  /** Let clients broadcast on the topic, not only receive. Defaults to `false`. */
49
45
  readonly send?: boolean;
50
- /** Also authorize presence. Defaults to `false`. */
51
- readonly presence?: boolean;
46
+ /**
47
+ * Presence: authorizes it in the policies and adds `track` and
48
+ * `onPresence` to subscriptions. Pass a schema to validate the states
49
+ * this client tracks and the ones it receives. Defaults to `false`.
50
+ */
51
+ readonly presence?: R;
52
52
  }
53
53
  interface TopicMessage {
54
54
  readonly event: string;
@@ -79,12 +79,76 @@ interface Subscription extends Disposable, AsyncDisposable {
79
79
  readonly ready: Promise<void>;
80
80
  unsubscribe(): Promise<void>;
81
81
  }
82
+ /** One tracked state on a presence topic. */
83
+ interface PresenceMember<S> {
84
+ /** The connection's presence key; a client tracking twice keeps one key. */
85
+ readonly key: string;
86
+ readonly state: S;
87
+ }
88
+ interface PresenceOptions<S> {
89
+ /**
90
+ * Called with everyone on the topic, this client included, after each
91
+ * presence sync. States that fail the presence schema are left out and
92
+ * passed to `onInvalid` as a `presence` message.
93
+ */
94
+ readonly onPresence?: (members: readonly PresenceMember<S>[]) => void;
95
+ }
96
+ interface PresenceSubscription<I, O> extends Subscription {
97
+ /**
98
+ * Validates the state, waits for the join and shares it with the topic.
99
+ * One state per client and topic: the last `track` wins, and leaving the
100
+ * topic removes it.
101
+ */
102
+ track(state: I): AsyncResult<void>;
103
+ /** Removes this client's state from the topic. */
104
+ untrack(): AsyncResult<void>;
105
+ /** Everyone from the last sync, as `onPresence` received them. */
106
+ members(): readonly PresenceMember<O>[];
107
+ }
108
+ type PresenceState = Readonly<Record<string, unknown>>;
109
+ type PresenceInput<R> = R extends StandardSchemaV1 ? StandardSchemaV1.InferInput<R> : PresenceState;
110
+ type PresenceOutput<R> = R extends StandardSchemaV1 ? StandardSchemaV1.InferOutput<R> : PresenceState;
111
+ /** What `subscribe` returns: with `track` and `members` on presence topics. */
112
+ type TopicSubscription<R> = [R] extends [false] ? Subscription : PresenceSubscription<PresenceInput<R>, PresenceOutput<R>>;
113
+ /** `subscribe` options: with `onPresence` on presence topics. */
114
+ type TopicSubscribeOptions<R> = [R] extends [false] ? SubscribeOptions : SubscribeOptions & PresenceOptions<PresenceOutput<R>>;
82
115
  type RealtimeClient = Pick<SupabaseClient, "channel" | "getChannels" | "removeChannel" | "realtime">;
116
+ /**
117
+ * A value read from another table: the `select` column of the `from` row
118
+ * whose `key` (its primary key by default) equals `via`, a column of the
119
+ * changed row or another lookup.
120
+ */
121
+ interface TriggerLookup<M extends AnyModels> {
122
+ readonly from: TableKey<M>;
123
+ readonly via: string | TriggerLookup<M>;
124
+ readonly select: string;
125
+ readonly key?: string;
126
+ }
127
+ /** A trigger value: a column of the changed row, or a lookup through it. */
128
+ type TriggerValue<M extends AnyModels, T extends keyof M> = Extract<keyof Row<M, T>, string> | TriggerLookup<M>;
129
+ type TriggerOperation = "insert" | "update" | "delete";
83
130
  interface TriggerOptions<M extends AnyModels, T extends keyof M, P extends string> {
84
- /** Column that fills each placeholder. */
85
- readonly values: { readonly [K in TemplateParams<P>]: Extract<keyof Row<M, T>, string>; };
131
+ /**
132
+ * What fills each placeholder: a column of the changed row, or a lookup
133
+ * (`{ from, via, select }`) for a value on a parent row. A row whose
134
+ * topic comes out null is not sent.
135
+ */
136
+ readonly values: { readonly [K in TemplateParams<P>]: TriggerValue<M, T>; };
86
137
  /** Defaults to all three. */
87
- readonly events?: readonly ("insert" | "update" | "delete")[];
138
+ readonly events?: readonly TriggerOperation[];
139
+ /**
140
+ * The broadcast event name, or one per operation. Defaults to the
141
+ * operation (`INSERT`, `UPDATE`, `DELETE`).
142
+ */
143
+ readonly event?: string | { readonly [O in TriggerOperation]?: string; };
144
+ /**
145
+ * Send this payload with `realtime.send` instead of the row change from
146
+ * `realtime.broadcast_changes`: each key is a column, a lookup, or
147
+ * `{ sql }`, an expression on the row `{row}` (`tg_op` is the operation).
148
+ */
149
+ readonly payload?: Readonly<Record<string, TriggerValue<M, T> | {
150
+ readonly sql: string;
151
+ }>>;
88
152
  /**
89
153
  * Schema for the generated function. Defaults to `better_supabase`, which
90
154
  * the Data API does not expose.
@@ -97,18 +161,29 @@ interface RowChange<R> {
97
161
  readonly record: R | null;
98
162
  readonly oldRecord: Partial<R> | null;
99
163
  }
100
- interface Topic<P extends string, E extends EventSchemas> {
164
+ /** Options for `topic.sql()`. */
165
+ interface TopicSqlOptions {
166
+ /** The provider's templates, for an access policy with `sql: "provider"`. */
167
+ readonly functions?: AuthorizationFunctions;
168
+ }
169
+ interface Topic<P extends string, E extends EventSchemas, R extends PresenceSchema = false> {
101
170
  readonly template: P;
102
171
  readonly name: string;
103
172
  readonly params: readonly TemplateParams<P>[];
104
173
  readonly private: boolean;
174
+ /** Whether subscriptions get `track` and `onPresence`. */
175
+ readonly presence: boolean;
105
176
  topic(values: TemplateValues<P>): string;
106
177
  match(topic: string): TemplateValues<P> | null;
107
- /** `realtime.messages` policies for this topic. Idempotent. */
108
- sql(): string;
178
+ /**
179
+ * `realtime.messages` policies for this topic. Idempotent. An access
180
+ * policy with `sql: "provider"` needs the provider's templates in
181
+ * `options.functions`; `better-supabase sql sync` passes them.
182
+ */
183
+ sql(options?: TopicSqlOptions): string;
109
184
  /** A trigger that broadcasts row changes (`realtime.broadcast_changes`) to this topic. */
110
185
  triggerSql<M extends AnyModels, D, F extends AnyFunctions, X, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, F, X>, table: T, options: TriggerOptions<M, T, P>): string;
111
- subscribe(client: RealtimeClient, values: TemplateValues<P>, handlers: TopicHandlers<E>, options?: SubscribeOptions): Subscription;
186
+ subscribe(client: RealtimeClient, values: TemplateValues<P>, handlers: TopicHandlers<E>, options?: TopicSubscribeOptions<R>): TopicSubscription<R>;
112
187
  /** Sends over HTTP, without joining the channel. */
113
188
  send<K extends TopicEvent<E>>(client: RealtimeClient, values: TemplateValues<P>, event: K, payload: TopicPayload<E, K>): AsyncResult<void>;
114
189
  }
@@ -117,13 +192,13 @@ interface Topic<P extends string, E extends EventSchemas> {
117
192
  * private channels, row-change triggers, and disposable subscriptions.
118
193
  *
119
194
  * ```ts
120
- * export const notifications = defineTopic('org:{orgId}:notifications:{userId}', {
195
+ * export const notifications = defineTopic('organization:{organizationId}:notifications:{userId}', {
121
196
  * events: { created: v.object({ id: v.string(), title: v.string() }) },
122
197
  * });
123
- * using sub = notifications.subscribe(supabase, { orgId, userId }, { created: (n) => toast(n.title) });
198
+ * using sub = notifications.subscribe(supabase, { organizationId, userId }, { created: (n) => toast(n.title) });
124
199
  * ```
125
200
  */
126
- declare function defineTopic<const P extends string, const E extends EventSchemas = Record<never, never>>(template: P, options?: TopicOptions<E>): Topic<P, E>;
201
+ declare function defineTopic<const P extends string, const E extends EventSchemas = Record<never, never>, const R extends PresenceSchema = false>(template: P, options?: TopicOptions<E, R>): Topic<P, E, R>;
127
202
  /**
128
203
  * Reads a `realtime.broadcast_changes` message as an app-cased row change.
129
204
  * Returns `null` for messages about other tables.
@@ -141,9 +216,20 @@ interface LiveQueryOptions {
141
216
  readonly onChange: (tables: readonly string[]) => void;
142
217
  /** Tenant value for tables scoped by a tenant column (`realtime-tables` topics). */
143
218
  readonly tenant?: string;
219
+ /** The signed-in user's id, for tables that broadcast per user (`realtime.users`). */
220
+ readonly user?: string;
144
221
  /** Waits this long after the last change before calling `onChange`. Defaults to 100 ms. */
145
222
  readonly debounceMs?: number;
223
+ /**
224
+ * Also reports a channel that errors after it joined (`error`) and its
225
+ * rejoin (`subscribed`), not only the first join.
226
+ */
146
227
  readonly onStatus?: (status: SubscriptionStatus, error?: Error) => void;
228
+ /**
229
+ * Retries a first join that failed, after 1 s and then twice as long each
230
+ * time, up to 30 s. Pass `false` to stay in `error`. Defaults to `true`.
231
+ */
232
+ readonly retry?: boolean;
147
233
  }
148
234
  interface LiveSubscription extends Disposable, AsyncDisposable {
149
235
  /** App keys of the watched tables. */
@@ -161,9 +247,15 @@ interface LiveSubscription extends Disposable, AsyncDisposable {
161
247
  interface LiveCountSeed<T extends string = string> {
162
248
  readonly spec: QuerySpec<T, "count", number>;
163
249
  readonly count: number | null;
250
+ /** When the count was taken (epoch ms). `useLiveCount` counts again after joining when it is older than a second. */
251
+ readonly at?: number;
164
252
  }
165
- /** Topic a `realtime-tables` trigger broadcasts on: `bs:t:<schema>.<table>[:<tenant>]`. */
166
- declare function liveTopic(meta: SchemaMeta, table: string, tenant?: string): string;
253
+ /**
254
+ * Topic a `realtime-tables` trigger broadcasts on:
255
+ * `bs:t:<schema>.<table>[:<tenant>]`, or `bs:t:<schema>.<table>:u:<user>`
256
+ * for a `realtime.users` table.
257
+ */
258
+ declare function liveTopic(meta: SchemaMeta, table: string, tenant?: string, user?: string): string;
167
259
  /**
168
260
  * Calls `onChange` when a table the spec reads changes, so you can refetch.
169
261
  * Needs the `realtime-tables` SQL module and the tables in
@@ -185,6 +277,12 @@ interface LiveCountOptions extends Omit<LiveQueryOptions, "onChange"> {
185
277
  readonly onError?: (error: DbError) => void;
186
278
  /** Count right away. Defaults to `true`; pass `false` when you have a seed. */
187
279
  readonly immediate?: boolean;
280
+ /**
281
+ * When the count you already have was taken (epoch ms). Counts again once
282
+ * the channel joins when that is more than a second ago, so a change made
283
+ * before the join is not lost.
284
+ */
285
+ readonly since?: number;
188
286
  }
189
287
  /**
190
288
  * Keeps a count current: runs the `count` spec (a HEAD request) now, after
@@ -199,4 +297,4 @@ interface LiveCountOptions extends Omit<LiveQueryOptions, "onChange"> {
199
297
  */
200
298
  declare function liveCount(betterSupabase: LiveSource, client: RealtimeClient, db: CountRunner, spec: QuerySpec<string, "count", number>, options: LiveCountOptions): LiveSubscription;
201
299
  //#endregion
202
- export { defineTopic as C, TriggerOptions as S, TopicEvent as _, LiveSource as a, TopicOptions as b, liveQuery as c, RealtimeClient as d, RowChange as f, Topic as g, SubscriptionStatus as h, LiveQueryOptions as i, liveTopic as l, Subscription as m, LiveCountOptions as n, LiveSubscription as o, SubscribeOptions as p, LiveCountSeed as r, liveCount as s, CountRunner as t, EventSchemas as u, TopicHandlers as v, rowChange as w, TopicPayload as x, TopicMessage as y };
300
+ export { TopicSubscription as A, TopicEvent as C, TopicPayload as D, TopicOptions as E, rowChange as F, TriggerOptions as M, TriggerValue as N, TopicSqlOptions as O, defineTopic as P, Topic as S, TopicMessage as T, RealtimeClient as _, LiveSource as a, Subscription as b, liveQuery as c, PresenceInput as d, PresenceMember as f, PresenceSubscription as g, PresenceSchema as h, LiveQueryOptions as i, TriggerLookup as j, TopicSubscribeOptions as k, liveTopic as l, PresenceOutput as m, LiveCountOptions as n, LiveSubscription as o, PresenceOptions as p, LiveCountSeed as r, liveCount as s, CountRunner as t, EventSchemas as u, RowChange as v, TopicHandlers as w, SubscriptionStatus as x, SubscribeOptions as y };
package/dist/index.d.ts CHANGED
@@ -1,14 +1,39 @@
1
- import { A as Schema, C as PrimaryKeyColumn, D as RelationTypes, E as RelationMeta, F as TableMeta, I as UniqueConstraint, L as UniqueKeyName, M as Simplify, N as TableFlags, O as Relations, P as TableKey, R as UniqueWhere, S as PermdockTopicPolicy, T as RealtimeTableMeta, _ as Insert, a as BucketPolicyName, b as ModelsOf, c as ClaimsMeta, d as DatabaseOf, f as Flags, g as FunctionsOf, h as FunctionTypes, i as BucketMeta, j as SchemaMeta, k as Row, l as Codec, m as FunctionMeta, n as AnyFunctions, o as Casing, p as ForeignKeyConstraint, r as AnyModels, s as CheckConstraint, t as AccessBucketPolicy, u as ColumnMeta, v as ModelFlags, w as PrimaryKeyValue, x as PermdockBucketPolicy, y as ModelTypes, z as Update } from "./types-Dnf_wRDz.js";
2
- import { $ as or, A as mapDbError, B as InsertOp, C as RawDbError, D as isConflict, E as isCheck, F as Condition, G as Quantifier, H as MutationOp, I as CountMode, J as Selection, K as SelectColumn, L as DeleteOp, M as AggregateFn, N as Aggregation, O as isDbError, P as ColumnOp, Q as not, R as FunctionSource, S as ErrorMapper, T as dbError, U as Operation, V as Measure, W as OrderTerm, X as and, Y as UpdateOp, Z as column, _ as DbError, a as AsyncResult, b as DbErrorOf, c as Err, f as err, g as toDbError, h as toBetterResult, i as RpcContext, j as statusOf, k as isForeignKey, l as Ok, m as ok, n as ExecuteResult, o as BetterResultApi, p as fromBetterResult, q as SelectOp, r as Executor, s as BetterResultValue, t as ExecuteContext, u as Result, v as DbErrorKind, w as ValidationIssue, x as DbException, y as DbErrorKinds, z as Include } from "./executor-BunPOO-k.js";
3
- import { D as consoleLogger, E as Logger, O as silentLogger, T as LogFields, _ as KitEventType, a as EventHub, c as QueryEvent, i as EventHandler, l as RefreshEvent, m as KitEventMap, n as BetterSupabaseEvents, o as EventName, p as KitEvent, r as ErrorEvent, s as MutationNotice, t as AuthEvent, u as RpcNotice } from "./events-aIO7vsIk.js";
4
- import { $ as Specs, A as RpcOptions, B as ReadSet, C as FindExt, Ct as WhereInput, D as Repository, E as PageOf, F as EMPTY_STATS, G as ReadSetParams, H as ReadSetParamType, I as StatsRecorder, J as isReadSet, K as ReadSetResult, L as recordStats, M as UpsertArgs, N as WriteArgs, O as RepositoryOf, P as DbStats, Q as ReadMethod, R as SearchArgs, S as DeleteExt, St as SortDirection, T as OffsetPageArgs, U as ReadSetParamTypes, V as ReadSetOptions, W as ReadSetParamValue, X as InferResult, Y as readSetTables, Z as QuerySpec, _ as CursorPage, _t as OrderByInput, a as defineSupabase, at as AggregateRow, b as DbHelpers, bt as RelationMeasureArg, c as postgrestExecutor, ct as FieldFilter, d as MemoryCache, dt as IncludeArg, et as TableSpecs, f as cacheTargetOf, ft as IncludeArgs, g as ConflictTarget, gt as OrderByArg, h as rpcCacheTargets, ht as NumericMeasureArg, i as SupabaseOptions, it as AggregateResult, j as UpdateArgs, k as Returned, l as CacheAdapter, lt as FindFirstArgs, m as rowKey, mt as MeasureKey, n as ConnectOptions, nt as specTables, o as PostgrestClientLike, ot as CountArg, p as memoryCache, pt as MeasureArg, q as defineReadSet, r as RpcDefinition, rt as AggregateArgs, s as explainPostgrest, st as CountArgs, t as BetterSupabase, tt as isQuerySpec, u as CacheTarget, ut as FindManyArgs, v as CursorPageArgs, vt as Payload, w as OffsetPage, x as DeleteArgs, xt as SelectArg, y as Db, yt as ReadArgs, z as InferReadSetParams } from "./define-Bp_BZa5h.js";
5
- import { _ as WithExtension, a as ExtensionOf, c as MutationEvent, d as NoExtension, f as PLUGIN_API_VERSION, g as RequestContext, h as RepositoryExtension, i as CallOptions, l as MutationIntent, m as RepositoryApi, n as AnyPlugin, o as HasFlag, p as Plugin, r as ApplyExtension, s as HookArgs, t as Actor, u as MutationKind, v as definePlugin } from "./plugin-o144f322.js";
6
- import { n as validate, t as StandardSchemaV1 } from "./standard-J4YgMOLm.js";
7
- import { a as compilePostgrest, i as PostgrestPlan, n as PlanLimit, r as PlanOrder, t as PlanFilter } from "./postgrest-CruYKAvV.js";
1
+ /// <reference lib="esnext.temporal" />
2
+ import { n as DbException, t as escapeLike } from "./escape-like-ImTK0ps_.js";
3
+ import { A as isDbError, C as DbErrorOf, D as dbError, E as ValidationIssue, M as mapDbError, N as statusOf, O as isCheck, S as DbErrorKinds, T as RawDbError, _ as ok, a as BetterResultOk, b as DbError, c as DbErrorClasses, d as Ok, f as Result, g as fromBetterResult, h as err, i as BetterResultErrors, j as isForeignKey, k as isConflict, l as Err, m as defineBetterResultErrors, n as BetterResultApi, o as BetterResultValue, r as BetterResultErr, s as DbErrorClass, t as AsyncResult, u as MappedDbError, v as toBetterResult, w as ErrorMapper, x as DbErrorKind, y as toDbError } from "./result-D7y2fT87.js";
4
+ import { A as Relations, B as UniqueKeyName, C as ModelTypes, D as RealtimeTableMeta, E as PrimaryKeyValue, F as Simplify, H as Update, I as TableFlags, L as TableKey, M as Row, N as Schema, O as RelationMeta, P as SchemaMeta, R as TableMeta, S as ModelFlags, T as PrimaryKeyColumn, V as UniqueWhere, _ as FunctionResult, a as AnyModels, b as FunctionsOf, c as Casing, d as Codec, f as ColumnMeta, g as FunctionMeta, h as ForeignKeyConstraint, i as AnyFunctions, j as ResultColumn, k as RelationTypes, l as CheckConstraint, m as Flags, n as AccessPolicySql, o as BucketMeta, p as DatabaseOf, r as AccessTopicPolicy, s as BucketPolicyName, t as AccessBucketPolicy, u as ClaimsMeta, v as FunctionSignature, w as ModelsOf, x as Insert, y as FunctionTypes, z as UniqueConstraint } from "./types-6BdhkmZe.js";
5
+ import { C as Selection, D as not, E as column, O as or, S as SelectOp, T as and, _ as MutationOp, a as AggregateFn, b as Quantifier, c as Condition, d as FunctionSource, f as Include, g as MutationKind, h as MutationIntent, i as RpcContext, l as CountMode, m as Measure, n as ExecuteResult, o as Aggregation, p as InsertOp, r as Executor, s as ColumnOp, t as ExecuteContext, u as DeleteOp, v as Operation, w as UpdateOp, x as SelectColumn, y as OrderTerm } from "./executor-DvsBbNBS.js";
6
+ import { a as ExtensionOf, c as MutationEvent, d as Plugin, f as RepositoryApi, g as definePlugin, h as WithExtension, i as CallOptions, l as NoExtension, m as RequestContext, n as AnyPlugin, o as HasFlag, p as RepositoryExtension, r as ApplyExtension, s as HookArgs, t as Actor, u as PLUGIN_API_VERSION } from "./plugin-FGY8UhYm.js";
7
+ import { C as BlockEventMap, E as BlockEventType, S as BlockEvent, a as EventHub, c as QueryEvent, i as EventHandler, l as RefreshEvent, n as BetterSupabaseEvents, o as EventName, r as ErrorEvent, s as MutationNotice, t as AuthEvent, u as RpcNotice } from "./events-DWDhx77e.js";
8
+ import { i as silentLogger, n as Logger, r as consoleLogger, t as LogFields } from "./logger-DWVYUmwi.js";
9
+ import { n as validate, t as StandardSchemaV1 } from "./standard-CYsm7xpT.js";
10
+ import { a as ProblemFormat, c as fromProblem, d as toProblem, i as ProblemDetails, l as isProblem, n as PROBLEM_CONTENT_TYPE, o as ProblemOptions, r as PROBLEM_TYPE_BASE, s as ProblemResponseOptions, t as BlockProblemOptions, u as problemResponse } from "./problem-DD8LZFjc.js";
11
+ import { $ as ReadSetResult, A as PageOf, At as OrderByArg, B as DbStats, C as DeleteExt, Ct as IncludeArg, D as OffsetPage, Dt as MeasureKey, E as ManyReturningArgs, Et as MeasureArg, F as UpdateArgs, Ft as RequestArgs, G as InferReadSetParams, H as StatsRecorder, I as UpsertArgs, It as SelectArg, J as ReadSetOptions, K as ReadSet, L as UpsertManyArgs, Lt as SortDirection, M as RepositoryOf, Mt as Payload, N as Returned, Nt as ReadArgs, O as OffsetPageArgs, Ot as MutableWhere, P as RpcOptions, Pt as RelationMeasureArg, Q as ReadSetParams, R as WriteArgs, Rt as SortSpec, S as DeleteArgs, St as FindOnlyArgs, T as ManyResult, Tt as JsonPathOps, U as recordStats, V as EMPTY_STATS, W as SearchArgs, X as ReadSetParamTypes, Y as ReadSetParamType, Z as ReadSetParamValue, _ as ConflictTarget, _t as CountArg, a as defineSupabase, at as ReadMethod, b as Db, bt as FindFirstArgs, c as explainPostgrest, ct as isQuerySpec, d as CacheTarget, dt as AggregateOrderBy, et as defineReadSet, f as MemoryCache, ft as AggregateOrderByArg, g as rpcCacheTargets, gt as ColumnOrderByArg, h as rowKey, ht as ColumnOrderBy, i as SupabaseOptions, it as QuerySpec, j as Repository, jt as OrderByInput, k as OffsetRangeArgs, kt as NumericMeasureArg, l as postgrestExecutor, lt as specTables, m as memoryCache, mt as AggregateRow, n as ConnectOptions, nt as readSetTables, o as PostgrestClientLike, ot as Specs, p as cacheTargetOf, pt as AggregateResult, q as ReadSetAuth, r as RpcDefinition, rt as InferResult, s as PostgrestExecutorOptions, st as TableSpecs, t as BetterSupabase, tt as isReadSet, u as CacheAdapter, ut as AggregateArgs, v as CursorPage, vt as CountArgs, w as FindExt, wt as IncludeArgs, x as DbHelpers, xt as FindManyArgs, y as CursorPageArgs, yt as FieldFilter, z as WriteManyArgs, zt as WhereInput } from "./define-CJJkkr1-.js";
12
+ import { a as PostgrestPlan, n as PlanLimit, o as compilePostgrest, r as PlanOrder, t as PlanFilter } from "./postgrest-BLVdEnfe.js";
8
13
  import { n as StoragePath } from "./path-Cv__-OTj.js";
9
- import { n as postgrestCompiler, t as Compiler } from "./compiler-BXH_aZ7N.js";
10
- import { a as ProblemResponseOptions, c as problemResponse, i as ProblemOptions, l as toProblem, n as PROBLEM_TYPE_BASE, o as fromProblem, r as ProblemDetails, s as isProblem, t as PROBLEM_CONTENT_TYPE } from "./problem-Blxe8S31.js";
11
- import { t as SPEC_PINS } from "./spec-pins-CqorWDnO.js";
14
+ import { n as postgrestCompiler, t as Compiler } from "./compiler-DY_wkj4R.js";
15
+ import { t as SPEC_PINS } from "./spec-pins-C89s6DyW.js";
16
+ //#region src/core/error-messages.d.ts
17
+ /**
18
+ * A message for every `DbError` kind: a string, or a function of the error.
19
+ * Leaving a kind out is a type error, so a new kind can't fall through.
20
+ */
21
+ type ErrorMessages = { readonly [K in DbErrorKind]: string | ((error: DbErrorOf<K>) => string); };
22
+ /**
23
+ * Turns an error into the sentence to show the user. Build it where your
24
+ * translations are, e.g. inside a hook that has `t`.
25
+ *
26
+ * ```ts
27
+ * const message = createErrorMessages({
28
+ * unauthorized: t('Sign in again to continue.'),
29
+ * raised: (error) => error.message,
30
+ * // ...every other kind
31
+ * });
32
+ * toast.error(message(result.error));
33
+ * ```
34
+ */
35
+ export declare function createErrorMessages(messages: ErrorMessages): (error: DbError) => string;
36
+ //#endregion
12
37
  //#region src/core/define-repository.d.ts
13
38
  /** Adds `Methods` to the repository of `Table` only. */
14
39
  interface TableRepositoryExtension<Table extends string, Methods> extends RepositoryExtension {
@@ -44,7 +69,7 @@ export declare function invalidationTargets(meta: SchemaMeta, table: string): re
44
69
  //#endregion
45
70
  //#region src/core/policy.d.ts
46
71
  /**
47
- * A callback that decides something a kit would otherwise allow or refuse
72
+ * A callback that decides something a module would otherwise allow or refuse
48
73
  * by default: `authorize`, `canInvite`, `shouldDeliver`, `allowUrl`. Only
49
74
  * `true` allows; `false`, any other value, a throw or a rejection denies.
50
75
  */
@@ -61,6 +86,7 @@ type PolicyDecision = {
61
86
  //#region src/core/cursor.d.ts
62
87
  /** Opaque, URL-safe keyset cursor. */
63
88
  export declare function encodeCursor(values: readonly unknown[]): string;
89
+ /** The values of a cursor from `encodeCursor` or from `paginate()`. */
64
90
  export declare function decodeCursor(cursor: string): unknown[] | undefined;
65
91
  //#endregion
66
92
  //#region src/schema/define.d.ts
@@ -81,18 +107,36 @@ type EnrichSchema<S, O> = { [P in keyof S]: P extends "Tables" | "Views" ? Enric
81
107
  */
82
108
  type EnrichDatabase<D, O> = { [S in keyof D]: S extends keyof O ? EnrichSchema<D[S], O[S]> : D[S]; };
83
109
  //#endregion
84
- //#region src/ir/build.d.ts
85
- /** Escapes LIKE wildcards so user input matches literally. */
86
- export declare function escapeLike(value: string): string;
87
- //#endregion
88
110
  //#region src/ir/codec.d.ts
89
111
  /** Applies column codecs to returned rows, including embedded relations. */
90
112
  export declare function decodeRows(selection: Selection | undefined, rows: readonly Record<string, unknown>[], checked?: boolean): Record<string, unknown>[];
91
113
  //#endregion
92
114
  //#region src/ir/wire.d.ts
93
- /** Wire form of an app value: Temporal values to ISO text, `bigint` to decimal text. */
115
+ /**
116
+ * Wire form of an app value: Temporal values and `Date` to ISO text, `bigint`
117
+ * to decimal text.
118
+ */
94
119
  export declare function encodeValue(value: unknown): unknown;
95
120
  //#endregion
121
+ //#region src/core/temporal.d.ts
122
+ /**
123
+ * Uses `namespace` wherever better-supabase needs Temporal, without touching
124
+ * `globalThis`. `defineSupabase(schema, { temporal })` calls it; call it
125
+ * yourself when you use a standalone helper (webhook verification, jobs)
126
+ * without a definition. `undefined` goes back to the global.
127
+ */
128
+ export declare function provideTemporal(namespace: typeof Temporal | undefined): void;
129
+ /** A `Temporal.Instant` from any copy of Temporal, checked by `Symbol.toStringTag`. */
130
+ export declare function isInstant(value: unknown): value is Temporal.Instant;
131
+ /** A `Temporal.PlainDateTime` from any copy of Temporal. */
132
+ export declare function isPlainDateTime(value: unknown): value is Temporal.PlainDateTime;
133
+ /** A `Temporal.PlainDate` from any copy of Temporal. */
134
+ export declare function isPlainDate(value: unknown): value is Temporal.PlainDate;
135
+ /** A `Temporal.PlainTime` from any copy of Temporal. */
136
+ export declare function isPlainTime(value: unknown): value is Temporal.PlainTime;
137
+ /** A `Temporal.ZonedDateTime` from any copy of Temporal. */
138
+ export declare function isZonedDateTime(value: unknown): value is Temporal.ZonedDateTime;
139
+ //#endregion
96
140
  //#region src/ir/scope.d.ts
97
141
  /** Returns the filter that always applies to rows of `table`, if any. */
98
142
  type ScopeFor = (table: TableMeta) => Condition | undefined;
@@ -119,9 +163,12 @@ export declare function scopeOperation(op: Operation, scopeFor: ScopeFor, root?:
119
163
  export declare function simplify(condition: Condition | undefined): Condition | boolean;
120
164
  //#endregion
121
165
  //#region src/casing/index.d.ts
122
- /** `first_name` to `firstName`. Leaves already camel-cased names untouched. */
166
+ /**
167
+ * `first_name` to `firstName`. Leaves already camel-cased names and leading
168
+ * underscores (`_internal`) untouched.
169
+ */
123
170
  export declare function toCamel(name: string): string;
124
171
  /** `firstName` to `first_name`. */
125
172
  export declare function toSnake(name: string): string;
126
173
  //#endregion
127
- export { type AccessBucketPolicy, type Actor, type AggregateArgs, type AggregateFn, type AggregateResult, type AggregateRow, type Aggregation, type AnyFunctions, type AnyModels, type AnyPlugin, type ApplyExtension, AsyncResult, type AuthEvent, type BetterResultApi, type BetterResultValue, BetterSupabase, type BetterSupabaseEvents, type BucketMeta, type BucketPolicyName, type CacheAdapter, type CacheTarget, type CallOptions, type Casing, type CheckConstraint, type ClaimsMeta, type Codec, type ColumnMeta, type ColumnOp, type Compiler, type Condition, type ConflictTarget, type ConnectOptions, type CountArg, type CountArgs, type CountMode, type CursorPage, type CursorPageArgs, type DatabaseOf, type Db, type DbError, type DbErrorKind, type DbErrorKinds, type DbErrorOf, DbException, type DbHelpers, type DbStats, type DeleteArgs, type DeleteExt, type DeleteOp, EMPTY_STATS, type EnrichDatabase, type Err, type ErrorEvent, type ErrorMapper, type EventHandler, EventHub, type EventName, type ExecuteContext, type ExecuteResult, type Executor, type ExtensionOf, type FieldFilter, type FindExt, type FindFirstArgs, type FindManyArgs, type Flags, type ForeignKeyConstraint, type FunctionMeta, type FunctionSource, type FunctionTypes, type FunctionsOf, type HasFlag, type HookArgs, type Include, type IncludeArg, type IncludeArgs, type InferReadSetParams, type InferResult, type Insert, type InsertOp, type KitEvent, type KitEventMap, type KitEventType, type LogFields, type Logger, type Measure, type MeasureArg, type MeasureKey, type MemoryCache, type ModelFlags, type ModelTypes, type ModelsOf, type MutationEvent, type MutationIntent, type MutationKind, type MutationNotice, type MutationOp, type NoExtension, type NumericMeasureArg, type OffsetPage, type OffsetPageArgs, type Ok, type Operation, type OrderByArg, type OrderByInput, type OrderTerm, PLUGIN_API_VERSION, PROBLEM_CONTENT_TYPE, PROBLEM_TYPE_BASE, type PageOf, type Payload, type PermdockBucketPolicy, type PermdockTopicPolicy, type PlanFilter, type PlanLimit, type PlanOrder, type Plugin, type Policy, type PolicyDecision, type PostgrestClientLike, type PostgrestPlan, type PrimaryKeyColumn, type PrimaryKeyValue, type ProblemDetails, type ProblemOptions, type ProblemResponseOptions, type Quantifier, type QueryEvent, type QuerySpec, type RawDbError, type ReadArgs, type ReadMethod, type ReadSet, type ReadSetOptions, type ReadSetParamType, type ReadSetParamTypes, type ReadSetParamValue, type ReadSetParams, type ReadSetResult, type RealtimeTableMeta, type RefreshEvent, type RelationMeasureArg, type RelationMeta, type RelationTypes, type Relations, type Repository, type RepositoryApi, type RepositoryExtension, type RepositoryOf, type RequestContext, type Result, type Returned, type Row, type RpcContext, type RpcDefinition, type RpcNotice, type RpcOptions, SPEC_PINS, type Schema, type SchemaMeta, type ScopeFor, type SearchArgs, type SelectArg, type SelectColumn, type SelectOp, type Selection, type Simplify, type SortDirection, type Specs, type StandardSchemaV1, StatsRecorder, type StoragePath, type SupabaseOptions, type TableFlags, type TableKey, type TableMeta, type TableRepositoryExtension, type TableSpecs, type UniqueConstraint, type UniqueKeyName, type UniqueWhere, type Update, type UpdateArgs, type UpdateOp, type UpsertArgs, type ValidationIssue, type WhereInput, type WithExtension, type WriteArgs, and, cacheTargetOf, column, compilePostgrest, consoleLogger, dbError, definePlugin, defineReadSet, defineSupabase, err, explainPostgrest, fromBetterResult, fromProblem, isCheck, isConflict, isDbError, isForeignKey, isProblem, isQuerySpec, isReadSet, mapDbError, memoryCache, not, ok, or, postgrestCompiler, postgrestExecutor, problemResponse, readSetTables, recordStats, rowKey, rpcCacheTargets, silentLogger, specTables, statusOf, toBetterResult, toDbError, toProblem, validate };
174
+ export { type AccessBucketPolicy, type AccessPolicySql, type AccessTopicPolicy, type Actor, type AggregateArgs, type AggregateFn, type AggregateOrderBy, type AggregateOrderByArg, type AggregateResult, type AggregateRow, type Aggregation, type AnyFunctions, type AnyModels, type AnyPlugin, type ApplyExtension, AsyncResult, type AuthEvent, type BetterResultApi, type BetterResultErr, type BetterResultErrors, type BetterResultOk, type BetterResultValue, BetterSupabase, type BetterSupabaseEvents, type BlockEvent, type BlockEventMap, type BlockEventType, type BlockProblemOptions, type BucketMeta, type BucketPolicyName, type CacheAdapter, type CacheTarget, type CallOptions, type Casing, type CheckConstraint, type ClaimsMeta, type Codec, type ColumnMeta, type ColumnOp, type ColumnOrderBy, type ColumnOrderByArg, type Compiler, type Condition, type ConflictTarget, type ConnectOptions, type CountArg, type CountArgs, type CountMode, type CursorPage, type CursorPageArgs, type DatabaseOf, type Db, type DbError, type DbErrorClass, type DbErrorClasses, type DbErrorKind, type DbErrorKinds, type DbErrorOf, DbException, type DbHelpers, type DbStats, type DeleteArgs, type DeleteExt, type DeleteOp, EMPTY_STATS, type EnrichDatabase, type Err, type ErrorEvent, type ErrorMapper, type ErrorMessages, type EventHandler, EventHub, type EventName, type ExecuteContext, type ExecuteResult, type Executor, type ExtensionOf, type FieldFilter, type FindExt, type FindFirstArgs, type FindManyArgs, type FindOnlyArgs, type Flags, type ForeignKeyConstraint, type FunctionMeta, type FunctionResult, type FunctionSignature, type FunctionSource, type FunctionTypes, type FunctionsOf, type HasFlag, type HookArgs, type Include, type IncludeArg, type IncludeArgs, type InferReadSetParams, type InferResult, type Insert, type InsertOp, type JsonPathOps, type LogFields, type Logger, type ManyResult, type ManyReturningArgs, type MappedDbError, type Measure, type MeasureArg, type MeasureKey, type MemoryCache, type ModelFlags, type ModelTypes, type ModelsOf, type MutableWhere, type MutationEvent, type MutationIntent, type MutationKind, type MutationNotice, type MutationOp, type NoExtension, type NumericMeasureArg, type OffsetPage, type OffsetPageArgs, type OffsetRangeArgs, type Ok, type Operation, type OrderByArg, type OrderByInput, type OrderTerm, PLUGIN_API_VERSION, PROBLEM_CONTENT_TYPE, PROBLEM_TYPE_BASE, type PageOf, type Payload, type PlanFilter, type PlanLimit, type PlanOrder, type Plugin, type Policy, type PolicyDecision, type PostgrestClientLike, type PostgrestExecutorOptions, type PostgrestPlan, type PrimaryKeyColumn, type PrimaryKeyValue, type ProblemDetails, type ProblemFormat, type ProblemOptions, type ProblemResponseOptions, type Quantifier, type QueryEvent, type QuerySpec, type RawDbError, type ReadArgs, type ReadMethod, type ReadSet, type ReadSetAuth, type ReadSetOptions, type ReadSetParamType, type ReadSetParamTypes, type ReadSetParamValue, type ReadSetParams, type ReadSetResult, type RealtimeTableMeta, type RefreshEvent, type RelationMeasureArg, type RelationMeta, type RelationTypes, type Relations, type Repository, type RepositoryApi, type RepositoryExtension, type RepositoryOf, type RequestArgs, type RequestContext, type Result, type ResultColumn, type Returned, type Row, type RpcContext, type RpcDefinition, type RpcNotice, type RpcOptions, SPEC_PINS, type Schema, type SchemaMeta, type ScopeFor, type SearchArgs, type SelectArg, type SelectColumn, type SelectOp, type Selection, type Simplify, type SortDirection, type SortSpec, type Specs, type StandardSchemaV1, StatsRecorder, type StoragePath, type SupabaseOptions, type TableFlags, type TableKey, type TableMeta, type TableRepositoryExtension, type TableSpecs, type UniqueConstraint, type UniqueKeyName, type UniqueWhere, type Update, type UpdateArgs, type UpdateOp, type UpsertArgs, type UpsertManyArgs, type ValidationIssue, type WhereInput, type WithExtension, type WriteArgs, type WriteManyArgs, and, cacheTargetOf, column, compilePostgrest, consoleLogger, dbError, defineBetterResultErrors, definePlugin, defineReadSet, defineSupabase, err, escapeLike, explainPostgrest, fromBetterResult, fromProblem, isCheck, isConflict, isDbError, isForeignKey, isProblem, isQuerySpec, isReadSet, mapDbError, memoryCache, not, ok, or, postgrestCompiler, postgrestExecutor, problemResponse, readSetTables, recordStats, rowKey, rpcCacheTargets, silentLogger, specTables, statusOf, toBetterResult, toDbError, toProblem, validate };
package/dist/index.js CHANGED
@@ -1,18 +1,43 @@
1
- import { a as isConflict, c as mapDbError, i as isCheck, l as statusOf, n as dbError, o as isDbError, s as isForeignKey, t as DbException } from "./errors-DtwXa6b8.js";
2
- import { i as escapeLike, o as defineSchema, s as tableMeta, t as simplify } from "./simplify-_0oUKqCd.js";
1
+ import { t as DbException } from "./db-exception-CnWcYPxL.js";
2
+ import { a as isConflict, c as mapDbError, i as isCheck, l as statusOf, n as dbError, o as isDbError, s as isForeignKey } from "./errors-B11Duf73.js";
3
+ import { i as tableMeta, r as defineSchema } from "./build-BXIzE6Xv.js";
4
+ import { t as escapeLike } from "./escape-like-DHfx6jRr.js";
3
5
  import { i as or, n as column, r as not, t as and } from "./types-6cYK9pbJ.js";
4
- import { r as encodeValue } from "./wire-D2dT86vi.js";
5
- import { a as toBetterResult, i as ok, n as err, o as toDbError, r as fromBetterResult, t as AsyncResult } from "./result-BKiliPY7.js";
6
- import { a as decodeRows, c as memoryCache, i as encodeCursor, l as rowKey, n as defineSupabase, o as EventHub, r as decodeCursor, s as cacheTargetOf, t as BetterSupabase, u as rpcCacheTargets } from "./define-cNKzqwL_.js";
6
+ import { a as isPlainTime, i as isPlainDateTime, l as provideTemporal, n as isInstant, o as isZonedDateTime, r as isPlainDate } from "./temporal-BJGitm-h.js";
7
+ import { i as encodeValue } from "./wire-DtZQ4sdE.js";
8
+ import { a as ok, i as fromBetterResult, n as defineBetterResultErrors, o as toBetterResult, r as err, s as toDbError, t as AsyncResult } from "./result-DzUbqgdW.js";
9
+ import { a as decodeRows, c as memoryCache, i as encodeCursor, l as rowKey, n as defineSupabase, o as EventHub, r as decodeCursor, s as cacheTargetOf, t as BetterSupabase, u as rpcCacheTargets } from "./define-B-TVjC25.js";
7
10
  import { n as touchedTables, t as invalidationTargets } from "./tables-Cb-3_VWc.js";
8
11
  import { n as silentLogger, t as consoleLogger } from "./logger-glM28NVN.js";
9
- import { r as definePlugin, t as PLUGIN_API_VERSION } from "./plugin-DwARMuQp.js";
10
- import { a as postgrestExecutor, i as explainPostgrest, n as StatsRecorder, o as compilePostgrest, r as recordStats, t as EMPTY_STATS } from "./stats-Bqob3WqT.js";
11
- import { c as readSetTables, d as isQuerySpec, f as specTables, i as defineReadSet, o as isReadSet } from "./read-set-DQFt1N_Y.js";
12
- import { t as validate } from "./standard-D7r6dMUu.js";
13
- import { a as problemResponse, i as isProblem, n as PROBLEM_TYPE_BASE, o as toProblem, r as fromProblem, t as PROBLEM_CONTENT_TYPE } from "./problem-BW1KhzSG.js";
14
- import { t as SPEC_PINS } from "./spec-pins-C3oc-Tdp.js";
12
+ import { r as definePlugin, t as PLUGIN_API_VERSION } from "./plugin-tfXW1-qO.js";
13
+ import { t as simplify } from "./simplify-DDO0j0LI.js";
14
+ import { a as postgrestExecutor, i as explainPostgrest, n as StatsRecorder, r as recordStats, t as EMPTY_STATS, u as compilePostgrest } from "./stats-D_AD9GGu.js";
15
+ import { c as readSetTables, d as isQuerySpec, f as specTables, i as defineReadSet, o as isReadSet } from "./read-set-DuKWC9Mj.js";
16
+ import { n as validate } from "./standard-BK0cqJ7y.js";
17
+ import { a as problemResponse, i as isProblem, n as PROBLEM_TYPE_BASE, o as toProblem, r as fromProblem, t as PROBLEM_CONTENT_TYPE } from "./problem-BreOl8b8.js";
18
+ import { t as SPEC_PINS } from "./spec-pins--j6mTok4.js";
15
19
  import { n as scopeOperation, r as scopeSelection, t as scopeCondition } from "./scope-CDHcS7dE.js";
20
+ //#region src/core/error-messages.ts
21
+ /**
22
+ * Turns an error into the sentence to show the user. Build it where your
23
+ * translations are, e.g. inside a hook that has `t`.
24
+ *
25
+ * ```ts
26
+ * const message = createErrorMessages({
27
+ * unauthorized: t('Sign in again to continue.'),
28
+ * raised: (error) => error.message,
29
+ * // ...every other kind
30
+ * });
31
+ * toast.error(message(result.error));
32
+ * ```
33
+ */
34
+ function createErrorMessages(messages) {
35
+ return (error) => {
36
+ const message = messages[error.kind];
37
+ return typeof message === "string" ? message : message(error);
38
+ };
39
+ }
40
+ //#endregion
16
41
  //#region src/core/define-repository.ts
17
42
  /**
18
43
  * Domain methods for one table, installed with `use()`. `base` is the
@@ -41,13 +66,16 @@ const postgrestCompiler = {
41
66
  };
42
67
  //#endregion
43
68
  //#region src/casing/index.ts
44
- /** `first_name` to `firstName`. Leaves already camel-cased names untouched. */
69
+ /**
70
+ * `first_name` to `firstName`. Leaves already camel-cased names and leading
71
+ * underscores (`_internal`) untouched.
72
+ */
45
73
  function toCamel(name) {
46
- return name.replaceAll(/_+([a-z0-9])/g, (_, char) => char.toUpperCase());
74
+ return name.replaceAll(/(?<=[^_])_+([a-z0-9])/g, (_, char) => char.toUpperCase());
47
75
  }
48
76
  /** `firstName` to `first_name`. */
49
77
  function toSnake(name) {
50
78
  return name.replaceAll(/([a-z0-9])([A-Z])/g, "$1_$2").replaceAll(/([A-Z])([A-Z][a-z])/g, "$1_$2").toLowerCase();
51
79
  }
52
80
  //#endregion
53
- export { AsyncResult, BetterSupabase, DbException, EMPTY_STATS, EventHub, PLUGIN_API_VERSION, PROBLEM_CONTENT_TYPE, PROBLEM_TYPE_BASE, SPEC_PINS, StatsRecorder, and, cacheTargetOf, column, compilePostgrest, consoleLogger, dbError, decodeCursor, decodeRows, definePlugin, defineReadSet, defineRepository, defineSchema, defineSupabase, encodeCursor, encodeValue, err, escapeLike, explainPostgrest, fromBetterResult, fromProblem, invalidationTargets, isCheck, isConflict, isDbError, isForeignKey, isProblem, isQuerySpec, isReadSet, mapDbError, memoryCache, not, ok, or, postgrestCompiler, postgrestExecutor, problemResponse, readSetTables, recordStats, rowKey, rpcCacheTargets, scopeCondition, scopeOperation, scopeSelection, silentLogger, simplify, specTables, statusOf, tableMeta, toBetterResult, toCamel, toDbError, toProblem, toSnake, touchedTables, validate };
81
+ export { AsyncResult, BetterSupabase, DbException, EMPTY_STATS, EventHub, PLUGIN_API_VERSION, PROBLEM_CONTENT_TYPE, PROBLEM_TYPE_BASE, SPEC_PINS, StatsRecorder, and, cacheTargetOf, column, compilePostgrest, consoleLogger, createErrorMessages, dbError, decodeCursor, decodeRows, defineBetterResultErrors, definePlugin, defineReadSet, defineRepository, defineSchema, defineSupabase, encodeCursor, encodeValue, err, escapeLike, explainPostgrest, fromBetterResult, fromProblem, invalidationTargets, isCheck, isConflict, isDbError, isForeignKey, isInstant, isPlainDate, isPlainDateTime, isPlainTime, isProblem, isQuerySpec, isReadSet, isZonedDateTime, mapDbError, memoryCache, not, ok, or, postgrestCompiler, postgrestExecutor, problemResponse, provideTemporal, readSetTables, recordStats, rowKey, rpcCacheTargets, scopeCondition, scopeOperation, scopeSelection, silentLogger, simplify, specTables, statusOf, tableMeta, toBetterResult, toCamel, toDbError, toProblem, toSnake, touchedTables, validate };
@@ -0,0 +1,19 @@
1
+ import { QueryClient, QueryMeta } from "@tanstack/query-core";
2
+ //#region src/query/invalidate.d.ts
3
+ /**
4
+ * Carried by every better-supabase query: the tables whose changes make it
5
+ * stale, on top of the app's `Register['queryMeta']`, so the options stay
6
+ * assignable to `useQuery` when the app narrows its query meta.
7
+ */
8
+ type BetterQueryMeta = QueryMeta & {
9
+ readonly bsTables: readonly string[];
10
+ };
11
+ /**
12
+ * Invalidates every query that read one of `tables`: better-supabase queries
13
+ * by their `meta.bsTables`, and other `['bs', table, ...]` keys by prefix.
14
+ * An index from table to queries finds them, so a write to a table nothing
15
+ * read skips the cache scan.
16
+ */
17
+ declare function invalidateTables(client: QueryClient, tables: readonly string[]): Promise<void>;
18
+ //#endregion
19
+ export { invalidateTables as n, BetterQueryMeta as t };
@@ -0,0 +1,16 @@
1
+ //#region src/core/json.ts
2
+ /** A `JSON.stringify` replacer: `bigint` values become decimal strings, as the wire codec writes them. */
3
+ function jsonReplacer(_key, value) {
4
+ return typeof value === "bigint" ? value.toString() : value;
5
+ }
6
+ /** `Response.json` that writes `bigint` values as decimal strings instead of throwing. */
7
+ function jsonResponse(data, init = {}) {
8
+ const headers = new Headers(init.headers);
9
+ if (!headers.has("content-type")) headers.set("content-type", "application/json");
10
+ return new Response(JSON.stringify(data, jsonReplacer), {
11
+ ...init,
12
+ headers
13
+ });
14
+ }
15
+ //#endregion
16
+ export { jsonResponse as n, jsonReplacer as t };