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,40 +0,0 @@
|
|
|
1
|
-
const TEMPORAL_MISSING = `Temporal is not available in this runtime. Import "temporal-polyfill/global" once at startup.`;
|
|
2
|
-
/** The runtime's `Temporal`, or `undefined` before the polyfill loads. */
|
|
3
|
-
function optionalTemporal() {
|
|
4
|
-
return globalThis.Temporal;
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* The current instant, the default `now` everywhere. Without Temporal it
|
|
8
|
-
* throws a `TypeError` that names the polyfill.
|
|
9
|
-
*/
|
|
10
|
-
function nowInstant() {
|
|
11
|
-
const namespace = optionalTemporal();
|
|
12
|
-
if (namespace === void 0) throw new TypeError(TEMPORAL_MISSING);
|
|
13
|
-
return namespace.Now.instant();
|
|
14
|
-
}
|
|
15
|
-
const ISO_TAGS = /* @__PURE__ */ new Set([
|
|
16
|
-
"Temporal.Instant",
|
|
17
|
-
"Temporal.PlainDateTime",
|
|
18
|
-
"Temporal.PlainDate",
|
|
19
|
-
"Temporal.PlainTime"
|
|
20
|
-
]);
|
|
21
|
-
/**
|
|
22
|
-
* The text Postgres reads back for a Temporal value: ISO 8601, with a
|
|
23
|
-
* `ZonedDateTime` sent as its instant because Postgres rejects the
|
|
24
|
-
* `[Region/City]` annotation. `undefined` for anything else.
|
|
25
|
-
*
|
|
26
|
-
* Values are recognized by `Symbol.toStringTag`, not `instanceof`, so values
|
|
27
|
-
* from another realm or a second copy of the polyfill still encode.
|
|
28
|
-
*/
|
|
29
|
-
function temporalText(value) {
|
|
30
|
-
if (typeof value !== "object" || value === null) return void 0;
|
|
31
|
-
if (!(Symbol.toStringTag in value)) return void 0;
|
|
32
|
-
const tag = value[Symbol.toStringTag];
|
|
33
|
-
if (ISO_TAGS.has(tag)) return String(value);
|
|
34
|
-
return tag === "Temporal.ZonedDateTime" && isZoned(value) ? String(value.toInstant()) : void 0;
|
|
35
|
-
}
|
|
36
|
-
function isZoned(value) {
|
|
37
|
-
return "toInstant" in value && typeof value.toInstant === "function";
|
|
38
|
-
}
|
|
39
|
-
//#endregion
|
|
40
|
-
export { temporalText as i, nowInstant as n, optionalTemporal as r, TEMPORAL_MISSING as t };
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
//#region src/query/invalidate.ts
|
|
2
|
-
function isString(value) {
|
|
3
|
-
return typeof value === "string";
|
|
4
|
-
}
|
|
5
|
-
function queryTables(query) {
|
|
6
|
-
const tables = query.meta?.["bsTables"];
|
|
7
|
-
if (Array.isArray(tables)) {
|
|
8
|
-
const list = tables;
|
|
9
|
-
return list.every(isString) ? list : list.filter(isString);
|
|
10
|
-
}
|
|
11
|
-
const [prefix, table] = query.queryKey;
|
|
12
|
-
return prefix === "bs" && typeof table === "string" ? [table] : void 0;
|
|
13
|
-
}
|
|
14
|
-
/**
|
|
15
|
-
* Invalidates every query that read one of `tables`: better-supabase queries
|
|
16
|
-
* by their `meta.bsTables`, and other `['bs', table, ...]` keys by prefix.
|
|
17
|
-
*/
|
|
18
|
-
function invalidateTables(client, tables) {
|
|
19
|
-
if (tables.length === 0) return Promise.resolve();
|
|
20
|
-
const changed = new Set(tables);
|
|
21
|
-
return client.invalidateQueries({ predicate: (query) => queryTables(query)?.some((table) => changed.has(table)) ?? false });
|
|
22
|
-
}
|
|
23
|
-
//#endregion
|
|
24
|
-
//#region src/query/user-change.ts
|
|
25
|
-
/**
|
|
26
|
-
* Removes every `['bs', ...]` query when the signed-in user changes or signs
|
|
27
|
-
* out, so the next user never sees the previous user's rows. Returns the
|
|
28
|
-
* function that stops listening. `BetterSupabaseProvider` calls it for React;
|
|
29
|
-
* call it yourself with Vue, Solid, Svelte or Angular Query.
|
|
30
|
-
*
|
|
31
|
-
* ```ts
|
|
32
|
-
* const stop = clearOnUserChange(queryClient, bs.auth);
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
function clearOnUserChange(queryClient, auth) {
|
|
36
|
-
let user;
|
|
37
|
-
const check = () => {
|
|
38
|
-
const snapshot = auth.current();
|
|
39
|
-
if (snapshot.status === "loading") return;
|
|
40
|
-
const id = snapshot.user?.id ?? null;
|
|
41
|
-
if (user !== void 0 && user !== id) queryClient.removeQueries({ queryKey: ["bs"] });
|
|
42
|
-
user = id;
|
|
43
|
-
};
|
|
44
|
-
const stop = auth.subscribe(check);
|
|
45
|
-
check();
|
|
46
|
-
return stop;
|
|
47
|
-
}
|
|
48
|
-
//#endregion
|
|
49
|
-
export { invalidateTables as n, clearOnUserChange as t };
|
package/dist/webhooks/index.d.ts
DELETED
|
@@ -1,285 +0,0 @@
|
|
|
1
|
-
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import { P as TableKey, k as Row, n as AnyFunctions, r as AnyModels } from "../types-Dnf_wRDz.js";
|
|
3
|
-
import { S as ErrorMapper, a as AsyncResult, u as Result } from "../executor-BunPOO-k.js";
|
|
4
|
-
import { a as EventHub } from "../events-aIO7vsIk.js";
|
|
5
|
-
import { t as BetterSupabase } from "../define-Bp_BZa5h.js";
|
|
6
|
-
import { g as RequestContext } from "../plugin-o144f322.js";
|
|
7
|
-
import { r as EventSink } from "../index-DOESKG27.js";
|
|
8
|
-
import { i as sqlTransport, n as RpcClient, r as rpcTransport, t as KitTransport } from "../kit-transport-B82k1djG.js";
|
|
9
|
-
import { _ as PublicUrlOptions, a as hmacSigner, b as publicUrl, c as WebhookSecretStore, d as WebhookPolicyError, f as WebhookRequest, g as AllowUrl, h as fetchTransport, i as WebhookSigner, l as sqlSecretStore, m as WebhookTransport, n as StandardWebhooksOptions, o as standardWebhooks, p as WebhookResponse, r as WebhookSignInput, s as RotateSecretOptions, t as HmacSignerOptions, u as FetchTransportOptions, v as ResolveHost, y as isPublicAddress } from "../signers-Cc6r98SW.js";
|
|
10
|
-
//#region src/webhooks/verify.d.ts
|
|
11
|
-
interface VerifiedWebhook<T = unknown> {
|
|
12
|
-
readonly id: string;
|
|
13
|
-
readonly timestamp: Temporal.Instant;
|
|
14
|
-
readonly payload: T;
|
|
15
|
-
readonly body: string;
|
|
16
|
-
}
|
|
17
|
-
interface VerifyOptions {
|
|
18
|
-
/** Allowed clock skew in seconds. Defaults to 300. */
|
|
19
|
-
readonly tolerance?: number;
|
|
20
|
-
readonly now?: () => Temporal.Instant;
|
|
21
|
-
}
|
|
22
|
-
type WebhookInput = Request | {
|
|
23
|
-
readonly headers: Headers | Readonly<Record<string, string>>;
|
|
24
|
-
readonly body: string;
|
|
25
|
-
};
|
|
26
|
-
/** Constant-time string comparison. */
|
|
27
|
-
export declare function timingSafeEqual(a: string, b: string): boolean;
|
|
28
|
-
/** Headers for a signed Standard Webhooks request. */
|
|
29
|
-
export declare function signWebhook(secret: string, message: {
|
|
30
|
-
readonly id: string;
|
|
31
|
-
readonly body: string;
|
|
32
|
-
readonly timestamp?: Temporal.Instant;
|
|
33
|
-
}): Promise<Record<string, string>>;
|
|
34
|
-
/**
|
|
35
|
-
* Verifies a Standard Webhooks signature (`webhook-id`, `webhook-timestamp`,
|
|
36
|
-
* `webhook-signature`) and parses the JSON body. Pass several secrets while
|
|
37
|
-
* rotating.
|
|
38
|
-
*/
|
|
39
|
-
export declare function verifyWebhook<T = unknown>(input: WebhookInput, secrets: string | readonly string[], options?: VerifyOptions): Promise<Result<VerifiedWebhook<T>>>;
|
|
40
|
-
/** Checks a shared-secret header (database webhooks), in constant time. */
|
|
41
|
-
export declare function verifySharedSecret(request: Request, secret: string, headerName?: string): boolean;
|
|
42
|
-
interface HookUser {
|
|
43
|
-
readonly id: string;
|
|
44
|
-
readonly email?: string;
|
|
45
|
-
readonly phone?: string;
|
|
46
|
-
readonly app_metadata?: Readonly<Record<string, unknown>>;
|
|
47
|
-
readonly user_metadata?: Readonly<Record<string, unknown>>;
|
|
48
|
-
readonly [key: string]: unknown;
|
|
49
|
-
}
|
|
50
|
-
interface AuthHookError {
|
|
51
|
-
readonly error: {
|
|
52
|
-
readonly http_code: number;
|
|
53
|
-
readonly message: string;
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
interface AuthHooks {
|
|
57
|
-
custom_access_token: {
|
|
58
|
-
input: {
|
|
59
|
-
readonly user_id: string;
|
|
60
|
-
readonly claims: Readonly<Record<string, unknown>> & {
|
|
61
|
-
readonly sub: string;
|
|
62
|
-
readonly role: string;
|
|
63
|
-
};
|
|
64
|
-
readonly authentication_method: string;
|
|
65
|
-
};
|
|
66
|
-
output: {
|
|
67
|
-
readonly claims: Readonly<Record<string, unknown>>;
|
|
68
|
-
};
|
|
69
|
-
};
|
|
70
|
-
send_email: {
|
|
71
|
-
input: {
|
|
72
|
-
readonly user: HookUser;
|
|
73
|
-
readonly email_data: {
|
|
74
|
-
readonly token: string;
|
|
75
|
-
readonly token_hash: string;
|
|
76
|
-
readonly redirect_to: string;
|
|
77
|
-
readonly email_action_type: string;
|
|
78
|
-
readonly site_url: string;
|
|
79
|
-
readonly token_new: string;
|
|
80
|
-
readonly token_hash_new: string;
|
|
81
|
-
/** Auth adds fields over time (`old_email`, `factor_type`, ...). */
|
|
82
|
-
readonly [key: string]: unknown;
|
|
83
|
-
};
|
|
84
|
-
};
|
|
85
|
-
output: Record<never, never>;
|
|
86
|
-
};
|
|
87
|
-
send_sms: {
|
|
88
|
-
input: {
|
|
89
|
-
readonly user: HookUser;
|
|
90
|
-
readonly sms: {
|
|
91
|
-
readonly otp: string;
|
|
92
|
-
};
|
|
93
|
-
};
|
|
94
|
-
output: Record<never, never>;
|
|
95
|
-
};
|
|
96
|
-
mfa_verification_attempt: {
|
|
97
|
-
input: {
|
|
98
|
-
readonly factor_id: string;
|
|
99
|
-
readonly factor_type: string;
|
|
100
|
-
readonly user_id: string;
|
|
101
|
-
readonly valid: boolean;
|
|
102
|
-
};
|
|
103
|
-
output: {
|
|
104
|
-
readonly decision: "continue" | "reject";
|
|
105
|
-
readonly message?: string;
|
|
106
|
-
};
|
|
107
|
-
};
|
|
108
|
-
password_verification_attempt: {
|
|
109
|
-
input: {
|
|
110
|
-
readonly user_id: string;
|
|
111
|
-
readonly valid: boolean;
|
|
112
|
-
};
|
|
113
|
-
output: {
|
|
114
|
-
readonly decision: "continue" | "reject";
|
|
115
|
-
readonly message?: string;
|
|
116
|
-
readonly should_logout_user?: boolean;
|
|
117
|
-
};
|
|
118
|
-
};
|
|
119
|
-
before_user_created: {
|
|
120
|
-
input: {
|
|
121
|
-
readonly metadata: Readonly<Record<string, unknown>>;
|
|
122
|
-
readonly user: HookUser;
|
|
123
|
-
};
|
|
124
|
-
output: Record<never, never>;
|
|
125
|
-
};
|
|
126
|
-
}
|
|
127
|
-
type AuthHookKind = keyof AuthHooks;
|
|
128
|
-
/** Rejects a hook with a status and message Supabase Auth passes to the client. */
|
|
129
|
-
export declare function hookError(status: number, message: string): AuthHookError;
|
|
130
|
-
/**
|
|
131
|
-
* A `(request) => Response` handler for a Supabase Auth hook: verifies the
|
|
132
|
-
* Standard Webhooks signature, types the payload and serializes the answer.
|
|
133
|
-
*
|
|
134
|
-
* ```ts
|
|
135
|
-
* export const POST = authHook('custom_access_token', env.AUTH_HOOK_SECRET, async ({ claims, user_id }) => ({
|
|
136
|
-
* claims: { ...claims, tenant_id: await orgFor(user_id) },
|
|
137
|
-
* }));
|
|
138
|
-
* ```
|
|
139
|
-
*/
|
|
140
|
-
export declare function authHook<K extends AuthHookKind>(_kind: K, secret: string | readonly string[], handler: (payload: AuthHooks[K]["input"], webhook: VerifiedWebhook<AuthHooks[K]["input"]>) => AuthHooks[K]["output"] | AuthHookError | Promise<AuthHooks[K]["output"] | AuthHookError>, options?: VerifyOptions): (request: Request) => Promise<Response>;
|
|
141
|
-
interface DatabaseWebhookPayload {
|
|
142
|
-
readonly type: "INSERT" | "UPDATE" | "DELETE";
|
|
143
|
-
readonly table: string;
|
|
144
|
-
readonly schema: string;
|
|
145
|
-
readonly record: Readonly<Record<string, unknown>> | null;
|
|
146
|
-
readonly old_record: Readonly<Record<string, unknown>> | null;
|
|
147
|
-
}
|
|
148
|
-
interface DatabaseChange<R> {
|
|
149
|
-
readonly type: "INSERT" | "UPDATE" | "DELETE";
|
|
150
|
-
readonly table: string;
|
|
151
|
-
readonly record: R | null;
|
|
152
|
-
readonly oldRecord: Partial<R> | null;
|
|
153
|
-
}
|
|
154
|
-
export declare function isDatabaseWebhook(value: unknown): value is DatabaseWebhookPayload;
|
|
155
|
-
/**
|
|
156
|
-
* Reads a database webhook payload for `table` as an app-cased change.
|
|
157
|
-
* Returns `null` for other tables or payloads that aren't database webhooks.
|
|
158
|
-
*/
|
|
159
|
-
export declare function databaseChange<M extends AnyModels, D, F extends AnyFunctions, E, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, F, E>, table: T, payload: unknown): DatabaseChange<Row<M, T>> | null;
|
|
160
|
-
//#endregion
|
|
161
|
-
//#region src/webhooks/outgoing.d.ts
|
|
162
|
-
/** One claimed delivery, as `shouldDeliver`, `transform` and `headers` see it. */
|
|
163
|
-
interface WebhookDelivery {
|
|
164
|
-
readonly id: string;
|
|
165
|
-
readonly endpointId: string;
|
|
166
|
-
readonly url: string;
|
|
167
|
-
readonly type: string;
|
|
168
|
-
readonly payload: unknown;
|
|
169
|
-
/** 1 on the first try. Counted when the delivery is claimed. */
|
|
170
|
-
readonly attempt: number;
|
|
171
|
-
readonly tenant: string | null;
|
|
172
|
-
readonly eventId: string | null;
|
|
173
|
-
readonly runId: string | null;
|
|
174
|
-
readonly createdAt: Temporal.Instant;
|
|
175
|
-
}
|
|
176
|
-
interface RetryPolicy {
|
|
177
|
-
/** Attempts before a delivery is dead-lettered. Defaults to 8. */
|
|
178
|
-
readonly maxAttempts?: number;
|
|
179
|
-
/**
|
|
180
|
-
* Seconds before the next attempt. Defaults to 5 seconds, 5 minutes, 30
|
|
181
|
-
* minutes, 2 hours, 5 hours, then 10 hours, each with full jitter. A
|
|
182
|
-
* receiver's `Retry-After` wins when it asks for longer, up to a day.
|
|
183
|
-
*/
|
|
184
|
-
readonly backoff?: (attempt: number) => number;
|
|
185
|
-
/** Statuses worth retrying. Defaults to 408, 429 and 5xx; network errors always retry. */
|
|
186
|
-
readonly retryable?: (status: number) => boolean;
|
|
187
|
-
}
|
|
188
|
-
interface WebhooksOptions {
|
|
189
|
-
/** `sqlTransport(postgres.admin)` for the worker, or the user's connection to manage. */
|
|
190
|
-
readonly transport: KitTransport;
|
|
191
|
-
/** `kits.webhooks-out.schema`. Defaults to `better_supabase`. */
|
|
192
|
-
readonly schema?: string;
|
|
193
|
-
/** Defaults to `fetchTransport({ allowUrl })`. */
|
|
194
|
-
readonly http?: WebhookTransport;
|
|
195
|
-
/** Used by the default `http`. Defaults to `publicUrl()`. */
|
|
196
|
-
readonly allowUrl?: AllowUrl;
|
|
197
|
-
/** Defaults to `standardWebhooks()`. */
|
|
198
|
-
readonly signer?: WebhookSigner;
|
|
199
|
-
/** Defaults to `sqlSecretStore(transport)`. */
|
|
200
|
-
readonly secrets?: WebhookSecretStore;
|
|
201
|
-
readonly retry?: RetryPolicy;
|
|
202
|
-
/** Return `false` (or throw) to cancel a delivery instead of sending it. */
|
|
203
|
-
readonly shouldDeliver?: (delivery: WebhookDelivery) => boolean | Promise<boolean>;
|
|
204
|
-
/**
|
|
205
|
-
* The JSON body. Defaults to the Standard Webhooks envelope,
|
|
206
|
-
* `{ type, timestamp, data }`.
|
|
207
|
-
*/
|
|
208
|
-
readonly transform?: (delivery: WebhookDelivery) => unknown;
|
|
209
|
-
/** Extra headers, e.g. an `idempotency-key`. */
|
|
210
|
-
readonly headers?: (delivery: WebhookDelivery) => Readonly<Record<string, string>>;
|
|
211
|
-
/** Characters of the response body kept in the log. Defaults to 2000. */
|
|
212
|
-
readonly responseBodyLimit?: number;
|
|
213
|
-
/** `betterSupabase.events`, for `webhook.*` kit events. */
|
|
214
|
-
readonly events?: EventHub;
|
|
215
|
-
readonly context?: RequestContext;
|
|
216
|
-
readonly errorMappers?: readonly ErrorMapper[];
|
|
217
|
-
}
|
|
218
|
-
interface PublishInput {
|
|
219
|
-
readonly type: string;
|
|
220
|
-
readonly data: unknown;
|
|
221
|
-
readonly tenant?: string;
|
|
222
|
-
/** With an id, publishing it again never queues a second delivery. */
|
|
223
|
-
readonly id?: string;
|
|
224
|
-
}
|
|
225
|
-
interface DispatchInput {
|
|
226
|
-
readonly endpointId: string;
|
|
227
|
-
readonly type: string;
|
|
228
|
-
readonly data: unknown;
|
|
229
|
-
/** An external run id stored with the delivery, e.g. a workflow run. */
|
|
230
|
-
readonly runId?: string;
|
|
231
|
-
readonly eventId?: string;
|
|
232
|
-
}
|
|
233
|
-
interface DeliverWebhooksOptions {
|
|
234
|
-
/** Deliveries per claim. Defaults to 25. */
|
|
235
|
-
readonly batch?: number;
|
|
236
|
-
/**
|
|
237
|
-
* Requests in flight at once. Defaults to 10, so a batch of 25 at the
|
|
238
|
-
* 10-second timeout finishes well inside the lease.
|
|
239
|
-
*/
|
|
240
|
-
readonly concurrency?: number;
|
|
241
|
-
/** How long a claim holds a delivery. Defaults to `'2 minutes'`. */
|
|
242
|
-
readonly lease?: string;
|
|
243
|
-
readonly budgetMs?: number;
|
|
244
|
-
}
|
|
245
|
-
interface DeliverWebhooksResult {
|
|
246
|
-
readonly succeeded: number;
|
|
247
|
-
/** Failed attempts that will retry. */
|
|
248
|
-
readonly retrying: number;
|
|
249
|
-
/** Deliveries that ran out of attempts or can't succeed. */
|
|
250
|
-
readonly dead: number;
|
|
251
|
-
readonly canceled: number;
|
|
252
|
-
/** Endpoints disabled after failing for `disableAfter`. */
|
|
253
|
-
readonly disabled: number;
|
|
254
|
-
}
|
|
255
|
-
interface WebhooksRouteOptions extends DeliverWebhooksOptions {
|
|
256
|
-
readonly secret: string | undefined;
|
|
257
|
-
readonly onError?: (error: unknown) => void;
|
|
258
|
-
}
|
|
259
|
-
interface Webhooks {
|
|
260
|
-
/** Queues the event for each subscribed endpoint; returns how many. */
|
|
261
|
-
publish(event: PublishInput): AsyncResult<number>;
|
|
262
|
-
/** Sends to one endpoint outside its subscriptions; returns the delivery id. */
|
|
263
|
-
dispatch(input: DispatchInput): AsyncResult<string>;
|
|
264
|
-
/** Queues a finished delivery again. */
|
|
265
|
-
redeliver(deliveryId: string): AsyncResult<string>;
|
|
266
|
-
/** A new signing secret, returned once. */
|
|
267
|
-
rotateSecret(endpointId: string, options?: RotateSecretOptions): AsyncResult<string>;
|
|
268
|
-
/** Sends due deliveries. Run it from a cron route or a job. */
|
|
269
|
-
deliver(options?: DeliverWebhooksOptions): Promise<DeliverWebhooksResult>;
|
|
270
|
-
/** A `GET`/`POST` handler for Vercel Cron that runs `deliver` behind a bearer secret. */
|
|
271
|
-
deliverRoute(options: WebhooksRouteOptions): (request: Request) => Promise<Response>;
|
|
272
|
-
/**
|
|
273
|
-
* An `EventSink` that publishes CloudEvents, e.g. from the outbox relay.
|
|
274
|
-
* Endpoints subscribe to unprefixed types, so it removes `typePrefix`
|
|
275
|
-
* (`dev.better-supabase` by default, the relay's default) and the dot.
|
|
276
|
-
*/
|
|
277
|
-
sink(options?: WebhookSinkOptions): EventSink;
|
|
278
|
-
}
|
|
279
|
-
interface WebhookSinkOptions {
|
|
280
|
-
/** The relay's `typePrefix`. */
|
|
281
|
-
readonly typePrefix?: string;
|
|
282
|
-
}
|
|
283
|
-
export declare function createWebhooks(options: WebhooksOptions): Webhooks;
|
|
284
|
-
//#endregion
|
|
285
|
-
export { type AllowUrl, type AuthHookError, type AuthHookKind, type AuthHooks, type DatabaseChange, type DatabaseWebhookPayload, type DeliverWebhooksOptions, type DeliverWebhooksResult, type DispatchInput, type FetchTransportOptions, type HmacSignerOptions, type KitTransport, type PublicUrlOptions, type PublishInput, type ResolveHost, type RetryPolicy, type RotateSecretOptions, type RpcClient, type StandardWebhooksOptions, type VerifiedWebhook, type VerifyOptions, type WebhookDelivery, type WebhookInput, WebhookPolicyError, type WebhookRequest, type WebhookResponse, type WebhookSecretStore, type WebhookSignInput, type WebhookSigner, type WebhookSinkOptions, type WebhookTransport, type Webhooks, type WebhooksOptions, type WebhooksRouteOptions, fetchTransport, hmacSigner, isPublicAddress, publicUrl, rpcTransport, sqlSecretStore, sqlTransport, standardWebhooks };
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
# better-supabase next to PermDock
|
|
2
|
-
|
|
3
|
-
PermDock handles authorization and better-supabase handles tokens and data.
|
|
4
|
-
They share one access token hook and one claim contract, and neither imports
|
|
5
|
-
the other.
|
|
6
|
-
|
|
7
|
-
## Who owns what
|
|
8
|
-
|
|
9
|
-
| Area | better-supabase | PermDock |
|
|
10
|
-
| -------------------- | ----------------------------------------------------------- | -------------------------------------------------------------------------------------- |
|
|
11
|
-
| Access token hook | none | `permdock supabase hook generate`, the only hook |
|
|
12
|
-
| Claims | `features`, through `supabase.hook.claims` | `user_role`, `roles`, `memberships`, the tenant claim, `attrs`, `authz_ver` |
|
|
13
|
-
| SQL helpers | the SQL kit (`better_supabase.*`) | `permdock rls generate`: `permdock_has`, `permitted_<scope>_ids`, `member_<scope>_ids` |
|
|
14
|
-
| Storage and Realtime | `defineBucket`, `defineTopic` with a `permdock` policy mode | the helpers those policies call |
|
|
15
|
-
| MCP | `createMcp` with `authorize` and `visible` | the permissions in each tool's `meta` |
|
|
16
|
-
|
|
17
|
-
## Rules
|
|
18
|
-
|
|
19
|
-
- Don't run `better-supabase sql add tenant` (it stops without `--force`),
|
|
20
|
-
don't call `membership_claims()` from a hook, and don't write `roles`,
|
|
21
|
-
`user_role`, `memberships` or the tenant claim yourself. Doctor reports
|
|
22
|
-
BS407 when a hook does.
|
|
23
|
-
- `sql add entitlements` is fine: `features` is not a PermDock claim. Add
|
|
24
|
-
`claims: { features: 'better_supabase.feature_claims' }` to `supabase.hook`
|
|
25
|
-
in `permdock.config.ts`, run `permdock supabase hook generate`, and
|
|
26
|
-
`hasEntitlement(session, ...)` works.
|
|
27
|
-
- Run `permdock supabase inspect --out` before `sql add entitlements`. With
|
|
28
|
-
`permdock.manifest.json` present, the module reads PermDock's
|
|
29
|
-
`member_<scope>_ids` helpers and doesn't add `tenant`. The scope is the
|
|
30
|
-
manifest's root scope (the `rls.scopes` entry without `within`); set
|
|
31
|
-
`entitlements.permdock: { scope }` in `better-supabase.config.ts` for
|
|
32
|
-
another one.
|
|
33
|
-
- Name the same tenant claim on both sides. A non-default `claims.tenant` in
|
|
34
|
-
`better-supabase.config.ts` must also be PermDock's `rls.tenantClaim` and
|
|
35
|
-
go to `subjectFromSupabase` or `subjectFromSupabaseSession` as `{ tenant }`.
|
|
36
|
-
- Validate claims with PermDock's schema: `betterSupabase.claims(supabaseClaims().extend(appClaims))`.
|
|
37
|
-
- The helpers live in PermDock's `rls.schema` (`permdock` by default). Buckets
|
|
38
|
-
and topics in `permdock` mode call them in `permdock` unless their `schema`
|
|
39
|
-
option names another schema; it must equal `rls.schema`.
|
|
40
|
-
- Use the scope names the manifest declares (`organization`, not PermDock's
|
|
41
|
-
`tenant` alias): the helpers are named after them, and doctor reports a
|
|
42
|
-
key checked at another scope than its catalog entry.
|
|
43
|
-
- The entitlements module needs PermDock's hook to fill `claims.features`
|
|
44
|
-
from `better_supabase.feature_claims`
|
|
45
|
-
(`supabase.hook.claims: { features: 'better_supabase.feature_claims' }`).
|
|
46
|
-
- The `permdock` policy mode checks role and scope only. Use it only for
|
|
47
|
-
permissions whose `rowConditions` is `false` in `permissions.catalog.json`.
|
|
48
|
-
A missing flag or a key the catalog doesn't list is unknown and refused;
|
|
49
|
-
regenerate the catalog with a current `permdock catalog`.
|
|
50
|
-
Leave permissions with row conditions to the policies
|
|
51
|
-
`permdock rls generate` writes; doctor reports BS214 and `permdock doctor`
|
|
52
|
-
PD037 otherwise.
|
|
53
|
-
- `permdock` mode compares ids as text, so a path or topic segment must be
|
|
54
|
-
the id's lowercase form.
|
|
55
|
-
- In MCP servers, narrow `tool.meta` with PermDock's `isPermission`, answer
|
|
56
|
-
`visible` with `mayUse` and `authorize` with `can`. A tool without a
|
|
57
|
-
PermDock permission in `meta` is denied: `visible` returns `false` and
|
|
58
|
-
`authorize` returns `{ allowed: false }`. Use `decide` instead of `can` to
|
|
59
|
-
put the denial reason in the refusal. `can` decides without a row, so check
|
|
60
|
-
row-conditioned permissions inside `run` or rely on RLS.
|
|
61
|
-
- In oRPC and Hono, pass the adapter's auth state to PermDock:
|
|
62
|
-
`createPermDock(policy, { subject: ({ context }) => subjectFromSupabaseSession(context.auth) })`
|
|
63
|
-
from `permdock/orpc`, or `(c) => subjectFromSupabaseSession(c.get("auth"))`
|
|
64
|
-
from `permdock/hono`. Fail closed: export one builder that takes a
|
|
65
|
-
permission (`(permission) => authed.use(pd.protect(permission))`, or the
|
|
66
|
-
route helper `[bs.middleware(), pd.protect(permission)]` in Hono), and don't
|
|
67
|
-
install `bs.middleware()` app-wide, so a route without a permission has no
|
|
68
|
-
`db`.
|
|
69
|
-
- In Next.js, cache the permission snapshot in a `'use cache: private'`
|
|
70
|
-
loader. The user id and the snapshot only exist after `bs.cached()`
|
|
71
|
-
returns, so pass it the static tags only, then tag and time the entry from
|
|
72
|
-
inside the loader with Next.js's `cacheTag` and `cacheLife`:
|
|
73
|
-
|
|
74
|
-
```ts
|
|
75
|
-
import { cacheLife, cacheTag } from "next/cache";
|
|
76
|
-
import { snapshotFor } from "permdock";
|
|
77
|
-
import { cacheLifeFor, snapshotTag } from "permdock/next";
|
|
78
|
-
import { subjectFromSupabaseSession } from "permdock/supabase";
|
|
79
|
-
|
|
80
|
-
export async function loadSnapshot(orgId: string) {
|
|
81
|
-
"use cache: private";
|
|
82
|
-
const { session } = await bs.cached({ tags: [`org:${orgId}`] });
|
|
83
|
-
const snapshot = snapshotFor(policy, subjectFromSupabaseSession(session), {
|
|
84
|
-
tenant: orgId,
|
|
85
|
-
});
|
|
86
|
-
if (session.kind === "user") cacheTag(snapshotTag(session.user.id));
|
|
87
|
-
cacheLife(cacheLifeFor(snapshot));
|
|
88
|
-
return snapshot;
|
|
89
|
-
}
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
`bs.cached()` already caps the stale time at the token's expiry, and Next.js
|
|
93
|
-
keeps the smaller `stale` of the two `cacheLife` calls. When a role or plan
|
|
94
|
-
changes, drop the user's entries and the snapshot with
|
|
95
|
-
`bs.invalidateSession(userId, { tags: [snapshotTag(userId)] })`.
|
|
96
|
-
|
|
97
|
-
- Doctor BS405 measures `memberships` plus `attrs` against PermDock's 1 KB
|
|
98
|
-
budget and the whole token against 2 KB; run `doctor --as <user id>`.
|
|
99
|
-
- For the SQL kit, set `kits.access.model: 'permdock'` and
|
|
100
|
-
`kits.access.functions.canAssign: 'permdock.permdock_can_assign({role}, {tenant}::text)'`
|
|
101
|
-
(use the manifest's `rls.schema`), then run `permdock supabase inspect --out`
|
|
102
|
-
before `sql add`. The kit reads the schema, the root scope and its id type
|
|
103
|
-
from `permdock.manifest.json`, and `sql add` stops instead of guessing when
|
|
104
|
-
the manifest can't give them. Every permission key the kit modules check
|
|
105
|
-
(`kitPermissionKeys` from `better-supabase/sql`) must be
|
|
106
|
-
`rowConditions: false` in `permissions.catalog.json`; map others with
|
|
107
|
-
`kits.<module>.permissions`. Doctor reports BS411.
|
|
108
|
-
- Under that model `can_user()` and `member_can()` answer for the caller only
|
|
109
|
-
and raise SQLSTATE `0A000` for another user. Invitations skip the inviter
|
|
110
|
-
re-check at accept time and notifications don't filter recipients by read
|
|
111
|
-
permission; check both in the app when they matter.
|
|
112
|
-
- The `act` claim says who acts: `kind: "support"` (support sessions,
|
|
113
|
-
`session.actor.kind === 'support'` with `sessionId` and `readOnly`),
|
|
114
|
-
`kind: "impersonation"` (`actingAs`), or no `kind` for an OAuth client or
|
|
115
|
-
agent chain (`oauth-client`, limited by `scopes`). Another `kind` makes the
|
|
116
|
-
session invalid. `session.impersonator` is set for the first two only.
|
|
117
|
-
`supabaseClaimFixtures` in `better-supabase/testing` has one token of each.
|
|
118
|
-
- Only `allow: ['anonymous']` admits `signInAnonymously()` users; `'anon'`
|
|
119
|
-
means no session. Pair the default `allow` with PermDock's
|
|
120
|
-
`rls: { anonymousSignIns: 'deny' }` in `permdock.config.ts`.
|
|
121
|
-
|
|
122
|
-
Docs: https://bettersupabase.com/docs/auth/permdock.md
|