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,10 +1,24 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { b as DbError, f as Result, t as AsyncResult } from "./result-
|
|
3
|
-
import { G as ObjectVersion, K as VersioningStatus, U as BucketLifecycle, s as BucketPolicyName, t as AccessBucketPolicy } from "./types-
|
|
4
|
-
import { m as RequestContext } from "./plugin-
|
|
5
|
-
import { n as StoragePath, t as PathIn } from "./path-Cv__-OTj.js";
|
|
6
|
-
import { n as TemplateValues, t as TemplateParams } from "./template-CwO38Do8.js";
|
|
2
|
+
import { b as DbError, f as Result, t as AsyncResult } from "./result-BchM1XZn.js";
|
|
3
|
+
import { G as ObjectVersion, K as VersioningStatus, U as BucketLifecycle, s as BucketPolicyName, t as AccessBucketPolicy } from "./types-CoE5Zwy4.js";
|
|
4
|
+
import { m as RequestContext } from "./plugin-CPK2HsbY.js";
|
|
7
5
|
import { SupabaseClient } from "@supabase/supabase-js";
|
|
6
|
+
//#region src/storage/path.d.ts
|
|
7
|
+
declare const bucketOf: unique symbol;
|
|
8
|
+
/**
|
|
9
|
+
* An object path in bucket `B`, e.g. `org-1/cust-1/logo/3.webp`. Returned by
|
|
10
|
+
* `bucket.path()` and `upload()`, and the type of columns listed in the
|
|
11
|
+
* `storagePaths` config. Store paths, not URLs: signed URLs expire and public
|
|
12
|
+
* URLs pin the project host.
|
|
13
|
+
*/
|
|
14
|
+
type StoragePath<B extends string = string> = string & {
|
|
15
|
+
readonly [bucketOf]: B;
|
|
16
|
+
};
|
|
17
|
+
/** A plain string or a `StoragePath` of bucket `B`; paths of other buckets are rejected. */
|
|
18
|
+
type PathIn<B extends string> = string & {
|
|
19
|
+
readonly [bucketOf]?: B;
|
|
20
|
+
};
|
|
21
|
+
//#endregion
|
|
8
22
|
//#region src/storage/ttl.d.ts
|
|
9
23
|
declare const TTL: {
|
|
10
24
|
readonly minute: 60;
|
|
@@ -14,6 +28,11 @@ declare const TTL: {
|
|
|
14
28
|
};
|
|
15
29
|
type TtlPreset = keyof typeof TTL;
|
|
16
30
|
//#endregion
|
|
31
|
+
//#region src/core/template.d.ts
|
|
32
|
+
/** Placeholder names in a `{name}` template; a rest placeholder `{...name}` is `name`. */
|
|
33
|
+
type TemplateParams<P extends string> = P extends `${string}{${infer K}}${infer R}` ? (K extends `...${infer N}` ? N : K) | TemplateParams<R> : never;
|
|
34
|
+
type TemplateValues<P extends string> = { readonly [K in TemplateParams<P>]: string | number; };
|
|
35
|
+
//#endregion
|
|
17
36
|
//#region src/storage/apply.d.ts
|
|
18
37
|
interface AppliedBucket {
|
|
19
38
|
/** The bucket did not exist and was created. */
|
|
@@ -203,7 +222,8 @@ interface ActualBucket {
|
|
|
203
222
|
/** `storage.buckets.lifecycle_configuration`; leave it out to skip the comparison. */
|
|
204
223
|
readonly lifecycle?: unknown;
|
|
205
224
|
}
|
|
206
|
-
|
|
225
|
+
/** A supabase-js client with the secret key: `apply()` needs the bucket admin API. */
|
|
226
|
+
type StorageAdminClient = Pick<SupabaseClient, "storage">;
|
|
207
227
|
interface BucketClient<P extends string, Id extends string = string> {
|
|
208
228
|
readonly bucket: Bucket<P, Id>;
|
|
209
229
|
/** The object path, checked against the template and, with `tenant`, the caller's tenant. */
|
|
@@ -303,7 +323,7 @@ interface Bucket<P extends string, Id extends string = string> {
|
|
|
303
323
|
* versioning and the lifecycle policy, which `sql()` can't set. Needs the
|
|
304
324
|
* secret key. Idempotent.
|
|
305
325
|
*/
|
|
306
|
-
apply(client:
|
|
326
|
+
apply(client: StorageAdminClient): AsyncResult<AppliedBucket>;
|
|
307
327
|
connect(client: StorageClient, options?: BucketConnectOptions): BucketClient<P, Id>;
|
|
308
328
|
}
|
|
309
329
|
interface BucketConnectOptions {
|
|
@@ -344,4 +364,219 @@ declare function parseSize(value: string | number): number;
|
|
|
344
364
|
*/
|
|
345
365
|
declare function defineBucket<const P extends string, const Id extends string = string>(config: BucketConfig<P, Id>): Bucket<P, Id>;
|
|
346
366
|
//#endregion
|
|
347
|
-
|
|
367
|
+
//#region src/storage/storage-api.d.ts
|
|
368
|
+
/** A failed Storage call's `error`, as supabase-js returns it (`StorageApiError`, `StorageUnknownError`). */
|
|
369
|
+
interface StorageFailure {
|
|
370
|
+
readonly name: string;
|
|
371
|
+
readonly message: string;
|
|
372
|
+
readonly status?: number | undefined;
|
|
373
|
+
readonly statusCode?: string | undefined;
|
|
374
|
+
/** The Storage error code, such as `NoSuchKey` or `AccessDenied`. */
|
|
375
|
+
readonly code?: string | undefined;
|
|
376
|
+
}
|
|
377
|
+
/** What a supabase-js Storage call resolves to: `data` or `error`, never both. */
|
|
378
|
+
type StorageResponse<T> = {
|
|
379
|
+
readonly data: T;
|
|
380
|
+
readonly error: null;
|
|
381
|
+
} | {
|
|
382
|
+
readonly data: null;
|
|
383
|
+
readonly error: StorageFailure;
|
|
384
|
+
};
|
|
385
|
+
interface StorageTransform {
|
|
386
|
+
readonly width?: number;
|
|
387
|
+
readonly height?: number;
|
|
388
|
+
readonly resize?: "cover" | "contain" | "fill";
|
|
389
|
+
readonly quality?: number;
|
|
390
|
+
readonly format?: "origin";
|
|
391
|
+
}
|
|
392
|
+
interface StorageUrlOptions {
|
|
393
|
+
readonly download?: string | boolean;
|
|
394
|
+
readonly transform?: StorageTransform;
|
|
395
|
+
readonly cacheNonce?: string;
|
|
396
|
+
readonly versionId?: string;
|
|
397
|
+
}
|
|
398
|
+
interface StorageDownloadOptions {
|
|
399
|
+
readonly transform?: StorageTransform;
|
|
400
|
+
readonly cacheNonce?: string;
|
|
401
|
+
readonly versionId?: string;
|
|
402
|
+
}
|
|
403
|
+
interface StorageFetchParameters {
|
|
404
|
+
readonly signal?: AbortSignal;
|
|
405
|
+
readonly cache?: "default" | "no-store" | "reload" | "no-cache" | "force-cache" | "only-if-cached";
|
|
406
|
+
}
|
|
407
|
+
interface StorageFileOptions {
|
|
408
|
+
readonly cacheControl?: string;
|
|
409
|
+
readonly contentType?: string;
|
|
410
|
+
readonly upsert?: boolean;
|
|
411
|
+
readonly duplex?: string;
|
|
412
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
413
|
+
readonly headers?: Readonly<Record<string, string>>;
|
|
414
|
+
}
|
|
415
|
+
interface StorageDestinationOptions {
|
|
416
|
+
readonly destinationBucket?: string;
|
|
417
|
+
readonly sourceVersionId?: string;
|
|
418
|
+
}
|
|
419
|
+
/** `list(prefix, options)`: one folder level, folders first when sorted by name. */
|
|
420
|
+
interface StorageSearchOptions {
|
|
421
|
+
/** Defaults to 100. */
|
|
422
|
+
readonly limit?: number;
|
|
423
|
+
readonly offset?: number;
|
|
424
|
+
/** Defaults to `{ column: "name", order: "asc" }`. */
|
|
425
|
+
readonly sortBy?: {
|
|
426
|
+
readonly column?: string;
|
|
427
|
+
readonly order?: string;
|
|
428
|
+
};
|
|
429
|
+
/** Entries whose name starts with this text, ignoring case. */
|
|
430
|
+
readonly search?: string;
|
|
431
|
+
readonly noncurrentVersions?: "exclude" | "include" | "only";
|
|
432
|
+
readonly deleteMarkers?: "exclude" | "include" | "only";
|
|
433
|
+
readonly exactMatch?: boolean;
|
|
434
|
+
}
|
|
435
|
+
interface StorageSearchV2Options {
|
|
436
|
+
/** Defaults to 1000, the most one page returns. */
|
|
437
|
+
readonly limit?: number;
|
|
438
|
+
readonly prefix?: string;
|
|
439
|
+
/** `nextCursor` of the previous page. */
|
|
440
|
+
readonly cursor?: string;
|
|
441
|
+
/** Group the objects below the next `/` into folders. */
|
|
442
|
+
readonly with_delimiter?: boolean;
|
|
443
|
+
readonly sortBy?: {
|
|
444
|
+
readonly column: "name" | "updated_at" | "created_at";
|
|
445
|
+
readonly order?: "asc" | "desc";
|
|
446
|
+
};
|
|
447
|
+
readonly noncurrentVersions?: "exclude" | "include" | "only";
|
|
448
|
+
readonly deleteMarkers?: "exclude" | "include" | "only";
|
|
449
|
+
readonly exactMatch?: boolean;
|
|
450
|
+
}
|
|
451
|
+
/** An entry of `list`: a file, or a folder when `id` is `null`. */
|
|
452
|
+
interface StorageListEntry {
|
|
453
|
+
readonly name: string;
|
|
454
|
+
readonly id: string | null;
|
|
455
|
+
readonly updated_at: string | null;
|
|
456
|
+
readonly created_at: string | null;
|
|
457
|
+
readonly last_accessed_at?: string | null;
|
|
458
|
+
readonly metadata: Readonly<Record<string, unknown>> | null;
|
|
459
|
+
}
|
|
460
|
+
interface StorageListV2Object {
|
|
461
|
+
readonly name: string;
|
|
462
|
+
readonly key?: string;
|
|
463
|
+
readonly id: string;
|
|
464
|
+
readonly updated_at: string;
|
|
465
|
+
readonly created_at: string;
|
|
466
|
+
readonly last_accessed_at?: string;
|
|
467
|
+
readonly metadata: Readonly<Record<string, unknown>> | null;
|
|
468
|
+
readonly version?: string;
|
|
469
|
+
readonly archived_at?: string | null;
|
|
470
|
+
readonly is_delete_marker?: boolean;
|
|
471
|
+
readonly is_versioned?: boolean;
|
|
472
|
+
}
|
|
473
|
+
interface StorageListV2Folder {
|
|
474
|
+
/** The folder's full path, ending in `/`. */
|
|
475
|
+
readonly name: string;
|
|
476
|
+
readonly key?: string;
|
|
477
|
+
}
|
|
478
|
+
interface StorageListV2Result {
|
|
479
|
+
readonly hasNext: boolean;
|
|
480
|
+
readonly nextCursor?: string;
|
|
481
|
+
readonly folders: readonly StorageListV2Folder[];
|
|
482
|
+
readonly objects: readonly StorageListV2Object[];
|
|
483
|
+
}
|
|
484
|
+
/** `info(path)`, in camelCase as supabase-js returns it. */
|
|
485
|
+
interface StorageObjectInfo {
|
|
486
|
+
readonly id: string;
|
|
487
|
+
readonly name: string;
|
|
488
|
+
readonly version: string;
|
|
489
|
+
readonly bucketId: string;
|
|
490
|
+
readonly createdAt: string;
|
|
491
|
+
readonly size?: number;
|
|
492
|
+
readonly contentType?: string;
|
|
493
|
+
readonly cacheControl?: string;
|
|
494
|
+
readonly etag?: string;
|
|
495
|
+
readonly lastModified?: string;
|
|
496
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
497
|
+
readonly updatedAt?: string;
|
|
498
|
+
readonly archivedAt?: string | null;
|
|
499
|
+
readonly isDeleteMarker?: boolean;
|
|
500
|
+
readonly isVersioned?: boolean;
|
|
501
|
+
}
|
|
502
|
+
interface StorageSignedUrlEntry {
|
|
503
|
+
readonly error: string | null;
|
|
504
|
+
readonly path: string | null;
|
|
505
|
+
readonly signedUrl: string | null;
|
|
506
|
+
}
|
|
507
|
+
type StorageRemoveEntry = string | {
|
|
508
|
+
readonly path: string;
|
|
509
|
+
readonly versionId: string;
|
|
510
|
+
};
|
|
511
|
+
/**
|
|
512
|
+
* One bucket's file API: the methods of supabase-js
|
|
513
|
+
* `supabase.storage.from(bucket)` that bucket clients and blocks call,
|
|
514
|
+
* typed structurally so another implementation (such as `supportStorage`)
|
|
515
|
+
* can stand in for it.
|
|
516
|
+
*/
|
|
517
|
+
interface StorageBucketApi {
|
|
518
|
+
upload(path: string, body: UploadBody, options?: StorageFileOptions): PromiseLike<StorageResponse<{
|
|
519
|
+
readonly path: string;
|
|
520
|
+
}>>;
|
|
521
|
+
update(path: string, body: UploadBody, options?: StorageFileOptions): PromiseLike<StorageResponse<{
|
|
522
|
+
readonly path: string;
|
|
523
|
+
}>>;
|
|
524
|
+
createSignedUploadUrl(path: string, options?: {
|
|
525
|
+
upsert: boolean;
|
|
526
|
+
}): PromiseLike<StorageResponse<{
|
|
527
|
+
readonly signedUrl: string;
|
|
528
|
+
readonly token: string;
|
|
529
|
+
readonly path: string;
|
|
530
|
+
}>>;
|
|
531
|
+
uploadToSignedUrl(path: string, token: string, body: UploadBody, options?: StorageFileOptions): PromiseLike<StorageResponse<{
|
|
532
|
+
readonly path: string;
|
|
533
|
+
}>>;
|
|
534
|
+
download(path: string, options?: StorageDownloadOptions, parameters?: StorageFetchParameters): PromiseLike<StorageResponse<Blob>>;
|
|
535
|
+
info(path: string, options?: {
|
|
536
|
+
versionId?: string;
|
|
537
|
+
}): PromiseLike<StorageResponse<StorageObjectInfo>>;
|
|
538
|
+
/** `data` is `false` with an `error` when Storage answers 400 or 404. */
|
|
539
|
+
exists(path: string): PromiseLike<{
|
|
540
|
+
readonly data: boolean;
|
|
541
|
+
readonly error: null;
|
|
542
|
+
} | {
|
|
543
|
+
readonly data: boolean;
|
|
544
|
+
readonly error: StorageFailure;
|
|
545
|
+
}>;
|
|
546
|
+
createSignedUrl(path: string, expiresIn: number, options?: StorageUrlOptions): PromiseLike<StorageResponse<{
|
|
547
|
+
readonly signedUrl: string;
|
|
548
|
+
}>>;
|
|
549
|
+
createSignedUrls(paths: string[], expiresIn: number, options?: {
|
|
550
|
+
download?: string | boolean;
|
|
551
|
+
cacheNonce?: string;
|
|
552
|
+
}): PromiseLike<StorageResponse<readonly StorageSignedUrlEntry[]>>;
|
|
553
|
+
getPublicUrl(path: string, options?: StorageUrlOptions): {
|
|
554
|
+
readonly data: {
|
|
555
|
+
readonly publicUrl: string;
|
|
556
|
+
};
|
|
557
|
+
};
|
|
558
|
+
remove(paths: StorageRemoveEntry[]): PromiseLike<StorageResponse<readonly StorageListEntry[]>>;
|
|
559
|
+
copy(from: string, to: string, options?: StorageDestinationOptions): PromiseLike<StorageResponse<{
|
|
560
|
+
readonly path: string;
|
|
561
|
+
}>>;
|
|
562
|
+
move(from: string, to: string, options?: StorageDestinationOptions): PromiseLike<StorageResponse<{
|
|
563
|
+
readonly message: string;
|
|
564
|
+
}>>;
|
|
565
|
+
purgeCache(path: string, options?: {
|
|
566
|
+
transformations?: true;
|
|
567
|
+
}, parameters?: StorageFetchParameters): PromiseLike<StorageResponse<{
|
|
568
|
+
readonly message: string;
|
|
569
|
+
}>>;
|
|
570
|
+
list(path?: string, options?: StorageSearchOptions, parameters?: StorageFetchParameters): PromiseLike<StorageResponse<readonly StorageListEntry[]>>;
|
|
571
|
+
listV2(options?: StorageSearchV2Options, parameters?: StorageFetchParameters): PromiseLike<StorageResponse<StorageListV2Result>>;
|
|
572
|
+
}
|
|
573
|
+
/** Storage's file API: `supabase.storage`, or anything with the same `from(bucket)`. */
|
|
574
|
+
interface StorageApi {
|
|
575
|
+
from(bucket: string): StorageBucketApi;
|
|
576
|
+
}
|
|
577
|
+
/** What `bucket.connect()` takes: a `StorageApi`, or a client that carries one as `storage` (a supabase-js client). */
|
|
578
|
+
type StorageClient = StorageApi | {
|
|
579
|
+
readonly storage: StorageApi;
|
|
580
|
+
};
|
|
581
|
+
//#endregion
|
|
582
|
+
export { PathValues as A, TransformOptions as B, BucketClient as C, BucketPolicy as D, BucketDrift as E, StorageAdminClient as F, parseSize as G, UploadOptions as H, StoredObject as I, TemplateValues as J, AppliedBucket as K, SweepOptions as L, ReplaceOptions as M, ReplaceResult as N, DownloadOptions as O, Reservation as P, StoragePath as Q, SweepResult as R, Bucket as S, BucketConnectOptions as T, UrlOptions as U, UploadBody as V, defineBucket as W, TtlPreset as X, TTL as Y, PathIn as Z, StorageSearchV2Options as _, StorageDownloadOptions as a, StorageUrlOptions as b, StorageFileOptions as c, StorageListV2Object as d, StorageListV2Result as f, StorageSearchOptions as g, StorageResponse as h, StorageDestinationOptions as i, PurgeCacheOptions as j, ObjectTarget as k, StorageListEntry as l, StorageRemoveEntry as m, StorageBucketApi as n, StorageFailure as o, StorageObjectInfo as p, TemplateParams as q, StorageClient as r, StorageFetchParameters as s, StorageApi as t, StorageListV2Folder as u, StorageSignedUrlEntry as v, BucketConfig as w, ActualBucket as x, StorageTransform as y, TransferOptions as z };
|
package/dist/streams/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { t as AsyncResult, w as ErrorMapper } from "../result-
|
|
2
|
-
import {
|
|
3
|
-
import { a as StreamStatus, i as StreamReadOptions, n as StreamOpenOptions, o as StreamStore, r as StreamPurgeOptions, t as StreamAppendResult } from "../store-
|
|
1
|
+
import { t as AsyncResult, w as ErrorMapper } from "../result-BchM1XZn.js";
|
|
2
|
+
import { a as dbTransport, o as rpcTransport, s as sqlTransport, t as BlockTransport } from "../block-transport-inD4fFq-.js";
|
|
3
|
+
import { a as StreamStatus, i as StreamReadOptions, n as StreamOpenOptions, o as StreamStore, r as StreamPurgeOptions, t as StreamAppendResult } from "../store-DsIYEBnv.js";
|
|
4
4
|
import { SupabaseClient } from "@supabase/supabase-js";
|
|
5
5
|
//#region src/streams/postgres.d.ts
|
|
6
6
|
interface PostgresStreamStoreOptions {
|
|
@@ -73,4 +73,4 @@ interface ResumeFromStoreOptions {
|
|
|
73
73
|
*/
|
|
74
74
|
export declare function resumeFromStore(store: StreamStore, id: string, options?: ResumeFromStoreOptions): AsyncResult<ReadableStream<string> | undefined>;
|
|
75
75
|
//#endregion
|
|
76
|
-
export { type BlockTransport, type PostgresStreamStoreOptions, type ResumeFromStoreOptions, type StreamAppendResult, type StreamOpenOptions, type StreamPurgeOptions, type StreamReadOptions, type StreamStatus, type StreamStore, type TeeToStoreOptions, type TeedStream, rpcTransport, sqlTransport };
|
|
76
|
+
export { type BlockTransport, type PostgresStreamStoreOptions, type ResumeFromStoreOptions, type StreamAppendResult, type StreamOpenOptions, type StreamPurgeOptions, type StreamReadOptions, type StreamStatus, type StreamStore, type TeeToStoreOptions, type TeedStream, dbTransport, rpcTransport, sqlTransport };
|
package/dist/streams/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { n as
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
1
|
+
import { n as isRecord } from "../guards-6F2bCtQR.js";
|
|
2
|
+
import { i as sqlTransport, r as rpcTransport, t as dbTransport } from "../block-transport-bAKh-dGc.js";
|
|
3
|
+
import { A as stringsOf, D as seconds, S as recordOf, i as blockCall } from "../block-helpers-Cy3pB96I.js";
|
|
4
|
+
import { n as teeToStore, r as writeToStore, t as resumeFromStore } from "../tee-Cb98Vn3b.js";
|
|
4
5
|
import { t as pollingRead } from "../store-BdH5ruDx.js";
|
|
5
6
|
//#region src/streams/postgres.ts
|
|
6
7
|
function statusOf(value) {
|
|
@@ -74,4 +75,4 @@ function postgresStreamStore(options) {
|
|
|
74
75
|
};
|
|
75
76
|
}
|
|
76
77
|
//#endregion
|
|
77
|
-
export { postgresStreamStore, resumeFromStore, rpcTransport, sqlTransport, teeToStore, writeToStore };
|
|
78
|
+
export { dbTransport, postgresStreamStore, resumeFromStore, rpcTransport, sqlTransport, teeToStore, writeToStore };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { n as dbError } from "../../errors-
|
|
2
|
-
import { a as ok, r as err, t as AsyncResult } from "../../result-
|
|
3
|
-
import {
|
|
1
|
+
import { n as dbError } from "../../errors-2M6CKMP4.js";
|
|
2
|
+
import { a as ok, r as err, t as AsyncResult } from "../../result-DEqHCMKP.js";
|
|
3
|
+
import { n as isRecord } from "../../guards-6F2bCtQR.js";
|
|
4
|
+
import { t as importOptionalPeer } from "../../optional-peer-D1pi-skw.js";
|
|
4
5
|
import { t as pollingRead } from "../../store-BdH5ruDx.js";
|
|
5
6
|
//#region src/streams/redis/redis.ts
|
|
6
7
|
const isNodeRedis = (value) => isRecord(value) && typeof value["createClient"] === "function";
|
|
@@ -8,14 +9,7 @@ const isNodeRedis = (value) => isRecord(value) && typeof value["createClient"] =
|
|
|
8
9
|
* Loads `redis` on first use. The specifier is a variable so bundlers leave
|
|
9
10
|
* the optional peer out of apps that pass their own client.
|
|
10
11
|
*/
|
|
11
|
-
|
|
12
|
-
const specifier = "redis";
|
|
13
|
-
try {
|
|
14
|
-
return await import(specifier);
|
|
15
|
-
} catch {
|
|
16
|
-
return;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
12
|
+
const loadRedis = () => importOptionalPeer("redis");
|
|
19
13
|
async function connectUrl(url, load) {
|
|
20
14
|
const module = await load();
|
|
21
15
|
if (!isNodeRedis(module)) throw new TypeError("redisStreamStore({ url }) needs the redis package: pnpm add redis, or pass a connected client");
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { t as importOptionalPeer } from "./optional-peer-D1pi-skw.js";
|
|
1
2
|
//#region src/blocks/stripe.ts
|
|
2
3
|
const isModule = (value) => typeof value === "object" && value !== null && "default" in value && typeof value.default === "function" && "createFetchHttpClient" in value.default;
|
|
3
4
|
/**
|
|
@@ -5,14 +6,7 @@ const isModule = (value) => typeof value === "object" && value !== null && "defa
|
|
|
5
6
|
* the optional peer out of apps that pass their own client; a missing
|
|
6
7
|
* install returns `undefined` and the caller explains how to add it.
|
|
7
8
|
*/
|
|
8
|
-
|
|
9
|
-
const specifier = "stripe";
|
|
10
|
-
try {
|
|
11
|
-
return await import(specifier);
|
|
12
|
-
} catch {
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
}
|
|
9
|
+
const loadStripeModule = () => importOptionalPeer("stripe");
|
|
16
10
|
/**
|
|
17
11
|
* The client `source` names: itself, or one created with Stripe's fetch HTTP
|
|
18
12
|
* client so it runs on every WinterTC runtime.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
//#region src/core/supabase-mcp.d.ts
|
|
2
|
+
/** The feature groups Supabase's MCP server turns on with `features`. */
|
|
3
|
+
type SupabaseMcpFeature = "account" | "branching" | "database" | "debugging" | "development" | "docs" | "functions" | "storage";
|
|
4
|
+
/** Which project and tools a Supabase MCP server exposes. */
|
|
5
|
+
interface SupabaseMcpScope {
|
|
6
|
+
/**
|
|
7
|
+
* Scopes the server to one project. Without it the tools reach every
|
|
8
|
+
* project the Management API token can.
|
|
9
|
+
*/
|
|
10
|
+
readonly projectRef?: string;
|
|
11
|
+
/** Runs SQL read-only and leaves out the tools that write. Defaults to true. */
|
|
12
|
+
readonly readOnly?: boolean;
|
|
13
|
+
/** The feature groups to turn on; the server's defaults when unset. */
|
|
14
|
+
readonly features?: readonly SupabaseMcpFeature[];
|
|
15
|
+
}
|
|
16
|
+
/** The parts of `@supabase/mcp-server-supabase` better-supabase calls. */
|
|
17
|
+
interface SupabaseMcpModule {
|
|
18
|
+
createToolSchemas(options: {
|
|
19
|
+
features?: readonly SupabaseMcpFeature[];
|
|
20
|
+
projectScoped?: boolean;
|
|
21
|
+
readOnly?: boolean;
|
|
22
|
+
}): Record<string, unknown>;
|
|
23
|
+
createSupabaseMcpHandler(options: {
|
|
24
|
+
platform: unknown;
|
|
25
|
+
projectId?: string;
|
|
26
|
+
readOnly?: boolean;
|
|
27
|
+
features?: string[];
|
|
28
|
+
}): {
|
|
29
|
+
fetch(request: Request, options?: {
|
|
30
|
+
readonly authInfo?: unknown;
|
|
31
|
+
}): Promise<Response>;
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
/** The part of `@supabase/mcp-server-supabase/platform/api` better-supabase calls. */
|
|
36
|
+
interface SupabaseMcpPlatformModule {
|
|
37
|
+
createSupabaseApiPlatform(options: {
|
|
38
|
+
accessToken: string;
|
|
39
|
+
apiUrl?: string;
|
|
40
|
+
}): unknown;
|
|
41
|
+
}
|
|
42
|
+
//#endregion
|
|
43
|
+
export { SupabaseMcpScope as i, SupabaseMcpModule as n, SupabaseMcpPlatformModule as r, SupabaseMcpFeature as t };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { t as importOptionalPeer } from "./optional-peer-D1pi-skw.js";
|
|
2
|
+
//#region src/core/supabase-mcp.ts
|
|
3
|
+
const INSTALL = "Supabase's MCP server needs @supabase/mcp-server-supabase: pnpm add @supabase/mcp-server-supabase";
|
|
4
|
+
const isRecord = (value) => typeof value === "object" && value !== null;
|
|
5
|
+
function isServerModule(value) {
|
|
6
|
+
return isRecord(value) && "createToolSchemas" in value && "createSupabaseMcpHandler" in value && typeof value["createToolSchemas"] === "function" && typeof value["createSupabaseMcpHandler"] === "function";
|
|
7
|
+
}
|
|
8
|
+
function isPlatformModule(value) {
|
|
9
|
+
return isRecord(value) && "createSupabaseApiPlatform" in value && typeof value["createSupabaseApiPlatform"] === "function";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Loads `@supabase/mcp-server-supabase` on first use. The specifiers are
|
|
13
|
+
* variables so bundlers leave the optional peer out of apps that don't call
|
|
14
|
+
* Supabase's MCP server; a missing install throws how to add it.
|
|
15
|
+
*/
|
|
16
|
+
async function loadSupabaseMcp() {
|
|
17
|
+
const loaded = await importOptionalPeer("@supabase/mcp-server-supabase");
|
|
18
|
+
if (!isServerModule(loaded)) throw new TypeError(INSTALL);
|
|
19
|
+
return loaded;
|
|
20
|
+
}
|
|
21
|
+
/** Loads the Management API platform of `@supabase/mcp-server-supabase`. */
|
|
22
|
+
async function loadSupabaseMcpPlatform() {
|
|
23
|
+
const loaded = await importOptionalPeer("@supabase/mcp-server-supabase/platform/api");
|
|
24
|
+
if (!isPlatformModule(loaded)) throw new TypeError(INSTALL);
|
|
25
|
+
return loaded;
|
|
26
|
+
}
|
|
27
|
+
//#endregion
|
|
28
|
+
export { loadSupabaseMcp as n, loadSupabaseMcpPlatform as r, isRecord as t };
|
|
@@ -1,15 +1,22 @@
|
|
|
1
|
-
import { c as mapDbError, n as dbError } from "./errors-
|
|
2
|
-
import { t as temporal } from "./temporal-required-
|
|
3
|
-
import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-
|
|
4
|
-
import { n as validate } from "./standard-
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
8
|
-
import { i as
|
|
1
|
+
import { c as mapDbError, n as dbError } from "./errors-2M6CKMP4.js";
|
|
2
|
+
import { t as temporal } from "./temporal-required-BtynQtM-.js";
|
|
3
|
+
import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-DEqHCMKP.js";
|
|
4
|
+
import { n as validate } from "./standard-DkzZUneg.js";
|
|
5
|
+
import { o as problemResponse } from "./problem-CJvFeGu7.js";
|
|
6
|
+
import { t as fromPgError } from "./executor-B_Hfobee.js";
|
|
7
|
+
import { d as clearSupportCookie, f as supportCookie, m as supportCookieValue } from "./adapter-CN45ibbV.js";
|
|
8
|
+
import { i as sqlIdent } from "./template-lPVh-EwW.js";
|
|
9
|
+
import { a as emitBlockEvent } from "./block-events-DTxU5tfr.js";
|
|
10
|
+
import { t as cronRoute } from "./cron-route-D2AN9SA1.js";
|
|
11
|
+
import { t as boundedTtlCache } from "./ttl-cache-XzZ-Q2eX.js";
|
|
9
12
|
//#region src/auth/support.ts
|
|
10
|
-
/**
|
|
11
|
-
|
|
12
|
-
|
|
13
|
+
/**
|
|
14
|
+
* A session from the jsonb the `support-sessions` functions return, with
|
|
15
|
+
* `namespace` (else the provided or global Temporal) for its time values.
|
|
16
|
+
*/
|
|
17
|
+
function supportSessionFromRow(row, namespace) {
|
|
18
|
+
const Instant = (namespace ?? temporal()).Instant;
|
|
19
|
+
const instant = (value) => Instant.from(value);
|
|
13
20
|
return {
|
|
14
21
|
id: row.id,
|
|
15
22
|
adminId: row.admin_id,
|
|
@@ -50,11 +57,11 @@ function sqlSupportStore(postgres, options = {}) {
|
|
|
50
57
|
input.adminId
|
|
51
58
|
]);
|
|
52
59
|
if (!row) throw new Error("start_support_session returned no session");
|
|
53
|
-
return supportSessionFromRow(row);
|
|
60
|
+
return supportSessionFromRow(row, options.temporal);
|
|
54
61
|
},
|
|
55
62
|
async get(sessionId, adminId, claims) {
|
|
56
63
|
const row = await one(as(claims), `select ${fn("active_support_session")}($1, $2) as session`, [sessionId, adminId]);
|
|
57
|
-
return row ? supportSessionFromRow(row) : void 0;
|
|
64
|
+
return row ? supportSessionFromRow(row, options.temporal) : void 0;
|
|
58
65
|
},
|
|
59
66
|
async end(sessionId, endedBy, claims) {
|
|
60
67
|
const [row] = await as(claims).queryRaw(`select ${fn("end_support_session")}($1, $2) as ended`, [sessionId, endedBy]);
|
|
@@ -66,8 +73,15 @@ function sqlSupportStore(postgres, options = {}) {
|
|
|
66
73
|
filter.targetUserId ?? null,
|
|
67
74
|
filter.active ?? null,
|
|
68
75
|
filter.limit ?? 50
|
|
69
|
-
])).map((row) => supportSessionFromRow(row.session));
|
|
76
|
+
])).map((row) => supportSessionFromRow(row.session, options.temporal));
|
|
77
|
+
},
|
|
78
|
+
async expire() {
|
|
79
|
+
return (await postgres.admin.queryRaw(`select session from ${fn("expire_support_sessions")}() as session`)).map((row) => supportSessionFromRow(row.session, options.temporal));
|
|
70
80
|
},
|
|
81
|
+
withTemporal: (namespace) => options.temporal === void 0 ? sqlSupportStore(postgres, {
|
|
82
|
+
...options,
|
|
83
|
+
temporal: namespace
|
|
84
|
+
}) : sqlSupportStore(postgres, options),
|
|
71
85
|
async claims(targetUserId) {
|
|
72
86
|
const [row] = await postgres.admin.queryRaw(`select ${fn("support_target_claims")}($1) as claims`, [targetUserId]);
|
|
73
87
|
return row?.claims ?? {};
|
|
@@ -113,10 +127,11 @@ function storeError(cause) {
|
|
|
113
127
|
function supportSessions(options) {
|
|
114
128
|
return {
|
|
115
129
|
options,
|
|
116
|
-
create: (events, claimsSchema) => createSupport(options, events, claimsSchema)
|
|
130
|
+
create: (events, claimsSchema, temporal) => createSupport(options, events, claimsSchema, temporal)
|
|
117
131
|
};
|
|
118
132
|
}
|
|
119
|
-
function createSupport(options, events, claimsSchema) {
|
|
133
|
+
function createSupport(options, events, claimsSchema, temporal) {
|
|
134
|
+
const store = temporal !== void 0 && options.store.withTemporal ? options.store.withTemporal(temporal) : options.store;
|
|
120
135
|
const policy = options.policy ?? {};
|
|
121
136
|
const ttl = policy.ttl ?? 1800;
|
|
122
137
|
const maxTtl = policy.maxTtl ?? 14400;
|
|
@@ -133,21 +148,12 @@ function createSupport(options, events, claimsSchema) {
|
|
|
133
148
|
return { role: "authenticated" };
|
|
134
149
|
};
|
|
135
150
|
/** Target claims per support session; the session itself is loaded every time, so revoking stays immediate. */
|
|
136
|
-
const claimsCache =
|
|
151
|
+
const claimsCache = boundedTtlCache({ max: CLAIMS_CACHE_SIZE });
|
|
137
152
|
const cachedTargetClaims = async (session) => {
|
|
138
|
-
const now = Date.now();
|
|
139
153
|
const cached = claimsCache.get(session.id);
|
|
140
|
-
if (cached
|
|
141
|
-
const claims = await targetClaims(
|
|
142
|
-
claimsCache.
|
|
143
|
-
if (claimsCache.size >= CLAIMS_CACHE_SIZE) {
|
|
144
|
-
const oldest = claimsCache.keys().next();
|
|
145
|
-
if (!oldest.done) claimsCache.delete(oldest.value);
|
|
146
|
-
}
|
|
147
|
-
claimsCache.set(session.id, {
|
|
148
|
-
claims,
|
|
149
|
-
until: Math.min(session.expiresAt.epochMilliseconds, now + CLAIMS_TTL_MS)
|
|
150
|
-
});
|
|
154
|
+
if (cached) return cached;
|
|
155
|
+
const claims = await targetClaims(store, session.targetUserId);
|
|
156
|
+
claimsCache.set(session.id, claims, Math.min(session.expiresAt.epochMilliseconds, Date.now() + CLAIMS_TTL_MS));
|
|
151
157
|
return claims;
|
|
152
158
|
};
|
|
153
159
|
const checkPolicy = (admin, request, reason, seconds) => {
|
|
@@ -164,7 +170,37 @@ function createSupport(options, events, claimsSchema) {
|
|
|
164
170
|
return false;
|
|
165
171
|
}
|
|
166
172
|
};
|
|
173
|
+
const expire = () => AsyncResult.from(async () => {
|
|
174
|
+
if (!store.expire) return err(dbError("unsupported", `The "${store.name}" support session store has no expire()`, { code: "SUPPORT_EXPIRE_UNSUPPORTED" }));
|
|
175
|
+
let expired;
|
|
176
|
+
try {
|
|
177
|
+
expired = await store.expire();
|
|
178
|
+
} catch (cause) {
|
|
179
|
+
return err(storeError(cause));
|
|
180
|
+
}
|
|
181
|
+
for (const session of expired) emit("support.ended", {
|
|
182
|
+
sessionId: session.id,
|
|
183
|
+
adminId: session.adminId,
|
|
184
|
+
targetUserId: session.targetUserId,
|
|
185
|
+
reason: session.reason,
|
|
186
|
+
endedBy: "expired",
|
|
187
|
+
...session.tenant === void 0 ? {} : { organizationId: session.tenant }
|
|
188
|
+
});
|
|
189
|
+
return ok(expired);
|
|
190
|
+
});
|
|
167
191
|
return {
|
|
192
|
+
expire,
|
|
193
|
+
expireRoute: (routeOptions) => cronRoute({
|
|
194
|
+
name: "expire",
|
|
195
|
+
secret: routeOptions.secret,
|
|
196
|
+
problem: routeOptions.problem
|
|
197
|
+
}, async (_request, instance) => {
|
|
198
|
+
const result = await expire();
|
|
199
|
+
return result.ok ? Response.json({ expired: result.data.length }) : problemResponse(result.error, {
|
|
200
|
+
instance,
|
|
201
|
+
format: routeOptions.problem
|
|
202
|
+
});
|
|
203
|
+
}),
|
|
168
204
|
start(admin, request) {
|
|
169
205
|
return AsyncResult.from(async () => {
|
|
170
206
|
if (admin.kind !== "user") return err(dbError("unauthorized", "Sign in to start a support session"));
|
|
@@ -193,7 +229,7 @@ function createSupport(options, events, claimsSchema) {
|
|
|
193
229
|
if (!await authorized(input)) return deny(denied("Not allowed to start a support session", "SUPPORT_FORBIDDEN"), "authorize");
|
|
194
230
|
let session;
|
|
195
231
|
try {
|
|
196
|
-
session = await
|
|
232
|
+
session = await store.start({
|
|
197
233
|
adminId: admin.user.id,
|
|
198
234
|
adminClaims: admin.claims,
|
|
199
235
|
targetUserId: request.targetUserId,
|
|
@@ -226,12 +262,12 @@ function createSupport(options, events, claimsSchema) {
|
|
|
226
262
|
const cookie = clearSupportCookie(options.cookie);
|
|
227
263
|
if (admin.kind !== "user") return err(dbError("unauthorized", "Sign in to stop a support session"));
|
|
228
264
|
try {
|
|
229
|
-
const session = await
|
|
265
|
+
const session = await store.get(sessionId, admin.user.id, admin.claims);
|
|
230
266
|
if (!session) return ok({
|
|
231
267
|
ended: false,
|
|
232
268
|
cookie
|
|
233
269
|
});
|
|
234
|
-
const ended = await
|
|
270
|
+
const ended = await store.end(sessionId, "admin", admin.claims);
|
|
235
271
|
if (ended) emit("support.ended", {
|
|
236
272
|
sessionId,
|
|
237
273
|
adminId: session.adminId,
|
|
@@ -251,7 +287,7 @@ function createSupport(options, events, claimsSchema) {
|
|
|
251
287
|
return AsyncResult.from(async () => {
|
|
252
288
|
if (caller.kind !== "user") return err(dbError("unauthorized", "Sign in to revoke a support session"));
|
|
253
289
|
try {
|
|
254
|
-
return ok(await
|
|
290
|
+
return ok(await store.end(sessionId, "revoked", caller.claims));
|
|
255
291
|
} catch (cause) {
|
|
256
292
|
return err(storeError(cause));
|
|
257
293
|
}
|
|
@@ -265,7 +301,7 @@ function createSupport(options, events, claimsSchema) {
|
|
|
265
301
|
let session;
|
|
266
302
|
let claims;
|
|
267
303
|
try {
|
|
268
|
-
session = await
|
|
304
|
+
session = await store.get(id, auth.user.id, auth.claims);
|
|
269
305
|
if (!session || session.expiresAt.epochMilliseconds <= Date.now()) return;
|
|
270
306
|
if (policy.readOnly !== "default" && !session.readOnly) session = {
|
|
271
307
|
...session,
|
|
@@ -300,7 +336,7 @@ function createSupport(options, events, claimsSchema) {
|
|
|
300
336
|
return AsyncResult.from(async () => {
|
|
301
337
|
if (caller.kind !== "user") return err(dbError("unauthorized", "Sign in to list support sessions"));
|
|
302
338
|
try {
|
|
303
|
-
return ok(await
|
|
339
|
+
return ok(await store.list(filter, caller.claims));
|
|
304
340
|
} catch (cause) {
|
|
305
341
|
return err(storeError(cause));
|
|
306
342
|
}
|