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.
- package/README.md +6 -2
- package/dist/{access-sql-B0dF-SoF.js → access-sql-CrSbK1q-.js} +1 -1
- package/dist/{adapter-B-tL8hqg.js → adapter-CN45ibbV.js} +663 -157
- package/dist/{agents-CVHGd7It.d.ts → agents-BY_LQXtQ.d.ts} +4 -4
- package/dist/{ai-cache-CBWs1W0k.js → ai-cache-Dfgk8nBT.js} +2 -1
- package/dist/{ai-cache-DaDu_G5L.d.ts → ai-cache-DrUMMgp6.d.ts} +4 -4
- package/dist/{ai-chat-B24UI962.js → ai-chat-CVLRWbtS.js} +4 -3
- package/dist/{ai-chat-7amvXjmQ.d.ts → ai-chat-DXkMy74O.d.ts} +5 -5
- package/dist/{ai-files-CSPNswUY.js → ai-files-CioLu5du.js} +5 -4
- package/dist/ai-message-DfaP8sis.js +14 -0
- package/dist/ai-sdk/agents/index.d.ts +4 -4
- package/dist/ai-sdk/batches/index.d.ts +4 -4
- package/dist/ai-sdk/batches/index.js +4 -4
- package/dist/ai-sdk/cache/index.d.ts +2 -2
- package/dist/ai-sdk/cache/index.js +2 -2
- package/dist/ai-sdk/chat/index.d.ts +1 -1
- package/dist/ai-sdk/chat/index.js +8 -20
- package/dist/ai-sdk/embeddings/index.d.ts +2 -2
- package/dist/ai-sdk/files/index.d.ts +3 -3
- package/dist/ai-sdk/files/index.js +4 -4
- package/dist/ai-sdk/index.d.ts +37 -9
- package/dist/ai-sdk/index.js +3 -2
- package/dist/ai-sdk/mcp/index.d.ts +43 -6
- package/dist/ai-sdk/mcp/index.js +36 -7
- package/dist/ai-sdk/memory/index.d.ts +2 -2
- package/dist/ai-sdk/memory/index.js +1 -1
- package/dist/ai-sdk/workflow/index.d.ts +6 -6
- package/dist/ai-sdk/workflow/index.js +13 -24
- package/dist/{ai-tasks-Cd1HMFvB.d.ts → ai-tasks-BRQ6iQLc.d.ts} +4 -4
- package/dist/{announcements-ZRGnScWI.d.ts → announcements-Bouy0Ski.d.ts} +3 -3
- package/dist/{announcements-CiyOs-xP.js → announcements-p_BFofiR.js} +1 -1
- package/dist/api-Dnf2q-Ht.d.ts +370 -0
- package/dist/api-DtHFC037.js +676 -0
- package/dist/{api-keys-CIjghYjV.d.ts → api-keys-C8BlF3L2.d.ts} +4 -4
- package/dist/arazzo/index.d.ts +255 -0
- package/dist/arazzo/index.js +622 -0
- package/dist/{assistant-DwdpDH1q.d.ts → assistant-DBlFDZsi.d.ts} +5 -5
- package/dist/astro/index.d.ts +7 -7
- package/dist/astro/index.js +7 -7
- package/dist/asyncapi/index.d.ts +103 -0
- package/dist/asyncapi/index.js +569 -0
- package/dist/authorizer-ayxUDXXP.js +126 -0
- package/dist/authorizer-eiOjo-3l.d.ts +73 -0
- package/dist/better-result/index.d.ts +118 -0
- package/dist/better-result/index.js +64 -0
- package/dist/{bind-l4kAvYSv.js → bind-ButSzrHe.js} +1 -1
- package/dist/{bind-Bu_ZNa3W.d.ts → bind-CQ5mPyX1.d.ts} +3 -3
- package/dist/{block-events-CrT8r7Fe.js → block-events-DTxU5tfr.js} +18 -3
- package/dist/{block-fields-GFkxl4dP.js → block-fields-CroxUuF2.js} +3 -3
- package/dist/{block-fields-SJ6fEf3o.d.ts → block-fields-D1pfrcIY.d.ts} +2 -2
- package/dist/{block-helpers-CKtbFcRv.d.ts → block-helpers-C0Xj8War.d.ts} +2 -2
- package/dist/{block-helpers-DWHxHsEQ.js → block-helpers-Cy3pB96I.js} +41 -9
- package/dist/{block-hooks-BmjMyXTa.js → block-hooks-BPNMIlLl.js} +3 -3
- package/dist/{block-hooks-plbZ0AbJ.d.ts → block-hooks-DaOVC7SC.d.ts} +3 -3
- package/dist/{block-transport-BLr-ZgLc.js → block-transport-bAKh-dGc.js} +28 -2
- package/dist/{block-transport-DvaoPuZ9.d.ts → block-transport-inD4fFq-.d.ts} +24 -2
- package/dist/blocks/agents/index.d.ts +3 -3
- package/dist/blocks/agents/index.js +5 -4
- package/dist/blocks/ai-cache/index.d.ts +3 -3
- package/dist/blocks/ai-cache/index.js +3 -3
- package/dist/blocks/ai-chat/index.d.ts +9 -4
- package/dist/blocks/ai-chat/index.js +5 -5
- package/dist/blocks/ai-chat/react/index.d.ts +3 -3
- package/dist/blocks/ai-chat/react/index.js +5 -5
- package/dist/blocks/ai-files/index.d.ts +3 -3
- package/dist/blocks/ai-files/index.js +3 -3
- package/dist/blocks/ai-providers/index.d.ts +3 -3
- package/dist/blocks/ai-providers/index.js +8 -7
- package/dist/blocks/ai-tasks/index.d.ts +3 -3
- package/dist/blocks/ai-tasks/index.js +7 -6
- package/dist/blocks/announcements/index.d.ts +3 -3
- package/dist/blocks/announcements/index.js +3 -3
- package/dist/blocks/announcements/react/index.d.ts +3 -3
- package/dist/blocks/announcements/react/index.js +3 -3
- package/dist/blocks/api-keys/index.d.ts +5 -5
- package/dist/blocks/api-keys/index.js +8 -8
- package/dist/blocks/attachments/index.d.ts +12 -8
- package/dist/blocks/attachments/index.js +22 -13
- package/dist/blocks/audit/index.d.ts +21 -10
- package/dist/blocks/audit/index.js +30 -11
- package/dist/blocks/billing/index.d.ts +11 -9
- package/dist/blocks/billing/index.js +15 -15
- package/dist/blocks/comments/index.d.ts +8 -8
- package/dist/blocks/comments/index.js +8 -7
- package/dist/blocks/connectors/index.d.ts +3 -3
- package/dist/blocks/connectors/index.js +7 -6
- package/dist/blocks/data-lifecycle/index.d.ts +12 -8
- package/dist/blocks/data-lifecycle/index.js +13 -8
- package/dist/blocks/entitlements/index.d.ts +3 -3
- package/dist/blocks/entitlements/index.js +1 -1
- package/dist/blocks/flags/index.d.ts +4 -4
- package/dist/blocks/flags/index.js +4 -3
- package/dist/blocks/inbox/index.d.ts +3 -3
- package/dist/blocks/inbox/index.js +4 -5
- package/dist/blocks/inbox/react/index.d.ts +1 -1
- package/dist/blocks/inbox/react/index.js +1 -1
- package/dist/blocks/inbox/react/server.d.ts +1 -1
- package/dist/blocks/index.d.ts +10 -10
- package/dist/blocks/index.js +6 -6
- package/dist/blocks/jobs/index.d.ts +48 -32
- package/dist/blocks/jobs/index.js +44 -287
- package/dist/blocks/knowledge/index.d.ts +3 -3
- package/dist/blocks/knowledge/index.js +3 -3
- package/dist/blocks/memory/index.d.ts +4 -4
- package/dist/blocks/memory/index.js +7 -6
- package/dist/blocks/notifications/index.d.ts +11 -9
- package/dist/blocks/notifications/index.js +20 -25
- package/dist/blocks/notifications/react/index.d.ts +1 -1
- package/dist/blocks/notifications/react/index.js +1 -1
- package/dist/blocks/onboarding/index.d.ts +3 -3
- package/dist/blocks/onboarding/index.js +3 -3
- package/dist/blocks/onboarding/react/index.d.ts +2 -2
- package/dist/blocks/onboarding/react/index.js +2 -2
- package/dist/blocks/onboarding/react/server.d.ts +1 -1
- package/dist/blocks/organizations/index.d.ts +9 -9
- package/dist/blocks/organizations/index.js +11 -18
- package/dist/blocks/outbox/index.d.ts +2 -2
- package/dist/blocks/outbox/index.js +16 -25
- package/dist/blocks/profiles/index.d.ts +7 -7
- package/dist/blocks/profiles/index.js +7 -6
- package/dist/blocks/push/index.d.ts +4 -4
- package/dist/blocks/push/index.js +3 -3
- package/dist/blocks/settings/index.d.ts +4 -4
- package/dist/blocks/settings/index.js +7 -6
- package/dist/blocks/sso/index.d.ts +5 -5
- package/dist/blocks/sso/index.js +6 -5
- package/dist/blocks/usage/index.d.ts +3 -3
- package/dist/blocks/usage/index.js +5 -4
- package/dist/blocks/waitlist/index.d.ts +5 -5
- package/dist/blocks/waitlist/index.js +5 -4
- package/dist/blocks/webhooks/index.d.ts +22 -13
- package/dist/blocks/webhooks/index.js +41 -70
- package/dist/blocks/workflow-builder/index.d.ts +4 -4
- package/dist/blocks/workflow-builder/index.js +3 -3
- package/dist/blocks/workflow-builder/react/index.d.ts +4 -4
- package/dist/blocks/workflow-builder/react/index.js +4 -4
- package/dist/blocks/workflows/index.d.ts +3 -3
- package/dist/blocks/workflows/index.js +3 -3
- package/dist/blocks/workflows/react/index.d.ts +3 -3
- package/dist/blocks/workflows/react/index.js +3 -3
- package/dist/build-hPwk3_X5.js +1296 -0
- package/dist/{build-BXIzE6Xv.js → build-meLuYGri.js} +3 -3
- package/dist/casing-DdFWEtqr.js +16 -0
- package/dist/chat-sdk/index.d.ts +6 -6
- package/dist/chat-sdk/index.js +5 -4
- package/dist/chat-sdk/react/index.d.ts +1 -1
- package/dist/chat-sdk/react/server.d.ts +1 -1
- package/dist/{claims-DDBQT6BK.js → claims-0KZVT804.js} +1 -1
- package/dist/cli/add-1dc5wM5k.js +69 -0
- package/dist/cli/arazzo-1.0-BalU61-_.js +532 -0
- package/dist/cli/arazzo-1.1-Bnfasbun.js +705 -0
- package/dist/cli/asyncapi-3.0.0-C78dBjR6.js +5593 -0
- package/dist/cli/asyncapi-3.1.0-g-7aIfV1.js +5833 -0
- package/dist/cli/bin.js +4 -4
- package/dist/cli/cache-CIfA-jBV.js +483 -0
- package/dist/cli/{codemod-Bl_tQpHn.js → codemod-JVlTQQG2.js} +4 -4
- package/dist/cli/{command-CK14fP91.js → command-DV-StG1x.js} +5 -0
- package/dist/cli/{config-DU7EJImt.js → config-C2Pz2_4A.js} +7 -4
- package/dist/cli/config-DpbF8ML3.js +2 -0
- package/dist/cli/{config-NiPxAmUF.js → config-M-WzL9O2.js} +116 -18
- package/dist/cli/{db-DOBPt660.js → db-BkcfOlyB.js} +2 -1
- package/dist/cli/{diff-SjkO5rNr.js → diff-D1jGdb3Y.js} +1 -1
- package/dist/cli/{doctor-CVdnLahA.js → doctor-VcDtuusV.js} +317 -222
- package/dist/cli/emit-BHHfwUoT.js +1136 -0
- package/dist/cli/{env-qXgyMV6r.js → env-B--LMhEe.js} +13 -10
- package/dist/cli/env-vzBG90Um.js +2 -0
- package/dist/cli/{env-CJLbUVPB.js → env-zHJtMIBo.js} +11 -3
- package/dist/cli/{errors-4v4DTtda.js → errors-CqTLXe2M.js} +18 -2
- package/dist/cli/{fastest-levenshtein-CFN-lNDv.js → fastest-levenshtein-CF7BCi9l.js} +1 -1
- package/dist/cli/files-BVupXPIC.js +34 -0
- package/dist/cli/gen-DmVj3u4L.js +322 -0
- package/dist/cli/{init-Cr6arjXU.js → glue-C1UE8gQN.js} +16 -313
- package/dist/cli/index.d.ts +59 -31
- package/dist/cli/index.js +8 -6
- package/dist/cli/init-CVZ3s5kl.js +258 -0
- package/dist/cli/{introspect-Bzuv1HHj.js → introspect-BToGNfm-.js} +14 -14
- package/dist/cli/{io-DI1mTdSA.js → io-CFzJVJ68.js} +5 -1
- package/dist/cli/{keys-BGCnnb-s.js → keys-CJhtIxJ3.js} +4 -4
- package/dist/cli/metadata-DSRKCaf-.js +133 -0
- package/dist/cli/names-D6LrQnOv.js +6 -0
- package/dist/cli/openapi-3.0-t7xwkuRH.js +928 -0
- package/dist/cli/openapi-3.1-CVze7tBS.js +870 -0
- package/dist/cli/openapi-3.2-CFoMYM01.js +1031 -0
- package/dist/cli/{openapi-BlRJ18s3.js → openapi-DWa4Ir1q.js} +8 -14
- package/dist/cli/prompts-BdeVmVpg.js +2 -0
- package/dist/cli/{prompts-BNcNfAve.js → prompts-DZJB1nTw.js} +6 -6
- package/dist/cli/{rolldown-runtime-BPOCksWG.js → rolldown-runtime-CMFfr-1z.js} +3 -1
- package/dist/cli/run-DA6_lg3w.js +389 -0
- package/dist/cli/run-DuN1MX-7.js +705 -0
- package/dist/cli/scaffold-5DenHSxF.js +292 -0
- package/dist/cli/scaffold-CwQUMFRb.js +2 -0
- package/dist/cli/{seed-DQzqT7LP.js → seed-CzBmrGON.js} +14 -18
- package/dist/cli/seed-DOmit9Hq.js +2 -0
- package/dist/cli/{skills-QQs4q68J.js → skills-CnO8QFS7.js} +7 -6
- package/dist/cli/snapshot-Bstk6ulj.js +287 -0
- package/dist/cli/source-args-BYfq6imV.js +31 -0
- package/dist/cli/spec-CzosTYm3.js +7438 -0
- package/dist/cli/spec-T_0Bcyw7.js +2 -0
- package/dist/cli/{sql-B8csQPyn.js → sql-BKOOQAX3.js} +240 -218
- package/dist/cli/sql-DJrNDxQm.js +3 -0
- package/dist/cli/{style-C0NFdJRL.js → style-CB3vxgh0.js} +3 -3
- package/dist/cli/typegen-Demi5-VQ.js +486 -0
- package/dist/cli/validate-Ca13ktgz.js +7522 -0
- package/dist/cli/{version-Bp4fyubI.js → version-B4k0aUxS.js} +1 -1
- package/dist/client/index.d.ts +4 -3
- package/dist/client/index.js +60 -3
- package/dist/client/native/index.d.ts +3 -3
- package/dist/client/native/index.js +3 -3
- package/dist/{client-CI0Z2zWX.js → client-wxeTQFtB.js} +36 -3
- package/dist/{clone-BfgmLU90.js → clone-dN9XOL1K.js} +9 -1
- package/dist/{cloud-event-BnmD5fb9.js → cloud-event-CTh9Sr5w.js} +16 -2
- package/dist/{cloud-event-C1JCc1bH.d.ts → cloud-event-Dune0KI7.d.ts} +16 -2
- package/dist/{compiler-DY_wkj4R.d.ts → compiler-V1qvcST1.d.ts} +2 -2
- package/dist/{compose-BIBNgAnq.js → compose-BHej1acw.js} +3 -3
- package/dist/{composite-CpHLEo-G.d.ts → composite-CWAJTRBF.d.ts} +6 -6
- package/dist/{composite-C6I8ZyaF.js → composite-zTe0TCqj.js} +4 -4
- package/dist/config/index.d.ts +3 -4
- package/dist/config/index.js +4 -4
- package/dist/config-DlKvtt95.js +540 -0
- package/dist/{connector-Dv8kK0MO.d.ts → connector-CySQEFcW.d.ts} +1 -1
- package/dist/{connectors-CrpknU0P.d.ts → connectors--PGhmiu0.d.ts} +4 -4
- package/dist/{context-BCrWe7ow.d.ts → context-DsV2SueA.d.ts} +11 -2
- package/dist/context-nPDvQ-Zl.js +41 -0
- package/dist/credentials/index.d.ts +5 -5
- package/dist/credentials/index.js +9 -17
- package/dist/{cron-DVPUg5k3.js → cron-D25Ukpxy.js} +1 -1
- package/dist/cron-route-D2AN9SA1.js +24 -0
- package/dist/{csv-DCK-PT1n.js → csv-BZnHA1Py.js} +1 -1
- package/dist/{define-B-TVjC25.js → define-CFQcvM20.js} +263 -229
- package/dist/{define-CJJkkr1-.d.ts → define-DmcfoNXB.d.ts} +136 -111
- package/dist/edge/index.d.ts +66 -13
- package/dist/edge/index.js +65 -39
- package/dist/elysia/index.d.ts +1 -1
- package/dist/elysia/index.js +1 -1
- package/dist/{embeddings-C9KGQnXt.d.ts → embeddings-B4vhS-dY.d.ts} +1 -1
- package/dist/{ended-XjeGQ5XW.d.ts → ended-CcvcRqEd.d.ts} +7 -1
- package/dist/{entitlements-DRl6ZJUm.js → entitlements-BYFf0Cdh.js} +2 -2
- package/dist/{entitlements-BKSVGtrG.d.ts → entitlements-Ds8qoYZ-.d.ts} +1 -1
- package/dist/env/index.d.ts +1 -1
- package/dist/env/index.js +9 -2
- package/dist/{errors-B11Duf73.js → errors-2M6CKMP4.js} +5 -0
- package/dist/{errors-DLjJHPLK.js → errors-rZ7VIqp6.js} +2 -2
- package/dist/{escape-like-ImTK0ps_.d.ts → escape-like-DDWoHzh_.d.ts} +1 -1
- package/dist/eve/index.d.ts +5 -5
- package/dist/eve/index.js +5 -11
- package/dist/{eve-gT2Fpjut.d.ts → eve-CoAIcCkq.d.ts} +2 -2
- package/dist/events/index.d.ts +4 -4
- package/dist/events/index.js +7 -2
- package/dist/{events-DWDhx77e.d.ts → events-D1BOCll8.d.ts} +6 -4
- package/dist/{executor-Bq28caBo.js → executor-B-fD7DLt.js} +52 -35
- package/dist/executor-B_Hfobee.js +162 -0
- package/dist/{executor-BVBFM86G.d.ts → executor-CpxLPCiz.d.ts} +1 -1
- package/dist/{executor-CaWigTyR.d.ts → executor-DfEtf0cq.d.ts} +43 -27
- package/dist/{executor-DvsBbNBS.d.ts → executor-Drzu3dBK.d.ts} +2 -2
- package/dist/{executor-DbvExCFC.d.ts → executor-ngjKL_Pe.d.ts} +2 -2
- package/dist/expo/index.d.ts +4 -4
- package/dist/expo/index.js +6 -6
- package/dist/expo-sqlite/index.d.ts +3 -3
- package/dist/expo-sqlite/index.js +2 -2
- package/dist/extra-CGQ2_q3S.js +10 -0
- package/dist/{field-errors-BFOa7WhB.d.ts → field-errors-DIe9XYWL.d.ts} +17 -7
- package/dist/{field-errors-VF1yb8yI.js → field-errors-DZVRWRkf.js} +1 -1
- package/dist/format-DTXdu8ya.d.ts +70 -0
- package/dist/{framework-KIPvRQJU.d.ts → framework-148t1m3C.d.ts} +5 -5
- package/dist/{framework-BDCpJI7o.js → framework-3ey3QmrO.js} +2 -2
- package/dist/function-contract-BcZenXMO.d.ts +8 -0
- package/dist/{gateway-C1ssRHnf.d.ts → gateway-S9vicgeo.d.ts} +4 -4
- package/dist/{guards-BnzDvFrz.js → guards-6F2bCtQR.js} +3 -1
- package/dist/h3/index.d.ts +1 -1
- package/dist/h3/index.js +1 -1
- package/dist/h3/v1/index.d.ts +1 -1
- package/dist/h3/v1/index.js +1 -1
- package/dist/{message-CaKlqdsX.js → history-GH1HJWQV.js} +65 -13
- package/dist/hmac-DCud0myt.js +22 -0
- package/dist/hono/index.d.ts +19 -14
- package/dist/hono/index.js +21 -16
- package/dist/{hooks-1BTCJsiw.js → hooks-Bhza9Hnr.js} +68 -100
- package/dist/http-sbmBe5d2.js +25 -0
- package/dist/{inbox-i7E1ppo6.d.ts → inbox-Cd1KCEBL.d.ts} +3 -3
- package/dist/index-B72Rvv_j.d.ts +89 -0
- package/dist/{index-DunNRdnT.d.ts → index-BCHR4Ucl.d.ts} +4 -4
- package/dist/{index-CLg87OBW.d.ts → index-BUK7jUzR.d.ts} +6 -0
- package/dist/{config-D44Y7PAv.d.ts → index-Ba1SI-uO.d.ts} +625 -278
- package/dist/{index-D48jVS-N.d.ts → index-BfxOaOYs.d.ts} +4 -5
- package/dist/{index-ClmjK_o-.d.ts → index-CicIyqOe.d.ts} +4 -4
- package/dist/{index-ACiNPN4Z.d.ts → index-D69h4QqD.d.ts} +1 -1
- package/dist/index-DG2SUXDQ.d.ts +58 -0
- package/dist/{index-Bepi-Hgg.d.ts → index-DoNVLHOU.d.ts} +3 -3
- package/dist/{index-CdZKQF98.d.ts → index-R274XFlg.d.ts} +1 -1
- package/dist/{index-CewnYSpv.d.ts → index-_4R4b01v.d.ts} +8 -18
- package/dist/index.d.ts +89 -14
- package/dist/index.js +12 -11
- package/dist/{json-schema-CvER4kgT.js → json-schema-CT4tvrkA.js} +148 -102
- package/dist/{kit-Fm-Fv7q5.js → kit-BhHr9T9v.js} +36 -10
- package/dist/{kit-CkNzZUqv.d.ts → kit-W99LCPBS.d.ts} +13 -7
- package/dist/{knowledge-BXBbT0Tr.d.ts → knowledge-CAReFpRA.d.ts} +5 -5
- package/dist/{knowledge-CDmiMLew.js → knowledge-DnHtb64A.js} +4 -3
- package/dist/list/index.d.ts +1 -2
- package/dist/{list-query-BRt-zDF7.d.ts → list-query-D3JQeEL7.d.ts} +4 -4
- package/dist/mcp/index.d.ts +49 -19
- package/dist/mcp/index.js +158 -94
- package/dist/mcp/sdk/index.d.ts +38 -6
- package/dist/mcp/sdk/index.js +88 -6
- package/dist/{message-CfDoR0Y6.d.ts → message-B0fNJgq8.d.ts} +1 -2
- package/dist/{messages-B9-5887d.js → messages-CJoHHCWT.js} +4 -205
- package/dist/{mfa-Daak8ukG.d.ts → mfa-SZc9YYyb.d.ts} +1 -1
- package/dist/model-OgBxvk3N.d.ts +300 -0
- package/dist/model-messages-Cxw_Up4f.js +206 -0
- package/dist/model-messages-D4GZllOD.d.ts +34 -0
- package/dist/modules-DksjZyMW.js +77 -0
- package/dist/nestjs/index.d.ts +2 -2
- package/dist/nestjs/index.js +1 -1
- package/dist/next/index.d.ts +105 -55
- package/dist/next/index.js +204 -170
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +1 -1
- package/dist/{onboarding-BZGHYJks.d.ts → onboarding-LZvlK1P4.d.ts} +3 -3
- package/dist/openapi/index.d.ts +4 -2
- package/dist/openapi/index.js +21 -343
- package/dist/optional-peer-D1pi-skw.js +24 -0
- package/dist/orpc/index.d.ts +8 -8
- package/dist/orpc/index.js +21 -20
- package/dist/otel/index.d.ts +3 -3
- package/dist/otel/index.js +7 -7
- package/dist/{outbox-Cq7pPYvl.d.ts → outbox-DZfAvfzC.d.ts} +6 -6
- package/dist/overlay/index.d.ts +233 -0
- package/dist/overlay/index.js +554 -0
- package/dist/{plugin-FGY8UhYm.d.ts → plugin-CPK2HsbY.d.ts} +42 -3
- package/dist/plugins/actor/index.d.ts +1 -1
- package/dist/plugins/actor/index.js +1 -1
- package/dist/plugins/rules/index.d.ts +2 -2
- package/dist/plugins/rules/index.js +1 -1
- package/dist/plugins/soft-delete/index.d.ts +3 -3
- package/dist/plugins/soft-delete/index.js +9 -2
- package/dist/plugins/tenant/index.d.ts +7 -2
- package/dist/plugins/tenant/index.js +16 -2
- package/dist/plugins/timestamps/index.d.ts +1 -1
- package/dist/plugins/timestamps/index.js +8 -1
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +4 -4
- package/dist/{pool-CAu2nLrL.d.ts → pool-gkhbGp2E.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +2 -1
- package/dist/{postgrest-BLVdEnfe.d.ts → postgrest-BUqLag2Q.d.ts} +1 -1
- package/dist/powersync/index.d.ts +5 -5
- package/dist/powersync/index.js +4 -4
- package/dist/powersync/react/index.d.ts +3 -3
- package/dist/powersync/react/index.js +1 -1
- package/dist/{problem-BreOl8b8.js → problem-CJvFeGu7.js} +13 -2
- package/dist/{problem-DD8LZFjc.d.ts → problem-TvGdxO1t.d.ts} +7 -1
- package/dist/{provider-Di3sRutW.js → provider-DxRTex4x.js} +1 -1
- package/dist/{provider-D-UEMvSD.d.ts → provider-ib9wzUDz.d.ts} +2 -2
- package/dist/query/index.d.ts +2 -2
- package/dist/query/index.js +1 -1
- package/dist/{query-BQ-NaZon.js → query-Ctz-qKRx.js} +1 -1
- package/dist/rate-limit-Bw7HgmFj.js +260 -0
- package/dist/react/index.d.ts +9 -9
- package/dist/react/index.js +4 -4
- package/dist/react/native/index.d.ts +1 -1
- package/dist/react/native/index.js +2 -2
- package/dist/react/server.d.ts +10 -10
- package/dist/react/server.js +3 -3
- package/dist/react/session.d.ts +2 -2
- package/dist/{react-F80mF4-t.js → react-Bmpo59D7.js} +4 -4
- package/dist/react-router/index.d.ts +6 -6
- package/dist/react-router/index.js +9 -11
- package/dist/{read-set-DuKWC9Mj.js → read-set-DAeWhqPf.js} +2 -2
- package/dist/realtime/index.d.ts +3 -3
- package/dist/realtime/index.js +30 -36
- package/dist/{refusal-DhSU2Vvr.d.ts → refusal-CFI8-5nf.d.ts} +4 -1
- package/dist/{refusal-CeJWxmkH.js → refusal-K78A1Vmq.js} +5 -5
- package/dist/{resolve-tJZY3FEa.js → resolve-Bvgf3ut_.js} +131 -42
- package/dist/{resolve-ChTYeTEl.d.ts → resolve-MxXVWyhd.d.ts} +12 -8
- package/dist/resource--vTrBe6I.d.ts +103 -0
- package/dist/resource-BqNqlYg9.js +91 -0
- package/dist/resource-DA811u_4.js +463 -0
- package/dist/resource-execute-rbKvuCsY.d.ts +12 -0
- package/dist/resource-schemas-BJ518zFH.js +79 -0
- package/dist/resource-types-CqB6GWGT.d.ts +141 -0
- package/dist/resources-BVYPnuLo.js +56 -0
- package/dist/resources-DZSk8tXJ.d.ts +7 -0
- package/dist/{respond-DprrgyXX.d.ts → respond-Cw-zanCm.d.ts} +3 -3
- package/dist/{respond-BUgsXNgk.js → respond-volM3ByS.js} +4 -4
- package/dist/{result-D7y2fT87.d.ts → result-BchM1XZn.d.ts} +7 -1
- package/dist/{result-DzUbqgdW.js → result-DEqHCMKP.js} +1 -1
- package/dist/server/index.d.ts +81 -19
- package/dist/server/index.js +16 -14
- package/dist/{server-ZSJ9rCcV.d.ts → server-types-CrAmZ8jv.d.ts} +110 -36
- package/dist/{shared-CxWmcyqB.js → shared-DHjhfRdV.js} +2 -15
- package/dist/shared-DTneRoxi.js +14 -0
- package/dist/{sign-in-Cb1mwv6X.js → sign-in-D_yoP0PF.js} +1 -1
- package/dist/signatures-BRS_p3WD.d.ts +34 -0
- package/dist/signatures-DsWv_bYR.js +103 -0
- package/dist/{signers-4y62_VIi.d.ts → signers-cpdmZYrv.d.ts} +1 -1
- package/dist/solid/index.d.ts +9 -18
- package/dist/solid/index.js +2 -2
- package/dist/solid-start/index.d.ts +6 -6
- package/dist/solid-start/index.js +7 -7
- package/dist/spec/index.d.ts +134 -0
- package/dist/spec/index.js +353 -0
- package/dist/{spec-pins-C89s6DyW.d.ts → spec-pins-CwzDY25w.d.ts} +18 -1
- package/dist/{spec-pins--j6mTok4.js → spec-pins-DsLfUH7l.js} +14 -1
- package/dist/sql/index.d.ts +145 -119
- package/dist/sql/index.js +19921 -19798
- package/dist/{executor-De1Of3m3.js → sql-CwuqaQ4Y.js} +34 -169
- package/dist/ssr/index.d.ts +4 -4
- package/dist/ssr/index.js +3 -2
- package/dist/{standard-BK0cqJ7y.js → standard-DkzZUneg.js} +2 -2
- package/dist/{standard-CYsm7xpT.d.ts → standard-lmkbOtPB.d.ts} +1 -1
- package/dist/{stats-D_AD9GGu.js → stats-DhU78Ctf.js} +8 -4
- package/dist/storage/index.d.ts +4 -6
- package/dist/storage/index.js +16 -17
- package/dist/{bucket-Cl46E3jS.d.ts → storage-api-CB7Zl1Ci.d.ts} +243 -8
- package/dist/{store-CGjgWu5n.d.ts → store-DsIYEBnv.d.ts} +1 -1
- package/dist/streams/index.d.ts +4 -4
- package/dist/streams/index.js +5 -4
- package/dist/streams/redis/index.d.ts +1 -1
- package/dist/streams/redis/index.js +5 -11
- package/dist/{stripe-BMj5LtsT.js → stripe-v-Y2lmop.js} +2 -8
- package/dist/supabase-mcp-C6tMoEjn.d.ts +43 -0
- package/dist/supabase-mcp-Cpn5A4i-.js +28 -0
- package/dist/{support-DWwzVf-O.js → support-D1pFFouF.js} +71 -35
- package/dist/{support-view-CVOJJLpc.d.ts → support-view-scqMgtOo.d.ts} +1 -1
- package/dist/svelte/index.d.ts +8 -17
- package/dist/svelte/index.js +2 -2
- package/dist/sveltekit/index.d.ts +7 -7
- package/dist/sveltekit/index.js +10 -12
- package/dist/table-schema-htM_SbCW.js +286 -0
- package/dist/{tags-Cx-LnIQP.d.ts → tags-BO9LjtWG.d.ts} +1 -1
- package/dist/tanstack-db/index.d.ts +2 -2
- package/dist/tanstack-db/supabase/index.d.ts +52 -0
- package/dist/tanstack-db/supabase/index.js +97 -0
- package/dist/tanstack-start/index.d.ts +6 -6
- package/dist/tanstack-start/index.js +8 -12
- package/dist/{tee-CoEppCER.js → tee-Cb98Vn3b.js} +1 -1
- package/dist/{template--jDkl3UP.js → template-lPVh-EwW.js} +11 -2
- package/dist/{temporal-required-BVvW7SYJ.js → temporal-required-BtynQtM-.js} +1 -1
- package/dist/{tenant-BxNFk9bx.d.ts → tenant-CM368LXb.d.ts} +2 -2
- package/dist/testing/index.d.ts +249 -118
- package/dist/testing/index.js +1418 -870
- package/dist/ttl-cache-XzZ-Q2eX.js +29 -0
- package/dist/types-BRTSpOIh.js +5 -0
- package/dist/{types-C05bxW-W.d.ts → types-Bb_4-vdW.d.ts} +4 -4
- package/dist/{types-AYOvcyep.d.ts → types-CD6yCDx3.d.ts} +5 -5
- package/dist/{types-6rocye-y.d.ts → types-CbOUc5IH.d.ts} +4 -4
- package/dist/{types-6BdhkmZe.d.ts → types-CoE5Zwy4.d.ts} +8 -0
- package/dist/{types-DGs5L0VN.d.ts → types-DSJ3-m9X.d.ts} +4 -4
- package/dist/{queue-CLJurhdy.d.ts → types-D__3EN0q.d.ts} +17 -19
- package/dist/{usage-CrvrL2vw.d.ts → usage-D0NNUFfr.d.ts} +3 -3
- package/dist/{vault-wlbBhqm7.d.ts → vault-BpmApxxW.d.ts} +3 -3
- package/dist/vercel-connect/index.d.ts +1 -1
- package/dist/vercel-connect/index.js +5 -11
- package/dist/{verify-DPuWngD4.d.ts → verify-C91Wyp40.d.ts} +5 -35
- package/dist/verify-CJbYfADA.js +124 -0
- package/dist/{version--AolB5ej.js → version-Cq8gfDbd.js} +1 -1
- package/dist/{view-BeFcRV6G.js → view-D5ryq3gz.js} +1 -1
- package/dist/{view-CF7ihnkg.d.ts → view-TpXEUcVN.d.ts} +3 -3
- package/dist/vue/index.d.ts +9 -18
- package/dist/vue/index.js +2 -2
- package/dist/{watch-Xuxrvxq-.js → watch-BcvtAHOd.js} +2 -2
- package/dist/{watch-DI34G86j.d.ts → watch-COzRWvVN.d.ts} +23 -9
- package/dist/{wire-DtZQ4sdE.js → wire-Df3EWkG8.js} +2 -2
- package/dist/{workflow-builder-DJ1oHn8g.js → workflow-builder-CHqHpAVt.js} +6 -5
- package/dist/workflow-sdk/builder/index.d.ts +3 -3
- package/dist/workflow-sdk/index.d.ts +1 -1
- package/dist/workflow-sdk/world/index.d.ts +23 -17
- package/dist/workflow-sdk/world/index.js +59 -76
- package/dist/{workflow-sdk-B3yLD6Br.d.ts → workflow-sdk-DTZyrvNo.d.ts} +3 -3
- package/dist/{workflow-sdk-world-D-prir6O.js → workflow-sdk-world-CMV1ahFW.js} +528 -526
- package/dist/{workflows-B0j9WKPu.d.ts → workflows-CcpCBfIe.d.ts} +3 -3
- package/dist/{workflows-wu1WWBn7.js → workflows-IvxzG2cl.js} +5 -4
- package/package.json +54 -3
- package/schemas/config-v1.json +243 -0
- package/schemas/doctor-report-v1.json +4 -1
- package/schemas/spec-manifest-v1.json +95 -0
- package/skills/better-supabase/SKILL.md +8 -4
- package/skills/better-supabase/references/troubleshooting.md +20 -20
- package/skills/better-supabase-api/references/expo.md +6 -3
- package/skills/better-supabase-api/references/powersync.md +2 -1
- package/skills/better-supabase-auth/SKILL.md +8 -4
- package/dist/cli/config-B9HkL8nF.js +0 -2
- package/dist/cli/gen-AIf4MREI.js +0 -3100
- package/dist/cli/gen-DSrahEdX.js +0 -2
- package/dist/cli/prompts-BTYQGunc.js +0 -2
- package/dist/cli/run-BO052mki.js +0 -361
- package/dist/config-Dn7F5k9A.js +0 -202
- package/dist/history-BZih6SFP.js +0 -64
- package/dist/index-BkWT_uBO.d.ts +0 -51
- package/dist/index-Bxih3l0u.d.ts +0 -81
- package/dist/index-CaxrMD1A.d.ts +0 -1
- package/dist/index-DQh4VCc9.d.ts +0 -98
- package/dist/keys-4MnkWTTh.js +0 -35
- package/dist/messages-DYP0sUTe.d.ts +0 -59
- package/dist/modules-dxrVK3ID.js +0 -228
- package/dist/path-Cv__-OTj.d.ts +0 -17
- package/dist/resource-BsvzCMlX.js +0 -212
- package/dist/resource-IPS5xi9q.d.ts +0 -74
- package/dist/template-CwO38Do8.d.ts +0 -6
- package/dist/verify-DL41hbvY.js +0 -232
- 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 };
|
package/dist/verify-DL41hbvY.js
DELETED
|
@@ -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})`;
|