better-supabase 0.7.0 → 0.8.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 (500) hide show
  1. package/README.md +6 -2
  2. package/dist/{access-sql-B0dF-SoF.js → access-sql-CrSbK1q-.js} +1 -1
  3. package/dist/{adapter-B-tL8hqg.js → adapter-CN45ibbV.js} +663 -157
  4. package/dist/{agents-CVHGd7It.d.ts → agents-BY_LQXtQ.d.ts} +4 -4
  5. package/dist/{ai-cache-CBWs1W0k.js → ai-cache-Dfgk8nBT.js} +2 -1
  6. package/dist/{ai-cache-DaDu_G5L.d.ts → ai-cache-DrUMMgp6.d.ts} +4 -4
  7. package/dist/{ai-chat-B24UI962.js → ai-chat-CVLRWbtS.js} +4 -3
  8. package/dist/{ai-chat-7amvXjmQ.d.ts → ai-chat-DXkMy74O.d.ts} +5 -5
  9. package/dist/{ai-files-CSPNswUY.js → ai-files-CioLu5du.js} +5 -4
  10. package/dist/ai-message-DfaP8sis.js +14 -0
  11. package/dist/ai-sdk/agents/index.d.ts +4 -4
  12. package/dist/ai-sdk/batches/index.d.ts +4 -4
  13. package/dist/ai-sdk/batches/index.js +4 -4
  14. package/dist/ai-sdk/cache/index.d.ts +2 -2
  15. package/dist/ai-sdk/cache/index.js +2 -2
  16. package/dist/ai-sdk/chat/index.d.ts +1 -1
  17. package/dist/ai-sdk/chat/index.js +8 -20
  18. package/dist/ai-sdk/embeddings/index.d.ts +2 -2
  19. package/dist/ai-sdk/files/index.d.ts +3 -3
  20. package/dist/ai-sdk/files/index.js +4 -4
  21. package/dist/ai-sdk/index.d.ts +37 -9
  22. package/dist/ai-sdk/index.js +3 -2
  23. package/dist/ai-sdk/mcp/index.d.ts +43 -6
  24. package/dist/ai-sdk/mcp/index.js +36 -7
  25. package/dist/ai-sdk/memory/index.d.ts +2 -2
  26. package/dist/ai-sdk/memory/index.js +1 -1
  27. package/dist/ai-sdk/workflow/index.d.ts +6 -6
  28. package/dist/ai-sdk/workflow/index.js +13 -24
  29. package/dist/{ai-tasks-Cd1HMFvB.d.ts → ai-tasks-BRQ6iQLc.d.ts} +4 -4
  30. package/dist/{announcements-ZRGnScWI.d.ts → announcements-Bouy0Ski.d.ts} +3 -3
  31. package/dist/{announcements-CiyOs-xP.js → announcements-p_BFofiR.js} +1 -1
  32. package/dist/api-Dnf2q-Ht.d.ts +370 -0
  33. package/dist/api-DtHFC037.js +676 -0
  34. package/dist/{api-keys-CIjghYjV.d.ts → api-keys-C8BlF3L2.d.ts} +4 -4
  35. package/dist/arazzo/index.d.ts +255 -0
  36. package/dist/arazzo/index.js +622 -0
  37. package/dist/{assistant-DwdpDH1q.d.ts → assistant-DBlFDZsi.d.ts} +5 -5
  38. package/dist/astro/index.d.ts +7 -7
  39. package/dist/astro/index.js +7 -7
  40. package/dist/asyncapi/index.d.ts +103 -0
  41. package/dist/asyncapi/index.js +569 -0
  42. package/dist/authorizer-ayxUDXXP.js +126 -0
  43. package/dist/authorizer-eiOjo-3l.d.ts +73 -0
  44. package/dist/better-result/index.d.ts +118 -0
  45. package/dist/better-result/index.js +64 -0
  46. package/dist/{bind-l4kAvYSv.js → bind-ButSzrHe.js} +1 -1
  47. package/dist/{bind-Bu_ZNa3W.d.ts → bind-CQ5mPyX1.d.ts} +3 -3
  48. package/dist/{block-events-CrT8r7Fe.js → block-events-DTxU5tfr.js} +18 -3
  49. package/dist/{block-fields-GFkxl4dP.js → block-fields-CroxUuF2.js} +3 -3
  50. package/dist/{block-fields-SJ6fEf3o.d.ts → block-fields-D1pfrcIY.d.ts} +2 -2
  51. package/dist/{block-helpers-CKtbFcRv.d.ts → block-helpers-C0Xj8War.d.ts} +2 -2
  52. package/dist/{block-helpers-DWHxHsEQ.js → block-helpers-Cy3pB96I.js} +41 -9
  53. package/dist/{block-hooks-BmjMyXTa.js → block-hooks-BPNMIlLl.js} +3 -3
  54. package/dist/{block-hooks-plbZ0AbJ.d.ts → block-hooks-DaOVC7SC.d.ts} +3 -3
  55. package/dist/{block-transport-BLr-ZgLc.js → block-transport-bAKh-dGc.js} +28 -2
  56. package/dist/{block-transport-DvaoPuZ9.d.ts → block-transport-inD4fFq-.d.ts} +24 -2
  57. package/dist/blocks/agents/index.d.ts +3 -3
  58. package/dist/blocks/agents/index.js +5 -4
  59. package/dist/blocks/ai-cache/index.d.ts +3 -3
  60. package/dist/blocks/ai-cache/index.js +3 -3
  61. package/dist/blocks/ai-chat/index.d.ts +9 -4
  62. package/dist/blocks/ai-chat/index.js +5 -5
  63. package/dist/blocks/ai-chat/react/index.d.ts +3 -3
  64. package/dist/blocks/ai-chat/react/index.js +5 -5
  65. package/dist/blocks/ai-files/index.d.ts +3 -3
  66. package/dist/blocks/ai-files/index.js +3 -3
  67. package/dist/blocks/ai-providers/index.d.ts +3 -3
  68. package/dist/blocks/ai-providers/index.js +8 -7
  69. package/dist/blocks/ai-tasks/index.d.ts +3 -3
  70. package/dist/blocks/ai-tasks/index.js +7 -6
  71. package/dist/blocks/announcements/index.d.ts +3 -3
  72. package/dist/blocks/announcements/index.js +3 -3
  73. package/dist/blocks/announcements/react/index.d.ts +3 -3
  74. package/dist/blocks/announcements/react/index.js +3 -3
  75. package/dist/blocks/api-keys/index.d.ts +5 -5
  76. package/dist/blocks/api-keys/index.js +8 -8
  77. package/dist/blocks/attachments/index.d.ts +12 -8
  78. package/dist/blocks/attachments/index.js +22 -13
  79. package/dist/blocks/audit/index.d.ts +21 -10
  80. package/dist/blocks/audit/index.js +30 -11
  81. package/dist/blocks/billing/index.d.ts +11 -9
  82. package/dist/blocks/billing/index.js +15 -15
  83. package/dist/blocks/comments/index.d.ts +8 -8
  84. package/dist/blocks/comments/index.js +8 -7
  85. package/dist/blocks/connectors/index.d.ts +3 -3
  86. package/dist/blocks/connectors/index.js +7 -6
  87. package/dist/blocks/data-lifecycle/index.d.ts +12 -8
  88. package/dist/blocks/data-lifecycle/index.js +13 -8
  89. package/dist/blocks/entitlements/index.d.ts +3 -3
  90. package/dist/blocks/entitlements/index.js +1 -1
  91. package/dist/blocks/flags/index.d.ts +4 -4
  92. package/dist/blocks/flags/index.js +4 -3
  93. package/dist/blocks/inbox/index.d.ts +3 -3
  94. package/dist/blocks/inbox/index.js +4 -5
  95. package/dist/blocks/inbox/react/index.d.ts +1 -1
  96. package/dist/blocks/inbox/react/index.js +1 -1
  97. package/dist/blocks/inbox/react/server.d.ts +1 -1
  98. package/dist/blocks/index.d.ts +10 -10
  99. package/dist/blocks/index.js +6 -6
  100. package/dist/blocks/jobs/index.d.ts +48 -32
  101. package/dist/blocks/jobs/index.js +44 -287
  102. package/dist/blocks/knowledge/index.d.ts +3 -3
  103. package/dist/blocks/knowledge/index.js +3 -3
  104. package/dist/blocks/memory/index.d.ts +4 -4
  105. package/dist/blocks/memory/index.js +7 -6
  106. package/dist/blocks/notifications/index.d.ts +11 -9
  107. package/dist/blocks/notifications/index.js +20 -25
  108. package/dist/blocks/notifications/react/index.d.ts +1 -1
  109. package/dist/blocks/notifications/react/index.js +1 -1
  110. package/dist/blocks/onboarding/index.d.ts +3 -3
  111. package/dist/blocks/onboarding/index.js +3 -3
  112. package/dist/blocks/onboarding/react/index.d.ts +2 -2
  113. package/dist/blocks/onboarding/react/index.js +2 -2
  114. package/dist/blocks/onboarding/react/server.d.ts +1 -1
  115. package/dist/blocks/organizations/index.d.ts +9 -9
  116. package/dist/blocks/organizations/index.js +11 -18
  117. package/dist/blocks/outbox/index.d.ts +2 -2
  118. package/dist/blocks/outbox/index.js +16 -25
  119. package/dist/blocks/profiles/index.d.ts +7 -7
  120. package/dist/blocks/profiles/index.js +7 -6
  121. package/dist/blocks/push/index.d.ts +4 -4
  122. package/dist/blocks/push/index.js +3 -3
  123. package/dist/blocks/settings/index.d.ts +4 -4
  124. package/dist/blocks/settings/index.js +7 -6
  125. package/dist/blocks/sso/index.d.ts +5 -5
  126. package/dist/blocks/sso/index.js +6 -5
  127. package/dist/blocks/usage/index.d.ts +3 -3
  128. package/dist/blocks/usage/index.js +5 -4
  129. package/dist/blocks/waitlist/index.d.ts +5 -5
  130. package/dist/blocks/waitlist/index.js +5 -4
  131. package/dist/blocks/webhooks/index.d.ts +22 -13
  132. package/dist/blocks/webhooks/index.js +41 -70
  133. package/dist/blocks/workflow-builder/index.d.ts +4 -4
  134. package/dist/blocks/workflow-builder/index.js +3 -3
  135. package/dist/blocks/workflow-builder/react/index.d.ts +4 -4
  136. package/dist/blocks/workflow-builder/react/index.js +4 -4
  137. package/dist/blocks/workflows/index.d.ts +3 -3
  138. package/dist/blocks/workflows/index.js +3 -3
  139. package/dist/blocks/workflows/react/index.d.ts +3 -3
  140. package/dist/blocks/workflows/react/index.js +3 -3
  141. package/dist/build-hPwk3_X5.js +1296 -0
  142. package/dist/{build-BXIzE6Xv.js → build-meLuYGri.js} +3 -3
  143. package/dist/casing-DdFWEtqr.js +16 -0
  144. package/dist/chat-sdk/index.d.ts +6 -6
  145. package/dist/chat-sdk/index.js +5 -4
  146. package/dist/chat-sdk/react/index.d.ts +1 -1
  147. package/dist/chat-sdk/react/server.d.ts +1 -1
  148. package/dist/{claims-DDBQT6BK.js → claims-0KZVT804.js} +1 -1
  149. package/dist/cli/add-1dc5wM5k.js +69 -0
  150. package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
  151. package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
  152. package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
  153. package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
  154. package/dist/cli/bin.js +4 -4
  155. package/dist/cli/cache-CIfA-jBV.js +483 -0
  156. package/dist/cli/{codemod-Bl_tQpHn.js → codemod-JVlTQQG2.js} +4 -4
  157. package/dist/cli/{command-CK14fP91.js → command-DV-StG1x.js} +5 -0
  158. package/dist/cli/{config-DU7EJImt.js → config-C2Pz2_4A.js} +7 -4
  159. package/dist/cli/config-DpbF8ML3.js +2 -0
  160. package/dist/cli/{config-NiPxAmUF.js → config-M-WzL9O2.js} +116 -18
  161. package/dist/cli/{db-DOBPt660.js → db-BkcfOlyB.js} +2 -1
  162. package/dist/cli/{diff-SjkO5rNr.js → diff-D1jGdb3Y.js} +1 -1
  163. package/dist/cli/{doctor-CVdnLahA.js → doctor-VcDtuusV.js} +317 -222
  164. package/dist/cli/emit-BHHfwUoT.js +1136 -0
  165. package/dist/cli/{env-qXgyMV6r.js → env-B--LMhEe.js} +13 -10
  166. package/dist/cli/env-vzBG90Um.js +2 -0
  167. package/dist/cli/{env-CJLbUVPB.js → env-zHJtMIBo.js} +11 -3
  168. package/dist/cli/{errors-4v4DTtda.js → errors-CqTLXe2M.js} +18 -2
  169. package/dist/cli/{fastest-levenshtein-CFN-lNDv.js → fastest-levenshtein-CF7BCi9l.js} +1 -1
  170. package/dist/cli/files-BVupXPIC.js +34 -0
  171. package/dist/cli/gen-DmVj3u4L.js +322 -0
  172. package/dist/cli/{init-Cr6arjXU.js → glue-C1UE8gQN.js} +16 -313
  173. package/dist/cli/index.d.ts +59 -31
  174. package/dist/cli/index.js +8 -6
  175. package/dist/cli/init-CVZ3s5kl.js +258 -0
  176. package/dist/cli/{introspect-Bzuv1HHj.js → introspect-BToGNfm-.js} +14 -14
  177. package/dist/cli/{io-DI1mTdSA.js → io-CFzJVJ68.js} +5 -1
  178. package/dist/cli/{keys-BGCnnb-s.js → keys-CJhtIxJ3.js} +4 -4
  179. package/dist/cli/metadata-DSRKCaf-.js +133 -0
  180. package/dist/cli/names-D6LrQnOv.js +6 -0
  181. package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
  182. package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
  183. package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
  184. package/dist/cli/{openapi-BlRJ18s3.js → openapi-DWa4Ir1q.js} +8 -14
  185. package/dist/cli/prompts-BdeVmVpg.js +2 -0
  186. package/dist/cli/{prompts-BNcNfAve.js → prompts-DZJB1nTw.js} +6 -6
  187. package/dist/cli/{rolldown-runtime-BPOCksWG.js → rolldown-runtime-CMFfr-1z.js} +3 -1
  188. package/dist/cli/run-DA6_lg3w.js +389 -0
  189. package/dist/cli/run-DuN1MX-7.js +705 -0
  190. package/dist/cli/scaffold-5DenHSxF.js +292 -0
  191. package/dist/cli/scaffold-CwQUMFRb.js +2 -0
  192. package/dist/cli/{seed-DQzqT7LP.js → seed-CzBmrGON.js} +14 -18
  193. package/dist/cli/seed-DOmit9Hq.js +2 -0
  194. package/dist/cli/{skills-QQs4q68J.js → skills-CnO8QFS7.js} +7 -6
  195. package/dist/cli/snapshot-Bstk6ulj.js +287 -0
  196. package/dist/cli/source-args-BYfq6imV.js +31 -0
  197. package/dist/cli/spec-CzosTYm3.js +7438 -0
  198. package/dist/cli/spec-T_0Bcyw7.js +2 -0
  199. package/dist/cli/{sql-B8csQPyn.js → sql-BKOOQAX3.js} +240 -218
  200. package/dist/cli/sql-DJrNDxQm.js +3 -0
  201. package/dist/cli/{style-C0NFdJRL.js → style-CB3vxgh0.js} +3 -3
  202. package/dist/cli/typegen-Demi5-VQ.js +486 -0
  203. package/dist/cli/validate-Ca13ktgz.js +7522 -0
  204. package/dist/cli/{version-Bp4fyubI.js → version-B4k0aUxS.js} +1 -1
  205. package/dist/client/index.d.ts +4 -3
  206. package/dist/client/index.js +60 -3
  207. package/dist/client/native/index.d.ts +3 -3
  208. package/dist/client/native/index.js +3 -3
  209. package/dist/{client-CI0Z2zWX.js → client-wxeTQFtB.js} +36 -3
  210. package/dist/{clone-BfgmLU90.js → clone-dN9XOL1K.js} +9 -1
  211. package/dist/{cloud-event-BnmD5fb9.js → cloud-event-CTh9Sr5w.js} +16 -2
  212. package/dist/{cloud-event-C1JCc1bH.d.ts → cloud-event-Dune0KI7.d.ts} +16 -2
  213. package/dist/{compiler-DY_wkj4R.d.ts → compiler-V1qvcST1.d.ts} +2 -2
  214. package/dist/{compose-BIBNgAnq.js → compose-BHej1acw.js} +3 -3
  215. package/dist/{composite-CpHLEo-G.d.ts → composite-CWAJTRBF.d.ts} +6 -6
  216. package/dist/{composite-C6I8ZyaF.js → composite-zTe0TCqj.js} +4 -4
  217. package/dist/config/index.d.ts +3 -4
  218. package/dist/config/index.js +4 -4
  219. package/dist/config-DlKvtt95.js +540 -0
  220. package/dist/{connector-Dv8kK0MO.d.ts → connector-CySQEFcW.d.ts} +1 -1
  221. package/dist/{connectors-CrpknU0P.d.ts → connectors--PGhmiu0.d.ts} +4 -4
  222. package/dist/{context-BCrWe7ow.d.ts → context-DsV2SueA.d.ts} +11 -2
  223. package/dist/context-nPDvQ-Zl.js +41 -0
  224. package/dist/credentials/index.d.ts +5 -5
  225. package/dist/credentials/index.js +9 -17
  226. package/dist/{cron-DVPUg5k3.js → cron-D25Ukpxy.js} +1 -1
  227. package/dist/cron-route-D2AN9SA1.js +24 -0
  228. package/dist/{csv-DCK-PT1n.js → csv-BZnHA1Py.js} +1 -1
  229. package/dist/{define-B-TVjC25.js → define-CFQcvM20.js} +263 -229
  230. package/dist/{define-CJJkkr1-.d.ts → define-DmcfoNXB.d.ts} +136 -111
  231. package/dist/edge/index.d.ts +66 -13
  232. package/dist/edge/index.js +65 -39
  233. package/dist/elysia/index.d.ts +1 -1
  234. package/dist/elysia/index.js +1 -1
  235. package/dist/{embeddings-C9KGQnXt.d.ts → embeddings-B4vhS-dY.d.ts} +1 -1
  236. package/dist/{ended-XjeGQ5XW.d.ts → ended-CcvcRqEd.d.ts} +7 -1
  237. package/dist/{entitlements-DRl6ZJUm.js → entitlements-BYFf0Cdh.js} +2 -2
  238. package/dist/{entitlements-BKSVGtrG.d.ts → entitlements-Ds8qoYZ-.d.ts} +1 -1
  239. package/dist/env/index.d.ts +1 -1
  240. package/dist/env/index.js +9 -2
  241. package/dist/{errors-B11Duf73.js → errors-2M6CKMP4.js} +5 -0
  242. package/dist/{errors-DLjJHPLK.js → errors-rZ7VIqp6.js} +2 -2
  243. package/dist/{escape-like-ImTK0ps_.d.ts → escape-like-DDWoHzh_.d.ts} +1 -1
  244. package/dist/eve/index.d.ts +5 -5
  245. package/dist/eve/index.js +5 -11
  246. package/dist/{eve-gT2Fpjut.d.ts → eve-CoAIcCkq.d.ts} +2 -2
  247. package/dist/events/index.d.ts +4 -4
  248. package/dist/events/index.js +7 -2
  249. package/dist/{events-DWDhx77e.d.ts → events-D1BOCll8.d.ts} +6 -4
  250. package/dist/{executor-Bq28caBo.js → executor-B-fD7DLt.js} +52 -35
  251. package/dist/executor-B_Hfobee.js +162 -0
  252. package/dist/{executor-BVBFM86G.d.ts → executor-CpxLPCiz.d.ts} +1 -1
  253. package/dist/{executor-CaWigTyR.d.ts → executor-DfEtf0cq.d.ts} +43 -27
  254. package/dist/{executor-DvsBbNBS.d.ts → executor-Drzu3dBK.d.ts} +2 -2
  255. package/dist/{executor-DbvExCFC.d.ts → executor-ngjKL_Pe.d.ts} +2 -2
  256. package/dist/expo/index.d.ts +4 -4
  257. package/dist/expo/index.js +6 -6
  258. package/dist/expo-sqlite/index.d.ts +3 -3
  259. package/dist/expo-sqlite/index.js +2 -2
  260. package/dist/extra-CGQ2_q3S.js +10 -0
  261. package/dist/{field-errors-BFOa7WhB.d.ts → field-errors-DIe9XYWL.d.ts} +17 -7
  262. package/dist/{field-errors-VF1yb8yI.js → field-errors-DZVRWRkf.js} +1 -1
  263. package/dist/format-DTXdu8ya.d.ts +70 -0
  264. package/dist/{framework-KIPvRQJU.d.ts → framework-148t1m3C.d.ts} +5 -5
  265. package/dist/{framework-BDCpJI7o.js → framework-3ey3QmrO.js} +2 -2
  266. package/dist/function-contract-BcZenXMO.d.ts +8 -0
  267. package/dist/{gateway-C1ssRHnf.d.ts → gateway-S9vicgeo.d.ts} +4 -4
  268. package/dist/{guards-BnzDvFrz.js → guards-6F2bCtQR.js} +3 -1
  269. package/dist/h3/index.d.ts +1 -1
  270. package/dist/h3/index.js +1 -1
  271. package/dist/h3/v1/index.d.ts +1 -1
  272. package/dist/h3/v1/index.js +1 -1
  273. package/dist/{message-CaKlqdsX.js → history-GH1HJWQV.js} +65 -13
  274. package/dist/hmac-DCud0myt.js +22 -0
  275. package/dist/hono/index.d.ts +19 -14
  276. package/dist/hono/index.js +21 -16
  277. package/dist/{hooks-1BTCJsiw.js → hooks-Bhza9Hnr.js} +68 -100
  278. package/dist/http-sbmBe5d2.js +25 -0
  279. package/dist/{inbox-i7E1ppo6.d.ts → inbox-Cd1KCEBL.d.ts} +3 -3
  280. package/dist/index-B72Rvv_j.d.ts +89 -0
  281. package/dist/{index-DunNRdnT.d.ts → index-BCHR4Ucl.d.ts} +4 -4
  282. package/dist/{index-CLg87OBW.d.ts → index-BUK7jUzR.d.ts} +6 -0
  283. package/dist/{config-D44Y7PAv.d.ts → index-Ba1SI-uO.d.ts} +625 -278
  284. package/dist/{index-D48jVS-N.d.ts → index-BfxOaOYs.d.ts} +4 -5
  285. package/dist/{index-ClmjK_o-.d.ts → index-CicIyqOe.d.ts} +4 -4
  286. package/dist/{index-ACiNPN4Z.d.ts → index-D69h4QqD.d.ts} +1 -1
  287. package/dist/index-DG2SUXDQ.d.ts +58 -0
  288. package/dist/{index-Bepi-Hgg.d.ts → index-DoNVLHOU.d.ts} +3 -3
  289. package/dist/{index-CdZKQF98.d.ts → index-R274XFlg.d.ts} +1 -1
  290. package/dist/{index-CewnYSpv.d.ts → index-_4R4b01v.d.ts} +8 -18
  291. package/dist/index.d.ts +89 -14
  292. package/dist/index.js +12 -11
  293. package/dist/{json-schema-CvER4kgT.js → json-schema-CT4tvrkA.js} +148 -102
  294. package/dist/{kit-Fm-Fv7q5.js → kit-BhHr9T9v.js} +36 -10
  295. package/dist/{kit-CkNzZUqv.d.ts → kit-W99LCPBS.d.ts} +13 -7
  296. package/dist/{knowledge-BXBbT0Tr.d.ts → knowledge-CAReFpRA.d.ts} +5 -5
  297. package/dist/{knowledge-CDmiMLew.js → knowledge-DnHtb64A.js} +4 -3
  298. package/dist/list/index.d.ts +1 -2
  299. package/dist/{list-query-BRt-zDF7.d.ts → list-query-D3JQeEL7.d.ts} +4 -4
  300. package/dist/mcp/index.d.ts +49 -19
  301. package/dist/mcp/index.js +158 -94
  302. package/dist/mcp/sdk/index.d.ts +38 -6
  303. package/dist/mcp/sdk/index.js +88 -6
  304. package/dist/{message-CfDoR0Y6.d.ts → message-B0fNJgq8.d.ts} +1 -2
  305. package/dist/{messages-B9-5887d.js → messages-CJoHHCWT.js} +4 -205
  306. package/dist/{mfa-Daak8ukG.d.ts → mfa-SZc9YYyb.d.ts} +1 -1
  307. package/dist/model-OgBxvk3N.d.ts +300 -0
  308. package/dist/model-messages-Cxw_Up4f.js +206 -0
  309. package/dist/model-messages-D4GZllOD.d.ts +34 -0
  310. package/dist/modules-DksjZyMW.js +77 -0
  311. package/dist/nestjs/index.d.ts +2 -2
  312. package/dist/nestjs/index.js +1 -1
  313. package/dist/next/index.d.ts +105 -55
  314. package/dist/next/index.js +204 -170
  315. package/dist/node/index.d.ts +2 -2
  316. package/dist/node/index.js +1 -1
  317. package/dist/{onboarding-BZGHYJks.d.ts → onboarding-LZvlK1P4.d.ts} +3 -3
  318. package/dist/openapi/index.d.ts +4 -2
  319. package/dist/openapi/index.js +21 -343
  320. package/dist/optional-peer-D1pi-skw.js +24 -0
  321. package/dist/orpc/index.d.ts +8 -8
  322. package/dist/orpc/index.js +21 -20
  323. package/dist/otel/index.d.ts +3 -3
  324. package/dist/otel/index.js +7 -7
  325. package/dist/{outbox-Cq7pPYvl.d.ts → outbox-DZfAvfzC.d.ts} +6 -6
  326. package/dist/overlay/index.d.ts +233 -0
  327. package/dist/overlay/index.js +554 -0
  328. package/dist/{plugin-FGY8UhYm.d.ts → plugin-CPK2HsbY.d.ts} +42 -3
  329. package/dist/plugins/actor/index.d.ts +1 -1
  330. package/dist/plugins/actor/index.js +1 -1
  331. package/dist/plugins/rules/index.d.ts +2 -2
  332. package/dist/plugins/rules/index.js +1 -1
  333. package/dist/plugins/soft-delete/index.d.ts +3 -3
  334. package/dist/plugins/soft-delete/index.js +9 -2
  335. package/dist/plugins/tenant/index.d.ts +7 -2
  336. package/dist/plugins/tenant/index.js +16 -2
  337. package/dist/plugins/timestamps/index.d.ts +1 -1
  338. package/dist/plugins/timestamps/index.js +8 -1
  339. package/dist/plugins/validation/index.d.ts +2 -2
  340. package/dist/plugins/validation/index.js +4 -4
  341. package/dist/{pool-CAu2nLrL.d.ts → pool-gkhbGp2E.d.ts} +2 -2
  342. package/dist/postgres/index.d.ts +4 -4
  343. package/dist/postgres/index.js +2 -1
  344. package/dist/{postgrest-BLVdEnfe.d.ts → postgrest-BUqLag2Q.d.ts} +1 -1
  345. package/dist/powersync/index.d.ts +5 -5
  346. package/dist/powersync/index.js +4 -4
  347. package/dist/powersync/react/index.d.ts +3 -3
  348. package/dist/powersync/react/index.js +1 -1
  349. package/dist/{problem-BreOl8b8.js → problem-CJvFeGu7.js} +13 -2
  350. package/dist/{problem-DD8LZFjc.d.ts → problem-TvGdxO1t.d.ts} +7 -1
  351. package/dist/{provider-Di3sRutW.js → provider-DxRTex4x.js} +1 -1
  352. package/dist/{provider-D-UEMvSD.d.ts → provider-ib9wzUDz.d.ts} +2 -2
  353. package/dist/query/index.d.ts +2 -2
  354. package/dist/query/index.js +1 -1
  355. package/dist/{query-BQ-NaZon.js → query-Ctz-qKRx.js} +1 -1
  356. package/dist/rate-limit-Bw7HgmFj.js +260 -0
  357. package/dist/react/index.d.ts +9 -9
  358. package/dist/react/index.js +4 -4
  359. package/dist/react/native/index.d.ts +1 -1
  360. package/dist/react/native/index.js +2 -2
  361. package/dist/react/server.d.ts +10 -10
  362. package/dist/react/server.js +3 -3
  363. package/dist/react/session.d.ts +2 -2
  364. package/dist/{react-F80mF4-t.js → react-Bmpo59D7.js} +4 -4
  365. package/dist/react-router/index.d.ts +6 -6
  366. package/dist/react-router/index.js +9 -11
  367. package/dist/{read-set-DuKWC9Mj.js → read-set-DAeWhqPf.js} +2 -2
  368. package/dist/realtime/index.d.ts +3 -3
  369. package/dist/realtime/index.js +30 -36
  370. package/dist/{refusal-DhSU2Vvr.d.ts → refusal-CFI8-5nf.d.ts} +4 -1
  371. package/dist/{refusal-CeJWxmkH.js → refusal-K78A1Vmq.js} +5 -5
  372. package/dist/{resolve-tJZY3FEa.js → resolve-Bvgf3ut_.js} +131 -42
  373. package/dist/{resolve-ChTYeTEl.d.ts → resolve-MxXVWyhd.d.ts} +12 -8
  374. package/dist/resource--vTrBe6I.d.ts +103 -0
  375. package/dist/resource-BqNqlYg9.js +91 -0
  376. package/dist/resource-DA811u_4.js +463 -0
  377. package/dist/resource-execute-rbKvuCsY.d.ts +12 -0
  378. package/dist/resource-schemas-BJ518zFH.js +79 -0
  379. package/dist/resource-types-CqB6GWGT.d.ts +141 -0
  380. package/dist/resources-BVYPnuLo.js +56 -0
  381. package/dist/resources-DZSk8tXJ.d.ts +7 -0
  382. package/dist/{respond-DprrgyXX.d.ts → respond-Cw-zanCm.d.ts} +3 -3
  383. package/dist/{respond-BUgsXNgk.js → respond-volM3ByS.js} +4 -4
  384. package/dist/{result-D7y2fT87.d.ts → result-BchM1XZn.d.ts} +7 -1
  385. package/dist/{result-DzUbqgdW.js → result-DEqHCMKP.js} +1 -1
  386. package/dist/server/index.d.ts +81 -19
  387. package/dist/server/index.js +16 -14
  388. package/dist/{server-ZSJ9rCcV.d.ts → server-types-CrAmZ8jv.d.ts} +110 -36
  389. package/dist/{shared-CxWmcyqB.js → shared-DHjhfRdV.js} +2 -15
  390. package/dist/shared-DTneRoxi.js +14 -0
  391. package/dist/{sign-in-Cb1mwv6X.js → sign-in-D_yoP0PF.js} +1 -1
  392. package/dist/signatures-BRS_p3WD.d.ts +34 -0
  393. package/dist/signatures-DsWv_bYR.js +103 -0
  394. package/dist/{signers-4y62_VIi.d.ts → signers-cpdmZYrv.d.ts} +1 -1
  395. package/dist/solid/index.d.ts +9 -18
  396. package/dist/solid/index.js +2 -2
  397. package/dist/solid-start/index.d.ts +6 -6
  398. package/dist/solid-start/index.js +7 -7
  399. package/dist/spec/index.d.ts +134 -0
  400. package/dist/spec/index.js +353 -0
  401. package/dist/{spec-pins-C89s6DyW.d.ts → spec-pins-CwzDY25w.d.ts} +18 -1
  402. package/dist/{spec-pins--j6mTok4.js → spec-pins-DsLfUH7l.js} +14 -1
  403. package/dist/sql/index.d.ts +145 -119
  404. package/dist/sql/index.js +19921 -19798
  405. package/dist/{executor-De1Of3m3.js → sql-CwuqaQ4Y.js} +34 -169
  406. package/dist/ssr/index.d.ts +4 -4
  407. package/dist/ssr/index.js +3 -2
  408. package/dist/{standard-BK0cqJ7y.js → standard-DkzZUneg.js} +2 -2
  409. package/dist/{standard-CYsm7xpT.d.ts → standard-lmkbOtPB.d.ts} +1 -1
  410. package/dist/{stats-D_AD9GGu.js → stats-DhU78Ctf.js} +8 -4
  411. package/dist/storage/index.d.ts +4 -6
  412. package/dist/storage/index.js +16 -17
  413. package/dist/{bucket-Cl46E3jS.d.ts → storage-api-CB7Zl1Ci.d.ts} +243 -8
  414. package/dist/{store-CGjgWu5n.d.ts → store-DsIYEBnv.d.ts} +1 -1
  415. package/dist/streams/index.d.ts +4 -4
  416. package/dist/streams/index.js +5 -4
  417. package/dist/streams/redis/index.d.ts +1 -1
  418. package/dist/streams/redis/index.js +5 -11
  419. package/dist/{stripe-BMj5LtsT.js → stripe-v-Y2lmop.js} +2 -8
  420. package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
  421. package/dist/supabase-mcp-Cpn5A4i-.js +28 -0
  422. package/dist/{support-DWwzVf-O.js → support-D1pFFouF.js} +71 -35
  423. package/dist/{support-view-CVOJJLpc.d.ts → support-view-scqMgtOo.d.ts} +1 -1
  424. package/dist/svelte/index.d.ts +8 -17
  425. package/dist/svelte/index.js +2 -2
  426. package/dist/sveltekit/index.d.ts +7 -7
  427. package/dist/sveltekit/index.js +10 -12
  428. package/dist/table-schema-htM_SbCW.js +286 -0
  429. package/dist/{tags-Cx-LnIQP.d.ts → tags-BO9LjtWG.d.ts} +1 -1
  430. package/dist/tanstack-db/index.d.ts +2 -2
  431. package/dist/tanstack-db/supabase/index.d.ts +52 -0
  432. package/dist/tanstack-db/supabase/index.js +97 -0
  433. package/dist/tanstack-start/index.d.ts +6 -6
  434. package/dist/tanstack-start/index.js +8 -12
  435. package/dist/{tee-CoEppCER.js → tee-Cb98Vn3b.js} +1 -1
  436. package/dist/{template--jDkl3UP.js → template-lPVh-EwW.js} +11 -2
  437. package/dist/{temporal-required-BVvW7SYJ.js → temporal-required-BtynQtM-.js} +1 -1
  438. package/dist/{tenant-BxNFk9bx.d.ts → tenant-CM368LXb.d.ts} +2 -2
  439. package/dist/testing/index.d.ts +249 -118
  440. package/dist/testing/index.js +1418 -870
  441. package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
  442. package/dist/types-BRTSpOIh.js +5 -0
  443. package/dist/{types-C05bxW-W.d.ts → types-Bb_4-vdW.d.ts} +4 -4
  444. package/dist/{types-AYOvcyep.d.ts → types-CD6yCDx3.d.ts} +5 -5
  445. package/dist/{types-6rocye-y.d.ts → types-CbOUc5IH.d.ts} +4 -4
  446. package/dist/{types-6BdhkmZe.d.ts → types-CoE5Zwy4.d.ts} +8 -0
  447. package/dist/{types-DGs5L0VN.d.ts → types-DSJ3-m9X.d.ts} +4 -4
  448. package/dist/{queue-CLJurhdy.d.ts → types-D__3EN0q.d.ts} +17 -19
  449. package/dist/{usage-CrvrL2vw.d.ts → usage-D0NNUFfr.d.ts} +3 -3
  450. package/dist/{vault-wlbBhqm7.d.ts → vault-BpmApxxW.d.ts} +3 -3
  451. package/dist/vercel-connect/index.d.ts +1 -1
  452. package/dist/vercel-connect/index.js +5 -11
  453. package/dist/{verify-DPuWngD4.d.ts → verify-C91Wyp40.d.ts} +5 -35
  454. package/dist/verify-CJbYfADA.js +124 -0
  455. package/dist/{version--AolB5ej.js → version-Cq8gfDbd.js} +1 -1
  456. package/dist/{view-BeFcRV6G.js → view-D5ryq3gz.js} +1 -1
  457. package/dist/{view-CF7ihnkg.d.ts → view-TpXEUcVN.d.ts} +3 -3
  458. package/dist/vue/index.d.ts +9 -18
  459. package/dist/vue/index.js +2 -2
  460. package/dist/{watch-Xuxrvxq-.js → watch-BcvtAHOd.js} +2 -2
  461. package/dist/{watch-DI34G86j.d.ts → watch-COzRWvVN.d.ts} +23 -9
  462. package/dist/{wire-DtZQ4sdE.js → wire-Df3EWkG8.js} +2 -2
  463. package/dist/{workflow-builder-DJ1oHn8g.js → workflow-builder-CHqHpAVt.js} +6 -5
  464. package/dist/workflow-sdk/builder/index.d.ts +3 -3
  465. package/dist/workflow-sdk/index.d.ts +1 -1
  466. package/dist/workflow-sdk/world/index.d.ts +23 -17
  467. package/dist/workflow-sdk/world/index.js +59 -76
  468. package/dist/{workflow-sdk-B3yLD6Br.d.ts → workflow-sdk-DTZyrvNo.d.ts} +3 -3
  469. package/dist/{workflow-sdk-world-D-prir6O.js → workflow-sdk-world-CMV1ahFW.js} +528 -526
  470. package/dist/{workflows-B0j9WKPu.d.ts → workflows-CcpCBfIe.d.ts} +3 -3
  471. package/dist/{workflows-wu1WWBn7.js → workflows-IvxzG2cl.js} +5 -4
  472. package/package.json +54 -3
  473. package/schemas/config-v1.json +243 -0
  474. package/schemas/doctor-report-v1.json +4 -1
  475. package/schemas/spec-manifest-v1.json +95 -0
  476. package/skills/better-supabase/SKILL.md +8 -4
  477. package/skills/better-supabase/references/troubleshooting.md +20 -20
  478. package/skills/better-supabase-api/references/expo.md +6 -3
  479. package/skills/better-supabase-api/references/powersync.md +2 -1
  480. package/skills/better-supabase-auth/SKILL.md +8 -4
  481. package/dist/cli/config-B9HkL8nF.js +0 -2
  482. package/dist/cli/gen-AIf4MREI.js +0 -3100
  483. package/dist/cli/gen-DSrahEdX.js +0 -2
  484. package/dist/cli/prompts-BTYQGunc.js +0 -2
  485. package/dist/cli/run-BO052mki.js +0 -361
  486. package/dist/config-Dn7F5k9A.js +0 -202
  487. package/dist/history-BZih6SFP.js +0 -64
  488. package/dist/index-BkWT_uBO.d.ts +0 -51
  489. package/dist/index-Bxih3l0u.d.ts +0 -81
  490. package/dist/index-CaxrMD1A.d.ts +0 -1
  491. package/dist/index-DQh4VCc9.d.ts +0 -98
  492. package/dist/keys-4MnkWTTh.js +0 -35
  493. package/dist/messages-DYP0sUTe.d.ts +0 -59
  494. package/dist/modules-dxrVK3ID.js +0 -228
  495. package/dist/path-Cv__-OTj.d.ts +0 -17
  496. package/dist/resource-BsvzCMlX.js +0 -212
  497. package/dist/resource-IPS5xi9q.d.ts +0 -74
  498. package/dist/template-CwO38Do8.d.ts +0 -6
  499. package/dist/verify-DL41hbvY.js +0 -232
  500. package/dist/cli/{read-sets-CETOSFx4.js → read-sets-DjJrm8Wj.js} +1 -1
