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
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { n as deepFreeze, r as isPlainObject, t as cloneValue } from "./clone-dN9XOL1K.js";
|
|
2
|
+
import { n as dbError } from "./errors-2M6CKMP4.js";
|
|
3
|
+
import { a as ok, r as err } from "./result-DEqHCMKP.js";
|
|
4
|
+
//#region src/core/authorizer.ts
|
|
5
|
+
/** Identity helper that fixes `apiVersion` and infers `Ref`. */
|
|
6
|
+
function defineAuthorizer(authorizer) {
|
|
7
|
+
return {
|
|
8
|
+
...authorizer,
|
|
9
|
+
apiVersion: 1
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
const ANONYMOUS = {
|
|
13
|
+
type: "anon",
|
|
14
|
+
id: "anonymous"
|
|
15
|
+
};
|
|
16
|
+
function scopesOf(claims) {
|
|
17
|
+
const scope = claims?.["scope"];
|
|
18
|
+
return typeof scope === "string" ? scope.split(" ").filter(Boolean) : [];
|
|
19
|
+
}
|
|
20
|
+
/** A frozen copy of the verified claims, so an authorizer cannot change them. */
|
|
21
|
+
function claimsProperty(claims) {
|
|
22
|
+
if (!isPlainObject(claims)) return {};
|
|
23
|
+
return { claims: deepFreeze(cloneValue(claims)) };
|
|
24
|
+
}
|
|
25
|
+
/** The subject and context of a request, from the verified context only. */
|
|
26
|
+
function requestOf(context) {
|
|
27
|
+
const actor = context?.actor;
|
|
28
|
+
const claims = context?.claims;
|
|
29
|
+
const act = claims?.["act"];
|
|
30
|
+
const subject = actor ? {
|
|
31
|
+
type: typeof act === "object" && act !== null && actor.kind === "user" ? "agent" : actor.kind,
|
|
32
|
+
id: actor.id,
|
|
33
|
+
properties: {
|
|
34
|
+
...actor.role === void 0 ? {} : { role: actor.role },
|
|
35
|
+
...actor.email === void 0 ? {} : { email: actor.email },
|
|
36
|
+
...actor.impersonator === void 0 ? {} : { impersonator: actor.impersonator },
|
|
37
|
+
...claimsProperty(claims)
|
|
38
|
+
}
|
|
39
|
+
} : ANONYMOUS;
|
|
40
|
+
const aal = claims?.["aal"];
|
|
41
|
+
return {
|
|
42
|
+
subject,
|
|
43
|
+
context: {
|
|
44
|
+
...context?.tenant === void 0 ? {} : { tenant: context.tenant },
|
|
45
|
+
...typeof aal === "string" ? { aal } : {},
|
|
46
|
+
scopes: scopesOf(claims)
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
function isOutcome(value) {
|
|
51
|
+
if (typeof value !== "object" || value === null || !("outcome" in value)) return false;
|
|
52
|
+
const { outcome } = value;
|
|
53
|
+
return outcome === "granted" || outcome === "denied" || outcome === "approval-required";
|
|
54
|
+
}
|
|
55
|
+
/** The `forbidden` error for an outcome other than `granted`, or `undefined`. */
|
|
56
|
+
function outcomeError(outcome, permission) {
|
|
57
|
+
if (!isOutcome(outcome)) return dbError("forbidden", `The authorizer gave no decision for ${permission}`, {
|
|
58
|
+
code: "PERMISSION_DENIED",
|
|
59
|
+
permission
|
|
60
|
+
});
|
|
61
|
+
switch (outcome.outcome) {
|
|
62
|
+
case "granted": return;
|
|
63
|
+
case "denied": return dbError("forbidden", outcome.reason ?? `Permission ${permission} is required`, {
|
|
64
|
+
code: "PERMISSION_DENIED",
|
|
65
|
+
permission
|
|
66
|
+
});
|
|
67
|
+
case "approval-required": return dbError("forbidden", `${permission} needs an approval`, {
|
|
68
|
+
code: "APPROVAL_REQUIRED",
|
|
69
|
+
permission,
|
|
70
|
+
...outcome.approval ? { approval: { id: outcome.approval.id } } : {}
|
|
71
|
+
});
|
|
72
|
+
default: return outcome;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Checks one permission and fails closed: a missing authorizer, a throw or
|
|
77
|
+
* an unknown outcome all deny. Never throws (invariant 4).
|
|
78
|
+
*/
|
|
79
|
+
async function checkPermission(options) {
|
|
80
|
+
const { authorizer, permission } = options;
|
|
81
|
+
if (!authorizer) return err(dbError("forbidden", "A permission is declared, but no authorizer is set", { code: "PERMISSION_DENIED" }));
|
|
82
|
+
let key;
|
|
83
|
+
try {
|
|
84
|
+
key = authorizer.key(permission);
|
|
85
|
+
} catch {
|
|
86
|
+
return err(dbError("forbidden", "Unknown permission", { code: "PERMISSION_DENIED" }));
|
|
87
|
+
}
|
|
88
|
+
const { subject, context } = requestOf(options.context);
|
|
89
|
+
try {
|
|
90
|
+
const error = outcomeError(await authorizer.evaluate({
|
|
91
|
+
subject,
|
|
92
|
+
action: permission,
|
|
93
|
+
resource: options.resource,
|
|
94
|
+
context
|
|
95
|
+
}), key);
|
|
96
|
+
return error ? err(error) : ok(void 0);
|
|
97
|
+
} catch {
|
|
98
|
+
return err(dbError("forbidden", `The authorizer failed for ${key}`, {
|
|
99
|
+
code: "PERMISSION_DENIED",
|
|
100
|
+
permission: key
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Checks one permission per resource, with `evaluations` when the
|
|
106
|
+
* authorizer has it. Returns whether each one is granted, in order; any
|
|
107
|
+
* failure denies.
|
|
108
|
+
*/
|
|
109
|
+
async function checkEach(authorizer, permission, resources, context) {
|
|
110
|
+
if (!authorizer || resources.length === 0) return resources.map(() => false);
|
|
111
|
+
const { subject, context: requestContext } = requestOf(context);
|
|
112
|
+
const requests = resources.map((resource) => ({
|
|
113
|
+
subject,
|
|
114
|
+
action: permission,
|
|
115
|
+
resource,
|
|
116
|
+
context: requestContext
|
|
117
|
+
}));
|
|
118
|
+
try {
|
|
119
|
+
const outcomes = authorizer.evaluations ? await authorizer.evaluations(requests) : await Promise.all(requests.map((request) => Promise.resolve(authorizer.evaluate(request))));
|
|
120
|
+
return requests.map((_, index) => isOutcome(outcomes[index]) && outcomes[index].outcome === "granted");
|
|
121
|
+
} catch {
|
|
122
|
+
return resources.map(() => false);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
//#endregion
|
|
126
|
+
export { requestOf as i, checkPermission as n, defineAuthorizer as r, checkEach as t };
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
//#region src/core/authorizer.d.ts
|
|
2
|
+
type JsonObject = Readonly<Record<string, unknown>>;
|
|
3
|
+
/** Who asks (AuthZEN Subject). Always built from the verified request context. */
|
|
4
|
+
interface AuthorizationSubject {
|
|
5
|
+
/** `user`, `service`, `anon`, or `agent` for a delegated token with an `act` chain. */
|
|
6
|
+
readonly type: string;
|
|
7
|
+
readonly id: string;
|
|
8
|
+
/**
|
|
9
|
+
* `role`, `email` and `impersonator` when set, and `claims`: the verified
|
|
10
|
+
* access-token claims (a frozen copy, including what a token hook wrote,
|
|
11
|
+
* such as `memberships`, `roles` and `act`). The client never supplies
|
|
12
|
+
* them. Anonymous subjects have no properties.
|
|
13
|
+
*/
|
|
14
|
+
readonly properties?: JsonObject;
|
|
15
|
+
}
|
|
16
|
+
/** What is acted on (AuthZEN Resource): a table, a topic or an action's target. */
|
|
17
|
+
interface AuthorizationResource {
|
|
18
|
+
readonly type: string;
|
|
19
|
+
readonly id?: string;
|
|
20
|
+
/** The row, for decisions that read it (`get`, `update`, `delete`). */
|
|
21
|
+
readonly properties?: JsonObject;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* One access request, in the AuthZEN Authorization API 1.0 information
|
|
25
|
+
* model (`SPEC_PINS.authzen`): subject, action, resource and context.
|
|
26
|
+
* `action` is the permission reference the authorizer understands.
|
|
27
|
+
*/
|
|
28
|
+
interface AuthorizationRequest<Ref = string> {
|
|
29
|
+
readonly subject: AuthorizationSubject;
|
|
30
|
+
readonly action: Ref;
|
|
31
|
+
readonly resource: AuthorizationResource;
|
|
32
|
+
/** The tenant, assurance level and scopes of the request. */
|
|
33
|
+
readonly context: JsonObject;
|
|
34
|
+
}
|
|
35
|
+
type AuthorizationOutcome = {
|
|
36
|
+
readonly outcome: "granted";
|
|
37
|
+
readonly context?: JsonObject;
|
|
38
|
+
} | {
|
|
39
|
+
readonly outcome: "denied";
|
|
40
|
+
readonly reason?: string;
|
|
41
|
+
readonly context?: JsonObject;
|
|
42
|
+
} | {
|
|
43
|
+
readonly outcome: "approval-required";
|
|
44
|
+
readonly approval?: {
|
|
45
|
+
readonly id: string;
|
|
46
|
+
};
|
|
47
|
+
readonly context?: JsonObject;
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* A runtime authorization decision point (API v1). Authorization libraries
|
|
51
|
+
* ship an adapter that implements it; better-supabase builds every request
|
|
52
|
+
* and fails closed on anything but `granted`.
|
|
53
|
+
*/
|
|
54
|
+
interface Authorizer<Ref = string> {
|
|
55
|
+
readonly apiVersion: 1;
|
|
56
|
+
readonly name: string;
|
|
57
|
+
/** The stable key of a permission reference, for specs, SQL and messages. */
|
|
58
|
+
key(ref: Ref): string;
|
|
59
|
+
/** The default permission for a table operation; lets `permissions: true` work. */
|
|
60
|
+
forOperation?(table: string, operation: string): Ref | undefined;
|
|
61
|
+
evaluate(request: AuthorizationRequest<Ref>): AuthorizationOutcome | Promise<AuthorizationOutcome>;
|
|
62
|
+
/** The batch form (AuthZEN Access Evaluations); results keep the request order. */
|
|
63
|
+
evaluations?(requests: readonly AuthorizationRequest<Ref>[]): Promise<readonly AuthorizationOutcome[]>;
|
|
64
|
+
}
|
|
65
|
+
type AnyAuthorizer = Authorizer<any>;
|
|
66
|
+
/** The permission reference type of an authorizer, `string` without one. */
|
|
67
|
+
type PermissionRef<A> = A extends Authorizer<infer R> ? R : string;
|
|
68
|
+
/** Identity helper that fixes `apiVersion` and infers `Ref`. */
|
|
69
|
+
declare function defineAuthorizer<Ref = string>(authorizer: Omit<Authorizer<Ref>, "apiVersion"> & {
|
|
70
|
+
readonly apiVersion?: 1;
|
|
71
|
+
}): Authorizer<Ref>;
|
|
72
|
+
//#endregion
|
|
73
|
+
export { AuthorizationSubject as a, defineAuthorizer as c, AuthorizationResource as i, AuthorizationOutcome as n, Authorizer as o, AuthorizationRequest as r, PermissionRef as s, AnyAuthorizer as t };
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { b as DbError, n as BetterResultApi, t as AsyncResult } from "../result-BchM1XZn.js";
|
|
2
|
+
import { E as PrimaryKeyValue, H as Update, L as TableKey, R as TableMeta, V as UniqueWhere, a as AnyModels, i as AnyFunctions, x as Insert } from "../types-CoE5Zwy4.js";
|
|
3
|
+
import { r as ApplyExtension } from "../plugin-CPK2HsbY.js";
|
|
4
|
+
import { A as OverloadedName, B as UpsertArgs, Bt as WhereInput, C as ManyReturningArgs, Ct as FindOnlyArgs, D as OffsetRangeArgs, E as OffsetPageArgs, G as SearchScore, H as WriteArgs, I as Returned, It as RequestArgs, K as InferReadSetParams, L as RpcArgs, M as PlainName, N as RawRpcOptions, Nt as Payload, O as OverloadArgs, Pt as ReadArgs, R as RpcOptions, S as ManyResult, St as FindManyArgs, U as WriteManyArgs, V as UpsertManyArgs, W as SearchArgs, _ as Db, at as QuerySpec, b as DeleteExt, dt as AggregateArgs, et as ReadSetResult, g as CursorPageArgs, it as InferResult, j as PageOf, k as OverloadReturns, mt as AggregateResult, q as ReadSet, w as NoArgName, x as FindExt, xt as FindFirstArgs, y as DeleteArgs, yt as CountArgs, z as UpdateArgs } from "../define-DmcfoNXB.js";
|
|
5
|
+
import { a as ListExtra, i as ListDefinition, o as ListPage, s as ListPagination, u as ListQuery } from "../list-query-D3JQeEL7.js";
|
|
6
|
+
import { Result } from "better-result";
|
|
7
|
+
//#region src/better-result/better-result.d.ts
|
|
8
|
+
/** better-result's `Result` namespace with the function each `DbError` goes through. */
|
|
9
|
+
interface BetterResultMapping<E> {
|
|
10
|
+
readonly Result: BetterResultApi<unknown, unknown>;
|
|
11
|
+
readonly mapError: (error: DbError) => E;
|
|
12
|
+
}
|
|
13
|
+
/** What `withBetterResult` calls on a `defineBetterResultErrors` converter. */
|
|
14
|
+
interface BetterResultErrorsLike {
|
|
15
|
+
(result: AsyncResult<unknown>): unknown;
|
|
16
|
+
map(error: DbError): unknown;
|
|
17
|
+
}
|
|
18
|
+
/** A `defineBetterResultErrors` converter or a `{ Result, mapError }` mapping. */
|
|
19
|
+
type BetterResultConverter = BetterResultErrorsLike | BetterResultMapping<unknown>;
|
|
20
|
+
/** The error type a converter produces. */
|
|
21
|
+
type ConvertedError<X> = X extends BetterResultMapping<infer E> ? E : X extends {
|
|
22
|
+
map(error: DbError): infer E;
|
|
23
|
+
} ? E : never;
|
|
24
|
+
type Out<T, Err> = Promise<Result<T, Err>>;
|
|
25
|
+
/**
|
|
26
|
+
* A repository whose reads and writes return better-result values. Its
|
|
27
|
+
* signatures mirror `Repository`, so `select` and `include` still type the rows.
|
|
28
|
+
*/
|
|
29
|
+
interface BetterResultRepository<M extends AnyModels, T extends TableKey<M>, E, Err> {
|
|
30
|
+
readonly $tableName: T;
|
|
31
|
+
readonly $meta: TableMeta;
|
|
32
|
+
findMany<const A extends FindManyArgs<M, T> & FindExt<E, M, T>>(args?: A): Out<Payload<M, T, A>[], Err>;
|
|
33
|
+
findFirst<const A extends FindFirstArgs<M, T> & FindExt<E, M, T>>(args?: A): Out<Payload<M, T, A> | null, Err>;
|
|
34
|
+
findOnly<const A extends FindOnlyArgs<M, T> & FindExt<E, M, T>>(args: A): Out<Payload<M, T, A> | null, Err>;
|
|
35
|
+
findUnique<const A extends ReadArgs<M, T> & {
|
|
36
|
+
readonly where: UniqueWhere<M, T>;
|
|
37
|
+
} & FindExt<E, M, T>>(args: A): Out<Payload<M, T, A> | null, Err>;
|
|
38
|
+
findById<const A extends ReadArgs<M, T> & FindExt<E, M, T>>(id: PrimaryKeyValue<M, T>, args?: A): Out<Payload<M, T, A>, Err>;
|
|
39
|
+
count(args?: CountArgs<M, T> & FindExt<E, M, T>): Out<number, Err>;
|
|
40
|
+
aggregate<const A extends AggregateArgs<M, T> & FindExt<E, M, T>>(args: A): Out<AggregateResult<M, T, A>, Err>;
|
|
41
|
+
exists(args?: RequestArgs & {
|
|
42
|
+
readonly where?: WhereInput<M, T>;
|
|
43
|
+
} & FindExt<E, M, T>): Out<boolean, Err>;
|
|
44
|
+
paginate<const A extends (OffsetPageArgs<M, T> | OffsetRangeArgs<M, T> | CursorPageArgs<M, T>) & FindExt<E, M, T>>(args: A): Out<PageOf<M, T, A>, Err>;
|
|
45
|
+
create<const A extends WriteArgs<M, T> = {}>(data: Insert<M, T>, args?: A): Out<Returned<M, T, A>, Err>;
|
|
46
|
+
createMany<const A extends WriteManyArgs<M, T> = {}>(rows: readonly Insert<M, T>[], args?: A): Out<A extends {
|
|
47
|
+
readonly returning: false;
|
|
48
|
+
} ? {
|
|
49
|
+
count: number;
|
|
50
|
+
} : Payload<M, T, A>[], Err>;
|
|
51
|
+
update<const A extends UpdateArgs<M, T> = {}>(id: PrimaryKeyValue<M, T>, patch: Update<M, T>, args?: A): Out<Returned<M, T, A>, Err>;
|
|
52
|
+
updateMany<const A extends ManyReturningArgs<M, T> & {
|
|
53
|
+
readonly data: Update<M, T>;
|
|
54
|
+
readonly allowAll?: boolean;
|
|
55
|
+
} & FindExt<E, M, T>>(args: A): Out<ManyResult<M, T, A>, Err>;
|
|
56
|
+
upsert<const A extends UpsertArgs<M, T> = {}>(data: Insert<M, T>, args?: A): Out<A extends {
|
|
57
|
+
readonly ignoreDuplicates: true;
|
|
58
|
+
} ? Returned<M, T, A> | null : Returned<M, T, A>, Err>;
|
|
59
|
+
upsertMany<const A extends UpsertManyArgs<M, T> = {}>(rows: readonly Insert<M, T>[], args?: A): Out<A extends {
|
|
60
|
+
readonly returning: false;
|
|
61
|
+
} ? {
|
|
62
|
+
count: number;
|
|
63
|
+
} : Payload<M, T, A>[], Err>;
|
|
64
|
+
delete(id: PrimaryKeyValue<M, T>, args?: DeleteArgs & DeleteExt<E, M, T>): Out<void, Err>;
|
|
65
|
+
deleteMany<const A extends ManyReturningArgs<M, T> & DeleteExt<E, M, T> & FindExt<E, M, T>>(args: A): Out<ManyResult<M, T, A>, Err>;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Plugin methods that return an `AsyncResult` return a better-result value.
|
|
69
|
+
* A generic plugin method keeps its parameters but loses its type
|
|
70
|
+
* parameters; call it on `$db` and pass the result to `$from` instead.
|
|
71
|
+
*/
|
|
72
|
+
type BetterResultMethods<X, Err> = { readonly [K in keyof X]: X[K] extends ((...args: infer P) => AsyncResult<infer R>) ? (...args: P) => Out<R, Err> : X[K]; };
|
|
73
|
+
type BetterResultRepositoryOf<M extends AnyModels, T extends TableKey<M>, E, Err> = BetterResultRepository<M, T, E, Err> & BetterResultMethods<ApplyExtension<E, M, T, "methods">, Err>;
|
|
74
|
+
interface BetterResultHelpers<M extends AnyModels, F extends AnyFunctions, E, C, Err> {
|
|
75
|
+
/** The `db` this view wraps, for everything that returns plain results. */
|
|
76
|
+
readonly $db: Db<M, F, E, C>;
|
|
77
|
+
/** Converts any `AsyncResult`, such as one from a plugin method or `$with`. */
|
|
78
|
+
$from<T>(result: AsyncResult<T>): Out<T, Err>;
|
|
79
|
+
$rpc<N extends PlainName<F>>(name: N, ...rest: [...RpcArgs<F, N>, options: RawRpcOptions]): Out<unknown, Err>;
|
|
80
|
+
$rpc<N extends PlainName<F>, R = F[N]["Returns"]>(name: N, ...rest: [...RpcArgs<F, N>, options?: RpcOptions<R>]): Out<R, Err>;
|
|
81
|
+
$rpc<N extends OverloadedName<F>, const A extends F[N]["Args"]>(name: N, args: OverloadArgs<F[N], A>, options: RawRpcOptions): Out<unknown, Err>;
|
|
82
|
+
$rpc<N extends OverloadedName<F>, const A extends F[N]["Args"], R = OverloadReturns<F[N], A>>(name: N, args: OverloadArgs<F[N], A>, options?: RpcOptions<R>): Out<R, Err>;
|
|
83
|
+
$rpc<N extends NoArgName<F>>(name: N): Out<OverloadReturns<F[N], Record<never, never>>, Err>;
|
|
84
|
+
$table<T extends TableKey<M>>(name: T): BetterResultRepositoryOf<M, T, E, Err>;
|
|
85
|
+
$run<S extends QuerySpec<TableKey<M>>>(spec: S, options?: {
|
|
86
|
+
readonly signal?: AbortSignal;
|
|
87
|
+
}): Out<InferResult<S>, Err>;
|
|
88
|
+
$many<S extends ReadSet>(readSet: S, params: InferReadSetParams<S>, options?: {
|
|
89
|
+
readonly signal?: AbortSignal;
|
|
90
|
+
}): Out<ReadSetResult<S>, Err>;
|
|
91
|
+
$many<const S extends readonly QuerySpec<TableKey<M>>[]>(specs: S, options?: {
|
|
92
|
+
readonly signal?: AbortSignal;
|
|
93
|
+
}): Out<{ -readonly [K in keyof S]: InferResult<S[K]>; }, Err>;
|
|
94
|
+
$search<T extends TableKey<M>, const A extends SearchArgs<M, T>>(table: T, args: A): Out<(Payload<M, T, A> & SearchScore<A>)[], Err>;
|
|
95
|
+
/** Runs a list query (`defineListQuery`) like `list.run(db, query, extra)`. */
|
|
96
|
+
$list<T extends TableKey<M>, S extends string, LF extends string, LC extends boolean, P extends ListPagination, const A extends ListExtra<M, T> & FindExt<E, M, T>>(list: ListDefinition<M, T, E, S, LF, LC, P>, query: ListQuery<S, LF>, extra?: A): Out<ListPage<Payload<M, T, A>, LF, LC, P>, Err>;
|
|
97
|
+
}
|
|
98
|
+
/** A `db` whose repositories and helpers return better-result values. */
|
|
99
|
+
type BetterResultDb<M extends AnyModels, F extends AnyFunctions, E, C, Err> = { readonly [T in TableKey<M>]: BetterResultRepositoryOf<M, T, E, Err>; } & BetterResultHelpers<M, F, E, C, Err>;
|
|
100
|
+
/**
|
|
101
|
+
* A view of `db` whose repository methods, `$rpc`, `$run`, `$many`,
|
|
102
|
+
* `$search` and list queries (`$list`) return better-result `Result`
|
|
103
|
+
* values. `toResult` is a `defineBetterResultErrors` converter or
|
|
104
|
+
* `{ Result, mapError }`. `db` itself is unchanged, and `$db` returns it.
|
|
105
|
+
*
|
|
106
|
+
* ```ts
|
|
107
|
+
* import { Result, TaggedError } from 'better-result';
|
|
108
|
+
* import { defineBetterResultErrors } from 'better-supabase';
|
|
109
|
+
* import { withBetterResult } from 'better-supabase/better-result';
|
|
110
|
+
*
|
|
111
|
+
* const toResult = defineBetterResultErrors(Result, { not_found: NotFound }, DbFailure);
|
|
112
|
+
* const rdb = withBetterResult(db, toResult);
|
|
113
|
+
* const customer = await rdb.customers.findById(id); // Result<Customer, NotFound | DbFailure>
|
|
114
|
+
* ```
|
|
115
|
+
*/
|
|
116
|
+
export declare function withBetterResult<M extends AnyModels, F extends AnyFunctions, E, C, const X extends BetterResultConverter>(db: Db<M, F, E, C>, toResult: X): BetterResultDb<M, F, E, C, ConvertedError<X>>;
|
|
117
|
+
//#endregion
|
|
118
|
+
export type { BetterResultConverter, BetterResultDb, BetterResultErrorsLike, BetterResultHelpers, BetterResultMapping, BetterResultMethods, BetterResultRepository, BetterResultRepositoryOf, ConvertedError };
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { o as toBetterResult, t as AsyncResult } from "../result-DEqHCMKP.js";
|
|
2
|
+
//#region src/better-result/better-result.ts
|
|
3
|
+
const HELPERS = [
|
|
4
|
+
"$rpc",
|
|
5
|
+
"$run",
|
|
6
|
+
"$many",
|
|
7
|
+
"$search"
|
|
8
|
+
];
|
|
9
|
+
function converterOf(toResult) {
|
|
10
|
+
if (typeof toResult === "function") return (result) => toResult(result);
|
|
11
|
+
return (result) => toBetterResult(result, toResult.Result, toResult.mapError);
|
|
12
|
+
}
|
|
13
|
+
function view(db, convert) {
|
|
14
|
+
const wrap = (value) => value instanceof AsyncResult ? convert(value) : value;
|
|
15
|
+
const call = (target, method, name) => {
|
|
16
|
+
if (typeof method !== "function") throw new TypeError(`better-supabase: ${name} is not a function`);
|
|
17
|
+
return (...args) => wrap(method.apply(target, args));
|
|
18
|
+
};
|
|
19
|
+
const repositories = /* @__PURE__ */ new WeakMap();
|
|
20
|
+
const repository = (target, name) => {
|
|
21
|
+
if (typeof target !== "object" || target === null) throw new TypeError(`better-supabase: unknown table ${name}`);
|
|
22
|
+
const cached = repositories.get(target);
|
|
23
|
+
if (cached) return cached;
|
|
24
|
+
const wrapped = Object.fromEntries(Object.entries(target).map(([key, value]) => [key, typeof value === "function" ? call(target, value, key) : value]));
|
|
25
|
+
repositories.set(target, wrapped);
|
|
26
|
+
return wrapped;
|
|
27
|
+
};
|
|
28
|
+
const result = {
|
|
29
|
+
$db: db,
|
|
30
|
+
$from: convert,
|
|
31
|
+
$table: (name) => repository(db.$table(name), name),
|
|
32
|
+
$list: (list, query, extra) => wrap(list.run(db, query, extra))
|
|
33
|
+
};
|
|
34
|
+
for (const key of HELPERS) result[key] = call(db, db[key], `db.${key}`);
|
|
35
|
+
for (const key in db) {
|
|
36
|
+
if (key.startsWith("$")) continue;
|
|
37
|
+
Object.defineProperty(result, key, {
|
|
38
|
+
enumerable: true,
|
|
39
|
+
get: () => repository(db.$table(key), key)
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* A view of `db` whose repository methods, `$rpc`, `$run`, `$many`,
|
|
46
|
+
* `$search` and list queries (`$list`) return better-result `Result`
|
|
47
|
+
* values. `toResult` is a `defineBetterResultErrors` converter or
|
|
48
|
+
* `{ Result, mapError }`. `db` itself is unchanged, and `$db` returns it.
|
|
49
|
+
*
|
|
50
|
+
* ```ts
|
|
51
|
+
* import { Result, TaggedError } from 'better-result';
|
|
52
|
+
* import { defineBetterResultErrors } from 'better-supabase';
|
|
53
|
+
* import { withBetterResult } from 'better-supabase/better-result';
|
|
54
|
+
*
|
|
55
|
+
* const toResult = defineBetterResultErrors(Result, { not_found: NotFound }, DbFailure);
|
|
56
|
+
* const rdb = withBetterResult(db, toResult);
|
|
57
|
+
* const customer = await rdb.customers.findById(id); // Result<Customer, NotFound | DbFailure>
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
function withBetterResult(db, toResult) {
|
|
61
|
+
return view(db, converterOf(toResult));
|
|
62
|
+
}
|
|
63
|
+
//#endregion
|
|
64
|
+
export { withBetterResult };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { n as decodeJwtPayload } from "./base64-D2gsioCY.js";
|
|
2
2
|
import { i as userContext } from "./impersonation-DcqaTBHx.js";
|
|
3
3
|
import { n as identityKey } from "./user-change-XzvgafU4.js";
|
|
4
|
-
import { n as createQueries } from "./query-
|
|
4
|
+
import { n as createQueries } from "./query-Ctz-qKRx.js";
|
|
5
5
|
//#region src/client/bind.ts
|
|
6
6
|
const LOADING = {
|
|
7
7
|
status: "loading",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { a as AnyModels, i as AnyFunctions } from "./types-
|
|
2
|
-
import {
|
|
3
|
-
import { s as BetterQueries } from "./index-
|
|
1
|
+
import { a as AnyModels, i as AnyFunctions } from "./types-CoE5Zwy4.js";
|
|
2
|
+
import { _ as Db, t as BetterSupabase } from "./define-DmcfoNXB.js";
|
|
3
|
+
import { s as BetterQueries } from "./index-DoNVLHOU.js";
|
|
4
4
|
import { SupabaseClient } from "@supabase/supabase-js";
|
|
5
5
|
//#region src/client/bind.d.ts
|
|
6
6
|
interface AuthUser {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { t as cloneValue } from "./clone-
|
|
1
|
+
import { t as cloneValue } from "./clone-dN9XOL1K.js";
|
|
2
2
|
import { s as nowInstant } from "./temporal-BJGitm-h.js";
|
|
3
3
|
//#region src/core/block-events.ts
|
|
4
4
|
/**
|
|
@@ -57,10 +57,25 @@ function emitBlockEvent(events, type, data, meta = {}) {
|
|
|
57
57
|
...meta,
|
|
58
58
|
type,
|
|
59
59
|
data: cloneValue(data),
|
|
60
|
-
time: nowInstant()
|
|
60
|
+
time: (events.now ?? nowInstant)()
|
|
61
61
|
};
|
|
62
62
|
events.emit("block", event);
|
|
63
63
|
}
|
|
64
|
+
/**
|
|
65
|
+
* The `emit` a block creator calls: skips the work without an event hub and
|
|
66
|
+
* adds the actor and request context from the block's options.
|
|
67
|
+
*/
|
|
68
|
+
function blockEmitter(options) {
|
|
69
|
+
return (type, data, subject, tenant) => {
|
|
70
|
+
if (!options.events) return;
|
|
71
|
+
emitBlockEvent(options.events, type, data, {
|
|
72
|
+
subject,
|
|
73
|
+
...tenant ? { tenant } : {},
|
|
74
|
+
...options.actorId ? { actorId: options.actorId } : {},
|
|
75
|
+
...options.context ? { context: options.context } : {}
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
}
|
|
64
79
|
const matches = (pattern, type) => pattern.endsWith(".*") ? type.startsWith(pattern.slice(0, -1)) : pattern === type;
|
|
65
80
|
/**
|
|
66
81
|
* Listens to the block events that match `pattern` (`'support.started'` or
|
|
@@ -73,4 +88,4 @@ function onBlockEvent(betterSupabase, pattern, handler) {
|
|
|
73
88
|
});
|
|
74
89
|
}
|
|
75
90
|
//#endregion
|
|
76
|
-
export {
|
|
91
|
+
export { emitBlockEvent as a, blockEventAttributes as i, BLOCK_EVENT_RENAMES as n, onBlockEvent as o, blockEmitter as r, BLOCK_ATTRIBUTES as t };
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { n as dbError } from "./errors-
|
|
2
|
-
import { a as ok, r as err } from "./result-
|
|
3
|
-
import { t as toIssues } from "./standard-
|
|
1
|
+
import { n as dbError } from "./errors-2M6CKMP4.js";
|
|
2
|
+
import { a as ok, r as err } from "./result-DEqHCMKP.js";
|
|
3
|
+
import { t as toIssues } from "./standard-DkzZUneg.js";
|
|
4
4
|
//#region src/core/block-fields.ts
|
|
5
5
|
const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6
6
|
async function run(schema, value) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { f as Result } from "./result-
|
|
2
|
-
import { t as StandardSchemaV1 } from "./standard-
|
|
1
|
+
import { f as Result } from "./result-BchM1XZn.js";
|
|
2
|
+
import { t as StandardSchemaV1 } from "./standard-lmkbOtPB.js";
|
|
3
3
|
//#region src/core/block-fields.d.ts
|
|
4
4
|
/** The fields a `fields` schema adds, or none when the block has no schema. */
|
|
5
5
|
type FieldsOf<S> = S extends StandardSchemaV1<unknown, infer O> ? O extends object ? O : never : Record<never, never>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as AsyncResult, w as ErrorMapper } from "./result-
|
|
2
|
-
import { t as BlockTransport } from "./block-transport-
|
|
1
|
+
import { t as AsyncResult, w as ErrorMapper } from "./result-BchM1XZn.js";
|
|
2
|
+
import { t as BlockTransport } from "./block-transport-inD4fFq-.js";
|
|
3
3
|
//#region src/core/block-helpers.d.ts
|
|
4
4
|
/** The `temporal` option every block creator takes. */
|
|
5
5
|
interface BlockTemporalOptions {
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { c as mapDbError, n as dbError } from "./errors-
|
|
1
|
+
import { c as mapDbError, n as dbError, r as dbErrorOf } from "./errors-2M6CKMP4.js";
|
|
2
2
|
import { l as provideTemporal } from "./temporal-BJGitm-h.js";
|
|
3
|
-
import { t as temporal } from "./temporal-required-
|
|
4
|
-
import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-
|
|
5
|
-
import {
|
|
6
|
-
import { t as
|
|
3
|
+
import { t as temporal } from "./temporal-required-BtynQtM-.js";
|
|
4
|
+
import { a as ok, r as err, s as toDbError, t as AsyncResult } from "./result-DEqHCMKP.js";
|
|
5
|
+
import { n as isRecord } from "./guards-6F2bCtQR.js";
|
|
6
|
+
import { t as fromPgError } from "./executor-B_Hfobee.js";
|
|
7
|
+
import { n as rawError } from "./block-transport-bAKh-dGc.js";
|
|
7
8
|
//#region src/core/block-helpers.ts
|
|
8
9
|
/** Provides `options.temporal`, when set, for the block's time values. */
|
|
9
10
|
function applyTemporal(options) {
|
|
@@ -11,6 +12,16 @@ function applyTemporal(options) {
|
|
|
11
12
|
}
|
|
12
13
|
/** The block schema when the options name none. */
|
|
13
14
|
const DEFAULT_BLOCK_SCHEMA = "better_supabase";
|
|
15
|
+
/**
|
|
16
|
+
* A thrown error as a `DbError`: a database error goes through the app's
|
|
17
|
+
* mappers first, and a `DbError` a transport already built stays as it is.
|
|
18
|
+
*/
|
|
19
|
+
function toBlockError(cause, mappers = []) {
|
|
20
|
+
const known = dbErrorOf(cause);
|
|
21
|
+
if (known) return known;
|
|
22
|
+
const raw = rawError(cause);
|
|
23
|
+
return raw ? mapDbError(raw, mappers) : toDbError(cause);
|
|
24
|
+
}
|
|
14
25
|
/** A `BlockCall` over `transport`, in `schema`, with the app's error mappers first. */
|
|
15
26
|
function blockCall(transport, schema = DEFAULT_BLOCK_SCHEMA, mappers = []) {
|
|
16
27
|
return (fn, args, then) => AsyncResult.from(async () => {
|
|
@@ -18,13 +29,30 @@ function blockCall(transport, schema = DEFAULT_BLOCK_SCHEMA, mappers = []) {
|
|
|
18
29
|
try {
|
|
19
30
|
value = await transport.call(schema, fn, args);
|
|
20
31
|
} catch (cause) {
|
|
21
|
-
|
|
22
|
-
return err(raw ? mapDbError(raw, mappers) : toDbError(cause));
|
|
32
|
+
return err(toBlockError(cause, mappers));
|
|
23
33
|
}
|
|
24
34
|
return ok(await then(value));
|
|
25
35
|
});
|
|
26
36
|
}
|
|
27
|
-
|
|
37
|
+
/** A budget of `ms` milliseconds from now, or none for `undefined`. `now` is injectable for tests. */
|
|
38
|
+
function budget(ms, now = Date.now) {
|
|
39
|
+
const deadline = ms === void 0 ? Number.POSITIVE_INFINITY : now() + ms;
|
|
40
|
+
return {
|
|
41
|
+
deadline,
|
|
42
|
+
expired: () => now() >= deadline,
|
|
43
|
+
remaining: () => deadline - now()
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Calls `extend` at half the lease (at least every second) until the returned
|
|
48
|
+
* function is called, so work that outlasts its lease keeps it.
|
|
49
|
+
*/
|
|
50
|
+
function leaseHeartbeat(leaseSeconds, extend) {
|
|
51
|
+
const timer = setInterval(extend, Math.max(1e3, leaseSeconds * 1e3 / 2));
|
|
52
|
+
return () => {
|
|
53
|
+
clearInterval(timer);
|
|
54
|
+
};
|
|
55
|
+
}
|
|
28
56
|
const textOf = (value) => typeof value === "string" ? value : String(value);
|
|
29
57
|
const optionalText = (value) => value === null || value === void 0 ? void 0 : textOf(value);
|
|
30
58
|
/** A function result that must be an object. */
|
|
@@ -63,6 +91,10 @@ function credentialRefOf(value) {
|
|
|
63
91
|
const notFoundError = (message, hint) => dbError("not_found", message, hint === void 0 ? {} : { hint });
|
|
64
92
|
/** A `timestamptz` from jsonb or `pg`, or `undefined` for null. */
|
|
65
93
|
const optionalInstant = (value) => value === null || value === void 0 ? void 0 : value instanceof Date || typeof value === "string" ? toInstant(value) : void 0;
|
|
94
|
+
/** Text from jsonb, or `null` when it is missing or not text. */
|
|
95
|
+
const nullableText = (value) => optionalText(value) ?? null;
|
|
96
|
+
/** A `timestamptz` from jsonb or `pg`, or `null` when it is missing. */
|
|
97
|
+
const nullableInstant = (value) => optionalInstant(value) ?? null;
|
|
66
98
|
/** A `timestamptz` that must be there; throws when it is null or missing. */
|
|
67
99
|
function requiredInstant(value, field) {
|
|
68
100
|
const instant = optionalInstant(value);
|
|
@@ -187,4 +219,4 @@ function pageOf(options = {}) {
|
|
|
187
219
|
};
|
|
188
220
|
}
|
|
189
221
|
//#endregion
|
|
190
|
-
export {
|
|
222
|
+
export { stringsOf as A, recordOrEmpty as C, seconds as D, run as E, toBlockError as M, toInstant as N, sha256Hex as O, workerId as P, recordOf as S, requiredInstant as T, optionalInstant as _, budget as a, randomToken as b, enumOrThrow as c, instantArg as d, leaseHeartbeat as f, oneOf as g, nullableText as h, blockCall as i, textOf as j, sleep as k, errorText as l, nullableInstant as m, applyTemporal as n, credentialRefOf as o, notFoundError as p, asDbError as r, eachLimit as s, DEFAULT_BLOCK_SCHEMA as t, injectableOf as u, optionalText as v, recordsOf as w, readBodyCapped as x, pageOf as y };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as dbError, o as isDbError } from "./errors-
|
|
2
|
-
import { r as err, t as AsyncResult } from "./result-
|
|
1
|
+
import { n as dbError, o as isDbError } from "./errors-2M6CKMP4.js";
|
|
2
|
+
import { r as err, t as AsyncResult } from "./result-DEqHCMKP.js";
|
|
3
3
|
import { t as consoleLogger } from "./logger-glM28NVN.js";
|
|
4
|
-
import { i as blockCall } from "./block-helpers-
|
|
4
|
+
import { i as blockCall } from "./block-helpers-Cy3pB96I.js";
|
|
5
5
|
//#region src/core/block-hooks.ts
|
|
6
6
|
const isPlainObject = (value) => {
|
|
7
7
|
const proto = Object.getPrototypeOf(value);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { b as DbError, f as Result, t as AsyncResult, w as ErrorMapper } from "./result-
|
|
2
|
-
import { t as BlockTransport } from "./block-transport-
|
|
1
|
+
import { b as DbError, f as Result, t as AsyncResult, w as ErrorMapper } from "./result-BchM1XZn.js";
|
|
2
|
+
import { t as BlockTransport } from "./block-transport-inD4fFq-.js";
|
|
3
3
|
import { n as Logger } from "./logger-DWVYUmwi.js";
|
|
4
|
-
import { t as BlockCall } from "./block-helpers-
|
|
4
|
+
import { t as BlockCall } from "./block-helpers-C0Xj8War.js";
|
|
5
5
|
//#region src/core/block-hooks.d.ts
|
|
6
6
|
/** A block method: anything that returns an `AsyncResult`. */
|
|
7
7
|
type BlockMethod = (...args: never[]) => AsyncResult<unknown>;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as DbException } from "./db-exception-CnWcYPxL.js";
|
|
2
|
+
import { i as sqlIdent } from "./template-lPVh-EwW.js";
|
|
2
3
|
//#region src/core/block-transport.ts
|
|
3
4
|
/**
|
|
4
5
|
* Calls the functions over Postgres, as the user `client` runs as:
|
|
@@ -31,6 +32,31 @@ function rpcTransport(client, options = {}) {
|
|
|
31
32
|
return data;
|
|
32
33
|
} };
|
|
33
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Calls the functions through a `Db`'s executor, so a block runs wherever
|
|
37
|
+
* the `Db` does: over PostgREST for `ctx.db` in a normal request, and over
|
|
38
|
+
* direct Postgres as the target in a support session or for an API key.
|
|
39
|
+
* Rejects with the raw database error, like the other transports, so the
|
|
40
|
+
* block's error mappers see the same codes and hints.
|
|
41
|
+
*/
|
|
42
|
+
function dbTransport(db, options = {}) {
|
|
43
|
+
return { async call(schema, fn, args) {
|
|
44
|
+
const executor = db.$executor;
|
|
45
|
+
if (!executor.rpc) throw new TypeError(`dbTransport needs an executor with rpc(); the ${executor.name} executor has none`);
|
|
46
|
+
let raw;
|
|
47
|
+
const capture = (error) => {
|
|
48
|
+
raw = error;
|
|
49
|
+
};
|
|
50
|
+
const defined = Object.fromEntries(Object.entries(args).filter(([, value]) => value !== void 0));
|
|
51
|
+
const result = await executor.rpc(fn, defined, {
|
|
52
|
+
schema: options.schema ?? schema,
|
|
53
|
+
errorMappers: [capture]
|
|
54
|
+
});
|
|
55
|
+
if (result.ok) return result.data;
|
|
56
|
+
if (raw === void 0) throw new DbException(result.error);
|
|
57
|
+
throw Object.assign(new Error(raw.message ?? result.error.message), raw);
|
|
58
|
+
} };
|
|
59
|
+
}
|
|
34
60
|
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
35
61
|
/** The Postgres or PostgREST error a transport rejected with, if it is one. */
|
|
36
62
|
function rawError(cause) {
|
|
@@ -56,4 +82,4 @@ function rawError(cause) {
|
|
|
56
82
|
return raw;
|
|
57
83
|
}
|
|
58
84
|
//#endregion
|
|
59
|
-
export {
|
|
85
|
+
export { sqlTransport as i, rawError as n, rpcTransport as r, dbTransport as t };
|