better-supabase 0.5.0 → 0.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (536) hide show
  1. package/README.md +299 -41
  2. package/dist/access-sql-B0dF-SoF.js +181 -0
  3. package/dist/actor-CQTlc1Hh.d.ts +43 -0
  4. package/dist/adapter-Bc1o3zyy.js +1106 -0
  5. package/dist/agents-CVHGd7It.d.ts +94 -0
  6. package/dist/ai-cache-CBWs1W0k.js +80 -0
  7. package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
  8. package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
  9. package/dist/ai-chat-B24UI962.js +743 -0
  10. package/dist/ai-files-CSPNswUY.js +319 -0
  11. package/dist/ai-sdk/agents/index.d.ts +74 -0
  12. package/dist/ai-sdk/agents/index.js +159 -0
  13. package/dist/ai-sdk/batches/index.d.ts +74 -0
  14. package/dist/ai-sdk/batches/index.js +180 -0
  15. package/dist/ai-sdk/cache/index.d.ts +38 -0
  16. package/dist/ai-sdk/cache/index.js +127 -0
  17. package/dist/ai-sdk/chat/index.d.ts +2 -0
  18. package/dist/ai-sdk/chat/index.js +246 -0
  19. package/dist/ai-sdk/embeddings/index.d.ts +3 -0
  20. package/dist/ai-sdk/embeddings/index.js +2 -0
  21. package/dist/ai-sdk/files/index.d.ts +61 -0
  22. package/dist/ai-sdk/files/index.js +111 -0
  23. package/dist/ai-sdk/index.d.ts +145 -0
  24. package/dist/ai-sdk/index.js +174 -0
  25. package/dist/ai-sdk/mcp/index.d.ts +102 -0
  26. package/dist/ai-sdk/mcp/index.js +362 -0
  27. package/dist/ai-sdk/memory/index.d.ts +67 -0
  28. package/dist/ai-sdk/memory/index.js +175 -0
  29. package/dist/ai-sdk/react/index.d.ts +2 -0
  30. package/dist/ai-sdk/react/index.js +3 -0
  31. package/dist/ai-sdk/react/server.d.ts +6 -0
  32. package/dist/ai-sdk/react/server.js +7 -0
  33. package/dist/ai-sdk/workflow/index.d.ts +249 -0
  34. package/dist/ai-sdk/workflow/index.js +575 -0
  35. package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
  36. package/dist/ai-sdk/workflow/react/index.js +66 -0
  37. package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
  38. package/dist/ai-sdk/workflow/react/server.js +12 -0
  39. package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
  40. package/dist/announcements-CiyOs-xP.js +107 -0
  41. package/dist/announcements-ZRGnScWI.d.ts +72 -0
  42. package/dist/api-keys-rCGtKaZA.d.ts +156 -0
  43. package/dist/assistant-DwdpDH1q.d.ts +147 -0
  44. package/dist/astro/index.d.ts +86 -0
  45. package/dist/astro/index.js +93 -0
  46. package/dist/attributes-5dYul0u0.js +13 -0
  47. package/dist/auth-link-BjFPqwLz.d.ts +97 -0
  48. package/dist/auth-link-DrDX9KOT.js +114 -0
  49. package/dist/authorization-BFCqamMs.d.ts +172 -0
  50. package/dist/before-route-CnR0C0Jr.js +30 -0
  51. package/dist/bind-Bu_ZNa3W.d.ts +62 -0
  52. package/dist/bind-l4kAvYSv.js +97 -0
  53. package/dist/block-events-CrT8r7Fe.js +76 -0
  54. package/dist/block-fields-GFkxl4dP.js +49 -0
  55. package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
  56. package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
  57. package/dist/block-helpers-DWHxHsEQ.js +190 -0
  58. package/dist/block-hooks-BmjMyXTa.js +114 -0
  59. package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
  60. package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
  61. package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
  62. package/dist/blocks/agents/index.d.ts +3 -0
  63. package/dist/blocks/agents/index.js +123 -0
  64. package/dist/blocks/ai-cache/index.d.ts +3 -0
  65. package/dist/blocks/ai-cache/index.js +3 -0
  66. package/dist/blocks/ai-chat/index.d.ts +31 -0
  67. package/dist/blocks/ai-chat/index.js +5 -0
  68. package/dist/blocks/ai-chat/react/index.d.ts +77 -0
  69. package/dist/blocks/ai-chat/react/index.js +387 -0
  70. package/dist/blocks/ai-chat/react/server.d.ts +16 -0
  71. package/dist/blocks/ai-chat/react/server.js +14 -0
  72. package/dist/blocks/ai-files/index.d.ts +14 -0
  73. package/dist/blocks/ai-files/index.js +3 -0
  74. package/dist/blocks/ai-providers/index.d.ts +7 -0
  75. package/dist/blocks/ai-providers/index.js +211 -0
  76. package/dist/blocks/ai-tasks/index.d.ts +3 -0
  77. package/dist/blocks/ai-tasks/index.js +203 -0
  78. package/dist/blocks/announcements/index.d.ts +3 -0
  79. package/dist/blocks/announcements/index.js +3 -0
  80. package/dist/blocks/announcements/react/index.d.ts +31 -0
  81. package/dist/blocks/announcements/react/index.js +86 -0
  82. package/dist/blocks/announcements/react/server.d.ts +6 -0
  83. package/dist/blocks/announcements/react/server.js +7 -0
  84. package/dist/blocks/api-keys/index.d.ts +35 -0
  85. package/dist/blocks/api-keys/index.js +334 -0
  86. package/dist/blocks/attachments/index.d.ts +210 -0
  87. package/dist/blocks/attachments/index.js +222 -0
  88. package/dist/blocks/audit/index.d.ts +366 -0
  89. package/dist/blocks/audit/index.js +714 -0
  90. package/dist/blocks/billing/index.d.ts +265 -0
  91. package/dist/blocks/billing/index.js +400 -0
  92. package/dist/blocks/comments/index.d.ts +200 -0
  93. package/dist/blocks/comments/index.js +207 -0
  94. package/dist/blocks/connectors/index.d.ts +3 -0
  95. package/dist/blocks/connectors/index.js +164 -0
  96. package/dist/blocks/data-lifecycle/index.d.ts +251 -0
  97. package/dist/blocks/data-lifecycle/index.js +353 -0
  98. package/dist/blocks/entitlements/index.d.ts +14 -0
  99. package/dist/blocks/entitlements/index.js +25 -0
  100. package/dist/blocks/flags/index.d.ts +226 -0
  101. package/dist/blocks/flags/index.js +282 -0
  102. package/dist/blocks/inbox/index.d.ts +6 -0
  103. package/dist/blocks/inbox/index.js +499 -0
  104. package/dist/blocks/inbox/react/index.d.ts +2 -0
  105. package/dist/blocks/inbox/react/index.js +225 -0
  106. package/dist/blocks/inbox/react/server.d.ts +10 -0
  107. package/dist/blocks/inbox/react/server.js +12 -0
  108. package/dist/blocks/index.d.ts +65 -0
  109. package/dist/blocks/index.js +77 -0
  110. package/dist/blocks/jobs/index.d.ts +297 -0
  111. package/dist/blocks/jobs/index.js +1051 -0
  112. package/dist/blocks/knowledge/index.d.ts +3 -0
  113. package/dist/blocks/knowledge/index.js +3 -0
  114. package/dist/blocks/memory/index.d.ts +8 -0
  115. package/dist/blocks/memory/index.js +289 -0
  116. package/dist/blocks/notifications/index.d.ts +297 -0
  117. package/dist/blocks/notifications/index.js +425 -0
  118. package/dist/blocks/notifications/react/index.d.ts +44 -0
  119. package/dist/blocks/notifications/react/index.js +67 -0
  120. package/dist/blocks/notifications/react/server.d.ts +6 -0
  121. package/dist/blocks/notifications/react/server.js +7 -0
  122. package/dist/blocks/onboarding/index.d.ts +3 -0
  123. package/dist/blocks/onboarding/index.js +64 -0
  124. package/dist/blocks/onboarding/react/index.d.ts +28 -0
  125. package/dist/blocks/onboarding/react/index.js +78 -0
  126. package/dist/blocks/onboarding/react/server.d.ts +7 -0
  127. package/dist/blocks/onboarding/react/server.js +7 -0
  128. package/dist/blocks/organizations/index.d.ts +241 -0
  129. package/dist/blocks/organizations/index.js +400 -0
  130. package/dist/blocks/outbox/index.d.ts +3 -0
  131. package/dist/blocks/outbox/index.js +266 -0
  132. package/dist/blocks/profiles/index.d.ts +40 -0
  133. package/dist/blocks/profiles/index.js +28 -0
  134. package/dist/blocks/push/index.d.ts +185 -0
  135. package/dist/blocks/push/index.js +258 -0
  136. package/dist/blocks/settings/index.d.ts +89 -0
  137. package/dist/blocks/settings/index.js +104 -0
  138. package/dist/blocks/sso/index.d.ts +198 -0
  139. package/dist/blocks/sso/index.js +1297 -0
  140. package/dist/blocks/usage/index.d.ts +4 -0
  141. package/dist/blocks/usage/index.js +233 -0
  142. package/dist/blocks/waitlist/index.d.ts +117 -0
  143. package/dist/blocks/waitlist/index.js +132 -0
  144. package/dist/blocks/webhooks/index.d.ts +304 -0
  145. package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
  146. package/dist/blocks/workflow-builder/index.d.ts +21 -0
  147. package/dist/blocks/workflow-builder/index.js +5 -0
  148. package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
  149. package/dist/blocks/workflow-builder/react/index.js +119 -0
  150. package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
  151. package/dist/blocks/workflow-builder/react/server.js +11 -0
  152. package/dist/blocks/workflows/index.d.ts +3 -0
  153. package/dist/blocks/workflows/index.js +3 -0
  154. package/dist/blocks/workflows/react/index.d.ts +47 -0
  155. package/dist/blocks/workflows/react/index.js +137 -0
  156. package/dist/blocks/workflows/react/server.d.ts +8 -0
  157. package/dist/blocks/workflows/react/server.js +11 -0
  158. package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
  159. package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
  160. package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
  161. package/dist/channels-CkgQ_X60.js +114 -0
  162. package/dist/chat-sdk/index.d.ts +303 -0
  163. package/dist/chat-sdk/index.js +733 -0
  164. package/dist/chat-sdk/react/index.d.ts +2 -0
  165. package/dist/chat-sdk/react/index.js +3 -0
  166. package/dist/chat-sdk/react/server.d.ts +3 -0
  167. package/dist/chat-sdk/react/server.js +2 -0
  168. package/dist/claims-DDBQT6BK.js +61 -0
  169. package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
  170. package/dist/cli/bin.js +1 -1
  171. package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
  172. package/dist/cli/config-B9HkL8nF.js +2 -0
  173. package/dist/cli/config-DU7EJImt.js +49 -0
  174. package/dist/cli/config-NiPxAmUF.js +1077 -0
  175. package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
  176. package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
  177. package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
  178. package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
  179. package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
  180. package/dist/cli/gen-BGLb_zou.js +3100 -0
  181. package/dist/cli/gen-DAH8FM2W.js +2 -0
  182. package/dist/cli/index.d.ts +44 -5
  183. package/dist/cli/index.js +7 -7
  184. package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
  185. package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
  186. package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
  187. package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
  188. package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
  189. package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
  190. package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
  191. package/dist/cli/read-sets-CETOSFx4.js +223 -0
  192. package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
  193. package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
  194. package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
  195. package/dist/cli/sql-D0GUtUPp.js +536 -0
  196. package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
  197. package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
  198. package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
  199. package/dist/client/index.d.ts +3 -2
  200. package/dist/client/index.js +11 -71
  201. package/dist/client/native/index.d.ts +228 -0
  202. package/dist/client/native/index.js +361 -0
  203. package/dist/client-CI0Z2zWX.js +277 -0
  204. package/dist/cloud-event-BnmD5fb9.js +46 -0
  205. package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
  206. package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
  207. package/dist/compose-BIBNgAnq.js +53 -0
  208. package/dist/composite-Bt1YK3Ke.d.ts +146 -0
  209. package/dist/composite-DhE66P5u.js +130 -0
  210. package/dist/config/index.d.ts +6 -4
  211. package/dist/config/index.js +5 -5
  212. package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
  213. package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
  214. package/dist/connector-Dv8kK0MO.d.ts +107 -0
  215. package/dist/connectors-hkLCwyEz.d.ts +120 -0
  216. package/dist/context-BCrWe7ow.d.ts +237 -0
  217. package/dist/credentials/index.d.ts +31 -0
  218. package/dist/credentials/index.js +168 -0
  219. package/dist/cron-DVPUg5k3.js +145 -0
  220. package/dist/csv-CPAzEmB6.js +25 -0
  221. package/dist/db-exception-CnWcYPxL.js +15 -0
  222. package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
  223. package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
  224. package/dist/edge/index.d.ts +69 -11
  225. package/dist/edge/index.js +191 -75
  226. package/dist/elysia/index.d.ts +59 -0
  227. package/dist/elysia/index.js +62 -0
  228. package/dist/embeddings-4ZvFzjsU.js +127 -0
  229. package/dist/embeddings-C9KGQnXt.d.ts +68 -0
  230. package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
  231. package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
  232. package/dist/entitlements-DRl6ZJUm.js +24 -0
  233. package/dist/envelope-DqnYGRw7.js +47 -0
  234. package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
  235. package/dist/errors-DLjJHPLK.js +44 -0
  236. package/dist/escape-like-DHfx6jRr.js +7 -0
  237. package/dist/escape-like-ImTK0ps_.d.ts +15 -0
  238. package/dist/eve/index.d.ts +220 -0
  239. package/dist/eve/index.js +504 -0
  240. package/dist/eve-gT2Fpjut.d.ts +151 -0
  241. package/dist/events/index.d.ts +4 -3
  242. package/dist/events/index.js +9 -50
  243. package/dist/events-DWDhx77e.d.ts +549 -0
  244. package/dist/executor-Bq28caBo.js +718 -0
  245. package/dist/executor-C-R4pucm.js +83 -0
  246. package/dist/executor-CaWigTyR.d.ts +148 -0
  247. package/dist/executor-D14tGopJ.d.ts +36 -0
  248. package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
  249. package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
  250. package/dist/executor-DvsBbNBS.d.ts +261 -0
  251. package/dist/expo/index.d.ts +79 -0
  252. package/dist/expo/index.js +129 -0
  253. package/dist/expo-sqlite/index.d.ts +58 -0
  254. package/dist/expo-sqlite/index.js +104 -0
  255. package/dist/field-errors-BFOa7WhB.d.ts +99 -0
  256. package/dist/field-errors-VF1yb8yI.js +13 -0
  257. package/dist/framework-CONDyPYx.js +51 -0
  258. package/dist/framework-DuVb4Xa8.d.ts +25 -0
  259. package/dist/gateway-C1ssRHnf.d.ts +130 -0
  260. package/dist/graph-BGyLLFLX.js +265 -0
  261. package/dist/h3/index.d.ts +59 -0
  262. package/dist/h3/index.js +55 -0
  263. package/dist/h3/v1/index.d.ts +63 -0
  264. package/dist/h3/v1/index.js +49 -0
  265. package/dist/history-BZih6SFP.js +64 -0
  266. package/dist/hono/index.d.ts +56 -7
  267. package/dist/hono/index.js +97 -45
  268. package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
  269. package/dist/http-Cv4T29xh.js +40 -0
  270. package/dist/http-DdYadv-o.js +126 -0
  271. package/dist/image-url-pIVlO6R1.js +41 -0
  272. package/dist/impersonation-DcqaTBHx.js +148 -0
  273. package/dist/inbox-i7E1ppo6.d.ts +384 -0
  274. package/dist/index-ACiNPN4Z.d.ts +74 -0
  275. package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
  276. package/dist/index-BkWT_uBO.d.ts +51 -0
  277. package/dist/index-BpFYMsi0.d.ts +53 -0
  278. package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
  279. package/dist/index-CaxrMD1A.d.ts +1 -0
  280. package/dist/index-ClmjK_o-.d.ts +55 -0
  281. package/dist/index-CtuakVRc.d.ts +267 -0
  282. package/dist/index-D48jVS-N.d.ts +246 -0
  283. package/dist/index-DDrYaUcq.d.ts +138 -0
  284. package/dist/index-DQh4VCc9.d.ts +98 -0
  285. package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
  286. package/dist/index.d.ts +65 -18
  287. package/dist/index.js +42 -14
  288. package/dist/invalidate-BBqhpxyB.d.ts +19 -0
  289. package/dist/json-CEnpTHlZ.js +16 -0
  290. package/dist/json-schema-CvER4kgT.js +502 -0
  291. package/dist/keys-4MnkWTTh.js +35 -0
  292. package/dist/kit-B5tid-q5.d.ts +60 -0
  293. package/dist/kit-Fm-Fv7q5.js +78 -0
  294. package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
  295. package/dist/knowledge-CDmiMLew.js +255 -0
  296. package/dist/lint/index.d.ts +1 -1
  297. package/dist/lint/index.js +37 -0
  298. package/dist/list/index.d.ts +3 -2
  299. package/dist/list/index.js +1 -444
  300. package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
  301. package/dist/list-query-gl808ac1.js +459 -0
  302. package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
  303. package/dist/logger-DWVYUmwi.d.ts +18 -0
  304. package/dist/mcp/index.d.ts +38 -11
  305. package/dist/mcp/index.js +82 -46
  306. package/dist/mcp/sdk/index.d.ts +105 -0
  307. package/dist/mcp/sdk/index.js +126 -0
  308. package/dist/message-CaKlqdsX.js +219 -0
  309. package/dist/message-CfDoR0Y6.d.ts +94 -0
  310. package/dist/messages-B9-5887d.js +715 -0
  311. package/dist/messages-DYP0sUTe.d.ts +59 -0
  312. package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
  313. package/dist/modules-DpPwzC7E.d.ts +192 -0
  314. package/dist/modules-dxrVK3ID.js +228 -0
  315. package/dist/nestjs/index.d.ts +68 -0
  316. package/dist/nestjs/index.js +164 -0
  317. package/dist/next/client/index.d.ts +35 -0
  318. package/dist/next/client/index.js +36 -0
  319. package/dist/next/image/index.js +3 -24
  320. package/dist/next/index.d.ts +150 -51
  321. package/dist/next/index.js +261 -107
  322. package/dist/node/index.d.ts +4 -0
  323. package/dist/node/index.js +210 -0
  324. package/dist/node-headers-AO06VhqH.d.ts +24 -0
  325. package/dist/node-headers-C71zNQHe.js +55 -0
  326. package/dist/nuxt/index.d.ts +60 -0
  327. package/dist/nuxt/index.js +64 -0
  328. package/dist/onboarding-BZGHYJks.d.ts +62 -0
  329. package/dist/openapi/index.d.ts +1 -1
  330. package/dist/openapi/index.js +3 -3
  331. package/dist/orpc/index.d.ts +70 -11
  332. package/dist/orpc/index.js +73 -24
  333. package/dist/otel/index.d.ts +7 -7
  334. package/dist/otel/index.js +87 -57
  335. package/dist/outbox-Cq7pPYvl.d.ts +161 -0
  336. package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
  337. package/dist/plugin-tfXW1-qO.js +45 -0
  338. package/dist/plugins/actor/index.d.ts +2 -2
  339. package/dist/plugins/actor/index.js +3 -3
  340. package/dist/plugins/rules/index.d.ts +11 -4
  341. package/dist/plugins/rules/index.js +40 -13
  342. package/dist/plugins/soft-delete/index.d.ts +5 -4
  343. package/dist/plugins/soft-delete/index.js +10 -5
  344. package/dist/plugins/tenant/index.d.ts +2 -2
  345. package/dist/plugins/tenant/index.js +18 -11
  346. package/dist/plugins/timestamps/index.d.ts +5 -3
  347. package/dist/plugins/timestamps/index.js +6 -4
  348. package/dist/plugins/validation/index.d.ts +2 -2
  349. package/dist/plugins/validation/index.js +10 -6
  350. package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
  351. package/dist/postgres/index.d.ts +4 -4
  352. package/dist/postgres/index.js +1 -2
  353. package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
  354. package/dist/powersync/index.d.ts +43 -0
  355. package/dist/powersync/index.js +199 -0
  356. package/dist/powersync/react/index.d.ts +87 -0
  357. package/dist/powersync/react/index.js +108 -0
  358. package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
  359. package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
  360. package/dist/provider-BH5UWZJ6.d.ts +113 -0
  361. package/dist/provider-Di3sRutW.js +57 -0
  362. package/dist/query/index.d.ts +4 -2
  363. package/dist/query/index.js +4 -3
  364. package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
  365. package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
  366. package/dist/react/index.d.ts +11 -7
  367. package/dist/react/index.js +7 -3
  368. package/dist/react/native/index.d.ts +116 -0
  369. package/dist/react/native/index.js +130 -0
  370. package/dist/react/server.d.ts +28 -10
  371. package/dist/react/server.js +22 -5
  372. package/dist/react/session.d.ts +2 -2
  373. package/dist/react-4ZqkP8da.js +79 -0
  374. package/dist/react-F80mF4-t.js +409 -0
  375. package/dist/react-router/index.d.ts +83 -0
  376. package/dist/react-router/index.js +89 -0
  377. package/dist/react-topic-seAWjL3_.js +38 -0
  378. package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
  379. package/dist/realtime/index.d.ts +4 -5
  380. package/dist/realtime/index.js +144 -82
  381. package/dist/refusal-CeJWxmkH.js +61 -0
  382. package/dist/refusal-D1rgbzNq.d.ts +15 -0
  383. package/dist/replicas-CwrYp5Zj.js +94 -0
  384. package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
  385. package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
  386. package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
  387. package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
  388. package/dist/respond-BUgsXNgk.js +91 -0
  389. package/dist/respond-DoBijysA.d.ts +93 -0
  390. package/dist/result-D7y2fT87.d.ts +282 -0
  391. package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
  392. package/dist/run-state-CPo-1X2B.d.ts +12 -0
  393. package/dist/run-state-CgBKzYMW.js +13 -0
  394. package/dist/search-CUWCRYKL.js +9 -0
  395. package/dist/server/index.d.ts +143 -21
  396. package/dist/server/index.js +46 -14
  397. package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
  398. package/dist/session-ChiXDZdZ.d.ts +72 -0
  399. package/dist/shared-CBxosKK3.js +75 -0
  400. package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
  401. package/dist/shared-DDSjEGDR.d.ts +11 -0
  402. package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
  403. package/dist/sign-in-Cb1mwv6X.js +86 -0
  404. package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
  405. package/dist/simplify-DDO0j0LI.js +83 -0
  406. package/dist/solid/index.d.ts +131 -0
  407. package/dist/solid/index.js +344 -0
  408. package/dist/solid-start/index.d.ts +75 -0
  409. package/dist/solid-start/index.js +58 -0
  410. package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
  411. package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
  412. package/dist/sql/index.d.ts +330 -194
  413. package/dist/sql/index.js +34901 -6489
  414. package/dist/ssr/index.d.ts +6 -5
  415. package/dist/ssr/index.js +3 -3
  416. package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
  417. package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
  418. package/dist/stats-D_AD9GGu.js +1123 -0
  419. package/dist/storage/index.d.ts +5 -5
  420. package/dist/storage/index.js +1027 -368
  421. package/dist/store-BdH5ruDx.js +66 -0
  422. package/dist/store-CGjgWu5n.d.ts +68 -0
  423. package/dist/streams/index.d.ts +76 -0
  424. package/dist/streams/index.js +77 -0
  425. package/dist/streams/redis/index.d.ts +52 -0
  426. package/dist/streams/redis/index.js +185 -0
  427. package/dist/stripe-BMj5LtsT.js +38 -0
  428. package/dist/stripe-D04h-QBT.d.ts +136 -0
  429. package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
  430. package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
  431. package/dist/svelte/index.d.ts +114 -0
  432. package/dist/svelte/index.js +344 -0
  433. package/dist/sveltekit/index.d.ts +116 -0
  434. package/dist/sveltekit/index.js +106 -0
  435. package/dist/tags-B99_U9Pp.js +39 -0
  436. package/dist/tags-Cx-LnIQP.d.ts +30 -0
  437. package/dist/tanstack-db/index.d.ts +71 -0
  438. package/dist/tanstack-db/index.js +72 -0
  439. package/dist/tanstack-start/index.d.ts +75 -0
  440. package/dist/tanstack-start/index.js +95 -0
  441. package/dist/tee-CoEppCER.js +101 -0
  442. package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
  443. package/dist/template-CwO38Do8.d.ts +6 -0
  444. package/dist/temporal-BJGitm-h.js +79 -0
  445. package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
  446. package/dist/tenant-I1TEZ_BX.js +27 -0
  447. package/dist/tenant-icPeuUBN.d.ts +17 -0
  448. package/dist/testing/index.d.ts +343 -37
  449. package/dist/testing/index.js +1186 -79
  450. package/dist/timing-CyTQPubY.js +92 -0
  451. package/dist/ttl-Hr34gRu8.js +12 -0
  452. package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
  453. package/dist/types-BI-0Sl2v.d.ts +359 -0
  454. package/dist/types-C05bxW-W.d.ts +220 -0
  455. package/dist/types-DGs5L0VN.d.ts +192 -0
  456. package/dist/types-TaiEeBGA.d.ts +156 -0
  457. package/dist/usage-CrvrL2vw.d.ts +177 -0
  458. package/dist/user-change-XzvgafU4.js +130 -0
  459. package/dist/vault-CSO7ss5C.d.ts +50 -0
  460. package/dist/vercel-connect/index.d.ts +47 -0
  461. package/dist/vercel-connect/index.js +119 -0
  462. package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
  463. package/dist/verify-DPuWngD4.d.ts +172 -0
  464. package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
  465. package/dist/view-BeFcRV6G.js +99 -0
  466. package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
  467. package/dist/vue/index.d.ts +141 -0
  468. package/dist/vue/index.js +362 -0
  469. package/dist/watch-DI34G86j.d.ts +60 -0
  470. package/dist/watch-Xuxrvxq-.js +122 -0
  471. package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
  472. package/dist/workflow-builder-DJ1oHn8g.js +398 -0
  473. package/dist/workflow-sdk/builder/index.d.ts +85 -0
  474. package/dist/workflow-sdk/builder/index.js +250 -0
  475. package/dist/workflow-sdk/index.d.ts +14 -0
  476. package/dist/workflow-sdk/index.js +3 -0
  477. package/dist/workflow-sdk/world/index.d.ts +107 -0
  478. package/dist/workflow-sdk/world/index.js +702 -0
  479. package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
  480. package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
  481. package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
  482. package/dist/workflows-B0j9WKPu.d.ts +185 -0
  483. package/dist/workflows-wu1WWBn7.js +216 -0
  484. package/package.json +470 -29
  485. package/schemas/ai-message-v1.json +258 -0
  486. package/schemas/config-v1.json +1074 -140
  487. package/schemas/doctor-report-v1.json +21 -1
  488. package/schemas/snapshot-v2.json +8 -0
  489. package/skills/better-supabase/SKILL.md +41 -12
  490. package/skills/better-supabase/references/frontend.md +96 -0
  491. package/skills/better-supabase/references/plugins.md +10 -6
  492. package/skills/better-supabase/references/troubleshooting.md +2 -1
  493. package/skills/better-supabase-api/SKILL.md +76 -22
  494. package/skills/better-supabase-api/references/adapters.md +207 -0
  495. package/skills/better-supabase-api/references/ai.md +125 -0
  496. package/skills/better-supabase-api/references/expo.md +65 -0
  497. package/skills/better-supabase-api/references/powersync.md +35 -0
  498. package/skills/better-supabase-api/references/streams-credentials.md +105 -0
  499. package/skills/better-supabase-auth/SKILL.md +62 -18
  500. package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
  501. package/skills/better-supabase-testing/SKILL.md +3 -1
  502. package/dist/cli/config-dtoekM0v.js +0 -2
  503. package/dist/cli/gen-BJc9vdyu.js +0 -2
  504. package/dist/cli/gen-C2osRcr5.js +0 -2204
  505. package/dist/cli/read-sets-BfMQcKy8.js +0 -289
  506. package/dist/cli/sql-DzPbfngx.js +0 -348
  507. package/dist/entitlements-CTEBm7IB.js +0 -20
  508. package/dist/events-aIO7vsIk.d.ts +0 -230
  509. package/dist/executor-BunPOO-k.d.ts +0 -402
  510. package/dist/executor-XycESQPH.js +0 -94
  511. package/dist/impersonation-VfaGc4Q_.js +0 -41
  512. package/dist/index-BGdgBPdf.d.ts +0 -161
  513. package/dist/index-DOESKG27.d.ts +0 -100
  514. package/dist/index-DmXSxbLi.d.ts +0 -62
  515. package/dist/index-Dxn2a5cw.d.ts +0 -50
  516. package/dist/jobs/index.d.ts +0 -226
  517. package/dist/jobs/index.js +0 -1007
  518. package/dist/json-schema-m1fiwKgN.js +0 -208
  519. package/dist/kit-events-CTFDfSwb.js +0 -60
  520. package/dist/kit-transport-B82k1djG.d.ts +0 -33
  521. package/dist/kits-CGLLrNPd.js +0 -157
  522. package/dist/notifications/index.d.ts +0 -162
  523. package/dist/notifications/index.js +0 -264
  524. package/dist/orgs/index.d.ts +0 -132
  525. package/dist/orgs/index.js +0 -245
  526. package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
  527. package/dist/permdock-sql-DgOfeixi.js +0 -51
  528. package/dist/plugin-DwARMuQp.js +0 -59
  529. package/dist/server-Csx2sRjg.js +0 -655
  530. package/dist/stats-Bqob3WqT.js +0 -592
  531. package/dist/support-DT-OhSxD.d.ts +0 -88
  532. package/dist/template-mbvlysOo.d.ts +0 -6
  533. package/dist/temporal-CVlIV2DZ.js +0 -40
  534. package/dist/user-change-CHFEUro1.js +0 -49
  535. package/dist/webhooks/index.d.ts +0 -285
  536. package/skills/better-supabase-auth/references/permdock.md +0 -100
