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
@@ -1,212 +0,0 @@
1
- import { n as dbError } from "./errors-B11Duf73.js";
2
- import { a as ok, r as err } from "./result-DzUbqgdW.js";
3
- import { n as validate } from "./standard-BK0cqJ7y.js";
4
- import { a as respond } from "./respond-BUgsXNgk.js";
5
- //#region src/server/resource.ts
6
- const INTEGER = /* @__PURE__ */ new Set([
7
- "int2",
8
- "int4",
9
- "int8"
10
- ]);
11
- function keyValue(table, raw) {
12
- const invalid = err(dbError("invalid_input", `${JSON.stringify(raw)} is not a valid ${table.key} key`));
13
- const column = table.columns[table.primaryKey[0]];
14
- if (column && INTEGER.has(column.type)) {
15
- const value = typeof raw === "string" ? Number(raw) : raw;
16
- return typeof value === "number" && Number.isSafeInteger(value) ? ok(value) : invalid;
17
- }
18
- return typeof raw === "string" && raw !== "" ? ok(raw) : invalid;
19
- }
20
- /**
21
- * A cross-site browser request that needed no CORS preflight: a form post
22
- * riding on the session cookie. Bearer requests and JSON bodies (which need a
23
- * preflight) pass, as do requests without an `Origin` (not a browser).
24
- */
25
- function crossSiteSimpleRequest(request) {
26
- if (request.method === "GET" || request.method === "HEAD") return false;
27
- if (request.headers.has("authorization")) return false;
28
- const origin = request.headers.get("origin");
29
- if (!origin || origin === new URL(request.url).origin) return false;
30
- if (request.headers.get("sec-fetch-site") === "same-origin") return false;
31
- const type = request.headers.get("content-type") ?? "";
32
- return !/^application\/(?:[\w.+-]+\+)?json\b/iu.test(type);
33
- }
34
- async function readBody(request) {
35
- try {
36
- const body = await request.json();
37
- if (typeof body === "object" && body !== null && !Array.isArray(body)) return ok(body);
38
- } catch {}
39
- return err(dbError("invalid_input", "The request body must be a JSON object"));
40
- }
41
- function pageArgs(query, max, pagination) {
42
- const raw = (name) => {
43
- const value = query instanceof URLSearchParams ? query.get(name) : query?.[name];
44
- return value === null || value === "" ? void 0 : value;
45
- };
46
- const read = (name, fallback) => {
47
- const value = raw(name);
48
- if (value === void 0) return fallback;
49
- const number = Number(value);
50
- return Number.isSafeInteger(number) && number >= 1 ? number : void 0;
51
- };
52
- const issues = [];
53
- const size = read("size", 50);
54
- if (size === void 0 || size > max) issues.push({
55
- message: `Must be between 1 and ${max}`,
56
- path: ["size"]
57
- });
58
- const [used, unused] = pagination === "cursor" ? ["after", "page"] : ["page", "after"];
59
- if (raw(unused) !== void 0) issues.push({
60
- message: `This list pages with \`${used}\``,
61
- path: [unused]
62
- });
63
- const page = read("page", 1);
64
- if (pagination === "offset" && page === void 0) issues.push({
65
- message: "Must be a positive integer",
66
- path: ["page"]
67
- });
68
- const after = raw("after");
69
- if (pagination === "cursor" && after !== void 0 && typeof after !== "string") issues.push({
70
- message: "Must be text",
71
- path: ["after"]
72
- });
73
- if (issues.length > 0 || size === void 0) return err(dbError("validation", "Invalid page parameters", { issues }));
74
- return pagination === "cursor" ? ok({
75
- after: typeof after === "string" ? after : null,
76
- size
77
- }) : ok({
78
- page: page ?? 1,
79
- size
80
- });
81
- }
82
- function asObject(value) {
83
- return typeof value === "object" && value !== null && !Array.isArray(value) ? ok(value) : err(dbError("invalid_input", "Expected an object of column values"));
84
- }
85
- async function settled(value) {
86
- return await value;
87
- }
88
- function notAllowed(allowed) {
89
- return new Response(null, {
90
- status: 405,
91
- headers: { allow: allowed.join(", ") }
92
- });
93
- }
94
- /**
95
- * Operations over one table, matching the paths and responses of
96
- * `createOpenApi`: `GET/POST /<table>` and `GET/PATCH/DELETE /<table>/{id}`.
97
- * Shared by the HTTP adapters and the MCP table tools.
98
- */
99
- function defineResource(betterSupabase, table, options = {}) {
100
- const meta = betterSupabase.meta.tables[table];
101
- if (!meta) throw new TypeError(`Unknown table "${table}"`);
102
- if (options.list && options.list.table !== table) throw new TypeError(`The list query is for "${options.list.table}", not "${table}"`);
103
- const operations = options.operations ?? (meta.kind === "view" ? ["list", "get"] : [
104
- "list",
105
- "get",
106
- "create",
107
- "update",
108
- "delete"
109
- ]);
110
- const keyParam = meta.primaryKey.length === 1 ? meta.primaryKey[0] : void 0;
111
- const has = (operation) => operations.includes(operation);
112
- const extra = options.select === void 0 ? {} : { select: options.select };
113
- const maxPageSize = options.maxPageSize ?? 200;
114
- const list = options.list;
115
- const pagination = list ? list.pagination ?? "offset" : options.pagination ?? "offset";
116
- const execute = async (db, operation, input = {}) => {
117
- const repository = db[table];
118
- if (!repository) throw new TypeError(`The db has no "${table}" repository`);
119
- if (!has(operation)) return err(dbError("forbidden", `${operation} is not enabled for ${table}`));
120
- const key = () => keyParam ? keyValue(meta, input.id) : err(dbError("invalid_request", `${table} has no single-column key`));
121
- switch (operation) {
122
- case "list": {
123
- if (list) {
124
- const query = list.parse(input.query ?? {});
125
- if (!query.ok) return err(dbError("validation", "Invalid list query", { issues: query.issues }));
126
- return settled(list.run(db, query.value, extra));
127
- }
128
- const page = pageArgs(input.query, maxPageSize, pagination);
129
- if (!page.ok) return page;
130
- return settled(repository.paginate({
131
- ...extra,
132
- ...page.data,
133
- ..."page" in page.data ? { count: "exact" } : {}
134
- }));
135
- }
136
- case "get": {
137
- const id = key();
138
- if (!id.ok) return id;
139
- return settled(repository.findById(id.data, extra));
140
- }
141
- case "create": {
142
- const body = asObject(input.data);
143
- if (!body.ok) return body;
144
- const data = options.input?.create ? await validate(options.input.create, body.data, "data") : body;
145
- if (!data.ok) return data;
146
- return settled(repository.create(data.data, extra));
147
- }
148
- case "update": {
149
- const id = key();
150
- if (!id.ok) return id;
151
- const body = asObject(input.data);
152
- if (!body.ok) return body;
153
- const data = options.input?.update ? await validate(options.input.update, body.data, "data") : body;
154
- if (!data.ok) return data;
155
- return settled(repository.update(id.data, data.data, extra));
156
- }
157
- case "delete": {
158
- const id = key();
159
- if (!id.ok) return id;
160
- return settled(repository.delete(id.data));
161
- }
162
- default: throw new TypeError(`Unknown operation ${String(operation)}`);
163
- }
164
- };
165
- const collectionMethods = [...has("list") ? ["GET"] : [], ...has("create") ? ["POST"] : []];
166
- const itemMethods = [
167
- ...has("get") ? ["GET"] : [],
168
- ...has("update") ? ["PATCH"] : [],
169
- ...has("delete") ? ["DELETE"] : []
170
- ];
171
- const route = async (request, db, id) => {
172
- if (crossSiteSimpleRequest(request)) return err(dbError("forbidden", "Cross-site requests need Content-Type: application/json or a bearer token", { code: "CROSS_SITE_REQUEST" }));
173
- if (id === void 0) {
174
- if (request.method === "GET" && has("list")) return execute(db, "list", { query: new URL(request.url).searchParams });
175
- if (request.method === "POST" && has("create")) {
176
- const body = await readBody(request);
177
- return body.ok ? execute(db, "create", { data: body.data }) : body;
178
- }
179
- return notAllowed(collectionMethods);
180
- }
181
- if (!keyParam) return new Response(null, { status: 404 });
182
- if (request.method === "GET" && has("get")) return execute(db, "get", { id });
183
- if (request.method === "PATCH" && has("update")) {
184
- const body = await readBody(request);
185
- return body.ok ? execute(db, "update", {
186
- id,
187
- data: body.data
188
- }) : body;
189
- }
190
- if (request.method === "DELETE" && has("delete")) return execute(db, "delete", { id });
191
- return notAllowed(itemMethods);
192
- };
193
- return {
194
- table,
195
- meta,
196
- operations,
197
- keyParam,
198
- list,
199
- pagination,
200
- maxPageSize,
201
- execute,
202
- handle(request, db, id, respondOptions = {}) {
203
- const status = id === void 0 && request.method === "POST" ? 201 : void 0;
204
- return respond(() => route(request, db, id), status === void 0 ? respondOptions : {
205
- ...respondOptions,
206
- status
207
- });
208
- }
209
- };
210
- }
211
- //#endregion
212
- export { defineResource as t };
@@ -1,74 +0,0 @@
1
- import { E as ValidationIssue, f as Result } from "./result-D7y2fT87.js";
2
- import { H as Update, L as TableKey, R as TableMeta, a as AnyModels, i as AnyFunctions, x as Insert } from "./types-6BdhkmZe.js";
3
- import { It as SelectArg, t as BetterSupabase } from "./define-CJJkkr1-.js";
4
- import { a as RespondOptions } from "./respond-DprrgyXX.js";
5
- import { i as ResourceOperation } from "./index-Bxih3l0u.js";
6
- import { StandardSchemaV1 } from "@standard-schema/spec";
7
- //#region src/server/resource.d.ts
8
- /** What a resource needs from `defineListQuery`. */
9
- interface ResourceList {
10
- readonly table: string;
11
- readonly pagination?: ResourcePagination;
12
- readonly openapi: readonly unknown[];
13
- readonly jsonSchema: Readonly<Record<string, unknown>>;
14
- parse(input: never): {
15
- readonly ok: true;
16
- readonly value: unknown;
17
- } | {
18
- readonly ok: false;
19
- readonly issues: readonly ValidationIssue[];
20
- };
21
- run(db: never, query: never, extra?: never): PromiseLike<unknown>;
22
- }
23
- interface ResourceRouteOptions<M extends AnyModels, T extends TableKey<M>> {
24
- /** Defaults to every operation for tables, `list` and `get` for views. */
25
- readonly operations?: readonly ResourceOperation[];
26
- /** Filters, search and sorts for `list`, from `defineListQuery`. */
27
- readonly list?: ResourceList;
28
- /** Columns returned by every operation. */
29
- readonly select?: SelectArg<M, T>;
30
- /** Validates request bodies before they reach the repository. */
31
- readonly input?: {
32
- readonly create?: StandardSchemaV1<unknown, Insert<M, T>>;
33
- readonly update?: StandardSchemaV1<unknown, Update<M, T>>;
34
- };
35
- /**
36
- * Paging of the default list: `offset` (`page` and `size`) or `cursor`
37
- * (`after` and `size`, keyset). A `list` query brings its own. Defaults
38
- * to `offset`.
39
- */
40
- readonly pagination?: ResourcePagination;
41
- /** Largest page for the default list. Defaults to 200. */
42
- readonly maxPageSize?: number;
43
- }
44
- type ResourcePagination = "offset" | "cursor";
45
- interface ResourceInput {
46
- /** Primary key value; strings are converted for integer keys. */
47
- readonly id?: unknown;
48
- /** Body of `create` and `update`. */
49
- readonly data?: unknown;
50
- /** `list` parameters: URL params or typed values. */
51
- readonly query?: URLSearchParams | Readonly<Record<string, unknown>>;
52
- }
53
- interface ResourceHandler {
54
- readonly table: string;
55
- readonly meta: TableMeta;
56
- readonly operations: readonly ResourceOperation[];
57
- /** Name of the key parameter, or `undefined` for tables without a single-column key. */
58
- readonly keyParam: string | undefined;
59
- readonly list: ResourceList | undefined;
60
- readonly pagination: ResourcePagination;
61
- readonly maxPageSize: number;
62
- /** Runs one operation as whoever `db` is bound to. Resolves to a `Result`. */
63
- execute(db: object, operation: ResourceOperation, input?: ResourceInput): Promise<Result<unknown>>;
64
- /** Serves a collection request (`id` undefined) or an item request. */
65
- handle(request: Request, db: object, id: string | undefined, options?: RespondOptions): Promise<Response>;
66
- }
67
- /**
68
- * Operations over one table, matching the paths and responses of
69
- * `createOpenApi`: `GET/POST /<table>` and `GET/PATCH/DELETE /<table>/{id}`.
70
- * Shared by the HTTP adapters and the MCP table tools.
71
- */
72
- declare function defineResource<M extends AnyModels, D, F extends AnyFunctions, E, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, F, E>, table: T, options?: ResourceRouteOptions<M, T>): ResourceHandler;
73
- //#endregion
74
- export { ResourceRouteOptions as a, ResourcePagination as i, ResourceInput as n, defineResource as o, ResourceList as r, ResourceHandler as t };
@@ -1,6 +0,0 @@
1
- //#region src/core/template.d.ts
2
- /** Placeholder names in a `{name}` template; a rest placeholder `{...name}` is `name`. */
3
- type TemplateParams<P extends string> = P extends `${string}{${infer K}}${infer R}` ? (K extends `...${infer N}` ? N : K) | TemplateParams<R> : never;
4
- type TemplateValues<P extends string> = { readonly [K in TemplateParams<P>]: string | number; };
5
- //#endregion
6
- export { TemplateValues as n, TemplateParams as t };
@@ -1,232 +0,0 @@
1
- import { n as dbError } from "./errors-B11Duf73.js";
2
- import { c as optionalTemporal, s as nowInstant } from "./temporal-BJGitm-h.js";
3
- import { n as temporalMissing } from "./temporal-required-BVvW7SYJ.js";
4
- import { a as ok, r as err } from "./result-DzUbqgdW.js";
5
- import { i as toBase64, r as fromBase64 } from "./base64-D2gsioCY.js";
6
- import { c as toApp } from "./shared-CxWmcyqB.js";
7
- //#region src/blocks/webhooks/verify.ts
8
- const encoder = /* @__PURE__ */ new TextEncoder();
9
- /** Accepts `whsec_…`, `v1,whsec_…` (Supabase Auth hooks) or raw base64. */
10
- function secretBytes(secret) {
11
- const raw = secret.replace(/^v1,/, "").replace(/^whsec_/, "");
12
- try {
13
- return fromBase64(raw);
14
- } catch {
15
- throw new TypeError("Webhook secret is not valid base64");
16
- }
17
- }
18
- /** Secrets come from configuration, so a handful of keys suffice. */
19
- const keys = /* @__PURE__ */ new Map();
20
- function keyFor(secret) {
21
- let key = keys.get(secret);
22
- if (!key) {
23
- key = crypto.subtle.importKey("raw", secretBytes(secret), {
24
- name: "HMAC",
25
- hash: "SHA-256"
26
- }, false, ["sign", "verify"]);
27
- if (keys.size < 16) {
28
- keys.set(secret, key);
29
- key.catch(() => keys.delete(secret));
30
- }
31
- }
32
- return key;
33
- }
34
- async function signature(secret, content) {
35
- return toBase64(new Uint8Array(await crypto.subtle.sign("HMAC", await keyFor(secret), encoder.encode(content))));
36
- }
37
- function decodeSignature(value) {
38
- try {
39
- return fromBase64(value);
40
- } catch {
41
- return;
42
- }
43
- }
44
- /** Constant-time string comparison. */
45
- function timingSafeEqual(a, b) {
46
- const left = encoder.encode(a);
47
- const right = encoder.encode(b);
48
- let diff = left.length ^ right.length;
49
- for (let index = 0; index < Math.max(left.length, right.length); index++) diff |= (left[index] ?? 0) ^ (right[index] ?? 0);
50
- return diff === 0;
51
- }
52
- function header(headers, name) {
53
- if (headers instanceof Headers) return headers.get(name);
54
- return Object.entries(headers).find(([key]) => key.toLowerCase() === name)?.[1] ?? null;
55
- }
56
- const unauthorized = (code, message) => dbError("unauthorized", message, { code });
57
- /** Headers for a signed Standard Webhooks request. */
58
- async function signWebhook(secret, message) {
59
- const timestamp = String(Math.floor((message.timestamp ?? nowInstant()).epochMilliseconds / 1e3));
60
- return {
61
- "webhook-id": message.id,
62
- "webhook-timestamp": timestamp,
63
- "webhook-signature": `v1,${await signature(secret, `${message.id}.${timestamp}.${message.body}`)}`
64
- };
65
- }
66
- /**
67
- * Verifies a Standard Webhooks signature (`webhook-id`, `webhook-timestamp`,
68
- * `webhook-signature`, or the `svix-` names Svix-based senders use) and
69
- * parses the JSON body. Pass several secrets while rotating.
70
- */
71
- async function verifyWebhook(input, secrets, options = {}) {
72
- const headers = input.headers;
73
- const prefix = header(headers, "webhook-id") === null ? "svix" : "webhook";
74
- const id = header(headers, `${prefix}-id`);
75
- const timestamp = header(headers, `${prefix}-timestamp`);
76
- const signatures = header(headers, `${prefix}-signature`);
77
- if (!id || !timestamp || !signatures) return err(unauthorized("WEBHOOK_MISSING_HEADERS", "Missing webhook signature headers"));
78
- const seconds = Number(timestamp);
79
- if (!/^\d+$/.test(timestamp)) return err(unauthorized("WEBHOOK_INVALID_TIMESTAMP", "Invalid webhook timestamp"));
80
- const namespace = optionalTemporal();
81
- if (namespace === void 0) return err(temporalMissing());
82
- const now = (options.now?.() ?? namespace.Now.instant()).epochMilliseconds / 1e3;
83
- const tolerance = options.tolerance ?? 300;
84
- if (seconds < now - tolerance) return err(unauthorized("WEBHOOK_TIMESTAMP_TOO_OLD", "Webhook timestamp is too old"));
85
- if (seconds > now + tolerance) return err(unauthorized("WEBHOOK_TIMESTAMP_TOO_NEW", "Webhook timestamp is in the future"));
86
- const body = input instanceof Request ? await input.text() : input.body;
87
- const content = encoder.encode(`${id}.${timestamp}.${body}`);
88
- const offered = signatures.split(" ").map((entry) => entry.split(",")).filter(([version, value]) => version === "v1" && value).flatMap(([, value]) => decodeSignature(value) ?? []);
89
- let valid = false;
90
- for (const secret of typeof secrets === "string" ? [secrets] : secrets) {
91
- const key = await keyFor(secret);
92
- for (const candidate of offered) if (await crypto.subtle.verify("HMAC", key, candidate, content)) valid = true;
93
- }
94
- if (!valid) return err(unauthorized("WEBHOOK_INVALID_SIGNATURE", "Invalid webhook signature"));
95
- try {
96
- return ok({
97
- id,
98
- timestamp: namespace.Instant.fromEpochMilliseconds(seconds * 1e3),
99
- payload: JSON.parse(body),
100
- body
101
- });
102
- } catch {
103
- return err(dbError("invalid_request", "Webhook body is not JSON"));
104
- }
105
- }
106
- /** Checks a shared-secret header (database webhooks), in constant time. */
107
- function verifySharedSecret(request, secret, headerName = "authorization") {
108
- return timingSafeEqual((request.headers.get(headerName) ?? "").replace(/^Bearer\s+/i, ""), secret);
109
- }
110
- const toHex = (bytes) => Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join("");
111
- /** Stripe signs with the endpoint secret's UTF-8 bytes, not its base64 decoding. */
112
- async function stripeSignature(secret, content) {
113
- const key = await crypto.subtle.importKey("raw", encoder.encode(secret), {
114
- name: "HMAC",
115
- hash: "SHA-256"
116
- }, false, ["sign"]);
117
- return toHex(new Uint8Array(await crypto.subtle.sign("HMAC", key, encoder.encode(content))));
118
- }
119
- /** The `Stripe-Signature` header for `body`, for tests and local replays. */
120
- async function signStripeWebhook(secret, body, timestamp = nowInstant()) {
121
- const seconds = String(Math.floor(timestamp.epochMilliseconds / 1e3));
122
- return `t=${seconds},v1=${await stripeSignature(secret, `${seconds}.${body}`)}`;
123
- }
124
- /**
125
- * Verifies a `Stripe-Signature` header (`t=…,v1=…`) with the endpoint's
126
- * `whsec_…` secret and parses the event. Pass several secrets while rolling
127
- * the endpoint secret. Runs on WebCrypto, so it needs no `stripe` package.
128
- */
129
- async function verifyStripeWebhook(input, secrets, options = {}) {
130
- const value = header(input.headers, "stripe-signature");
131
- if (!value) return err(unauthorized("WEBHOOK_MISSING_HEADERS", "Missing Stripe-Signature header"));
132
- const parts = value.split(",").map((part) => {
133
- const index = part.indexOf("=");
134
- return [part.slice(0, index).trim(), part.slice(index + 1).trim()];
135
- });
136
- const timestamp = parts.find(([name]) => name === "t")?.[1] ?? "";
137
- const offered = parts.filter(([name]) => name === "v1").map(([, sig]) => sig);
138
- if (!/^\d+$/.test(timestamp)) return err(unauthorized("WEBHOOK_INVALID_TIMESTAMP", "Invalid webhook timestamp"));
139
- const namespace = optionalTemporal();
140
- if (namespace === void 0) return err(temporalMissing());
141
- const seconds = Number(timestamp);
142
- const now = (options.now?.() ?? namespace.Now.instant()).epochMilliseconds / 1e3;
143
- if (Math.abs(now - seconds) > (options.tolerance ?? 300)) return err(unauthorized("WEBHOOK_TIMESTAMP_OUT_OF_RANGE", "Webhook timestamp is outside the tolerance"));
144
- const body = input instanceof Request ? await input.text() : input.body;
145
- let valid = false;
146
- for (const secret of typeof secrets === "string" ? [secrets] : secrets) {
147
- const expected = await stripeSignature(secret, `${timestamp}.${body}`);
148
- for (const candidate of offered) if (timingSafeEqual(candidate, expected)) valid = true;
149
- }
150
- if (!valid) return err(unauthorized("WEBHOOK_INVALID_SIGNATURE", "Invalid webhook signature"));
151
- let payload;
152
- try {
153
- payload = JSON.parse(body);
154
- } catch {
155
- return err(dbError("invalid_request", "Webhook body is not JSON"));
156
- }
157
- const id = typeof payload === "object" && payload !== null && "id" in payload ? String(payload.id) : "";
158
- return ok({
159
- id,
160
- timestamp: namespace.Instant.fromEpochMilliseconds(seconds * 1e3),
161
- payload,
162
- body
163
- });
164
- }
165
- /**
166
- * `createWebhookInbox({ source: 'stripe', verify: stripeInboxVerify(secret) })`:
167
- * stores Stripe events keyed by their event id.
168
- */
169
- function stripeInboxVerify(secrets, options = {}) {
170
- return async (request, body) => {
171
- const verified = await verifyStripeWebhook({
172
- headers: request.headers,
173
- body
174
- }, secrets, options);
175
- return verified.ok ? ok({
176
- id: verified.data.id,
177
- payload: verified.data.payload
178
- }) : verified;
179
- };
180
- }
181
- /** Rejects a hook with a status and message Supabase Auth passes to the client. */
182
- function hookError(status, message) {
183
- return { error: {
184
- http_code: status,
185
- message
186
- } };
187
- }
188
- /**
189
- * A `(request) => Response` handler for a Supabase Auth hook: verifies the
190
- * Standard Webhooks signature, types the payload and serializes the answer.
191
- *
192
- * ```ts
193
- * export const POST = authHook('custom_access_token', env.AUTH_HOOK_SECRET, async ({ claims, user_id }) => ({
194
- * claims: { ...claims, tenant_id: await organizationFor(user_id) },
195
- * }));
196
- * ```
197
- */
198
- function authHook(_kind, secret, handler, options) {
199
- return async (request) => {
200
- const verified = await verifyWebhook(request, secret, options);
201
- if (!verified.ok) return Response.json(hookError(verified.error.status, verified.error.message), { status: verified.error.status });
202
- try {
203
- const answer = await handler(verified.data.payload, verified.data);
204
- const status = "error" in answer ? answer.error.http_code : 200;
205
- return Response.json(answer, { status });
206
- } catch (cause) {
207
- console.error("better-supabase: auth hook failed", cause);
208
- return Response.json(hookError(500, "Hook failed"), { status: 500 });
209
- }
210
- };
211
- }
212
- function isDatabaseWebhook(value) {
213
- if (typeof value !== "object" || value === null) return false;
214
- const payload = value;
215
- return (payload["type"] === "INSERT" || payload["type"] === "UPDATE" || payload["type"] === "DELETE") && typeof payload["table"] === "string" && typeof payload["schema"] === "string";
216
- }
217
- /**
218
- * Reads a database webhook payload for `table` as an app-cased change.
219
- * Returns `null` for other tables or payloads that aren't database webhooks.
220
- */
221
- function databaseChange(betterSupabase, table, payload) {
222
- const meta = betterSupabase.meta.tables[table];
223
- if (!meta || !isDatabaseWebhook(payload) || payload.table !== meta.name || payload.schema !== meta.schema) return null;
224
- return {
225
- type: payload.type,
226
- table,
227
- record: payload.record ? toApp(meta, payload.record) : null,
228
- oldRecord: payload.old_record ? toApp(meta, payload.old_record) : null
229
- };
230
- }
231
- //#endregion
232
- export { signStripeWebhook as a, timingSafeEqual as c, verifyWebhook as d, isDatabaseWebhook as i, verifySharedSecret as l, databaseChange as n, signWebhook as o, hookError as r, stripeInboxVerify as s, authHook as t, verifyStripeWebhook as u };
@@ -1,7 +1,7 @@
1
1
  import { t as importFresh } from "./fresh-import-BeYf9I3x.js";
2
2
  import { resolve } from "node:path";
3
- import { MODULE_ID_TYPES, compileReadSets, moduleIdType, scopeProblems, templateFunctions } from "better-supabase/sql";
4
3
  import { isReadSet } from "better-supabase";
4
+ import { MODULE_ID_TYPES, compileReadSets, moduleIdType, scopeProblems, templateFunctions } from "better-supabase/sql";
5
5
  //#region src/cli/authorization.ts
6
6
  /** How findings name the provider. */
7
7
  const providerLabel = (provider) => `the authorization provider (${provider.name})`;