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
|
@@ -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,47 @@ interface ReplicaState {
|
|
|
168
278
|
pin(): void;
|
|
169
279
|
}
|
|
170
280
|
//#endregion
|
|
281
|
+
//#region src/server/suspend-account.d.ts
|
|
282
|
+
interface EndSessionsResult {
|
|
283
|
+
readonly userId: string;
|
|
284
|
+
readonly ended: number;
|
|
285
|
+
}
|
|
286
|
+
interface SuspendAccountOptions {
|
|
287
|
+
readonly suspended: boolean;
|
|
288
|
+
readonly duration?: string;
|
|
289
|
+
}
|
|
290
|
+
interface SuspendAccountResult {
|
|
291
|
+
readonly userId: string;
|
|
292
|
+
readonly suspended: boolean;
|
|
293
|
+
readonly ended: number;
|
|
294
|
+
}
|
|
295
|
+
declare function endSessions(sql: SqlClient, userId: string): AsyncResult<EndSessionsResult>;
|
|
296
|
+
declare function suspendAccount(service: SupabaseClient | (() => SupabaseClient), sql: SqlClient, userId: string, options: SuspendAccountOptions): AsyncResult<SuspendAccountResult>;
|
|
297
|
+
//#endregion
|
|
171
298
|
//#region src/server/server.d.ts
|
|
299
|
+
/**
|
|
300
|
+
* PostgREST request settings for the caller's repositories and the shared
|
|
301
|
+
* service and anon clients, the `db` options supabase-js takes.
|
|
302
|
+
*/
|
|
303
|
+
interface ServerDbOptions {
|
|
304
|
+
/** Aborts each PostgREST request after this many milliseconds with a `timeout` error. */
|
|
305
|
+
readonly timeout?: number;
|
|
306
|
+
/**
|
|
307
|
+
* postgrest-js retries of idempotent requests (GET and HEAD) on network
|
|
308
|
+
* errors, 503 and 520. Defaults to postgrest-js's setting, which is on.
|
|
309
|
+
*/
|
|
310
|
+
readonly retry?: boolean;
|
|
311
|
+
/**
|
|
312
|
+
* The longest query string one read sends. Defaults to the definition's
|
|
313
|
+
* `urlLengthLimit`, else 6000.
|
|
314
|
+
*/
|
|
315
|
+
readonly urlLengthLimit?: number;
|
|
316
|
+
}
|
|
172
317
|
interface ServerOptions {
|
|
173
|
-
/**
|
|
318
|
+
/**
|
|
319
|
+
* Defaults to the variables `getEnv` from `@supabase/middleware` reads:
|
|
320
|
+
* Workers bindings, then `process.env`, then `Deno.env`.
|
|
321
|
+
*/
|
|
174
322
|
readonly env?: BetterSupabaseEnv;
|
|
175
323
|
/** Enables `ctx.sql` and `actingAs()`. */
|
|
176
324
|
readonly postgres?: BetterPostgres;
|
|
@@ -203,12 +351,14 @@ interface ServerOptions {
|
|
|
203
351
|
};
|
|
204
352
|
/**
|
|
205
353
|
* The active tenant of a request when it doesn't come from a claim, e.g.
|
|
206
|
-
* from a URL slug (`
|
|
354
|
+
* from a URL slug (`sql.modules.access.activeTenant: 'resolver'`). It becomes
|
|
207
355
|
* `context.tenant` for the `tenant()` plugin, the `better_supabase.tenant`
|
|
208
356
|
* setting over Postgres and the `x-bs-tenant` header over PostgREST, which
|
|
209
357
|
* `current_tenant_id()` reads only while the caller is a member. Async
|
|
210
358
|
* resolvers need `context(request)`; `contextFromResolution` takes
|
|
211
|
-
* `options.tenant` instead.
|
|
359
|
+
* `options.tenant` instead. Under `createNext`, Server Components and
|
|
360
|
+
* actions pass a request with the incoming headers and a placeholder URL,
|
|
361
|
+
* so read a header there, not the path.
|
|
212
362
|
*/
|
|
213
363
|
readonly tenant?: (request: Request, auth: AuthState) => string | undefined | PromiseLike<string | undefined>;
|
|
214
364
|
/**
|
|
@@ -217,6 +367,33 @@ interface ServerOptions {
|
|
|
217
367
|
* `postgres`, since the target's queries run over direct Postgres.
|
|
218
368
|
*/
|
|
219
369
|
readonly support?: SupportSessions;
|
|
370
|
+
/**
|
|
371
|
+
* The claims `forContext()` adds for a user, the ones a custom access token
|
|
372
|
+
* hook would put in their token (roles, organization lists). Read them
|
|
373
|
+
* fresh: a job can run after the user lost access. `sub`, `role`, `act` and
|
|
374
|
+
* `tenant_id` come from the context and win.
|
|
375
|
+
*/
|
|
376
|
+
readonly claimsFor?: (userId: string, context: RequestContext) => SqlClaims | PromiseLike<SqlClaims>;
|
|
377
|
+
/** PostgREST request settings: `timeout`, `retry` and `urlLengthLimit`. */
|
|
378
|
+
readonly db?: ServerDbOptions;
|
|
379
|
+
/**
|
|
380
|
+
* Resolves the `credential_ref`s third-party calls use, e.g.
|
|
381
|
+
* `vaultCredentials()` from `better-supabase/credentials`. It becomes
|
|
382
|
+
* `ctx.credentials`; pass `subjectFor(ctx)` as the subject.
|
|
383
|
+
*/
|
|
384
|
+
readonly credentials?: CredentialProvider;
|
|
385
|
+
/**
|
|
386
|
+
* Where the server's audit trail goes, such as `audit.sink()` from
|
|
387
|
+
* `better-supabase/blocks/audit`. `suspendAccount`, `deleteAccount` and
|
|
388
|
+
* `endSessions` send `dev.better-supabase.account.*` CloudEvents, and
|
|
389
|
+
* `support.denied` events are forwarded. A failed send is logged and never
|
|
390
|
+
* fails the action.
|
|
391
|
+
*/
|
|
392
|
+
readonly audit?: EventSink;
|
|
393
|
+
}
|
|
394
|
+
interface ForContextOptions {
|
|
395
|
+
/** Recorded as `act.reason` when the context carries an impersonator. Defaults to `"job"`. */
|
|
396
|
+
readonly reason?: string;
|
|
220
397
|
}
|
|
221
398
|
/** The header `current_tenant_id()` reads over the Data API. */
|
|
222
399
|
declare const TENANT_HEADER = "x-bs-tenant";
|
|
@@ -241,11 +418,19 @@ interface ServerContext<M extends AnyModels, F extends AnyFunctions, E, C = unkn
|
|
|
241
418
|
* (`resolution.apply`) and, after a write, `bs-primary-until`.
|
|
242
419
|
*/
|
|
243
420
|
apply(response: Response): Response;
|
|
421
|
+
/**
|
|
422
|
+
* The cookies `apply` would set, for frameworks that write cookies through
|
|
423
|
+
* a cookie store instead of a response (`cookies().set`, `setResponseHeaders`).
|
|
424
|
+
* Read it after the handler ran: a write adds `bs-primary-until`.
|
|
425
|
+
*/
|
|
426
|
+
cookies(): readonly CookieWrite[];
|
|
244
427
|
/**
|
|
245
428
|
* Set while an admin views the app as another user: `auth`, `db` and
|
|
246
429
|
* `sql` are the target's, and `resolution` stays the admin's.
|
|
247
430
|
*/
|
|
248
431
|
readonly support?: ActiveSupport;
|
|
432
|
+
/** `options.credentials`, when the server has one. */
|
|
433
|
+
readonly credentials?: CredentialProvider;
|
|
249
434
|
}
|
|
250
435
|
interface ContextOptions {
|
|
251
436
|
readonly refresh?: boolean;
|
|
@@ -265,9 +450,12 @@ interface ContextOptions {
|
|
|
265
450
|
}
|
|
266
451
|
interface BetterServer<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> {
|
|
267
452
|
readonly env: BetterSupabaseEnv;
|
|
453
|
+
/** The definition's events; adapters pass `events.settled()` to `waitUntil`. */
|
|
454
|
+
readonly events: EventHub;
|
|
268
455
|
resolve(request: Request, options?: {
|
|
269
456
|
readonly refresh?: boolean;
|
|
270
457
|
readonly cookies?: boolean;
|
|
458
|
+
readonly checkSession?: boolean;
|
|
271
459
|
}): Promise<AuthResolution<C, P>>;
|
|
272
460
|
/**
|
|
273
461
|
* Resolves auth and binds repositories to the caller. Refreshes an expired
|
|
@@ -288,90 +476,41 @@ interface BetterServer<M extends AnyModels, F extends AnyFunctions, E, C = unkno
|
|
|
288
476
|
/** Service-role repositories. Bypasses RLS; the actor is `service`. */
|
|
289
477
|
admin(context?: RequestContext): Db<M, F, E, SupabaseClient>;
|
|
290
478
|
/**
|
|
291
|
-
* Deletes a user: their objects in `buckets`, then
|
|
292
|
-
* `mutation` notice for `auth.users`. Needs the secret key.
|
|
293
|
-
*
|
|
479
|
+
* Deletes a user: the Auth user, then their objects in `buckets`, then a
|
|
480
|
+
* `mutation` notice for `auth.users`. Needs the secret key. With
|
|
481
|
+
* `postgres`, a delete the database refuses returns its own error and
|
|
482
|
+
* hint. Access tokens already issued stay valid until they expire.
|
|
294
483
|
*/
|
|
295
484
|
deleteAccount(userId: string, options?: DeleteAccountOptions): AsyncResult<DeleteAccountResult>;
|
|
485
|
+
endSessions(userId: string): AsyncResult<EndSessionsResult>;
|
|
486
|
+
suspendAccount(userId: string, options: SuspendAccountOptions): AsyncResult<SuspendAccountResult>;
|
|
296
487
|
/**
|
|
297
488
|
* Repositories running as a user, with RLS, over direct Postgres. With
|
|
298
489
|
* `impersonation`, the claims carry `act: { kind: "impersonation", sub, reason }`, which
|
|
299
|
-
* the `audit` and `actor` SQL
|
|
490
|
+
* the `audit` and `actor` SQL modules record.
|
|
300
491
|
*/
|
|
301
492
|
actingAs(userId: string, claims?: Omit<SqlClaims, "sub" | "act">, impersonation?: ImpersonationOptions): Db<M, F, E, undefined>;
|
|
493
|
+
/**
|
|
494
|
+
* Repositories for the user in a recorded context (`job.context`), with
|
|
495
|
+
* RLS, over direct Postgres: `actingAs` with the context's tenant and
|
|
496
|
+
* `ServerOptions.claimsFor`. Fails with `forbidden` when the actor is not a
|
|
497
|
+
* user; it never falls back to `admin()`.
|
|
498
|
+
*/
|
|
499
|
+
forContext(context: RequestContext, options?: ForContextOptions): AsyncResult<Db<M, F, E, undefined>>;
|
|
302
500
|
/** Support sessions; every method fails without `ServerOptions.support`. */
|
|
303
501
|
readonly support: SupportApi;
|
|
304
502
|
}
|
|
503
|
+
type ServerKeys = keyof BetterServer<AnyModels, AnyFunctions, unknown>;
|
|
504
|
+
/**
|
|
505
|
+
* A framework adapter's server: `server` plus the adapter's own methods,
|
|
506
|
+
* without reading the lazy `env` getter. `extra` can't replace a
|
|
507
|
+
* `BetterServer` method.
|
|
508
|
+
*/
|
|
509
|
+
declare function extendServer<R extends object>(server: object, extra: Omit<R, ServerKeys>): R;
|
|
305
510
|
/**
|
|
306
511
|
* Server-side entry point for APIs, jobs, MCP servers and framework
|
|
307
512
|
* adapters. Holds the secrets; `betterSupabase` stays isomorphic.
|
|
308
513
|
*/
|
|
309
514
|
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
515
|
//#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 };
|
|
516
|
+
export { clearSupportCookie as A, sqlSupportStore as B, SupportOptions as C, supportSessions as D, SupportStartRequest as E, SupportEndedBy as F, SupportListFilter as I, SupportSession as L, supportCookieValue as M, SqlSupportStoreOptions as N, SUPPORT_COOKIE as O, SupportCallerClaims as P, SupportSessionStore as R, SupportAuthorizeInput as S, SupportSessions as T, supportClaims as V, DeleteAccountOptions as _, ServerDbOptions as a, ActiveSupport as b, createServer as c, SuspendAccountOptions as d, SuspendAccountResult as f, ReplicaState as g, PRIMARY_COOKIE as h, ServerContext as i, supportCookie as j, SupportCookieOptions 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, DeleteAccountResult as v, SupportPolicy as w, SupportApi as x, deleteAccount as y, SupportStartInput 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 };
|