package/dist/env/index.js CHANGED
@@ -14,7 +14,8 @@ const ENV_VARIABLES = {
14
14
  dbUrl: ["SUPABASE_DB_URL", "DATABASE_URL"],
15
15
  jwksUrl: ["SUPABASE_JWKS_URL"],
16
16
  jwks: ["SUPABASE_JWKS"],
17
- readUrl: ["SUPABASE_READ_URL"]
17
+ readUrl: ["SUPABASE_READ_URL"],
18
+ jwtSecret: ["SUPABASE_JWT_SECRET"]
18
19
  };
19
20
  const LOOPBACK = /^(localhost|127(?:\.\d{1,3}){3}|\[::1\])$/;
20
21
  const HOSTED = /^([a-z0-9]{20})\.supabase\.co$/;
@@ -166,6 +167,11 @@ function parseEnv(source, options = {}) {
166
167
  const jwks = rawInline ? checkJwks(rawInline, issues) : void 0;
167
168
  const rawRead = first(source, ENV_VARIABLES.readUrl);
168
169
  const readUrl = rawRead ? checkUrl(rawRead, ENV_VARIABLES.readUrl, issues) : void 0;
170
+ const jwtSecret = first(source, ENV_VARIABLES.jwtSecret);
171
+ if (jwtSecret !== void 0 && jwtSecret.length < 32) issues.push({
172
+ variables: ENV_VARIABLES.jwtSecret,
173
+ message: "must be at least 32 characters"
174
+ });
169
175
  if (issues.length > 0 || !url || !publishableKey) return {
170
176
  ok: false,
171
177
  issues
@@ -188,7 +194,8 @@ function parseEnv(source, options = {}) {
188
194
  } : {},
189
195
  ...dbUrl ? { dbUrl } : {},
190
196
  ...projectRef ? { projectRef } : {},
191
- ...readUrl ? { readUrl: readUrl.href.replace(/\/+$/, "") } : {}
197
+ ...readUrl ? { readUrl: readUrl.href.replace(/\/+$/, "") } : {},
198
+ ...jwtSecret ? { jwtSecret } : {}
192
199
  }
193
200
  };
