better-supabase 0.5.1 → 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 +187 -46
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
- 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-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
- 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-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect-BKlaIu_M.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-Bo_NLT5n.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-BCtlgDQx.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-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
- 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-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-BiJZ4t49.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-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
- 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-Daak8ukG.d.ts +54 -0
- 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-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
- package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
- package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-DNRFP7KR.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 -22
- package/dist/server/index.js +46 -14
- package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
- 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 +313 -212
- package/dist/sql/index.js +34872 -6579
- 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-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
- package/dist/{support-view-B8SlToQX.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 +315 -41
- package/dist/testing/index.js +1046 -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-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
- 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 +461 -20
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +20 -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 +47 -11
- 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-CIdSQZad.js +0 -2
- package/dist/cli/gen-CjElD1Vw.js +0 -2241
- package/dist/cli/read-sets-VQcPgxU9.js +0 -436
- package/dist/cli/sql-CVx-1O8G.js +0 -373
- 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/index-CWMDdEr4.d.ts +0 -50
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dp2VDwog.d.ts +0 -161
- 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/mfa-Cu96oJdw.d.ts +0 -30
- 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-B1mZ7CgQ.js +0 -660
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-CEPwlw2G.d.ts +0 -89
- 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 -122
package/dist/next/index.js
CHANGED
|
@@ -1,16 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { n as
|
|
3
|
-
import {
|
|
4
|
-
import { t as
|
|
5
|
-
import {
|
|
1
|
+
import { t as DbException } from "../db-exception-CnWcYPxL.js";
|
|
2
|
+
import { n as dbError } from "../errors-B11Duf73.js";
|
|
3
|
+
import { r as err } from "../result-DzUbqgdW.js";
|
|
4
|
+
import { n as StatsRecorder, t as EMPTY_STATS } from "../stats-D_AD9GGu.js";
|
|
5
|
+
import { o as isReadSet } from "../read-set-DuKWC9Mj.js";
|
|
6
6
|
import { t as isList } from "../guards-BnzDvFrz.js";
|
|
7
|
+
import { n as validate } from "../standard-BK0cqJ7y.js";
|
|
8
|
+
import { a as problemResponse } from "../problem-BreOl8b8.js";
|
|
9
|
+
import { i as claimsOf } from "../claims-PqzCxaTD.js";
|
|
7
10
|
import { t as supportOf } from "../support-view-g4YLBeqX.js";
|
|
8
|
-
import { t as
|
|
9
|
-
import {
|
|
10
|
-
import { a as checkAal, n as toSession } from "../view-
|
|
11
|
-
import { t as
|
|
11
|
+
import { t as tenantOf } from "../tenant-I1TEZ_BX.js";
|
|
12
|
+
import { C as serverCore, c as extendServer, l as withExtra, n as flushEvents, p as supportCookieMaxAge, r as handle, s as createServer, t as bearerRequest, v as isPrefetch } from "../adapter-Bc1o3zyy.js";
|
|
13
|
+
import { a as checkAal, n as toSession } from "../view-BeFcRV6G.js";
|
|
14
|
+
import { o as settle, r as guard, t as defaultExpose } from "../respond-BUgsXNgk.js";
|
|
15
|
+
import { t as supportSessions } from "../support-BivNqSpK.js";
|
|
16
|
+
import { r as tagFor, t as cacheTagsOf } from "../tags-B99_U9Pp.js";
|
|
17
|
+
import { n as formDataObject } from "../kit-Fm-Fv7q5.js";
|
|
12
18
|
import { cache } from "react";
|
|
13
|
-
import { cacheLife, cacheTag, revalidateTag, updateTag } from "next/cache.js";
|
|
19
|
+
import { cacheLife, cacheTag, io, revalidateTag, updateTag } from "next/cache.js";
|
|
20
|
+
import { forbidden } from "next/dist/client/components/forbidden.js";
|
|
21
|
+
import { notFound } from "next/dist/client/components/not-found.js";
|
|
22
|
+
import { unauthorized } from "next/dist/client/components/unauthorized.js";
|
|
14
23
|
import { cookies, headers } from "next/headers.js";
|
|
15
24
|
import { NextResponse, after } from "next/server.js";
|
|
16
25
|
//#region src/next/collector.ts
|
|
@@ -37,13 +46,17 @@ var StatsCollector = class {
|
|
|
37
46
|
constructor(options) {
|
|
38
47
|
this.#options = options;
|
|
39
48
|
}
|
|
40
|
-
/**
|
|
41
|
-
|
|
49
|
+
/**
|
|
50
|
+
* The recorder for a request id, created on first use. `options` sets the
|
|
51
|
+
* budget and logger of a new entry; the collector's own are the default.
|
|
52
|
+
*/
|
|
53
|
+
recorderFor(id, options) {
|
|
42
54
|
const existing = this.#entries.get(id);
|
|
43
55
|
if (existing) return existing.recorder;
|
|
44
56
|
this.#prune();
|
|
45
57
|
const entry = {
|
|
46
58
|
created: Date.now(),
|
|
59
|
+
options: options ?? this.#options,
|
|
47
60
|
recorder: new CollectedRecorder(() => {
|
|
48
61
|
this.#schedule(id);
|
|
49
62
|
})
|
|
@@ -55,19 +68,20 @@ var StatsCollector = class {
|
|
|
55
68
|
return this.#entries.get(id)?.recorder.snapshot();
|
|
56
69
|
}
|
|
57
70
|
#schedule(id) {
|
|
58
|
-
const { budget, warn } = this.#options;
|
|
59
71
|
const entry = this.#entries.get(id);
|
|
60
|
-
if (!entry
|
|
72
|
+
if (!entry) return;
|
|
73
|
+
const { budget, warn, logger, idleMs } = entry.options;
|
|
74
|
+
if (!warn || !budget) return;
|
|
61
75
|
if (entry.timer) clearTimeout(entry.timer);
|
|
62
76
|
entry.timer = setTimeout(() => {
|
|
63
77
|
entry.timer = void 0;
|
|
64
78
|
const stats = entry.recorder.snapshot();
|
|
65
79
|
if (!overBudget(stats, budget)) return;
|
|
66
|
-
|
|
80
|
+
logger.warn(`request ${id} made ${stats.calls} database calls in ${stats.waves} waves, over the budget of ${describeBudget(budget)}`, {
|
|
67
81
|
requestId: id,
|
|
68
82
|
...stats
|
|
69
83
|
});
|
|
70
|
-
},
|
|
84
|
+
}, idleMs ?? 250);
|
|
71
85
|
}
|
|
72
86
|
#prune() {
|
|
73
87
|
const cutoff = Date.now() - (this.#options.ttlMs ?? 6e4);
|
|
@@ -81,13 +95,18 @@ var StatsCollector = class {
|
|
|
81
95
|
};
|
|
82
96
|
const SHARED = Symbol.for("better-supabase.next.stats-collector");
|
|
83
97
|
/**
|
|
84
|
-
* One
|
|
85
|
-
* handlers as separate module instances, and they must see the
|
|
98
|
+
* One store of request totals per process. Next.js can load the proxy, pages
|
|
99
|
+
* and route handlers as separate module instances, and they must see the
|
|
100
|
+
* same totals. Each caller's budget and logger apply to the requests it
|
|
101
|
+
* starts, so a second app in the process keeps its own.
|
|
86
102
|
*/
|
|
87
103
|
function sharedCollector(options) {
|
|
88
104
|
const scope = globalThis;
|
|
89
|
-
scope[SHARED] ??= new StatsCollector(options);
|
|
90
|
-
return
|
|
105
|
+
const shared = scope[SHARED] ??= new StatsCollector(options);
|
|
106
|
+
return {
|
|
107
|
+
recorderFor: (id) => shared.recorderFor(id, options),
|
|
108
|
+
get: (id) => shared.get(id)
|
|
109
|
+
};
|
|
91
110
|
}
|
|
92
111
|
function overBudget(stats, budget) {
|
|
93
112
|
return budget.calls !== void 0 && stats.calls > budget.calls || budget.waves !== void 0 && stats.waves > budget.waves;
|
|
@@ -150,55 +169,97 @@ const STATS_URL_HEADER = "x-bs-stats";
|
|
|
150
169
|
function supportTag(sessionId) {
|
|
151
170
|
return `bs:support:${sessionId}`;
|
|
152
171
|
}
|
|
172
|
+
/** The shortest time the Next.js client router keeps a prefetched entry. */
|
|
173
|
+
const MIN_CLIENT_STALE = 30;
|
|
153
174
|
/**
|
|
154
175
|
* `cacheLife` `stale` seconds for a view of `session`: `max`, but never past
|
|
155
|
-
* the token's expiry, and
|
|
176
|
+
* the token's expiry, and 0 once fewer than `min` seconds are left. A
|
|
177
|
+
* signed-out view that a refresh would change (an `expired` or
|
|
178
|
+
* `refresh_failed` cookie, or an `invalid` token) is 0 as well, so it never
|
|
179
|
+
* joins the App Shell.
|
|
156
180
|
*/
|
|
157
181
|
function sessionStale(session, options = {}, now = Date.now()) {
|
|
158
|
-
const min = options.min ??
|
|
182
|
+
const min = Math.max(MIN_CLIENT_STALE, options.min ?? MIN_CLIENT_STALE);
|
|
159
183
|
const max = options.max ?? 300;
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
184
|
+
switch (session.kind) {
|
|
185
|
+
case "invalid": return 0;
|
|
186
|
+
case "anon": return session.reason === "expired" || session.reason === "refresh_failed" ? 0 : max;
|
|
187
|
+
case "service":
|
|
188
|
+
case "apiKey": return max;
|
|
189
|
+
case "user": {
|
|
190
|
+
if (session.expiresAt === null) return max;
|
|
191
|
+
const remaining = session.expiresAt - Math.floor(now / 1e3);
|
|
192
|
+
return remaining < min ? 0 : Math.min(max, remaining);
|
|
193
|
+
}
|
|
194
|
+
default: return session;
|
|
195
|
+
}
|
|
163
196
|
}
|
|
164
197
|
/** The tag `bs.cached()` puts on a user's entries. */
|
|
165
198
|
function sessionTag(userId) {
|
|
166
199
|
return `bs:session:${userId}`;
|
|
167
200
|
}
|
|
168
|
-
/**
|
|
169
|
-
|
|
170
|
-
|
|
201
|
+
/**
|
|
202
|
+
* The table tags of a read: the tenant's and every tenant's, or the table's.
|
|
203
|
+
* A read across tenants (`"*"`) also carries the table's, which every
|
|
204
|
+
* mutation invalidates, including one scoped to a single tenant.
|
|
205
|
+
*/
|
|
206
|
+
function tableTags(table, options) {
|
|
207
|
+
if (options.tenant === "*") return [tagFor(table), tagFor(table, void 0, options)];
|
|
208
|
+
return options.tenant === void 0 ? [tagFor(table)] : [tagFor(table, void 0, options), tagFor(table, void 0, { tenant: "*" })];
|
|
171
209
|
}
|
|
172
|
-
|
|
210
|
+
/** The next read waits for fresh data instead of serving the stale entry. */
|
|
211
|
+
const EXPIRE_NOW = { expire: 0 };
|
|
212
|
+
/**
|
|
213
|
+
* Invalidates tags with `updateTag` (Server Actions), else `revalidateTag`
|
|
214
|
+
* (Route Handlers), else not at all (jobs, scripts). The first tag decides
|
|
215
|
+
* for the rest, so a mutation outside an action throws once, not per tag.
|
|
216
|
+
*/
|
|
217
|
+
function invalidateAll(tags, profile = EXPIRE_NOW) {
|
|
218
|
+
let index = 0;
|
|
173
219
|
try {
|
|
174
|
-
updateTag(
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
}
|
|
220
|
+
for (; index < tags.length; index++) updateTag(tags[index]);
|
|
221
|
+
return;
|
|
222
|
+
} catch {}
|
|
223
|
+
try {
|
|
224
|
+
for (; index < tags.length; index++) revalidateTag(tags[index], profile);
|
|
225
|
+
} catch {}
|
|
180
226
|
}
|
|
181
227
|
/**
|
|
182
|
-
* Invalidates `bs:<table>` for every table in the target
|
|
183
|
-
* `bs:<table
|
|
184
|
-
* `
|
|
228
|
+
* Invalidates `bs:<table>` for every table in the target, the tenant's
|
|
229
|
+
* `bs:<table>@<tenant>` (every tenant's `bs:<table>@*` when the mutation has
|
|
230
|
+
* no tenant) and `bs:<table>:<id>` for the changed rows. Reads another tenant
|
|
231
|
+
* tagged stay cached. `createNext` attaches it unless `cacheTags: false`.
|
|
185
232
|
*/
|
|
186
|
-
function nextCache() {
|
|
233
|
+
function nextCache(options = {}) {
|
|
187
234
|
return {
|
|
188
235
|
name: "next",
|
|
189
236
|
invalidate: (target) => {
|
|
190
|
-
|
|
191
|
-
for (const id of target.ids) invalidate(tagFor(target.table, id));
|
|
237
|
+
invalidateAll(cacheTagsOf(target), options.revalidate);
|
|
192
238
|
}
|
|
193
239
|
};
|
|
194
240
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
241
|
+
/** Whether `cause` is one of Next's own control-flow errors (they carry a `digest`). */
|
|
242
|
+
function isNextInterrupt(cause) {
|
|
243
|
+
return cause instanceof Error && "digest" in cause && typeof cause.digest === "string";
|
|
244
|
+
}
|
|
245
|
+
/**
|
|
246
|
+
* `unauthorized()` and `forbidden()` throw a plain error without
|
|
247
|
+
* `experimental.authInterrupts`; `notFound()` is the fallback then.
|
|
248
|
+
*/
|
|
249
|
+
function authInterrupt(fn) {
|
|
250
|
+
try {
|
|
251
|
+
fn();
|
|
252
|
+
} catch (cause) {
|
|
253
|
+
if (isNextInterrupt(cause)) throw cause;
|
|
200
254
|
}
|
|
201
|
-
|
|
255
|
+
notFound();
|
|
256
|
+
}
|
|
257
|
+
/** The Next.js interrupt for a refused Server Component render. */
|
|
258
|
+
function interrupt(error) {
|
|
259
|
+
if (error.kind === "unauthorized") authInterrupt(unauthorized);
|
|
260
|
+
if (error.kind === "forbidden") authInterrupt(forbidden);
|
|
261
|
+
if (error.kind === "not_found") notFound();
|
|
262
|
+
throw new DbException(error);
|
|
202
263
|
}
|
|
203
264
|
/**
|
|
204
265
|
* A `proxy` `protect` that keeps signed-in users below `level` out of the
|
|
@@ -225,17 +286,35 @@ function requireAal(level, options = {}) {
|
|
|
225
286
|
return NextResponse.redirect(target);
|
|
226
287
|
};
|
|
227
288
|
}
|
|
289
|
+
function endedRedirect(request, path) {
|
|
290
|
+
const target = new URL(path, request.url);
|
|
291
|
+
target.searchParams.set("reason", "session_ended");
|
|
292
|
+
return NextResponse.redirect(target);
|
|
293
|
+
}
|
|
294
|
+
function shouldCheckSession(request, options = {}) {
|
|
295
|
+
if (request.method !== "GET" && request.method !== "HEAD") return false;
|
|
296
|
+
if (isPrefetch(request)) return false;
|
|
297
|
+
if (request.headers.get("sec-fetch-dest") === "document") return true;
|
|
298
|
+
return options.paths?.includes(request.nextUrl.pathname) ?? false;
|
|
299
|
+
}
|
|
228
300
|
/** Page loads, client navigations and server actions; never prefetches or assets. */
|
|
229
301
|
function shouldRefresh(request) {
|
|
230
302
|
const h = request.headers;
|
|
231
303
|
if (request.method !== "GET" && request.method !== "HEAD") return h.has("next-action");
|
|
232
|
-
if (
|
|
304
|
+
if (isPrefetch(request)) return false;
|
|
233
305
|
if (h.get("rsc") === "1") return true;
|
|
234
306
|
const dest = h.get("sec-fetch-dest");
|
|
235
307
|
if (dest) return dest === "document";
|
|
236
308
|
return h.get("accept")?.includes("text/html") ?? false;
|
|
237
309
|
}
|
|
238
310
|
/**
|
|
311
|
+
* Event hubs that already invalidate Next.js cache tags. Every instance a
|
|
312
|
+
* definition derives shares its hub, and `createNext` can run again for one
|
|
313
|
+
* definition (hot reload, a definition in another package), so tags are
|
|
314
|
+
* invalidated once per mutation.
|
|
315
|
+
*/
|
|
316
|
+
const nextCacheAttached = /* @__PURE__ */ new WeakSet();
|
|
317
|
+
/**
|
|
239
318
|
* The Next.js adapter: proxy, Server Components, route handlers, server
|
|
240
319
|
* actions and cache tags, on top of `createServer`.
|
|
241
320
|
*
|
|
@@ -245,9 +324,12 @@ function shouldRefresh(request) {
|
|
|
245
324
|
*/
|
|
246
325
|
function createNext(betterSupabase, options = {}) {
|
|
247
326
|
const base = createServer(betterSupabase, options);
|
|
248
|
-
const
|
|
327
|
+
const core = serverCore(base);
|
|
249
328
|
const expose = options.exposeErrors ?? defaultExpose();
|
|
250
|
-
if (options.cacheTags !== false
|
|
329
|
+
if (options.cacheTags !== false && !nextCacheAttached.has(betterSupabase.events)) {
|
|
330
|
+
nextCacheAttached.add(betterSupabase.events);
|
|
331
|
+
betterSupabase.cache(nextCache());
|
|
332
|
+
}
|
|
251
333
|
const debug = options.debug;
|
|
252
334
|
const statsHeader = debug?.header ?? "x-bs-db-calls";
|
|
253
335
|
const statsRoute = debug?.route ?? "/api/bs-stats";
|
|
@@ -261,35 +343,62 @@ function createNext(betterSupabase, options = {}) {
|
|
|
261
343
|
const id = collector && request.headers.get("x-bs-request-id");
|
|
262
344
|
return id ? { stats: collector.recorderFor(id) } : {};
|
|
263
345
|
};
|
|
264
|
-
|
|
265
|
-
const flushAfter = () => {
|
|
266
|
-
const { events } = betterSupabase;
|
|
267
|
-
if (!events.pending) return;
|
|
346
|
+
const waitUntil = (work) => {
|
|
268
347
|
try {
|
|
269
|
-
after(() =>
|
|
348
|
+
after(() => work);
|
|
270
349
|
} catch (cause) {
|
|
271
|
-
events.logger.warn("after() is unavailable; event sends may be cut off", { cause });
|
|
350
|
+
betterSupabase.events.logger.warn("after() is unavailable; event sends may be cut off", { cause });
|
|
272
351
|
}
|
|
273
352
|
};
|
|
353
|
+
/** Keeps the function alive for event sink sends the handler started. */
|
|
354
|
+
const flushAfter = () => {
|
|
355
|
+
flushEvents(betterSupabase, waitUntil);
|
|
356
|
+
};
|
|
357
|
+
/** Sets the context's cookies (the replica pin) through Next's cookie jar. */
|
|
358
|
+
const writeCookies = async (ctx) => {
|
|
359
|
+
const writes = ctx.cookies();
|
|
360
|
+
if (writes.length === 0) return;
|
|
361
|
+
const jar = await cookies();
|
|
362
|
+
for (const write of writes) jar.set(write.name, write.value, write.options);
|
|
363
|
+
};
|
|
274
364
|
const incomingRequest = async () => new Request("http://next.local/", { headers: new Headers(await headers()) });
|
|
275
365
|
/** One token verification per render scope backs `context()`, `session()` and `cached()`. */
|
|
276
366
|
const incoming = cache(async () => {
|
|
367
|
+
await io();
|
|
277
368
|
const request = await incomingRequest();
|
|
278
369
|
return {
|
|
279
370
|
request,
|
|
280
371
|
resolution: await base.resolve(request, { refresh: false })
|
|
281
372
|
};
|
|
282
373
|
});
|
|
283
|
-
const
|
|
374
|
+
const tenantClaim = claimsOf(betterSupabase.meta).tenant;
|
|
375
|
+
/** The tenant `scoped` resolved for a context, when it wasn't the claim. */
|
|
376
|
+
const scopedTenants = /* @__PURE__ */ new WeakMap();
|
|
377
|
+
const tenantFor = (ctx, view) => scopedTenants.get(ctx) ?? tenantOf(view, tenantClaim);
|
|
378
|
+
/** `requireTenant` and `authorize`: the session and tenant, or why the caller is refused. */
|
|
379
|
+
const authorizeCaller = async (ctx, checks, input) => {
|
|
380
|
+
const view = toSession(ctx.auth);
|
|
381
|
+
const tenant = tenantFor(ctx, view);
|
|
382
|
+
if (checks.requireTenant && tenant === void 0) return dbError("forbidden", "Choose an organization first", { code: "NO_TENANT" });
|
|
383
|
+
if (checks.authorize && !await checks.authorize(view, input)) return dbError("forbidden", "You are not allowed to do this", { code: "NOT_AUTHORIZED" });
|
|
384
|
+
return {
|
|
385
|
+
session: view,
|
|
386
|
+
tenant
|
|
387
|
+
};
|
|
388
|
+
};
|
|
389
|
+
/** `null` runs `NextOptions.tenant`; a string is the caller's explicit tenant. */
|
|
390
|
+
const scoped = cache(async (explicit) => {
|
|
284
391
|
const { request, resolution } = await incoming();
|
|
285
|
-
const [tenant, support] = await Promise.all([options.tenant?.(request, resolution.auth), base.support.current(request, resolution.auth)]);
|
|
286
|
-
|
|
392
|
+
const [tenant, support] = await Promise.all([explicit ?? options.tenant?.(request, resolution.auth), base.support.current(request, resolution.auth)]);
|
|
393
|
+
const ctx = core.context(resolution, request, {
|
|
287
394
|
...statsFor(request),
|
|
288
|
-
...tenant === void 0 ? {} : { tenant },
|
|
289
395
|
...support ? { support } : {}
|
|
290
|
-
});
|
|
396
|
+
}, tenant);
|
|
397
|
+
if (tenant !== void 0) scopedTenants.set(ctx, tenant);
|
|
398
|
+
return ctx;
|
|
291
399
|
});
|
|
292
|
-
const
|
|
400
|
+
const current = (tenant) => scoped(tenant ?? null);
|
|
401
|
+
const context = (first, contextOptions) => first instanceof Request ? base.context(first, contextOptions) : current(first?.tenant ?? contextOptions?.tenant);
|
|
293
402
|
/** In a support session, the target's view: `impersonator` names the admin. */
|
|
294
403
|
const session = cache(async () => toSession(options.support ? (await current()).auth : (await incoming()).resolution.auth));
|
|
295
404
|
const supportCookieName = options.support?.options.cookie?.name ?? "bs-support";
|
|
@@ -300,8 +409,8 @@ function createNext(betterSupabase, options = {}) {
|
|
|
300
409
|
secure: options.support?.options.cookie?.secure ?? true
|
|
301
410
|
};
|
|
302
411
|
const contextForSession = async (view, { token }) => {
|
|
303
|
-
const
|
|
304
|
-
|
|
412
|
+
const ctx = await base.context(bearerRequest(token));
|
|
413
|
+
if (ctx.auth.kind === "invalid") return ctx;
|
|
305
414
|
if (ctx.auth.kind === "user" ? view.kind === "user" && view.user.id === ctx.auth.user.id : view.kind === ctx.auth.kind) return ctx;
|
|
306
415
|
return base.contextFor({
|
|
307
416
|
kind: "invalid",
|
|
@@ -312,7 +421,15 @@ function createNext(betterSupabase, options = {}) {
|
|
|
312
421
|
const withAccounts = withExtra(base, {
|
|
313
422
|
context,
|
|
314
423
|
deleteAccount: ((userId, deleteOptions) => base.deleteAccount(userId, deleteOptions).map((result) => {
|
|
315
|
-
|
|
424
|
+
invalidateAll([sessionTag(userId)]);
|
|
425
|
+
return result;
|
|
426
|
+
})),
|
|
427
|
+
endSessions: ((userId) => base.endSessions(userId).map((result) => {
|
|
428
|
+
invalidateAll([sessionTag(userId)]);
|
|
429
|
+
return result;
|
|
430
|
+
})),
|
|
431
|
+
suspendAccount: ((userId, suspendOptions) => base.suspendAccount(userId, suspendOptions).map((result) => {
|
|
432
|
+
invalidateAll([sessionTag(userId)]);
|
|
316
433
|
return result;
|
|
317
434
|
}))
|
|
318
435
|
});
|
|
@@ -320,7 +437,7 @@ function createNext(betterSupabase, options = {}) {
|
|
|
320
437
|
session,
|
|
321
438
|
contextForSession,
|
|
322
439
|
async cached(cachedOptions = {}) {
|
|
323
|
-
const [view, ctx] = await Promise.all([session(), current()]);
|
|
440
|
+
const [view, ctx] = await Promise.all([session(), current(cachedOptions.tenant)]);
|
|
324
441
|
const life = cachedOptions.life;
|
|
325
442
|
const stale = sessionStale(view, life);
|
|
326
443
|
cacheLife({
|
|
@@ -328,36 +445,52 @@ function createNext(betterSupabase, options = {}) {
|
|
|
328
445
|
...life?.revalidate === void 0 ? {} : { revalidate: life.revalidate },
|
|
329
446
|
...life?.expire === void 0 ? {} : { expire: life.expire }
|
|
330
447
|
});
|
|
448
|
+
const tables = cachedOptions.tables ?? [];
|
|
449
|
+
const tenant = tables.length > 0 ? tenantFor(ctx, view) : void 0;
|
|
450
|
+
const first = tables[0];
|
|
331
451
|
const tags = [
|
|
332
452
|
...view.kind === "user" ? [sessionTag(view.user.id)] : [],
|
|
333
453
|
...ctx.support ? [supportTag(ctx.support.session.id)] : [],
|
|
334
|
-
...cachedOptions.tags ?? []
|
|
454
|
+
...cachedOptions.tags ?? [],
|
|
455
|
+
...tables.flatMap((table) => tableTags(table, tenant === void 0 ? {} : { tenant })),
|
|
456
|
+
...first !== void 0 && cachedOptions.id !== void 0 ? [tagFor(first, cachedOptions.id)] : []
|
|
335
457
|
];
|
|
336
458
|
if (tags.length > 0) cacheTag(...tags);
|
|
337
459
|
return withExtra(ctx, { session: view });
|
|
338
460
|
},
|
|
339
461
|
invalidateSession(userId, invalidateOptions = {}) {
|
|
340
|
-
|
|
341
|
-
for (const tag of invalidateOptions.tags ?? []) invalidate(tag);
|
|
462
|
+
invalidateAll([sessionTag(userId), ...invalidateOptions.tags ?? []]);
|
|
342
463
|
},
|
|
343
464
|
async liveCount(spec, db) {
|
|
344
465
|
const result = await (db ?? (await current()).db).$run(spec);
|
|
345
466
|
return {
|
|
346
467
|
spec,
|
|
347
|
-
count: result.ok && typeof result.data === "number" ? result.data : null
|
|
468
|
+
count: result.ok && typeof result.data === "number" ? result.data : null,
|
|
469
|
+
at: Date.now()
|
|
348
470
|
};
|
|
349
471
|
},
|
|
350
472
|
async proxy(request, proxyOptions = {}) {
|
|
351
473
|
const started = performance.now();
|
|
352
474
|
const id = collector ? crypto.randomUUID() : void 0;
|
|
353
475
|
let verifyMs = 0;
|
|
354
|
-
const
|
|
476
|
+
const sessionCheck = proxyOptions.endedSession === true ? {} : proxyOptions.endedSession;
|
|
477
|
+
const checkSession = sessionCheck !== void 0 && shouldCheckSession(request, sessionCheck);
|
|
478
|
+
const [early, resolution] = await Promise.all([proxyOptions.before?.(request), base.resolve(request, {
|
|
479
|
+
refresh: shouldRefresh(request),
|
|
480
|
+
...checkSession ? { checkSession } : {}
|
|
481
|
+
}).then((resolved) => {
|
|
355
482
|
verifyMs = performance.now() - started;
|
|
356
483
|
return resolved;
|
|
357
484
|
})]);
|
|
358
|
-
const
|
|
485
|
+
const rendersSignedOut = proxyOptions.expiredPrefetch === "render" && resolution.auth.kind === "anon" && resolution.auth.reason === "expired" && isPrefetch(request);
|
|
486
|
+
const protectMethods = proxyOptions.protectMethods;
|
|
487
|
+
const runsProtect = protectMethods === true ? true : (protectMethods ?? ["GET", "HEAD"]).includes(request.method);
|
|
488
|
+
const custom = (resolution.sessionEnded === true && sessionCheck?.redirect !== void 0 && request.nextUrl.pathname !== sessionCheck.redirect ? endedRedirect(request, sessionCheck.redirect) : void 0) ?? (rendersSignedOut || !runsProtect ? void 0 : await proxyOptions.protect?.(resolution.auth, request));
|
|
359
489
|
const initial = custom ?? early;
|
|
360
|
-
if (!initial && resolution.cookies.length === 0 && !id && !proxyOptions.after && !proxyOptions.serverTiming)
|
|
490
|
+
if (!initial && resolution.cookies.length === 0 && !id && !proxyOptions.after && !proxyOptions.serverTiming) {
|
|
491
|
+
flushAfter();
|
|
492
|
+
return NextResponse.next();
|
|
493
|
+
}
|
|
361
494
|
let response = resolution.apply(mutableResponse(initial ?? NextResponse.next()));
|
|
362
495
|
if (!custom && !isRedirect(response)) {
|
|
363
496
|
const forwarded = {};
|
|
@@ -377,35 +510,38 @@ function createNext(betterSupabase, options = {}) {
|
|
|
377
510
|
"bs-proxy": performance.now() - started,
|
|
378
511
|
"bs-verify": verifyMs
|
|
379
512
|
}));
|
|
513
|
+
flushAfter();
|
|
380
514
|
return response;
|
|
381
515
|
},
|
|
382
516
|
route(handler, guardOptions = {}) {
|
|
383
517
|
return async (request, segment) => {
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
const instance = request.nextUrl.pathname;
|
|
387
|
-
if (denied) return problemResponse(denied, {
|
|
388
|
-
instance,
|
|
389
|
-
expose
|
|
390
|
-
});
|
|
391
|
-
const params = await segment.params;
|
|
518
|
+
let stats;
|
|
519
|
+
let current;
|
|
392
520
|
let response;
|
|
393
521
|
try {
|
|
394
|
-
response = await
|
|
395
|
-
|
|
396
|
-
|
|
522
|
+
response = await handle(base, request, async (ctx) => {
|
|
523
|
+
current = ctx;
|
|
524
|
+
stats = () => ctx.stats();
|
|
525
|
+
const [params, caller] = await Promise.all([segment.params, authorizeCaller(ctx, guardOptions, request)]);
|
|
526
|
+
if ("kind" in caller) return err(caller);
|
|
527
|
+
return handler(request, withExtra(ctx, {
|
|
528
|
+
...caller,
|
|
529
|
+
params
|
|
530
|
+
}));
|
|
531
|
+
}, {
|
|
532
|
+
...guardOptions,
|
|
533
|
+
expose,
|
|
534
|
+
instance: request.nextUrl.pathname,
|
|
535
|
+
context: statsFor(request),
|
|
536
|
+
waitUntil,
|
|
537
|
+
rethrow: rethrowNextControlFlow
|
|
397
538
|
});
|
|
398
539
|
} catch (cause) {
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
instance,
|
|
402
|
-
expose
|
|
403
|
-
});
|
|
540
|
+
if (current) await writeCookies(current);
|
|
541
|
+
throw cause;
|
|
404
542
|
}
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
if (collector) try {
|
|
408
|
-
response.headers.set(statsHeader, formatStats(ctx.stats()));
|
|
543
|
+
if (collector && stats) try {
|
|
544
|
+
response.headers.set(statsHeader, formatStats(stats()));
|
|
409
545
|
} catch {}
|
|
410
546
|
return response;
|
|
411
547
|
};
|
|
@@ -426,8 +562,8 @@ function createNext(betterSupabase, options = {}) {
|
|
|
426
562
|
},
|
|
427
563
|
action(actionOptions, fn) {
|
|
428
564
|
return async (input) => {
|
|
429
|
-
const
|
|
430
|
-
const denied = guard(
|
|
565
|
+
const early = actionOptions.tenant && !options.support ? void 0 : await current();
|
|
566
|
+
const denied = guard(early?.auth ?? (await incoming()).resolution.auth, actionOptions.allow, actionOptions.aal, actionOptions.scopes);
|
|
431
567
|
if (denied) return {
|
|
432
568
|
ok: false,
|
|
433
569
|
data: null,
|
|
@@ -443,9 +579,22 @@ function createNext(betterSupabase, options = {}) {
|
|
|
443
579
|
};
|
|
444
580
|
parsed = checked.data;
|
|
445
581
|
}
|
|
446
|
-
const
|
|
447
|
-
|
|
448
|
-
|
|
582
|
+
const tenant = actionOptions.tenant?.(parsed);
|
|
583
|
+
const ctx = tenant === void 0 ? early ?? await current() : await current(tenant);
|
|
584
|
+
const caller = await authorizeCaller(ctx, actionOptions, parsed);
|
|
585
|
+
if ("kind" in caller) return {
|
|
586
|
+
ok: false,
|
|
587
|
+
data: null,
|
|
588
|
+
error: caller
|
|
589
|
+
};
|
|
590
|
+
const scope = ctx;
|
|
591
|
+
let settled;
|
|
592
|
+
try {
|
|
593
|
+
settled = await settle(() => fn(parsed, withExtra(scope, caller)));
|
|
594
|
+
} finally {
|
|
595
|
+
flushAfter();
|
|
596
|
+
await writeCookies(ctx);
|
|
597
|
+
}
|
|
449
598
|
return settled.ok ? {
|
|
450
599
|
ok: true,
|
|
451
600
|
data: settled.data,
|
|
@@ -457,6 +606,12 @@ function createNext(betterSupabase, options = {}) {
|
|
|
457
606
|
};
|
|
458
607
|
};
|
|
459
608
|
},
|
|
609
|
+
require: async (requireOptions = {}) => {
|
|
610
|
+
const ctx = await current(requireOptions.tenant);
|
|
611
|
+
const caller = guard(ctx.auth, requireOptions.allow, requireOptions.aal, requireOptions.scopes) ?? await authorizeCaller(ctx, requireOptions, void 0);
|
|
612
|
+
if ("kind" in caller) interrupt(caller);
|
|
613
|
+
return withExtra(ctx, caller);
|
|
614
|
+
},
|
|
460
615
|
async startSupport(request) {
|
|
461
616
|
const { resolution } = await incoming();
|
|
462
617
|
const started = await base.support.start(resolution.auth, request);
|
|
@@ -469,9 +624,9 @@ function createNext(betterSupabase, options = {}) {
|
|
|
469
624
|
const { session: support } = started.data;
|
|
470
625
|
(await cookies()).set(supportCookieName, support.id, {
|
|
471
626
|
...supportCookieOptions,
|
|
472
|
-
maxAge:
|
|
627
|
+
maxAge: supportCookieMaxAge(support)
|
|
473
628
|
});
|
|
474
|
-
if (resolution.auth.kind === "user")
|
|
629
|
+
if (resolution.auth.kind === "user") invalidateAll([sessionTag(resolution.auth.user.id)]);
|
|
475
630
|
return {
|
|
476
631
|
ok: true,
|
|
477
632
|
data: {
|
|
@@ -498,8 +653,7 @@ function createNext(betterSupabase, options = {}) {
|
|
|
498
653
|
};
|
|
499
654
|
const stopped = await base.support.stop(resolution.auth, id);
|
|
500
655
|
flushAfter();
|
|
501
|
-
|
|
502
|
-
if (resolution.auth.kind === "user") invalidate(sessionTag(resolution.auth.user.id));
|
|
656
|
+
invalidateAll([supportTag(id), ...resolution.auth.kind === "user" ? [sessionTag(resolution.auth.user.id)] : []]);
|
|
503
657
|
return stopped.ok ? {
|
|
504
658
|
ok: true,
|
|
505
659
|
data: { ended: stopped.data.ended },
|
|
@@ -510,14 +664,14 @@ function createNext(betterSupabase, options = {}) {
|
|
|
510
664
|
error: stopped.error
|
|
511
665
|
};
|
|
512
666
|
},
|
|
513
|
-
cacheTag(table, id) {
|
|
514
|
-
cacheTag(
|
|
667
|
+
cacheTag(table, id, tagOptions = {}) {
|
|
668
|
+
cacheTag(...tableTags(table, tagOptions), ...id === void 0 ? [] : [tagFor(table, id)]);
|
|
515
669
|
},
|
|
516
|
-
cacheTags(target) {
|
|
670
|
+
cacheTags(target, tagOptions = {}) {
|
|
517
671
|
const specs = isReadSet(target) ? Object.values(target.specs) : isList(target) ? target : [target];
|
|
518
672
|
const tags = /* @__PURE__ */ new Set();
|
|
519
673
|
for (const spec of specs) {
|
|
520
|
-
for (const table of betterSupabase.tablesOf(spec)) tags.add(
|
|
674
|
+
for (const table of betterSupabase.tablesOf(spec)) for (const tag of tableTags(table, tagOptions)) tags.add(tag);
|
|
521
675
|
const [id] = spec.args;
|
|
522
676
|
if (spec.method === "findById" && (typeof id === "string" || typeof id === "number")) tags.add(tagFor(spec.table, id));
|
|
523
677
|
}
|
|
@@ -546,4 +700,4 @@ function rethrowNextControlFlow(error) {
|
|
|
546
700
|
if ("cause" in error) rethrowNextControlFlow(error.cause);
|
|
547
701
|
}
|
|
548
702
|
//#endregion
|
|
549
|
-
export { REQUEST_ID_HEADER, STATS_URL_HEADER, createNext,
|
|
703
|
+
export { REQUEST_ID_HEADER, STATS_URL_HEADER, createNext, nextCache, requireAal, sessionStale, sessionTag, shouldCheckSession, shouldRefresh, supportOf, supportSessions, supportTag, tagFor, tenantOf, toSession };
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { n as RouteGuardOptions } from "../refusal-D1rgbzNq.js";
|
|
2
|
+
import { i as toWebHeaders, r as applyWebHeaders, t as NodeHeaderTarget } from "../node-headers-AO06VhqH.js";
|
|
3
|
+
import { _ as toNodeHandler, a as FastifyReplyLike, b as toWebRequest, c as KoaMiddleware, d as guard, f as koaGuard, g as toKoa, h as toFastify, i as FastifyHook, l as ToNodeOptions, m as toExpress, n as ExpressMiddleware, o as FastifyRequestLike, p as problemErrorHandler, r as ExpressResponse, s as KoaContextLike, t as ExpressErrorHandler, u as fastifyGuard, v as WebRequestOptions, y as sendWebResponse } from "../index-DDrYaUcq.js";
|
|
4
|
+
export { ExpressErrorHandler, ExpressMiddleware, ExpressResponse, FastifyHook, FastifyReplyLike, FastifyRequestLike, KoaContextLike, KoaMiddleware, type NodeHeaderTarget, type RouteGuardOptions, ToNodeOptions, type WebRequestOptions, applyWebHeaders, fastifyGuard, guard, koaGuard, problemErrorHandler, sendWebResponse, toExpress, toFastify, toKoa, toNodeHandler, toWebHeaders, toWebRequest };
|