better-supabase 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +187 -46
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
- package/dist/adapter-CHnPkCPd.js +1160 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +224 -0
- package/dist/blocks/attachments/index.js +234 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +259 -0
- package/dist/blocks/data-lifecycle/index.js +358 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-C_A-KEAz.js → doctor-BMqBgM3X.js} +991 -317
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-4JlOwgWG.js +2 -0
- package/dist/cli/gen-DeuDgPxN.js +3100 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-DMa6M7hV.js → init-C7Xd0Kda.js} +242 -27
- package/dist/cli/{introspect-BKlaIu_M.js → introspect-CSnMJ94U.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-Bo_NLT5n.js → run-C8tnlHSb.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BCtlgDQx.js → version-C_4JwyiM.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-CLqs9-OA.js +130 -0
- package/dist/composite-pSfeJNce.d.ts +146 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CdPDPpFs.d.ts +25 -0
- package/dist/framework-xjTBoyBB.js +51 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/mfa-Daak8ukG.d.ts +54 -0
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
- package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
- package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -22
- package/dist/server/index.js +46 -14
- package/dist/{respond-BR1fJWOB.d.ts → server-C6DWVEVG.d.ts} +237 -85
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +313 -212
- package/dist/sql/index.js +34924 -6609
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/{support-wHnK6zp-.js → support-zIa1URaN.js} +32 -11
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +315 -41
- package/dist/testing/index.js +1046 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DOYTYwHP.js → version-CQt77F3T.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +461 -20
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +20 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +47 -11
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-CIdSQZad.js +0 -2
- package/dist/cli/gen-CjElD1Vw.js +0 -2241
- package/dist/cli/read-sets-VQcPgxU9.js +0 -436
- package/dist/cli/sql-CVx-1O8G.js +0 -373
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/index-CWMDdEr4.d.ts +0 -50
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dp2VDwog.d.ts +0 -161
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/mfa-Cu96oJdw.d.ts +0 -30
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-B1mZ7CgQ.js +0 -660
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-CEPwlw2G.d.ts +0 -89
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -122
|
@@ -1,436 +0,0 @@
|
|
|
1
|
-
import { i as importModule } from "./config-CPVpXP5I.js";
|
|
2
|
-
import { resolve } from "node:path";
|
|
3
|
-
import { existsSync } from "node:fs";
|
|
4
|
-
import { readFile } from "node:fs/promises";
|
|
5
|
-
import { KIT_ID_TYPES, compileReadSets, kitIdType, permdockKeyStatus } from "better-supabase/sql";
|
|
6
|
-
import { isReadSet } from "better-supabase";
|
|
7
|
-
//#region src/cli/permdock.ts
|
|
8
|
-
const PERMDOCK_CONFIGS = [
|
|
9
|
-
"permdock.config.ts",
|
|
10
|
-
"permdock.config.mts",
|
|
11
|
-
"permdock.config.js",
|
|
12
|
-
"permdock.config.mjs"
|
|
13
|
-
];
|
|
14
|
-
/** The PermDock config file in `root`, if there is one. */
|
|
15
|
-
function permdockConfig(root) {
|
|
16
|
-
return PERMDOCK_CONFIGS.find((file) => existsSync(resolve(root, file)));
|
|
17
|
-
}
|
|
18
|
-
const isRecord = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
|
|
19
|
-
const isString = (value) => typeof value === "string";
|
|
20
|
-
const strings = (value) => Array.isArray(value) ? value.filter(isString) : [];
|
|
21
|
-
const column = (value) => isRecord(value) && isString(value["column"]) ? { column: value["column"] } : void 0;
|
|
22
|
-
function manifestValue(value, accept) {
|
|
23
|
-
if (!isRecord(value)) return void 0;
|
|
24
|
-
if (isString(value["column"])) return { column: value["column"] };
|
|
25
|
-
return accept(value["value"]) ? { value: value["value"] } : void 0;
|
|
26
|
-
}
|
|
27
|
-
const roleValue = (value) => isString(value) || Array.isArray(value) && value.every(isString);
|
|
28
|
-
function membership(value) {
|
|
29
|
-
if (!isRecord(value) || !isString(value["table"])) return void 0;
|
|
30
|
-
const user = column(value["user"]);
|
|
31
|
-
const id = column(value["id"]);
|
|
32
|
-
const scope = manifestValue(value["scope"], isString);
|
|
33
|
-
if (!user || !id || !scope) return void 0;
|
|
34
|
-
const role = manifestValue(value["role"], roleValue);
|
|
35
|
-
const expiresAt = column(value["expiresAt"]);
|
|
36
|
-
return {
|
|
37
|
-
table: value["table"],
|
|
38
|
-
user,
|
|
39
|
-
scope,
|
|
40
|
-
id,
|
|
41
|
-
...role ? { role } : {},
|
|
42
|
-
...expiresAt ? { expiresAt } : {},
|
|
43
|
-
columns: strings(value["columns"])
|
|
44
|
-
};
|
|
45
|
-
}
|
|
46
|
-
/** Reads a parsed manifest; throws with the reason when it isn't version 1. */
|
|
47
|
-
function parseManifest(json) {
|
|
48
|
-
if (!isRecord(json)) throw new TypeError("not a JSON object");
|
|
49
|
-
if (json["version"] !== 1) throw new TypeError(`version ${String(json["version"])} is not supported (this release reads version 1)`);
|
|
50
|
-
const hook = json["hook"];
|
|
51
|
-
const rls = json["rls"];
|
|
52
|
-
if (isRecord(rls) && rls["mode"] !== "jwt" && rls["mode"] !== "database") throw new TypeError(`rls.mode ${JSON.stringify(rls["mode"])} is not supported (this release reads "jwt" and "database")`);
|
|
53
|
-
const budget = isRecord(json["budget"]) ? json["budget"]["bytes"] : void 0;
|
|
54
|
-
return {
|
|
55
|
-
version: 1,
|
|
56
|
-
...typeof budget === "number" ? { budget } : {},
|
|
57
|
-
...isRecord(hook) && isString(hook["schema"]) && isString(hook["function"]) ? { hook: {
|
|
58
|
-
schema: hook["schema"],
|
|
59
|
-
function: hook["function"]
|
|
60
|
-
} } : {},
|
|
61
|
-
...isString(json["tenantClaim"]) ? { tenantClaim: json["tenantClaim"] } : {},
|
|
62
|
-
claims: (Array.isArray(json["claims"]) ? json["claims"] : []).flatMap((claim) => isRecord(claim) && isString(claim["name"]) && isString(claim["source"]) ? [{
|
|
63
|
-
name: claim["name"],
|
|
64
|
-
source: claim["source"]
|
|
65
|
-
}] : []),
|
|
66
|
-
memberships: (Array.isArray(json["memberships"]) ? json["memberships"] : []).flatMap((entry) => {
|
|
67
|
-
const parsed = membership(entry);
|
|
68
|
-
return parsed ? [parsed] : [];
|
|
69
|
-
}),
|
|
70
|
-
...isRecord(rls) && isString(rls["schema"]) ? { rls: {
|
|
71
|
-
schema: rls["schema"],
|
|
72
|
-
mode: rls["mode"] === "jwt" ? "jwt" : "database",
|
|
73
|
-
...isString(rls["tenantClaim"]) ? { tenantClaim: rls["tenantClaim"] } : {},
|
|
74
|
-
scopes: (Array.isArray(rls["scopes"]) ? rls["scopes"] : []).flatMap((scope) => isRecord(scope) && isString(scope["name"]) ? [{
|
|
75
|
-
name: scope["name"],
|
|
76
|
-
...isString(scope["type"]) ? { type: scope["type"] } : {},
|
|
77
|
-
...isString(scope["within"]) ? { within: scope["within"] } : {}
|
|
78
|
-
}] : []),
|
|
79
|
-
helpers: (Array.isArray(rls["helpers"]) ? rls["helpers"] : []).flatMap((helper) => isRecord(helper) && isString(helper["name"]) && isString(helper["args"]) && isString(helper["returns"]) ? [{
|
|
80
|
-
name: helper["name"],
|
|
81
|
-
args: helper["args"],
|
|
82
|
-
returns: helper["returns"],
|
|
83
|
-
execute: strings(helper["execute"])
|
|
84
|
-
}] : []),
|
|
85
|
-
...Array.isArray(rls["memberships"]) ? { memberships: rls["memberships"].flatMap((entry) => {
|
|
86
|
-
const parsed = membership(entry);
|
|
87
|
-
return parsed ? [parsed] : [];
|
|
88
|
-
}) } : {}
|
|
89
|
-
} } : {},
|
|
90
|
-
decidingColumns: strings(json["decidingColumns"])
|
|
91
|
-
};
|
|
92
|
-
}
|
|
93
|
-
/**
|
|
94
|
-
* The keys of a parsed `permissions.catalog.json`, each with its scope and
|
|
95
|
-
* its `rowConditions` flag when it is a boolean. A non-boolean flag is
|
|
96
|
-
* dropped, so `permdockKeyStatus` reads the key as unknown. Throws unless
|
|
97
|
-
* the catalog is version 1.
|
|
98
|
-
*/
|
|
99
|
-
function parseCatalog(json) {
|
|
100
|
-
if (!isRecord(json) || !Array.isArray(json["permissions"])) throw new TypeError("has no permissions array");
|
|
101
|
-
if (json["version"] !== 1) throw new TypeError(`version ${String(json["version"])} is not supported (this release reads version 1)`);
|
|
102
|
-
return { permissions: json["permissions"].flatMap((permission) => {
|
|
103
|
-
if (!isRecord(permission) || !isString(permission["key"])) return [];
|
|
104
|
-
const flag = permission["rowConditions"];
|
|
105
|
-
const scope = permission["scope"];
|
|
106
|
-
return [{
|
|
107
|
-
key: permission["key"],
|
|
108
|
-
...typeof flag === "boolean" ? { rowConditions: flag } : {},
|
|
109
|
-
...isString(scope) ? { scope } : {}
|
|
110
|
-
}];
|
|
111
|
-
}) };
|
|
112
|
-
}
|
|
113
|
-
async function readJson(root, path) {
|
|
114
|
-
const absolute = resolve(root, path);
|
|
115
|
-
if (!existsSync(absolute)) return { missing: true };
|
|
116
|
-
try {
|
|
117
|
-
return { json: JSON.parse(await readFile(absolute, "utf8")) };
|
|
118
|
-
} catch (cause) {
|
|
119
|
-
return { problem: `${path}: ${cause instanceof Error ? cause.message : String(cause)}` };
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Reads PermDock's JSON outputs: the manifest `permdock supabase inspect
|
|
124
|
-
* --out` writes and the catalog `permdock catalog` writes. Nothing is
|
|
125
|
-
* imported from PermDock. Returns `undefined` when the project has neither a
|
|
126
|
-
* PermDock config nor a manifest.
|
|
127
|
-
*/
|
|
128
|
-
async function readPermdock(root, paths) {
|
|
129
|
-
const config = permdockConfig(root);
|
|
130
|
-
const problems = [];
|
|
131
|
-
const manifestFile = await readJson(root, paths.manifest);
|
|
132
|
-
let manifest;
|
|
133
|
-
if ("json" in manifestFile) try {
|
|
134
|
-
manifest = parseManifest(manifestFile.json);
|
|
135
|
-
} catch (cause) {
|
|
136
|
-
problems.push(`${paths.manifest}: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
137
|
-
}
|
|
138
|
-
else if ("problem" in manifestFile) problems.push(manifestFile.problem);
|
|
139
|
-
if (!config && !manifest && "missing" in manifestFile) return void 0;
|
|
140
|
-
const catalogFile = await readJson(root, paths.catalog);
|
|
141
|
-
let catalog;
|
|
142
|
-
if ("json" in catalogFile) try {
|
|
143
|
-
catalog = parseCatalog(catalogFile.json);
|
|
144
|
-
} catch (cause) {
|
|
145
|
-
problems.push(`${paths.catalog}: ${cause instanceof Error ? cause.message : String(cause)}`);
|
|
146
|
-
}
|
|
147
|
-
else if ("problem" in catalogFile) problems.push(catalogFile.problem);
|
|
148
|
-
return {
|
|
149
|
-
...config ? { config } : {},
|
|
150
|
-
manifestPath: paths.manifest,
|
|
151
|
-
...manifest ? { manifest } : {},
|
|
152
|
-
catalogPath: paths.catalog,
|
|
153
|
-
...catalog ? { catalog } : {},
|
|
154
|
-
problems
|
|
155
|
-
};
|
|
156
|
-
}
|
|
157
|
-
/** How findings name the PermDock project: its config file or its manifest. */
|
|
158
|
-
const permdockSource = (project) => project.config ?? project.manifestPath;
|
|
159
|
-
const HOOK_MARKER = /^--\s*permdock:hook\s+v(\d+)([^\n]*)$/m;
|
|
160
|
-
const GRANTS_MARKER = /^--\s*permdock:grants\s+v(\d+)([^\n]*)$/m;
|
|
161
|
-
function markerFields(rest) {
|
|
162
|
-
const fields = /* @__PURE__ */ new Map();
|
|
163
|
-
for (const match of rest.matchAll(/(\w+)=(\S*)/g)) fields.set(match[1], match[2]);
|
|
164
|
-
return fields;
|
|
165
|
-
}
|
|
166
|
-
/** The `-- permdock:hook v1 schema=... tenant=... budget=... claims=...` line PermDock's hook file starts with. */
|
|
167
|
-
function parseHookMarker(sql) {
|
|
168
|
-
const match = HOOK_MARKER.exec(sql);
|
|
169
|
-
if (!match) return void 0;
|
|
170
|
-
const fields = markerFields(match[2]);
|
|
171
|
-
const budget = Number(fields.get("budget"));
|
|
172
|
-
const schema = fields.get("schema");
|
|
173
|
-
const tenantClaim = fields.get("tenant");
|
|
174
|
-
return {
|
|
175
|
-
version: Number(match[1]),
|
|
176
|
-
...schema ? { schema } : {},
|
|
177
|
-
...tenantClaim ? { tenantClaim } : {},
|
|
178
|
-
...Number.isFinite(budget) && fields.has("budget") ? { budget } : {},
|
|
179
|
-
claims: (fields.get("claims") ?? "").split(",").filter(Boolean)
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
/** The `-- permdock:grants v1 schema=...` line of the migration `--grants-out` writes. */
|
|
183
|
-
function parseGrantsMarker(sql) {
|
|
184
|
-
const match = GRANTS_MARKER.exec(sql);
|
|
185
|
-
if (!match) return void 0;
|
|
186
|
-
const schema = markerFields(match[2]).get("schema");
|
|
187
|
-
return {
|
|
188
|
-
version: Number(match[1]),
|
|
189
|
-
...schema ? { schema } : {}
|
|
190
|
-
};
|
|
191
|
-
}
|
|
192
|
-
/**
|
|
193
|
-
* The PermDock scope tenants are: `explicit`, which must be one of the
|
|
194
|
-
* manifest's `rls.scopes`, else the one scope without `within`. A missing or
|
|
195
|
-
* unreadable manifest, no `rls` block, no root scope or several, and a scope
|
|
196
|
-
* without a type this kit renders are invalid rather than a guess.
|
|
197
|
-
*/
|
|
198
|
-
function manifestScope(project, explicit, reader) {
|
|
199
|
-
const { subject, helpers, setting, optOut } = reader;
|
|
200
|
-
if (!project.manifest) {
|
|
201
|
-
const problem = project.problems.find((entry) => entry.startsWith(project.manifestPath));
|
|
202
|
-
return {
|
|
203
|
-
kind: "invalid",
|
|
204
|
-
problem: problem ? `Could not read PermDock's manifest: ${problem}. Run \`permdock supabase inspect --out\` with a current PermDock, ${optOut}` : `${permdockSource(project)} is a PermDock project, but there is no ${project.manifestPath}. Run \`permdock supabase inspect --out\`, ${optOut}`
|
|
205
|
-
};
|
|
206
|
-
}
|
|
207
|
-
const rls = project.manifest.rls;
|
|
208
|
-
if (!rls) return {
|
|
209
|
-
kind: "invalid",
|
|
210
|
-
problem: `${project.manifestPath} has no rls block, so ${subject} can't find PermDock's ${helpers}. Run \`permdock rls generate\`, then \`permdock supabase inspect --out\`, ${optOut}`
|
|
211
|
-
};
|
|
212
|
-
const names = rls.scopes.map((scope) => scope.name).join(", ") || "none";
|
|
213
|
-
let scope;
|
|
214
|
-
if (explicit === void 0) {
|
|
215
|
-
const roots = rls.scopes.filter((entry) => entry.within === void 0);
|
|
216
|
-
if (roots.length !== 1) return {
|
|
217
|
-
kind: "invalid",
|
|
218
|
-
problem: `${project.manifestPath} has no single root scope (${roots.map((entry) => entry.name).join(", ") || "none"}), so ${subject} can't tell which scope tenants are. Set ${setting}: { scope } to one of ${names}.`
|
|
219
|
-
};
|
|
220
|
-
scope = roots[0].name;
|
|
221
|
-
} else {
|
|
222
|
-
scope = explicit;
|
|
223
|
-
if (!rls.scopes.some((entry) => entry.name === scope)) return {
|
|
224
|
-
kind: "invalid",
|
|
225
|
-
problem: `${setting}.scope is "${scope}", but ${project.manifestPath} has the scopes ${names}. Set ${setting}: { scope } to one of them, or remove it to use the root scope.`
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
const declared = rls.scopes.find((entry) => entry.name === scope)?.type;
|
|
229
|
-
if (declared === void 0) return {
|
|
230
|
-
kind: "invalid",
|
|
231
|
-
problem: `${project.manifestPath} gives scope "${scope}" no type, so ${subject} can't tell its id type. Run \`permdock supabase inspect --out\` with a current PermDock.`
|
|
232
|
-
};
|
|
233
|
-
const idType = kitIdType(declared);
|
|
234
|
-
if (idType === void 0) return {
|
|
235
|
-
kind: "invalid",
|
|
236
|
-
problem: `${project.manifestPath} gives scope "${scope}" the type ${declared}, but ${subject} renders only ${KIT_ID_TYPES.join(", ").replace(/, (?=[^,]*$)/, " or ")} ids.`
|
|
237
|
-
};
|
|
238
|
-
return {
|
|
239
|
-
kind: "ok",
|
|
240
|
-
manifest: project.manifest,
|
|
241
|
-
rls,
|
|
242
|
-
scope,
|
|
243
|
-
idType
|
|
244
|
-
};
|
|
245
|
-
}
|
|
246
|
-
/**
|
|
247
|
-
* The membership tables PermDock's `member_<scope>_ids_for` reads for
|
|
248
|
-
* `scope`: the manifest's `rls.memberships` that can cover it (a scope
|
|
249
|
-
* column, or a fixed scope equal to `scope`). A manifest from a PermDock
|
|
250
|
-
* without `rls.memberships` falls back to the hook's sources.
|
|
251
|
-
*/
|
|
252
|
-
function scopeMemberships(manifest, scope) {
|
|
253
|
-
const rls = manifest.rls?.memberships;
|
|
254
|
-
return {
|
|
255
|
-
sources: (rls ?? manifest.memberships).filter((source) => !("value" in source.scope) || source.scope.value === scope),
|
|
256
|
-
from: rls === void 0 ? "hook" : "rls"
|
|
257
|
-
};
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* PermDock mode, when the project uses PermDock and `entitlements.permdock`
|
|
261
|
-
* is not `false`. The scope is `entitlements.permdock.scope`, which must be
|
|
262
|
-
* one of the manifest's `rls.scopes`, else the one scope without `within`.
|
|
263
|
-
* No root scope, or more than one, is invalid rather than a guess. A
|
|
264
|
-
* PermDock project without a readable manifest or without its `rls` block
|
|
265
|
-
* is invalid too, so the module never falls back to `tenant` on its own.
|
|
266
|
-
* Memberships come from `rls.memberships`, the tables PermDock's helpers
|
|
267
|
-
* read, and from the hook's sources only when the manifest has none.
|
|
268
|
-
*/
|
|
269
|
-
function entitlementsMode(config, project) {
|
|
270
|
-
const setting = config.entitlements.permdock;
|
|
271
|
-
if (setting === false || !project) return { kind: "tenant" };
|
|
272
|
-
const chosen = manifestScope(project, setting.scope, {
|
|
273
|
-
subject: "the entitlements module",
|
|
274
|
-
helpers: "membership helpers",
|
|
275
|
-
setting: "entitlements.permdock",
|
|
276
|
-
optOut: "or set entitlements.permdock: false to keep the tenant module's memberships."
|
|
277
|
-
});
|
|
278
|
-
if (chosen.kind === "invalid") return chosen;
|
|
279
|
-
return {
|
|
280
|
-
kind: "permdock",
|
|
281
|
-
permdock: {
|
|
282
|
-
schema: chosen.rls.schema,
|
|
283
|
-
scope: chosen.scope,
|
|
284
|
-
idType: chosen.idType,
|
|
285
|
-
memberships: scopeMemberships(chosen.manifest, chosen.scope).sources.map((source) => ({
|
|
286
|
-
table: source.table,
|
|
287
|
-
userColumn: source.user.column,
|
|
288
|
-
scope: source.scope,
|
|
289
|
-
idColumn: source.id.column
|
|
290
|
-
}))
|
|
291
|
-
}
|
|
292
|
-
};
|
|
293
|
-
}
|
|
294
|
-
/**
|
|
295
|
-
* The `permdock` access model's helpers, read from the manifest whatever
|
|
296
|
-
* `entitlements` says: `rls.schema`, the root scope (or
|
|
297
|
-
* `kits.access.permdock.scope`, which the manifest must declare) and that
|
|
298
|
-
* scope's id type. `off` when another model is chosen. Without a PermDock
|
|
299
|
-
* project or a usable manifest the model is invalid, never a default.
|
|
300
|
-
*/
|
|
301
|
-
function accessPermdockMode(config, project) {
|
|
302
|
-
const access = config.kits.access;
|
|
303
|
-
if (access?.model !== "permdock") return { kind: "off" };
|
|
304
|
-
const optOut = "or choose another kits.access.model.";
|
|
305
|
-
if (!project) return {
|
|
306
|
-
kind: "invalid",
|
|
307
|
-
problem: `kits.access.model is "permdock", but there is no PermDock project here (no permdock.config.ts and no manifest). Run \`permdock supabase inspect --out\` to write the manifest, ${optOut}`
|
|
308
|
-
};
|
|
309
|
-
const chosen = manifestScope(project, access.permdock?.scope, {
|
|
310
|
-
subject: "the permdock access model",
|
|
311
|
-
helpers: "permission helpers",
|
|
312
|
-
setting: "kits.access.permdock",
|
|
313
|
-
optOut
|
|
314
|
-
});
|
|
315
|
-
if (chosen.kind === "invalid") return chosen;
|
|
316
|
-
const schema = access.permdock?.schema;
|
|
317
|
-
if (schema !== void 0 && schema !== chosen.rls.schema) return {
|
|
318
|
-
kind: "invalid",
|
|
319
|
-
problem: `kits.access.permdock.schema is "${schema}", but ${project.manifestPath} puts PermDock's helpers in "${chosen.rls.schema}". Set it to "${chosen.rls.schema}", or remove it to use the manifest's.`
|
|
320
|
-
};
|
|
321
|
-
const idType = access.idType === void 0 ? void 0 : kitIdType(access.idType);
|
|
322
|
-
if (idType !== void 0 && idType !== chosen.idType) return {
|
|
323
|
-
kind: "invalid",
|
|
324
|
-
problem: `kits.access.idType is "${access.idType}", but ${project.manifestPath} gives scope "${chosen.scope}" the type ${chosen.idType}. Set kits.access.idType to "${chosen.idType}", or remove it to use the manifest's.`
|
|
325
|
-
};
|
|
326
|
-
return {
|
|
327
|
-
kind: "permdock",
|
|
328
|
-
access: {
|
|
329
|
-
schema: chosen.rls.schema,
|
|
330
|
-
scope: chosen.scope,
|
|
331
|
-
idType: chosen.idType
|
|
332
|
-
}
|
|
333
|
-
};
|
|
334
|
-
}
|
|
335
|
-
const ROW_CONDITIONS_FIX = "Use the policies `permdock rls generate` writes for it, or a permission whose catalog entry has rowConditions: false.";
|
|
336
|
-
const REGENERATE_FIX = "Regenerate it with a current `permdock catalog`, which writes rowConditions for every permission.";
|
|
337
|
-
/**
|
|
338
|
-
* Why the SQL helpers can't be trusted with `key`, or `undefined` when the
|
|
339
|
-
* catalog marks it `rowConditions: false`. An entry without the flag and a
|
|
340
|
-
* key the catalog doesn't list are unknown, so they count as unsafe.
|
|
341
|
-
*/
|
|
342
|
-
function unsafeKey(catalog, key, catalogPath) {
|
|
343
|
-
const status = permdockKeyStatus(catalog, key);
|
|
344
|
-
switch (status) {
|
|
345
|
-
case "scope-only": return;
|
|
346
|
-
case "row-conditions": return {
|
|
347
|
-
status,
|
|
348
|
-
reason: `has row conditions in ${catalogPath}`,
|
|
349
|
-
fix: ROW_CONDITIONS_FIX
|
|
350
|
-
};
|
|
351
|
-
case "no-flag": return {
|
|
352
|
-
status,
|
|
353
|
-
reason: `has no rowConditions flag in ${catalogPath}, so whether it has row conditions is unknown`,
|
|
354
|
-
fix: REGENERATE_FIX
|
|
355
|
-
};
|
|
356
|
-
case "missing": return {
|
|
357
|
-
status,
|
|
358
|
-
reason: `is not in ${catalogPath}`,
|
|
359
|
-
fix: REGENERATE_FIX
|
|
360
|
-
};
|
|
361
|
-
default: return status;
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Checks the keys the kit modules pass to PermDock's helpers against
|
|
366
|
-
* `permissions.catalog.json`, with the statuses bucket policies use: only
|
|
367
|
-
* `rowConditions: false` passes. A missing or unreadable catalog is a
|
|
368
|
-
* problem too, since every key is then unknown.
|
|
369
|
-
*/
|
|
370
|
-
function kitKeyProblems(project, keys, access) {
|
|
371
|
-
if (keys.length === 0) return [];
|
|
372
|
-
const catalog = project.catalog;
|
|
373
|
-
if (!catalog) {
|
|
374
|
-
const unreadable = project.problems.find((problem) => problem.startsWith(project.catalogPath));
|
|
375
|
-
return [{
|
|
376
|
-
target: project.catalogPath,
|
|
377
|
-
message: unreadable ? `Could not read PermDock's catalog: ${unreadable}. The permdock access model passes ${keys.length} kit permission keys to PermDock's helpers, so whether they have row conditions is unknown. Run \`permdock catalog\` with a current PermDock.` : `The permdock access model passes ${keys.length} kit permission keys to PermDock's helpers, but there is no ${project.catalogPath}, so whether they have row conditions is unknown. Run \`permdock catalog\`, or set permdock.catalog in the config.`
|
|
378
|
-
}];
|
|
379
|
-
}
|
|
380
|
-
return keys.flatMap((entry) => {
|
|
381
|
-
const problem = unsafeKey(catalog, entry.key, project.catalogPath);
|
|
382
|
-
if (!problem) return [];
|
|
383
|
-
const helper = entry.scope === "platform" ? `${access.schema}.permdock_has` : `${access.schema}.permitted_${access.scope}_ids`;
|
|
384
|
-
const setting = `kits.${entry.module}.permissions.${entry.action}`;
|
|
385
|
-
const fix = problem.status === "row-conditions" ? `PermDock's SQL helpers check role and scope, not row conditions, so the module would grant it everywhere in the scope. Set ${setting} to a permission whose catalog entry has rowConditions: false.` : `${problem.fix} If PermDock doesn't define it, set ${setting} to a key the catalog lists.`;
|
|
386
|
-
return [{
|
|
387
|
-
target: setting,
|
|
388
|
-
message: `The ${entry.module} module checks "${entry.key}" (${entry.action}) with ${helper}, but it ${problem.reason}. ${fix}`
|
|
389
|
-
}];
|
|
390
|
-
});
|
|
391
|
-
}
|
|
392
|
-
/** A helper the `permdock` access model calls, as `schema.name`, and the role it runs as. */
|
|
393
|
-
const accessRequirements = (access) => [{
|
|
394
|
-
helper: `${access.schema}.permitted_${access.scope}_ids`,
|
|
395
|
-
role: "authenticated"
|
|
396
|
-
}, {
|
|
397
|
-
helper: `${access.schema}.permdock_has`,
|
|
398
|
-
role: "authenticated"
|
|
399
|
-
}];
|
|
400
|
-
/**
|
|
401
|
-
* The helpers the `entitlements` module calls for the chosen scope:
|
|
402
|
-
* `member_<scope>_ids` from `has_entitlement` as `authenticated`, and
|
|
403
|
-
* `member_<scope>_ids_for` from `feature_claims`, which PermDock's hook runs
|
|
404
|
-
* as `supabase_auth_admin`.
|
|
405
|
-
*/
|
|
406
|
-
const entitlementRequirements = (permdock) => [{
|
|
407
|
-
kind: "member",
|
|
408
|
-
helper: `${permdock.schema}.member_${permdock.scope}_ids`,
|
|
409
|
-
caller: "has_entitlement",
|
|
410
|
-
role: "authenticated"
|
|
411
|
-
}, {
|
|
412
|
-
kind: "member-for",
|
|
413
|
-
helper: `${permdock.schema}.member_${permdock.scope}_ids_for`,
|
|
414
|
-
caller: "feature_claims",
|
|
415
|
-
role: "supabase_auth_admin"
|
|
416
|
-
}];
|
|
417
|
-
//#endregion
|
|
418
|
-
//#region src/cli/read-sets.ts
|
|
419
|
-
/** Every read set exported by the modules in `config.readSets`. */
|
|
420
|
-
async function loadReadSets(config) {
|
|
421
|
-
const sets = [];
|
|
422
|
-
for (const entry of config.readSets) {
|
|
423
|
-
const loaded = await importModule(resolve(config.root, entry));
|
|
424
|
-
const found = Object.values(loaded).filter(isReadSet);
|
|
425
|
-
if (found.length === 0) throw new Error(`${entry} exports no read set (defineReadSet)`);
|
|
426
|
-
for (const set of found) if (!sets.includes(set)) sets.push(set);
|
|
427
|
-
}
|
|
428
|
-
return sets;
|
|
429
|
-
}
|
|
430
|
-
/** The compiled functions for `config.readSets`; empty when none are configured. */
|
|
431
|
-
async function compiledReadSets(config) {
|
|
432
|
-
if (config.readSets.length === 0) return [];
|
|
433
|
-
return compileReadSets(await loadReadSets(config));
|
|
434
|
-
}
|
|
435
|
-
//#endregion
|
|
436
|
-
export { entitlementsMode as a, parseHookMarker as c, scopeMemberships as d, unsafeKey as f, entitlementRequirements as i, permdockSource as l, accessPermdockMode as n, kitKeyProblems as o, accessRequirements as r, parseGrantsMarker as s, compiledReadSets as t, readPermdock as u };
|