better-supabase 0.5.1 → 0.6.1
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-CHnPkCPd.js +1160 -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 +224 -0
- package/dist/blocks/attachments/index.js +234 -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 +259 -0
- package/dist/blocks/data-lifecycle/index.js +358 -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-BMqBgM3X.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-4JlOwgWG.js +2 -0
- package/dist/cli/gen-DeuDgPxN.js +3100 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-DMa6M7hV.js → init-C7Xd0Kda.js} +242 -27
- package/dist/cli/{introspect-BKlaIu_M.js → introspect-CSnMJ94U.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-C8tnlHSb.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-C_4JwyiM.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-CLqs9-OA.js +130 -0
- package/dist/composite-pSfeJNce.d.ts +146 -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-CdPDPpFs.d.ts +25 -0
- package/dist/framework-xjTBoyBB.js +51 -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-C6DWVEVG.d.ts} +237 -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 +34924 -6609
- 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-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/{support-wHnK6zp-.js → support-zIa1URaN.js} +32 -11
- 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-CQt77F3T.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
|
@@ -1,16 +1,106 @@
|
|
|
1
|
-
|
|
2
|
-
import {
|
|
3
|
-
import { a as
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { t as AsyncResult } from "./result-D7y2fT87.js";
|
|
3
|
+
import { a as AnyModels, i as AnyFunctions } from "./types-6BdhkmZe.js";
|
|
4
|
+
import { t as SqlClient } from "./executor-DbvExCFC.js";
|
|
5
|
+
import { m as RequestContext } from "./plugin-FGY8UhYm.js";
|
|
6
|
+
import { a as EventHub } from "./events-DWDhx77e.js";
|
|
6
7
|
import { t as BetterSupabaseEnv } from "./index-CLg87OBW.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
8
|
+
import { a as CookieWrite } from "./session-ChiXDZdZ.js";
|
|
9
|
+
import { a as ResolveAuthOptions, r as AuthState, t as AuthResolution } from "./resolve-KW8nCeL6.js";
|
|
10
|
+
import { r as CredentialProvider } from "./provider-BH5UWZJ6.js";
|
|
11
|
+
import { B as DbStats, H as StatsRecorder, b as Db, t as BetterSupabase } from "./define-CJJkkr1-.js";
|
|
12
|
+
import { r as EventSink } from "./cloud-event-C1JCc1bH.js";
|
|
13
|
+
import { s as SqlClaims, t as BetterPostgres } from "./pool-CAu2nLrL.js";
|
|
14
|
+
import { o as ImpersonationOptions } from "./mfa-Daak8ukG.js";
|
|
15
|
+
import { n as Bucket } from "./bucket-Cl46E3jS.js";
|
|
12
16
|
import { SupabaseClient } from "@supabase/supabase-js";
|
|
13
17
|
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
18
|
+
//#region src/auth/support.d.ts
|
|
19
|
+
type SupportEndedBy = "admin" | "expired" | "revoked";
|
|
20
|
+
/** A support session: a platform admin viewing the app as `targetUserId`. */
|
|
21
|
+
interface SupportSession {
|
|
22
|
+
readonly id: string;
|
|
23
|
+
readonly adminId: string;
|
|
24
|
+
readonly targetUserId: string;
|
|
25
|
+
readonly reason: string;
|
|
26
|
+
/** Writes fail while it is true (`begin read only`). */
|
|
27
|
+
readonly readOnly: boolean;
|
|
28
|
+
readonly tenant?: string;
|
|
29
|
+
readonly startedAt: Temporal.Instant;
|
|
30
|
+
readonly expiresAt: Temporal.Instant;
|
|
31
|
+
readonly endedAt?: Temporal.Instant;
|
|
32
|
+
readonly endedBy?: SupportEndedBy;
|
|
33
|
+
/** App data, such as a ticket id. */
|
|
34
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
35
|
+
}
|
|
36
|
+
interface SupportStartInput {
|
|
37
|
+
readonly adminId: string;
|
|
38
|
+
/**
|
|
39
|
+
* The admin's verified claims. The SQL store runs `start_support_session`
|
|
40
|
+
* with them, so `is_platform()` checks the admin in the database too.
|
|
41
|
+
*/
|
|
42
|
+
readonly adminClaims: Readonly<Record<string, unknown>>;
|
|
43
|
+
readonly targetUserId: string;
|
|
44
|
+
readonly reason: string;
|
|
45
|
+
readonly ttlSeconds: number;
|
|
46
|
+
readonly readOnly: boolean;
|
|
47
|
+
readonly tenant?: string;
|
|
48
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
49
|
+
}
|
|
50
|
+
/** A caller's verified claims, which the store runs a call with. */
|
|
51
|
+
type SupportCallerClaims = Readonly<Record<string, unknown>>;
|
|
52
|
+
interface SupportListFilter {
|
|
53
|
+
readonly adminId?: string;
|
|
54
|
+
readonly targetUserId?: string;
|
|
55
|
+
/** `true`: running sessions only; `false`: ended or expired ones only. */
|
|
56
|
+
readonly active?: boolean;
|
|
57
|
+
/** Defaults to 50. */
|
|
58
|
+
readonly limit?: number;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Where support sessions live. `sqlSupportStore` uses the `support-sessions`
|
|
62
|
+
* SQL module; implement this for another store and check it with
|
|
63
|
+
* `testSupportSessionStore` from `better-supabase/testing`.
|
|
64
|
+
*/
|
|
65
|
+
interface SupportSessionStore {
|
|
66
|
+
readonly apiVersion: 1;
|
|
67
|
+
readonly name: string;
|
|
68
|
+
/** Starts a session and ends the admin's previous one. Rejects when the store refuses. */
|
|
69
|
+
start(input: SupportStartInput): Promise<SupportSession>;
|
|
70
|
+
/**
|
|
71
|
+
* The admin's session while it is running; `undefined` once ended or
|
|
72
|
+
* expired. With the admin's `claims`, the store also checks that the admin
|
|
73
|
+
* may still start sessions.
|
|
74
|
+
*/
|
|
75
|
+
get(sessionId: string, adminId: string, claims?: SupportCallerClaims): Promise<SupportSession | undefined>;
|
|
76
|
+
/**
|
|
77
|
+
* `false` when it was not running. With `claims`, it runs as that caller:
|
|
78
|
+
* the session's admin, or staff with the revoke permission.
|
|
79
|
+
*/
|
|
80
|
+
end(sessionId: string, endedBy: SupportEndedBy, claims?: SupportCallerClaims): Promise<boolean>;
|
|
81
|
+
/** With `claims`, only what that caller may view. */
|
|
82
|
+
list(filter?: SupportListFilter, claims?: SupportCallerClaims): Promise<readonly SupportSession[]>;
|
|
83
|
+
/** The claims `targetUserId` would get, when the store can build them. */
|
|
84
|
+
claims?(targetUserId: string): Promise<Readonly<Record<string, unknown>>>;
|
|
85
|
+
}
|
|
86
|
+
interface SqlSupportStoreOptions {
|
|
87
|
+
/** `sql.modules.support-sessions.schema`. Defaults to `better_supabase`. */
|
|
88
|
+
readonly schema?: string;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Support sessions in the `support-sessions` SQL module. `start` runs
|
|
92
|
+
* as the admin, so the module's `is_platform()` gate applies; the reads run
|
|
93
|
+
* on the admin connection.
|
|
94
|
+
*/
|
|
95
|
+
declare function sqlSupportStore(postgres: Pick<BetterPostgres, "admin" | "asUser">, options?: SqlSupportStoreOptions): SupportSessionStore;
|
|
96
|
+
/**
|
|
97
|
+
* The claims a support session runs with: the target's, plus `act` naming
|
|
98
|
+
* the admin, the reason and the session (the audit module records all three),
|
|
99
|
+
* marked `kind: "support"` so `actorOf` never reads it as an OAuth client.
|
|
100
|
+
* `role` falls back to `authenticated`; the admin's claims never leak in.
|
|
101
|
+
*/
|
|
102
|
+
declare function supportClaims(session: Pick<SupportSession, "id" | "adminId" | "targetUserId" | "reason" | "readOnly">, target: Readonly<Record<string, unknown>>): Record<string, unknown>;
|
|
103
|
+
//#endregion
|
|
14
104
|
//#region src/auth/support-cookie.d.ts
|
|
15
105
|
/** The cookie that carries the support session id. */
|
|
16
106
|
declare const SUPPORT_COOKIE = "bs-support";
|
|
@@ -59,7 +149,7 @@ interface SupportOptions {
|
|
|
59
149
|
/**
|
|
60
150
|
* Whether `admin` may view the app as the target. A throw or rejection
|
|
61
151
|
* counts as a deny. Defaults to allowing, so the store decides: the SQL
|
|
62
|
-
* store checks `is_platform(
|
|
152
|
+
* store checks `is_platform(modules.support-sessions.permissions.start)`.
|
|
63
153
|
*/
|
|
64
154
|
readonly authorize?: (input: SupportAuthorizeInput) => boolean | Promise<boolean>;
|
|
65
155
|
/**
|
|
@@ -148,12 +238,32 @@ interface DeleteAccountOptions {
|
|
|
148
238
|
readonly cascades?: readonly string[];
|
|
149
239
|
readonly context?: RequestContext;
|
|
150
240
|
readonly signal?: AbortSignal;
|
|
241
|
+
/**
|
|
242
|
+
* Direct Postgres with rights on `auth.users` (`postgres.admin`). When the
|
|
243
|
+
* Auth server reports a database error, the delete is replayed in a
|
|
244
|
+
* statement that is rolled back, and the database's own error (its
|
|
245
|
+
* SQLSTATE and hint, such as `ORGANIZATION_OWNER_REQUIRED`) is returned
|
|
246
|
+
* instead of Auth's generic one. `server.deleteAccount` passes its
|
|
247
|
+
* `postgres.admin`.
|
|
248
|
+
*/
|
|
249
|
+
readonly sql?: SqlClient;
|
|
151
250
|
}
|
|
152
251
|
interface DeleteAccountResult {
|
|
153
252
|
readonly userId: string;
|
|
154
253
|
/** Removed objects per bucket id. */
|
|
155
254
|
readonly removed: Readonly<Record<string, number>>;
|
|
156
255
|
}
|
|
256
|
+
/**
|
|
257
|
+
* Deletes the Auth user, then removes their Storage objects, then announces
|
|
258
|
+
* the delete. Rows referencing `auth.users` follow their foreign keys. The
|
|
259
|
+
* objects are listed first and removed only once the user is gone, so a
|
|
260
|
+
* delete the database refuses leaves them in place.
|
|
261
|
+
*
|
|
262
|
+
* `server.deleteAccount` calls it with the server's service client. Apps on
|
|
263
|
+
* the `@supabase/server` pipeline call it with theirs:
|
|
264
|
+
* `deleteAccount(betterSupabase, ctx.supabaseAdmin, userId)`.
|
|
265
|
+
*/
|
|
266
|
+
declare function deleteAccount<M extends AnyModels, D, F extends AnyFunctions, E, C>(betterSupabase: BetterSupabase<M, D, F, E, C>, service: SupabaseClient | (() => SupabaseClient), userId: string, options?: DeleteAccountOptions): AsyncResult<DeleteAccountResult>;
|
|
157
267
|
//#endregion
|
|
158
268
|
//#region src/server/replicas.d.ts
|
|
159
269
|
/** Cookie holding the epoch ms until which reads stay on the primary. */
|
|
@@ -168,9 +278,55 @@ interface ReplicaState {
|
|
|
168
278
|
pin(): void;
|
|
169
279
|
}
|
|
170
280
|
//#endregion
|
|
281
|
+
//#region src/server/request-ids.d.ts
|
|
282
|
+
interface RequestIdOptions {
|
|
283
|
+
readonly requestHeader?: string;
|
|
284
|
+
readonly correlationHeader?: string;
|
|
285
|
+
readonly incoming?: boolean;
|
|
286
|
+
readonly generate?: boolean;
|
|
287
|
+
}
|
|
288
|
+
//#endregion
|
|
289
|
+
//#region src/server/suspend-account.d.ts
|
|
290
|
+
interface EndSessionsResult {
|
|
291
|
+
readonly userId: string;
|
|
292
|
+
readonly ended: number;
|
|
293
|
+
}
|
|
294
|
+
interface SuspendAccountOptions {
|
|
295
|
+
readonly suspended: boolean;
|
|
296
|
+
readonly duration?: string;
|
|
297
|
+
}
|
|
298
|
+
interface SuspendAccountResult {
|
|
299
|
+
readonly userId: string;
|
|
300
|
+
readonly suspended: boolean;
|
|
301
|
+
readonly ended: number;
|
|
302
|
+
}
|
|
303
|
+
declare function endSessions(sql: SqlClient, userId: string): AsyncResult<EndSessionsResult>;
|
|
304
|
+
declare function suspendAccount(service: SupabaseClient | (() => SupabaseClient), sql: SqlClient, userId: string, options: SuspendAccountOptions): AsyncResult<SuspendAccountResult>;
|
|
305
|
+
//#endregion
|
|
171
306
|
//#region src/server/server.d.ts
|
|
307
|
+
/**
|
|
308
|
+
* PostgREST request settings for the caller's repositories and the shared
|
|
309
|
+
* service and anon clients, the `db` options supabase-js takes.
|
|
310
|
+
*/
|
|
311
|
+
interface ServerDbOptions {
|
|
312
|
+
/** Aborts each PostgREST request after this many milliseconds with a `timeout` error. */
|
|
313
|
+
readonly timeout?: number;
|
|
314
|
+
/**
|
|
315
|
+
* postgrest-js retries of idempotent requests (GET and HEAD) on network
|
|
316
|
+
* errors, 503 and 520. Defaults to postgrest-js's setting, which is on.
|
|
317
|
+
*/
|
|
318
|
+
readonly retry?: boolean;
|
|
319
|
+
/**
|
|
320
|
+
* The longest query string one read sends. Defaults to the definition's
|
|
321
|
+
* `urlLengthLimit`, else 6000.
|
|
322
|
+
*/
|
|
323
|
+
readonly urlLengthLimit?: number;
|
|
324
|
+
}
|
|
172
325
|
interface ServerOptions {
|
|
173
|
-
/**
|
|
326
|
+
/**
|
|
327
|
+
* Defaults to the variables `getEnv` from `@supabase/middleware` reads:
|
|
328
|
+
* Workers bindings, then `process.env`, then `Deno.env`.
|
|
329
|
+
*/
|
|
174
330
|
readonly env?: BetterSupabaseEnv;
|
|
175
331
|
/** Enables `ctx.sql` and `actingAs()`. */
|
|
176
332
|
readonly postgres?: BetterPostgres;
|
|
@@ -186,6 +342,7 @@ interface ServerOptions {
|
|
|
186
342
|
* `current_setting('request.headers')` (channel, request id, client IP for audit).
|
|
187
343
|
*/
|
|
188
344
|
readonly headers?: (request: Request) => Readonly<Record<string, string>>;
|
|
345
|
+
readonly requestIds?: RequestIdOptions | false;
|
|
189
346
|
/**
|
|
190
347
|
* PostgREST URL for the caller's reads: a read replica or the `<ref>-all`
|
|
191
348
|
* load balancer. Defaults to `SUPABASE_READ_URL`; `false` reads from the
|
|
@@ -203,12 +360,14 @@ interface ServerOptions {
|
|
|
203
360
|
};
|
|
204
361
|
/**
|
|
205
362
|
* The active tenant of a request when it doesn't come from a claim, e.g.
|
|
206
|
-
* from a URL slug (`
|
|
363
|
+
* from a URL slug (`sql.modules.access.activeTenant: 'resolver'`). It becomes
|
|
207
364
|
* `context.tenant` for the `tenant()` plugin, the `better_supabase.tenant`
|
|
208
365
|
* setting over Postgres and the `x-bs-tenant` header over PostgREST, which
|
|
209
366
|
* `current_tenant_id()` reads only while the caller is a member. Async
|
|
210
367
|
* resolvers need `context(request)`; `contextFromResolution` takes
|
|
211
|
-
* `options.tenant` instead.
|
|
368
|
+
* `options.tenant` instead. Under `createNext`, Server Components and
|
|
369
|
+
* actions pass a request with the incoming headers and a placeholder URL,
|
|
370
|
+
* so read a header there, not the path.
|
|
212
371
|
*/
|
|
213
372
|
readonly tenant?: (request: Request, auth: AuthState) => string | undefined | PromiseLike<string | undefined>;
|
|
214
373
|
/**
|
|
@@ -217,6 +376,33 @@ interface ServerOptions {
|
|
|
217
376
|
* `postgres`, since the target's queries run over direct Postgres.
|
|
218
377
|
*/
|
|
219
378
|
readonly support?: SupportSessions;
|
|
379
|
+
/**
|
|
380
|
+
* The claims `forContext()` adds for a user, the ones a custom access token
|
|
381
|
+
* hook would put in their token (roles, organization lists). Read them
|
|
382
|
+
* fresh: a job can run after the user lost access. `sub`, `role`, `act` and
|
|
383
|
+
* `tenant_id` come from the context and win.
|
|
384
|
+
*/
|
|
385
|
+
readonly claimsFor?: (userId: string, context: RequestContext) => SqlClaims | PromiseLike<SqlClaims>;
|
|
386
|
+
/** PostgREST request settings: `timeout`, `retry` and `urlLengthLimit`. */
|
|
387
|
+
readonly db?: ServerDbOptions;
|
|
388
|
+
/**
|
|
389
|
+
* Resolves the `credential_ref`s third-party calls use, e.g.
|
|
390
|
+
* `vaultCredentials()` from `better-supabase/credentials`. It becomes
|
|
391
|
+
* `ctx.credentials`; pass `subjectFor(ctx)` as the subject.
|
|
392
|
+
*/
|
|
393
|
+
readonly credentials?: CredentialProvider;
|
|
394
|
+
/**
|
|
395
|
+
* Where the server's audit trail goes, such as `audit.sink()` from
|
|
396
|
+
* `better-supabase/blocks/audit`. `suspendAccount`, `deleteAccount` and
|
|
397
|
+
* `endSessions` send `dev.better-supabase.account.*` CloudEvents, and
|
|
398
|
+
* `support.denied` events are forwarded. A failed send is logged and never
|
|
399
|
+
* fails the action.
|
|
400
|
+
*/
|
|
401
|
+
readonly audit?: EventSink;
|
|
402
|
+
}
|
|
403
|
+
interface ForContextOptions {
|
|
404
|
+
/** Recorded as `act.reason` when the context carries an impersonator. Defaults to `"job"`. */
|
|
405
|
+
readonly reason?: string;
|
|
220
406
|
}
|
|
221
407
|
/** The header `current_tenant_id()` reads over the Data API. */
|
|
222
408
|
declare const TENANT_HEADER = "x-bs-tenant";
|
|
@@ -241,11 +427,21 @@ interface ServerContext<M extends AnyModels, F extends AnyFunctions, E, C = unkn
|
|
|
241
427
|
* (`resolution.apply`) and, after a write, `bs-primary-until`.
|
|
242
428
|
*/
|
|
243
429
|
apply(response: Response): Response;
|
|
430
|
+
/**
|
|
431
|
+
* The cookies `apply` would set, for frameworks that write cookies through
|
|
432
|
+
* a cookie store instead of a response (`cookies().set`, `setResponseHeaders`).
|
|
433
|
+
* Read it after the handler ran: a write adds `bs-primary-until`.
|
|
434
|
+
*/
|
|
435
|
+
cookies(): readonly CookieWrite[];
|
|
244
436
|
/**
|
|
245
437
|
* Set while an admin views the app as another user: `auth`, `db` and
|
|
246
438
|
* `sql` are the target's, and `resolution` stays the admin's.
|
|
247
439
|
*/
|
|
248
440
|
readonly support?: ActiveSupport;
|
|
441
|
+
/** `options.credentials`, when the server has one. */
|
|
442
|
+
readonly credentials?: CredentialProvider;
|
|
443
|
+
readonly requestId?: string;
|
|
444
|
+
readonly correlationId?: string;
|
|
249
445
|
}
|
|
250
446
|
interface ContextOptions {
|
|
251
447
|
readonly refresh?: boolean;
|
|
@@ -262,12 +458,17 @@ interface ContextOptions {
|
|
|
262
458
|
* looks it up itself; `contextFromResolution` only uses this.
|
|
263
459
|
*/
|
|
264
460
|
readonly support?: ActiveSupport;
|
|
461
|
+
readonly requestId?: string;
|
|
462
|
+
readonly correlationId?: string;
|
|
265
463
|
}
|
|
266
464
|
interface BetterServer<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> {
|
|
267
465
|
readonly env: BetterSupabaseEnv;
|
|
466
|
+
/** The definition's events; adapters pass `events.settled()` to `waitUntil`. */
|
|
467
|
+
readonly events: EventHub;
|
|
268
468
|
resolve(request: Request, options?: {
|
|
269
469
|
readonly refresh?: boolean;
|
|
270
470
|
readonly cookies?: boolean;
|
|
471
|
+
readonly checkSession?: boolean;
|
|
271
472
|
}): Promise<AuthResolution<C, P>>;
|
|
272
473
|
/**
|
|
273
474
|
* Resolves auth and binds repositories to the caller. Refreshes an expired
|
|
@@ -288,90 +489,41 @@ interface BetterServer<M extends AnyModels, F extends AnyFunctions, E, C = unkno
|
|
|
288
489
|
/** Service-role repositories. Bypasses RLS; the actor is `service`. */
|
|
289
490
|
admin(context?: RequestContext): Db<M, F, E, SupabaseClient>;
|
|
290
491
|
/**
|
|
291
|
-
* Deletes a user: their objects in `buckets`, then
|
|
292
|
-
* `mutation` notice for `auth.users`. Needs the secret key.
|
|
293
|
-
*
|
|
492
|
+
* Deletes a user: the Auth user, then their objects in `buckets`, then a
|
|
493
|
+
* `mutation` notice for `auth.users`. Needs the secret key. With
|
|
494
|
+
* `postgres`, a delete the database refuses returns its own error and
|
|
495
|
+
* hint. Access tokens already issued stay valid until they expire.
|
|
294
496
|
*/
|
|
295
497
|
deleteAccount(userId: string, options?: DeleteAccountOptions): AsyncResult<DeleteAccountResult>;
|
|
498
|
+
endSessions(userId: string): AsyncResult<EndSessionsResult>;
|
|
499
|
+
suspendAccount(userId: string, options: SuspendAccountOptions): AsyncResult<SuspendAccountResult>;
|
|
296
500
|
/**
|
|
297
501
|
* Repositories running as a user, with RLS, over direct Postgres. With
|
|
298
502
|
* `impersonation`, the claims carry `act: { kind: "impersonation", sub, reason }`, which
|
|
299
|
-
* the `audit` and `actor` SQL
|
|
503
|
+
* the `audit` and `actor` SQL modules record.
|
|
300
504
|
*/
|
|
301
505
|
actingAs(userId: string, claims?: Omit<SqlClaims, "sub" | "act">, impersonation?: ImpersonationOptions): Db<M, F, E, undefined>;
|
|
506
|
+
/**
|
|
507
|
+
* Repositories for the user in a recorded context (`job.context`), with
|
|
508
|
+
* RLS, over direct Postgres: `actingAs` with the context's tenant and
|
|
509
|
+
* `ServerOptions.claimsFor`. Fails with `forbidden` when the actor is not a
|
|
510
|
+
* user; it never falls back to `admin()`.
|
|
511
|
+
*/
|
|
512
|
+
forContext(context: RequestContext, options?: ForContextOptions): AsyncResult<Db<M, F, E, undefined>>;
|
|
302
513
|
/** Support sessions; every method fails without `ServerOptions.support`. */
|
|
303
514
|
readonly support: SupportApi;
|
|
304
515
|
}
|
|
516
|
+
type ServerKeys = keyof BetterServer<AnyModels, AnyFunctions, unknown>;
|
|
517
|
+
/**
|
|
518
|
+
* A framework adapter's server: `server` plus the adapter's own methods,
|
|
519
|
+
* without reading the lazy `env` getter. `extra` can't replace a
|
|
520
|
+
* `BetterServer` method.
|
|
521
|
+
*/
|
|
522
|
+
declare function extendServer<R extends object>(server: object, extra: Omit<R, ServerKeys>): R;
|
|
305
523
|
/**
|
|
306
524
|
* Server-side entry point for APIs, jobs, MCP servers and framework
|
|
307
525
|
* adapters. Holds the secrets; `betterSupabase` stays isomorphic.
|
|
308
526
|
*/
|
|
309
527
|
declare function createServer<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: ServerOptions): BetterServer<M, F, E, C, P>;
|
|
310
528
|
//#endregion
|
|
311
|
-
|
|
312
|
-
type AuthKind = AuthState["kind"];
|
|
313
|
-
/**
|
|
314
|
-
* An auth kind a guard lets through. `anonymous` admits users signed in with
|
|
315
|
-
* `signInAnonymously()` (`is_anonymous`); `anon` admits callers without a
|
|
316
|
-
* session only.
|
|
317
|
-
*/
|
|
318
|
-
type AllowedCaller = Exclude<AuthKind, "invalid"> | "anonymous";
|
|
319
|
-
interface GuardOptions {
|
|
320
|
-
/**
|
|
321
|
-
* Callers allowed through. Defaults to `['user']`, which refuses anonymous
|
|
322
|
-
* sign-ins. Only `'anonymous'` admits them: `['anonymous']` alone admits
|
|
323
|
-
* anonymous sign-ins and refuses other users, and `'anon'` (no session)
|
|
324
|
-
* never admits them.
|
|
325
|
-
*/
|
|
326
|
-
readonly allow?: readonly AllowedCaller[];
|
|
327
|
-
/**
|
|
328
|
-
* Assurance level user sessions need. `aal2` answers 403 with
|
|
329
|
-
* `required: 'aal2'` until the user verifies a second factor.
|
|
330
|
-
*/
|
|
331
|
-
readonly aal?: Aal;
|
|
332
|
-
/**
|
|
333
|
-
* OAuth scopes a delegated token (an OAuth client or an `act` chain) needs.
|
|
334
|
-
* A missing one answers 403 with `error="insufficient_scope"`. The user's
|
|
335
|
-
* own session is not limited by scopes.
|
|
336
|
-
*/
|
|
337
|
-
readonly scopes?: readonly string[];
|
|
338
|
-
}
|
|
339
|
-
/** Guard options for middleware and fetch handlers that resolve the caller themselves. */
|
|
340
|
-
interface MiddlewareOptions extends GuardOptions {
|
|
341
|
-
/**
|
|
342
|
-
* Refresh an expired cookie session and send the new cookies. Only for
|
|
343
|
-
* routes browsers call with cookies; bearer tokens never refresh.
|
|
344
|
-
*/
|
|
345
|
-
readonly refresh?: boolean;
|
|
346
|
-
}
|
|
347
|
-
/** `undefined` when `auth` may pass; otherwise the 401/403 error to send. */
|
|
348
|
-
declare function guard(auth: AuthState, allow?: GuardOptions["allow"], aal?: Aal, scopes?: readonly string[]): DbError | undefined;
|
|
349
|
-
declare function isResult(value: unknown): value is {
|
|
350
|
-
ok: boolean;
|
|
351
|
-
data: unknown;
|
|
352
|
-
error: unknown;
|
|
353
|
-
};
|
|
354
|
-
type Settled = {
|
|
355
|
-
readonly ok: true;
|
|
356
|
-
readonly data: unknown;
|
|
357
|
-
} | {
|
|
358
|
-
readonly ok: false;
|
|
359
|
-
readonly error: DbError;
|
|
360
|
-
};
|
|
361
|
-
/**
|
|
362
|
-
* Settles a handler's return value: `Result`s and `AsyncResult`s unwrap,
|
|
363
|
-
* thrown `DbException`s (or errors whose `cause` is a `DbError`) become
|
|
364
|
-
* errors, anything else is data. Other thrown
|
|
365
|
-
* errors propagate.
|
|
366
|
-
*/
|
|
367
|
-
declare function settle(run: () => unknown): Promise<Settled>;
|
|
368
|
-
interface RespondOptions {
|
|
369
|
-
readonly instance?: string;
|
|
370
|
-
readonly expose?: boolean;
|
|
371
|
-
/** Status for data responses. Defaults to 200 (204 without data). */
|
|
372
|
-
readonly status?: number;
|
|
373
|
-
}
|
|
374
|
-
/** A handler's value as a response: `Response` as is, data as JSON, errors as Problem Details. */
|
|
375
|
-
declare function respond(run: () => unknown, options?: RespondOptions): Promise<Response>;
|
|
376
|
-
//#endregion
|
|
377
|
-
export { clearSupportCookie as A, SupportOptions as C, supportSessions as D, SupportStartRequest as E, supportCookieValue as M, SUPPORT_COOKIE as O, SupportAuthorizeInput as S, SupportSessions as T, ReplicaState as _, Settled as a, ActiveSupport as b, respond as c, ContextOptions as d, ServerContext as f, PRIMARY_COOKIE as g, createServer as h, RespondOptions as i, supportCookie as j, SupportCookieOptions as k, settle as l, TENANT_HEADER as m, GuardOptions as n, guard as o, ServerOptions as p, MiddlewareOptions as r, isResult as s, AuthKind as t, BetterServer as u, DeleteAccountOptions as v, SupportPolicy as w, SupportApi as x, DeleteAccountResult as y };
|
|
529
|
+
export { SupportCookieOptions as A, SupportStartInput as B, SupportAuthorizeInput as C, SupportStartRequest as D, SupportSessions as E, SupportCallerClaims as F, supportClaims as H, SupportEndedBy as I, SupportListFilter as L, supportCookie as M, supportCookieValue as N, supportSessions as O, SqlSupportStoreOptions as P, SupportSession as R, SupportApi as S, SupportPolicy as T, sqlSupportStore as V, ReplicaState as _, ServerDbOptions as a, deleteAccount as b, createServer as c, SuspendAccountOptions as d, SuspendAccountResult as f, PRIMARY_COOKIE as g, RequestIdOptions as h, ServerContext as i, clearSupportCookie as j, SUPPORT_COOKIE as k, extendServer as l, suspendAccount as m, ContextOptions as n, ServerOptions as o, endSessions as p, ForContextOptions as r, TENANT_HEADER as s, BetterServer as t, EndSessionsResult as u, DeleteAccountOptions as v, SupportOptions as w, ActiveSupport as x, DeleteAccountResult as y, SupportSessionStore as z };
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { CookieOptions } from "@supabase/ssr";
|
|
2
|
+
//#region src/auth/session.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* The session object auth-js persists (`sb-<ref>-auth-token`). A
|
|
5
|
+
* `tokens-only` cookie has no `user`: auth-js keeps it in `auth.userStorage`.
|
|
6
|
+
*/
|
|
7
|
+
interface StoredSession {
|
|
8
|
+
readonly access_token: string;
|
|
9
|
+
readonly refresh_token: string;
|
|
10
|
+
readonly expires_at?: number;
|
|
11
|
+
readonly expires_in?: number;
|
|
12
|
+
readonly token_type?: string;
|
|
13
|
+
readonly user?: unknown;
|
|
14
|
+
readonly [key: string]: unknown;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* `cookies.encode` in `@supabase/ssr`: `user-and-tokens` stores the user
|
|
18
|
+
* object in the cookie, `tokens-only` stores the access and refresh tokens
|
|
19
|
+
* alone. The server and the browser client must use the same value.
|
|
20
|
+
*/
|
|
21
|
+
type SessionEncoding = "user-and-tokens" | "tokens-only";
|
|
22
|
+
declare const DEFAULT_SESSION_ENCODING: SessionEncoding;
|
|
23
|
+
interface WriteSessionOptions {
|
|
24
|
+
/** Defaults to `user-and-tokens`, the `@supabase/ssr` default. */
|
|
25
|
+
readonly encode?: SessionEncoding;
|
|
26
|
+
}
|
|
27
|
+
/** A cookie scope an earlier deploy wrote the session at. */
|
|
28
|
+
interface CookieScope {
|
|
29
|
+
readonly domain?: string;
|
|
30
|
+
readonly path?: string;
|
|
31
|
+
}
|
|
32
|
+
interface CookieRecord {
|
|
33
|
+
readonly name: string;
|
|
34
|
+
readonly value: string;
|
|
35
|
+
}
|
|
36
|
+
interface CookieWrite {
|
|
37
|
+
readonly name: string;
|
|
38
|
+
readonly value: string;
|
|
39
|
+
readonly options: CookieOptions;
|
|
40
|
+
}
|
|
41
|
+
/** Headers that keep responses carrying session cookies out of shared caches. */
|
|
42
|
+
declare const AUTH_CACHE_HEADERS: Readonly<Record<string, string>>;
|
|
43
|
+
/** `sb-<first label of the hostname>-auth-token`, the supabase-js default. */
|
|
44
|
+
declare function sessionCookieName(url: string): string;
|
|
45
|
+
declare function parseCookies(header: string | null | undefined): CookieRecord[];
|
|
46
|
+
declare function serializeCookie(write: CookieWrite): string;
|
|
47
|
+
/**
|
|
48
|
+
* Reads the session written by `@supabase/ssr` (plain or `base64-`, whole or
|
|
49
|
+
* chunked, `user-and-tokens` or `tokens-only`). Mismatched chunks from a
|
|
50
|
+
* partial write read as no session.
|
|
51
|
+
*/
|
|
52
|
+
declare function readSession(cookies: readonly CookieRecord[], name: string): StoredSession | null;
|
|
53
|
+
/** The encoding a stored session was written with: `tokens-only` without a `user`. */
|
|
54
|
+
declare function sessionEncoding(session: StoredSession): SessionEncoding;
|
|
55
|
+
/**
|
|
56
|
+
* Cookie writes that store `session` (or clear it with `null`) exactly like
|
|
57
|
+
* `@supabase/ssr` with the same `encode`, and expire chunks the new value no
|
|
58
|
+
* longer uses.
|
|
59
|
+
*/
|
|
60
|
+
declare function writeSession(existing: readonly CookieRecord[], name: string, session: StoredSession | null, options?: CookieOptions, { encode }?: WriteSessionOptions): CookieWrite[];
|
|
61
|
+
/**
|
|
62
|
+
* `Max-Age=0` writes for every chunk of the session cookie at each of
|
|
63
|
+
* `scopes`, like `clearAuthCookiesAtScopes` from `@supabase/ssr`. Use it once
|
|
64
|
+
* the cookie `domain` or `path` changed, for the scopes earlier deploys
|
|
65
|
+
* wrote: browsers ignore writes for scopes the host doesn't own, but a scope
|
|
66
|
+
* equal to the current one clears the live session.
|
|
67
|
+
*/
|
|
68
|
+
declare function clearSessionAtScopes(existing: readonly CookieRecord[], name: string, scopes: readonly CookieScope[]): CookieWrite[];
|
|
69
|
+
/** Applies cookie writes to a cookie list, as the next request would see it. */
|
|
70
|
+
declare function applyCookieWrites(cookies: readonly CookieRecord[], writes: readonly CookieWrite[]): CookieRecord[];
|
|
71
|
+
//#endregion
|
|
72
|
+
export { writeSession as _, CookieWrite as a, StoredSession as c, clearSessionAtScopes as d, parseCookies as f, sessionEncoding as g, sessionCookieName as h, CookieScope as i, WriteSessionOptions as l, serializeCookie as m, CookieOptions as n, DEFAULT_SESSION_ENCODING as o, readSession as p, CookieRecord as r, SessionEncoding as s, AUTH_CACHE_HEADERS as t, applyCookieWrites as u };
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { pipeline, seedContext } from "@supabase/middleware";
|
|
2
|
+
//#region src/bridges/shared.ts
|
|
3
|
+
/** The string keys of a pipeline context: every contribution, without the seed's symbols. */
|
|
4
|
+
function contributionsOf(ctx) {
|
|
5
|
+
const contributions = {};
|
|
6
|
+
for (const [key, value] of Object.entries(ctx)) contributions[key] = value;
|
|
7
|
+
return contributions;
|
|
8
|
+
}
|
|
9
|
+
/** The per-request value a bridge seeds under `key`. */
|
|
10
|
+
function handoffOf(ctx, key) {
|
|
11
|
+
return ctx[key];
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Makes the body of `request` readable more than once, in place: the first
|
|
15
|
+
* reader drains the stream into a cache and later readers are served from
|
|
16
|
+
* it, so an entry and the route both see the body. For frameworks that hand
|
|
17
|
+
* the route the same `Request` the middleware saw (TanStack Start,
|
|
18
|
+
* SvelteKit, React Router), where `bufferRequest`'s wrapped copy can't go.
|
|
19
|
+
*/
|
|
20
|
+
function bufferInPlace(request) {
|
|
21
|
+
if (!request.body || request.bodyUsed) return;
|
|
22
|
+
const readOnce = request.arrayBuffer.bind(request);
|
|
23
|
+
let buffer;
|
|
24
|
+
const arrayBuffer = () => buffer ??= readOnce();
|
|
25
|
+
const text = async () => new TextDecoder().decode(await arrayBuffer());
|
|
26
|
+
const readers = {
|
|
27
|
+
arrayBuffer,
|
|
28
|
+
text,
|
|
29
|
+
json: async () => JSON.parse(await text()),
|
|
30
|
+
bytes: async () => new Uint8Array(await arrayBuffer()),
|
|
31
|
+
blob: async () => new Blob([await arrayBuffer()]),
|
|
32
|
+
formData: async () => new Response(await arrayBuffer(), { headers: request.headers }).formData(),
|
|
33
|
+
clone: () => request
|
|
34
|
+
};
|
|
35
|
+
for (const [name, value] of Object.entries(readers)) Object.defineProperty(request, name, {
|
|
36
|
+
value,
|
|
37
|
+
configurable: true
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
const DOWNSTREAM = Symbol("bridge.downstream");
|
|
41
|
+
/**
|
|
42
|
+
* The shared shape of the upstream bridges: the pipeline folds once, each
|
|
43
|
+
* request seeds the framework's `next` under a symbol, and the terminal
|
|
44
|
+
* hands it the contributions, so response-phase entries see the
|
|
45
|
+
* framework's response. `platform` is the host's env object, if any, which
|
|
46
|
+
* `getEnv` reads first.
|
|
47
|
+
*/
|
|
48
|
+
function around(entries) {
|
|
49
|
+
const run = pipeline(entries, (_request, ctx) => handoffOf(ctx, DOWNSTREAM)(contributionsOf(ctx)));
|
|
50
|
+
return (request, platform, downstream) => run(request, {
|
|
51
|
+
...seedContext(platform),
|
|
52
|
+
[DOWNSTREAM]: downstream
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* A framework handler's value as a `Response`: responses as is, `undefined`
|
|
57
|
+
* as 204, other values as JSON. `init` carries the status and headers the
|
|
58
|
+
* handler set on the framework's response object.
|
|
59
|
+
*/
|
|
60
|
+
function toResponse(value, init = {}) {
|
|
61
|
+
if (value instanceof Response) return value;
|
|
62
|
+
const options = {
|
|
63
|
+
...init.status === void 0 ? {} : { status: init.status },
|
|
64
|
+
...init.statusText === void 0 ? {} : { statusText: init.statusText },
|
|
65
|
+
...init.headers === void 0 ? {} : { headers: init.headers }
|
|
66
|
+
};
|
|
67
|
+
if (value === void 0 || value === null) return new Response(null, {
|
|
68
|
+
status: 204,
|
|
69
|
+
...options
|
|
70
|
+
});
|
|
71
|
+
if (typeof value === "string") return new Response(value, options);
|
|
72
|
+
return Response.json(value, options);
|
|
73
|
+
}
|
|
74
|
+
//#endregion
|
|
75
|
+
export { toResponse as i, bufferInPlace as n, handoffOf as r, around as t };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { t as DbException } from "./db-exception-CnWcYPxL.js";
|
|
2
|
+
import { n as dbError } from "./errors-B11Duf73.js";
|
|
2
3
|
import { t as lookupOf } from "./lookup-BaP5bI27.js";
|
|
3
4
|
//#region src/plugins/shared.ts
|
|
4
5
|
/** Database column name for an app column, or `undefined` if it is unknown. */
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AnyEntry, ValidateEntries } from "@supabase/middleware";
|
|
2
|
+
//#region src/bridges/shared.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* `unknown` when the entries compose, so a parameter typed
|
|
5
|
+
* `Entries & Validated<Entries>` stays `Entries`. Otherwise the engine's
|
|
6
|
+
* error string, and the intersection fails the call with the
|
|
7
|
+
* `middleware-conflict` or `middleware-prereq` message.
|
|
8
|
+
*/
|
|
9
|
+
type Validated<Entries extends readonly AnyEntry[]> = [ValidateEntries<Entries>] extends [true] ? unknown : ValidateEntries<Entries>;
|
|
10
|
+
//#endregion
|
|
11
|
+
export { Validated as t };
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { t as AuthFailure } from "./auth-link-BjFPqwLz.js";
|
|
2
|
+
import { Provider, SignInWithOAuthCredentials, SignInWithPasswordlessCredentials, SupabaseClient, VerifyOtpParams } from "@supabase/supabase-js";
|
|
3
|
+
//#region src/react/sign-in.d.ts
|
|
4
|
+
type AuthApi = Pick<SupabaseClient["auth"], "signInWithPassword" | "signInWithOtp" | "verifyOtp" | "signInWithOAuth" | "signOut">;
|
|
5
|
+
interface AuthHookOptions {
|
|
6
|
+
/** A supabase-js client for apps without `<BetterSupabaseProvider>`. */
|
|
7
|
+
readonly client?: {
|
|
8
|
+
readonly auth: AuthApi;
|
|
9
|
+
};
|
|
10
|
+
/** Called after a call succeeds, e.g. to navigate. */
|
|
11
|
+
readonly onSuccess?: () => void;
|
|
12
|
+
}
|
|
13
|
+
interface PendingState {
|
|
14
|
+
/** A call is in flight. */
|
|
15
|
+
readonly pending: boolean;
|
|
16
|
+
/** The last call's error; cleared when the next call starts. */
|
|
17
|
+
readonly error: AuthFailure | undefined;
|
|
18
|
+
}
|
|
19
|
+
interface SignIn extends PendingState {
|
|
20
|
+
readonly password: (credentials: {
|
|
21
|
+
readonly email: string;
|
|
22
|
+
readonly password: string;
|
|
23
|
+
}) => Promise<AuthFailure | undefined>;
|
|
24
|
+
/** Sends a magic link or a one-time code to an email or a phone. */
|
|
25
|
+
readonly otp: (credentials: SignInWithPasswordlessCredentials) => Promise<AuthFailure | undefined>;
|
|
26
|
+
/** Checks the code `otp` sent. */
|
|
27
|
+
readonly verifyOtp: (params: VerifyOtpParams) => Promise<AuthFailure | undefined>;
|
|
28
|
+
/** Starts the OAuth redirect. In a browser the page navigates away. */
|
|
29
|
+
readonly oauth: (provider: Provider, options?: SignInWithOAuthCredentials["options"]) => Promise<AuthFailure | undefined>;
|
|
30
|
+
}
|
|
31
|
+
interface SignOut extends PendingState {
|
|
32
|
+
readonly signOut: (options?: {
|
|
33
|
+
readonly scope?: "global" | "local" | "others";
|
|
34
|
+
}) => Promise<AuthFailure | undefined>;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Sign-in calls with `pending` and `error` state. The session lands in the
|
|
38
|
+
* client's auth store, so `useAuth()` updates on its own.
|
|
39
|
+
*
|
|
40
|
+
* ```tsx
|
|
41
|
+
* const signIn = useSignIn({ onSuccess: () => router.push('/') });
|
|
42
|
+
* <button disabled={signIn.pending} onClick={() => signIn.password({ email, password })} />
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
declare function useSignIn(options?: AuthHookOptions): SignIn;
|
|
46
|
+
/** `auth.signOut()` with `pending` and `error` state. The provider clears cached queries. */
|
|
47
|
+
declare function useSignOut(options?: AuthHookOptions): SignOut;
|
|
48
|
+
//#endregion
|
|
49
|
+
export { useSignIn as a, SignOut as i, PendingState as n, useSignOut as o, SignIn as r, AuthHookOptions as t };
|