better-supabase 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/impersonation-DcqaTBHx.js +148 -0
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +330 -194
- package/dist/sql/index.js +34901 -6489
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +343 -37
- package/dist/testing/index.js +1186 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +62 -18
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -100
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { a as AnyModels, i as AnyFunctions } from "../types-6BdhkmZe.js";
|
|
2
|
+
import { t as BetterSupabase } from "../define-CJJkkr1-.js";
|
|
3
|
+
import { t as BetterServer } from "../server-CeVeeXwz.js";
|
|
4
|
+
import { j as StorageImageOptions } from "../index-D48jVS-N.js";
|
|
5
|
+
import { a as AuthorizedContext, c as Unwrapped, n as ActionParsed, o as BlockActionOptions, r as ActionResult, s as BlockRequireOptions } from "../kit-B5tid-q5.js";
|
|
6
|
+
import { t as RefusalRedirects } from "../refusal-D1rgbzNq.js";
|
|
7
|
+
import { n as FrameworkOptions, t as FrameworkLocals } from "../framework-DuVb4Xa8.js";
|
|
8
|
+
import { StandardSchemaV1 } from "@standard-schema/spec";
|
|
9
|
+
//#region src/astro/index.d.ts
|
|
10
|
+
/** The part of Astro's `APIContext` (middleware, pages, endpoints, actions) the integration uses. */
|
|
11
|
+
export interface AstroContextLike {
|
|
12
|
+
readonly request: Request;
|
|
13
|
+
readonly locals: object;
|
|
14
|
+
}
|
|
15
|
+
export interface AstroOptions extends FrameworkOptions {
|
|
16
|
+
/** The host's env object for `getEnv`; defaults to `locals.runtime.env` (Cloudflare). */
|
|
17
|
+
readonly platformEnv?: (context: AstroContextLike) => unknown;
|
|
18
|
+
}
|
|
19
|
+
export interface BetterAstro<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> extends BetterServer<M, F, E, C, P> {
|
|
20
|
+
/**
|
|
21
|
+
* Astro middleware: verifies the caller, refreshes the session cookie on
|
|
22
|
+
* navigations and form posts, and puts `db`, `bs`, `auth`, `tenant` and
|
|
23
|
+
* `session` on `locals`. Response-phase entries see the page's response.
|
|
24
|
+
*
|
|
25
|
+
* ```ts title="src/middleware.ts"
|
|
26
|
+
* export const onRequest = bs.onRequest
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
readonly onRequest: (context: AstroContextLike, next: () => Promise<Response>) => Promise<Response>;
|
|
30
|
+
/** The request's `locals`, typed. */
|
|
31
|
+
locals(context: AstroContextLike): FrameworkLocals<M, F, E, C, P>;
|
|
32
|
+
/**
|
|
33
|
+
* The refusal for a caller `options` refuses (a redirect to `signIn` or
|
|
34
|
+
* `mfa`, else Problem Details), or `undefined`. Return it from a page's
|
|
35
|
+
* frontmatter or an endpoint.
|
|
36
|
+
*
|
|
37
|
+
* ```astro
|
|
38
|
+
* ---
|
|
39
|
+
* const refused = await bs.guard(Astro, { roles: ['admin'] })
|
|
40
|
+
* if (refused) return refused
|
|
41
|
+
* ---
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
guard(context: AstroContextLike, options?: BlockRequireOptions<C, P>): Promise<Response | undefined>;
|
|
45
|
+
/**
|
|
46
|
+
* The caller, or a thrown refusal `Response`, for endpoints that return
|
|
47
|
+
* whatever is thrown.
|
|
48
|
+
*/
|
|
49
|
+
require<R extends boolean = false>(context: AstroContextLike, options?: BlockRequireOptions<C, P, R>): Promise<FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>>;
|
|
50
|
+
/**
|
|
51
|
+
* The `handler` of `defineAction`, returning an `ActionResult`:
|
|
52
|
+
*
|
|
53
|
+
* ```ts title="src/actions/index.ts"
|
|
54
|
+
* export const server = {
|
|
55
|
+
* addNote: defineAction({ accept: 'form', handler: bs.action({ input: NoteInput }, (input, { db }) => db.notes.create(input)) }),
|
|
56
|
+
* }
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
action<S extends StandardSchemaV1 | undefined, T, R extends boolean = false>(options: BlockActionOptions<S, C, P, R>, fn: (input: ActionParsed<S>, ctx: FrameworkLocals<M, F, E, C, P> & AuthorizedContext<C, P, R>) => T): (input: unknown, context: AstroContextLike) => Promise<ActionResult<Unwrapped<Awaited<T>>>>;
|
|
60
|
+
}
|
|
61
|
+
/** Astro integration: middleware, page guards and Actions. */
|
|
62
|
+
export declare function createAstro<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, options?: AstroOptions): BetterAstro<M, F, E, C, P>;
|
|
63
|
+
/** What Astro passes to an image service's `getURL`. */
|
|
64
|
+
export interface AstroImageTransform {
|
|
65
|
+
readonly src: string | {
|
|
66
|
+
readonly src: string;
|
|
67
|
+
};
|
|
68
|
+
readonly width?: number | undefined;
|
|
69
|
+
readonly height?: number | undefined;
|
|
70
|
+
readonly quality?: number | "low" | "mid" | "high" | "max" | undefined;
|
|
71
|
+
}
|
|
72
|
+
/** An Astro external image service, typed structurally. */
|
|
73
|
+
export interface AstroImageService {
|
|
74
|
+
getURL(options: AstroImageTransform): string;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* An external image service that renders public Storage objects through
|
|
78
|
+
* Supabase image transformations; other sources pass through.
|
|
79
|
+
*
|
|
80
|
+
* ```ts title="src/image-service.ts"
|
|
81
|
+
* export default createImageService({ url: import.meta.env.PUBLIC_SUPABASE_URL })
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare function createImageService(options: StorageImageOptions): AstroImageService;
|
|
85
|
+
//#endregion
|
|
86
|
+
export type { ActionResult, RefusalRedirects };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { c as extendServer, n as flushEvents, s as createServer } from "../adapter-Bc1o3zyy.js";
|
|
2
|
+
import { t as defaultExpose } from "../respond-BUgsXNgk.js";
|
|
3
|
+
import { i as requireCaller, o as runAction } from "../kit-Fm-Fv7q5.js";
|
|
4
|
+
import { t as storageImageUrl } from "../image-url-pIVlO6R1.js";
|
|
5
|
+
import { t as around } from "../shared-CBxosKK3.js";
|
|
6
|
+
import { i as localsOf, r as frameworkEntry } from "../framework-CONDyPYx.js";
|
|
7
|
+
import { r as refusalResponse } from "../refusal-CeJWxmkH.js";
|
|
8
|
+
//#region src/astro/index.ts
|
|
9
|
+
function runtimeEnv(locals) {
|
|
10
|
+
const runtime = "runtime" in locals ? locals.runtime : void 0;
|
|
11
|
+
return typeof runtime === "object" && runtime !== null && "env" in runtime ? runtime.env : void 0;
|
|
12
|
+
}
|
|
13
|
+
/** Astro integration: middleware, page guards and Actions. */
|
|
14
|
+
function createAstro(betterSupabase, options = {}) {
|
|
15
|
+
const server = createServer(betterSupabase, options);
|
|
16
|
+
const expose = options.exposeErrors ?? defaultExpose();
|
|
17
|
+
const run = around([frameworkEntry(server, options, expose)]);
|
|
18
|
+
const scopeOf = (context) => {
|
|
19
|
+
if (!("bs" in context.locals)) throw new TypeError("better-supabase: no context; export bs.onRequest from src/middleware.ts");
|
|
20
|
+
return context.locals;
|
|
21
|
+
};
|
|
22
|
+
const refusalOf = async (context, requireOptions) => {
|
|
23
|
+
const scope = scopeOf(context);
|
|
24
|
+
return {
|
|
25
|
+
scope,
|
|
26
|
+
caller: await requireCaller(scope.bs.auth, requireOptions, scope.tenant)
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
return extendServer(server, {
|
|
30
|
+
onRequest: async (context, next) => {
|
|
31
|
+
const env = options.platformEnv ? options.platformEnv(context) : runtimeEnv(context.locals);
|
|
32
|
+
try {
|
|
33
|
+
return await run(context.request, env, (contributions) => {
|
|
34
|
+
Object.assign(context.locals, localsOf(contributions));
|
|
35
|
+
return next();
|
|
36
|
+
});
|
|
37
|
+
} finally {
|
|
38
|
+
flushEvents(server, options.waitUntil);
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
locals: scopeOf,
|
|
42
|
+
guard: async (context, requireOptions = {}) => {
|
|
43
|
+
const { caller } = await refusalOf(context, requireOptions);
|
|
44
|
+
return "kind" in caller ? refusalResponse(caller, context.request, options, expose) : void 0;
|
|
45
|
+
},
|
|
46
|
+
require: async (context, requireOptions = {}) => {
|
|
47
|
+
const { scope, caller } = await refusalOf(context, requireOptions);
|
|
48
|
+
if ("kind" in caller) throw refusalResponse(caller, context.request, options, expose);
|
|
49
|
+
return {
|
|
50
|
+
...scope,
|
|
51
|
+
...caller
|
|
52
|
+
};
|
|
53
|
+
},
|
|
54
|
+
action(actionOptions, fn) {
|
|
55
|
+
return async (input, context) => {
|
|
56
|
+
const scope = scopeOf(context);
|
|
57
|
+
return await runAction(scope.bs.auth, actionOptions, input, scope.tenant, (parsed, caller) => fn(parsed, {
|
|
58
|
+
...scope,
|
|
59
|
+
...caller
|
|
60
|
+
}));
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const QUALITY_PRESETS = {
|
|
66
|
+
low: 40,
|
|
67
|
+
mid: 60,
|
|
68
|
+
high: 80,
|
|
69
|
+
max: 100
|
|
70
|
+
};
|
|
71
|
+
/**
|
|
72
|
+
* An external image service that renders public Storage objects through
|
|
73
|
+
* Supabase image transformations; other sources pass through.
|
|
74
|
+
*
|
|
75
|
+
* ```ts title="src/image-service.ts"
|
|
76
|
+
* export default createImageService({ url: import.meta.env.PUBLIC_SUPABASE_URL })
|
|
77
|
+
* ```
|
|
78
|
+
*/
|
|
79
|
+
function createImageService(options) {
|
|
80
|
+
const imageUrl = storageImageUrl(options);
|
|
81
|
+
return { getURL(transform) {
|
|
82
|
+
const src = typeof transform.src === "string" ? transform.src : transform.src.src;
|
|
83
|
+
if (transform.width === void 0) return src;
|
|
84
|
+
const quality = typeof transform.quality === "string" ? QUALITY_PRESETS[transform.quality] : transform.quality;
|
|
85
|
+
return imageUrl(src, {
|
|
86
|
+
width: transform.width,
|
|
87
|
+
height: transform.height,
|
|
88
|
+
quality
|
|
89
|
+
}) ?? src;
|
|
90
|
+
} };
|
|
91
|
+
}
|
|
92
|
+
//#endregion
|
|
93
|
+
export { createAstro, createImageService };
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
//#region src/workflow-sdk/attributes.ts
|
|
2
|
+
/** The attributes the Supabase World's status trigger copies into `workflow_runs`. */
|
|
3
|
+
const WORKFLOW_ATTRIBUTES = {
|
|
4
|
+
tenant: "bs.tenant",
|
|
5
|
+
actor: "bs.actor",
|
|
6
|
+
key: "bs.key",
|
|
7
|
+
/** The builder definition a run started from; its alerts match on it. */
|
|
8
|
+
definition: "bs.definition",
|
|
9
|
+
/** The builder version number a run started from. */
|
|
10
|
+
version: "bs.version"
|
|
11
|
+
};
|
|
12
|
+
//#endregion
|
|
13
|
+
export { WORKFLOW_ATTRIBUTES as t };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { Provider } from "@supabase/supabase-js";
|
|
2
|
+
//#region src/client/native/auth-link.d.ts
|
|
3
|
+
/** An auth error: supabase-js `AuthError`s and the errors a link carries. */
|
|
4
|
+
interface AuthFailure {
|
|
5
|
+
readonly message: string;
|
|
6
|
+
readonly code?: string | undefined;
|
|
7
|
+
readonly status?: number | undefined;
|
|
8
|
+
}
|
|
9
|
+
interface AuthReply {
|
|
10
|
+
readonly error: AuthFailure | null;
|
|
11
|
+
}
|
|
12
|
+
/** The part of a supabase-js client the deep-link helpers call. */
|
|
13
|
+
interface AuthLinkClient {
|
|
14
|
+
readonly auth: {
|
|
15
|
+
exchangeCodeForSession(code: string): Promise<AuthReply>;
|
|
16
|
+
setSession(tokens: {
|
|
17
|
+
access_token: string;
|
|
18
|
+
refresh_token: string;
|
|
19
|
+
}): Promise<AuthReply>;
|
|
20
|
+
verifyOtp(params: {
|
|
21
|
+
token_hash: string;
|
|
22
|
+
type: "signup" | "invite" | "magiclink" | "recovery" | "email_change" | "email";
|
|
23
|
+
}): Promise<AuthReply>;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/** What a link did: nothing (not an auth link), a session, or an error. */
|
|
27
|
+
type AuthLinkResult = {
|
|
28
|
+
readonly type: "none";
|
|
29
|
+
} | {
|
|
30
|
+
readonly type: "signed-in";
|
|
31
|
+
readonly via: "code" | "tokens" | "otp";
|
|
32
|
+
} | {
|
|
33
|
+
readonly type: "error";
|
|
34
|
+
readonly error: AuthFailure;
|
|
35
|
+
};
|
|
36
|
+
/**
|
|
37
|
+
* The query and fragment parameters of a URL. Parsed by hand: Hermes'
|
|
38
|
+
* `URL` and `URLSearchParams` leave parts unimplemented.
|
|
39
|
+
*/
|
|
40
|
+
declare function linkParams(url: string): ReadonlyMap<string, string>;
|
|
41
|
+
/**
|
|
42
|
+
* Finishes a sign-in from a deep link: an OAuth or PKCE `code`, implicit
|
|
43
|
+
* flow tokens in the fragment, or a magic link's `token_hash`. Returns
|
|
44
|
+
* `none` for links that carry none of them, so it can see every URL.
|
|
45
|
+
*
|
|
46
|
+
* ```ts
|
|
47
|
+
* Linking.addEventListener('url', ({ url }) => void handleAuthDeepLink(supabase, url));
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
declare function handleAuthDeepLink(supabase: AuthLinkClient, url: string): Promise<AuthLinkResult>;
|
|
51
|
+
/** The part of `expo-web-browser` OAuth sign-in uses. */
|
|
52
|
+
interface WebBrowserLike {
|
|
53
|
+
openAuthSessionAsync(url: string, redirectUrl?: string | null): Promise<{
|
|
54
|
+
readonly type: string;
|
|
55
|
+
readonly url?: string;
|
|
56
|
+
}>;
|
|
57
|
+
}
|
|
58
|
+
/** The part of a supabase-js client OAuth sign-in calls. */
|
|
59
|
+
interface OAuthClient extends AuthLinkClient {
|
|
60
|
+
readonly auth: AuthLinkClient["auth"] & {
|
|
61
|
+
signInWithOAuth(credentials: {
|
|
62
|
+
provider: Provider;
|
|
63
|
+
options: {
|
|
64
|
+
redirectTo: string;
|
|
65
|
+
skipBrowserRedirect: true;
|
|
66
|
+
scopes?: string;
|
|
67
|
+
queryParams?: Record<string, string>;
|
|
68
|
+
};
|
|
69
|
+
}): Promise<{
|
|
70
|
+
readonly data: {
|
|
71
|
+
readonly url: string | null;
|
|
72
|
+
} | {
|
|
73
|
+
readonly url?: null;
|
|
74
|
+
};
|
|
75
|
+
readonly error: AuthFailure | null;
|
|
76
|
+
}>;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
interface OAuthSignInOptions {
|
|
80
|
+
/** The app's deep link back, e.g. `Linking.createURL('auth/callback')`. Add it to the redirect allow list. */
|
|
81
|
+
readonly redirectTo: string;
|
|
82
|
+
readonly scopes?: string;
|
|
83
|
+
readonly queryParams?: Readonly<Record<string, string>>;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* OAuth on a device: opens the provider in an auth session, then finishes
|
|
87
|
+
* the sign-in from the redirect. A cancelled or dismissed browser returns
|
|
88
|
+
* `none`.
|
|
89
|
+
*
|
|
90
|
+
* ```ts
|
|
91
|
+
* import * as WebBrowser from 'expo-web-browser';
|
|
92
|
+
* await signInWithOAuthBrowser(supabase, WebBrowser, 'github', { redirectTo: Linking.createURL('auth/callback') });
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
declare function signInWithOAuthBrowser(supabase: OAuthClient, browser: WebBrowserLike, provider: Provider, options: OAuthSignInOptions): Promise<AuthLinkResult>;
|
|
96
|
+
//#endregion
|
|
97
|
+
export { OAuthSignInOptions as a, linkParams as c, OAuthClient as i, signInWithOAuthBrowser as l, AuthLinkClient as n, WebBrowserLike as o, AuthLinkResult as r, handleAuthDeepLink as s, AuthFailure as t };
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
//#region src/client/native/auth-link.ts
|
|
2
|
+
const OTP_TYPES = /* @__PURE__ */ new Set([
|
|
3
|
+
"signup",
|
|
4
|
+
"invite",
|
|
5
|
+
"magiclink",
|
|
6
|
+
"recovery",
|
|
7
|
+
"email_change",
|
|
8
|
+
"email"
|
|
9
|
+
]);
|
|
10
|
+
function isOtpType(value) {
|
|
11
|
+
return OTP_TYPES.has(value);
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The query and fragment parameters of a URL. Parsed by hand: Hermes'
|
|
15
|
+
* `URL` and `URLSearchParams` leave parts unimplemented.
|
|
16
|
+
*/
|
|
17
|
+
function linkParams(url) {
|
|
18
|
+
const params = /* @__PURE__ */ new Map();
|
|
19
|
+
const hash = url.indexOf("#");
|
|
20
|
+
const query = url.indexOf("?");
|
|
21
|
+
const parts = [query === -1 ? "" : url.slice(query + 1, hash > query ? hash : void 0), hash === -1 ? "" : url.slice(hash + 1)];
|
|
22
|
+
for (const part of parts) for (const pair of part.split("&")) {
|
|
23
|
+
if (pair === "") continue;
|
|
24
|
+
const at = pair.indexOf("=");
|
|
25
|
+
const name = at === -1 ? pair : pair.slice(0, at);
|
|
26
|
+
const value = at === -1 ? "" : pair.slice(at + 1);
|
|
27
|
+
try {
|
|
28
|
+
params.set(decodeURIComponent(name.replaceAll("+", " ")), decodeURIComponent(value.replaceAll("+", " ")));
|
|
29
|
+
} catch {}
|
|
30
|
+
}
|
|
31
|
+
return params;
|
|
32
|
+
}
|
|
33
|
+
const settle = async (reply, via) => {
|
|
34
|
+
const { error } = await reply;
|
|
35
|
+
return error ? {
|
|
36
|
+
type: "error",
|
|
37
|
+
error
|
|
38
|
+
} : {
|
|
39
|
+
type: "signed-in",
|
|
40
|
+
via
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
/**
|
|
44
|
+
* Finishes a sign-in from a deep link: an OAuth or PKCE `code`, implicit
|
|
45
|
+
* flow tokens in the fragment, or a magic link's `token_hash`. Returns
|
|
46
|
+
* `none` for links that carry none of them, so it can see every URL.
|
|
47
|
+
*
|
|
48
|
+
* ```ts
|
|
49
|
+
* Linking.addEventListener('url', ({ url }) => void handleAuthDeepLink(supabase, url));
|
|
50
|
+
* ```
|
|
51
|
+
*/
|
|
52
|
+
function handleAuthDeepLink(supabase, url) {
|
|
53
|
+
const params = linkParams(url);
|
|
54
|
+
const failure = params.get("error_description") ?? params.get("error");
|
|
55
|
+
if (failure !== void 0) {
|
|
56
|
+
const code = params.get("error_code") ?? params.get("error");
|
|
57
|
+
return Promise.resolve({
|
|
58
|
+
type: "error",
|
|
59
|
+
error: {
|
|
60
|
+
message: failure,
|
|
61
|
+
...code ? { code } : {}
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
const code = params.get("code");
|
|
66
|
+
if (code) return settle(supabase.auth.exchangeCodeForSession(code), "code");
|
|
67
|
+
const access = params.get("access_token");
|
|
68
|
+
const refresh = params.get("refresh_token");
|
|
69
|
+
if (access && refresh) return settle(supabase.auth.setSession({
|
|
70
|
+
access_token: access,
|
|
71
|
+
refresh_token: refresh
|
|
72
|
+
}), "tokens");
|
|
73
|
+
const tokenHash = params.get("token_hash");
|
|
74
|
+
const type = params.get("type");
|
|
75
|
+
if (tokenHash && type && isOtpType(type)) return settle(supabase.auth.verifyOtp({
|
|
76
|
+
token_hash: tokenHash,
|
|
77
|
+
type
|
|
78
|
+
}), "otp");
|
|
79
|
+
return Promise.resolve({ type: "none" });
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* OAuth on a device: opens the provider in an auth session, then finishes
|
|
83
|
+
* the sign-in from the redirect. A cancelled or dismissed browser returns
|
|
84
|
+
* `none`.
|
|
85
|
+
*
|
|
86
|
+
* ```ts
|
|
87
|
+
* import * as WebBrowser from 'expo-web-browser';
|
|
88
|
+
* await signInWithOAuthBrowser(supabase, WebBrowser, 'github', { redirectTo: Linking.createURL('auth/callback') });
|
|
89
|
+
* ```
|
|
90
|
+
*/
|
|
91
|
+
async function signInWithOAuthBrowser(supabase, browser, provider, options) {
|
|
92
|
+
const { data, error } = await supabase.auth.signInWithOAuth({
|
|
93
|
+
provider,
|
|
94
|
+
options: {
|
|
95
|
+
redirectTo: options.redirectTo,
|
|
96
|
+
skipBrowserRedirect: true,
|
|
97
|
+
...options.scopes ? { scopes: options.scopes } : {},
|
|
98
|
+
...options.queryParams ? { queryParams: { ...options.queryParams } } : {}
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
if (error) return {
|
|
102
|
+
type: "error",
|
|
103
|
+
error
|
|
104
|
+
};
|
|
105
|
+
if (!data.url) return {
|
|
106
|
+
type: "error",
|
|
107
|
+
error: { message: "No OAuth URL was returned" }
|
|
108
|
+
};
|
|
109
|
+
const session = await browser.openAuthSessionAsync(data.url, options.redirectTo);
|
|
110
|
+
if (session.type !== "success" || !session.url) return { type: "none" };
|
|
111
|
+
return handleAuthDeepLink(supabase, session.url);
|
|
112
|
+
}
|
|
113
|
+
//#endregion
|
|
114
|
+
export { linkParams as n, signInWithOAuthBrowser as r, handleAuthDeepLink as t };
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { i as DisabledRow } from "./modules-DpPwzC7E.js";
|
|
2
|
+
//#region src/config/authorization.d.ts
|
|
3
|
+
/**
|
|
4
|
+
* SQL expression templates the SQL modules and the access policies call.
|
|
5
|
+
* `{permission}` is a text expression (a literal or a parameter), `{user}` a
|
|
6
|
+
* uuid expression, `{tenant}` an expression of the tenant id type and
|
|
7
|
+
* `{role}` a text expression. `{scope}` is the scope's name unquoted, so it
|
|
8
|
+
* can be part of a function name (`app.ids_{scope}({permission})`); write
|
|
9
|
+
* `'{scope}'` to pass it as text.
|
|
10
|
+
*/
|
|
11
|
+
interface AuthorizationFunctions {
|
|
12
|
+
/**
|
|
13
|
+
* The ids of the `{scope}` instances where the caller holds
|
|
14
|
+
* `{permission}`, as a set: it is used as
|
|
15
|
+
* `select t.id::text from <template> as t(id)`.
|
|
16
|
+
*/
|
|
17
|
+
readonly idsWith: string;
|
|
18
|
+
/** Whether the caller holds `{permission}` platform-wide. */
|
|
19
|
+
readonly isPlatform: string;
|
|
20
|
+
/** `idsWith` for `{user}`, so `can_user` answers for another user. */
|
|
21
|
+
readonly idsWithFor?: string;
|
|
22
|
+
/** `isPlatform` for `{user}`. */
|
|
23
|
+
readonly isPlatformFor?: string;
|
|
24
|
+
/** The ids of the `{scope}` instances the caller is a member of, as a set. */
|
|
25
|
+
readonly memberIds?: string;
|
|
26
|
+
/** `memberIds` for `{user}`, which the access token hook calls as `supabase_auth_admin`. */
|
|
27
|
+
readonly memberIdsFor?: string;
|
|
28
|
+
/** Whether the caller may assign `{role}` in `{tenant}`. */
|
|
29
|
+
readonly canAssign?: string;
|
|
30
|
+
/** Whether `{user}` may assign `{role}` in `{tenant}`. */
|
|
31
|
+
readonly canAssignFor?: string;
|
|
32
|
+
/**
|
|
33
|
+
* The permission keys `{user}` holds in `{tenant}`, as a `text[]`. It
|
|
34
|
+
* fills `member_permissions` and the `permissions` claim; without it
|
|
35
|
+
* both are empty.
|
|
36
|
+
*/
|
|
37
|
+
readonly permissionsFor?: string;
|
|
38
|
+
/**
|
|
39
|
+
* Whether the caller may decide the tool call `{tool}` (text) waits on in
|
|
40
|
+
* `{tenant}`. Without it only the chat's owner and the service role decide.
|
|
41
|
+
*/
|
|
42
|
+
readonly canApprove?: string;
|
|
43
|
+
}
|
|
44
|
+
/** One scope the provider decides permissions in, such as `organization`. */
|
|
45
|
+
interface AuthorizationScope {
|
|
46
|
+
/** Lower case letters, digits and `_`, starting with a letter. */
|
|
47
|
+
readonly name: string;
|
|
48
|
+
/** The Postgres type of the scope's ids: `uuid`, `text`, `bigint` or `integer`. */
|
|
49
|
+
readonly idType?: string;
|
|
50
|
+
/** The scope this one sits in; the root scope has none. */
|
|
51
|
+
readonly parent?: string;
|
|
52
|
+
}
|
|
53
|
+
/** A function the templates call, which must exist and be executable by `role`. */
|
|
54
|
+
interface AuthorizationRequirement {
|
|
55
|
+
/** `schema.name`. */
|
|
56
|
+
readonly function: string;
|
|
57
|
+
/** The argument types, such as `text` or `uuid, text`. */
|
|
58
|
+
readonly args?: string;
|
|
59
|
+
readonly role: string;
|
|
60
|
+
}
|
|
61
|
+
/** A permission key the provider defines. */
|
|
62
|
+
interface AuthorizationPermission {
|
|
63
|
+
readonly key: string;
|
|
64
|
+
/**
|
|
65
|
+
* `true` when the SQL functions answer for the key completely. A key with
|
|
66
|
+
* row conditions they don't check is `false`, and policies refuse it.
|
|
67
|
+
* Unset means unknown, which counts as `false`.
|
|
68
|
+
*/
|
|
69
|
+
readonly sqlComplete?: boolean;
|
|
70
|
+
/** The scopes it can be granted at. */
|
|
71
|
+
readonly scopes?: readonly string[];
|
|
72
|
+
}
|
|
73
|
+
/** A table of memberships the provider reads. */
|
|
74
|
+
interface AuthorizationMembership {
|
|
75
|
+
/** `schema.table`. */
|
|
76
|
+
readonly table: string;
|
|
77
|
+
readonly userColumn: string;
|
|
78
|
+
/** The scope column, or the scope every row is in. */
|
|
79
|
+
readonly scope: {
|
|
80
|
+
readonly column: string;
|
|
81
|
+
} | {
|
|
82
|
+
readonly value: string;
|
|
83
|
+
};
|
|
84
|
+
readonly idColumn: string;
|
|
85
|
+
}
|
|
86
|
+
/** A membership table whose role column points into a roles table. */
|
|
87
|
+
interface AuthorizationRoleSource {
|
|
88
|
+
/** `schema.table` of the memberships. */
|
|
89
|
+
readonly table: string;
|
|
90
|
+
readonly role: {
|
|
91
|
+
readonly column: string;
|
|
92
|
+
readonly through: {
|
|
93
|
+
/** `schema.table` of the roles. */
|
|
94
|
+
readonly table: string;
|
|
95
|
+
readonly id: string;
|
|
96
|
+
readonly column: string;
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/** The access token hook the provider generates. */
|
|
101
|
+
interface AuthorizationTokenHook {
|
|
102
|
+
/** `schema.name`. */
|
|
103
|
+
readonly function: string;
|
|
104
|
+
/** The claim it writes the active tenant id to. */
|
|
105
|
+
readonly tenantClaim?: string;
|
|
106
|
+
/** Claims it writes itself, which a second writer would contradict. */
|
|
107
|
+
readonly ownedClaims: readonly string[];
|
|
108
|
+
/** Claims it fills from other functions, such as `features` from `better_supabase.feature_claims`. */
|
|
109
|
+
readonly registeredClaims?: readonly {
|
|
110
|
+
readonly name: string;
|
|
111
|
+
/** `schema.name`. */
|
|
112
|
+
readonly function: string;
|
|
113
|
+
}[];
|
|
114
|
+
/** A byte budget over some claims, which doctor `--as` measures (BS405). */
|
|
115
|
+
readonly budget?: {
|
|
116
|
+
readonly claims: readonly string[];
|
|
117
|
+
readonly bytes: number;
|
|
118
|
+
/** A claim the hook sets to `true` when it dropped entries to stay within the budget. */
|
|
119
|
+
readonly truncatedClaim?: string;
|
|
120
|
+
};
|
|
121
|
+
/** Comment lines the provider's generated files contain, so doctor recognises them. */
|
|
122
|
+
readonly markers?: {
|
|
123
|
+
/** In the file that defines the hook. */
|
|
124
|
+
readonly hook?: string;
|
|
125
|
+
/** In the migration that grants the hook's functions. */
|
|
126
|
+
readonly grants?: string;
|
|
127
|
+
};
|
|
128
|
+
/** The command that writes the hook's grants, for BS404. */
|
|
129
|
+
readonly grantsCommand?: string;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* An authorization system the SQL modules, the policies and doctor delegate
|
|
133
|
+
* to. It is plain data, usually built from the provider's own output files.
|
|
134
|
+
*/
|
|
135
|
+
interface AuthorizationProvider {
|
|
136
|
+
readonly apiVersion: 1;
|
|
137
|
+
/** The provider's name, for messages. */
|
|
138
|
+
readonly name: string;
|
|
139
|
+
readonly scopes: readonly AuthorizationScope[];
|
|
140
|
+
/** The scope tenants are. */
|
|
141
|
+
readonly tenantScope: string;
|
|
142
|
+
readonly functions: AuthorizationFunctions;
|
|
143
|
+
readonly requires?: readonly AuthorizationRequirement[];
|
|
144
|
+
readonly permissions?: readonly AuthorizationPermission[];
|
|
145
|
+
readonly memberships?: readonly AuthorizationMembership[];
|
|
146
|
+
/** Rows that say whether a user or a tenant is active. */
|
|
147
|
+
readonly suspension?: {
|
|
148
|
+
readonly user?: DisabledRow;
|
|
149
|
+
readonly tenant?: DisabledRow;
|
|
150
|
+
};
|
|
151
|
+
readonly roleSources?: readonly AuthorizationRoleSource[];
|
|
152
|
+
/** `schema.table.column` of every column that decides access (BS213). */
|
|
153
|
+
readonly decidingColumns?: readonly string[];
|
|
154
|
+
readonly tokenHook?: AuthorizationTokenHook;
|
|
155
|
+
/** How `canApprove` decisions are made. */
|
|
156
|
+
readonly approvals?: {
|
|
157
|
+
/** The user who asked for the tool call can't approve it. Default `false`. */
|
|
158
|
+
readonly distinctApprover?: boolean;
|
|
159
|
+
};
|
|
160
|
+
/** What the provider found wrong while building this, for doctor. */
|
|
161
|
+
readonly problems?: readonly string[];
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* The error for a provider built for another API version, or `undefined`
|
|
165
|
+
* for version 1.
|
|
166
|
+
*/
|
|
167
|
+
declare function providerApiProblem(provider: {
|
|
168
|
+
readonly name?: unknown;
|
|
169
|
+
readonly apiVersion?: unknown;
|
|
170
|
+
}): string | undefined;
|
|
171
|
+
//#endregion
|
|
172
|
+
export { AuthorizationRequirement as a, AuthorizationTokenHook as c, AuthorizationProvider as i, providerApiProblem as l, AuthorizationMembership as n, AuthorizationRoleSource as o, AuthorizationPermission as r, AuthorizationScope as s, AuthorizationFunctions as t };
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { t as around } from "./shared-CBxosKK3.js";
|
|
2
|
+
//#region src/bridges/before-route.ts
|
|
3
|
+
/**
|
|
4
|
+
* Runs the entries ahead of a framework that owns the route and the
|
|
5
|
+
* response (Express, Fastify, Koa, Nitro 2, SolidStart, NestJS). A short
|
|
6
|
+
* circuit is the answer; otherwise the framework copies the headers and
|
|
7
|
+
* hands the contributions to the route. Response-phase entries see an
|
|
8
|
+
* empty response, so `withDbStats` and `withServerTiming` report nothing here.
|
|
9
|
+
*/
|
|
10
|
+
function beforeRoute(entries) {
|
|
11
|
+
const run = around(entries);
|
|
12
|
+
return async (request, env) => {
|
|
13
|
+
let contributions;
|
|
14
|
+
const marker = new Response(null);
|
|
15
|
+
const response = await run(request, env, (handed) => {
|
|
16
|
+
contributions = handed;
|
|
17
|
+
return Promise.resolve(marker);
|
|
18
|
+
});
|
|
19
|
+
return contributions === void 0 ? {
|
|
20
|
+
reached: false,
|
|
21
|
+
response
|
|
22
|
+
} : {
|
|
23
|
+
reached: true,
|
|
24
|
+
contributions,
|
|
25
|
+
headers: response.headers
|
|
26
|
+
};
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//#endregion
|
|
30
|
+
export { beforeRoute as t };
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { a as AnyModels, i as AnyFunctions } from "./types-6BdhkmZe.js";
|
|
2
|
+
import { b as Db, t as BetterSupabase } from "./define-CJJkkr1-.js";
|
|
3
|
+
import { s as BetterQueries } from "./index-Bepi-Hgg.js";
|
|
4
|
+
import { SupabaseClient } from "@supabase/supabase-js";
|
|
5
|
+
//#region src/client/bind.d.ts
|
|
6
|
+
interface AuthUser {
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly email?: string;
|
|
9
|
+
readonly role?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* What the UI needs to know. Claims are decoded, not verified: RLS enforces
|
|
13
|
+
* access. A token refresh that changes only `exp`, `iat`, `nbf` or `jti`
|
|
14
|
+
* keeps the previous snapshot, so read expiry from the session, not here.
|
|
15
|
+
*/
|
|
16
|
+
type AuthSnapshot = {
|
|
17
|
+
readonly status: "loading";
|
|
18
|
+
readonly user: null;
|
|
19
|
+
readonly claims: null;
|
|
20
|
+
} | {
|
|
21
|
+
readonly status: "signed-out";
|
|
22
|
+
readonly user: null;
|
|
23
|
+
readonly claims: null;
|
|
24
|
+
} | {
|
|
25
|
+
readonly status: "signed-in";
|
|
26
|
+
readonly user: AuthUser;
|
|
27
|
+
readonly claims: Readonly<Record<string, unknown>>;
|
|
28
|
+
};
|
|
29
|
+
interface ClientAuth {
|
|
30
|
+
readonly current: () => AuthSnapshot;
|
|
31
|
+
/** `useSyncExternalStore`-compatible. */
|
|
32
|
+
readonly subscribe: (listener: () => void) => () => void;
|
|
33
|
+
}
|
|
34
|
+
interface BetterClient<M extends AnyModels, F extends AnyFunctions, E, C = unknown, P = unknown> {
|
|
35
|
+
/** The definition the client was created from (schema metadata, specs, live queries). */
|
|
36
|
+
readonly betterSupabase: BetterSupabase<M, unknown, F, E, C, P>;
|
|
37
|
+
readonly supabase: SupabaseClient;
|
|
38
|
+
/** Repositories with the current session's actor and claims. */
|
|
39
|
+
readonly db: Db<M, F, E, SupabaseClient>;
|
|
40
|
+
/** TanStack Query option factories over `db`. */
|
|
41
|
+
readonly queries: BetterQueries<M, E, F>;
|
|
42
|
+
readonly auth: ClientAuth;
|
|
43
|
+
/**
|
|
44
|
+
* Stops following `supabase`'s session. Call it when the client goes away
|
|
45
|
+
* before the app does: Fast Refresh, tests, a client per account.
|
|
46
|
+
*/
|
|
47
|
+
readonly dispose: () => void;
|
|
48
|
+
}
|
|
49
|
+
interface BindClientOptions {
|
|
50
|
+
/**
|
|
51
|
+
* `staleTime` for every query option in `queries`. Above zero, a remount
|
|
52
|
+
* or a window focus reuses cached rows instead of refetching them.
|
|
53
|
+
*/
|
|
54
|
+
readonly staleTime?: number;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Repositories that follow `supabase`'s session, TanStack Query options and
|
|
58
|
+
* an auth store, for a supabase-js client you created yourself.
|
|
59
|
+
*/
|
|
60
|
+
declare function bindClient<M extends AnyModels, D, F extends AnyFunctions, E, C = unknown, P = unknown>(betterSupabase: BetterSupabase<M, D, F, E, C, P>, supabase: SupabaseClient, options?: BindClientOptions): BetterClient<M, F, E, C, P>;
|
|
61
|
+
//#endregion
|
|
62
|
+
export { ClientAuth as a, BindClientOptions as i, AuthUser as n, bindClient as o, BetterClient as r, AuthSnapshot as t };
|