better-supabase 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/impersonation-DcqaTBHx.js +148 -0
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +330 -194
- package/dist/sql/index.js +34901 -6489
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +343 -37
- package/dist/testing/index.js +1186 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +62 -18
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -100
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
|
|
2
|
+
import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
|
|
3
|
+
import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
|
|
4
|
+
//#region src/blocks/flags/flags.d.ts
|
|
5
|
+
type FlagType = "boolean" | "string" | "number" | "object";
|
|
6
|
+
type FlagValue = boolean | string | number | null | FlagValue[] | {
|
|
7
|
+
[key: string]: FlagValue;
|
|
8
|
+
};
|
|
9
|
+
/** A targeting rule: every list that is set must contain the caller's value. */
|
|
10
|
+
interface FlagRule {
|
|
11
|
+
readonly variant: string;
|
|
12
|
+
readonly tenants?: readonly string[];
|
|
13
|
+
readonly users?: readonly string[];
|
|
14
|
+
/** Entitlement lookup keys; one match is enough. */
|
|
15
|
+
readonly plans?: readonly string[];
|
|
16
|
+
readonly roles?: readonly string[];
|
|
17
|
+
}
|
|
18
|
+
interface FlagOverride {
|
|
19
|
+
readonly organizationId: string | undefined;
|
|
20
|
+
readonly userId: string | undefined;
|
|
21
|
+
readonly variant: string;
|
|
22
|
+
}
|
|
23
|
+
/** A row of the `flags` table with its overrides (`flag_definitions()`). */
|
|
24
|
+
interface FlagDefinition {
|
|
25
|
+
readonly key: string;
|
|
26
|
+
readonly type: FlagType;
|
|
27
|
+
readonly variants: Readonly<Record<string, FlagValue>>;
|
|
28
|
+
readonly defaultVariant: string;
|
|
29
|
+
readonly enabled: boolean;
|
|
30
|
+
readonly rules: readonly FlagRule[];
|
|
31
|
+
/** 0 to 100, in steps of 0.01. */
|
|
32
|
+
readonly rolloutPercentage: number;
|
|
33
|
+
readonly rolloutVariant: string | undefined;
|
|
34
|
+
readonly overrides: readonly FlagOverride[];
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* The OpenFeature evaluation context the provider reads. `targetingKey` is
|
|
38
|
+
* the user id; without one, the rollout buckets by `tenant`.
|
|
39
|
+
*/
|
|
40
|
+
interface FlagContext {
|
|
41
|
+
readonly targetingKey?: string;
|
|
42
|
+
readonly tenant?: string;
|
|
43
|
+
readonly plans?: readonly string[];
|
|
44
|
+
readonly role?: string;
|
|
45
|
+
/** Every role the caller holds in the tenant; a `roles` rule matches any of them. */
|
|
46
|
+
readonly roles?: readonly string[];
|
|
47
|
+
readonly [attribute: string]: unknown;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* What `flagContext()` returns; an OpenFeature `EvaluationContext`. It is a
|
|
51
|
+
* type alias because an interface has no implicit index signature.
|
|
52
|
+
*/
|
|
53
|
+
type RequestFlagContext = {
|
|
54
|
+
targetingKey?: string;
|
|
55
|
+
tenant?: string;
|
|
56
|
+
plans?: string[];
|
|
57
|
+
role?: string;
|
|
58
|
+
roles?: string[];
|
|
59
|
+
};
|
|
60
|
+
type FlagReason = "DISABLED" | "TARGETING_MATCH" | "SPLIT" | "DEFAULT" | "ERROR";
|
|
61
|
+
type FlagErrorCode = "FLAG_NOT_FOUND" | "TYPE_MISMATCH" | "PROVIDER_NOT_READY" | "GENERAL";
|
|
62
|
+
/**
|
|
63
|
+
* The shape of an OpenFeature `ResolutionDetails`. `Code` is the type of
|
|
64
|
+
* `errorCode`: OpenFeature's `ErrorCode` when `errorCodes: ErrorCode` is
|
|
65
|
+
* passed to the provider, the matching string literals otherwise.
|
|
66
|
+
*/
|
|
67
|
+
interface FlagResolution<T, Code extends string = FlagErrorCode> {
|
|
68
|
+
readonly value: T;
|
|
69
|
+
readonly variant?: string;
|
|
70
|
+
readonly reason: FlagReason;
|
|
71
|
+
readonly errorCode?: Code;
|
|
72
|
+
readonly errorMessage?: string;
|
|
73
|
+
}
|
|
74
|
+
/** The shape of an OpenFeature `EvaluationDetails`. */
|
|
75
|
+
interface FlagDetails<T, Code extends string = FlagErrorCode> extends FlagResolution<T, Code> {
|
|
76
|
+
readonly flagKey: string;
|
|
77
|
+
readonly flagMetadata: Readonly<Record<string, string | number | boolean>>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* The rollout bucket of `target` for `flag`, 0 to 9999: the first 32 bits
|
|
81
|
+
* of SHA-256(`flag.target`) modulo 10000. `better_supabase.flag_bucket()`
|
|
82
|
+
* computes the same number, so SQL and TypeScript agree on who is in.
|
|
83
|
+
*/
|
|
84
|
+
export declare function flagBucket(flag: string, target: string): Promise<number>;
|
|
85
|
+
/** The result of `evaluateFlag()`, which never fails. */
|
|
86
|
+
interface FlagEvaluation {
|
|
87
|
+
readonly value: FlagValue;
|
|
88
|
+
readonly variant: string;
|
|
89
|
+
readonly reason: FlagReason;
|
|
90
|
+
}
|
|
91
|
+
/** Evaluates one flag as `better_supabase.flag_evaluation()` does. */
|
|
92
|
+
export declare function evaluateFlag(flag: FlagDefinition, context?: FlagContext): Promise<FlagEvaluation>;
|
|
93
|
+
/** Parses the rows of `flag_definitions()`. */
|
|
94
|
+
export declare function flagDefinitionsOf(value: unknown): readonly FlagDefinition[];
|
|
95
|
+
interface FlagsProviderOptions<Code extends string = FlagErrorCode> extends BlockTemporalOptions {
|
|
96
|
+
/**
|
|
97
|
+
* A service-role transport: `flag_definitions()` is granted to
|
|
98
|
+
* `service_role` only, as it lists every override.
|
|
99
|
+
*/
|
|
100
|
+
readonly transport?: BlockTransport;
|
|
101
|
+
/** The module schema (`sql.modules.flags.schema`), default `better_supabase`. */
|
|
102
|
+
readonly schema?: string;
|
|
103
|
+
/** How long the definitions are cached, in milliseconds. Default 30000. */
|
|
104
|
+
readonly ttl?: number;
|
|
105
|
+
/** Fixed definitions instead of a transport, for tests and static flags. */
|
|
106
|
+
readonly definitions?: readonly FlagDefinition[];
|
|
107
|
+
/**
|
|
108
|
+
* OpenFeature's `ErrorCode` enum (from `@openfeature/core` or
|
|
109
|
+
* `@openfeature/server-sdk`), so the provider's types match `Provider`.
|
|
110
|
+
*/
|
|
111
|
+
readonly errorCodes?: Readonly<Record<FlagErrorCode, Code>>;
|
|
112
|
+
readonly now?: () => number;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* The shape of an OpenFeature server `Provider`. Pass it to
|
|
116
|
+
* `OpenFeature.setProviderAndWait()`; this package never imports OpenFeature.
|
|
117
|
+
*/
|
|
118
|
+
interface FlagsProvider<Code extends string = FlagErrorCode> {
|
|
119
|
+
readonly metadata: {
|
|
120
|
+
readonly name: string;
|
|
121
|
+
};
|
|
122
|
+
readonly runsOn: "server";
|
|
123
|
+
initialize(context?: FlagContext): Promise<void>;
|
|
124
|
+
resolveBooleanEvaluation(flagKey: string, defaultValue: boolean, context: FlagContext): Promise<FlagResolution<boolean, Code>>;
|
|
125
|
+
resolveStringEvaluation(flagKey: string, defaultValue: string, context: FlagContext): Promise<FlagResolution<string, Code>>;
|
|
126
|
+
resolveNumberEvaluation(flagKey: string, defaultValue: number, context: FlagContext): Promise<FlagResolution<number, Code>>;
|
|
127
|
+
resolveObjectEvaluation<T extends FlagValue>(flagKey: string, defaultValue: T, context: FlagContext): Promise<FlagResolution<T, Code>>;
|
|
128
|
+
/** Drops the cache, so the next evaluation reloads the definitions. */
|
|
129
|
+
refresh(): void;
|
|
130
|
+
}
|
|
131
|
+
/** Feature flags from the `flags` module, as an OpenFeature provider. */
|
|
132
|
+
export declare function createFlagsProvider<Code extends string = FlagErrorCode>(options: FlagsProviderOptions<Code>): FlagsProvider<Code>;
|
|
133
|
+
/**
|
|
134
|
+
* The four `get*Details` methods that the OpenFeature server `Client` and
|
|
135
|
+
* the `FlagClient` of `@supabase-labs/middleware-openfeature` share.
|
|
136
|
+
*/
|
|
137
|
+
interface FlagClient<Code extends string = FlagErrorCode> {
|
|
138
|
+
getBooleanDetails(flagKey: string, defaultValue: boolean, context?: FlagContext): Promise<FlagDetails<boolean, Code>>;
|
|
139
|
+
getStringDetails(flagKey: string, defaultValue: string, context?: FlagContext): Promise<FlagDetails<string, Code>>;
|
|
140
|
+
getNumberDetails(flagKey: string, defaultValue: number, context?: FlagContext): Promise<FlagDetails<number, Code>>;
|
|
141
|
+
getObjectDetails<T extends FlagValue>(flagKey: string, defaultValue: T, context?: FlagContext): Promise<FlagDetails<T, Code>>;
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* A flag client without the OpenFeature SDK: `withOpenFeature({ client })`
|
|
145
|
+
* from `@supabase-labs/middleware-openfeature` accepts it.
|
|
146
|
+
*/
|
|
147
|
+
export declare function createFlagClient<Code extends string = FlagErrorCode>(source: FlagsProvider<Code> | FlagsProviderOptions<Code>): FlagClient<Code>;
|
|
148
|
+
interface FlagContextSource {
|
|
149
|
+
/** `ctx.jwtClaims` from `withBetterSupabase`, or verified claims. */
|
|
150
|
+
readonly jwtClaims?: Readonly<Record<string, unknown>> | null | undefined;
|
|
151
|
+
/** The active tenant; default the `tenant_id` claim. */
|
|
152
|
+
readonly tenant?: string | null | undefined;
|
|
153
|
+
}
|
|
154
|
+
interface FlagContextOptions {
|
|
155
|
+
/** `config.claims.tenant`, default `tenant_id`. */
|
|
156
|
+
readonly tenantClaim?: string;
|
|
157
|
+
/** `config.claims.features`, default `features`. */
|
|
158
|
+
readonly featuresClaim?: string;
|
|
159
|
+
/** The claim the memberships hook writes, default `memberships`. */
|
|
160
|
+
readonly membershipsClaim?: string;
|
|
161
|
+
/**
|
|
162
|
+
* The scope of tenant memberships when the claim is a list of entries, as
|
|
163
|
+
* an authorization provider's hook may write it (`{ scope, id, roles }`). Without it, the entry
|
|
164
|
+
* for the tenant id that has no `within` (a root scope) is read.
|
|
165
|
+
*/
|
|
166
|
+
readonly membershipScope?: string;
|
|
167
|
+
/** Reads the caller's roles in `tenant` from claims of another shape. */
|
|
168
|
+
readonly roles?: (claims: Readonly<Record<string, unknown>>, tenant: string) => string | readonly string[] | undefined;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The evaluation context of a request: the user id as `targetingKey`, the
|
|
172
|
+
* tenant, its plan features (`features` claim) and the caller's roles in it
|
|
173
|
+
* (`memberships` claim, in the `tenant` module's or the list shape, or
|
|
174
|
+
* `options.roles`). Pass it as `context` to `withOpenFeature`.
|
|
175
|
+
*/
|
|
176
|
+
export declare function flagContext(source: FlagContextSource, options?: FlagContextOptions): RequestFlagContext;
|
|
177
|
+
//#endregion
|
|
178
|
+
//#region src/blocks/flags/admin.d.ts
|
|
179
|
+
interface FlagAdminOptions {
|
|
180
|
+
/**
|
|
181
|
+
* The caller's transport: `rpcTransport(supabase, { schema: "api" })` for
|
|
182
|
+
* platform staff over the Data API, or a service-role transport.
|
|
183
|
+
*/
|
|
184
|
+
readonly transport: BlockTransport;
|
|
185
|
+
/** The module schema (`sql.modules.flags.schema`), default `better_supabase`. */
|
|
186
|
+
readonly schema?: string;
|
|
187
|
+
readonly mappers?: readonly ErrorMapper[];
|
|
188
|
+
}
|
|
189
|
+
/** The fields `save` writes; the ones left out keep their value. */
|
|
190
|
+
interface FlagInput {
|
|
191
|
+
readonly type?: FlagType;
|
|
192
|
+
readonly description?: string | null;
|
|
193
|
+
readonly variants?: Readonly<Record<string, FlagValue>>;
|
|
194
|
+
readonly defaultVariant?: string;
|
|
195
|
+
readonly enabled?: boolean;
|
|
196
|
+
readonly rules?: readonly FlagRule[];
|
|
197
|
+
/** 0 to 100. */
|
|
198
|
+
readonly rolloutPercentage?: number;
|
|
199
|
+
readonly rolloutVariant?: string | null;
|
|
200
|
+
}
|
|
201
|
+
/** The override target: one tenant or one user. */
|
|
202
|
+
type FlagOverrideTarget = {
|
|
203
|
+
readonly organizationId: string;
|
|
204
|
+
readonly userId?: never;
|
|
205
|
+
} | {
|
|
206
|
+
readonly userId: string;
|
|
207
|
+
readonly organizationId?: never;
|
|
208
|
+
};
|
|
209
|
+
interface FlagAdmin {
|
|
210
|
+
/** Every flag with its overrides. */
|
|
211
|
+
list(): AsyncResult<readonly FlagDefinition[]>;
|
|
212
|
+
/** Creates or updates a flag; returns it as stored. */
|
|
213
|
+
save(key: string, input: FlagInput): AsyncResult<FlagDefinition | undefined>;
|
|
214
|
+
/** `false` when there was no such flag. */
|
|
215
|
+
remove(key: string): AsyncResult<boolean>;
|
|
216
|
+
/** Sets a tenant's or a user's variant; `null` removes the override. */
|
|
217
|
+
override(key: string, target: FlagOverrideTarget, variant: string | null): AsyncResult<boolean>;
|
|
218
|
+
}
|
|
219
|
+
/**
|
|
220
|
+
* Manages feature flags for platform staff (`flags.manage`) or the service
|
|
221
|
+
* role, through the `flags` module's `list_flags`, `save_flag`,
|
|
222
|
+
* `delete_flag` and `set_flag_override`.
|
|
223
|
+
*/
|
|
224
|
+
export declare function createFlagAdmin(options: FlagAdminOptions): FlagAdmin;
|
|
225
|
+
//#endregion
|
|
226
|
+
export { type BlockTransport, type FlagAdmin, type FlagAdminOptions, type FlagClient, type FlagContext, type FlagContextOptions, type FlagContextSource, type FlagDefinition, type FlagDetails, type FlagErrorCode, type FlagEvaluation, type FlagInput, type FlagOverride, type FlagOverrideTarget, type FlagReason, type FlagResolution, type FlagRule, type FlagType, type FlagValue, type FlagsProvider, type FlagsProviderOptions, type RequestFlagContext, rpcTransport, sqlTransport };
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { t as DEFAULT_CLAIMS } from "../../claims-PqzCxaTD.js";
|
|
2
|
+
import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
|
|
3
|
+
import { D as stringsOf, O as textOf, c as errorText, d as isRecord, h as optionalText, i as blockCall, n as applyTemporal, x as recordsOf } from "../../block-helpers-DWHxHsEQ.js";
|
|
4
|
+
//#region src/blocks/flags/flags.ts
|
|
5
|
+
const BUCKETS = 1e4;
|
|
6
|
+
/**
|
|
7
|
+
* The rollout bucket of `target` for `flag`, 0 to 9999: the first 32 bits
|
|
8
|
+
* of SHA-256(`flag.target`) modulo 10000. `better_supabase.flag_bucket()`
|
|
9
|
+
* computes the same number, so SQL and TypeScript agree on who is in.
|
|
10
|
+
*/
|
|
11
|
+
async function flagBucket(flag, target) {
|
|
12
|
+
const digest = await crypto.subtle.digest("SHA-256", new TextEncoder().encode(`${flag}.${target}`));
|
|
13
|
+
return new DataView(digest).getUint32(0) % BUCKETS;
|
|
14
|
+
}
|
|
15
|
+
const contains = (list, value) => list === void 0 || value !== void 0 && list.includes(value);
|
|
16
|
+
const anyIn = (list, values) => list === void 0 || values.some((value) => list.includes(value));
|
|
17
|
+
function ruleMatches(rule, context) {
|
|
18
|
+
return contains(rule.tenants, context.tenant) && contains(rule.users, context.targetingKey) && anyIn(rule.roles, [...context.role === void 0 ? [] : [context.role], ...context.roles ?? []]) && (rule.plans === void 0 || rule.plans.some((plan) => context.plans?.includes(plan) === true));
|
|
19
|
+
}
|
|
20
|
+
async function chooseVariant(flag, context) {
|
|
21
|
+
if (!flag.enabled) return {
|
|
22
|
+
variant: flag.defaultVariant,
|
|
23
|
+
reason: "DISABLED"
|
|
24
|
+
};
|
|
25
|
+
let chosen = (flag.overrides.find((entry) => entry.userId !== void 0 && entry.userId === context.targetingKey) ?? flag.overrides.find((entry) => entry.organizationId !== void 0 && entry.organizationId === context.tenant))?.variant;
|
|
26
|
+
let reason = chosen === void 0 ? "DEFAULT" : "TARGETING_MATCH";
|
|
27
|
+
if (chosen === void 0) {
|
|
28
|
+
const rule = flag.rules.find((entry) => ruleMatches(entry, context));
|
|
29
|
+
if (rule) {
|
|
30
|
+
chosen = rule.variant;
|
|
31
|
+
reason = "TARGETING_MATCH";
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
const target = context.targetingKey ?? context.tenant;
|
|
35
|
+
if (chosen === void 0 && flag.rolloutVariant !== void 0 && target !== void 0 && await flagBucket(flag.key, target) < flag.rolloutPercentage * 100) {
|
|
36
|
+
chosen = flag.rolloutVariant;
|
|
37
|
+
reason = "SPLIT";
|
|
38
|
+
}
|
|
39
|
+
if (chosen === void 0 || !Object.hasOwn(flag.variants, chosen)) return {
|
|
40
|
+
variant: flag.defaultVariant,
|
|
41
|
+
reason: "DEFAULT"
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
variant: chosen,
|
|
45
|
+
reason
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
/** Evaluates one flag as `better_supabase.flag_evaluation()` does. */
|
|
49
|
+
async function evaluateFlag(flag, context = {}) {
|
|
50
|
+
const { variant, reason } = await chooseVariant(flag, context);
|
|
51
|
+
return {
|
|
52
|
+
value: flag.variants[variant] ?? null,
|
|
53
|
+
variant,
|
|
54
|
+
reason
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
const FLAG_TYPES = /* @__PURE__ */ new Set([
|
|
58
|
+
"boolean",
|
|
59
|
+
"string",
|
|
60
|
+
"number",
|
|
61
|
+
"object"
|
|
62
|
+
]);
|
|
63
|
+
const flagTypeOf = (value) => {
|
|
64
|
+
const text = textOf(value);
|
|
65
|
+
return FLAG_TYPES.has(text) ? text : "boolean";
|
|
66
|
+
};
|
|
67
|
+
function ruleOf(value) {
|
|
68
|
+
if (!isRecord(value) || typeof value["variant"] !== "string") return void 0;
|
|
69
|
+
const list = (key) => Array.isArray(value[key]) ? stringsOf(value[key]) : void 0;
|
|
70
|
+
const tenants = list("tenants");
|
|
71
|
+
const users = list("users");
|
|
72
|
+
const plans = list("plans");
|
|
73
|
+
const roles = list("roles");
|
|
74
|
+
return {
|
|
75
|
+
variant: value["variant"],
|
|
76
|
+
...tenants && { tenants },
|
|
77
|
+
...users && { users },
|
|
78
|
+
...plans && { plans },
|
|
79
|
+
...roles && { roles }
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
/** Parses the rows of `flag_definitions()`. */
|
|
83
|
+
function flagDefinitionsOf(value) {
|
|
84
|
+
return recordsOf(value, "flag_definitions").map((row) => ({
|
|
85
|
+
key: textOf(row["key"]),
|
|
86
|
+
type: flagTypeOf(row["type"]),
|
|
87
|
+
variants: isRecord(row["variants"]) ? row["variants"] : {},
|
|
88
|
+
defaultVariant: optionalText(row["default_variant"]) ?? "",
|
|
89
|
+
enabled: row["enabled"] !== false,
|
|
90
|
+
rules: (Array.isArray(row["rules"]) ? row["rules"] : []).flatMap((rule) => {
|
|
91
|
+
const parsed = ruleOf(rule);
|
|
92
|
+
return parsed ? [parsed] : [];
|
|
93
|
+
}),
|
|
94
|
+
rolloutPercentage: Number(row["rollout_percentage"] ?? 0),
|
|
95
|
+
rolloutVariant: optionalText(row["rollout_variant"]),
|
|
96
|
+
overrides: recordsOf(row["overrides"] ?? [], "flag_definitions").map((entry) => ({
|
|
97
|
+
organizationId: optionalText(entry["organization_id"]),
|
|
98
|
+
userId: optionalText(entry["user_id"]),
|
|
99
|
+
variant: textOf(entry["variant"])
|
|
100
|
+
}))
|
|
101
|
+
}));
|
|
102
|
+
}
|
|
103
|
+
const DEFAULT_CODES = {
|
|
104
|
+
FLAG_NOT_FOUND: "FLAG_NOT_FOUND",
|
|
105
|
+
TYPE_MISMATCH: "TYPE_MISMATCH",
|
|
106
|
+
PROVIDER_NOT_READY: "PROVIDER_NOT_READY",
|
|
107
|
+
GENERAL: "GENERAL"
|
|
108
|
+
};
|
|
109
|
+
const isBoolean = (value) => typeof value === "boolean";
|
|
110
|
+
const isString = (value) => typeof value === "string";
|
|
111
|
+
const isNumber = (value) => typeof value === "number";
|
|
112
|
+
/** Feature flags from the `flags` module, as an OpenFeature provider. */
|
|
113
|
+
function createFlagsProvider(options) {
|
|
114
|
+
applyTemporal(options);
|
|
115
|
+
const { transport, definitions } = options;
|
|
116
|
+
const schema = options.schema ?? "better_supabase";
|
|
117
|
+
const fetchFlags = definitions ? () => Promise.resolve(definitions) : transport ? async () => flagDefinitionsOf(await transport.call(schema, "flag_definitions", {})) : void 0;
|
|
118
|
+
if (!fetchFlags) throw new TypeError("createFlagsProvider needs a transport or definitions");
|
|
119
|
+
const ttl = options.ttl ?? 3e4;
|
|
120
|
+
const now = options.now ?? Date.now;
|
|
121
|
+
const codes = options.errorCodes ?? DEFAULT_CODES;
|
|
122
|
+
let cache;
|
|
123
|
+
const load = () => {
|
|
124
|
+
if (cache && now() - cache.at < ttl) return cache.flags;
|
|
125
|
+
const flags = fetchFlags().then((list) => new Map(list.map((flag) => [flag.key, flag])));
|
|
126
|
+
const entry = {
|
|
127
|
+
at: now(),
|
|
128
|
+
flags
|
|
129
|
+
};
|
|
130
|
+
cache = entry;
|
|
131
|
+
flags.catch(() => {
|
|
132
|
+
if (cache === entry) cache = void 0;
|
|
133
|
+
});
|
|
134
|
+
return flags;
|
|
135
|
+
};
|
|
136
|
+
async function resolve(flagKey, defaultValue, context, check) {
|
|
137
|
+
let flags;
|
|
138
|
+
try {
|
|
139
|
+
flags = await load();
|
|
140
|
+
} catch (error) {
|
|
141
|
+
return {
|
|
142
|
+
value: defaultValue,
|
|
143
|
+
reason: "ERROR",
|
|
144
|
+
errorCode: codes.GENERAL,
|
|
145
|
+
errorMessage: errorText(error)
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
const flag = flags.get(flagKey);
|
|
149
|
+
if (!flag) return {
|
|
150
|
+
value: defaultValue,
|
|
151
|
+
reason: "ERROR",
|
|
152
|
+
errorCode: codes.FLAG_NOT_FOUND,
|
|
153
|
+
errorMessage: `Flag "${flagKey}" is not defined`
|
|
154
|
+
};
|
|
155
|
+
const result = await evaluateFlag(flag, context);
|
|
156
|
+
if (!check(result.value)) return {
|
|
157
|
+
value: defaultValue,
|
|
158
|
+
reason: "ERROR",
|
|
159
|
+
errorCode: codes.TYPE_MISMATCH,
|
|
160
|
+
errorMessage: `Flag "${flagKey}" is a ${flag.type} flag`
|
|
161
|
+
};
|
|
162
|
+
return {
|
|
163
|
+
value: result.value,
|
|
164
|
+
variant: result.variant,
|
|
165
|
+
reason: result.reason
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
return {
|
|
169
|
+
metadata: { name: "better-supabase" },
|
|
170
|
+
runsOn: "server",
|
|
171
|
+
async initialize() {
|
|
172
|
+
await load();
|
|
173
|
+
},
|
|
174
|
+
resolveBooleanEvaluation: (flagKey, defaultValue, context) => resolve(flagKey, defaultValue, context, isBoolean),
|
|
175
|
+
resolveStringEvaluation: (flagKey, defaultValue, context) => resolve(flagKey, defaultValue, context, isString),
|
|
176
|
+
resolveNumberEvaluation: (flagKey, defaultValue, context) => resolve(flagKey, defaultValue, context, isNumber),
|
|
177
|
+
resolveObjectEvaluation: (flagKey, defaultValue, context) => resolve(flagKey, defaultValue, context, (value) => typeof value === "object" && value !== null),
|
|
178
|
+
refresh() {
|
|
179
|
+
cache = void 0;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
const details = async (flagKey, resolution) => ({
|
|
184
|
+
flagKey,
|
|
185
|
+
flagMetadata: {},
|
|
186
|
+
...await resolution
|
|
187
|
+
});
|
|
188
|
+
/**
|
|
189
|
+
* A flag client without the OpenFeature SDK: `withOpenFeature({ client })`
|
|
190
|
+
* from `@supabase-labs/middleware-openfeature` accepts it.
|
|
191
|
+
*/
|
|
192
|
+
function createFlagClient(source) {
|
|
193
|
+
const provider = "resolveBooleanEvaluation" in source ? source : createFlagsProvider(source);
|
|
194
|
+
return {
|
|
195
|
+
getBooleanDetails: (flagKey, defaultValue, context = {}) => details(flagKey, provider.resolveBooleanEvaluation(flagKey, defaultValue, context)),
|
|
196
|
+
getStringDetails: (flagKey, defaultValue, context = {}) => details(flagKey, provider.resolveStringEvaluation(flagKey, defaultValue, context)),
|
|
197
|
+
getNumberDetails: (flagKey, defaultValue, context = {}) => details(flagKey, provider.resolveNumberEvaluation(flagKey, defaultValue, context)),
|
|
198
|
+
getObjectDetails: (flagKey, defaultValue, context = {}) => details(flagKey, provider.resolveObjectEvaluation(flagKey, defaultValue, context))
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The caller's roles in `tenant` from the memberships claim: an object of
|
|
203
|
+
* tenant id to role (the `tenant` module's hook), or a list of
|
|
204
|
+
* `{ scope, id, role | roles }` entries (an authorization provider's hook).
|
|
205
|
+
*/
|
|
206
|
+
function membershipRoles(memberships, tenant, scope) {
|
|
207
|
+
if (isRecord(memberships)) {
|
|
208
|
+
const role = optionalText(memberships[tenant]);
|
|
209
|
+
return role === void 0 ? [] : [role];
|
|
210
|
+
}
|
|
211
|
+
if (!Array.isArray(memberships)) return [];
|
|
212
|
+
const entry = memberships.find((item) => isRecord(item) && optionalText(item["id"]) === tenant && (scope === void 0 ? item["within"] === void 0 : optionalText(item["scope"]) === scope));
|
|
213
|
+
if (!entry) return [];
|
|
214
|
+
const role = optionalText(entry["role"]);
|
|
215
|
+
return [...role === void 0 ? [] : [role], ...stringsOf(entry["roles"])];
|
|
216
|
+
}
|
|
217
|
+
/**
|
|
218
|
+
* The evaluation context of a request: the user id as `targetingKey`, the
|
|
219
|
+
* tenant, its plan features (`features` claim) and the caller's roles in it
|
|
220
|
+
* (`memberships` claim, in the `tenant` module's or the list shape, or
|
|
221
|
+
* `options.roles`). Pass it as `context` to `withOpenFeature`.
|
|
222
|
+
*/
|
|
223
|
+
function flagContext(source, options = {}) {
|
|
224
|
+
const claims = source.jwtClaims ?? {};
|
|
225
|
+
const appMetadata = isRecord(claims["app_metadata"]) ? claims["app_metadata"] : {};
|
|
226
|
+
const tenantClaim = options.tenantClaim ?? DEFAULT_CLAIMS.tenant;
|
|
227
|
+
const tenant = source.tenant ?? optionalText(claims[tenantClaim]) ?? optionalText(appMetadata[tenantClaim]);
|
|
228
|
+
const sub = optionalText(claims["sub"]);
|
|
229
|
+
const features = claims[options.featuresClaim ?? DEFAULT_CLAIMS.features];
|
|
230
|
+
const memberships = claims[options.membershipsClaim ?? DEFAULT_CLAIMS.memberships];
|
|
231
|
+
const plans = tenant !== void 0 && isRecord(features) && Array.isArray(features[tenant]) ? [...stringsOf(features[tenant])] : void 0;
|
|
232
|
+
const resolved = tenant === void 0 ? void 0 : options.roles ? options.roles(claims, tenant) : membershipRoles(memberships, tenant, options.membershipScope);
|
|
233
|
+
const roles = resolved === void 0 ? [] : typeof resolved === "string" ? [resolved] : [...resolved];
|
|
234
|
+
return {
|
|
235
|
+
...sub !== void 0 && { targetingKey: sub },
|
|
236
|
+
...tenant !== void 0 && { tenant },
|
|
237
|
+
...plans !== void 0 && { plans },
|
|
238
|
+
...roles.length > 0 && { role: roles[0] },
|
|
239
|
+
...roles.length > 1 && { roles }
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
//#endregion
|
|
243
|
+
//#region src/blocks/flags/admin.ts
|
|
244
|
+
const rowOf = (input) => {
|
|
245
|
+
const row = {};
|
|
246
|
+
const set = (name, value) => {
|
|
247
|
+
if (value !== void 0) row[name] = value;
|
|
248
|
+
};
|
|
249
|
+
set("type", input.type);
|
|
250
|
+
set("description", input.description);
|
|
251
|
+
set("variants", input.variants);
|
|
252
|
+
set("default_variant", input.defaultVariant);
|
|
253
|
+
set("enabled", input.enabled);
|
|
254
|
+
set("rules", input.rules);
|
|
255
|
+
set("rollout_percentage", input.rolloutPercentage);
|
|
256
|
+
set("rollout_variant", input.rolloutVariant);
|
|
257
|
+
return row;
|
|
258
|
+
};
|
|
259
|
+
/**
|
|
260
|
+
* Manages feature flags for platform staff (`flags.manage`) or the service
|
|
261
|
+
* role, through the `flags` module's `list_flags`, `save_flag`,
|
|
262
|
+
* `delete_flag` and `set_flag_override`.
|
|
263
|
+
*/
|
|
264
|
+
function createFlagAdmin(options) {
|
|
265
|
+
const call = blockCall(options.transport, options.schema, options.mappers);
|
|
266
|
+
return {
|
|
267
|
+
list: () => call("list_flags", {}, flagDefinitionsOf),
|
|
268
|
+
save: (key, input) => call("save_flag", {
|
|
269
|
+
key,
|
|
270
|
+
definition: rowOf(input)
|
|
271
|
+
}, (value) => flagDefinitionsOf(value === null ? [] : [value])[0]),
|
|
272
|
+
remove: (key) => call("delete_flag", { key }, (value) => value === true),
|
|
273
|
+
override: (key, target, variant) => call("set_flag_override", {
|
|
274
|
+
key,
|
|
275
|
+
variant,
|
|
276
|
+
tenant: target.organizationId,
|
|
277
|
+
member: target.userId
|
|
278
|
+
}, (value) => value === true)
|
|
279
|
+
};
|
|
280
|
+
}
|
|
281
|
+
//#endregion
|
|
282
|
+
export { createFlagAdmin, createFlagClient, createFlagsProvider, evaluateFlag, flagBucket, flagContext, flagDefinitionsOf, rpcTransport, sqlTransport };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { i as sqlTransport, n as RpcClient, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
|
|
2
|
+
import { A as PurgedContact, C as InboxMessage, D as MessageDirection, E as MessageDelivery, O as MessageKind, S as InboxCounts, T as MessageAttachment, _ as ConversationPriority, a as Inbox, b as InboundResult, c as MessageInput, d as createInbox, f as AuthorType, g as ConversationEvent, h as Conversation, i as InboundInput, j as StoredInboundEvent, k as MessageTemplate, l as StartConversationInput, m as Contact, n as ConversationFilter, o as InboxOptions, p as BotMode, r as CreateInboxInput, s as InboxPatch, t as ContactInput, u as TemplateInput, v as ConversationStatus, w as InboxRow, x as InboxChannel, y as DeliveryStatus } from "../../inbox-i7E1ppo6.js";
|
|
3
|
+
//#region src/blocks/inbox/rows.d.ts
|
|
4
|
+
export declare const INBOX_CHANNELS: readonly InboxChannel[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { type AuthorType, type BlockTransport, type BotMode, type Contact, type ContactInput, type Conversation, type ConversationEvent, type ConversationFilter, type ConversationPriority, type ConversationStatus, type CreateInboxInput, type DeliveryStatus, type InboundInput, type InboundResult, type Inbox, type InboxChannel, type InboxCounts, type InboxMessage, type InboxOptions, type InboxPatch, type InboxRow, type MessageAttachment, type MessageDelivery, type MessageDirection, type MessageInput, type MessageKind, type MessageTemplate, type PurgedContact, type RpcClient, type StartConversationInput, type StoredInboundEvent, type TemplateInput, createInbox, rpcTransport, sqlTransport };
|