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
@@ -0,0 +1,103 @@
1
+ import { c as SpecDiagnostic, r as DocumentFormat } from "../format-DTXdu8ya.js";
2
+ import { B as TopicInput, C as ApiSource, F as BlockEventSchema, I as BlockEventSchemas, L as CLOUD_EVENT_TRAIT, R as CloudEventsInput, n as DefineApiOptions, z as EventsOptions } from "../api-Dnf2q-Ht.js";
3
+ import { t as SPEC_PINS } from "../spec-pins-CwzDY25w.js";
4
+ //#region src/asyncapi/types.d.ts
5
+ type Json = Record<string, unknown>;
6
+ /** The AsyncAPI versions `asyncapiFormat` renders. */
7
+ type AsyncApiVersion = "3.0" | "3.1";
8
+ /** The file name `asyncapiFormat` writes; Arazzo source descriptions point at it. */
9
+ export declare const ASYNCAPI_FILE_NAME = "asyncapi.json";
10
+ interface AsyncApiInfo {
11
+ readonly title: string;
12
+ readonly version: string;
13
+ readonly description?: string;
14
+ readonly termsOfService?: string;
15
+ readonly contact?: {
16
+ readonly name?: string;
17
+ readonly url?: string;
18
+ readonly email?: string;
19
+ };
20
+ readonly license?: {
21
+ readonly name: string;
22
+ readonly url?: string;
23
+ };
24
+ }
25
+ interface AsyncApiComponents {
26
+ readonly schemas?: Readonly<Record<string, Json>>;
27
+ readonly messages?: Readonly<Record<string, Json>>;
28
+ readonly messageTraits?: Readonly<Record<string, Json>>;
29
+ readonly securitySchemes?: Readonly<Record<string, Json>>;
30
+ }
31
+ interface AsyncApiDocumentBase {
32
+ readonly info: AsyncApiInfo;
33
+ readonly defaultContentType: string;
34
+ readonly servers?: Readonly<Record<string, Json>>;
35
+ /** Channel id to Channel Object. */
36
+ readonly channels: Readonly<Record<string, Json>>;
37
+ /** Operation id to Operation Object. */
38
+ readonly operations: Readonly<Record<string, Json>>;
39
+ readonly components: AsyncApiComponents;
40
+ readonly [extension: `x-${string}`]: unknown;
41
+ }
42
+ interface AsyncApi30Document extends AsyncApiDocumentBase {
43
+ readonly asyncapi: typeof SPEC_PINS.asyncapi30;
44
+ }
45
+ /** AsyncAPI 3.1 adds the `ros2` bindings; the rest matches 3.0. */
46
+ interface AsyncApi31Document extends AsyncApiDocumentBase {
47
+ readonly asyncapi: typeof SPEC_PINS.asyncapi31;
48
+ }
49
+ interface AsyncApiDocuments {
50
+ readonly "3.0": AsyncApi30Document;
51
+ readonly "3.1": AsyncApi31Document;
52
+ }
53
+ type AsyncApiDocument<V extends AsyncApiVersion = "3.0"> = AsyncApiDocuments[V];
54
+ type AnyAsyncApiDocument = AsyncApiDocuments[AsyncApiVersion];
55
+ /** What an AsyncAPI `transform` receives, discriminated by `version`. */
56
+ type RenderedAsyncApi = { readonly [V in AsyncApiVersion]: {
57
+ readonly format: "asyncapi";
58
+ readonly version: V;
59
+ readonly document: AsyncApiDocuments[V];
60
+ }; }[AsyncApiVersion];
61
+ //#endregion
62
+ //#region src/asyncapi/format.d.ts
63
+ /**
64
+ * AsyncAPI as a `DocumentFormat`, for the events the API model describes:
65
+ * Realtime table change signals and broadcast topics on the Supabase
66
+ * Realtime websocket (`ws` bindings), CloudEvents (headers as the
67
+ * `cloudEvent` message trait), outgoing webhooks over HTTP and the events
68
+ * HTTP operations emit. 3.0 is the default; 3.1 only adds `ros2` bindings,
69
+ * so the two documents differ in the `asyncapi` field.
70
+ */
71
+ export declare const asyncapiFormat: DocumentFormat<"asyncapi", AsyncApiVersion, AnyAsyncApiDocument, AsyncApiDocuments>;
72
+ //#endregion
73
+ //#region src/asyncapi/index.d.ts
74
+ export interface AsyncApiOptions<V extends AsyncApiVersion = "3.0", Ref = string> extends DefineApiOptions<Ref> {
75
+ /** Defaults to 3.0, which more tools read; 3.1 only adds `ros2` bindings. */
76
+ readonly version?: V;
77
+ /** Last change to the document before overlays; it receives a copy. */
78
+ readonly transform?: (rendered: Extract<RenderedAsyncApi, {
79
+ readonly version: V;
80
+ }>) => AnyAsyncApiDocument | undefined;
81
+ readonly overlays?: readonly unknown[];
82
+ /** Hears every warning and info finding. Errors throw. */
83
+ readonly onDiagnostic?: (diagnostic: SpecDiagnostic) => void;
84
+ }
85
+ /**
86
+ * An AsyncAPI document for the app's events: Realtime table change signals
87
+ * and broadcast topics, CloudEvents for row and block events, outgoing
88
+ * webhooks and the events HTTP operations emit. Pass `events` (and
89
+ * `realtimeUrl` for the websocket server). Throws when building or checking
90
+ * the document finds an error; use `defineApi(...).render(asyncapiFormat)`
91
+ * to read every finding instead.
92
+ *
93
+ * ```ts
94
+ * const doc = createAsyncApi(betterSupabase, {
95
+ * info: { title: "CRM events", version: "1.0.0" },
96
+ * realtimeUrl: "wss://example.supabase.co/realtime/v1/websocket",
97
+ * events: { tables: ["customers"], cloudEvents: { source: "/crm", blocks: { "support.started": true } } },
98
+ * });
99
+ * ```
100
+ */
101
+ export declare function createAsyncApi<V extends AsyncApiVersion = "3.0", Ref = string>(betterSupabase: ApiSource, options: AsyncApiOptions<V, Ref>): AsyncApiDocuments[V];
102
+ //#endregion
103
+ export { type AnyAsyncApiDocument, type AsyncApi30Document, type AsyncApi31Document, type AsyncApiComponents, type AsyncApiDocument, type AsyncApiDocuments, type AsyncApiInfo, type AsyncApiVersion, type BlockEventSchema, type BlockEventSchemas, CLOUD_EVENT_TRAIT, type CloudEventsInput, type EventsOptions, type RenderedAsyncApi, type TopicInput };
@@ -0,0 +1,569 @@
1
+ import { r as isPlainObject } from "../clone-dN9XOL1K.js";
2
+ import { t as SPEC_PINS } from "../spec-pins-DsLfUH7l.js";
3
+ import { o as defineDocumentFormat, t as defineApi } from "../api-DtHFC037.js";
4
+ import { a as safeKey, i as CLOUD_EVENT_TRAIT, l as pointerToken, s as pascal } from "../build-hPwk3_X5.js";
5
+ import { t as ASYNCAPI_FILE_NAME } from "../types-BRTSpOIh.js";
6
+ //#region src/asyncapi/format.ts
7
+ const ASYNCAPI_FIELD = {
8
+ "3.0": SPEC_PINS.asyncapi30,
9
+ "3.1": SPEC_PINS.asyncapi31
10
+ };
11
+ const SCHEMA_PREFIX = "#/components/schemas/";
12
+ const KEY = /^[A-Za-z0-9_-]+$/;
13
+ const PARAM = /\{([^}]+)\}/g;
14
+ /** JSON Schema 2020-12 keywords the AsyncAPI Schema Object (draft-07) lacks. */
15
+ const KEYWORDS_2020 = /* @__PURE__ */ new Set([
16
+ "$defs",
17
+ "$anchor",
18
+ "$dynamicRef",
19
+ "$dynamicAnchor",
20
+ "prefixItems",
21
+ "dependentSchemas",
22
+ "dependentRequired",
23
+ "unevaluatedProperties",
24
+ "unevaluatedItems"
25
+ ]);
26
+ /** The query Supabase Realtime reads on the websocket upgrade. */
27
+ const WS_BINDING = { ws: {
28
+ method: "GET",
29
+ query: {
30
+ type: "object",
31
+ required: ["apikey"],
32
+ properties: {
33
+ apikey: {
34
+ type: "string",
35
+ description: "The project's publishable (anon) key."
36
+ },
37
+ vsn: {
38
+ type: "string",
39
+ description: "Realtime protocol version."
40
+ }
41
+ }
42
+ },
43
+ bindingVersion: "0.1.0"
44
+ } };
45
+ const STANDARD_WEBHOOK_HEADERS = {
46
+ type: "object",
47
+ required: [
48
+ "webhook-id",
49
+ "webhook-timestamp",
50
+ "webhook-signature"
51
+ ],
52
+ properties: {
53
+ "webhook-id": {
54
+ type: "string",
55
+ description: "Unique message id; the same on every retry."
56
+ },
57
+ "webhook-timestamp": {
58
+ type: "string",
59
+ pattern: "^[0-9]+$",
60
+ description: "Unix time in seconds when the message was sent."
61
+ },
62
+ "webhook-signature": {
63
+ type: "string",
64
+ description: "Space-separated signatures of `id.timestamp.body`, each `v1,<base64>`."
65
+ }
66
+ }
67
+ };
68
+ const omitUndefined = (value) => Object.fromEntries(Object.entries(value).filter(([, entry]) => entry !== void 0));
69
+ function collectRefs(value, out) {
70
+ if (Array.isArray(value)) for (const item of value) collectRefs(item, out);
71
+ else if (isPlainObject(value)) for (const [key, item] of Object.entries(value)) if (key === "$ref" && typeof item === "string") out.add(item);
72
+ else collectRefs(item, out);
73
+ }
74
+ function uses2020(value) {
75
+ if (Array.isArray(value)) return value.some(uses2020);
76
+ if (!isPlainObject(value)) return false;
77
+ return Object.entries(value).some(([key, item]) => KEYWORDS_2020.has(key) || uses2020(item));
78
+ }
79
+ /** Component names a set of values references, with everything they reference. */
80
+ function referencedSchemas(model, roots) {
81
+ const out = {};
82
+ const pending = [];
83
+ const visit = (value) => {
84
+ const refs = /* @__PURE__ */ new Set();
85
+ collectRefs(value, refs);
86
+ for (const ref of refs) {
87
+ if (!ref.startsWith(SCHEMA_PREFIX)) continue;
88
+ const name = ref.slice(21).replaceAll("~1", "/").replaceAll("~0", "~");
89
+ if (name in out || !model.schemas[name]) continue;
90
+ out[name] = model.schemas[name];
91
+ pending.push(name);
92
+ }
93
+ };
94
+ for (const root of roots) visit(root);
95
+ while (pending.length > 0) {
96
+ const name = pending.pop();
97
+ if (name !== void 0) visit(out[name]);
98
+ }
99
+ const sorted = {};
100
+ for (const name of Object.keys(out).toSorted()) {
101
+ const schema = out[name];
102
+ if (schema) sorted[name] = structuredClone(schema);
103
+ }
104
+ return sorted;
105
+ }
106
+ function lowerScheme(name, scheme, ctx) {
107
+ switch (scheme.type) {
108
+ case "http": return omitUndefined({ ...scheme });
109
+ case "apiKey": return omitUndefined({
110
+ type: "httpApiKey",
111
+ name: scheme.name,
112
+ in: scheme.in,
113
+ description: scheme.description
114
+ });
115
+ case "openIdConnect": return omitUndefined({ ...scheme });
116
+ case "oauth2": {
117
+ const flows = {};
118
+ for (const [flow, value] of Object.entries(scheme.flows)) {
119
+ const { scopes, ...rest } = value;
120
+ flows[flow] = omitUndefined({
121
+ ...rest,
122
+ availableScopes: { ...scopes }
123
+ });
124
+ }
125
+ return omitUndefined({
126
+ type: "oauth2",
127
+ description: scheme.description,
128
+ flows
129
+ });
130
+ }
131
+ case "profile":
132
+ ctx.report({
133
+ code: "asyncapi-security-unsupported",
134
+ severity: "info",
135
+ message: `Security scheme "${name}" uses Security Profiles, which AsyncAPI cannot describe; it is left out`,
136
+ pointer: `/components/securitySchemes/${pointerToken(name)}`
137
+ });
138
+ return;
139
+ default: return scheme;
140
+ }
141
+ }
142
+ function lowerMessage(message, prefix) {
143
+ return omitUndefined({
144
+ name: message.name,
145
+ title: message.title,
146
+ summary: message.summary,
147
+ description: message.description,
148
+ contentType: message.contentType,
149
+ headers: message.headers ? structuredClone(message.headers) : void 0,
150
+ payload: structuredClone(message.payload),
151
+ correlationId: message.correlationId ? { location: message.correlationId } : void 0,
152
+ traits: message.traits?.map((trait) => ({ $ref: `#/components/messageTraits/${safeKey(trait)}` })),
153
+ ...Object.fromEntries(Object.entries(message.extensions ?? {}).map(([key, value]) => [key.startsWith("x-") ? key : `${prefix}${key}`, value]))
154
+ });
155
+ }
156
+ function lowerTrait(trait) {
157
+ return omitUndefined({
158
+ ...trait,
159
+ headers: trait.headers ? structuredClone(trait.headers) : void 0
160
+ });
161
+ }
162
+ function webhookMessage(webhook) {
163
+ return {
164
+ id: `webhook${safeKey(pascal(webhook.id))}`,
165
+ name: webhook.id,
166
+ title: webhook.id,
167
+ ...webhook.summary ? { summary: webhook.summary } : {},
168
+ ...webhook.description ? { description: webhook.description } : {},
169
+ contentType: "application/json",
170
+ ...webhook.standardWebhooks ? { headers: STANDARD_WEBHOOK_HEADERS } : {},
171
+ payload: webhook.payload
172
+ };
173
+ }
174
+ /** A server from a URL: `host` and `pathname` split, the scheme as protocol. */
175
+ function serverFrom(url, fields, wsDefault) {
176
+ let parsed;
177
+ try {
178
+ parsed = new URL(url);
179
+ } catch {
180
+ return;
181
+ }
182
+ const scheme = parsed.protocol.slice(0, -1);
183
+ const protocol = wsDefault ? scheme === "http" || scheme === "ws" ? "ws" : "wss" : scheme;
184
+ const pathname = parsed.pathname === "/" ? void 0 : parsed.pathname;
185
+ return omitUndefined({
186
+ host: parsed.host,
187
+ protocol,
188
+ pathname,
189
+ ...fields
190
+ });
191
+ }
192
+ function lowerAsyncApi(model, version, ctx) {
193
+ const prefix = model.extensionPrefix;
194
+ const keyOf = (id, where) => {
195
+ if (KEY.test(id)) return id;
196
+ const key = safeKey(id);
197
+ ctx.report({
198
+ code: "asyncapi-key-invalid",
199
+ severity: "info",
200
+ message: `${where} "${id}" is written as "${key}"; AsyncAPI keys allow letters, digits, "_" and "-"`
201
+ });
202
+ return key;
203
+ };
204
+ const securitySchemes = {};
205
+ for (const [name, scheme] of Object.entries(model.securitySchemes)) {
206
+ const lowered = lowerScheme(name, scheme, ctx);
207
+ if (lowered) securitySchemes[safeKey(name)] = lowered;
208
+ }
209
+ const security = [];
210
+ for (const requirement of model.security) {
211
+ const names = Object.keys(requirement);
212
+ if (names.length > 1) ctx.report({
213
+ code: "asyncapi-security-combined",
214
+ severity: "info",
215
+ message: `A requirement that needs ${names.join(" and ")} together is listed as alternatives; AsyncAPI security lists have no AND`,
216
+ pointer: "/security"
217
+ });
218
+ for (const name of names) {
219
+ const key = safeKey(name);
220
+ if (key in securitySchemes && !security.some((entry) => entry["$ref"] === `#/components/securitySchemes/${key}`)) security.push({ $ref: `#/components/securitySchemes/${key}` });
221
+ }
222
+ }
223
+ const webhookMessages = model.webhooks.map(webhookMessage);
224
+ const allMessages = { ...model.messages };
225
+ for (const message of webhookMessages) allMessages[message.id] = message;
226
+ const channels = [...model.channels];
227
+ if (webhookMessages.length > 0) channels.push({
228
+ id: "webhooks",
229
+ address: "",
230
+ title: "Outgoing webhooks",
231
+ description: "Webhooks the app sends to each receiver's URL, signed per Standard Webhooks when the headers are listed.",
232
+ protocol: "http",
233
+ messages: webhookMessages.map((message) => message.id),
234
+ operations: model.webhooks.map((webhook, index) => ({
235
+ id: `send${safeKey(pascal(webhook.id))}Webhook`,
236
+ action: "send",
237
+ ...webhook.summary ? { summary: webhook.summary } : {},
238
+ messages: [webhookMessages[index]?.id ?? webhook.id]
239
+ }))
240
+ });
241
+ const servers = {};
242
+ const wsServers = [];
243
+ const httpServers = [];
244
+ const hasWs = channels.some((channel) => channel.protocol === "ws");
245
+ const hasHttp = channels.some((channel) => channel.protocol === "http");
246
+ if (hasWs && model.realtimeUrl) {
247
+ const server = serverFrom(model.realtimeUrl, {
248
+ title: "Supabase Realtime",
249
+ description: "The Realtime websocket. Private channels need the user's access token.",
250
+ security: security.length > 0 ? security : void 0
251
+ }, true);
252
+ if (server) {
253
+ servers["realtime"] = server;
254
+ wsServers.push({ $ref: "#/servers/realtime" });
255
+ } else ctx.report({
256
+ code: "asyncapi-realtime-url-invalid",
257
+ severity: "error",
258
+ message: `realtimeUrl "${model.realtimeUrl}" is not an absolute URL`,
259
+ pointer: "/servers/realtime"
260
+ });
261
+ } else if (hasWs) ctx.report({
262
+ code: "asyncapi-server-missing",
263
+ severity: "warning",
264
+ message: "Realtime channels are described without a server; set realtimeUrl to add the Realtime websocket",
265
+ pointer: "/servers"
266
+ });
267
+ if (hasHttp) model.servers.forEach((entry, index) => {
268
+ const key = safeKey(entry.name ?? (index === 0 ? "api" : `api${String(index + 1)}`));
269
+ const server = serverFrom(entry.url, omitUndefined({ description: entry.description }), false);
270
+ if (!server || key in servers) return;
271
+ servers[key] = server;
272
+ httpServers.push({ $ref: `#/servers/${key}` });
273
+ });
274
+ const messageKeys = /* @__PURE__ */ new Map();
275
+ const messages = {};
276
+ for (const [id, message] of Object.entries(allMessages)) {
277
+ const key = keyOf(id, "Message");
278
+ messageKeys.set(id, key);
279
+ messages[key] = lowerMessage(message, prefix);
280
+ if (uses2020(message.payload) || uses2020(message.headers)) ctx.report({
281
+ code: "asyncapi-schema-dialect",
282
+ severity: "warning",
283
+ message: `Message "${id}" uses JSON Schema 2020-12 keywords that the AsyncAPI Schema Object (draft-07) does not define`,
284
+ pointer: `/components/messages/${pointerToken(key)}`
285
+ });
286
+ }
287
+ const channelObjects = {};
288
+ const operations = {};
289
+ const placed = [];
290
+ const addOperation = (key, operation, pointer) => {
291
+ if (key in operations) {
292
+ ctx.report({
293
+ code: "asyncapi-operation-id-duplicate",
294
+ severity: "error",
295
+ message: `Two operations have the id "${key}"; the first one is kept`,
296
+ pointer
297
+ });
298
+ return;
299
+ }
300
+ operations[key] = operation;
301
+ };
302
+ for (const channel of channels) {
303
+ const key = keyOf(channel.id, "Channel");
304
+ if (key in channelObjects) {
305
+ ctx.report({
306
+ code: "asyncapi-channel-id-duplicate",
307
+ severity: "error",
308
+ message: `Two channels have the id "${key}"; the first one is kept`,
309
+ pointer: `/channels/${pointerToken(key)}`
310
+ });
311
+ continue;
312
+ }
313
+ placed.push({
314
+ key,
315
+ channel
316
+ });
317
+ const channelMessages = {};
318
+ for (const id of channel.messages) {
319
+ const messageKey = messageKeys.get(id);
320
+ if (messageKey === void 0) {
321
+ ctx.report({
322
+ code: "asyncapi-message-unknown",
323
+ severity: "error",
324
+ message: `Channel "${channel.id}" lists an unknown message "${id}"`,
325
+ pointer: `/channels/${pointerToken(key)}/messages`
326
+ });
327
+ continue;
328
+ }
329
+ channelMessages[messageKey] = { $ref: `#/components/messages/${messageKey}` };
330
+ }
331
+ const names = [...channel.address.matchAll(PARAM)].map((match) => match[1] ?? "");
332
+ const parameters = names.length > 0 ? Object.fromEntries(names.map((name) => [name, omitUndefined({ ...channel.parameters?.[name] })])) : void 0;
333
+ const serverRefs = channel.protocol === "ws" ? wsServers : httpServers;
334
+ channelObjects[key] = omitUndefined({
335
+ address: channel.address === "" ? null : channel.address,
336
+ title: channel.title,
337
+ summary: channel.summary,
338
+ description: channel.description,
339
+ servers: serverRefs.length > 0 ? serverRefs.map((ref) => ({ ...ref })) : void 0,
340
+ parameters,
341
+ messages: channelMessages,
342
+ bindings: channel.protocol === "ws" ? structuredClone(WS_BINDING) : void 0,
343
+ ...channel.extensions
344
+ });
345
+ for (const operation of channel.operations) {
346
+ const operationKey = keyOf(operation.id, "Operation");
347
+ const refs = [];
348
+ for (const id of operation.messages ?? []) {
349
+ const messageKey = messageKeys.get(id);
350
+ if (messageKey === void 0 || !channel.messages.includes(id)) {
351
+ ctx.report({
352
+ code: "asyncapi-operation-message-unknown",
353
+ severity: "error",
354
+ message: `Operation "${operation.id}" lists "${id}", which is not a message of channel "${channel.id}"`,
355
+ pointer: `/operations/${pointerToken(operationKey)}`
356
+ });
357
+ continue;
358
+ }
359
+ refs.push({ $ref: `#/channels/${key}/messages/${messageKey}` });
360
+ }
361
+ addOperation(operationKey, omitUndefined({
362
+ action: operation.action,
363
+ channel: { $ref: `#/channels/${key}` },
364
+ summary: operation.summary,
365
+ description: operation.description,
366
+ messages: operation.messages ? refs : void 0,
367
+ [`${prefix}permission`]: operation.permission,
368
+ ...operation.extensions
369
+ }), `/operations/${pointerToken(operationKey)}`);
370
+ }
371
+ }
372
+ for (const operation of model.operations) {
373
+ const emits = operation.extensions[`${prefix}emits`];
374
+ if (!Array.isArray(emits)) continue;
375
+ const byChannel = /* @__PURE__ */ new Map();
376
+ for (const event of emits) {
377
+ if (typeof event !== "string") continue;
378
+ const target = placed.find(({ channel }) => channel.messages.some((id) => {
379
+ const message = allMessages[id];
380
+ return id === event || message?.name === event || message?.name?.endsWith(`.${event}`) === true;
381
+ }));
382
+ const id = target?.channel.messages.find((candidate) => {
383
+ const message = allMessages[candidate];
384
+ return candidate === event || message?.name === event || message?.name?.endsWith(`.${event}`) === true;
385
+ });
386
+ if (!target || id === void 0) {
387
+ ctx.report({
388
+ code: "asyncapi-emits-unknown",
389
+ severity: "warning",
390
+ message: `Operation "${operation.id}" emits "${event}", which no message describes`,
391
+ pointer: `/operations/${pointerToken(operation.id)}`
392
+ });
393
+ continue;
394
+ }
395
+ const list = byChannel.get(target.key) ?? [];
396
+ list.push(messageKeys.get(id) ?? id);
397
+ byChannel.set(target.key, list);
398
+ }
399
+ const many = byChannel.size > 1;
400
+ for (const [channelKey, keys] of byChannel) {
401
+ const operationKey = safeKey(many ? `${operation.id}Emits${pascal(channelKey)}` : `${operation.id}Emits`);
402
+ addOperation(operationKey, {
403
+ action: "send",
404
+ channel: { $ref: `#/channels/${channelKey}` },
405
+ summary: `Events sent by ${operation.method.toUpperCase()} ${operation.path}`,
406
+ messages: [...new Set(keys)].map((messageKey) => ({ $ref: `#/channels/${channelKey}/messages/${messageKey}` })),
407
+ [`${prefix}operation`]: operation.id
408
+ }, `/operations/${pointerToken(operationKey)}`);
409
+ }
410
+ }
411
+ const traits = {};
412
+ for (const [name, trait] of Object.entries(model.messageTraits ?? {})) traits[safeKey(name)] = lowerTrait(trait);
413
+ const schemas = referencedSchemas(model, [Object.values(messages), Object.values(traits)]);
414
+ const { info } = model;
415
+ const document = omitUndefined({
416
+ asyncapi: ASYNCAPI_FIELD[version],
417
+ info: omitUndefined({
418
+ title: info.title,
419
+ version: info.version,
420
+ description: info.description ?? info.summary,
421
+ termsOfService: info.termsOfService,
422
+ contact: info.contact ? omitUndefined({ ...info.contact }) : void 0,
423
+ license: info.license ? omitUndefined({
424
+ name: info.license.name,
425
+ url: info.license.url
426
+ }) : void 0
427
+ }),
428
+ defaultContentType: "application/json",
429
+ servers: Object.keys(servers).length > 0 ? servers : void 0,
430
+ channels: channelObjects,
431
+ operations,
432
+ components: omitUndefined({
433
+ schemas: Object.keys(schemas).length > 0 ? schemas : void 0,
434
+ messages: Object.keys(messages).length > 0 ? messages : void 0,
435
+ messageTraits: Object.keys(traits).length > 0 ? traits : void 0,
436
+ securitySchemes: Object.keys(securitySchemes).length > 0 ? securitySchemes : void 0
437
+ })
438
+ });
439
+ if (!isAsyncApiDocument(document)) throw new TypeError("better-supabase/asyncapi: lowering lost a required field");
440
+ return document;
441
+ }
442
+ function isAsyncApiDocument(value) {
443
+ return typeof value["asyncapi"] === "string" && isPlainObject(value["info"]) && isPlainObject(value["channels"]) && isPlainObject(value["operations"]) && isPlainObject(value["components"]);
444
+ }
445
+ function resolve(document, ref) {
446
+ if (!ref.startsWith("#/")) return void 0;
447
+ let node = document;
448
+ for (const raw of ref.slice(2).split("/")) {
449
+ const key = raw.replaceAll("~1", "/").replaceAll("~0", "~");
450
+ if (!isPlainObject(node)) return void 0;
451
+ node = node[key];
452
+ }
453
+ return node;
454
+ }
455
+ function refOf(value) {
456
+ return isPlainObject(value) && typeof value["$ref"] === "string" ? value["$ref"] : void 0;
457
+ }
458
+ function lintAsyncApi(document) {
459
+ const diagnostics = [];
460
+ const refs = /* @__PURE__ */ new Set();
461
+ collectRefs(document, refs);
462
+ for (const ref of refs) if (ref.startsWith("#") && resolve(document, ref) === void 0) diagnostics.push({
463
+ code: "asyncapi-ref-unresolved",
464
+ severity: "error",
465
+ message: `$ref "${ref}" does not resolve inside the document`
466
+ });
467
+ for (const [key, channel] of Object.entries(document.channels)) {
468
+ const pointer = `/channels/${pointerToken(key)}`;
469
+ if (!KEY.test(key)) diagnostics.push({
470
+ code: "asyncapi-key-invalid",
471
+ severity: "error",
472
+ message: `Channel id "${key}" has characters AsyncAPI keys do not allow`,
473
+ pointer
474
+ });
475
+ const address = channel["address"];
476
+ const names = new Set(typeof address === "string" ? [...address.matchAll(PARAM)].map((match) => match[1] ?? "") : []);
477
+ const parameters = isPlainObject(channel["parameters"]) ? Object.keys(channel["parameters"]) : [];
478
+ for (const name of parameters) if (!names.has(name)) diagnostics.push({
479
+ code: "asyncapi-parameter-unknown",
480
+ severity: "error",
481
+ message: `Parameter "${name}" is not in the address of channel "${key}"`,
482
+ pointer: `${pointer}/parameters`
483
+ });
484
+ for (const name of names) if (!parameters.includes(name)) diagnostics.push({
485
+ code: "asyncapi-parameter-missing",
486
+ severity: "error",
487
+ message: `Address expression "{${name}}" of channel "${key}" has no parameter`,
488
+ pointer: `${pointer}/parameters`
489
+ });
490
+ }
491
+ for (const [key, operation] of Object.entries(document.operations)) {
492
+ const pointer = `/operations/${pointerToken(key)}`;
493
+ const channelRef = refOf(operation["channel"]);
494
+ if (!channelRef?.startsWith("#/channels/")) {
495
+ diagnostics.push({
496
+ code: "asyncapi-operation-channel-unknown",
497
+ severity: "error",
498
+ message: `Operation "${key}" does not reference a root channel`,
499
+ pointer: `${pointer}/channel`
500
+ });
501
+ continue;
502
+ }
503
+ const list = Array.isArray(operation["messages"]) ? operation["messages"] : [];
504
+ for (const entry of list) if (!refOf(entry)?.startsWith(`${channelRef}/messages/`)) diagnostics.push({
505
+ code: "asyncapi-operation-message-unknown",
506
+ severity: "error",
507
+ message: `Operation "${key}" lists a message outside its channel`,
508
+ pointer: `${pointer}/messages`
509
+ });
510
+ }
511
+ return diagnostics;
512
+ }
513
+ /**
514
+ * AsyncAPI as a `DocumentFormat`, for the events the API model describes:
515
+ * Realtime table change signals and broadcast topics on the Supabase
516
+ * Realtime websocket (`ws` bindings), CloudEvents (headers as the
517
+ * `cloudEvent` message trait), outgoing webhooks over HTTP and the events
518
+ * HTTP operations emit. 3.0 is the default; 3.1 only adds `ros2` bindings,
519
+ * so the two documents differ in the `asyncapi` field.
520
+ */
521
+ const asyncapiFormat = defineDocumentFormat({
522
+ id: "asyncapi",
523
+ versions: {
524
+ "3.0": {
525
+ pin: SPEC_PINS.asyncapi30,
526
+ status: "stable"
527
+ },
528
+ "3.1": {
529
+ pin: SPEC_PINS.asyncapi31,
530
+ status: "stable"
531
+ }
532
+ },
533
+ defaultVersion: "3.0",
534
+ lower: lowerAsyncApi,
535
+ lint: lintAsyncApi,
536
+ fileName: () => ASYNCAPI_FILE_NAME
537
+ });
538
+ //#endregion
539
+ //#region src/asyncapi/index.ts
540
+ /**
541
+ * An AsyncAPI document for the app's events: Realtime table change signals
542
+ * and broadcast topics, CloudEvents for row and block events, outgoing
543
+ * webhooks and the events HTTP operations emit. Pass `events` (and
544
+ * `realtimeUrl` for the websocket server). Throws when building or checking
545
+ * the document finds an error; use `defineApi(...).render(asyncapiFormat)`
546
+ * to read every finding instead.
547
+ *
548
+ * ```ts
549
+ * const doc = createAsyncApi(betterSupabase, {
550
+ * info: { title: "CRM events", version: "1.0.0" },
551
+ * realtimeUrl: "wss://example.supabase.co/realtime/v1/websocket",
552
+ * events: { tables: ["customers"], cloudEvents: { source: "/crm", blocks: { "support.started": true } } },
553
+ * });
554
+ * ```
555
+ */
556
+ function createAsyncApi(betterSupabase, options) {
557
+ const { version, transform, overlays, onDiagnostic, ...apiOptions } = options;
558
+ const result = defineApi(betterSupabase, apiOptions).render(asyncapiFormat, {
559
+ ...version === void 0 ? {} : { version },
560
+ ...transform === void 0 ? {} : { transform: (rendered) => transform(rendered) },
561
+ ...overlays === void 0 ? {} : { overlays }
562
+ });
563
+ const errors = result.diagnostics.filter((diagnostic) => diagnostic.severity === "error");
564
+ if (errors.length > 0) throw new TypeError(`createAsyncApi: ${errors.map((error) => `${error.code}: ${error.message}${error.pointer ? ` (${error.pointer})` : ""}`).join("; ")}`);
565
+ if (onDiagnostic) for (const diagnostic of result.diagnostics) onDiagnostic(diagnostic);
566
+ return result.document;
567
+ }
568
+ //#endregion
569
+ export { ASYNCAPI_FILE_NAME, CLOUD_EVENT_TRAIT, asyncapiFormat, createAsyncApi };