@@ -0,0 +1,66 @@
1
+ //#region src/streams/store.ts
2
+ /** A reader that fetches pages and waits for a wake-up or `pollMs` between empty ones. */
3
+ function pollingRead(options) {
4
+ let next = options.from;
5
+ let woken = false;
6
+ let resolveWait;
7
+ const wake = () => {
8
+ woken = true;
9
+ resolveWait?.();
10
+ };
11
+ let unsubscribe;
12
+ const stop = () => {
13
+ unsubscribe?.();
14
+ unsubscribe = void 0;
15
+ options.signal?.removeEventListener("abort", wake);
16
+ };
17
+ const wait = () => new Promise((resolve) => {
18
+ if (woken || options.signal?.aborted) {
19
+ resolve();
20
+ return;
21
+ }
22
+ const timer = setTimeout(done, options.pollMs);
23
+ function done() {
24
+ clearTimeout(timer);
25
+ resolveWait = void 0;
26
+ resolve();
27
+ }
28
+ resolveWait = done;
29
+ });
30
+ return new ReadableStream({
31
+ start() {
32
+ options.signal?.addEventListener("abort", wake, { once: true });
33
+ unsubscribe = options.subscribe?.(wake);
34
+ },
35
+ async pull(controller) {
36
+ for (;;) {
37
+ if (options.signal?.aborted) {
38
+ stop();
39
+ controller.close();
40
+ return;
41
+ }
42
+ woken = false;
43
+ const page = await options.fetch(next);
44
+ if (!page.ok) {
45
+ stop();
46
+ controller.error(page.error);
47
+ return;
48
+ }
49
+ for (const chunk of page.data.chunks) controller.enqueue(chunk);
50
+ next = page.data.next;
51
+ if (page.data.done) {
52
+ stop();
53
+ controller.close();
54
+ return;
55
+ }
56
+ if (page.data.chunks.length > 0) return;
57
+ await wait();
58
+ }
59
+ },
60
+ cancel() {
61
+ stop();
62
+ }
63
+ });
64
+ }
65
+ //#endregion
66
+ export { pollingRead as t };
@@ -0,0 +1,68 @@
1
+ import { t as AsyncResult } from "./result-D7y2fT87.js";
2
+ //#region src/streams/store.d.ts
3
+ /** How a stream is opened. */
4
+ interface StreamOpenOptions {
5
+ /** The user who may read the stream and cancel it. */
6
+ readonly owner?: string;
7
+ readonly tenant?: string;
8
+ /** What the stream carries, such as `chat` or `workflow`. Defaults to `default`. */
9
+ readonly kind?: string;
10
+ /** Seconds the stream lives, or a Postgres interval such as `"2 hours"`. Defaults to one day. */
11
+ readonly ttl?: number | string;
12
+ }
13
+ interface StreamAppendResult {
14
+ /** The index the next chunk gets. */
15
+ readonly next: number;
16
+ /** Someone asked the writer to stop. */
17
+ readonly cancelled: boolean;
18
+ }
19
+ interface StreamStatus {
20
+ /** The number of chunks stored. */
21
+ readonly next: number;
22
+ readonly closed: boolean;
23
+ readonly cancelled: boolean;
24
+ }
25
+ interface StreamReadOptions {
26
+ /** Ends the stream early. */
27
+ readonly signal?: AbortSignal;
28
+ }
29
+ interface StreamPurgeOptions {
30
+ /** How long a closed stream is kept: seconds or an interval. Defaults to one day. */
31
+ readonly olderThan?: number | string;
32
+ }
33
+ /**
34
+ * Durable, resumable output: one writer appends ordered text chunks and any
35
+ * number of readers read from a chunk index, live or after a reconnect.
36
+ * Chunks keep the index they were appended at, so a reader that counted `n`
37
+ * chunks resumes with `read(id, n)`.
38
+ */
39
+ interface StreamStore {
40
+ readonly apiVersion: 1;
41
+ readonly name: string;
42
+ /** Creates the stream; `true` when it was new, `false` when it existed. */
43
+ open(id: string, options?: StreamOpenOptions): AsyncResult<boolean>;
44
+ /**
45
+ * Stores `chunks` at `fromIdx`, `fromIdx + 1`, ... Indexes already stored
46
+ * are skipped, so a retried batch is harmless. Fails with the hint
47
+ * `STREAM_NOT_FOUND`, `STREAM_CLOSED` or `STREAM_GAP` (`fromIdx` past the
48
+ * end).
49
+ */
50
+ append(id: string, fromIdx: number, chunks: readonly string[]): AsyncResult<StreamAppendResult>;
51
+ /**
52
+ * The chunks from `fromIdx` on, waiting for new ones until the stream is
53
+ * closed. A stream that doesn't exist (or that the caller can't read) ends
54
+ * at once. A read error errors the stream with the `DbError`.
55
+ */
56
+ read(id: string, fromIdx?: number, options?: StreamReadOptions): ReadableStream<string>;
57
+ /** The stream's state, or `undefined` when it doesn't exist. */
58
+ status(id: string): AsyncResult<StreamStatus | undefined>;
59
+ isCancelled(id: string): AsyncResult<boolean>;
60
+ /** Marks the stream finished; `false` when it was closed already or doesn't exist. */
61
+ close(id: string): AsyncResult<boolean>;
62
+ /** Asks the writer to stop; it learns on its next append. */
63
+ cancel(id: string): AsyncResult<boolean>;
64
+ /** Deletes expired streams and closed ones past `olderThan`; resolves with the count. */
65
+ purge(options?: StreamPurgeOptions): AsyncResult<number>;
66
+ }
67
+ //#endregion
68
+ export { StreamStatus as a, StreamReadOptions as i, StreamOpenOptions as n, StreamStore as o, StreamPurgeOptions as r, StreamAppendResult as t };
@@ -0,0 +1,76 @@
1
+ import { t as AsyncResult, w as ErrorMapper } from "../result-D7y2fT87.js";
2
+ import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../block-transport-DvaoPuZ9.js";
3
+ import { a as StreamStatus, i as StreamReadOptions, n as StreamOpenOptions, o as StreamStore, r as StreamPurgeOptions, t as StreamAppendResult } from "../store-CGjgWu5n.js";
4
+ import { SupabaseClient } from "@supabase/supabase-js";
5
+ //#region src/streams/postgres.d.ts
6
+ interface PostgresStreamStoreOptions {
7
+ /** `sqlTransport(postgres.asService())` for the writer; the owner's transport for reads. */
8
+ readonly transport: BlockTransport;
9
+ /** The schema of the `streams` module. Defaults to `better_supabase`. */
10
+ readonly schema?: string;
11
+ readonly mappers?: readonly ErrorMapper[];
12
+ /**
13
+ * `realtime` (the default) pings the stream's private topic after each
14
+ * batch; `poll` skips the ping for apps near the Realtime message quota,
15
+ * and readers poll instead.
16
+ */
17
+ readonly wake?: "realtime" | "poll";
18
+ /** A Supabase client a reader joins the topic with, to wake up on the ping. */
19
+ readonly realtime?: Pick<SupabaseClient, "channel" | "removeChannel">;
20
+ /** `sql.modules.streams.options.topic`. Defaults to `stream`. */
21
+ readonly topic?: string;
22
+ /** Milliseconds between reads of an idle stream: 250 by default, 2000 with `realtime`. */
23
+ readonly pollMs?: number;
24
+ /** Chunks per read. Defaults to 1000. */
25
+ readonly batch?: number;
26
+ }
27
+ /** A `StreamStore` on the `streams` SQL module. */
28
+ export declare function postgresStreamStore(options: PostgresStreamStoreOptions): StreamStore;
29
+ //#endregion
30
+ //#region src/streams/tee.d.ts
31
+ interface TeeToStoreOptions extends StreamOpenOptions {
32
+ /** Milliseconds a chunk may wait before its batch is written. Defaults to 100. */
33
+ readonly flushMs?: number;
34
+ /** Bytes that trigger a write before `flushMs`. Defaults to 4096. */
35
+ readonly flushBytes?: number;
36
+ /**
37
+ * Called once when the store reports the stream cancelled. Abort the
38
+ * generation here, e.g. the `AbortController` passed to `streamText`.
39
+ */
40
+ readonly onCancel?: () => void;
41
+ }
42
+ interface TeedStream {
43
+ /** The source, for the live response. */
44
+ readonly stream: ReadableStream<string>;
45
+ /**
46
+ * Settles once every chunk is stored and the stream is closed, with the
47
+ * number of chunks. It keeps going after the live client disconnects, so
48
+ * hand it to `waitUntil` or `after`.
49
+ */
50
+ readonly persisted: AsyncResult<number>;
51
+ }
52
+ /**
53
+ * Copies `source` into `store` under `id` while passing it through. Chunks
54
+ * are written in batches, each at its own index, so a reader that counted
55
+ * `n` chunks of the live stream resumes with `read(id, n)`.
56
+ */
57
+ export declare function teeToStore(store: StreamStore, id: string, source: ReadableStream<string>, options?: TeeToStoreOptions): TeedStream;
58
+ /**
59
+ * Stores `source` under `id` without a live copy, for a stream the caller
60
+ * already sends elsewhere (the second branch of its own `tee()`). Settles
61
+ * like `teeToStore`'s `persisted`.
62
+ */
63
+ export declare function writeToStore(store: StreamStore, id: string, source: ReadableStream<string>, options?: TeeToStoreOptions): AsyncResult<number>;
64
+ interface ResumeFromStoreOptions {
65
+ /** The number of chunks the client already has. Defaults to 0. */
66
+ readonly fromIdx?: number;
67
+ readonly signal?: AbortSignal;
68
+ }
69
+ /**
70
+ * The rest of stream `id` from `fromIdx`, or `undefined` when there is
71
+ * nothing to resume: no such stream, or a closed one the client has read to
72
+ * the end. A route answers `undefined` with 204.
73
+ */
74
+ export declare function resumeFromStore(store: StreamStore, id: string, options?: ResumeFromStoreOptions): AsyncResult<ReadableStream<string> | undefined>;
75
+ //#endregion
76
+ export { type BlockTransport, type PostgresStreamStoreOptions, type ResumeFromStoreOptions, type StreamAppendResult, type StreamOpenOptions, type StreamPurgeOptions, type StreamReadOptions, type StreamStatus, type StreamStore, type TeeToStoreOptions, type TeedStream, rpcTransport, sqlTransport };
@@ -0,0 +1,77 @@
1
+ import { n as rpcTransport, r as sqlTransport } from "../block-transport-BLr-ZgLc.js";
2
+ import { D as stringsOf, d as isRecord, i as blockCall, w as seconds, y as recordOf } from "../block-helpers-DWHxHsEQ.js";
3
+ import { n as teeToStore, r as writeToStore, t as resumeFromStore } from "../tee-CoEppCER.js";
4
+ import { t as pollingRead } from "../store-BdH5ruDx.js";
5
+ //#region src/streams/postgres.ts
6
+ function statusOf(value) {
7
+ if (!isRecord(value)) return void 0;
8
+ return {
9
+ next: Number(value["next"] ?? 0),
10
+ closed: value["closed"] === true,
11
+ cancelled: value["cancelled"] === true
12
+ };
13
+ }
14
+ /** A `StreamStore` on the `streams` SQL module. */
15
+ function postgresStreamStore(options) {
16
+ const call = blockCall(options.transport, options.schema ?? "better_supabase", options.mappers);
17
+ const wake = (options.wake ?? "realtime") === "realtime";
18
+ const topic = options.topic ?? "stream";
19
+ const realtime = wake ? options.realtime : void 0;
20
+ const pollMs = options.pollMs ?? (realtime ? 2e3 : 250);
21
+ const batch = options.batch ?? 1e3;
22
+ const subscribe = realtime ? (id) => (onWake) => {
23
+ const channel = realtime.channel(`${topic}:${id}`, { config: { private: true } }).on("broadcast", { event: "*" }, onWake).subscribe();
24
+ return () => {
25
+ realtime.removeChannel(channel);
26
+ };
27
+ } : void 0;
28
+ const status = (id) => call("stream_status", { stream_id: id }, statusOf);
29
+ return {
30
+ apiVersion: 1,
31
+ name: "postgres",
32
+ open: (id, open = {}) => call("stream_open", {
33
+ stream_id: id,
34
+ owner: open.owner,
35
+ tenant: open.tenant,
36
+ kind: open.kind,
37
+ ttl: open.ttl === void 0 ? void 0 : seconds(open.ttl),
38
+ wake
39
+ }, (value) => value === true),
40
+ append: (id, fromIdx, chunks) => call("stream_append", {
41
+ stream_id: id,
42
+ from_idx: fromIdx,
43
+ chunks: [...chunks]
44
+ }, (value) => {
45
+ const row = recordOf(value, "stream_append");
46
+ return {
47
+ next: Number(row["next"]),
48
+ cancelled: row["cancelled"] === true
49
+ };
50
+ }),
51
+ read: (id, fromIdx = 0, read = {}) => pollingRead({
52
+ from: fromIdx,
53
+ pollMs,
54
+ signal: read.signal,
55
+ ...subscribe ? { subscribe: subscribe(id) } : {},
56
+ fetch: (from) => call("stream_read", {
57
+ stream_id: id,
58
+ from_idx: from,
59
+ max: batch
60
+ }, (value) => {
61
+ const row = recordOf(value, "stream_read");
62
+ return {
63
+ chunks: stringsOf(row["chunks"]),
64
+ next: Number(row["next"]),
65
+ done: row["done"] === true
66
+ };
67
+ })
68
+ }),
69
+ status,
70
+ isCancelled: (id) => status(id).map((state) => state?.cancelled === true),
71
+ close: (id) => call("stream_close", { stream_id: id }, (value) => value === true),
72
+ cancel: (id) => call("stream_cancel", { stream_id: id }, (value) => value === true),
73
+ purge: (purge = {}) => call("purge_streams", { older_than: purge.olderThan === void 0 ? void 0 : seconds(purge.olderThan) }, Number)
74
+ };
75
+ }
76
+ //#endregion
77
+ export { postgresStreamStore, resumeFromStore, rpcTransport, sqlTransport, teeToStore, writeToStore };
@@ -0,0 +1,52 @@
1
+ import { o as StreamStore } from "../../store-CGjgWu5n.js";
2
+ //#region src/streams/redis/redis.d.ts
3
+ /**
4
+ * The commands the store sends, as node-redis 5 and 6 (`createClient()`)
5
+ * name them. Any client with these methods works.
6
+ */
7
+ interface RedisStreamClient {
8
+ hSetNX(key: string, field: string, value: string): Promise<unknown>;
9
+ hSet(key: string, field: string, value: string): Promise<unknown>;
10
+ hGetAll(key: string): Promise<unknown>;
11
+ rPush(key: string, elements: string[]): Promise<unknown>;
12
+ lRange(key: string, start: number, stop: number): Promise<unknown>;
13
+ lLen(key: string): Promise<unknown>;
14
+ expire(key: string, seconds: number): Promise<unknown>;
15
+ publish(channel: string, message: string): Promise<unknown>;
16
+ }
17
+ /** A client in subscriber mode, such as `client.duplicate()` after `connect()`. */
18
+ interface RedisStreamSubscriber {
19
+ subscribe(channel: string, listener: (message: string) => void): Promise<unknown>;
20
+ unsubscribe(channel: string, listener: (message: string) => void): Promise<unknown>;
21
+ }
22
+ interface RedisStreamSharedOptions {
23
+ /** Key and channel prefix. Defaults to `bs:stream`. */
24
+ readonly keyPrefix?: string;
25
+ /** How long a stream opened without a `ttl` lives. Defaults to `'1 day'`. */
26
+ readonly ttl?: number | string;
27
+ /** Milliseconds between reads of an idle stream: 250 by default, 2000 with `subscriber`. */
28
+ readonly pollMs?: number;
29
+ /** Chunks per read. Defaults to 1000. */
30
+ readonly batch?: number;
31
+ }
32
+ type RedisStreamStoreOptions = RedisStreamSharedOptions & ({
33
+ readonly client: RedisStreamClient;
34
+ /** Wakes readers on each batch; without it they poll. */
35
+ readonly subscriber?: RedisStreamSubscriber;
36
+ } | {
37
+ /**
38
+ * Connects with `redis` (node-redis, an optional peer) on first use,
39
+ * with a duplicate connection that wakes readers.
40
+ */
41
+ readonly url: string;
42
+ });
43
+ /**
44
+ * A `StreamStore` on Redis, for apps that keep live output out of Postgres.
45
+ * Chunks live in a list and the state in a hash, both expiring after the
46
+ * stream's `ttl`, so `purge` has nothing to do and resolves with 0. Redis
47
+ * has no row-level security: check that the caller owns the stream before
48
+ * `read` or `cancel`.
49
+ */
50
+ export declare function redisStreamStore(options: RedisStreamStoreOptions, load?: () => Promise<unknown>): StreamStore;
51
+ //#endregion
52
+ export type { RedisStreamClient, RedisStreamStoreOptions, RedisStreamSubscriber };
@@ -0,0 +1,185 @@
1
+ import { n as dbError } from "../../errors-B11Duf73.js";
2
+ import { a as ok, r as err, t as AsyncResult } from "../../result-DzUbqgdW.js";
3
+ import { d as isRecord } from "../../block-helpers-DWHxHsEQ.js";
4
+ import { t as pollingRead } from "../../store-BdH5ruDx.js";
5
+ //#region src/streams/redis/redis.ts
6
+ const isNodeRedis = (value) => isRecord(value) && typeof value["createClient"] === "function";
7
+ /**
8
+ * Loads `redis` on first use. The specifier is a variable so bundlers leave
9
+ * the optional peer out of apps that pass their own client.
10
+ */
11
+ async function loadRedis() {
12
+ const specifier = "redis";
13
+ try {
14
+ return await import(specifier);
15
+ } catch {
16
+ return;
17
+ }
18
+ }
19
+ async function connectUrl(url, load) {
20
+ const module = await load();
21
+ if (!isNodeRedis(module)) throw new TypeError("redisStreamStore({ url }) needs the redis package: pnpm add redis, or pass a connected client");
22
+ const client = module.createClient({ url });
23
+ const subscriber = client.duplicate();
24
+ await Promise.all([client.connect(), subscriber.connect()]);
25
+ return {
26
+ client,
27
+ subscriber
28
+ };
29
+ }
30
+ const DAY = 86400;
31
+ const UNITS = {
32
+ second: 1,
33
+ minute: 60,
34
+ hour: 3600,
35
+ day: DAY
36
+ };
37
+ const INTERVAL = /^(\d+)\s*(second|minute|hour|day)s?$/;
38
+ function ttlSeconds(value) {
39
+ if (typeof value === "number") return value > 0 ? Math.ceil(value) : void 0;
40
+ const match = INTERVAL.exec(value.trim());
41
+ const unit = match?.[2] === void 0 ? void 0 : UNITS[match[2]];
42
+ return match && unit ? Number(match[1]) * unit : void 0;
43
+ }
44
+ const text = (value) => typeof value === "string" ? value : void 0;
45
+ /**
46
+ * A `StreamStore` on Redis, for apps that keep live output out of Postgres.
47
+ * Chunks live in a list and the state in a hash, both expiring after the
48
+ * stream's `ttl`, so `purge` has nothing to do and resolves with 0. Redis
49
+ * has no row-level security: check that the caller owns the stream before
50
+ * `read` or `cancel`.
51
+ */
52
+ function redisStreamStore(options, load = loadRedis) {
53
+ let connected = "client" in options ? Promise.resolve({
54
+ client: options.client,
55
+ subscriber: options.subscriber
56
+ }) : void 0;
57
+ const connection = () => {
58
+ if (connected) return connected;
59
+ if (!("url" in options)) throw new TypeError("redisStreamStore needs a client or a url");
60
+ const pending = connectUrl(options.url, load);
61
+ connected = pending;
62
+ pending.catch(() => {
63
+ connected = void 0;
64
+ });
65
+ return pending;
66
+ };
67
+ const redis = async () => (await connection()).client;
68
+ const prefix = options.keyPrefix ?? "bs:stream";
69
+ const defaultTtl = ttlSeconds(options.ttl ?? DAY);
70
+ const wakes = "url" in options || options.subscriber !== void 0;
71
+ const pollMs = options.pollMs ?? (wakes ? 2e3 : 250);
72
+ const batch = options.batch ?? 1e3;
73
+ const meta = (id) => `${prefix}:${id}:meta`;
74
+ const list = (id) => `${prefix}:${id}:chunks`;
75
+ const channel = (id) => `${prefix}:${id}`;
76
+ const state = async (id) => {
77
+ const value = await (await redis()).hGetAll(meta(id));
78
+ if (!isRecord(value) || text(value["created"]) === void 0) return void 0;
79
+ const fields = {};
80
+ for (const [key, entry] of Object.entries(value)) {
81
+ const field = text(entry);
82
+ if (field !== void 0) fields[key] = field;
83
+ }
84
+ return fields;
85
+ };
86
+ const length = async (id) => Number(await (await redis()).lLen(list(id)));
87
+ const missing = (id) => dbError("not_found", `stream ${id} does not exist`, { hint: "STREAM_NOT_FOUND" });
88
+ const attempt = (run) => AsyncResult.from(async () => ok(await run()));
89
+ const status = (id) => attempt(async () => {
90
+ const fields = await state(id);
91
+ if (!fields) return;
92
+ return {
93
+ next: await length(id),
94
+ closed: fields["closed"] !== void 0,
95
+ cancelled: fields["cancelled"] !== void 0
96
+ };
97
+ });
98
+ const mark = (id, field) => attempt(async () => {
99
+ const fields = await state(id);
100
+ if (!fields || fields[field] !== void 0) return false;
101
+ if (field === "cancelled" && fields["closed"] !== void 0) return false;
102
+ const client = await redis();
103
+ await client.hSet(meta(id), field, (/* @__PURE__ */ new Date()).toISOString());
104
+ await client.publish(channel(id), field === "closed" ? "close" : "cancel");
105
+ if (field === "cancelled") await client.publish(`${channel(id)}:cancel`, "cancel");
106
+ return true;
107
+ });
108
+ return {
109
+ apiVersion: 1,
110
+ name: "redis",
111
+ open: (id, open = {}) => {
112
+ const ttl = open.ttl === void 0 ? defaultTtl : ttlSeconds(open.ttl);
113
+ if (ttl === void 0) return AsyncResult.err(dbError("invalid_input", `ttl must be seconds or "<n> seconds|minutes|hours|days"`));
114
+ return attempt(async () => {
115
+ const client = await redis();
116
+ const created = await client.hSetNX(meta(id), "created", (/* @__PURE__ */ new Date()).toISOString());
117
+ if (created !== true && Number(created) !== 1) return false;
118
+ await client.hSet(meta(id), "kind", open.kind ?? "default");
119
+ if (open.owner !== void 0) await client.hSet(meta(id), "owner", open.owner);
120
+ if (open.tenant !== void 0) await client.hSet(meta(id), "tenant", open.tenant);
121
+ await client.hSet(meta(id), "ttl", String(ttl));
122
+ await client.expire(meta(id), ttl);
123
+ return true;
124
+ });
125
+ },
126
+ append: (id, fromIdx, chunks) => AsyncResult.from(async () => {
127
+ const fields = await state(id);
128
+ if (!fields) return err(missing(id));
129
+ if (fields["closed"] !== void 0) return err(dbError("raised", `stream ${id} is closed`, { hint: "STREAM_CLOSED" }));
130
+ const stored = await length(id);
131
+ if (fromIdx < 0 || fromIdx > stored) return err(dbError("raised", `stream ${id} is at chunk ${String(stored)}, not ${String(fromIdx)}`, { hint: "STREAM_GAP" }));
132
+ const fresh = chunks.slice(stored - fromIdx);
133
+ if (fresh.length > 0) {
134
+ const client = await redis();
135
+ await client.rPush(list(id), [...fresh]);
136
+ await client.expire(list(id), Number(fields["ttl"] ?? DAY));
137
+ await client.publish(channel(id), "append");
138
+ }
139
+ return ok({
140
+ next: Math.max(stored, fromIdx + chunks.length),
141
+ cancelled: fields["cancelled"] !== void 0
142
+ });
143
+ }),
144
+ read: (id, fromIdx = 0, read = {}) => pollingRead({
145
+ from: fromIdx,
146
+ pollMs,
147
+ signal: read.signal,
148
+ ...wakes ? { subscribe: (wake) => {
149
+ const listener = () => {
150
+ wake();
151
+ };
152
+ const joined = connection().then(async ({ subscriber }) => {
153
+ await subscriber?.subscribe(channel(id), listener);
154
+ return subscriber;
155
+ });
156
+ return () => {
157
+ joined.then((subscriber) => subscriber?.unsubscribe(channel(id), listener)).catch(() => {});
158
+ };
159
+ } } : {},
160
+ fetch: (from) => attempt(async () => {
161
+ const fields = await state(id);
162
+ if (!fields) return {
163
+ chunks: [],
164
+ next: from,
165
+ done: true
166
+ };
167
+ const value = await (await redis()).lRange(list(id), from, from + batch - 1);
168
+ const chunks = Array.isArray(value) ? value.map(String) : [];
169
+ const next = from + chunks.length;
170
+ return {
171
+ chunks,
172
+ next,
173
+ done: fields["closed"] !== void 0 && next >= await length(id)
174
+ };
175
+ })
176
+ }),
177
+ status,
178
+ isCancelled: (id) => status(id).map((value) => value?.cancelled === true),
179
+ close: (id) => mark(id, "closed"),
180
+ cancel: (id) => mark(id, "cancelled"),
181
+ purge: () => AsyncResult.ok(0)
182
+ };
183
+ }
184
+ //#endregion
185
+ export { redisStreamStore };
@@ -0,0 +1,38 @@
1
+ //#region src/blocks/stripe.ts
2
+ const isModule = (value) => typeof value === "object" && value !== null && "default" in value && typeof value.default === "function" && "createFetchHttpClient" in value.default;
3
+ /**
4
+ * Loads `stripe` on first use. The specifier is a variable so bundlers leave
5
+ * the optional peer out of apps that pass their own client; a missing
6
+ * install returns `undefined` and the caller explains how to add it.
7
+ */
8
+ async function loadStripeModule() {
9
+ const specifier = "stripe";
10
+ try {
11
+ return await import(specifier);
12
+ } catch {
13
+ return;
14
+ }
15
+ }
16
+ /**
17
+ * The client `source` names: itself, or one created with Stripe's fetch HTTP
18
+ * client so it runs on every WinterTC runtime.
19
+ */
20
+ async function stripeClient(source, load = loadStripeModule) {
21
+ if (typeof source === "function") return source();
22
+ if (!("secretKey" in source)) return source;
23
+ const loaded = await load();
24
+ if (!isModule(loaded)) throw new TypeError("The billing and usage blocks need the stripe package: pnpm add stripe, or pass a Stripe client as `stripe`");
25
+ const Stripe = loaded.default;
26
+ return new Stripe(source.secretKey, {
27
+ httpClient: Stripe.createFetchHttpClient(),
28
+ ...source.apiVersion === void 0 ? {} : { apiVersion: source.apiVersion }
29
+ });
30
+ }
31
+ /** Resolves the client once, on first use; a function source runs on every use. */
32
+ function lazyStripe(source) {
33
+ if (typeof source === "function") return async () => source();
34
+ let client;
35
+ return () => client ??= stripeClient(source);
36
+ }
37
+ //#endregion
38
+ export { lazyStripe as t };