194
201
  }
@@ -204,6 +204,11 @@ function mapBuiltin(raw) {
204
204
  hint: postgrestHint ? `${base.hint} ${advice}` : advice
205
205
  });
206
206
  }
207
+ case "25006": return dbError("forbidden", "This connection is read-only, so the write was refused", {
208
+ ...base,
209
+ details: base.details ?? message,
210
+ hint: base.hint ?? "The transaction is read-only, such as in a read-only support session; writes need a writable connection."
211
+ });
207
212
  case "P0001": return dbError("raised", message, base);
208
213
  case "P0002": return dbError("not_found", message, base);
209
214
  case "57014": return dbError("timeout", message, base);
@@ -1,6 +1,6 @@
1
1
  import { t as DbException } from "./db-exception-CnWcYPxL.js";
2
- import { n as dbError, o as isDbError } from "./errors-B11Duf73.js";
3
- import { s as toDbError } from "./result-DzUbqgdW.js";
2
+ import { n as dbError, o as isDbError } from "./errors-2M6CKMP4.js";
3
+ import { s as toDbError } from "./result-DEqHCMKP.js";
4
4
  //#region src/storage/errors.ts
5
5
  /** Maps a Storage error (`StorageApiError`, fetch failures) to a `DbError`. */
6
6
  function fromStorageError(raw, table) {
@@ -1,4 +1,4 @@
1
- import { b as DbError, x as DbErrorKind } from "./result-D7y2fT87.js";
1
+ import { b as DbError, x as DbErrorKind } from "./result-BchM1XZn.js";
2
2
  //#region src/core/db-exception.d.ts
3
3
  /** Thrown by `.orThrow()`. Carries the plain `DbError` as `error`. */
4
4
  declare class DbException extends Error {
@@ -1,8 +1,8 @@
1
- import { a as ResolveAuthOptions, r as AuthState } from "../resolve-ChTYeTEl.js";
2
- import { i as CredentialRef, r as CredentialProvider } from "../provider-D-UEMvSD.js";
3
- import { i as AiChat } from "../ai-chat-7amvXjmQ.js";
4
- import { a as Inbox } from "../inbox-i7E1ppo6.js";
5
- import { a as EveMemoryToolsContext, c as MemoryDocumentConflictError, d as supabaseDocumentBackend, f as supabaseMemory, i as EveMemoryTool, l as SupabaseDocumentBackendOptions, m as EveSessionContext, n as EveMemoryContext, o as EveRecallMessage, p as EveSessionAuth, r as EveMemoryProvider, s as EveRecallResult, t as EveDocumentBackend, u as SupabaseMemoryOptions } from "../eve-gT2Fpjut.js";
1
+ import { a as ResolveAuthOptions, r as AuthState } from "../resolve-MxXVWyhd.js";
2
+ import { i as CredentialRef, r as CredentialProvider } from "../provider-ib9wzUDz.js";
3
+ import { i as AiChat } from "../ai-chat-DXkMy74O.js";
4
+ import { a as Inbox } from "../inbox-Cd1KCEBL.js";
5
+ import { a as EveMemoryToolsContext, c as MemoryDocumentConflictError, d as supabaseDocumentBackend, f as supabaseMemory, i as EveMemoryTool, l as SupabaseDocumentBackendOptions, m as EveSessionContext, n as EveMemoryContext, o as EveRecallMessage, p as EveSessionAuth, r as EveMemoryProvider, s as EveRecallResult, t as EveDocumentBackend, u as SupabaseMemoryOptions } from "../eve-CoAIcCkq.js";
6
6
  //#region src/eve/auth.d.ts
7
7
  /** Thrown by `supabaseAuth` so eve answers with `response` instead of downgrading to anonymous. */
8
8
  export declare class EveAuthRejection extends Error {
package/dist/eve/index.js CHANGED
@@ -1,8 +1,9 @@
1
1
  import { t as DbException } from "../db-exception-CnWcYPxL.js";
2
+ import { n as isRecord } from "../guards-6F2bCtQR.js";
2
3
  import { a as tenantClaimPaths, n as claimAt, t as DEFAULT_CLAIMS } from "../claims-PqzCxaTD.js";
3
- import { i as resolveAuth } from "../resolve-tJZY3FEa.js";
4
- import { t as isAnonymousUser } from "../view-BeFcRV6G.js";
5
- import { d as isRecord } from "../block-helpers-DWHxHsEQ.js";
4
+ import { r as resolveAuth } from "../resolve-Bvgf3ut_.js";
5
+ import { t as isAnonymousUser } from "../view-D5ryq3gz.js";
6
+ import { t as importOptionalPeer } from "../optional-peer-D1pi-skw.js";
6
7
  //#region src/eve/ids.ts
7
8
  /** A UUID (version 8) from the SHA-256 of `input`, so the same input always gets the same id. */
8
9
  async function stableUuid(input) {
@@ -348,14 +349,7 @@ const isToolsModule = (value) => isRecord(value) && typeof value["defineTool"] =
348
349
  * Loads `eve/tools` when the provider first builds its tools. The specifier
349
350
  * is a variable so bundlers leave the optional peer out.
350
351
  */
351
- async function loadTools() {
352
- const specifier = "eve/tools";
353
- try {
354
- return await import(specifier);
355
- } catch {
356
- return;
357
- }
358
- }
352
+ const loadTools = () => importOptionalPeer("eve/tools");
359
353
  const isRecallResult = (value) => isRecord(value) && Array.isArray(value["messages"]) && value["messages"].every((message) => isRecord(message) && typeof message["content"] === "string");
360
354
  /**
361
355
  * An eve memory provider over the memory and knowledge blocks. Every read
@@ -1,5 +1,5 @@
1
- import { r as Knowledge, u as KnowledgeSearchOptions } from "./knowledge-BXBbT0Tr.js";
2
- import { t as Memory } from "./types-DGs5L0VN.js";
1
+ import { r as Knowledge, u as KnowledgeSearchOptions } from "./knowledge-CAReFpRA.js";
2
+ import { t as Memory } from "./types-DSJ3-m9X.js";
3
3
  //#region src/eve/types.d.ts
4
4
  /**
5
5
  * eve's `SessionAuthContext`, typed structurally so this entry never imports
@@ -1,4 +1,4 @@
1
- import { A as CredentialEventData, B as OrganizationEventData, C as BlockEventMap, D as BlockEventsMatching, E as BlockEventType, F as InvitationEventData, G as StorageObjectEventData, H as ScimEventData, I as InviteCodeEventData, J as WebhookEventData, K as SupportEventData, L as NotificationEventData, M as FlagEventData, N as InboxEventData, O as CommentEventData, P as IncomingWebhookEventData, Q as onBlockEvent, R as OrganizationDeletionEventData, S as BlockEvent, T as BlockEventPattern, U as SettingEventData, V as PushDeviceEventData, W as SsoProviderEventData, X as WorkflowRunEventData, Y as WorkflowEventData, Z as blockEventAttributes, _ as AttachmentEventData, b as BLOCK_EVENT_RENAMES, d as AgentEventData, f as AiChatEventData, g as ApiKeyEventData, h as AnnouncementEventData, j as DataExportEventData, k as ConnectorEventData, m as AiToolEventData, p as AiProviderKeyEventData, q as WaitlistEventData, v as AuditRevealEventData, w as BlockEventMeta, x as BillingEventData, y as BLOCK_ATTRIBUTES, z as OrganizationDomainEventData } from "../events-DWDhx77e.js";
2
- import { a as blockCloudEvent, i as ForwardBlockOptions, n as CloudEventOptions, o as forwardBlockEvents, r as EventSink, t as CloudEvent } from "../cloud-event-C1JCc1bH.js";
3
- import { a as RowEventData, c as httpSink, d as toHttp, i as ROW_EVENT_TYPES, l as isCloudEvent, n as HttpMode, o as forwardMutations, r as HttpSinkOptions, s as fromHttp, t as ForwardOptions, u as toCloudEvents } from "../index-ClmjK_o-.js";
4
- export { type AgentEventData, type AiChatEventData, type AiProviderKeyEventData, type AiToolEventData, type AnnouncementEventData, type ApiKeyEventData, type AttachmentEventData, type AuditRevealEventData, BLOCK_ATTRIBUTES, BLOCK_EVENT_RENAMES, type BillingEventData, type BlockEvent, type BlockEventMap, type BlockEventMeta, type BlockEventPattern, type BlockEventType, type BlockEventsMatching, type CloudEvent, type CloudEventOptions, type CommentEventData, type ConnectorEventData, type CredentialEventData, type DataExportEventData, type EventSink, type FlagEventData, type ForwardBlockOptions, ForwardOptions, HttpMode, HttpSinkOptions, type InboxEventData, type IncomingWebhookEventData, type InvitationEventData, type InviteCodeEventData, type NotificationEventData, type OrganizationDeletionEventData, type OrganizationDomainEventData, type OrganizationEventData, type PushDeviceEventData, ROW_EVENT_TYPES, RowEventData, type ScimEventData, type SettingEventData, type SsoProviderEventData, type StorageObjectEventData, type SupportEventData, type WaitlistEventData, type WebhookEventData, type WorkflowEventData, type WorkflowRunEventData, blockCloudEvent, blockEventAttributes, forwardBlockEvents, forwardMutations, fromHttp, httpSink, isCloudEvent, onBlockEvent, toCloudEvents, toHttp };
1
+ import { A as CredentialEventData, B as OrganizationEventData, C as BlockEventMap, D as BlockEventsMatching, E as BlockEventType, F as InvitationEventData, G as StorageObjectEventData, H as ScimEventData, I as InviteCodeEventData, J as WebhookEventData, K as SupportEventData, L as NotificationEventData, M as FlagEventData, N as InboxEventData, O as CommentEventData, P as IncomingWebhookEventData, Q as onBlockEvent, R as OrganizationDeletionEventData, S as BlockEvent, T as BlockEventPattern, U as SettingEventData, V as PushDeviceEventData, W as SsoProviderEventData, X as WorkflowRunEventData, Y as WorkflowEventData, Z as blockEventAttributes, _ as AttachmentEventData, b as BLOCK_EVENT_RENAMES, d as AgentEventData, f as AiChatEventData, g as ApiKeyEventData, h as AnnouncementEventData, j as DataExportEventData, k as ConnectorEventData, m as AiToolEventData, p as AiProviderKeyEventData, q as WaitlistEventData, v as AuditRevealEventData, w as BlockEventMeta, x as BillingEventData, y as BLOCK_ATTRIBUTES, z as OrganizationDomainEventData } from "../events-D1BOCll8.js";
2
+ import { a as ForwardBlockOptions, i as EventSink, n as CloudEventOptions, o as blockCloudEvent, r as DataschemaContext, s as forwardBlockEvents, t as CloudEvent } from "../cloud-event-Dune0KI7.js";
3
+ import { a as RowEventData, c as httpSink, d as toHttp, i as ROW_EVENT_TYPES, l as isCloudEvent, n as HttpMode, o as forwardMutations, r as HttpSinkOptions, s as fromHttp, t as ForwardOptions, u as toCloudEvents } from "../index-CicIyqOe.js";
4
+ export { type AgentEventData, type AiChatEventData, type AiProviderKeyEventData, type AiToolEventData, type AnnouncementEventData, type ApiKeyEventData, type AttachmentEventData, type AuditRevealEventData, BLOCK_ATTRIBUTES, BLOCK_EVENT_RENAMES, type BillingEventData, type BlockEvent, type BlockEventMap, type BlockEventMeta, type BlockEventPattern, type BlockEventType, type BlockEventsMatching, type CloudEvent, type CloudEventOptions, type CommentEventData, type ConnectorEventData, type CredentialEventData, type DataExportEventData, type DataschemaContext, type EventSink, type FlagEventData, type ForwardBlockOptions, ForwardOptions, HttpMode, HttpSinkOptions, type InboxEventData, type IncomingWebhookEventData, type InvitationEventData, type InviteCodeEventData, type NotificationEventData, type OrganizationDeletionEventData, type OrganizationDomainEventData, type OrganizationEventData, type PushDeviceEventData, ROW_EVENT_TYPES, RowEventData, type ScimEventData, type SettingEventData, type SsoProviderEventData, type StorageObjectEventData, type SupportEventData, type WaitlistEventData, type WebhookEventData, type WorkflowEventData, type WorkflowRunEventData, blockCloudEvent, blockEventAttributes, forwardBlockEvents, forwardMutations, fromHttp, httpSink, isCloudEvent, onBlockEvent, toCloudEvents, toHttp };
@@ -1,7 +1,7 @@
1
1
  import { s as nowInstant } from "../temporal-BJGitm-h.js";
2
- import { n as forwardBlockEvents, t as blockCloudEvent } from "../cloud-event-BnmD5fb9.js";
2
+ import { i as forwardBlockEvents, n as blockCloudEvent, r as dataschemaOf } from "../cloud-event-CTh9Sr5w.js";
3
3
  import { t as jsonReplacer } from "../json-CEnpTHlZ.js";
4
- import { a as onBlockEvent, n as BLOCK_EVENT_RENAMES, r as blockEventAttributes, t as BLOCK_ATTRIBUTES } from "../block-events-CrT8r7Fe.js";
4
+ import { i as blockEventAttributes, n as BLOCK_EVENT_RENAMES, o as onBlockEvent, t as BLOCK_ATTRIBUTES } from "../block-events-DTxU5tfr.js";
5
5
  //#region src/events/index.ts
6
6
  const ROW_EVENT_TYPES = {
7
7
  insert: "dev.better-supabase.row.created",
@@ -31,6 +31,10 @@ function toCloudEvents(notice, options) {
31
31
  const tenant = notice.tenant ?? notice.context.tenant;
32
32
  const rows = notice.rows.length > 0 ? notice.rows : notice.keys ?? [];
33
33
  const actorId = notice.context.actor?.id;
34
+ const dataschema = dataschemaOf(options, {
35
+ type,
36
+ table: notice.table
37
+ });
34
38
  return rows.map((row) => {
35
39
  const subject = subjectOf(options.meta, notice.table, row);
36
40
  return {
@@ -41,6 +45,7 @@ function toCloudEvents(notice, options) {
41
45
  ...subject ? { subject } : {},
42
46
  time,
43
47
  datacontenttype: "application/json",
48
+ ...dataschema,
44
49
  data: {
45
50
  table: notice.table,
46
51
  row,
@@ -1,7 +1,7 @@
1
1
  /// <reference lib="esnext.temporal" />
2
- import { b as DbError } from "./result-D7y2fT87.js";
3
- import { g as MutationKind, h as MutationIntent, v as Operation } from "./executor-DvsBbNBS.js";
4
- import { m as RequestContext } from "./plugin-FGY8UhYm.js";
2
+ import { b as DbError } from "./result-BchM1XZn.js";
3
+ import { g as MutationKind, h as MutationIntent, v as Operation } from "./executor-Drzu3dBK.js";
4
+ import { m as RequestContext } from "./plugin-CPK2HsbY.js";
5
5
  import { n as Logger } from "./logger-DWVYUmwi.js";
6
6
  //#region src/core/block-events.d.ts
7
7
  /** `support.*`: support sessions, where a platform admin views the app as a user. */
@@ -530,7 +530,9 @@ type EventHandler<K extends EventName> = (event: BetterSupabaseEvents[K]) => voi
530
530
  declare class EventHub {
531
531
  #private;
532
532
  readonly logger: Logger;
533
- constructor(logger?: Logger);
533
+ /** The definition's `now` option; block events take their `time` from it. */
534
+ readonly now: (() => Temporal.Instant) | undefined;
535
+ constructor(logger?: Logger, now?: () => Temporal.Instant);
534
536
  on<K extends EventName>(name: K, handler: EventHandler<K>): () => void;
535
537
  has(name: EventName): boolean;
536
538
  /**
@@ -1,9 +1,10 @@
1
1
  import { t as DbException } from "./db-exception-CnWcYPxL.js";
2
- import { c as mapDbError, n as dbError } from "./errors-B11Duf73.js";
3
- import { n as invalidRequest } from "./build-BXIzE6Xv.js";
2
+ import { c as mapDbError, n as dbError } from "./errors-2M6CKMP4.js";
3
+ import { n as invalidRequest } from "./build-meLuYGri.js";
4
4
  import { t as lookupOf } from "./lookup-BaP5bI27.js";
5
- import { a as ok, r as err, s as toDbError } from "./result-DzUbqgdW.js";
5
+ import { a as ok, r as err, s as toDbError } from "./result-DEqHCMKP.js";
6
6
  import { n as simplifyOrFalse } from "./simplify-DDO0j0LI.js";
7
+ import { n as whereClause, t as integer } from "./shared-DTneRoxi.js";
7
8
  //#region src/compile/sqlite.ts
8
9
  /**
9
10
  * The operation needs something the SQLite dialect can't express: an
@@ -250,14 +251,6 @@ function dbName(table, app) {
250
251
  if (!meta) invalidRequest(`Unknown column "${app}" on "${table.key}"`, table.key);
251
252
  return meta.db;
252
253
  }
253
- function integer(value) {
254
- if (!Number.isInteger(value) || value < 0) invalidRequest(`Expected a non-negative integer, got ${value}`);
255
- return value;
256
- }
257
- function whereClause(parts) {
258
- const present = parts.filter((part) => part !== void 0);
259
- return present.length > 0 ? ` where ${present.join(" and ")}` : "";
260
- }
261
254
  function keyColumns(table) {
262
255
  if (table.primaryKey.length === 0) unsupported("a write to a table without a primary key", table);
263
256
  return table.primaryKey.map((app) => dbName(table, app));
@@ -292,7 +285,8 @@ function selectPlan(compiler, op) {
292
285
  if (simple.never) return { kind: "never" };
293
286
  const alias = compiler.alias();
294
287
  const { list, columns } = compiler.selection(op.selection, op.table, alias);
295
- const filter = whereClause([simple.condition ? compiler.condition(simple.condition, op.table, alias) : void 0]);
288
+ const where = simple.condition ? compiler.condition(simple.condition, op.table, alias) : void 0;
289
+ const filter = whereClause([where]);
296
290
  const from = `${compiler.table(op.table)} as ${alias}`;
297
291
  const filterParams = [...compiler.params];
298
292
  const count = op.count || op.head ? {
@@ -434,25 +428,16 @@ const sqliteCompiler = {
434
428
  target: "sqlite",
435
429
  compile: (op) => compileSqlite(op)
436
430
  };
437
- /**
438
- * Compiles every operation a list definition runs (the page, its count and
439
- * the facet counts) for SQLite, without a database. Returns the first
440
- * `unsupported` or `invalid_request` error, so a test or a dev build fails
441
- * before a native screen does.
442
- *
443
- * ```ts
444
- * expect(await checkSqlite(betterSupabase, customerList)).toEqual({ ok: true, data: undefined });
445
- * ```
446
- */
447
431
  async function checkSqlite(betterSupabase, list, options = {}) {
448
- let failure;
432
+ const failures = /* @__PURE__ */ new Map();
449
433
  const probe = {
450
434
  name: "sqlite-check",
451
435
  execute(op) {
452
436
  try {
453
437
  compileSqlite(op, options);
454
438
  } catch (cause) {
455
- failure ??= toDbError(cause);
439
+ const failure = toDbError(cause);
440
+ if (!failures.has(failure.message)) failures.set(failure.message, failure);
456
441
  return Promise.resolve(err(failure));
457
442
  }
458
443
  return Promise.resolve(ok({
@@ -470,10 +455,14 @@ async function checkSqlite(betterSupabase, list, options = {}) {
470
455
  };
471
456
  const db = betterSupabase.connect(probe);
472
457
  await list.run(db, query);
473
- return failure ? err(failure) : ok(void 0);
458
+ if (options.all) await list.run(db, list.defaults);
459
+ const found = [...failures.values()];
460
+ if (options.all) return found;
461
+ const [first] = found;
462
+ return first ? err(first) : ok(void 0);
474
463
  }
475
464
  //#endregion
476
- //#region src/powersync/executor.ts
465
+ //#region src/sqlite/executor.ts
477
466
  const UNIQUE = /(?:UNIQUE|PRIMARY KEY) constraint failed: (.+)$/m;
478
467
  const NOT_NULL = /NOT NULL constraint failed: (?:[^.\s]+\.)?(\S+)/;
479
468
  const CHECK = /CHECK constraint failed: ?(\S+)?/;
@@ -668,7 +657,10 @@ async function executeOn(db, op, context, options) {
668
657
  try {
669
658
  plan = compileSqlite(op.kind === "insert" ? await withIds(db, op, options.newId) : op, options);
670
659
  } catch (cause) {
671
- return err(toDbError(cause));
660
+ const error = toDbError(cause);
661
+ const { fallback } = options;
662
+ if (fallback && op.kind === "select" && error.kind === "unsupported") return fallback.execute(op, context);
663
+ return err(error);
672
664
  }
673
665
  if (plan.kind === "never") return ok({
674
666
  rows: [],
@@ -693,26 +685,51 @@ function mapped(cause, mappers) {
693
685
  return raw ? mapDbError(raw, mappers) : toDbError(cause);
694
686
  }
695
687
  /**
688
+ * Runs repository operations on a local SQLite database, so the same
689
+ * repositories and list definitions work offline on native. Reads
690
+ * return rows in the PostgREST shape (booleans, parsed JSON, ISO
691
+ * timestamps); writes go through the database's upload queue. What SQLite
692
+ * can't express (includes, full-text search, function sources) and
693
+ * `db.$rpc` return a `DbError` of kind `unsupported` without running
694
+ * anything, or run on `options.fallback` when you pass one.
695
+ * `maxAffected` is checked against the selected keys before any write; a
696
+ * call's `timeout` and `signal` are checked before the statements start,
697
+ * and `retry` does nothing here. A `bigint` beyond `Number.MAX_SAFE_INTEGER`
698
+ * comes back as its decimal string instead of a rounded number.
699
+ */
700
+ function sqliteExecutor(db, options = {}, name = "sqlite") {
701
+ const { fallback } = options;
702
+ const rpc = fallback?.rpc?.bind(fallback);
703
+ return {
704
+ name,
705
+ ...fallback?.functionSources ? { functionSources: true } : {},
706
+ execute: (op, context) => executeOn(db, op, context, options),
707
+ ...rpc ? { rpc } : {}
708
+ };
709
+ }
710
+ //#endregion
711
+ //#region src/powersync/executor.ts
712
+ /**
696
713
  * Runs repository operations on PowerSync's local SQLite database, so the
697
714
  * same repositories and list definitions work offline on native. Reads
698
715
  * return rows in the PostgREST shape (booleans, parsed JSON, ISO
699
716
  * timestamps); writes go through PowerSync's upload queue. What SQLite
700
- * can't express (includes, full-text search, function sources) returns a
701
- * `DbError` of kind `unsupported` without running anything.
717
+ * can't express (includes, full-text search, function sources) and
718
+ * `db.$rpc` return a `DbError` of kind `unsupported` without running
719
+ * anything, or run on `options.fallback` when you pass one.
702
720
  * `maxAffected` is checked against the selected keys before any write; a
703
721
  * call's `timeout` and `signal` are checked before the statements start,
704
722
  * and `retry` does nothing here. A `bigint` beyond `Number.MAX_SAFE_INTEGER`
705
723
  * comes back as its decimal string instead of a rounded number.
706
724
  *
707
725
  * ```ts
708
- * const db = betterSupabase.connect(powersyncExecutor(powersync));
726
+ * const db = betterSupabase.connect(
727
+ * powersyncExecutor(powersync, { fallback: postgrestExecutor(supabase) }),
728
+ * );
709
729
  * ```
710
730
  */
711
731
  function powersyncExecutor(db, options = {}) {
712
- return {
713
- name: "powersync",
714
- execute: (op, context) => executeOn(db, op, context, options)
715
- };
732
+ return sqliteExecutor(db, options, "powersync");
716
733
  }
717
734
  //#endregion
718
- export { sqliteCompiler as a, quoteSqliteIdent as c, checkSqlite as i, sqliteValue as l, postgrestTimestamp as n, compileSqlite as o, powersyncExecutor as r, likeToGlob as s, fromSqliteError as t };
735
+ export { sqliteCompiler as a, quoteSqliteIdent as c, checkSqlite as i, sqliteValue as l, fromSqliteError as n, compileSqlite as o, postgrestTimestamp as r, likeToGlob as s, powersyncExecutor as t };
@@ -0,0 +1,162 @@
1
+ import { r as isPlainObject } from "./clone-dN9XOL1K.js";
2
+ import { c as mapDbError, n as dbError, u as withMaxAffected } from "./errors-2M6CKMP4.js";
3
+ import { a as ok, r as err, s as toDbError } from "./result-DEqHCMKP.js";
4
+ import { n as quoteIdent, t as compileSql } from "./sql-CwuqaQ4Y.js";
5
+ //#region src/postgres/executor.ts
6
+ function isPgError(value) {
7
+ return typeof value === "object" && value !== null && typeof value.code === "string";
8
+ }
9
+ /** node-postgres error fields to the shape `mapDbError` reads. */
10
+ function fromPgError(error) {
11
+ if (!isPgError(error)) return void 0;
12
+ const raw = {};
13
+ if (error.code !== void 0) raw.code = error.code;
14
+ if (error.message !== void 0) raw.message = error.message;
15
+ if (error.detail !== void 0) raw.details = error.detail;
16
+ if (error.hint !== void 0) raw.hint = error.hint;
17
+ if (error.constraint !== void 0) raw.constraint = error.constraint;
18
+ if (error.column !== void 0) raw.column = error.column;
19
+ if (error.table !== void 0) raw.table = error.table;
20
+ return raw;
21
+ }
22
+ async function run(client, plan, op) {
23
+ const rows = plan.rows ? (await client.queryRaw(plan.rows.text, [...plan.rows.params])).map((entry) => entry.row) : [];
24
+ let count = null;
25
+ if (plan.count) {
26
+ const [first] = await client.queryRaw(plan.count.text, [...plan.count.params]);
27
+ count = first?.count ?? 0;
28
+ } else if (op.kind !== "select") count = rows.length;
29
+ for (const next of plan.chunks ?? []) {
30
+ const more = await run(client, next, op);
31
+ rows.push(...more.rows);
32
+ count = (count ?? 0) + (more.count ?? 0);
33
+ }
34
+ return {
35
+ rows,
36
+ count
37
+ };
38
+ }
39
+ /**
40
+ * Executes repository operations as SQL on a direct Postgres connection.
41
+ * Rows have the same shape as over PostgREST. RLS applies when the client
42
+ * runs as the caller (`ctx.postgres`, `createPostgres().asUser()`).
43
+ *
44
+ * `maxAffected` fails the statement itself, so its writes roll back.
45
+ * A call's `timeout` is checked before the statement starts; set
46
+ * `statement_timeout` on the connection to bound a running statement.
47
+ * `retry` does nothing here.
48
+ */
49
+ function postgresExecutor(client) {
50
+ return {
51
+ name: "postgres",
52
+ functionSources: true,
53
+ execute: (op, context) => executeOn(client, op, context),
54
+ rpc: (name, args, context) => callFunction(client, name, args, context),
55
+ async batch(ops, context) {
56
+ if (!client.transaction) return Promise.all(ops.map((op) => executeOn(client, op, context)));
57
+ try {
58
+ return await client.transaction(async (scoped) => {
59
+ const results = [];
60
+ for (const op of ops) {
61
+ const result = await executeOn(scoped, op, context);
62
+ if (!result.ok) throw new BatchFailed();
63
+ results.push(result);
64
+ }
65
+ return results;
66
+ });
67
+ } catch (cause) {
68
+ if (!(cause instanceof BatchFailed)) throw cause;
69
+ return Promise.all(ops.map((op) => executeOn(client, op, context)));
70
+ }
71
+ }
72
+ };
73
+ }
74
+ var BatchFailed = class extends Error {};
75
+ async function executeOn(client, op, context) {
76
+ let plan;
77
+ try {
78
+ plan = compileSql(op);
79
+ } catch (cause) {
80
+ return err(toDbError(cause));
81
+ }
82
+ if (plan.never) return ok({
83
+ rows: [],
84
+ count: 0
85
+ });
86
+ if (context.signal?.aborted) return err(dbError("aborted", "The request was aborted"));
87
+ let result;
88
+ try {
89
+ result = plan.chunks && client.transaction ? await client.transaction((scoped) => run(scoped, plan, op)) : await run(client, plan, op);
90
+ } catch (cause) {
91
+ const raw = fromPgError(cause);
92
+ const error = raw ? mapDbError(raw, context.errorMappers) : toDbError(cause);
93
+ return err(withMaxAffected(error, op.kind === "update" || op.kind === "delete" ? op.maxAffected : void 0));
94
+ }
95
+ if (op.kind === "select" && op.single) {
96
+ if (result.rows.length > 1) return err(dbError("multiple_rows", `Expected one ${op.table.key} row`));
97
+ if (result.rows.length === 0 && op.single === "one") return err(dbError("not_found", `No ${op.table.key} row matched`));
98
+ }
99
+ return ok(result);
100
+ }
101
+ const JSON_TYPES = /* @__PURE__ */ new Set(["json", "jsonb"]);
102
+ async function signatureOf(client, name, context) {
103
+ const fn = context.function;
104
+ if (fn) return {
105
+ returnsSet: fn.returnsSet,
106
+ returnsVoid: fn.returns === "void",
107
+ json: new Set(fn.args.filter((arg) => JSON_TYPES.has(arg.type)).map((arg) => arg.name))
108
+ };
109
+ const [found] = await client.queryRaw("select p.proretset as returns_set, p.prorettype = 'pg_catalog.void'::pg_catalog.regtype as returns_void, p.proargnames as arg_names, p.proargmodes::text[] as arg_modes, (select array_agg(t.typname::text order by a.ordinality) from unnest(p.proargtypes::oid[]) with ordinality as a(oid, ordinality) join pg_catalog.pg_type t on t.oid = a.oid) as arg_types from pg_catalog.pg_proc p join pg_catalog.pg_namespace n on n.oid = p.pronamespace where n.nspname = $1 and p.proname = $2 limit 1", [context.schema, name]);
110
+ if (!found) return void 0;
111
+ const json = /* @__PURE__ */ new Set();
112
+ if (found.arg_names && found.arg_types) {
113
+ const modes = found.arg_modes;
114
+ const inputIndexes = modes ? modes.flatMap((mode, index) => mode === "i" || mode === "v" || mode === "b" ? [index] : []) : found.arg_names.map((_, index) => index);
115
+ for (const [position, index] of inputIndexes.entries()) {
116
+ const argName = found.arg_names[index];
117
+ const type = found.arg_types[position];
118
+ if (argName != null && type !== void 0 && JSON_TYPES.has(type)) json.add(argName);
119
+ }
120
+ }
121
+ return {
122
+ returnsSet: found.returns_set,
123
+ returnsVoid: found.returns_void,
124
+ json
125
+ };
126
+ }
127
+ function argValue(value, json) {
128
+ if (value === null) return null;
129
+ if (json) return JSON.stringify(value);
130
+ if (typeof value === "bigint") return value.toString();
131
+ if (Array.isArray(value)) return value.map((item) => argValue(item, false));
132
+ if (isPlainObject(value)) return JSON.stringify(value);
133
+ if (typeof value === "object" && !(value instanceof Date) && !(value instanceof Uint8Array)) return String(value);
134
+ return value;
135
+ }
136
+ async function callFunction(client, name, args, context) {
137
+ if (context.signal?.aborted) return err(dbError("aborted", "The request was aborted"));
138
+ try {
139
+ const signature = await signatureOf(client, name, context);
140
+ if (!signature) return err(mapDbError({
141
+ code: "PGRST202",
142
+ message: `Could not find the function ${context.schema}.${name} in the database`
143
+ }, context.errorMappers));
144
+ const params = [];
145
+ const named = Object.entries(args).filter(([, value]) => value !== void 0).map(([key, value]) => {
146
+ params.push(argValue(value, signature.json.has(key)));
147
+ return `${quoteIdent(key)} => $${String(params.length)}`;
148
+ });
149
+ const call = `${quoteIdent(context.schema)}.${quoteIdent(name)}(${named.join(", ")})`;
150
+ if (signature.returnsVoid) {
151
+ await client.queryRaw(`select ${call}`, params);
152
+ return ok(null);
153
+ }
154
+ const values = (await client.queryRaw(`select to_json(bs_call) as value from ${call} as bs_call`, params)).map((row) => row.value);
155
+ return ok(signature.returnsSet ? values : values[0] ?? null);
156
+ } catch (cause) {
157
+ const raw = fromPgError(cause);
158
+ return err(raw ? mapDbError(raw, context.errorMappers) : toDbError(cause));
159
+ }
160
+ }
161
+ //#endregion
162
+ export { postgresExecutor as n, fromPgError as t };
@@ -1,4 +1,4 @@
1
- import { T as WorkflowGraph } from "./types-AYOvcyep.js";
1
+ import { T as WorkflowGraph } from "./types-CD6yCDx3.js";
2
2
  //#region src/blocks/workflow-builder/executor.d.ts
3
3
  /** What a step node passes to the engine's step: plain data, so it serializes. */
4
4
  interface GraphStepCall {
@@ -1,6 +1,6 @@
1
- import { T as RawDbError } from "./result-D7y2fT87.js";
2
- import { R as TableMeta } from "./types-6BdhkmZe.js";
3
- import { r as Executor, v as Operation } from "./executor-DvsBbNBS.js";
1
+ import { T as RawDbError } from "./result-BchM1XZn.js";
2
+ import { R as TableMeta } from "./types-CoE5Zwy4.js";
3
+ import { r as Executor, v as Operation } from "./executor-Drzu3dBK.js";
4
4
  //#region src/compile/sqlite.d.ts
5
5
  /** A value SQLite binds: booleans become `0`/`1`, objects JSON text. */
6
6
  type SqliteValue = string | number | bigint | null;
@@ -84,38 +84,32 @@ declare function likeToGlob(pattern: string): string;
84
84
  */
85
85
  declare function compileSqlite(op: Operation, options?: SqliteCompilerOptions): SqlitePlan;
86
86
  //#endregion
87
- //#region src/powersync/executor.d.ts
88
- /** What a PowerSync database, transaction or lock context can run. */
87
+ //#region src/sqlite/executor.d.ts
88
+ /** What a SQLite database, transaction or lock context can run. */
89
89
  interface SqliteContextLike {
90
90
  getAll<T>(sql: string, parameters?: unknown[]): Promise<T[]>;
91
91
  execute(sql: string, parameters?: unknown[]): Promise<unknown>;
92
92
  }
93
- /**
94
- * The part of `PowerSyncDatabase` (`@powersync/react-native`,
95
- * `@powersync/web`, `@powersync/node`) the executor uses. Typed by shape,
96
- * so better-supabase doesn't depend on PowerSync.
97
- */
98
- interface PowerSyncDatabaseLike extends SqliteContextLike {
93
+ /** What a SQLite database the executor can run on provides: reads, writes and write transactions. */
94
+ interface SqliteDatabaseLike extends SqliteContextLike {
99
95
  writeTransaction<T>(callback: (tx: SqliteContextLike) => Promise<T>): Promise<T>;
100
96
  /** Runs a list's rows and its count on one snapshot when present. */
101
97
  readTransaction?<T>(callback: (tx: SqliteContextLike) => Promise<T>): Promise<T>;
102
- onChange?(handler: {
103
- onChange: (event: {
104
- changedTables: string[];
105
- }) => Promise<void> | void;
106
- }, options?: {
107
- tables?: string[];
108
- throttleMs?: number;
109
- signal?: AbortSignal;
110
- }): () => void;
111
98
  }
112
- interface PowerSyncExecutorOptions extends SqliteCompilerOptions {
99
+ interface SqliteExecutorOptions extends SqliteCompilerOptions {
113
100
  /**
114
- * A primary key for an insert that leaves it out. PowerSync tables key on
101
+ * A primary key for an insert that leaves it out. Offline-first tables key on
115
102
  * a text `id` that the client creates. Defaults to
116
- * `crypto.randomUUID()`, else SQLite's `uuid()` (PowerSync registers it).
103
+ * `crypto.randomUUID()`, else SQLite's `uuid()`.
117
104
  */
118
105
  readonly newId?: (table: TableMeta) => string | Promise<string>;
106
+ /**
107
+ * Runs what SQLite can't, usually `postgrestExecutor(supabase)`: reads
108
+ * that compile to `unsupported` (includes, full-text search, function
109
+ * sources) and `db.$rpc`. Writes never fall back, so the upload
110
+ * queue stays the only write path. Offline, the fallback's error comes back.
111
+ */
112
+ readonly fallback?: Executor;
119
113
  }
120
114
  /**
121
115
  * A SQLite constraint error in the shape `mapDbError` reads from Postgres:
@@ -127,22 +121,44 @@ declare function fromSqliteError(cause: unknown): RawDbError | undefined;
127
121
  * whatever the sync wrote (`2026-01-02 10:00:00.500000Z`).
128
122
  */
129
123
  declare function postgrestTimestamp(value: string): string;
124
+ //#endregion
125
+ //#region src/powersync/executor.d.ts
126
+ /**
127
+ * The part of `PowerSyncDatabase` (`@powersync/react-native`,
128
+ * `@powersync/web`, `@powersync/node`) the executor uses. Typed by shape,
129
+ * so better-supabase doesn't depend on PowerSync.
130
+ */
131
+ interface PowerSyncDatabaseLike extends SqliteDatabaseLike {
132
+ onChange?(handler: {
133
+ onChange: (event: {
134
+ changedTables: string[];
135
+ }) => Promise<void> | void;
136
+ }, options?: {
137
+ tables?: string[];
138
+ throttleMs?: number;
139
+ signal?: AbortSignal;
140
+ }): () => void;
141
+ }
142
+ type PowerSyncExecutorOptions = SqliteExecutorOptions;
130
143
  /**
131
144
  * Runs repository operations on PowerSync's local SQLite database, so the
132
145
  * same repositories and list definitions work offline on native. Reads
133
146
  * return rows in the PostgREST shape (booleans, parsed JSON, ISO
134
147
  * timestamps); writes go through PowerSync's upload queue. What SQLite
135
- * can't express (includes, full-text search, function sources) returns a
136
- * `DbError` of kind `unsupported` without running anything.
148
+ * can't express (includes, full-text search, function sources) and
149
+ * `db.$rpc` return a `DbError` of kind `unsupported` without running
150
+ * anything, or run on `options.fallback` when you pass one.
137
151
  * `maxAffected` is checked against the selected keys before any write; a
138
152
  * call's `timeout` and `signal` are checked before the statements start,
139
153
  * and `retry` does nothing here. A `bigint` beyond `Number.MAX_SAFE_INTEGER`
140
154
  * comes back as its decimal string instead of a rounded number.
141
155
  *
142
156
  * ```ts
143
- * const db = betterSupabase.connect(powersyncExecutor(powersync));
157
+ * const db = betterSupabase.connect(
158
+ * powersyncExecutor(powersync, { fallback: postgrestExecutor(supabase) }),
159
+ * );
144
160
  * ```
145
161
  */
146
162
  declare function powersyncExecutor(db: PowerSyncDatabaseLike, options?: PowerSyncExecutorOptions): Executor;
147
163
  //#endregion
148
- export { SqliteValue as _, postgrestTimestamp as a, quoteSqliteIdent as b, SqliteCompilerOptions as c, SqliteKeyedPlan as d, SqliteKeys as f, SqliteSelectPlan as g, SqliteReturning as h, fromSqliteError as i, SqliteDecode as l, SqliteQuery as m, PowerSyncExecutorOptions as n, powersyncExecutor as o, SqlitePlan as p, SqliteContextLike as r, SqliteColumn as s, PowerSyncDatabaseLike as t, SqliteInsertPlan as u, compileSqlite as v, sqliteValue as x, likeToGlob as y };
164
+ export { SqliteValue as _, fromSqliteError as a, quoteSqliteIdent as b, SqliteCompilerOptions as c, SqliteKeyedPlan as d, SqliteKeys as f, SqliteSelectPlan as g, SqliteReturning as h, SqliteContextLike as i, SqliteDecode as l, SqliteQuery as m, PowerSyncExecutorOptions as n, postgrestTimestamp as o, SqlitePlan as p, powersyncExecutor as r, SqliteColumn as s, PowerSyncDatabaseLike as t, SqliteInsertPlan as u, compileSqlite as v, sqliteValue as x, likeToGlob as y };
@@ -1,5 +1,5 @@
1
- import { f as Result, w as ErrorMapper } from "./result-D7y2fT87.js";
2
- import { O as RelationMeta, R as TableMeta, d as Codec, g as FunctionMeta } from "./types-6BdhkmZe.js";
1
+ import { f as Result, w as ErrorMapper } from "./result-BchM1XZn.js";
2
+ import { O as RelationMeta, R as TableMeta, d as Codec, g as FunctionMeta } from "./types-CoE5Zwy4.js";
3
3
  //#region src/ir/types.d.ts
4
4
  /**
5
5
  * The query IR. Every repository call becomes one of these operations; the
@@ -1,5 +1,5 @@
1
- import { T as RawDbError } from "./result-D7y2fT87.js";
2
- import { r as Executor } from "./executor-DvsBbNBS.js";
1
+ import { T as RawDbError } from "./result-BchM1XZn.js";
2
+ import { r as Executor } from "./executor-Drzu3dBK.js";
3
3
  //#region src/postgres/executor.d.ts
4
4
  /**
5
5
  * Anything that runs parameterized SQL: `ctx.postgres` from