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
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { r as defineCliCommand } from "./command-CK14fP91.js";
|
|
2
|
-
import { t as display } from "./io-
|
|
2
|
+
import { t as display } from "./io-DI1mTdSA.js";
|
|
3
|
+
import { f as supabaseDir } from "./supabase-toml-B-bIukQF.js";
|
|
3
4
|
import { dirname, resolve } from "node:path";
|
|
4
5
|
import { existsSync } from "node:fs";
|
|
5
6
|
import { chmod, mkdir, readFile, writeFile } from "node:fs/promises";
|
|
@@ -39,7 +40,8 @@ async function createSigningKey() {
|
|
|
39
40
|
};
|
|
40
41
|
}
|
|
41
42
|
async function runKeys(config, args) {
|
|
42
|
-
const
|
|
43
|
+
const dir = supabaseDir(config.root);
|
|
44
|
+
const out = args.out ?? `${dir}/signing_keys.json`;
|
|
43
45
|
const path = resolve(config.root, out);
|
|
44
46
|
const rotate = args.rotate === true;
|
|
45
47
|
const exists = existsSync(path);
|
|
@@ -57,12 +59,12 @@ async function runKeys(config, args) {
|
|
|
57
59
|
await writeFile(path, `${JSON.stringify([key, ...previous], null, 2)}\n`, { mode: 384 });
|
|
58
60
|
await chmod(path, 384);
|
|
59
61
|
const lines = [`Wrote ${display(config.root, out)} with key ${key.kid}${previous.length > 0 ? ` (${previous.length} older key${previous.length === 1 ? "" : "s"} kept for verification)` : ""}.`];
|
|
60
|
-
const toml = resolve(config.root, "
|
|
62
|
+
const toml = resolve(config.root, dir, "config.toml");
|
|
61
63
|
if (!(existsSync(toml) && /^\s*signing_keys_path\s*=/m.test(await readFile(toml, "utf8")))) {
|
|
62
|
-
const relativeToSupabase = out.startsWith(
|
|
63
|
-
lines.push("",
|
|
64
|
+
const relativeToSupabase = out.startsWith(`${dir}/`) ? `./${out.slice(dir.length + 1)}` : out;
|
|
65
|
+
lines.push("", `Add it to ${dir}/config.toml and restart the stack:`, " [auth]", ` signing_keys_path = "${relativeToSupabase}"`);
|
|
64
66
|
}
|
|
65
|
-
const gitignored = [resolve(config.root, ".gitignore"), resolve(config.root, "
|
|
67
|
+
const gitignored = [resolve(config.root, ".gitignore"), resolve(config.root, dir, ".gitignore")];
|
|
66
68
|
let ignored = false;
|
|
67
69
|
for (const file of gitignored) if (existsSync(file) && (await readFile(file, "utf8")).includes("signing_keys")) ignored = true;
|
|
68
70
|
if (!ignored) lines.push("", `Warning: add ${out} to .gitignore; it holds a private key.`);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from "node:crypto";
|
|
2
|
-
//#region ../../node_modules/.pnpm/c12@4.0.0-rc.2_dotenv@17.4.
|
|
2
|
+
//#region ../../node_modules/.pnpm/c12@4.0.0-rc.2_dotenv@17.4.2_giget@3.3.1_jiti@2.7.0_magicast@0.5.5/node_modules/c12/dist/_chunks/libs/ohash.mjs
|
|
3
3
|
var __defProp = Object.defineProperty;
|
|
4
4
|
var __exportAll = (all, no_symbols) => {
|
|
5
5
|
let target = {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { r as defineCliCommand } from "./command-CK14fP91.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { i as writeIfChanged, t as display } from "./io-DI1mTdSA.js";
|
|
3
|
+
import { i as importExport } from "./config-NiPxAmUF.js";
|
|
4
4
|
import { resolve } from "node:path";
|
|
5
5
|
import { existsSync } from "node:fs";
|
|
6
6
|
import { readFile } from "node:fs/promises";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { a as findSupabaseRoot } from "./supabase-toml-B-bIukQF.js";
|
|
1
2
|
import { join } from "node:path";
|
|
2
3
|
import { existsSync } from "node:fs";
|
|
3
4
|
import { readFile } from "node:fs/promises";
|
|
@@ -46,16 +47,20 @@ async function detectProject(root) {
|
|
|
46
47
|
dependencies,
|
|
47
48
|
srcDir: existsSync(join(root, "src")) ? "src" : ".",
|
|
48
49
|
tsExtensions: options["allowImportingTsExtensions"] === true || options["rewriteRelativeImportExtensions"] === true,
|
|
49
|
-
hasSupabase:
|
|
50
|
+
hasSupabase: findSupabaseRoot(root) !== void 0
|
|
50
51
|
};
|
|
51
52
|
}
|
|
52
|
-
function installCommand(manager, packages, dev = false) {
|
|
53
|
+
function installCommand(manager, packages, dev = false, target) {
|
|
53
54
|
const list = packages.join(" ");
|
|
54
55
|
switch (manager) {
|
|
55
|
-
case "pnpm": return `pnpm add ${dev ? "-D " : ""}${list}`;
|
|
56
|
-
case "bun": return `bun add ${dev ? "-d " : ""}${list}`;
|
|
57
|
-
case "yarn":
|
|
58
|
-
|
|
56
|
+
case "pnpm": return `pnpm ${target ? `--filter ${target.name ?? `./${target.dir}`} ` : ""}add ${dev ? "-D " : ""}${list}`;
|
|
57
|
+
case "bun": return `bun add ${dev ? "-d " : ""}${list}${target ? ` --cwd ${target.dir}` : ""}`;
|
|
58
|
+
case "yarn": {
|
|
59
|
+
const command = `add ${dev ? "-D " : ""}${list}`;
|
|
60
|
+
if (!target) return `yarn ${command}`;
|
|
61
|
+
return target.name ? `yarn workspace ${target.name} ${command}` : `cd ${target.dir} && yarn ${command}`;
|
|
62
|
+
}
|
|
63
|
+
case "npm": return `npm install ${dev ? "-D " : ""}${list}${target ? ` -w ${target.dir}` : ""}`;
|
|
59
64
|
default: return manager;
|
|
60
65
|
}
|
|
61
66
|
}
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
import { t as importFresh } from "./fresh-import-BeYf9I3x.js";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { MODULE_ID_TYPES, compileReadSets, moduleIdType, scopeProblems, templateFunctions } from "better-supabase/sql";
|
|
4
|
+
import { isReadSet } from "better-supabase";
|
|
5
|
+
//#region src/cli/authorization.ts
|
|
6
|
+
/** How findings name the provider. */
|
|
7
|
+
const providerLabel = (provider) => `the authorization provider (${provider.name})`;
|
|
8
|
+
/**
|
|
9
|
+
* The provider's tenant scope and its id type. A scope missing from
|
|
10
|
+
* `scopes`, or without an id type this release renders, is invalid rather
|
|
11
|
+
* than a guess.
|
|
12
|
+
*/
|
|
13
|
+
function tenantScope(provider, subject) {
|
|
14
|
+
const scope = provider.tenantScope;
|
|
15
|
+
const entry = provider.scopes.find((candidate) => candidate.name === scope);
|
|
16
|
+
const label = providerLabel(provider);
|
|
17
|
+
const problems = scopeProblems(provider);
|
|
18
|
+
if (problems.length > 0) return {
|
|
19
|
+
kind: "invalid",
|
|
20
|
+
problem: `The scopes of ${label} are inconsistent: ${problems.join("; ")}.`
|
|
21
|
+
};
|
|
22
|
+
if (!entry) return {
|
|
23
|
+
kind: "invalid",
|
|
24
|
+
problem: `authorization.tenantScope is "${scope}", but ${label} has the scopes ${provider.scopes.map((candidate) => candidate.name).join(", ") || "none"}.`
|
|
25
|
+
};
|
|
26
|
+
if (entry.idType === void 0) return {
|
|
27
|
+
kind: "invalid",
|
|
28
|
+
problem: `${label} gives scope "${scope}" no idType, so ${subject} can't tell its id type.`
|
|
29
|
+
};
|
|
30
|
+
const idType = moduleIdType(entry.idType);
|
|
31
|
+
if (idType === void 0) return {
|
|
32
|
+
kind: "invalid",
|
|
33
|
+
problem: `${label} gives scope "${scope}" the type ${entry.idType}, but ${subject} renders only ${MODULE_ID_TYPES.join(", ").replace(/, (?=[^,]*$)/, " or ")} ids.`
|
|
34
|
+
};
|
|
35
|
+
return {
|
|
36
|
+
kind: "ok",
|
|
37
|
+
scope,
|
|
38
|
+
idType
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** The provider's membership tables that can hold rows of `scope`. */
|
|
42
|
+
const scopeMemberships = (provider, scope) => (provider.memberships ?? []).filter((source) => !("value" in source.scope) || source.scope.value === scope);
|
|
43
|
+
/**
|
|
44
|
+
* Provider mode when `entitlements.memberships` resolves to `"provider"`
|
|
45
|
+
* (the default with `authorization`). The provider needs `memberIds` and
|
|
46
|
+
* `memberIdsFor`, so the module never falls back to `tenant` on its own.
|
|
47
|
+
*/
|
|
48
|
+
function entitlementsMode(config) {
|
|
49
|
+
if (config.entitlements.memberships === "tenant") return { kind: "tenant" };
|
|
50
|
+
const provider = config.authorization;
|
|
51
|
+
if (!provider) return {
|
|
52
|
+
kind: "invalid",
|
|
53
|
+
problem: "entitlements.memberships is \"provider\", but the config has no authorization. Set authorization, or set entitlements.memberships to \"tenant\"."
|
|
54
|
+
};
|
|
55
|
+
const chosen = tenantScope(provider, "the entitlements module");
|
|
56
|
+
if (chosen.kind === "invalid") return chosen;
|
|
57
|
+
const { memberIds, memberIdsFor } = provider.functions;
|
|
58
|
+
if (memberIds === void 0 || memberIdsFor === void 0) return {
|
|
59
|
+
kind: "invalid",
|
|
60
|
+
problem: `${providerLabel(provider)} has no authorization.functions.${memberIds === void 0 ? "memberIds" : "memberIdsFor"}, which the entitlements module calls. Use a provider that sets both, or set entitlements.memberships to "tenant" to keep the tenant module's memberships.`
|
|
61
|
+
};
|
|
62
|
+
return {
|
|
63
|
+
kind: "provider",
|
|
64
|
+
provider: {
|
|
65
|
+
name: provider.name,
|
|
66
|
+
scope: chosen.scope,
|
|
67
|
+
idType: chosen.idType,
|
|
68
|
+
memberIds,
|
|
69
|
+
memberIdsFor,
|
|
70
|
+
memberships: scopeMemberships(provider, chosen.scope)
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The `provider` access model's functions, from `authorization`. `off` when
|
|
76
|
+
* another model is chosen; without a provider the model is invalid, never a
|
|
77
|
+
* default.
|
|
78
|
+
*/
|
|
79
|
+
function accessProviderMode(config) {
|
|
80
|
+
const access = config.sql.modules.access;
|
|
81
|
+
if (access?.model !== "provider") return { kind: "off" };
|
|
82
|
+
const provider = config.authorization;
|
|
83
|
+
if (!provider) return {
|
|
84
|
+
kind: "invalid",
|
|
85
|
+
problem: "sql.modules.access.model is \"provider\", but the config has no authorization. Set authorization, or choose another sql.modules.access.model."
|
|
86
|
+
};
|
|
87
|
+
const chosen = tenantScope(provider, "the provider access model");
|
|
88
|
+
if (chosen.kind === "invalid") return chosen;
|
|
89
|
+
const idType = access.idType === void 0 ? void 0 : moduleIdType(access.idType);
|
|
90
|
+
if (idType !== void 0 && idType !== chosen.idType) return {
|
|
91
|
+
kind: "invalid",
|
|
92
|
+
problem: `sql.modules.access.idType is "${access.idType}", but ${providerLabel(provider)} gives scope "${chosen.scope}" the type ${chosen.idType}. Set sql.modules.access.idType to "${chosen.idType}", or remove it.`
|
|
93
|
+
};
|
|
94
|
+
const { user, tenant } = provider.suspension ?? {};
|
|
95
|
+
return {
|
|
96
|
+
kind: "provider",
|
|
97
|
+
access: {
|
|
98
|
+
name: provider.name,
|
|
99
|
+
scope: chosen.scope,
|
|
100
|
+
idType: chosen.idType,
|
|
101
|
+
functions: provider.functions,
|
|
102
|
+
...user || tenant ? { suspension: {
|
|
103
|
+
...user ? { user } : {},
|
|
104
|
+
...tenant ? { tenant } : {}
|
|
105
|
+
} } : {},
|
|
106
|
+
...provider.roleSources && provider.roleSources.length > 0 ? { roleSources: provider.roleSources } : {},
|
|
107
|
+
...provider.approvals?.distinctApprover === true ? { approvals: { distinctApprover: true } } : {}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* `complete` when the provider marks the key `sqlComplete: true`. A key
|
|
113
|
+
* without the flag is unknown, and so is every key when the provider lists
|
|
114
|
+
* no permissions.
|
|
115
|
+
*/
|
|
116
|
+
function keyStatus(provider, key) {
|
|
117
|
+
if (!provider.permissions) return "unknown";
|
|
118
|
+
const entry = provider.permissions.find((permission) => permission.key === key);
|
|
119
|
+
if (!entry) return "missing";
|
|
120
|
+
if (entry.sqlComplete === void 0) return "unknown";
|
|
121
|
+
return entry.sqlComplete ? "complete" : "incomplete";
|
|
122
|
+
}
|
|
123
|
+
const INCOMPLETE_FIX = "Use the provider's own policies for it, or a permission its SQL functions answer for completely.";
|
|
124
|
+
const UNKNOWN_FIX = "Have the provider set sqlComplete on every entry of authorization.permissions.";
|
|
125
|
+
/**
|
|
126
|
+
* Why the provider's SQL functions can't be trusted with `key`, or
|
|
127
|
+
* `undefined` when it is marked `sqlComplete: true`. Unknown and missing
|
|
128
|
+
* keys count as unsafe.
|
|
129
|
+
*/
|
|
130
|
+
function unsafeKey(provider, key) {
|
|
131
|
+
const status = keyStatus(provider, key);
|
|
132
|
+
switch (status) {
|
|
133
|
+
case "complete": return;
|
|
134
|
+
case "incomplete": return {
|
|
135
|
+
status,
|
|
136
|
+
reason: `has conditions ${providerLabel(provider)}'s SQL functions don't check (sqlComplete: false)`,
|
|
137
|
+
fix: INCOMPLETE_FIX
|
|
138
|
+
};
|
|
139
|
+
case "unknown": return {
|
|
140
|
+
status,
|
|
141
|
+
reason: provider.permissions ? "has no sqlComplete flag in authorization.permissions, so whether the SQL functions answer for it completely is unknown" : "can't be checked: authorization.permissions is not set, so whether the SQL functions answer for it completely is unknown",
|
|
142
|
+
fix: UNKNOWN_FIX
|
|
143
|
+
};
|
|
144
|
+
case "missing": return {
|
|
145
|
+
status,
|
|
146
|
+
reason: "is not in authorization.permissions",
|
|
147
|
+
fix: UNKNOWN_FIX
|
|
148
|
+
};
|
|
149
|
+
default: return status;
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Checks the keys the SQL modules pass to the provider's functions against
|
|
154
|
+
* `authorization.permissions`, with the statuses bucket policies use: only
|
|
155
|
+
* `sqlComplete: true` passes.
|
|
156
|
+
*/
|
|
157
|
+
function moduleKeyProblems(provider, keys) {
|
|
158
|
+
if (keys.length === 0) return [];
|
|
159
|
+
if (!provider.permissions) return [{
|
|
160
|
+
target: "authorization.permissions",
|
|
161
|
+
message: `The provider access model passes ${keys.length} module permission keys to ${providerLabel(provider)}'s SQL functions, but authorization.permissions is not set, so whether they answer for them completely is unknown. Use a provider that lists its permissions.`
|
|
162
|
+
}];
|
|
163
|
+
return keys.flatMap((entry) => {
|
|
164
|
+
const problem = unsafeKey(provider, entry.key);
|
|
165
|
+
if (!problem) return [];
|
|
166
|
+
const fn = entry.scope === "platform" ? "authorization.functions.isPlatform" : "authorization.functions.idsWith";
|
|
167
|
+
const setting = `sql.modules.${entry.module}.permissions.${entry.action}`;
|
|
168
|
+
const fix = problem.status === "incomplete" ? `The provider's SQL functions check role and scope, not the key's other conditions, so the module would grant it everywhere in the scope. Set ${setting} to a permission marked sqlComplete: true.` : `${problem.fix} If the provider doesn't define it, set ${setting} to a key it lists.`;
|
|
169
|
+
return [{
|
|
170
|
+
target: setting,
|
|
171
|
+
message: `The ${entry.module} module checks "${entry.key}" (${entry.action}) with ${fn}, but it ${problem.reason}. ${fix}`
|
|
172
|
+
}];
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
const requirementsOf = (functions, scope, templates) => templates.flatMap(([template, role]) => {
|
|
176
|
+
const sql = functions[template];
|
|
177
|
+
return sql === void 0 ? [] : templateFunctions(sql, scope).map((fn) => ({
|
|
178
|
+
function: fn,
|
|
179
|
+
template,
|
|
180
|
+
role
|
|
181
|
+
}));
|
|
182
|
+
});
|
|
183
|
+
/** The functions the `provider` access model calls, as `authenticated`. */
|
|
184
|
+
const accessRequirements = (access) => requirementsOf(access.functions, access.scope, [["idsWith", "authenticated"], ["isPlatform", "authenticated"]]);
|
|
185
|
+
/**
|
|
186
|
+
* The functions the `entitlements` module calls for the tenant scope:
|
|
187
|
+
* `memberIds` from `has_entitlement` as `authenticated`, and `memberIdsFor`
|
|
188
|
+
* from `feature_claims`, which the access token hook runs as
|
|
189
|
+
* `supabase_auth_admin`.
|
|
190
|
+
*/
|
|
191
|
+
const entitlementRequirements = (provider) => [...templateFunctions(provider.memberIds, provider.scope).map((fn) => ({
|
|
192
|
+
kind: "member",
|
|
193
|
+
function: fn,
|
|
194
|
+
template: "memberIds",
|
|
195
|
+
caller: "has_entitlement",
|
|
196
|
+
role: "authenticated"
|
|
197
|
+
})), ...templateFunctions(provider.memberIdsFor, provider.scope).map((fn) => ({
|
|
198
|
+
kind: "member-for",
|
|
199
|
+
function: fn,
|
|
200
|
+
template: "memberIdsFor",
|
|
201
|
+
caller: "feature_claims",
|
|
202
|
+
role: "supabase_auth_admin"
|
|
203
|
+
}))];
|
|
204
|
+
//#endregion
|
|
205
|
+
//#region src/cli/read-sets.ts
|
|
206
|
+
/** Every read set exported by the modules in `config.readSets`. */
|
|
207
|
+
async function loadReadSets(config) {
|
|
208
|
+
const sets = [];
|
|
209
|
+
for (const entry of config.readSets) {
|
|
210
|
+
const loaded = await importFresh(resolve(config.root, entry));
|
|
211
|
+
const found = Object.values(loaded).filter(isReadSet);
|
|
212
|
+
if (found.length === 0) throw new Error(`${entry} exports no read set (defineReadSet)`);
|
|
213
|
+
for (const set of found) if (!sets.includes(set)) sets.push(set);
|
|
214
|
+
}
|
|
215
|
+
return sets;
|
|
216
|
+
}
|
|
217
|
+
/** The compiled functions for `config.readSets`; empty when none are configured. */
|
|
218
|
+
async function compiledReadSets(config) {
|
|
219
|
+
if (config.readSets.length === 0) return [];
|
|
220
|
+
return compileReadSets(await loadReadSets(config));
|
|
221
|
+
}
|
|
222
|
+
//#endregion
|
|
223
|
+
export { entitlementsMode as a, unsafeKey as c, entitlementRequirements as i, accessProviderMode as n, moduleKeyProblems as o, accessRequirements as r, providerLabel as s, compiledReadSets as t };
|
|
@@ -2,7 +2,7 @@ import { n as __toESM } from "./rolldown-runtime-BPOCksWG.js";
|
|
|
2
2
|
import { c as parseArgs$2, i as joinRepeated, l as renderUsage, n as cliContext, o as listArgs, s as defineCommand, t as GLOBAL_ARGS, u as runCommand } from "./command-CK14fP91.js";
|
|
3
3
|
import { n as CliError, r as toCliError } from "./errors-4v4DTtda.js";
|
|
4
4
|
import { n as highlight, r as painter } from "./style-C0NFdJRL.js";
|
|
5
|
-
import { t as VERSION } from "./version-
|
|
5
|
+
import { t as VERSION } from "./version-hr88OZG0.js";
|
|
6
6
|
import { stripVTControlCharacters } from "node:util";
|
|
7
7
|
import { resolve } from "node:path";
|
|
8
8
|
//#region src/cli/legacy.ts
|
|
@@ -11,7 +11,7 @@ const ARRAY_FLAGS = /* @__PURE__ */ new Set([
|
|
|
11
11
|
"only",
|
|
12
12
|
"ignore",
|
|
13
13
|
"agent",
|
|
14
|
-
"
|
|
14
|
+
"block",
|
|
15
15
|
"with",
|
|
16
16
|
"explain"
|
|
17
17
|
]);
|
|
@@ -134,51 +134,55 @@ function renderError(error, options) {
|
|
|
134
134
|
//#region src/cli/run.ts
|
|
135
135
|
const COMMANDS = /* @__PURE__ */ new Map([
|
|
136
136
|
["init", {
|
|
137
|
-
load: () => import("./init-
|
|
137
|
+
load: () => import("./init-BIIwclPg.js").then((m) => m.initCommand),
|
|
138
138
|
description: "Writes better-supabase.config.ts, src/lib/supabase/index.ts and glue for the frameworks in package.json"
|
|
139
139
|
}],
|
|
140
140
|
["add", {
|
|
141
|
-
load: () => import("./init-
|
|
141
|
+
load: () => import("./init-BIIwclPg.js").then((m) => m.addCommand),
|
|
142
142
|
description: "Adds glue for an integration to an existing project"
|
|
143
143
|
}],
|
|
144
144
|
["env", {
|
|
145
|
-
load: () => import("./env-
|
|
145
|
+
load: () => import("./env-qXgyMV6r.js").then((m) => m.envCommand),
|
|
146
146
|
description: "Writes the local stack's URL and keys from `supabase status` to an env file, keeping its other lines"
|
|
147
147
|
}],
|
|
148
148
|
["keys", {
|
|
149
|
-
load: () => import("./keys-
|
|
149
|
+
load: () => import("./keys-BGCnnb-s.js").then((m) => m.keysCommand),
|
|
150
150
|
description: "Creates an ES256 signing key for the local stack, so local tokens verify through JWKS like hosted ones"
|
|
151
151
|
}],
|
|
152
152
|
["skills", {
|
|
153
|
-
load: () => import("./skills-
|
|
153
|
+
load: () => import("./skills-QQs4q68J.js").then((m) => m.skillsCommand),
|
|
154
154
|
description: "Installs the Agent Skills that ship with this version of better-supabase"
|
|
155
155
|
}],
|
|
156
156
|
["gen", {
|
|
157
|
-
load: () => import("./gen-
|
|
157
|
+
load: () => import("./gen-DAH8FM2W.js").then((m) => m.genCommand),
|
|
158
158
|
description: "Writes database.types.ts, generated.ts and its metadata module from the database"
|
|
159
159
|
}],
|
|
160
160
|
["introspect", {
|
|
161
|
-
load: () => import("./introspect
|
|
161
|
+
load: () => import("./introspect-DNUTuNvb.js").then((m) => m.introspectCommand),
|
|
162
162
|
description: "Saves the database schema as a snapshot for offline gen"
|
|
163
163
|
}],
|
|
164
164
|
["openapi", {
|
|
165
|
-
load: () => import("./openapi-
|
|
165
|
+
load: () => import("./openapi-BlRJ18s3.js").then((m) => m.openapiCommand),
|
|
166
166
|
description: "Writes the document your createOpenApi() module exports, so CI can check it for drift"
|
|
167
167
|
}],
|
|
168
168
|
["seed", {
|
|
169
|
-
load: () => import("./seed-
|
|
169
|
+
load: () => import("./seed-DQzqT7LP.js").then((m) => m.seedCommand),
|
|
170
170
|
description: "Renders the fixtures from defineSeed() (better-supabase/testing) to SQL"
|
|
171
171
|
}],
|
|
172
172
|
["doctor", {
|
|
173
|
-
load: () => import("./doctor-
|
|
173
|
+
load: () => import("./doctor-B4JOm_ox.js").then((m) => m.doctorCommand),
|
|
174
174
|
description: "Checks RLS, indexes, drift, auth config and env files; exits 1 on errors, or on warnings with --strict"
|
|
175
175
|
}],
|
|
176
176
|
["sql", {
|
|
177
|
-
load: () => import("./sql-
|
|
178
|
-
description: "Lists, adds, syncs, upgrades and prints SQL
|
|
177
|
+
load: () => import("./sql-D0GUtUPp.js").then((m) => m.sqlCommand),
|
|
178
|
+
description: "Lists, adds, syncs, upgrades and prints SQL modules"
|
|
179
|
+
}],
|
|
180
|
+
["config", {
|
|
181
|
+
load: () => import("./config-DU7EJImt.js").then((m) => m.configCommand),
|
|
182
|
+
description: "Prints the resolved config: the file it came from and every option with its default"
|
|
179
183
|
}],
|
|
180
184
|
["codemod", {
|
|
181
|
-
load: () => import("./codemod-
|
|
185
|
+
load: () => import("./codemod-Bl_tQpHn.js").then((m) => m.codemodCommand),
|
|
182
186
|
description: "Rewrites imports and calls for renamed better-supabase APIs"
|
|
183
187
|
}]
|
|
184
188
|
]);
|
|
@@ -193,7 +197,7 @@ const ROOT = defineCommand({
|
|
|
193
197
|
meta: {
|
|
194
198
|
name: "better-supabase",
|
|
195
199
|
version: VERSION,
|
|
196
|
-
description: "Typed Supabase: codegen, doctor, the SQL
|
|
200
|
+
description: "Typed Supabase: codegen, doctor, the SQL modules and project setup"
|
|
197
201
|
},
|
|
198
202
|
args: GLOBAL_ARGS,
|
|
199
203
|
subCommands: () => Object.fromEntries([...COMMANDS].map(([name, entry]) => [name, "command" in entry ? entry.command : defineCommand({ meta: {
|
|
@@ -310,21 +314,27 @@ async function run(argv, options = {}) {
|
|
|
310
314
|
let context;
|
|
311
315
|
let command;
|
|
312
316
|
try {
|
|
313
|
-
const [loaded, { loadConfig }, { parseEnv }] = await Promise.all([
|
|
317
|
+
const [loaded, { discoverConfig, loadConfig }, { parseEnv }] = await Promise.all([
|
|
314
318
|
load(),
|
|
315
|
-
import("./config-
|
|
316
|
-
import("./env-
|
|
319
|
+
import("./config-B9HkL8nF.js"),
|
|
320
|
+
import("./env-CJLbUVPB.js")
|
|
317
321
|
]);
|
|
318
322
|
command = loaded;
|
|
319
323
|
const globals = parseArgs$2(rest, GLOBAL_ARGS);
|
|
320
324
|
const cwd = resolve(options.cwd ?? ".", globals.cwd ?? ".");
|
|
321
325
|
const env = parseEnv(options.env ?? {});
|
|
326
|
+
const reloadConfig = () => loadConfig(cwd, globals.config).catch((cause) => {
|
|
327
|
+
throw cause instanceof CliError ? cause : new CliError("config_invalid", toCliError(cause).message, { cause });
|
|
328
|
+
});
|
|
329
|
+
const config = await reloadConfig();
|
|
330
|
+
const configFile = discoverConfig(cwd, globals.config);
|
|
331
|
+
const interactive = globals.json !== true && globals.yes !== true && env.CI === void 0;
|
|
322
332
|
context = {
|
|
323
333
|
cwd,
|
|
324
|
-
config
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
io:
|
|
334
|
+
config,
|
|
335
|
+
...configFile ? { configFile } : {},
|
|
336
|
+
reloadConfig,
|
|
337
|
+
io: interactive ? io : withoutPrompts(io),
|
|
328
338
|
env,
|
|
329
339
|
json: globals.json === true,
|
|
330
340
|
signal: options.signal
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { r as defineCliCommand } from "./command-CK14fP91.js";
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { i as writeIfChanged, r as sameText, t as display } from "./io-DI1mTdSA.js";
|
|
3
|
+
import { i as importExport, s as stdinDatabaseUrl, t as databaseUrl } from "./config-NiPxAmUF.js";
|
|
4
|
+
import { f as supabaseDir } from "./supabase-toml-B-bIukQF.js";
|
|
4
5
|
import { n as withSpinner } from "./prompts-BNcNfAve.js";
|
|
5
6
|
import { t as connect } from "./db-DOBPt660.js";
|
|
6
7
|
import { resolve } from "node:path";
|
|
@@ -45,7 +46,7 @@ async function runSeed(config, args, env, open = connect, dbUrl) {
|
|
|
45
46
|
const contents = `${HEADER} from ${display(config.root, entry)}. Do not edit.\n\n${statements.join("\n\n")}\n`;
|
|
46
47
|
const path = resolve(config.root, out);
|
|
47
48
|
const current = existsSync(path) ? await readFile(path, "utf8") : void 0;
|
|
48
|
-
if (args.check === true) return current
|
|
49
|
+
if (args.check === true) return sameText(current, contents) ? {
|
|
49
50
|
code: 0,
|
|
50
51
|
output: `${display(config.root, out)} is up to date.`
|
|
51
52
|
} : {
|
|
@@ -71,12 +72,13 @@ async function runSeed(config, args, env, open = connect, dbUrl) {
|
|
|
71
72
|
}
|
|
72
73
|
lines.push("Inserted the fixtures (existing rows were kept).");
|
|
73
74
|
}
|
|
74
|
-
const
|
|
75
|
-
const
|
|
75
|
+
const dir = supabaseDir(config.root);
|
|
76
|
+
const toml = resolve(config.root, dir, "config.toml");
|
|
77
|
+
const seedPath = out.startsWith(`${dir}/`) ? `./${out.slice(dir.length + 1)}` : out;
|
|
76
78
|
if (existsSync(toml)) {
|
|
77
79
|
const text = await readFile(toml, "utf8");
|
|
78
80
|
const folder = seedPath.replace(/[^/]+$/, "");
|
|
79
|
-
if (!text.includes(seedPath) && !text.includes(`${folder}*`)) lines.push("",
|
|
81
|
+
if (!text.includes(seedPath) && !text.includes(`${folder}*`)) lines.push("", `Add it to ${dir}/config.toml so \`supabase db reset\` runs it:`, " [db.seed]", ` sql_paths = ["./seed.sql", "${seedPath}"]`);
|
|
80
82
|
}
|
|
81
83
|
return {
|
|
82
84
|
code: 0,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as list, r as defineCliCommand } from "./command-CK14fP91.js";
|
|
2
|
-
import {
|
|
2
|
+
import { i as writeIfChanged, r as sameText, t as display } from "./io-DI1mTdSA.js";
|
|
3
3
|
import { t as byCodePoint } from "./compare-BmIWVEui.js";
|
|
4
4
|
import { dirname, join, resolve } from "node:path";
|
|
5
5
|
import { existsSync } from "node:fs";
|
|
@@ -107,7 +107,8 @@ async function runSkills(config, args, env) {
|
|
|
107
107
|
const path = resolve(base, relativePath);
|
|
108
108
|
const shown = global ? `~/${relativePath}` : display(config.root, relativePath);
|
|
109
109
|
if (check) {
|
|
110
|
-
|
|
110
|
+
const current = existsSync(path) ? await readFile(path, "utf8") : void 0;
|
|
111
|
+
if (!sameText(current, file.contents)) stale.push(shown);
|
|
111
112
|
continue;
|
|
112
113
|
}
|
|
113
114
|
lines.push(`${await writeIfChanged(path, file.contents) ? "Wrote" : "Unchanged"} ${shown}`);
|