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,575 @@
1
+ import { n as dbError } from "../../errors-B11Duf73.js";
2
+ import { a as problemResponse } from "../../problem-BreOl8b8.js";
3
+ import { d as isRecord } from "../../block-helpers-DWHxHsEQ.js";
4
+ import { h as usageOf, o as toUIMessage, p as runRelease, r as fromModelMessages, t as AI_SDK_UI_FORMAT } from "../../messages-B9-5887d.js";
5
+ import { n as teeToStore, t as resumeFromStore } from "../../tee-CoEppCER.js";
6
+ import { t as WORKFLOW_ATTRIBUTES } from "../../attributes-5dYul0u0.js";
7
+ import { JsonToSseTransformStream, UI_MESSAGE_STREAM_HEADERS } from "ai";
8
+ import { createModelCallToUIChunkTransform, normalizeUIMessageStreamParts } from "@ai-sdk/workflow";
9
+ import { getRun, resumeHook, start } from "workflow/api";
10
+ //#region src/ai-sdk/workflow/turn.ts
11
+ /** The token of the hook that stops a durable turn. */
12
+ function durableStopToken(workflowRunId) {
13
+ return `ai-chat-stop:${workflowRunId}`;
14
+ }
15
+ /** The token of the hook that continues a turn after its approvals. */
16
+ function durableTurnToken(workflowRunId) {
17
+ return `ai-chat-turn:${workflowRunId}`;
18
+ }
19
+ const STOPPED = Symbol("stopped");
20
+ function messageOf(cause) {
21
+ return cause instanceof Error ? cause.message : String(cause);
22
+ }
23
+ /** The approval requests in `messages` that `known` doesn't hold yet. */
24
+ function newRequests(messages, known) {
25
+ const calls = /* @__PURE__ */ new Map();
26
+ const requests = [];
27
+ for (const message of messages) {
28
+ if (message.role !== "assistant" || typeof message.content === "string") continue;
29
+ for (const part of message.content) if (part.type === "tool-call") calls.set(part.toolCallId, {
30
+ toolName: part.toolName,
31
+ input: part.input
32
+ });
33
+ else if (part.type === "tool-approval-request" && !known.has(part.approvalId)) {
34
+ const call = calls.get(part.toolCallId);
35
+ const { signature } = part;
36
+ requests.push({
37
+ approvalId: part.approvalId,
38
+ toolCallId: part.toolCallId,
39
+ toolName: call?.toolName ?? "",
40
+ input: call?.input,
41
+ ...signature === void 0 ? {} : { signature }
42
+ });
43
+ }
44
+ }
45
+ return requests;
46
+ }
47
+ function sourcesOf(result) {
48
+ return result.steps.flatMap((step) => step.sources ?? []);
49
+ }
50
+ /**
51
+ * One durable answer, inside a `"use workflow"` function. Each pass of the
52
+ * agent writes one segment: a World stream namespace, claimed in `ai_runs`.
53
+ * The answer is saved after each pass under `input.messageId`. When the
54
+ * agent asks for approvals, they go to `ai_tool_approvals`, the segment is
55
+ * released and the turn waits on its hook (`durableTurnToken`) for as long
56
+ * as the decisions take; it reads them back from the database rather than
57
+ * from the hook payload. The stop hook (`durableStopToken`) aborts it.
58
+ */
59
+ async function durableTurn(input, deps) {
60
+ const abort = new AbortController();
61
+ const stopped = Promise.resolve(deps.createHook({ token: durableStopToken(deps.runId) })).then(() => {
62
+ abort.abort();
63
+ return STOPPED;
64
+ });
65
+ const resumes = deps.createHook({ token: durableTurnToken(deps.runId) })[Symbol.asyncIterator]();
66
+ const historyLength = input.messages.length;
67
+ const approvals = /* @__PURE__ */ new Map();
68
+ const sources = [];
69
+ let conversation = input.messages;
70
+ let segment = {
71
+ streamId: input.streamId,
72
+ runId: input.runId
73
+ };
74
+ let segments = 0;
75
+ for (;;) {
76
+ segments += 1;
77
+ let status = "completed";
78
+ let error;
79
+ let usage;
80
+ let requests = [];
81
+ try {
82
+ const result = await deps.agent({
83
+ chatId: input.chatId,
84
+ runId: segment.runId,
85
+ messages: conversation,
86
+ writable: deps.getWritable({ namespace: segment.streamId }),
87
+ abortSignal: abort.signal,
88
+ model: input.model,
89
+ providerOptions: input.providerOptions
90
+ });
91
+ conversation = result.messages;
92
+ sources.push(...sourcesOf(result));
93
+ requests = newRequests(conversation.slice(historyLength), approvals);
94
+ usage = usageOf({
95
+ totalUsage: result.totalUsage,
96
+ providerMetadata: result.steps.at(-1)?.providerMetadata
97
+ });
98
+ } catch (cause) {
99
+ status = "failed";
100
+ error = messageOf(cause);
101
+ }
102
+ if (abort.signal.aborted) status = "cancelled";
103
+ if (status !== "completed") requests = [];
104
+ for (const request of requests) approvals.set(request.approvalId, {
105
+ approvalId: request.approvalId,
106
+ toolCallId: request.toolCallId,
107
+ state: "requested"
108
+ });
109
+ await deps.step("save", {
110
+ chatId: input.chatId,
111
+ message: fromModelMessages(input.messageId, conversation.slice(historyLength), {
112
+ sources,
113
+ approvals: [...approvals.values()]
114
+ }),
115
+ parentId: input.parentId,
116
+ model: input.model,
117
+ runId: segment.runId,
118
+ status: status === "completed" ? "complete" : status === "cancelled" ? "aborted" : "error"
119
+ });
120
+ if (requests.length > 0) await deps.step("approvals", {
121
+ chatId: input.chatId,
122
+ runId: segment.runId,
123
+ messageId: input.messageId,
124
+ requests
125
+ });
126
+ await deps.step("release", {
127
+ chatId: input.chatId,
128
+ streamId: segment.streamId,
129
+ organizationId: input.organizationId,
130
+ status,
131
+ ...usage === void 0 ? {} : { usage },
132
+ ...error === void 0 ? {} : { error }
133
+ });
134
+ if (requests.length === 0) return {
135
+ status,
136
+ messageId: input.messageId,
137
+ segments
138
+ };
139
+ const waiting = requests.map((request) => request.approvalId);
140
+ let decided = [];
141
+ let next;
142
+ const drop = async (claimed) => {
143
+ if (claimed === void 0) return;
144
+ await deps.step("release", {
145
+ chatId: input.chatId,
146
+ streamId: claimed.streamId,
147
+ organizationId: input.organizationId,
148
+ status: "cancelled"
149
+ });
150
+ };
151
+ while (decided.length < waiting.length) {
152
+ const signal = await Promise.race([resumes.next(), stopped]);
153
+ if (signal === STOPPED || signal.done === true) {
154
+ await drop(next);
155
+ return {
156
+ status: "cancelled",
157
+ messageId: input.messageId,
158
+ segments
159
+ };
160
+ }
161
+ await drop(next);
162
+ next = signal.value;
163
+ decided = await deps.step("decisions", {
164
+ chatId: input.chatId,
165
+ approvalIds: waiting
166
+ });
167
+ }
168
+ if (next === void 0) return {
169
+ status: "failed",
170
+ messageId: input.messageId,
171
+ segments
172
+ };
173
+ for (const decision of decided) {
174
+ const known = approvals.get(decision.approvalId);
175
+ if (known !== void 0) approvals.set(decision.approvalId, {
176
+ ...known,
177
+ state: decision.approved ? "approved" : "denied",
178
+ ...decision.reason === void 0 ? {} : { reason: decision.reason }
179
+ });
180
+ }
181
+ conversation = [...conversation, {
182
+ role: "tool",
183
+ content: decided.map((decision) => ({
184
+ type: "tool-approval-response",
185
+ approvalId: decision.approvalId,
186
+ approved: decision.approved,
187
+ ...decision.reason === void 0 ? {} : { reason: decision.reason }
188
+ }))
189
+ }];
190
+ segment = next;
191
+ }
192
+ }
193
+ //#endregion
194
+ //#region src/ai-sdk/workflow/server.ts
195
+ /** The response header that names the workflow run. */
196
+ const WORKFLOW_RUN_ID_HEADER = "x-workflow-run-id";
197
+ const WORKFLOW_ENGINE = "workflow";
198
+ function badRequest(message) {
199
+ return problemResponse(dbError("invalid_request", message, { code: "AI_CHAT_BAD_REQUEST" }));
200
+ }
201
+ function busy() {
202
+ return problemResponse(dbError("conflict", "An answer is already being written.", { code: "AI_CHAT_BUSY" }));
203
+ }
204
+ function notDurable() {
205
+ return problemResponse(dbError("conflict", "The approvals belong to no durable run.", { code: "AI_CHAT_NOT_DURABLE" }));
206
+ }
207
+ async function readJson(request) {
208
+ try {
209
+ return await request.json();
210
+ } catch {
211
+ return;
212
+ }
213
+ }
214
+ /** The `approvals` of a body, `undefined` when it has none, or a message for a malformed one. */
215
+ function decisionsOf$1(value) {
216
+ if (value === void 0) return void 0;
217
+ if (!Array.isArray(value) || value.length === 0) return "Expected a list of approvals.";
218
+ const decisions = [];
219
+ for (const item of value) {
220
+ if (!isRecord(item) || typeof item["approvalId"] !== "string" || typeof item["approved"] !== "boolean") return "Expected approvals with an approvalId and approved.";
221
+ const { reason } = item;
222
+ decisions.push({
223
+ approvalId: item["approvalId"],
224
+ approved: item["approved"],
225
+ ...typeof reason === "string" ? { reason } : {}
226
+ });
227
+ }
228
+ return decisions;
229
+ }
230
+ function streamOf(iterable) {
231
+ const iterator = iterable[Symbol.asyncIterator]();
232
+ return new ReadableStream({
233
+ async pull(controller) {
234
+ const next = await iterator.next();
235
+ if (next.done === true) controller.close();
236
+ else controller.enqueue(next.value);
237
+ },
238
+ async cancel(reason) {
239
+ await iterator.return?.(reason);
240
+ }
241
+ });
242
+ }
243
+ async function* chunksOf(stream, signal) {
244
+ const reader = stream.getReader();
245
+ const cancel = () => {
246
+ reader.cancel(signal?.reason).catch(() => void 0);
247
+ };
248
+ if (signal?.aborted === true) cancel();
249
+ else signal?.addEventListener("abort", cancel, { once: true });
250
+ try {
251
+ for (;;) {
252
+ const next = await reader.read();
253
+ if (next.done) return;
254
+ yield next.value;
255
+ }
256
+ } finally {
257
+ signal?.removeEventListener("abort", cancel);
258
+ reader.releaseLock();
259
+ }
260
+ }
261
+ /** A segment's World stream as UI chunks, with the answer's id on `start`. */
262
+ function segmentChunks(workflowRunId, streamId, messageId, uiStartIndex, signal) {
263
+ const chunks = getRun(workflowRunId).getReadable({ namespace: streamId }).pipeThrough(createModelCallToUIChunkTransform({ uiStartIndex })).pipeThrough(new TransformStream({ transform(chunk, controller) {
264
+ controller.enqueue(chunk.type === "start" && messageId !== void 0 ? {
265
+ ...chunk,
266
+ messageId
267
+ } : chunk);
268
+ } }));
269
+ return streamOf(normalizeUIMessageStreamParts(chunksOf(chunks, signal)));
270
+ }
271
+ /** `stream` once its first chunk arrives, or `undefined` when reading it fails. */
272
+ async function opened(stream) {
273
+ const reader = stream.getReader();
274
+ let first;
275
+ try {
276
+ first = await reader.read();
277
+ } catch {
278
+ return;
279
+ }
280
+ let pending = first;
281
+ return new ReadableStream({
282
+ async pull(controller) {
283
+ const next = pending ?? await reader.read();
284
+ pending = void 0;
285
+ if (next.done) controller.close();
286
+ else controller.enqueue(next.value);
287
+ },
288
+ async cancel(reason) {
289
+ await reader.cancel(reason);
290
+ }
291
+ });
292
+ }
293
+ function sse(stream, workflowRunId) {
294
+ return new Response(stream.pipeThrough(new TextEncoderStream()), { headers: {
295
+ ...UI_MESSAGE_STREAM_HEADERS,
296
+ ...workflowRunId === void 0 ? {} : { [WORKFLOW_RUN_ID_HEADER]: workflowRunId }
297
+ } });
298
+ }
299
+ /**
300
+ * Durable chat routes on the Workflow SDK: each turn is a workflow run
301
+ * (`durableTurn`), so an answer outlives the request, a reload replays it
302
+ * and an approval can wait for hours. The chat's runs stay in `ai_runs`
303
+ * with the workflow run id next to them.
304
+ */
305
+ function durableChat(options) {
306
+ const newId = options.generateId ?? (() => crypto.randomUUID());
307
+ function streamSegment(context, chat, workflowRunId, streamId, messageId) {
308
+ const teed = teeToStore(options.streams, streamId, segmentChunks(workflowRunId, streamId, messageId, 0).pipeThrough(new JsonToSseTransformStream()), {
309
+ owner: chat.ownerId,
310
+ tenant: chat.organizationId,
311
+ kind: "chat",
312
+ ...options.streamTtl === void 0 ? {} : { ttl: options.streamTtl }
313
+ });
314
+ context.waitUntil?.((async () => {
315
+ await teed.persisted;
316
+ })());
317
+ return sse(teed.stream, workflowRunId);
318
+ }
319
+ async function startTurn(body, context) {
320
+ const turn = await options.assistant.prepare(body, context);
321
+ if (turn instanceof Response) return turn;
322
+ const { chat, model } = turn;
323
+ const streamId = newId();
324
+ const messageId = newId();
325
+ const claim = await context.chats.runs.claim(chat.id, streamId, {
326
+ model,
327
+ messageId,
328
+ engine: WORKFLOW_ENGINE
329
+ });
330
+ if (!claim.ok) return problemResponse(claim.error);
331
+ const runId = claim.data.runId;
332
+ if (!claim.data.claimed || runId === void 0) return busy();
333
+ const input = {
334
+ chatId: chat.id,
335
+ organizationId: chat.organizationId,
336
+ userId: context.userId,
337
+ model,
338
+ messageId,
339
+ parentId: turn.parentId,
340
+ runId,
341
+ streamId,
342
+ messages: turn.messages,
343
+ providerOptions: turn.providerOptions
344
+ };
345
+ let workflowRunId;
346
+ try {
347
+ workflowRunId = (await start(options.workflow, [input], { attributes: {
348
+ [WORKFLOW_ATTRIBUTES.tenant]: chat.organizationId,
349
+ [WORKFLOW_ATTRIBUTES.actor]: context.userId,
350
+ [WORKFLOW_ATTRIBUTES.key]: `ai-chat:${chat.id}`
351
+ } })).runId;
352
+ } catch (cause) {
353
+ await context.chats.runs.release(chat.id, streamId, {
354
+ status: "failed",
355
+ error: String(cause)
356
+ });
357
+ return problemResponse(dbError("unexpected", "The answer could not be started.", { code: "AI_CHAT_RUN_FAILED" }));
358
+ }
359
+ const attached = await context.chats.runs.attach(runId, workflowRunId);
360
+ if (!attached.ok) {
361
+ await getRun(workflowRunId).cancel().catch(() => void 0);
362
+ await context.chats.runs.release(chat.id, streamId, {
363
+ status: "failed",
364
+ error: attached.error.message
365
+ });
366
+ return problemResponse(attached.error);
367
+ }
368
+ return streamSegment(context, chat, workflowRunId, streamId, messageId);
369
+ }
370
+ /** The durable run the decided approvals belong to, or a problem. */
371
+ async function runOf(context, decided) {
372
+ const runId = decided.find((row) => row.runId !== void 0)?.runId;
373
+ if (runId === void 0) return notDurable();
374
+ const run = await context.chats.runs.get(runId);
375
+ if (!run.ok) return problemResponse(run.error);
376
+ return run.data.engine === WORKFLOW_ENGINE && run.data.externalRunId !== void 0 ? run.data : notDurable();
377
+ }
378
+ /** Decides, then claims a segment and resumes the turn when nothing is pending. */
379
+ async function continueTurn(chatId, decisions, context) {
380
+ const chat = await context.chats.chats.get(chatId);
381
+ if (!chat.ok) return problemResponse(chat.error);
382
+ const decided = [];
383
+ for (const decision of decisions) {
384
+ const row = await context.chats.approvals.decide(decision.approvalId, decision.approved, decision.reason);
385
+ if (!row.ok) return problemResponse(row.error);
386
+ if (row.data.chatId !== chatId) return badRequest("The approvals belong to another chat.");
387
+ decided.push(row.data);
388
+ }
389
+ const run = await runOf(context, decided);
390
+ if (run instanceof Response) return run;
391
+ const all = await context.chats.approvals.list(chatId);
392
+ if (!all.ok) return problemResponse(all.error);
393
+ if (all.data.some((row) => row.runId === run.id && row.decision === "pending")) return { continued: false };
394
+ const workflowRunId = run.externalRunId ?? "";
395
+ const streamId = newId();
396
+ const claim = await context.chats.runs.claim(chatId, streamId, {
397
+ engine: WORKFLOW_ENGINE,
398
+ externalRunId: workflowRunId,
399
+ ...run.model === void 0 ? {} : { model: run.model },
400
+ ...run.assistantMessageId === void 0 ? {} : { messageId: run.assistantMessageId }
401
+ });
402
+ if (!claim.ok) return problemResponse(claim.error);
403
+ const runId = claim.data.runId;
404
+ if (!claim.data.claimed || runId === void 0) return busy();
405
+ const resume = {
406
+ streamId,
407
+ runId
408
+ };
409
+ try {
410
+ await resumeHook(durableTurnToken(workflowRunId), resume);
411
+ } catch (cause) {
412
+ await context.chats.runs.release(chatId, streamId, {
413
+ status: "failed",
414
+ error: String(cause)
415
+ });
416
+ return problemResponse(dbError("conflict", "The turn is no longer waiting.", { code: "AI_CHAT_NOT_WAITING" }));
417
+ }
418
+ return {
419
+ continued: true,
420
+ chat: chat.data,
421
+ workflowRunId,
422
+ streamId,
423
+ messageId: run.assistantMessageId
424
+ };
425
+ }
426
+ async function respond(request, context) {
427
+ const body = await readJson(request);
428
+ const approvals = decisionsOf$1(isRecord(body) ? body["approvals"] : void 0);
429
+ if (approvals === void 0) return startTurn(body, context);
430
+ if (typeof approvals === "string") return badRequest(approvals);
431
+ const chatId = isRecord(body) ? body["id"] : void 0;
432
+ if (typeof chatId !== "string" || chatId === "") return badRequest("Expected the chat id.");
433
+ const continued = await continueTurn(chatId, approvals, context);
434
+ if (continued instanceof Response) return continued;
435
+ if (!continued.continued) return problemResponse(dbError("conflict", "Other approvals of this answer are pending.", { code: "AI_APPROVALS_PENDING" }));
436
+ return streamSegment(context, continued.chat, continued.workflowRunId, continued.streamId, continued.messageId);
437
+ }
438
+ /** The chat's running durable run, else its latest one. */
439
+ async function latestRun(context, chat) {
440
+ if (chat.activeRunId !== void 0) {
441
+ const run = await context.chats.runs.get(chat.activeRunId);
442
+ if (!run.ok) return problemResponse(run.error);
443
+ return run.data;
444
+ }
445
+ const runs = await context.chats.runs.list({
446
+ chatId: chat.id,
447
+ limit: 1
448
+ });
449
+ if (!runs.ok) return problemResponse(runs.error);
450
+ return runs.data[0];
451
+ }
452
+ async function resume(chatId, context, resumeOptions = {}) {
453
+ const chat = await context.chats.chats.get(chatId);
454
+ if (!chat.ok) return chat.error.kind === "not_found" ? new Response(null, { status: 204 }) : problemResponse(chat.error);
455
+ const run = await latestRun(context, chat.data);
456
+ if (run instanceof Response) return run;
457
+ const streamId = run?.streamId;
458
+ if (run === void 0 || streamId === void 0) return new Response(null, { status: 204 });
459
+ const startIndex = Math.max(0, Math.trunc(resumeOptions.startIndex ?? 0));
460
+ if (run.engine === WORKFLOW_ENGINE && run.externalRunId !== void 0) {
461
+ let live;
462
+ try {
463
+ live = await opened(segmentChunks(run.externalRunId, streamId, run.assistantMessageId, startIndex, resumeOptions.signal).pipeThrough(new JsonToSseTransformStream()));
464
+ } catch {
465
+ live = void 0;
466
+ }
467
+ if (live !== void 0) return sse(live, run.externalRunId);
468
+ }
469
+ const stored = await resumeFromStore(options.streams, streamId, {
470
+ fromIdx: startIndex,
471
+ ...resumeOptions.signal === void 0 ? {} : { signal: resumeOptions.signal }
472
+ });
473
+ if (!stored.ok) return problemResponse(stored.error);
474
+ return stored.data === void 0 ? new Response(null, { status: 204 }) : sse(stored.data, run.externalRunId);
475
+ }
476
+ async function stop(chatId, context) {
477
+ const stopped = await context.chats.runs.stop(chatId);
478
+ if (!stopped.ok) return problemResponse(stopped.error);
479
+ if (stopped.data === void 0) return new Response(null, { status: 204 });
480
+ const run = await context.chats.runs.get(stopped.data.runId);
481
+ if (!run.ok) return problemResponse(run.error);
482
+ const workflowRunId = run.data.externalRunId;
483
+ if (workflowRunId === void 0) return new Response(null, { status: 204 });
484
+ try {
485
+ await resumeHook(durableStopToken(workflowRunId), {});
486
+ } catch {
487
+ let cancelled = true;
488
+ try {
489
+ await getRun(workflowRunId).cancel();
490
+ } catch {
491
+ cancelled = false;
492
+ }
493
+ await context.chats.runs.release(chatId, stopped.data.streamId, { status: "cancelled" });
494
+ if (!cancelled) return problemResponse(dbError("unexpected", "The answer could not be stopped.", { code: "AI_CHAT_STOP_FAILED" }));
495
+ }
496
+ return new Response(null, { status: 204 });
497
+ }
498
+ async function decide(chatId, decisions, context) {
499
+ if (decisions.length === 0) return badRequest("Expected approvals.");
500
+ const continued = await continueTurn(chatId, decisions, context);
501
+ if (continued instanceof Response) return continued;
502
+ return Response.json(continued.continued ? {
503
+ continued: true,
504
+ streamId: continued.streamId
505
+ } : { continued: false });
506
+ }
507
+ return {
508
+ respond,
509
+ resume,
510
+ stop,
511
+ decide
512
+ };
513
+ }
514
+ //#endregion
515
+ //#region src/ai-sdk/workflow/steps.ts
516
+ /**
517
+ * Saves a turn's answer (service role) with its AI SDK form next to the
518
+ * canonical one. The message id is the idempotency key: a retried step, or
519
+ * the save after the next agent pass, updates the same message.
520
+ */
521
+ async function saveMessagesStep(chats, input) {
522
+ await chats.messages.saveAssistant(input.chatId, input.message, {
523
+ parentId: input.parentId,
524
+ status: input.status,
525
+ model: input.model,
526
+ format: AI_SDK_UI_FORMAT,
527
+ native: toUIMessage(input.message),
528
+ runId: input.runId
529
+ }).orThrow();
530
+ }
531
+ async function recordApprovals(chats, input) {
532
+ for (const request of input.requests) await chats.approvals.request(input.chatId, {
533
+ approvalId: request.approvalId,
534
+ tool: request.toolName,
535
+ toolCallId: request.toolCallId,
536
+ input: request.input,
537
+ runId: input.runId,
538
+ messageId: input.messageId,
539
+ ...request.signature === void 0 ? {} : { signature: request.signature }
540
+ }).orThrow();
541
+ }
542
+ async function decisionsOf(chats, input) {
543
+ return (await chats.approvals.list(input.chatId, input.approvalIds).orThrow()).flatMap((row) => row.decision === "pending" ? [] : [{
544
+ approvalId: row.approvalId,
545
+ approved: row.decision === "approved",
546
+ ...row.reason === void 0 ? {} : { reason: row.reason }
547
+ }]);
548
+ }
549
+ async function release(chats, input, options) {
550
+ await chats.runs.release(input.chatId, input.streamId, runRelease(input.status, input.usage, input.error)).orThrow();
551
+ const { usage } = input;
552
+ if (usage?.costMicroUsd === void 0 && usage?.generationId !== void 0 && options.enqueueCostBackfill) await options.enqueueCostBackfill({
553
+ generationId: usage.generationId,
554
+ organizationId: input.organizationId
555
+ });
556
+ }
557
+ /** A durable turn's database steps on a chat block's service transport. */
558
+ function durableSteps(chats, options = {}) {
559
+ return {
560
+ save: (input) => saveMessagesStep(chats, input),
561
+ approvals: (input) => recordApprovals(chats, input),
562
+ decisions: (input) => decisionsOf(chats, input),
563
+ release: (input) => release(chats, input, options)
564
+ };
565
+ }
566
+ /**
567
+ * Runs one of a durable turn's database steps. Call it from the app's one
568
+ * `"use step"` function, so the Workflow SDK records and retries each call;
569
+ * a database error throws, which retries the step.
570
+ */
571
+ function runDurableStep(chats, name, input, options = {}) {
572
+ return durableSteps(chats, options)[name](input);
573
+ }
574
+ //#endregion
575
+ export { WORKFLOW_RUN_ID_HEADER, durableChat, durableSteps, durableStopToken, durableTurn, durableTurnToken, runDurableStep, saveMessagesStep };
@@ -0,0 +1,20 @@
1
+ import { i as AssistantTransportConfig, n as UseAssistantOptions, t as AssistantState } from "../../../index-BpFYMsi0.js";
2
+ import { ChatTransport, UIMessage } from "ai";
3
+ //#region src/ai-sdk/workflow/react/index.d.ts
4
+ /**
5
+ * The transport for `durableChat`: the Workflow SDK's chat transport, which
6
+ * reconnects until the segment's `finish` when a request drops. It sends
7
+ * the user's newest message, or the answered approvals of the last answer
8
+ * so the waiting turn continues. Pass it as `useAssistant({ transport })`.
9
+ */
10
+ export declare function durableTransport(config: AssistantTransportConfig): ChatTransport<UIMessage>;
11
+ export type UseDurableAssistantOptions = Omit<UseAssistantOptions, "transport">;
12
+ /**
13
+ * `useAssistant` on `durableChat`. It continues the answer once every
14
+ * approval is answered. `resume` defaults to `false`: pass
15
+ * `chat.activeStreamId !== undefined` from the chat row so a reload picks
16
+ * up the running answer.
17
+ */
18
+ export declare function useDurableAssistant(options: UseDurableAssistantOptions): AssistantState;
19
+ //#endregion
20
+ export type { AssistantState };
@@ -0,0 +1,66 @@
1
+ "use client";
2
+ import { n as assistantBody, t as useAssistant } from "../../../react-4ZqkP8da.js";
3
+ import { lastAssistantMessageIsCompleteWithApprovalResponses } from "ai";
4
+ import { WorkflowChatTransport } from "@ai-sdk/workflow/client";
5
+ //#region src/ai-sdk/workflow/react/index.ts
6
+ /** The decisions in an assistant message whose approvals the user answered. */
7
+ function approvalsOf(message) {
8
+ if (message?.role !== "assistant") return [];
9
+ return message.parts.flatMap((part) => "state" in part && part.state === "approval-responded" ? [{
10
+ approvalId: part.approval.id,
11
+ approved: part.approval.approved,
12
+ ...part.approval.reason === void 0 ? {} : { reason: part.approval.reason }
13
+ }] : []);
14
+ }
15
+ /**
16
+ * The transport for `durableChat`: the Workflow SDK's chat transport, which
17
+ * reconnects until the segment's `finish` when a request drops. It sends
18
+ * the user's newest message, or the answered approvals of the last answer
19
+ * so the waiting turn continues. Pass it as `useAssistant({ transport })`.
20
+ */
21
+ function durableTransport(config) {
22
+ const { api, headers } = config;
23
+ const extra = headers === void 0 ? {} : { headers: { ...headers } };
24
+ const transport = new WorkflowChatTransport({
25
+ api,
26
+ prepareSendMessagesRequest: (request) => {
27
+ const approvals = approvalsOf(request.messages.at(-1));
28
+ return {
29
+ ...extra,
30
+ body: approvals.length > 0 ? {
31
+ ...config.body,
32
+ id: request.id,
33
+ approvals
34
+ } : assistantBody(config, request)
35
+ };
36
+ },
37
+ prepareReconnectToStreamRequest: (request) => ({
38
+ ...extra,
39
+ api: `${api}/${encodeURIComponent(request.id)}/stream`
40
+ })
41
+ });
42
+ return {
43
+ sendMessages: ({ messageId, abortSignal, ...rest }) => transport.sendMessages({
44
+ ...rest,
45
+ ...messageId === void 0 ? {} : { messageId },
46
+ ...abortSignal === void 0 ? {} : { abortSignal }
47
+ }),
48
+ reconnectToStream: (options) => transport.reconnectToStream(options)
49
+ };
50
+ }
51
+ /**
52
+ * `useAssistant` on `durableChat`. It continues the answer once every
53
+ * approval is answered. `resume` defaults to `false`: pass
54
+ * `chat.activeStreamId !== undefined` from the chat row so a reload picks
55
+ * up the running answer.
56
+ */
57
+ function useDurableAssistant(options) {
58
+ return useAssistant({
59
+ ...options,
60
+ resume: options.resume ?? false,
61
+ sendAutomaticallyWhen: options.sendAutomaticallyWhen ?? lastAssistantMessageIsCompleteWithApprovalResponses,
62
+ transport: durableTransport
63
+ });
64
+ }
65
+ //#endregion
66
+ export { durableTransport, useDurableAssistant };
@@ -0,0 +1,10 @@
1
+ import { i as AssistantTransportConfig, t as AssistantState } from "../../../index-BpFYMsi0.js";
2
+ import { UseDurableAssistantOptions } from "./index.js";
3
+ import { ChatTransport, UIMessage } from "ai";
4
+ //#region src/ai-sdk/workflow/react/server.d.ts
5
+ /** The `react-server` build of `durableTransport`. */
6
+ export declare const durableTransport: (config: AssistantTransportConfig) => ChatTransport<UIMessage>;
7
+ /** The `react-server` build of `useDurableAssistant`. */
8
+ export declare const useDurableAssistant: (options: UseDurableAssistantOptions) => AssistantState;
9
+ //#endregion
10
+ export type { AssistantState, UseDurableAssistantOptions };
@@ -0,0 +1,12 @@
1
+ //#region src/ai-sdk/workflow/react/server.ts
2
+ const CLIENT_ONLY = "better-supabase: the durable chat hooks run in Client Components only. In Server Components read the chat row and pass `resume` and `messages` to the client.";
3
+ /** The `react-server` build of `durableTransport`. */
4
+ const durableTransport = () => {
5
+ throw new Error(CLIENT_ONLY);
6
+ };
7
+ /** The `react-server` build of `useDurableAssistant`. */
8
+ const useDurableAssistant = () => {
9
+ throw new Error(CLIENT_ONLY);
10
+ };
11
+ //#endregion
12
+ export { durableTransport, useDurableAssistant };