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
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
import { b as DbError } from "./result-D7y2fT87.js";
|
|
2
|
+
import { it as QuerySpec } from "./define-CJJkkr1-.js";
|
|
3
|
+
import { n as TemplateValues } from "./template-CwO38Do8.js";
|
|
4
|
+
import { a as ClientAuth } from "./bind-Bu_ZNa3W.js";
|
|
5
|
+
import { T as TopicMessage, _ as RealtimeClient, a as LiveSource, g as PresenceSubscription, p as PresenceOptions, r as LiveCountSeed, y as SubscribeOptions } from "./index-DunNRdnT.js";
|
|
6
|
+
import { SupabaseClient } from "@supabase/supabase-js";
|
|
7
|
+
import { QueryClient } from "@tanstack/query-core";
|
|
8
|
+
//#region src/bindings/client.d.ts
|
|
9
|
+
/** The parts of `createClient()` the bindings need. */
|
|
10
|
+
interface ClientLike {
|
|
11
|
+
readonly betterSupabase: LiveSource;
|
|
12
|
+
readonly supabase: SupabaseClient;
|
|
13
|
+
readonly auth: ClientAuth;
|
|
14
|
+
readonly db: object;
|
|
15
|
+
readonly queries: object;
|
|
16
|
+
}
|
|
17
|
+
/** What a `bs.action()` Server Action or server function resolves to. */
|
|
18
|
+
type ActionResultOf<T> = {
|
|
19
|
+
readonly ok: true;
|
|
20
|
+
readonly data: T;
|
|
21
|
+
readonly error: null;
|
|
22
|
+
} | {
|
|
23
|
+
readonly ok: false;
|
|
24
|
+
readonly data: null;
|
|
25
|
+
readonly error: DbError;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* The input `useAction` passes: a `bs.action()` with an `input` schema also
|
|
29
|
+
* accepts `FormData`, which belongs to `useActionForm`.
|
|
30
|
+
*/
|
|
31
|
+
type ActionInputOf<I> = [Exclude<I, FormData>] extends [never] ? I : Exclude<I, FormData>;
|
|
32
|
+
interface UseActionOptions<I, T> {
|
|
33
|
+
readonly onSuccess?: (data: T, input: I) => void;
|
|
34
|
+
readonly onError?: (error: DbError, input: I) => void;
|
|
35
|
+
}
|
|
36
|
+
interface BroadcastOptions extends Omit<SubscribeOptions, "onStatus"> {
|
|
37
|
+
/**
|
|
38
|
+
* A supabase-js client to subscribe with, for apps without the provider.
|
|
39
|
+
* It resubscribes when the client's user changes. Defaults to the
|
|
40
|
+
* provider's client.
|
|
41
|
+
*/
|
|
42
|
+
readonly client?: SupabaseClient;
|
|
43
|
+
/** The query client `invalidate` refetches with. Defaults to the provider's. */
|
|
44
|
+
readonly queryClient?: QueryClient;
|
|
45
|
+
/**
|
|
46
|
+
* Refetch after each message: table keys (every query that read one of
|
|
47
|
+
* them), or a function returning query keys. Needs a `queryClient`, here
|
|
48
|
+
* or on the provider.
|
|
49
|
+
*/
|
|
50
|
+
readonly invalidate?: readonly string[] | ((message: TopicMessage) => readonly (readonly unknown[])[]);
|
|
51
|
+
}
|
|
52
|
+
interface LiveQueryHookOptions {
|
|
53
|
+
/**
|
|
54
|
+
* Tenant for tenant-scoped tables. Defaults to the `config.claims.tenant`
|
|
55
|
+
* claim (`tenant_id`, top-level or in `app_metadata`).
|
|
56
|
+
*/
|
|
57
|
+
readonly tenant?: string;
|
|
58
|
+
/** Defaults to 100 ms. */
|
|
59
|
+
readonly debounceMs?: number;
|
|
60
|
+
}
|
|
61
|
+
interface LiveCountHookOptions extends LiveQueryHookOptions {
|
|
62
|
+
/** The count to show before the first fetch, e.g. from the server. */
|
|
63
|
+
readonly initial?: number;
|
|
64
|
+
}
|
|
65
|
+
interface PresenceHookOptions<I> {
|
|
66
|
+
/**
|
|
67
|
+
* The state this client shares while joined. It is tracked after the
|
|
68
|
+
* join and tracked again when its JSON changes; `null` stays untracked.
|
|
69
|
+
*/
|
|
70
|
+
readonly state?: I | null;
|
|
71
|
+
/** A supabase-js client for apps without the provider. */
|
|
72
|
+
readonly client?: SupabaseClient;
|
|
73
|
+
}
|
|
74
|
+
/** The parts of a `defineTopic(..., { presence })` topic the bindings use. */
|
|
75
|
+
interface PresenceTopic<P extends string, I, O> {
|
|
76
|
+
topic(values: TemplateValues<P>): string;
|
|
77
|
+
match(topic: string): TemplateValues<P> | null;
|
|
78
|
+
subscribe(client: RealtimeClient, values: TemplateValues<P>, handlers: Readonly<Record<string, never>>, options?: SubscribeOptions & PresenceOptions<O>): PresenceSubscription<I, O>;
|
|
79
|
+
}
|
|
80
|
+
/** A count spec or a `bs.liveCount()` seed. */
|
|
81
|
+
type LiveCountSource = QuerySpec<string, "count", number> | LiveCountSeed | null | undefined;
|
|
82
|
+
interface ActionState<I, T> {
|
|
83
|
+
/** True while a run is in flight. */
|
|
84
|
+
readonly pending: boolean;
|
|
85
|
+
/** The inputs of the runs in flight, e.g. to dim one table row. */
|
|
86
|
+
readonly pendingInputs: readonly I[];
|
|
87
|
+
/** The input of the latest run in flight. */
|
|
88
|
+
readonly pendingInput: I | undefined;
|
|
89
|
+
/** The data of the last successful run. */
|
|
90
|
+
readonly data: T | undefined;
|
|
91
|
+
/** The error of the last run, until the next one starts. */
|
|
92
|
+
readonly error: DbError | undefined;
|
|
93
|
+
}
|
|
94
|
+
//#endregion
|
|
95
|
+
//#region src/react/field-errors.d.ts
|
|
96
|
+
/** The first message per top-level field of a `validation` error. */
|
|
97
|
+
declare function fieldErrorsOf(error: DbError | undefined): Readonly<Partial<Record<string, string>>>;
|
|
98
|
+
//#endregion
|
|
99
|
+
export { BroadcastOptions as a, LiveCountSource as c, PresenceTopic as d, UseActionOptions as f, ActionState as i, LiveQueryHookOptions as l, ActionInputOf as n, ClientLike as o, ActionResultOf as r, LiveCountHookOptions as s, fieldErrorsOf as t, PresenceHookOptions as u };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/react/field-errors.ts
|
|
2
|
+
/** The first message per top-level field of a `validation` error. */
|
|
3
|
+
function fieldErrorsOf(error) {
|
|
4
|
+
if (error?.kind !== "validation") return {};
|
|
5
|
+
const fields = {};
|
|
6
|
+
for (const issue of error.issues) {
|
|
7
|
+
const key = issue.path?.[0];
|
|
8
|
+
if (typeof key === "string" && fields[key] === void 0) fields[key] = issue.message;
|
|
9
|
+
}
|
|
10
|
+
return fields;
|
|
11
|
+
}
|
|
12
|
+
//#endregion
|
|
13
|
+
export { fieldErrorsOf as t };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { n as toSession } from "./view-BeFcRV6G.js";
|
|
2
|
+
import { t as withBetterSupabase } from "./composite-DhE66P5u.js";
|
|
3
|
+
//#region src/server/framework.ts
|
|
4
|
+
/** Every caller: the framework factories guard per loader, action or route instead. */
|
|
5
|
+
const EVERY_CALLER = [
|
|
6
|
+
"user",
|
|
7
|
+
"anonymous",
|
|
8
|
+
"anon",
|
|
9
|
+
"service",
|
|
10
|
+
"apiKey"
|
|
11
|
+
];
|
|
12
|
+
/** The `withBetterSupabase` entry the framework factories run, admitting every caller. */
|
|
13
|
+
function frameworkEntry(server, options, expose) {
|
|
14
|
+
return withBetterSupabase(server, {
|
|
15
|
+
refresh: options.refresh ?? "navigation",
|
|
16
|
+
allow: EVERY_CALLER,
|
|
17
|
+
expose,
|
|
18
|
+
...options.checkSession === void 0 ? {} : { checkSession: options.checkSession },
|
|
19
|
+
...options.cookieScopes === void 0 ? {} : { cookieScopes: options.cookieScopes },
|
|
20
|
+
...options.encode === void 0 ? {} : { encode: options.encode },
|
|
21
|
+
...options.waitUntil === void 0 ? {} : { waitUntil: options.waitUntil }
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
/** The contributions plus the serializable `session`. */
|
|
25
|
+
function localsOf(contributions) {
|
|
26
|
+
const base = contributions;
|
|
27
|
+
return {
|
|
28
|
+
...base,
|
|
29
|
+
session: toSession(base.bs.auth)
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
function isWaitUntilHost(value) {
|
|
33
|
+
return typeof value === "object" && value !== null && "waitUntil" in value && typeof value.waitUntil === "function";
|
|
34
|
+
}
|
|
35
|
+
/** `platform.context.waitUntil` on Cloudflare, `platform.waitUntil` elsewhere. */
|
|
36
|
+
function platformWaitUntil(platform) {
|
|
37
|
+
if (typeof platform !== "object" || platform === null) return void 0;
|
|
38
|
+
const context = "context" in platform ? platform.context : platform;
|
|
39
|
+
if (!isWaitUntilHost(context)) return void 0;
|
|
40
|
+
return (promise) => {
|
|
41
|
+
context.waitUntil(promise);
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** The form body as `FormData`, JSON as a value, nothing as `undefined`. */
|
|
45
|
+
async function actionInput(request) {
|
|
46
|
+
const type = request.headers.get("content-type") ?? "";
|
|
47
|
+
if (type.includes("application/json")) return request.json();
|
|
48
|
+
if (type.includes("form-data") || type.includes("application/x-www-form-urlencoded")) return request.formData();
|
|
49
|
+
}
|
|
50
|
+
//#endregion
|
|
51
|
+
export { platformWaitUntil as a, localsOf as i, actionInput as n, frameworkEntry as r, EVERY_CALLER as t };
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { a as AnyModels, i as AnyFunctions } from "./types-6BdhkmZe.js";
|
|
2
|
+
import { o as ServerOptions } from "./server-CeVeeXwz.js";
|
|
3
|
+
import { t as AuthSession } from "./view-DbxLNu8L.js";
|
|
4
|
+
import { a as SessionEntryConfig, n as BetterSupabaseContributions } from "./composite-Bt1YK3Ke.js";
|
|
5
|
+
import { t as RefusalRedirects } from "./refusal-D1rgbzNq.js";
|
|
6
|
+
//#region src/server/framework.d.ts
|
|
7
|
+
/** What the framework factories (`createSvelteKit`, `createReactRouter`, `createTanStackStart`) take. */
|
|
8
|
+
interface FrameworkOptions extends ServerOptions, RefusalRedirects, Pick<SessionEntryConfig, "checkSession" | "cookieScopes" | "encode"> {
|
|
9
|
+
/**
|
|
10
|
+
* When the middleware refreshes an expired session cookie. Defaults to
|
|
11
|
+
* `'navigation'`: page loads, client navigations and form posts.
|
|
12
|
+
*/
|
|
13
|
+
readonly refresh?: SessionEntryConfig["refresh"];
|
|
14
|
+
/** Include internal error messages in Problem Details. Defaults to development only. */
|
|
15
|
+
readonly exposeErrors?: boolean;
|
|
16
|
+
/** Keeps the invocation alive for event sink sends, e.g. the Workers `ctx.waitUntil`. */
|
|
17
|
+
readonly waitUntil?: (promise: Promise<unknown>) => void;
|
|
18
|
+
}
|
|
19
|
+
/** The keys the framework factories put on `locals` or `context`. */
|
|
20
|
+
type FrameworkLocals<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> = BetterSupabaseContributions<M, F, E, C, P> & {
|
|
21
|
+
/** The caller as plain data, safe to return from a loader to the browser. */
|
|
22
|
+
readonly session: AuthSession<C, P>;
|
|
23
|
+
};
|
|
24
|
+
//#endregion
|
|
25
|
+
export { FrameworkOptions as n, FrameworkLocals as t };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { b as DbError } from "./result-D7y2fT87.js";
|
|
3
|
+
import { m as JobHandler } from "./queue-CLJurhdy.js";
|
|
4
|
+
import { g as AiModelInput, i as AiChat } from "./ai-chat-7amvXjmQ.js";
|
|
5
|
+
import { i as Usage, m as UsageStatus, s as UsageEntry } from "./usage-CrvrL2vw.js";
|
|
6
|
+
import { JSONValue, LanguageModelUsage } from "ai";
|
|
7
|
+
//#region src/ai-sdk/gateway.d.ts
|
|
8
|
+
/** Who a generation is for, as the AI Gateway reports spend. */
|
|
9
|
+
interface GatewayContext {
|
|
10
|
+
readonly userId?: string;
|
|
11
|
+
readonly organizationId?: string;
|
|
12
|
+
readonly chatId?: string;
|
|
13
|
+
/** What the generation is for, such as `chat` or `summary`. */
|
|
14
|
+
readonly feature?: string;
|
|
15
|
+
}
|
|
16
|
+
/** The AI Gateway's own options (`providerOptions.gateway`). */
|
|
17
|
+
type GatewayOptions = {
|
|
18
|
+
readonly [key: string]: JSONValue | undefined;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* `providerOptions` for `streamText` and agents that attribute the spend in
|
|
22
|
+
* the AI Gateway: `user` is the user id, and `tags` name the tenant, the chat
|
|
23
|
+
* and the feature. `extra` adds gateway options such as `order` or
|
|
24
|
+
* `zeroDataRetention`; its `tags` are appended.
|
|
25
|
+
*/
|
|
26
|
+
declare function gatewayOptions(context: GatewayContext, extra?: GatewayOptions): {
|
|
27
|
+
readonly gateway: GatewayOptions;
|
|
28
|
+
};
|
|
29
|
+
/** Token counts and the gateway's cost of one generation. */
|
|
30
|
+
interface AiUsage {
|
|
31
|
+
readonly inputTokens: number;
|
|
32
|
+
readonly outputTokens: number;
|
|
33
|
+
readonly totalTokens: number;
|
|
34
|
+
readonly cachedInputTokens: number;
|
|
35
|
+
readonly reasoningTokens: number;
|
|
36
|
+
/** The gateway's generation id, for `costBackfill` when the cost isn't known yet. */
|
|
37
|
+
readonly generationId: string | undefined;
|
|
38
|
+
/** The cost in millionths of a US dollar, when the gateway reported it. */
|
|
39
|
+
readonly costMicroUsd: number | undefined;
|
|
40
|
+
}
|
|
41
|
+
/** What `usageOf` reads: a `streamText` or `generateText` result, awaited. */
|
|
42
|
+
interface UsageSource {
|
|
43
|
+
readonly totalUsage?: Partial<LanguageModelUsage> | undefined;
|
|
44
|
+
readonly usage?: Partial<LanguageModelUsage> | undefined;
|
|
45
|
+
readonly providerMetadata?: unknown;
|
|
46
|
+
}
|
|
47
|
+
/** The usage of a finished generation, with the gateway's cost when it has one. */
|
|
48
|
+
declare function usageOf(source: UsageSource): AiUsage;
|
|
49
|
+
/** The usage meters `usageEntries` writes, by default `ai.input_tokens` and `ai.output_tokens`. */
|
|
50
|
+
interface AiUsageMeters {
|
|
51
|
+
readonly input?: string;
|
|
52
|
+
readonly output?: string;
|
|
53
|
+
/** Micro-USD; left out unless named. */
|
|
54
|
+
readonly cost?: string;
|
|
55
|
+
}
|
|
56
|
+
/** The entries to pass to `usage.recordMany` for a generation. */
|
|
57
|
+
declare function usageEntries(usage: AiUsage, meters?: AiUsageMeters): UsageEntry[];
|
|
58
|
+
/**
|
|
59
|
+
* A 429 Problem Details response for a quota or rate limit: pass the
|
|
60
|
+
* `quota_exceeded` or `rate_limited` error a block returned, or the
|
|
61
|
+
* `UsageStatus` of a meter with nothing left. It carries `Retry-After`.
|
|
62
|
+
*/
|
|
63
|
+
declare function problem429(decision: DbError | UsageStatus, now?: Temporal.Instant): Response;
|
|
64
|
+
/**
|
|
65
|
+
* The quota check `createAssistant` runs before a generation: the error when
|
|
66
|
+
* `meter` has nothing left for the tenant, otherwise `undefined`.
|
|
67
|
+
*/
|
|
68
|
+
declare function usageQuota(usage: Pick<Usage, "current">, meter: string): (organizationId: string) => Promise<DbError | undefined>;
|
|
69
|
+
/** The AI Gateway calls the job handlers make (`gateway` from `ai`). */
|
|
70
|
+
interface GatewayClient {
|
|
71
|
+
getGenerationInfo(params: {
|
|
72
|
+
id: string;
|
|
73
|
+
}): PromiseLike<{
|
|
74
|
+
readonly totalCost: number;
|
|
75
|
+
readonly model?: string;
|
|
76
|
+
readonly promptTokens?: number;
|
|
77
|
+
readonly completionTokens?: number;
|
|
78
|
+
}>;
|
|
79
|
+
getAvailableModels(): PromiseLike<{
|
|
80
|
+
readonly models: readonly GatewayModelEntry[];
|
|
81
|
+
}>;
|
|
82
|
+
}
|
|
83
|
+
/** One model of `gateway.getAvailableModels()`. */
|
|
84
|
+
interface GatewayModelEntry {
|
|
85
|
+
readonly id: string;
|
|
86
|
+
readonly name: string;
|
|
87
|
+
readonly description?: string | null;
|
|
88
|
+
readonly pricing?: Readonly<Record<string, string | undefined>> | null;
|
|
89
|
+
readonly modelType?: string | null;
|
|
90
|
+
}
|
|
91
|
+
/** The payload of a cost backfill job. */
|
|
92
|
+
interface CostBackfillPayload {
|
|
93
|
+
readonly generationId: string;
|
|
94
|
+
/** With `usage` and `meter`, the cost is also recorded on the tenant's meter. */
|
|
95
|
+
readonly organizationId?: string;
|
|
96
|
+
}
|
|
97
|
+
interface CostBackfillOptions {
|
|
98
|
+
/** The chat block with a service transport. */
|
|
99
|
+
readonly chats: Pick<AiChat, "runs">;
|
|
100
|
+
readonly gateway: Pick<GatewayClient, "getGenerationInfo">;
|
|
101
|
+
readonly usage?: Pick<Usage, "record">;
|
|
102
|
+
/** The micro-USD meter, such as `ai.cost`. */
|
|
103
|
+
readonly meter?: string;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* A job handler that looks up a generation's cost in the AI Gateway and
|
|
107
|
+
* writes it to the run (`runs.setCost`). Enqueue it when `usageOf` found no
|
|
108
|
+
* cost; it throws so the queue retries while the gateway doesn't know it yet.
|
|
109
|
+
*/
|
|
110
|
+
declare function costBackfill(options: CostBackfillOptions): JobHandler<CostBackfillPayload>;
|
|
111
|
+
interface ModelCatalogRefreshOptions {
|
|
112
|
+
/** The chat block with a service transport. */
|
|
113
|
+
readonly chats: Pick<AiChat, "models">;
|
|
114
|
+
readonly gateway: Pick<GatewayClient, "getAvailableModels">;
|
|
115
|
+
/** Keeps a model; defaults to language models. */
|
|
116
|
+
readonly filter?: (model: GatewayModelEntry) => boolean;
|
|
117
|
+
/** Plans per model id, for models only some plans may use. */
|
|
118
|
+
readonly plans?: (model: GatewayModelEntry) => readonly string[] | undefined;
|
|
119
|
+
/** Deletes catalog rows the gateway no longer lists. Defaults to false. */
|
|
120
|
+
readonly prune?: boolean;
|
|
121
|
+
}
|
|
122
|
+
/** The catalog row for a gateway model. */
|
|
123
|
+
declare function modelInputOf(model: GatewayModelEntry, plans?: readonly string[]): AiModelInput;
|
|
124
|
+
/**
|
|
125
|
+
* A job handler that copies the AI Gateway's model list into the chat
|
|
126
|
+
* block's catalog (`models.upsert`); schedule it daily.
|
|
127
|
+
*/
|
|
128
|
+
declare function modelCatalogRefresh(options: ModelCatalogRefreshOptions): JobHandler<unknown>;
|
|
129
|
+
//#endregion
|
|
130
|
+
export { usageOf as _, GatewayClient as a, GatewayOptions as c, costBackfill as d, gatewayOptions as f, usageEntries as g, problem429 as h, CostBackfillPayload as i, ModelCatalogRefreshOptions as l, modelInputOf as m, AiUsageMeters as n, GatewayContext as o, modelCatalogRefresh as p, CostBackfillOptions as r, GatewayModelEntry as s, AiUsage as t, UsageSource as u, usageQuota as v };
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
//#region src/blocks/workflow-builder/graph.ts
|
|
2
|
+
/** Kept local: the static executor runs this file inside the workflow VM. */
|
|
3
|
+
const isGraphRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
4
|
+
const WORKFLOW_NODE_KINDS = [
|
|
5
|
+
"trigger",
|
|
6
|
+
"step",
|
|
7
|
+
"sleep",
|
|
8
|
+
"approval",
|
|
9
|
+
"condition"
|
|
10
|
+
];
|
|
11
|
+
const OPERATORS = [
|
|
12
|
+
"equals",
|
|
13
|
+
"notEquals",
|
|
14
|
+
"exists",
|
|
15
|
+
"truthy",
|
|
16
|
+
"greaterThan",
|
|
17
|
+
"lessThan",
|
|
18
|
+
"contains"
|
|
19
|
+
];
|
|
20
|
+
const DURATION = /^(\d+)(ms|s|m|h|d)$/;
|
|
21
|
+
const UNIT_MS = /* @__PURE__ */ new Map([
|
|
22
|
+
["ms", 1],
|
|
23
|
+
["s", 1e3],
|
|
24
|
+
["m", 6e4],
|
|
25
|
+
["h", 36e5],
|
|
26
|
+
["d", 864e5]
|
|
27
|
+
]);
|
|
28
|
+
/** A sleep duration in milliseconds; `undefined` when `value` isn't one. */
|
|
29
|
+
function durationMs(value) {
|
|
30
|
+
if (typeof value === "number") return Number.isFinite(value) && value > 0 ? Math.round(value) : void 0;
|
|
31
|
+
if (typeof value !== "string") return void 0;
|
|
32
|
+
const match = DURATION.exec(value.trim());
|
|
33
|
+
if (match === null) return void 0;
|
|
34
|
+
const factor = UNIT_MS.get(match[2] ?? "");
|
|
35
|
+
const ms = Number(match[1]) * (factor ?? 0);
|
|
36
|
+
return ms > 0 ? ms : void 0;
|
|
37
|
+
}
|
|
38
|
+
const CONDITION_PATH = /^(input|results)(\.[^.]+)*$/;
|
|
39
|
+
/** The node's condition, or `undefined` when its config isn't one. */
|
|
40
|
+
function conditionOf(node) {
|
|
41
|
+
const config = node.config;
|
|
42
|
+
if (config === void 0) return void 0;
|
|
43
|
+
const path = config["path"];
|
|
44
|
+
const op = OPERATORS.find((known) => known === config["op"]);
|
|
45
|
+
if (typeof path !== "string" || op === void 0) return void 0;
|
|
46
|
+
if (!CONDITION_PATH.test(path)) return void 0;
|
|
47
|
+
return {
|
|
48
|
+
path,
|
|
49
|
+
op,
|
|
50
|
+
value: config["value"]
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
/** Reads `path` (`input...` or `results...`) from the run's data. */
|
|
54
|
+
function readPath(scope, path) {
|
|
55
|
+
const [root, ...rest] = path.split(".");
|
|
56
|
+
let value = root === "input" ? scope.input : scope.results;
|
|
57
|
+
for (const key of rest) if (Array.isArray(value)) value = value[Number(key)];
|
|
58
|
+
else if (isGraphRecord(value)) value = value[key];
|
|
59
|
+
else return void 0;
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
/** Whether `condition` holds for the run's data. */
|
|
63
|
+
function evaluateCondition(condition, scope) {
|
|
64
|
+
const actual = readPath(scope, condition.path);
|
|
65
|
+
const expected = condition.value;
|
|
66
|
+
switch (condition.op) {
|
|
67
|
+
case "equals": return JSON.stringify(actual) === JSON.stringify(expected);
|
|
68
|
+
case "notEquals": return JSON.stringify(actual) !== JSON.stringify(expected);
|
|
69
|
+
case "exists": return actual !== void 0 && actual !== null;
|
|
70
|
+
case "truthy": return Boolean(actual);
|
|
71
|
+
case "greaterThan": return typeof actual === "number" && typeof expected === "number" && actual > expected;
|
|
72
|
+
case "lessThan": return typeof actual === "number" && typeof expected === "number" && actual < expected;
|
|
73
|
+
case "contains":
|
|
74
|
+
if (typeof actual === "string") return typeof expected === "string" && actual.includes(expected);
|
|
75
|
+
return Array.isArray(actual) && actual.some((item) => JSON.stringify(item) === JSON.stringify(expected));
|
|
76
|
+
default: {
|
|
77
|
+
const unknown = condition.op;
|
|
78
|
+
throw new TypeError(`workflow-builder: unknown operator "${String(unknown)}"`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/** Whether an approval payload approves: anything but `{ approved: false }`. */
|
|
83
|
+
const approved = (payload) => !(isGraphRecord(payload) && payload["approved"] === false);
|
|
84
|
+
/**
|
|
85
|
+
* The nodes in an order that runs every source before its targets, keeping
|
|
86
|
+
* the graph's order among independent nodes; `undefined` when edges form a
|
|
87
|
+
* cycle.
|
|
88
|
+
*/
|
|
89
|
+
function topologicalOrder(graph) {
|
|
90
|
+
const indegree = new Map(graph.nodes.map((node) => [node.id, 0]));
|
|
91
|
+
const targets = /* @__PURE__ */ new Map();
|
|
92
|
+
for (const edge of graph.edges) {
|
|
93
|
+
if (!indegree.has(edge.source) || !indegree.has(edge.target)) continue;
|
|
94
|
+
indegree.set(edge.target, (indegree.get(edge.target) ?? 0) + 1);
|
|
95
|
+
targets.set(edge.source, [...targets.get(edge.source) ?? [], edge.target]);
|
|
96
|
+
}
|
|
97
|
+
const byId = new Map(graph.nodes.map((node) => [node.id, node]));
|
|
98
|
+
const order = [];
|
|
99
|
+
const ready = graph.nodes.filter((node) => indegree.get(node.id) === 0);
|
|
100
|
+
while (ready.length > 0) {
|
|
101
|
+
const node = ready.shift();
|
|
102
|
+
if (node === void 0) break;
|
|
103
|
+
order.push(node);
|
|
104
|
+
for (const target of targets.get(node.id) ?? []) {
|
|
105
|
+
const left = (indegree.get(target) ?? 0) - 1;
|
|
106
|
+
indegree.set(target, left);
|
|
107
|
+
const next = byId.get(target);
|
|
108
|
+
if (left === 0 && next !== void 0) ready.push(next);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return order.length === graph.nodes.length ? order : void 0;
|
|
112
|
+
}
|
|
113
|
+
/** `value` as a node, or `undefined` when its id or kind is missing. */
|
|
114
|
+
function nodeOf(value) {
|
|
115
|
+
if (!isGraphRecord(value)) return void 0;
|
|
116
|
+
const id = value["id"];
|
|
117
|
+
const kind = WORKFLOW_NODE_KINDS.find((known) => known === value["kind"]);
|
|
118
|
+
if (typeof id !== "string" || kind === void 0) return void 0;
|
|
119
|
+
const { label, step, config, position } = value;
|
|
120
|
+
return {
|
|
121
|
+
id,
|
|
122
|
+
kind,
|
|
123
|
+
...typeof label === "string" ? { label } : {},
|
|
124
|
+
...typeof step === "string" ? { step } : {},
|
|
125
|
+
...isGraphRecord(config) ? { config } : {},
|
|
126
|
+
...isGraphRecord(position) && typeof position["x"] === "number" && typeof position["y"] === "number" ? { position: {
|
|
127
|
+
x: position["x"],
|
|
128
|
+
y: position["y"]
|
|
129
|
+
} } : {}
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
/** `value` as an edge, or `undefined` when its ends are missing. */
|
|
133
|
+
function edgeOf(value) {
|
|
134
|
+
if (!isGraphRecord(value)) return void 0;
|
|
135
|
+
const { id, source, target, branch } = value;
|
|
136
|
+
if (typeof source !== "string" || typeof target !== "string") return;
|
|
137
|
+
return {
|
|
138
|
+
id: typeof id === "string" ? id : `${source}->${target}`,
|
|
139
|
+
source,
|
|
140
|
+
target,
|
|
141
|
+
...branch === "true" || branch === "false" ? { branch } : {}
|
|
142
|
+
};
|
|
143
|
+
}
|
|
144
|
+
/** Node ids reach generated source and SQL; `validate_workflow_graph` uses the same pattern. */
|
|
145
|
+
const NODE_ID = /^[A-Za-z0-9_-]{1,100}$/;
|
|
146
|
+
const BRANCHING = /* @__PURE__ */ new Set(["condition", "approval"]);
|
|
147
|
+
/**
|
|
148
|
+
* Problems that keep `graph` from running, as messages; empty when it can.
|
|
149
|
+
* Pass the step library's names to check that every step node uses one
|
|
150
|
+
* (`publish` checks it again in SQL).
|
|
151
|
+
*/
|
|
152
|
+
function validateGraph(graph, steps) {
|
|
153
|
+
if (!isGraphRecord(graph) || !Array.isArray(graph["nodes"]) || !Array.isArray(graph["edges"])) return ["A graph has a nodes array and an edges array"];
|
|
154
|
+
const errors = [];
|
|
155
|
+
const library = steps === void 0 ? void 0 : new Set(steps);
|
|
156
|
+
const nodes = /* @__PURE__ */ new Map();
|
|
157
|
+
let triggers = 0;
|
|
158
|
+
for (const value of graph["nodes"]) {
|
|
159
|
+
const id = isGraphRecord(value) ? value["id"] : void 0;
|
|
160
|
+
if (!isGraphRecord(value) || typeof id !== "string" || !NODE_ID.test(id)) {
|
|
161
|
+
errors.push("Every node has an id of 1 to 100 letters, digits, underscores or hyphens");
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (nodes.has(id)) errors.push(`Node ${id} appears twice`);
|
|
165
|
+
const node = nodeOf(value);
|
|
166
|
+
if (node === void 0) {
|
|
167
|
+
errors.push(`Node ${id} has an unknown kind`);
|
|
168
|
+
continue;
|
|
169
|
+
}
|
|
170
|
+
nodes.set(id, node);
|
|
171
|
+
switch (node.kind) {
|
|
172
|
+
case "trigger":
|
|
173
|
+
triggers += 1;
|
|
174
|
+
break;
|
|
175
|
+
case "step":
|
|
176
|
+
if (typeof node.step !== "string" || node.step.length === 0) errors.push(`Node ${id} names no step`);
|
|
177
|
+
else if (library !== void 0 && !library.has(node.step)) errors.push(`Node ${id} uses step ${node.step}, which is not in the step library`);
|
|
178
|
+
break;
|
|
179
|
+
case "sleep":
|
|
180
|
+
if (durationMs(node.config?.["duration"]) === void 0) errors.push(`Node ${id} has no valid duration`);
|
|
181
|
+
break;
|
|
182
|
+
case "approval": break;
|
|
183
|
+
case "condition":
|
|
184
|
+
if (conditionOf(node) === void 0) errors.push(`Node ${id} has no valid condition`);
|
|
185
|
+
break;
|
|
186
|
+
default: {
|
|
187
|
+
const unknown = node.kind;
|
|
188
|
+
errors.push(`Node ${id} has an unknown kind ${String(unknown)}`);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
if (triggers !== 1) errors.push("A graph has exactly one trigger node");
|
|
193
|
+
const edgeIds = /* @__PURE__ */ new Set();
|
|
194
|
+
const edges = [];
|
|
195
|
+
for (const value of graph["edges"]) {
|
|
196
|
+
const id = isGraphRecord(value) && typeof value["id"] === "string" ? value["id"] : "?";
|
|
197
|
+
if (!isGraphRecord(value) || typeof value["source"] !== "string" || typeof value["target"] !== "string" || !nodes.has(value["source"]) || !nodes.has(value["target"])) {
|
|
198
|
+
errors.push(`Edge ${id} joins a node that does not exist`);
|
|
199
|
+
continue;
|
|
200
|
+
}
|
|
201
|
+
if (edgeIds.has(id)) errors.push(`Edge ${id} appears twice`);
|
|
202
|
+
edgeIds.add(id);
|
|
203
|
+
const source = nodes.get(value["source"]);
|
|
204
|
+
const target = nodes.get(value["target"]);
|
|
205
|
+
const branch = value["branch"];
|
|
206
|
+
if (branch !== void 0) {
|
|
207
|
+
if (branch !== "true" && branch !== "false") errors.push(`Edge ${id} has a branch other than "true" or "false"`);
|
|
208
|
+
else if (source !== void 0 && !BRANCHING.has(source.kind)) errors.push(`Edge ${id} branches from a ${source.kind} node`);
|
|
209
|
+
}
|
|
210
|
+
if (target?.kind === "trigger") errors.push(`Edge ${id} leads into the trigger node`);
|
|
211
|
+
edges.push({
|
|
212
|
+
id,
|
|
213
|
+
source: value["source"],
|
|
214
|
+
target: value["target"]
|
|
215
|
+
});
|
|
216
|
+
}
|
|
217
|
+
if (errors.length === 0 && topologicalOrder({
|
|
218
|
+
nodes: [...nodes.values()],
|
|
219
|
+
edges
|
|
220
|
+
}) === void 0) errors.push("The graph has a cycle");
|
|
221
|
+
return errors;
|
|
222
|
+
}
|
|
223
|
+
const nodeContent = (node) => JSON.stringify([
|
|
224
|
+
node.kind,
|
|
225
|
+
node.step,
|
|
226
|
+
node.label,
|
|
227
|
+
node.config
|
|
228
|
+
]);
|
|
229
|
+
const edgeKey = (edge) => `${edge.source}->${edge.target}${edge.branch === void 0 ? "" : `:${edge.branch}`}`;
|
|
230
|
+
/** What changed from `before` to `after`, by node id and by edge ends. */
|
|
231
|
+
function diffGraphs(before, after) {
|
|
232
|
+
const old = new Map(before.nodes.map((node) => [node.id, node]));
|
|
233
|
+
const now = new Map(after.nodes.map((node) => [node.id, node]));
|
|
234
|
+
const oldEdges = new Set(before.edges.map(edgeKey));
|
|
235
|
+
const newEdges = new Set(after.edges.map(edgeKey));
|
|
236
|
+
return {
|
|
237
|
+
nodes: {
|
|
238
|
+
added: [...now.keys()].filter((id) => !old.has(id)),
|
|
239
|
+
removed: [...old.keys()].filter((id) => !now.has(id)),
|
|
240
|
+
changed: [...now.values()].filter((node) => {
|
|
241
|
+
const previous = old.get(node.id);
|
|
242
|
+
return previous !== void 0 && nodeContent(previous) !== nodeContent(node);
|
|
243
|
+
}).map((node) => node.id)
|
|
244
|
+
},
|
|
245
|
+
edges: {
|
|
246
|
+
added: [...newEdges].filter((key) => !oldEdges.has(key)),
|
|
247
|
+
removed: [...oldEdges].filter((key) => !newEdges.has(key))
|
|
248
|
+
}
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
/** `value` as a graph, or an empty one when it isn't shaped like one. */
|
|
252
|
+
function graphOf(value) {
|
|
253
|
+
if (!isGraphRecord(value)) return {
|
|
254
|
+
nodes: [],
|
|
255
|
+
edges: []
|
|
256
|
+
};
|
|
257
|
+
const nodes = Array.isArray(value["nodes"]) ? value["nodes"] : [];
|
|
258
|
+
const edges = Array.isArray(value["edges"]) ? value["edges"] : [];
|
|
259
|
+
return {
|
|
260
|
+
nodes: nodes.flatMap((node) => nodeOf(node) ?? []),
|
|
261
|
+
edges: edges.flatMap((edge) => edgeOf(edge) ?? [])
|
|
262
|
+
};
|
|
263
|
+
}
|
|
264
|
+
//#endregion
|
|
265
|
+
export { evaluateCondition as a, topologicalOrder as c, durationMs as i, validateGraph as l, conditionOf as n, graphOf as o, diffGraphs as r, isGraphRecord as s, approved as t };
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { n as RouteGuardOptions } from "../refusal-D1rgbzNq.js";
|
|
2
|
+
import { t as Validated } from "../shared-DDSjEGDR.js";
|
|
3
|
+
import { AnyEntry, Contributions } from "@supabase/middleware";
|
|
4
|
+
//#region src/bridges/h3.d.ts
|
|
5
|
+
/** The part of an H3 2 event the bridge reads and writes. */
|
|
6
|
+
interface H3Event<Context extends object> {
|
|
7
|
+
readonly req: Request;
|
|
8
|
+
readonly context: Context & {
|
|
9
|
+
/** Nitro's Cloudflare presets put the bindings here. */
|
|
10
|
+
readonly cloudflare?: {
|
|
11
|
+
readonly env?: unknown;
|
|
12
|
+
} | undefined;
|
|
13
|
+
};
|
|
14
|
+
/** The status and headers a handler set with `event.res`, kept on a plain return value. */
|
|
15
|
+
readonly res?: {
|
|
16
|
+
readonly status?: number | undefined;
|
|
17
|
+
readonly statusText?: string | undefined;
|
|
18
|
+
readonly headers?: Headers | undefined;
|
|
19
|
+
} | undefined;
|
|
20
|
+
}
|
|
21
|
+
interface ToH3Options<Context extends object> {
|
|
22
|
+
/** The host's env object for `getEnv`; defaults to `event.context.cloudflare.env`. */
|
|
23
|
+
readonly env?: (event: H3Event<Context>) => unknown;
|
|
24
|
+
}
|
|
25
|
+
/** H3 2 middleware, typed structurally so the package does not import `h3`. */
|
|
26
|
+
type H3Middleware<Context extends object> = (event: H3Event<Context>, next: () => unknown) => Promise<Response>;
|
|
27
|
+
/**
|
|
28
|
+
* Runs an entry array as H3 2 middleware (`app.use(...)`, Nitro and Nuxt
|
|
29
|
+
* server middleware). Every contributed key lands on `event.context`, and
|
|
30
|
+
* the handler's value comes back as a `Response` (JSON for plain values)
|
|
31
|
+
* so response-phase entries can add headers and cookies.
|
|
32
|
+
*
|
|
33
|
+
* ```ts
|
|
34
|
+
* app.use(toH3([withBetterSupabase(server)]))
|
|
35
|
+
* app.get('/notes', (event) => event.context.db.notes.findMany().orThrow())
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export declare function toH3<const Entries extends readonly AnyEntry[]>(entries: Entries & Validated<Entries>, options?: ToH3Options<Partial<Contributions<Entries>>>): H3Middleware<Partial<Contributions<Entries>>>;
|
|
39
|
+
//#endregion
|
|
40
|
+
//#region src/h3/guard.d.ts
|
|
41
|
+
/**
|
|
42
|
+
* Route middleware that refuses callers outside `options`: Problem Details,
|
|
43
|
+
* or a redirect to `signIn` or `mfa`. Runs after `toH3(...)`.
|
|
44
|
+
*
|
|
45
|
+
* ```ts
|
|
46
|
+
* app.get('/admin', handler, { middleware: [guard({ roles: ['admin'] })] })
|
|
47
|
+
* ```
|
|
48
|
+
*/
|
|
49
|
+
export declare function guard(options?: RouteGuardOptions): (event: H3Event<object>, next: () => unknown) => Promise<unknown>;
|
|
50
|
+
/**
|
|
51
|
+
* An `onError` handler for `new H3({ onError })` that answers thrown
|
|
52
|
+
* `DbException`s (from `.orThrow()`) with Problem Details and leaves every
|
|
53
|
+
* other error to H3.
|
|
54
|
+
*/
|
|
55
|
+
export declare function problemOnError(options?: {
|
|
56
|
+
readonly expose?: boolean;
|
|
57
|
+
}): (error: unknown, event: H3Event<object>) => Response | undefined;
|
|
58
|
+
//#endregion
|
|
59
|
+
export type { H3Event, H3Middleware, RouteGuardOptions, ToH3Options };
|