better-supabase 0.5.0 → 0.6.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 +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/impersonation-DcqaTBHx.js +148 -0
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +330 -194
- package/dist/sql/index.js +34901 -6489
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +343 -37
- package/dist/testing/index.js +1186 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +62 -18
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -100
|
@@ -1,49 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { b as DbError } from "./result-D7y2fT87.js";
|
|
3
|
+
import { m as RequestContext } from "./plugin-FGY8UhYm.js";
|
|
4
|
+
import { l as RefreshEvent } from "./events-DWDhx77e.js";
|
|
5
|
+
import { n as Logger } from "./logger-DWVYUmwi.js";
|
|
6
|
+
import { t as StandardSchemaV1 } from "./standard-CYsm7xpT.js";
|
|
5
7
|
import { t as BetterSupabaseEnv } from "./index-CLg87OBW.js";
|
|
6
|
-
import { CookieOptions } from "
|
|
8
|
+
import { a as CookieWrite, n as CookieOptions, r as CookieRecord, s as SessionEncoding } from "./session-ChiXDZdZ.js";
|
|
7
9
|
import { JWTClaims, SupabaseEnv, UserClaims } from "@supabase/server";
|
|
8
|
-
//#region src/auth/session.d.ts
|
|
9
|
-
/** The session object auth-js persists (`sb-<ref>-auth-token`). */
|
|
10
|
-
interface StoredSession {
|
|
11
|
-
readonly access_token: string;
|
|
12
|
-
readonly refresh_token: string;
|
|
13
|
-
readonly expires_at?: number;
|
|
14
|
-
readonly expires_in?: number;
|
|
15
|
-
readonly token_type?: string;
|
|
16
|
-
readonly user?: unknown;
|
|
17
|
-
readonly [key: string]: unknown;
|
|
18
|
-
}
|
|
19
|
-
interface CookieRecord {
|
|
20
|
-
readonly name: string;
|
|
21
|
-
readonly value: string;
|
|
22
|
-
}
|
|
23
|
-
interface CookieWrite {
|
|
24
|
-
readonly name: string;
|
|
25
|
-
readonly value: string;
|
|
26
|
-
readonly options: CookieOptions;
|
|
27
|
-
}
|
|
28
|
-
/** Headers that keep responses carrying session cookies out of shared caches. */
|
|
29
|
-
declare const AUTH_CACHE_HEADERS: Readonly<Record<string, string>>;
|
|
30
|
-
/** `sb-<first label of the hostname>-auth-token`, the supabase-js default. */
|
|
31
|
-
declare function sessionCookieName(url: string): string;
|
|
32
|
-
declare function parseCookies(header: string | null | undefined): CookieRecord[];
|
|
33
|
-
declare function serializeCookie(write: CookieWrite): string;
|
|
34
|
-
/**
|
|
35
|
-
* Reads the session written by `@supabase/ssr` (plain or `base64-`, whole or
|
|
36
|
-
* chunked). Mismatched chunks from a partial write read as no session.
|
|
37
|
-
*/
|
|
38
|
-
declare function readSession(cookies: readonly CookieRecord[], name: string): StoredSession | null;
|
|
39
|
-
/**
|
|
40
|
-
* Cookie writes that store `session` (or clear it with `null`) exactly like
|
|
41
|
-
* `@supabase/ssr`, and expire chunks the new value no longer uses.
|
|
42
|
-
*/
|
|
43
|
-
declare function writeSession(existing: readonly CookieRecord[], name: string, session: StoredSession | null, options?: CookieOptions): CookieWrite[];
|
|
44
|
-
/** Applies cookie writes to a cookie list, as the next request would see it. */
|
|
45
|
-
declare function applyCookieWrites(cookies: readonly CookieRecord[], writes: readonly CookieWrite[]): CookieRecord[];
|
|
46
|
-
//#endregion
|
|
47
10
|
//#region src/auth/resolve.d.ts
|
|
48
11
|
/**
|
|
49
12
|
* Who is calling. `C` is the claims type from `betterSupabase.claims(schema)`; the
|
|
@@ -67,6 +30,19 @@ type AuthState<C = unknown, P = unknown> = {
|
|
|
67
30
|
} | {
|
|
68
31
|
readonly kind: "service";
|
|
69
32
|
readonly keyName: string;
|
|
33
|
+
} | {
|
|
34
|
+
readonly kind: "apiKey";
|
|
35
|
+
readonly keyId: string;
|
|
36
|
+
readonly name: string;
|
|
37
|
+
readonly organizationId?: string;
|
|
38
|
+
readonly userId?: string;
|
|
39
|
+
readonly scopes: readonly string[];
|
|
40
|
+
/** When the key was created. */
|
|
41
|
+
readonly createdAt?: Temporal.Instant;
|
|
42
|
+
/** The user who created the key, when the row records one. */
|
|
43
|
+
readonly createdBy?: string;
|
|
44
|
+
/** `sub` (the user, or the key for an organization key), `role: authenticated` and `api_key`. */
|
|
45
|
+
readonly claims: JWTClaims;
|
|
70
46
|
} | {
|
|
71
47
|
readonly kind: "anon";
|
|
72
48
|
/** `expired`: the cookie session needs a refresh that was not allowed here (run the proxy). */
|
|
@@ -108,6 +84,7 @@ interface ResolveAuthOptions {
|
|
|
108
84
|
readonly leeway?: number;
|
|
109
85
|
/** Milliseconds before a refresh counts as a network failure. Defaults to 5000. */
|
|
110
86
|
readonly refreshTimeoutMs?: number;
|
|
87
|
+
readonly checkSession?: boolean;
|
|
111
88
|
/**
|
|
112
89
|
* Accept `sb_secret_` keys (`apikey` header) as service callers: `true` for
|
|
113
90
|
* any configured key, or the key names allowed (`['cron']`). Defaults to false.
|
|
@@ -118,6 +95,12 @@ interface ResolveAuthOptions {
|
|
|
118
95
|
readonly cookie?: {
|
|
119
96
|
readonly name?: string;
|
|
120
97
|
readonly options?: CookieOptions;
|
|
98
|
+
/**
|
|
99
|
+
* The shape refreshed sessions are written in, `cookies.encode` in
|
|
100
|
+
* `@supabase/ssr`. Use the browser client's value. Defaults to
|
|
101
|
+
* `user-and-tokens`.
|
|
102
|
+
*/
|
|
103
|
+
readonly encode?: SessionEncoding;
|
|
121
104
|
};
|
|
122
105
|
/**
|
|
123
106
|
* Read the session cookie. Defaults to true. `false` suits endpoints only
|
|
@@ -164,6 +147,7 @@ interface AuthResolution<C = unknown, P = unknown> {
|
|
|
164
147
|
readonly requestCookies: readonly CookieRecord[];
|
|
165
148
|
/** Adds `cookies` and `headers` to a response. */
|
|
166
149
|
apply(response: Response): Response;
|
|
150
|
+
readonly sessionEnded?: boolean;
|
|
167
151
|
}
|
|
168
152
|
/** The first `x-forwarded-for` hop, the client as your edge saw it. */
|
|
169
153
|
declare function clientIp(request: Request): string | undefined;
|
|
@@ -179,4 +163,4 @@ declare function resolveAuth(request: Request, options: ResolveAuthOptions): Pro
|
|
|
179
163
|
/** The repository context (`actor`, `claims`) for an auth state. */
|
|
180
164
|
declare function authContext(auth: AuthState): RequestContext;
|
|
181
165
|
//#endregion
|
|
182
|
-
export {
|
|
166
|
+
export { ResolveAuthOptions as a, clientIp as c, InvalidReason as i, resolveAuth as l, AuthResolver as n, ResolvedState as o, AuthState as r, authContext as s, AuthResolution as t };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { n as dbError } from "./errors-
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
1
|
+
import { n as dbError } from "./errors-B11Duf73.js";
|
|
2
|
+
import { a as ok, r as err } from "./result-DzUbqgdW.js";
|
|
3
|
+
import { n as validate } from "./standard-BK0cqJ7y.js";
|
|
4
|
+
import { a as respond } from "./respond-BUgsXNgk.js";
|
|
5
5
|
//#region src/server/resource.ts
|
|
6
6
|
const INTEGER = /* @__PURE__ */ new Set([
|
|
7
7
|
"int2",
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { i as ResourceOperation } from "./index-
|
|
1
|
+
import { E as ValidationIssue, f as Result } from "./result-D7y2fT87.js";
|
|
2
|
+
import { H as Update, L as TableKey, R as TableMeta, a as AnyModels, i as AnyFunctions, x as Insert } from "./types-6BdhkmZe.js";
|
|
3
|
+
import { It as SelectArg, t as BetterSupabase } from "./define-CJJkkr1-.js";
|
|
4
|
+
import { a as RespondOptions } from "./respond-DoBijysA.js";
|
|
5
|
+
import { i as ResourceOperation } from "./index-Bxih3l0u.js";
|
|
6
6
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
7
7
|
//#region src/server/resource.d.ts
|
|
8
8
|
/** What a resource needs from `defineListQuery`. */
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { n as dbError, o as isDbError, r as dbErrorOf } from "./errors-B11Duf73.js";
|
|
2
|
+
import { s as toDbError } from "./result-DzUbqgdW.js";
|
|
3
|
+
import { a as problemResponse } from "./problem-BreOl8b8.js";
|
|
4
|
+
import { a as actorOf, o as delegationOf } from "./impersonation-DcqaTBHx.js";
|
|
5
|
+
import { a as checkAal, t as isAnonymousUser } from "./view-BeFcRV6G.js";
|
|
6
|
+
import { n as jsonResponse } from "./json-CEnpTHlZ.js";
|
|
7
|
+
//#region src/server/respond.ts
|
|
8
|
+
/**
|
|
9
|
+
* The scopes a delegated user token lacks. Empty for the user's own session,
|
|
10
|
+
* which a support or impersonated session counts as: only an `oauth-client`
|
|
11
|
+
* actor is limited to what the user delegated.
|
|
12
|
+
*/
|
|
13
|
+
function missingScopes(auth, required) {
|
|
14
|
+
if (required.length === 0) return [];
|
|
15
|
+
const outcome = actorOf(auth.claims);
|
|
16
|
+
if (!outcome.ok || outcome.actor?.kind !== "oauth-client") return [];
|
|
17
|
+
const granted = new Set(delegationOf(auth.claims)?.scopes);
|
|
18
|
+
return required.filter((scope) => !granted.has(scope));
|
|
19
|
+
}
|
|
20
|
+
/** An API key's `*` scope grants every scope. */
|
|
21
|
+
function missingKeyScopes(granted, required) {
|
|
22
|
+
if (granted.includes("*")) return [];
|
|
23
|
+
return required.filter((scope) => !granted.includes(scope));
|
|
24
|
+
}
|
|
25
|
+
/** `undefined` when `auth` may pass; otherwise the 401/403 error to send. */
|
|
26
|
+
function guard(auth, allow = ["user"], aal = "aal1", scopes = []) {
|
|
27
|
+
if (auth.kind === "invalid") return auth.error;
|
|
28
|
+
const anonymous = auth.kind === "user" && isAnonymousUser(auth.claims);
|
|
29
|
+
if (anonymous ? allow.includes("anonymous") : allow.includes(auth.kind)) {
|
|
30
|
+
const denied = checkAal(auth, aal);
|
|
31
|
+
if (denied) return denied;
|
|
32
|
+
if (auth.kind !== "user" && auth.kind !== "apiKey") return void 0;
|
|
33
|
+
const missing = auth.kind === "apiKey" ? missingKeyScopes(auth.scopes, scopes) : missingScopes(auth, scopes);
|
|
34
|
+
return missing.length > 0 ? dbError("forbidden", `The token lacks the scope ${missing.join(" ")}`, {
|
|
35
|
+
code: "INSUFFICIENT_SCOPE",
|
|
36
|
+
scopes
|
|
37
|
+
}) : void 0;
|
|
38
|
+
}
|
|
39
|
+
if (anonymous) return dbError("forbidden", "Sign up to continue", { code: "ANONYMOUS_USER" });
|
|
40
|
+
return auth.kind === "anon" ? dbError("unauthorized", "Sign in to continue", { code: "MISSING_CREDENTIALS" }) : dbError("forbidden", `A ${auth.kind} caller is not allowed here`);
|
|
41
|
+
}
|
|
42
|
+
function isResult(value) {
|
|
43
|
+
return typeof value === "object" && value !== null && "ok" in value && "data" in value && "error" in value;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Settles a handler's return value: `Result`s and `AsyncResult`s unwrap,
|
|
47
|
+
* thrown `DbException`s (or errors whose `cause` is a `DbError`) become
|
|
48
|
+
* errors, anything else is data. Other thrown
|
|
49
|
+
* errors propagate.
|
|
50
|
+
*/
|
|
51
|
+
async function settle(run) {
|
|
52
|
+
try {
|
|
53
|
+
const value = await run();
|
|
54
|
+
if (!isResult(value)) return {
|
|
55
|
+
ok: true,
|
|
56
|
+
data: value
|
|
57
|
+
};
|
|
58
|
+
if (value.ok) return {
|
|
59
|
+
ok: true,
|
|
60
|
+
data: value.data
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
ok: false,
|
|
64
|
+
error: isDbError(value.error) ? value.error : toDbError(value.error)
|
|
65
|
+
};
|
|
66
|
+
} catch (cause) {
|
|
67
|
+
const thrown = dbErrorOf(cause);
|
|
68
|
+
if (thrown) return {
|
|
69
|
+
ok: false,
|
|
70
|
+
error: thrown
|
|
71
|
+
};
|
|
72
|
+
throw cause;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
/** A handler's value as a response: `Response` as is, data as JSON, errors as Problem Details. */
|
|
76
|
+
async function respond(run, options = {}) {
|
|
77
|
+
const settled = await settle(run);
|
|
78
|
+
if (!settled.ok) return problemResponse(settled.error, options);
|
|
79
|
+
if (settled.data instanceof Response) return settled.data;
|
|
80
|
+
if (settled.data === void 0) return new Response(null, { status: 204 });
|
|
81
|
+
return jsonResponse(settled.data, { status: options.status ?? 200 });
|
|
82
|
+
}
|
|
83
|
+
/** Prefetching the JWKS would add a network call to every test that builds a server. */
|
|
84
|
+
function defaultPrefetchJwks() {
|
|
85
|
+
return typeof process === "undefined" || process.env["NODE_ENV"] !== "test";
|
|
86
|
+
}
|
|
87
|
+
function defaultExpose() {
|
|
88
|
+
return typeof process !== "undefined" && process.env["NODE_ENV"] === "development";
|
|
89
|
+
}
|
|
90
|
+
//#endregion
|
|
91
|
+
export { respond as a, isResult as i, defaultPrefetchJwks as n, settle as o, guard as r, defaultExpose as t };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { b as DbError } from "./result-D7y2fT87.js";
|
|
2
|
+
import { r as AuthState } from "./resolve-KW8nCeL6.js";
|
|
3
|
+
import { t as Aal } from "./mfa-Daak8ukG.js";
|
|
4
|
+
//#region src/server/refresh.d.ts
|
|
5
|
+
/** A router or browser prefetch, by its request headers. */
|
|
6
|
+
declare function isPrefetch(request: Request): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Whether a request should refresh an expired session cookie: page loads,
|
|
9
|
+
* client navigations (`rsc`, `x-sveltekit-*`, `_data` loaders), form posts
|
|
10
|
+
* and Server Actions. Prefetches, assets and `fetch` calls from scripts
|
|
11
|
+
* read the session as it is, so a burst of parallel requests never races
|
|
12
|
+
* on the single-use refresh token.
|
|
13
|
+
*/
|
|
14
|
+
declare function shouldRefresh(request: Request): boolean;
|
|
15
|
+
/**
|
|
16
|
+
* Whether a request should ask the Auth server if the session still exists
|
|
17
|
+
* (`checkSession`): full page loads, and `paths` you list for client
|
|
18
|
+
* navigations. Never prefetches or mutations.
|
|
19
|
+
*/
|
|
20
|
+
declare function shouldCheckSession(request: Request, paths?: readonly string[]): boolean;
|
|
21
|
+
/** When a session entry refreshes: always, never, on navigations, or a predicate. */
|
|
22
|
+
type RefreshPolicy = boolean | "navigation" | ((request: Request) => boolean);
|
|
23
|
+
/** `policy` for one request. */
|
|
24
|
+
declare function refreshFor(policy: RefreshPolicy | undefined, request: Request): boolean | undefined;
|
|
25
|
+
//#endregion
|
|
26
|
+
//#region src/server/respond.d.ts
|
|
27
|
+
type AuthKind = AuthState["kind"];
|
|
28
|
+
/**
|
|
29
|
+
* An auth kind a guard lets through. `anonymous` admits users signed in with
|
|
30
|
+
* `signInAnonymously()` (`is_anonymous`); `anon` admits callers without a
|
|
31
|
+
* session only.
|
|
32
|
+
*/
|
|
33
|
+
type AllowedCaller = Exclude<AuthKind, "invalid"> | "anonymous";
|
|
34
|
+
interface GuardOptions {
|
|
35
|
+
/**
|
|
36
|
+
* Callers allowed through. Defaults to `['user']`, which refuses anonymous
|
|
37
|
+
* sign-ins. Only `'anonymous'` admits them: `['anonymous']` alone admits
|
|
38
|
+
* anonymous sign-ins and refuses other users, and `'anon'` (no session)
|
|
39
|
+
* never admits them.
|
|
40
|
+
*/
|
|
41
|
+
readonly allow?: readonly AllowedCaller[];
|
|
42
|
+
/**
|
|
43
|
+
* Assurance level user sessions need. `aal2` answers 403 with
|
|
44
|
+
* `required: 'aal2'` until the user verifies a second factor.
|
|
45
|
+
*/
|
|
46
|
+
readonly aal?: Aal;
|
|
47
|
+
/**
|
|
48
|
+
* OAuth scopes a delegated token (an OAuth client or an `act` chain) or an
|
|
49
|
+
* API key needs. A missing one answers 403 with `error="insufficient_scope"`.
|
|
50
|
+
* The user's own session is not limited by scopes.
|
|
51
|
+
*/
|
|
52
|
+
readonly scopes?: readonly string[];
|
|
53
|
+
}
|
|
54
|
+
/** Guard options for middleware and fetch handlers that resolve the caller themselves. */
|
|
55
|
+
interface MiddlewareOptions extends GuardOptions {
|
|
56
|
+
/**
|
|
57
|
+
* Refresh an expired cookie session and send the new cookies. Only for
|
|
58
|
+
* routes browsers call with cookies; bearer tokens never refresh.
|
|
59
|
+
* `'navigation'` refreshes page loads and form posts only (`shouldRefresh`).
|
|
60
|
+
*/
|
|
61
|
+
readonly refresh?: RefreshPolicy;
|
|
62
|
+
}
|
|
63
|
+
/** `undefined` when `auth` may pass; otherwise the 401/403 error to send. */
|
|
64
|
+
declare function guard(auth: AuthState, allow?: GuardOptions["allow"], aal?: Aal, scopes?: readonly string[]): DbError | undefined;
|
|
65
|
+
declare function isResult(value: unknown): value is {
|
|
66
|
+
ok: boolean;
|
|
67
|
+
data: unknown;
|
|
68
|
+
error: unknown;
|
|
69
|
+
};
|
|
70
|
+
type Settled = {
|
|
71
|
+
readonly ok: true;
|
|
72
|
+
readonly data: unknown;
|
|
73
|
+
} | {
|
|
74
|
+
readonly ok: false;
|
|
75
|
+
readonly error: DbError;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Settles a handler's return value: `Result`s and `AsyncResult`s unwrap,
|
|
79
|
+
* thrown `DbException`s (or errors whose `cause` is a `DbError`) become
|
|
80
|
+
* errors, anything else is data. Other thrown
|
|
81
|
+
* errors propagate.
|
|
82
|
+
*/
|
|
83
|
+
declare function settle(run: () => unknown): Promise<Settled>;
|
|
84
|
+
interface RespondOptions {
|
|
85
|
+
readonly instance?: string;
|
|
86
|
+
readonly expose?: boolean;
|
|
87
|
+
/** Status for data responses. Defaults to 200 (204 without data). */
|
|
88
|
+
readonly status?: number;
|
|
89
|
+
}
|
|
90
|
+
/** A handler's value as a response: `Response` as is, data as JSON, errors as Problem Details. */
|
|
91
|
+
declare function respond(run: () => unknown, options?: RespondOptions): Promise<Response>;
|
|
92
|
+
//#endregion
|
|
93
|
+
export { RespondOptions as a, isResult as c, RefreshPolicy as d, isPrefetch as f, shouldRefresh as h, MiddlewareOptions as i, respond as l, shouldCheckSession as m, AuthKind as n, Settled as o, refreshFor as p, GuardOptions as r, guard as s, AllowedCaller as t, settle as u };
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
//#region src/core/errors.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Extra fields carried by each error kind. Plugins can add kinds through the
|
|
4
|
+
* `errors` extension point; apps that want the new kinds in the union can add
|
|
5
|
+
* them to this interface.
|
|
6
|
+
*/
|
|
7
|
+
interface DbErrorKinds {
|
|
8
|
+
not_found: Record<never, never>;
|
|
9
|
+
unauthorized: Record<never, never>;
|
|
10
|
+
/**
|
|
11
|
+
* `required`: the assurance level the route needs, when a second factor is
|
|
12
|
+
* missing. `scopes`: the OAuth scopes the route needs, when a delegated
|
|
13
|
+
* token lacks one (`INSUFFICIENT_SCOPE`).
|
|
14
|
+
*/
|
|
15
|
+
forbidden: {
|
|
16
|
+
required?: "aal1" | "aal2";
|
|
17
|
+
scopes?: readonly string[];
|
|
18
|
+
};
|
|
19
|
+
conflict: {
|
|
20
|
+
constraint?: string;
|
|
21
|
+
columns?: readonly string[];
|
|
22
|
+
};
|
|
23
|
+
foreign_key: {
|
|
24
|
+
constraint?: string;
|
|
25
|
+
columns?: readonly string[];
|
|
26
|
+
};
|
|
27
|
+
check: {
|
|
28
|
+
constraint?: string;
|
|
29
|
+
};
|
|
30
|
+
not_null: {
|
|
31
|
+
column?: string;
|
|
32
|
+
};
|
|
33
|
+
exclusion: {
|
|
34
|
+
constraint?: string;
|
|
35
|
+
};
|
|
36
|
+
invalid_input: Record<never, never>;
|
|
37
|
+
/** A stored value the app type can't hold, e.g. `infinity` for a Temporal timestamp. */
|
|
38
|
+
invalid_value: {
|
|
39
|
+
column?: string;
|
|
40
|
+
};
|
|
41
|
+
raised: Record<never, never>;
|
|
42
|
+
timeout: Record<never, never>;
|
|
43
|
+
serialization: Record<never, never>;
|
|
44
|
+
network: Record<never, never>;
|
|
45
|
+
aborted: Record<never, never>;
|
|
46
|
+
invalid_request: Record<never, never>;
|
|
47
|
+
validation: {
|
|
48
|
+
issues: readonly ValidationIssue[];
|
|
49
|
+
};
|
|
50
|
+
multiple_rows: Record<never, never>;
|
|
51
|
+
stale: Record<never, never>;
|
|
52
|
+
/**
|
|
53
|
+
* An `updateMany` or `deleteMany` matched more rows than its `maxAffected`
|
|
54
|
+
* allows; nothing was written. `maxAffected`: the limit, when known.
|
|
55
|
+
*/
|
|
56
|
+
max_affected: {
|
|
57
|
+
maxAffected?: number;
|
|
58
|
+
};
|
|
59
|
+
/** `retryAfter`: seconds until the window resets (the `Retry-After` header). */
|
|
60
|
+
rate_limited: {
|
|
61
|
+
retryAfter?: number;
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* A usage quota is used up (`consume_quota`, SQLSTATE `BSQ29`). `meter`:
|
|
65
|
+
* what was metered, `limit`: the quota, `retryAfter`: seconds until the
|
|
66
|
+
* period resets.
|
|
67
|
+
*/
|
|
68
|
+
quota_exceeded: {
|
|
69
|
+
meter?: string;
|
|
70
|
+
limit?: number;
|
|
71
|
+
retryAfter?: number;
|
|
72
|
+
};
|
|
73
|
+
/** The executor or its dialect can't run this operation (an include on SQLite, say). */
|
|
74
|
+
unsupported: Record<never, never>;
|
|
75
|
+
unexpected: Record<never, never>;
|
|
76
|
+
}
|
|
77
|
+
type DbErrorKind = keyof DbErrorKinds;
|
|
78
|
+
interface ValidationIssue {
|
|
79
|
+
readonly message: string;
|
|
80
|
+
readonly path?: readonly PropertyKey[];
|
|
81
|
+
}
|
|
82
|
+
interface DbErrorBase<K extends DbErrorKind> {
|
|
83
|
+
readonly kind: K;
|
|
84
|
+
readonly message: string;
|
|
85
|
+
/** SQLSTATE or PostgREST code (`23505`, `PGRST116`), when known. */
|
|
86
|
+
readonly code?: string;
|
|
87
|
+
/** Suggested HTTP status, used by the RFC 9457 mapping. */
|
|
88
|
+
readonly status: number;
|
|
89
|
+
readonly details?: string;
|
|
90
|
+
/** Postgres `HINT`. `raised` errors use it as an app-level error code. */
|
|
91
|
+
readonly hint?: string;
|
|
92
|
+
/** App-cased table key the operation ran against. */
|
|
93
|
+
readonly table?: string;
|
|
94
|
+
}
|
|
95
|
+
/**
|
|
96
|
+
* A database error as plain, serializable data. Safe to send across server
|
|
97
|
+
* action and RPC boundaries.
|
|
98
|
+
*/
|
|
99
|
+
type DbError = { [K in DbErrorKind]: DbErrorBase<K> & DbErrorKinds[K]; }[DbErrorKind];
|
|
100
|
+
type DbErrorOf<K extends DbErrorKind> = Extract<DbError, {
|
|
101
|
+
kind: K;
|
|
102
|
+
}>;
|
|
103
|
+
declare function statusOf(kind: DbErrorKind): number;
|
|
104
|
+
type ExtraOf<K extends DbErrorKind> = Record<never, never> extends DbErrorKinds[K] ? [extra?: DbErrorKinds[K] & Partial<Omit<DbErrorBase<K>, "kind">>] : [extra: DbErrorKinds[K] & Partial<Omit<DbErrorBase<K>, "kind">>];
|
|
105
|
+
/** Creates a `DbError` with the default status for its kind. */
|
|
106
|
+
declare function dbError<K extends DbErrorKind>(kind: K, message: string, ...[extra]: ExtraOf<K>): DbErrorOf<K>;
|
|
107
|
+
declare function isDbError(value: unknown): value is DbError;
|
|
108
|
+
/**
|
|
109
|
+
* A unique violation, optionally for one constraint. Accepts a `DbError` or a
|
|
110
|
+
* `DbException`. Pass the generated `UniqueConstraint` type to check names:
|
|
111
|
+
* `isConflict<UniqueConstraint>(error, 'customers_organization_id_kvk_key')`.
|
|
112
|
+
*/
|
|
113
|
+
declare const isConflict: <C extends string = string>(error: unknown, constraint?: NoInfer<C>) => error is DbErrorOf<"conflict"> & {
|
|
114
|
+
readonly constraint: C;
|
|
115
|
+
};
|
|
116
|
+
/** A CHECK violation, optionally for one constraint (`CheckConstraint`). */
|
|
117
|
+
declare const isCheck: <C extends string = string>(error: unknown, constraint?: NoInfer<C>) => error is DbErrorOf<"check"> & {
|
|
118
|
+
readonly constraint: C;
|
|
119
|
+
};
|
|
120
|
+
/** A foreign key violation, optionally for one constraint (`ForeignKeyConstraint`). */
|
|
121
|
+
declare const isForeignKey: <C extends string = string>(error: unknown, constraint?: NoInfer<C>) => error is DbErrorOf<"foreign_key"> & {
|
|
122
|
+
readonly constraint: C;
|
|
123
|
+
};
|
|
124
|
+
/** Raw error shape shared by PostgREST responses and `pg` errors. */
|
|
125
|
+
interface RawDbError {
|
|
126
|
+
readonly message?: string;
|
|
127
|
+
readonly code?: string;
|
|
128
|
+
readonly details?: string | null;
|
|
129
|
+
readonly hint?: string | null;
|
|
130
|
+
readonly constraint?: string;
|
|
131
|
+
readonly column?: string;
|
|
132
|
+
readonly table?: string;
|
|
133
|
+
readonly name?: string;
|
|
134
|
+
}
|
|
135
|
+
type ErrorMapper = (raw: RawDbError, fallback: DbError) => DbError | undefined;
|
|
136
|
+
/**
|
|
137
|
+
* Maps a PostgREST or Postgres error to a `DbError`. Custom mappers run
|
|
138
|
+
* first; the first one that returns an error wins.
|
|
139
|
+
*/
|
|
140
|
+
declare function mapDbError(raw: RawDbError, mappers?: readonly ErrorMapper[]): DbError;
|
|
141
|
+
//#endregion
|
|
142
|
+
//#region src/core/result.d.ts
|
|
143
|
+
/** Turns a `DbError` into the error `.orThrow()` throws; set with `betterSupabase.mapError()`. */
|
|
144
|
+
type ThrowMapper = (error: DbError) => unknown;
|
|
145
|
+
type Ok<T> = {
|
|
146
|
+
readonly ok: true;
|
|
147
|
+
readonly data: T;
|
|
148
|
+
readonly error: null;
|
|
149
|
+
};
|
|
150
|
+
type Err<E = DbError> = {
|
|
151
|
+
readonly ok: false;
|
|
152
|
+
readonly data: null;
|
|
153
|
+
readonly error: E;
|
|
154
|
+
};
|
|
155
|
+
type Result<T, E = DbError> = Ok<T> | Err<E>;
|
|
156
|
+
declare function ok<T>(data: T): Ok<T>;
|
|
157
|
+
declare function err<E = DbError>(error: E): Err<E>;
|
|
158
|
+
/**
|
|
159
|
+
* A lazy-free `PromiseLike<Result<T>>` with helpers. `await` gives the
|
|
160
|
+
* `Result`; `.orThrow()` gives the data or throws a `DbException`.
|
|
161
|
+
*/
|
|
162
|
+
declare class AsyncResult<T> implements PromiseLike<Result<T>> {
|
|
163
|
+
#private;
|
|
164
|
+
constructor(promise: Promise<Result<T>>);
|
|
165
|
+
static from<T>(run: () => Promise<Result<T>>): AsyncResult<T>;
|
|
166
|
+
static ok<T>(data: T): AsyncResult<T>;
|
|
167
|
+
static err<T = never>(error: DbError): AsyncResult<T>;
|
|
168
|
+
then<R1 = Result<T>, R2 = never>(onfulfilled?: ((value: Result<T>) => R1 | PromiseLike<R1>) | null, onrejected?: ((reason: unknown) => R2 | PromiseLike<R2>) | null): Promise<R1 | R2>;
|
|
169
|
+
/**
|
|
170
|
+
* Resolves with the data, or rejects with a `DbException`. Pass `factory`
|
|
171
|
+
* to throw your own error instead, e.g. an HTTP error for your framework;
|
|
172
|
+
* without it, the mapper from `betterSupabase.mapError()` applies when one is set.
|
|
173
|
+
*/
|
|
174
|
+
orThrow(factory?: (error: DbError) => unknown): Promise<T>;
|
|
175
|
+
/** Resolves with the data, or `fallback` when the result is an error. */
|
|
176
|
+
unwrapOr<F>(fallback: F): Promise<T | F>;
|
|
177
|
+
map<U>(fn: (data: T) => U): AsyncResult<U>;
|
|
178
|
+
mapError(fn: (error: DbError) => DbError): AsyncResult<T>;
|
|
179
|
+
andThen<U>(fn: (data: T) => PromiseLike<Result<U>>): AsyncResult<U>;
|
|
180
|
+
}
|
|
181
|
+
/** What `toBetterResult` returns: the `status`/`value`/`error` fields every better-result value has. */
|
|
182
|
+
type BetterResultValue<T, E> = {
|
|
183
|
+
readonly status: "ok";
|
|
184
|
+
readonly value: T;
|
|
185
|
+
} | {
|
|
186
|
+
readonly status: "error";
|
|
187
|
+
readonly error: E;
|
|
188
|
+
};
|
|
189
|
+
/** The part of better-result's `Result` namespace `toBetterResult` calls. */
|
|
190
|
+
interface BetterResultApi<T, E> {
|
|
191
|
+
ok(value: NoInfer<T>): unknown;
|
|
192
|
+
err(error: NoInfer<E>): unknown;
|
|
193
|
+
}
|
|
194
|
+
/** The value type of a better-result `Result` type. */
|
|
195
|
+
type BetterResultOk<R> = R extends {
|
|
196
|
+
readonly status: "ok";
|
|
197
|
+
readonly value: infer T;
|
|
198
|
+
} ? T : never;
|
|
199
|
+
/** The error type of a better-result `Result` type. */
|
|
200
|
+
type BetterResultErr<R> = R extends {
|
|
201
|
+
readonly status: "error";
|
|
202
|
+
readonly error: infer E;
|
|
203
|
+
} ? E : never;
|
|
204
|
+
/**
|
|
205
|
+
* Builds a better-result value with the `Result` namespace you pass, so
|
|
206
|
+
* better-result stays your dependency. Errors go through `mapError`, or, for a
|
|
207
|
+
* result from a `db` of `betterSupabase.mapError(fn)`, through `fn` (typed `unknown`).
|
|
208
|
+
*
|
|
209
|
+
* The value is typed as better-result's `Result<T, E>` when the call has one
|
|
210
|
+
* as its expected type (an annotation or a function's return type) or as its
|
|
211
|
+
* type argument. That type is checked against the row type and `mapError`.
|
|
212
|
+
* Without one, it is a `BetterResultValue<T, E>`.
|
|
213
|
+
*
|
|
214
|
+
* ```ts
|
|
215
|
+
* import { Result } from 'better-result';
|
|
216
|
+
* const customer: Result<Customer, AppError> = toBetterResult(
|
|
217
|
+
* await db.customers.findById(id),
|
|
218
|
+
* Result,
|
|
219
|
+
* toAppError,
|
|
220
|
+
* );
|
|
221
|
+
* ```
|
|
222
|
+
*/
|
|
223
|
+
declare function toBetterResult<R extends BetterResultValue<unknown, unknown> = never>(result: Result<BetterResultOk<R>>, api: BetterResultApi<BetterResultOk<R>, BetterResultErr<R>>, mapError: (error: DbError) => BetterResultErr<R>): R;
|
|
224
|
+
declare function toBetterResult<R extends BetterResultValue<unknown, unknown> = never>(result: Result<BetterResultOk<R>> & (DbError extends BetterResultErr<R> ? unknown : never), api: BetterResultApi<BetterResultOk<R>, DbError>): R;
|
|
225
|
+
declare function toBetterResult<R extends BetterResultValue<unknown, unknown> = never>(result: AsyncResult<BetterResultOk<R>>, api: BetterResultApi<BetterResultOk<R>, BetterResultErr<R>>, mapError: (error: DbError) => BetterResultErr<R>): Promise<R>;
|
|
226
|
+
declare function toBetterResult<R extends BetterResultValue<unknown, unknown> = never>(result: AsyncResult<BetterResultOk<R>> & (unknown extends BetterResultErr<R> ? unknown : never), api: BetterResultApi<BetterResultOk<R>, unknown>): Promise<R>;
|
|
227
|
+
declare function toBetterResult<T, E>(result: Result<T>, api: BetterResultApi<T, E>, mapError: (error: DbError) => E): BetterResultValue<T, E>;
|
|
228
|
+
declare function toBetterResult<T>(result: Result<T>, api: BetterResultApi<T, DbError>): BetterResultValue<T, DbError>;
|
|
229
|
+
declare function toBetterResult<T, E>(result: AsyncResult<T>, api: BetterResultApi<T, E>, mapError: (error: DbError) => E): Promise<BetterResultValue<T, E>>;
|
|
230
|
+
declare function toBetterResult<T>(result: AsyncResult<T>, api: BetterResultApi<T, unknown>): Promise<BetterResultValue<T, unknown>>;
|
|
231
|
+
/**
|
|
232
|
+
* An error class for one `DbError` kind. better-result's
|
|
233
|
+
* `class NotFound extends TaggedError("NotFound")<{ message: string; error: DbError }> {}`
|
|
234
|
+
* fits, as does any class whose constructor takes `{ message, error }`.
|
|
235
|
+
*/
|
|
236
|
+
type DbErrorClass<K extends DbErrorKind = DbErrorKind> = new (props: {
|
|
237
|
+
readonly message: string;
|
|
238
|
+
readonly error: DbErrorOf<K>;
|
|
239
|
+
}) => unknown;
|
|
240
|
+
/** Error classes by `DbError` kind; kinds left out use the fallback class. */
|
|
241
|
+
type DbErrorClasses = { readonly [K in DbErrorKind]?: DbErrorClass<K>; };
|
|
242
|
+
/** The error a `DbError` of kind `K` becomes. */
|
|
243
|
+
type MappedDbError<M extends DbErrorClasses, F extends DbErrorClass, K extends DbErrorKind = DbErrorKind> = K extends keyof M ? M[K] extends (abstract new (...args: never[]) => infer I) ? I : F extends (abstract new (...args: never[]) => infer I) ? I : never : F extends (abstract new (...args: never[]) => infer I) ? I : never;
|
|
244
|
+
/**
|
|
245
|
+
* Converts results with a fixed `Result` namespace and error mapping. Like
|
|
246
|
+
* `toBetterResult`, the value is typed as better-result's `Result<T, E>`
|
|
247
|
+
* when the call has one as its expected type, and `E` must accept every
|
|
248
|
+
* error the mapping returns.
|
|
249
|
+
*/
|
|
250
|
+
interface BetterResultErrors<M extends DbErrorClasses, F extends DbErrorClass> {
|
|
251
|
+
<R extends BetterResultValue<unknown, unknown> = never>(result: Result<BetterResultOk<R>> & (MappedDbError<M, F> extends BetterResultErr<R> ? unknown : never)): R;
|
|
252
|
+
<R extends BetterResultValue<unknown, unknown> = never>(result: AsyncResult<BetterResultOk<R>> & (MappedDbError<M, F> extends BetterResultErr<R> ? unknown : never)): Promise<R>;
|
|
253
|
+
<T>(result: Result<T>): BetterResultValue<T, MappedDbError<M, F>>;
|
|
254
|
+
<T>(result: AsyncResult<T>): Promise<BetterResultValue<T, MappedDbError<M, F>>>;
|
|
255
|
+
/** The error instance for one `DbError`, typed by its kind. */
|
|
256
|
+
map<E extends DbError>(error: E): MappedDbError<M, F, E["kind"]>;
|
|
257
|
+
}
|
|
258
|
+
/**
|
|
259
|
+
* A typed mapping from `DbError` kinds to error classes, usually
|
|
260
|
+
* better-result `TaggedError` classes, bound to better-result's `Result`
|
|
261
|
+
* namespace. Kinds without a class use `fallback`. Each instance gets the
|
|
262
|
+
* error's `message` and the `DbError` itself as `error`.
|
|
263
|
+
*
|
|
264
|
+
* ```ts
|
|
265
|
+
* import { Result, TaggedError } from 'better-result';
|
|
266
|
+
* class NotFound extends TaggedError('NotFound')<{ message: string; error: DbError }> {}
|
|
267
|
+
* class DbFailure extends TaggedError('DbFailure')<{ message: string; error: DbError }> {}
|
|
268
|
+
* const toResult = defineBetterResultErrors(Result, { not_found: NotFound }, DbFailure);
|
|
269
|
+
* const customer: Result<Customer, NotFound | DbFailure> = await toResult(db.customers.findById(id));
|
|
270
|
+
* ```
|
|
271
|
+
*/
|
|
272
|
+
declare function defineBetterResultErrors<const M extends DbErrorClasses, F extends DbErrorClass>(api: BetterResultApi<unknown, unknown>, classes: M, fallback: F): BetterResultErrors<M, F>;
|
|
273
|
+
/**
|
|
274
|
+
* Converts a better-result value back into a `Result`, by its `status`
|
|
275
|
+
* field, so it works across better-result versions. A `DbError`, or an
|
|
276
|
+
* error whose `cause` is one, is kept; others go through `mapError`
|
|
277
|
+
* (default `toDbError`).
|
|
278
|
+
*/
|
|
279
|
+
declare function fromBetterResult<T>(result: BetterResultValue<T, unknown>, mapError?: (error: unknown) => DbError): Result<T>;
|
|
280
|
+
declare function toDbError(cause: unknown): DbError;
|
|
281
|
+
//#endregion
|
|
282
|
+
export { isDbError as A, DbErrorOf as C, dbError as D, ValidationIssue as E, mapDbError as M, statusOf as N, isCheck as O, DbErrorKinds as S, RawDbError as T, ok as _, BetterResultOk as a, DbError as b, DbErrorClasses as c, Ok as d, Result as f, fromBetterResult as g, err as h, BetterResultErrors as i, isForeignKey as j, isConflict as k, Err as l, defineBetterResultErrors as m, BetterResultApi as n, BetterResultValue as o, ThrowMapper as p, BetterResultErr as r, DbErrorClass as s, AsyncResult as t, MappedDbError as u, toBetterResult as v, ErrorMapper as w, DbErrorKind as x, toDbError as y };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as DbException } from "./db-exception-CnWcYPxL.js";
|
|
2
|
+
import { n as dbError, r as dbErrorOf } from "./errors-B11Duf73.js";
|
|
2
3
|
//#region src/core/result.ts
|
|
3
4
|
const throwMappers = /* @__PURE__ */ new WeakMap();
|
|
4
5
|
function inherit(from, next) {
|
|
@@ -81,6 +82,30 @@ function toBetterResult(result, api, mapError) {
|
|
|
81
82
|
return build(result, mapError);
|
|
82
83
|
}
|
|
83
84
|
/**
|
|
85
|
+
* A typed mapping from `DbError` kinds to error classes, usually
|
|
86
|
+
* better-result `TaggedError` classes, bound to better-result's `Result`
|
|
87
|
+
* namespace. Kinds without a class use `fallback`. Each instance gets the
|
|
88
|
+
* error's `message` and the `DbError` itself as `error`.
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* import { Result, TaggedError } from 'better-result';
|
|
92
|
+
* class NotFound extends TaggedError('NotFound')<{ message: string; error: DbError }> {}
|
|
93
|
+
* class DbFailure extends TaggedError('DbFailure')<{ message: string; error: DbError }> {}
|
|
94
|
+
* const toResult = defineBetterResultErrors(Result, { not_found: NotFound }, DbFailure);
|
|
95
|
+
* const customer: Result<Customer, NotFound | DbFailure> = await toResult(db.customers.findById(id));
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
function defineBetterResultErrors(api, classes, fallback) {
|
|
99
|
+
const map = (error) => {
|
|
100
|
+
return new (classes[error.kind] ?? fallback)({
|
|
101
|
+
message: error.message,
|
|
102
|
+
error
|
|
103
|
+
});
|
|
104
|
+
};
|
|
105
|
+
const convert = (result) => result instanceof AsyncResult ? toBetterResult(result, api, map) : toBetterResult(result, api, map);
|
|
106
|
+
return Object.assign(convert, { map });
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
84
109
|
* Converts a better-result value back into a `Result`, by its `status`
|
|
85
110
|
* field, so it works across better-result versions. A `DbError`, or an
|
|
86
111
|
* error whose `cause` is one, is kept; others go through `mapError`
|
|
@@ -100,4 +125,4 @@ function toDbError(cause) {
|
|
|
100
125
|
return dbError("unexpected", message);
|
|
101
126
|
}
|
|
102
127
|
//#endregion
|
|
103
|
-
export {
|
|
128
|
+
export { ok as a, withErrorMapper as c, fromBetterResult as i, defineBetterResultErrors as n, toBetterResult as o, err as r, toDbError as s, AsyncResult as t };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
//#region src/core/run-state.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Where a run is, in the words every block that records runs shares: ai-chat
|
|
4
|
+
* runs, ai-tasks runs and workflow runs. Each block uses the subset it needs.
|
|
5
|
+
*/
|
|
6
|
+
type RunState = "queued" | "running" | "waiting" | "cancel_requested" | "completed" | "failed" | "cancelled";
|
|
7
|
+
/** The states a run ends in. */
|
|
8
|
+
type FinalRunState = Extract<RunState, "completed" | "failed" | "cancelled">;
|
|
9
|
+
/** The states a run ends in, in the order blocks list them. */
|
|
10
|
+
declare const FINAL_RUN_STATES: readonly FinalRunState[];
|
|
11
|
+
//#endregion
|
|
12
|
+
export { FinalRunState as n, RunState as r, FINAL_RUN_STATES as t };
|