better-supabase 0.5.1 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +187 -46
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/{actor-DaJjqD5R.d.ts → actor-CQTlc1Hh.d.ts} +1 -1
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-C_A-KEAz.js → doctor-B4JOm_ox.js} +991 -317
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-DMa6M7hV.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect-BKlaIu_M.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-Bo_NLT5n.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BCtlgDQx.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-Bv7gvfzC.d.ts → config-D44Y7PAv.d.ts} +406 -214
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-CFPX0Qft.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-BiJZ4t49.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/{impersonation-BgSHAYLf.js → impersonation-DcqaTBHx.js} +21 -6
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/mfa-Daak8ukG.d.ts +54 -0
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bn6HNKUe.js → resolve-D_IcnvFd.js} +248 -240
- package/dist/{impersonation-BmePsuxz.d.ts → resolve-KW8nCeL6.d.ts} +29 -69
- package/dist/{resource-mqfJW4YF.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-DNRFP7KR.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -22
- package/dist/server/index.js +46 -14
- package/dist/{respond-BR1fJWOB.d.ts → server-CeVeeXwz.d.ts} +224 -85
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +313 -212
- package/dist/sql/index.js +34872 -6579
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-wHnK6zp-.js → support-BivNqSpK.js} +32 -11
- package/dist/{support-view-B8SlToQX.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +315 -41
- package/dist/testing/index.js +1046 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DOYTYwHP.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-CbgObAeb.d.ts → view-DbxLNu8L.d.ts} +22 -5
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +461 -20
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +20 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +47 -11
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-CIdSQZad.js +0 -2
- package/dist/cli/gen-CjElD1Vw.js +0 -2241
- package/dist/cli/read-sets-VQcPgxU9.js +0 -436
- package/dist/cli/sql-CVx-1O8G.js +0 -373
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/index-CWMDdEr4.d.ts +0 -50
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dp2VDwog.d.ts +0 -161
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/mfa-Cu96oJdw.d.ts +0 -30
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-B1mZ7CgQ.js +0 -660
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-CEPwlw2G.d.ts +0 -89
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -122
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
|
|
3
|
+
import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
|
|
4
|
+
import { r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
|
|
5
|
+
import { n as Embedder } from "./knowledge-BXBbT0Tr.js";
|
|
6
|
+
//#region src/blocks/memory/types.d.ts
|
|
7
|
+
type MemoryScope = "user" | "agent" | "chat" | "project" | "organization";
|
|
8
|
+
type MemoryKind = "core" | "archival";
|
|
9
|
+
/**
|
|
10
|
+
* Whose memory a call reads or changes. The default is the caller's own
|
|
11
|
+
* memory; `organization` memory is shared and only admins change it. The
|
|
12
|
+
* `project` scope takes a `projectId` (an ai-chat project) and no other
|
|
13
|
+
* scope does. The service role names the user in `ownerId`.
|
|
14
|
+
*/
|
|
15
|
+
interface MemoryNamespace {
|
|
16
|
+
readonly scope?: MemoryScope;
|
|
17
|
+
readonly agentId?: string;
|
|
18
|
+
readonly chatId?: string;
|
|
19
|
+
readonly projectId?: string;
|
|
20
|
+
readonly ownerId?: string;
|
|
21
|
+
}
|
|
22
|
+
interface MemoryRecord {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly organizationId: string;
|
|
25
|
+
readonly ownerId: string | undefined;
|
|
26
|
+
readonly scope: MemoryScope;
|
|
27
|
+
readonly agentId: string | undefined;
|
|
28
|
+
readonly chatId: string | undefined;
|
|
29
|
+
readonly projectId: string | undefined;
|
|
30
|
+
readonly kind: MemoryKind;
|
|
31
|
+
/** A path under `/memories`, for core memory. */
|
|
32
|
+
readonly path: string | undefined;
|
|
33
|
+
readonly content: string;
|
|
34
|
+
readonly version: number;
|
|
35
|
+
readonly embeddingModel: string | undefined;
|
|
36
|
+
readonly sourceMessageId: string | undefined;
|
|
37
|
+
readonly createdAt: Temporal.Instant;
|
|
38
|
+
readonly updatedAt: Temporal.Instant;
|
|
39
|
+
}
|
|
40
|
+
interface MemoryHit extends MemoryRecord {
|
|
41
|
+
readonly score: number;
|
|
42
|
+
/** Cosine similarity to the query embedding, when both have one. */
|
|
43
|
+
readonly similarity: number | undefined;
|
|
44
|
+
}
|
|
45
|
+
type MemoryView = {
|
|
46
|
+
readonly type: "file";
|
|
47
|
+
readonly path: string;
|
|
48
|
+
readonly content: string;
|
|
49
|
+
readonly version: number;
|
|
50
|
+
} | {
|
|
51
|
+
readonly type: "directory";
|
|
52
|
+
readonly path: string;
|
|
53
|
+
readonly entries: readonly {
|
|
54
|
+
readonly path: string;
|
|
55
|
+
readonly size: number;
|
|
56
|
+
}[];
|
|
57
|
+
};
|
|
58
|
+
/** The commands of Anthropic's memory tool (`memory_20250818`). */
|
|
59
|
+
type MemoryCommand = {
|
|
60
|
+
readonly command: "view";
|
|
61
|
+
readonly path: string;
|
|
62
|
+
readonly view_range?: readonly [number, number];
|
|
63
|
+
} | {
|
|
64
|
+
readonly command: "create";
|
|
65
|
+
readonly path: string;
|
|
66
|
+
readonly file_text: string;
|
|
67
|
+
} | {
|
|
68
|
+
readonly command: "str_replace";
|
|
69
|
+
readonly path: string;
|
|
70
|
+
readonly old_str: string;
|
|
71
|
+
readonly new_str?: string;
|
|
72
|
+
} | {
|
|
73
|
+
readonly command: "insert";
|
|
74
|
+
readonly path: string;
|
|
75
|
+
readonly insert_line: number;
|
|
76
|
+
readonly insert_text: string;
|
|
77
|
+
} | {
|
|
78
|
+
readonly command: "delete";
|
|
79
|
+
readonly path: string;
|
|
80
|
+
} | {
|
|
81
|
+
readonly command: "rename";
|
|
82
|
+
readonly old_path: string;
|
|
83
|
+
readonly new_path: string;
|
|
84
|
+
};
|
|
85
|
+
interface RecalledMessage {
|
|
86
|
+
readonly chatId: string;
|
|
87
|
+
readonly messageId: string;
|
|
88
|
+
readonly similarity: number;
|
|
89
|
+
}
|
|
90
|
+
interface MemoryOptions extends BlockTemporalOptions {
|
|
91
|
+
/** Calls as the user: `rpcTransport(supabase)`. */
|
|
92
|
+
readonly transport: BlockTransport;
|
|
93
|
+
/** Calls as the service role, for embeddings and extracted memories. */
|
|
94
|
+
readonly service?: BlockTransport;
|
|
95
|
+
/** The module schema (`sql.modules.memory.schema`), default `better_supabase`. */
|
|
96
|
+
readonly schema?: string;
|
|
97
|
+
readonly mappers?: readonly ErrorMapper[];
|
|
98
|
+
/** Embeds archival memories, messages and queries. */
|
|
99
|
+
readonly embedder?: Embedder;
|
|
100
|
+
/** The most characters `render` returns. Default 8000. */
|
|
101
|
+
readonly maxRender?: number;
|
|
102
|
+
/** `saveExtracted` skips a fact this similar to a saved one. Default 0.92. */
|
|
103
|
+
readonly dedupeThreshold?: number;
|
|
104
|
+
}
|
|
105
|
+
interface Memory {
|
|
106
|
+
readonly core: {
|
|
107
|
+
view(organizationId: string, path?: string, ns?: MemoryNamespace): AsyncResult<MemoryView | undefined>;
|
|
108
|
+
/** Creates or overwrites a file; `expectedVersion` 0 means it must be new. */
|
|
109
|
+
write(organizationId: string, path: string, content: string, ns?: MemoryNamespace, options?: {
|
|
110
|
+
readonly expectedVersion?: number;
|
|
111
|
+
}): AsyncResult<MemoryRecord>;
|
|
112
|
+
strReplace(organizationId: string, path: string, oldText: string, newText: string, ns?: MemoryNamespace): AsyncResult<MemoryRecord>;
|
|
113
|
+
insert(organizationId: string, path: string, line: number, text: string, ns?: MemoryNamespace): AsyncResult<MemoryRecord>;
|
|
114
|
+
/** Deletes a file or a directory. Returns how many files. */
|
|
115
|
+
remove(organizationId: string, path: string, ns?: MemoryNamespace): AsyncResult<number>;
|
|
116
|
+
rename(organizationId: string, oldPath: string, newPath: string, ns?: MemoryNamespace): AsyncResult<number>;
|
|
117
|
+
list(organizationId: string, ns?: MemoryNamespace): AsyncResult<readonly MemoryRecord[]>;
|
|
118
|
+
};
|
|
119
|
+
/** Runs a memory tool command and returns the text for the model. */
|
|
120
|
+
run(organizationId: string, command: MemoryCommand, ns?: MemoryNamespace): AsyncResult<string>;
|
|
121
|
+
readonly archival: {
|
|
122
|
+
save(organizationId: string, content: string, ns?: MemoryNamespace, options?: {
|
|
123
|
+
readonly sourceMessageId?: string;
|
|
124
|
+
}): AsyncResult<MemoryRecord>;
|
|
125
|
+
search(organizationId: string, query: string, ns?: MemoryNamespace, options?: {
|
|
126
|
+
readonly k?: number;
|
|
127
|
+
readonly signal?: AbortSignal;
|
|
128
|
+
}): AsyncResult<readonly MemoryHit[]>;
|
|
129
|
+
list(organizationId: string, ns?: MemoryNamespace, options?: {
|
|
130
|
+
readonly limit?: number;
|
|
131
|
+
}): AsyncResult<readonly MemoryRecord[]>;
|
|
132
|
+
/** Deletes a memory, or marks it replaced by `supersededBy`. */
|
|
133
|
+
forget(memoryId: string, options?: {
|
|
134
|
+
readonly supersededBy?: string;
|
|
135
|
+
}): AsyncResult<boolean>;
|
|
136
|
+
};
|
|
137
|
+
readonly recall: {
|
|
138
|
+
/** Embeds a message so later chats can recall it (service role). */
|
|
139
|
+
index(message: {
|
|
140
|
+
readonly organizationId: string;
|
|
141
|
+
readonly chatId: string;
|
|
142
|
+
readonly messageId: string;
|
|
143
|
+
readonly userId: string;
|
|
144
|
+
readonly text: string;
|
|
145
|
+
}): AsyncResult<boolean>;
|
|
146
|
+
/** The caller's earlier messages closest to `query`. */
|
|
147
|
+
search(organizationId: string, query: string, options?: {
|
|
148
|
+
readonly k?: number;
|
|
149
|
+
readonly excludeChat?: string;
|
|
150
|
+
/** The service role only: whose messages. */
|
|
151
|
+
readonly ownerId?: string;
|
|
152
|
+
readonly signal?: AbortSignal;
|
|
153
|
+
}): AsyncResult<readonly RecalledMessage[]>;
|
|
154
|
+
};
|
|
155
|
+
/**
|
|
156
|
+
* Core memory as delimited text for a system prompt, cut at
|
|
157
|
+
* `maxRender` characters. Empty when there is none.
|
|
158
|
+
*/
|
|
159
|
+
render(organizationId: string, ns?: MemoryNamespace): AsyncResult<string>;
|
|
160
|
+
/** Saves facts that aren't already remembered. Returns the new ones. */
|
|
161
|
+
saveExtracted(organizationId: string, facts: readonly string[], ns?: MemoryNamespace, options?: {
|
|
162
|
+
readonly sourceMessageId?: string;
|
|
163
|
+
}): AsyncResult<readonly MemoryRecord[]>;
|
|
164
|
+
/** Embeds memories edited since their last embedding (service role). Returns how many. */
|
|
165
|
+
embedPending(options?: {
|
|
166
|
+
readonly batch?: number;
|
|
167
|
+
readonly signal?: AbortSignal;
|
|
168
|
+
}): AsyncResult<number>;
|
|
169
|
+
/**
|
|
170
|
+
* Documents under an opaque scope key, for agent runtimes (service role).
|
|
171
|
+
* A write names the version it read; a stale one fails with the hint
|
|
172
|
+
* `MEMORY_DOCUMENT_CONFLICT`.
|
|
173
|
+
*/
|
|
174
|
+
readonly documents: {
|
|
175
|
+
read(scopeKey: string, path: string): AsyncResult<MemoryDocument | undefined>;
|
|
176
|
+
/** `expectedVersion: null` means the document must not exist yet. */
|
|
177
|
+
write(scopeKey: string, path: string, content: string, options: {
|
|
178
|
+
readonly expectedVersion: string | null;
|
|
179
|
+
/** Seconds until the document expires. */
|
|
180
|
+
readonly expiresIn?: number;
|
|
181
|
+
}): AsyncResult<MemoryDocument>;
|
|
182
|
+
/** Deletes expired documents, at most `batch`. Returns how many. */
|
|
183
|
+
purge(batch?: number): AsyncResult<number>;
|
|
184
|
+
};
|
|
185
|
+
}
|
|
186
|
+
interface MemoryDocument {
|
|
187
|
+
readonly content: string;
|
|
188
|
+
/** Opaque; pass it back as `expectedVersion`. */
|
|
189
|
+
readonly version: string;
|
|
190
|
+
}
|
|
191
|
+
//#endregion
|
|
192
|
+
export { MemoryKind as a, MemoryRecord as c, RecalledMessage as d, MemoryHit as i, MemoryScope as l, MemoryCommand as n, MemoryNamespace as o, MemoryDocument as r, MemoryOptions as s, Memory as t, MemoryView as u };
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
|
|
3
|
+
import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
|
|
4
|
+
import { i as CredentialRef, r as CredentialProvider } from "./provider-BH5UWZJ6.js";
|
|
5
|
+
import { i as CursorPageOptions, r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
|
|
6
|
+
//#region src/blocks/ai-providers/types.d.ts
|
|
7
|
+
/** A tenant's own key for a provider. The key itself stays in the credential provider. */
|
|
8
|
+
interface AiProviderKey {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly organizationId: string;
|
|
11
|
+
/** The AI Gateway's provider slug, such as `anthropic` or `openai`. */
|
|
12
|
+
readonly provider: string;
|
|
13
|
+
/** Tells several keys of one provider apart; `default` unless named. */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
readonly credentialRef: CredentialRef;
|
|
16
|
+
/** The provider's other options, such as a region; never a secret. */
|
|
17
|
+
readonly settings: Readonly<Record<string, unknown>>;
|
|
18
|
+
readonly enabled: boolean;
|
|
19
|
+
readonly createdBy: string | undefined;
|
|
20
|
+
readonly createdAt: Temporal.Instant;
|
|
21
|
+
readonly updatedAt: Temporal.Instant;
|
|
22
|
+
}
|
|
23
|
+
interface AiProviderKeyInput {
|
|
24
|
+
readonly provider: string;
|
|
25
|
+
/** Store the key first, for example with `vaultCredentials().set(ref, apiKey)`. */
|
|
26
|
+
readonly credentialRef: CredentialRef;
|
|
27
|
+
readonly name?: string;
|
|
28
|
+
readonly settings?: Readonly<Record<string, unknown>>;
|
|
29
|
+
readonly enabled?: boolean;
|
|
30
|
+
}
|
|
31
|
+
/** A key resolved for one request. */
|
|
32
|
+
interface ResolvedProviderKey {
|
|
33
|
+
readonly provider: string;
|
|
34
|
+
readonly name: string;
|
|
35
|
+
readonly token: string;
|
|
36
|
+
readonly headers: Readonly<Record<string, string>>;
|
|
37
|
+
readonly settings: Readonly<Record<string, unknown>>;
|
|
38
|
+
}
|
|
39
|
+
type AiBatchStatus = "pending" | "completed" | "failed" | "cancelled";
|
|
40
|
+
interface AiBatchCounts {
|
|
41
|
+
readonly total?: number;
|
|
42
|
+
readonly pending?: number;
|
|
43
|
+
readonly completed?: number;
|
|
44
|
+
readonly failed?: number;
|
|
45
|
+
}
|
|
46
|
+
interface AiBatch {
|
|
47
|
+
readonly id: string;
|
|
48
|
+
readonly organizationId: string;
|
|
49
|
+
readonly userId: string | undefined;
|
|
50
|
+
readonly provider: string;
|
|
51
|
+
/** The SDK's batch reference, such as `{ version, id, provider }`. */
|
|
52
|
+
readonly reference: Readonly<Record<string, unknown>>;
|
|
53
|
+
readonly status: AiBatchStatus;
|
|
54
|
+
/** The provider's own status word. */
|
|
55
|
+
readonly rawStatus: string | undefined;
|
|
56
|
+
readonly itemCount: number;
|
|
57
|
+
readonly counts: AiBatchCounts;
|
|
58
|
+
readonly error: string | undefined;
|
|
59
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
60
|
+
/** The results are in `items`. */
|
|
61
|
+
readonly resultsSaved: boolean;
|
|
62
|
+
readonly polls: number;
|
|
63
|
+
readonly nextPollAt: Temporal.Instant | undefined;
|
|
64
|
+
readonly expiresAt: Temporal.Instant | undefined;
|
|
65
|
+
readonly completedAt: Temporal.Instant | undefined;
|
|
66
|
+
readonly createdAt: Temporal.Instant;
|
|
67
|
+
readonly updatedAt: Temporal.Instant;
|
|
68
|
+
}
|
|
69
|
+
interface NewAiBatch {
|
|
70
|
+
readonly provider: string;
|
|
71
|
+
readonly reference: Readonly<Record<string, unknown>>;
|
|
72
|
+
readonly itemCount?: number;
|
|
73
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
74
|
+
/** Service role only: the user the batch is for. */
|
|
75
|
+
readonly userId?: string;
|
|
76
|
+
readonly status?: AiBatchStatus;
|
|
77
|
+
readonly rawStatus?: string;
|
|
78
|
+
readonly counts?: AiBatchCounts;
|
|
79
|
+
readonly expiresAt?: Temporal.Instant;
|
|
80
|
+
}
|
|
81
|
+
interface AiBatchPatch {
|
|
82
|
+
readonly status?: AiBatchStatus;
|
|
83
|
+
readonly rawStatus?: string;
|
|
84
|
+
readonly counts?: AiBatchCounts;
|
|
85
|
+
readonly error?: string | null;
|
|
86
|
+
readonly expiresAt?: Temporal.Instant;
|
|
87
|
+
readonly resultsSaved?: boolean;
|
|
88
|
+
/** `null` stops polling. */
|
|
89
|
+
readonly nextPollAt?: Temporal.Instant | null;
|
|
90
|
+
}
|
|
91
|
+
type AiBatchItemStatus = "succeeded" | "failed" | "cancelled" | "expired";
|
|
92
|
+
interface AiBatchItem {
|
|
93
|
+
readonly batchId: string;
|
|
94
|
+
readonly requestId: string;
|
|
95
|
+
readonly organizationId: string;
|
|
96
|
+
readonly status: AiBatchItemStatus;
|
|
97
|
+
readonly output: unknown;
|
|
98
|
+
readonly usage: unknown;
|
|
99
|
+
readonly error: string | undefined;
|
|
100
|
+
readonly createdAt: Temporal.Instant;
|
|
101
|
+
}
|
|
102
|
+
interface AiBatchItemInput {
|
|
103
|
+
readonly requestId: string;
|
|
104
|
+
readonly status: AiBatchItemStatus;
|
|
105
|
+
readonly output?: unknown;
|
|
106
|
+
readonly usage?: unknown;
|
|
107
|
+
readonly error?: string;
|
|
108
|
+
}
|
|
109
|
+
interface AiProvidersOptions extends BlockTemporalOptions {
|
|
110
|
+
/** Calls as the user: `rpcTransport(supabase)`. */
|
|
111
|
+
readonly transport: BlockTransport;
|
|
112
|
+
/** Calls as the service role, for resolving keys, polling and the idle stop. */
|
|
113
|
+
readonly service?: BlockTransport;
|
|
114
|
+
/** Resolves and revokes the keys' credential refs. */
|
|
115
|
+
readonly credentials?: CredentialProvider;
|
|
116
|
+
/** The module schema (`sql.modules.ai-providers.schema`), default `better_supabase`. */
|
|
117
|
+
readonly schema?: string;
|
|
118
|
+
readonly mappers?: readonly ErrorMapper[];
|
|
119
|
+
}
|
|
120
|
+
interface AiProviders {
|
|
121
|
+
readonly keys: {
|
|
122
|
+
list(organizationId: string): AsyncResult<readonly AiProviderKey[]>;
|
|
123
|
+
/** Adds or replaces a key (`ai.admin`), and revokes the credential it replaced. */
|
|
124
|
+
save(organizationId: string, key: AiProviderKeyInput): AsyncResult<AiProviderKey>;
|
|
125
|
+
/** Deletes a key and revokes its credential. `false` when there was none. */
|
|
126
|
+
remove(keyId: string): AsyncResult<boolean>;
|
|
127
|
+
/**
|
|
128
|
+
* Deletes every key of a tenant and revokes each credential (service
|
|
129
|
+
* role): the step to run when a tenant is deleted. Returns how many.
|
|
130
|
+
*/
|
|
131
|
+
removeAll(organizationId: string): AsyncResult<number>;
|
|
132
|
+
/** The tenant's enabled keys with their tokens, for one request (service role). */
|
|
133
|
+
resolve(organizationId: string, options?: {
|
|
134
|
+
readonly providers?: readonly string[];
|
|
135
|
+
readonly signal?: AbortSignal;
|
|
136
|
+
}): AsyncResult<readonly ResolvedProviderKey[]>;
|
|
137
|
+
};
|
|
138
|
+
readonly batches: {
|
|
139
|
+
record(organizationId: string, batch: NewAiBatch): AsyncResult<AiBatch>;
|
|
140
|
+
get(batchId: string): AsyncResult<AiBatch | undefined>;
|
|
141
|
+
list(organizationId: string, options?: {
|
|
142
|
+
readonly status?: AiBatchStatus;
|
|
143
|
+
readonly limit?: number;
|
|
144
|
+
}): AsyncResult<readonly AiBatch[]>;
|
|
145
|
+
items(batchId: string, options?: CursorPageOptions<string>): AsyncResult<readonly AiBatchItem[]>;
|
|
146
|
+
/** Claims batches to poll for `leaseSeconds` (service role). */
|
|
147
|
+
due(options?: {
|
|
148
|
+
readonly batch?: number;
|
|
149
|
+
readonly leaseSeconds?: number;
|
|
150
|
+
}): AsyncResult<readonly AiBatch[]>;
|
|
151
|
+
update(batchId: string, patch: AiBatchPatch): AsyncResult<AiBatch>;
|
|
152
|
+
saveItems(batchId: string, items: readonly AiBatchItemInput[]): AsyncResult<number>;
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
//#endregion
|
|
156
|
+
export { AiBatchItemStatus as a, AiProviderKey as c, AiProvidersOptions as d, NewAiBatch as f, AiBatchItemInput as i, AiProviderKeyInput as l, AiBatchCounts as n, AiBatchPatch as o, ResolvedProviderKey as p, AiBatchItem as r, AiBatchStatus as s, AiBatch as t, AiProviders as u };
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { t as AsyncResult, w as ErrorMapper } from "./result-D7y2fT87.js";
|
|
3
|
+
import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
|
|
4
|
+
import { i as CursorPageOptions, r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
|
|
5
|
+
import { n as StripeSource } from "./stripe-D04h-QBT.js";
|
|
6
|
+
//#region src/blocks/usage/usage.d.ts
|
|
7
|
+
interface UsageOptions extends BlockTemporalOptions {
|
|
8
|
+
readonly transport: BlockTransport;
|
|
9
|
+
/** The module schema (`sql.modules.usage.schema`), default `better_supabase`. */
|
|
10
|
+
readonly schema?: string;
|
|
11
|
+
readonly mappers?: readonly ErrorMapper[];
|
|
12
|
+
}
|
|
13
|
+
interface RecordUsageOptions {
|
|
14
|
+
/** Default 1. */
|
|
15
|
+
readonly quantity?: number;
|
|
16
|
+
/** A retried call with the same key counts once. */
|
|
17
|
+
readonly idempotencyKey?: string;
|
|
18
|
+
/**
|
|
19
|
+
* What used it, such as `feature:summary` or `api:/v1/search`, kept in the
|
|
20
|
+
* history with `sql.modules.usage.options.history`.
|
|
21
|
+
*/
|
|
22
|
+
readonly source?: string;
|
|
23
|
+
/** More detail for the history entry, such as a document id. */
|
|
24
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
25
|
+
/**
|
|
26
|
+
* Who used it, for a service transport recording on a user's behalf.
|
|
27
|
+
* Ignored for other callers, whose own user id is recorded.
|
|
28
|
+
*/
|
|
29
|
+
readonly actor?: string;
|
|
30
|
+
}
|
|
31
|
+
/** One meter of a batch. */
|
|
32
|
+
interface UsageEntry {
|
|
33
|
+
readonly meter: string;
|
|
34
|
+
/** Default 1. */
|
|
35
|
+
readonly quantity?: number;
|
|
36
|
+
}
|
|
37
|
+
interface UsageBatchRecorded {
|
|
38
|
+
/** False when the idempotency key was seen before for every meter. */
|
|
39
|
+
readonly recorded: boolean;
|
|
40
|
+
/** Today's usage per meter (UTC). */
|
|
41
|
+
readonly today: Readonly<Record<string, number>>;
|
|
42
|
+
/** Usage per meter in its quota's current period, as `current()` reports it. */
|
|
43
|
+
readonly used: Readonly<Record<string, number>>;
|
|
44
|
+
}
|
|
45
|
+
/** One entry of the usage history. */
|
|
46
|
+
interface UsageHistoryEntry {
|
|
47
|
+
readonly id: number;
|
|
48
|
+
readonly meter: string;
|
|
49
|
+
readonly quantity: number;
|
|
50
|
+
/** The user who used it, or `undefined` for service usage without one. */
|
|
51
|
+
readonly actor: string | undefined;
|
|
52
|
+
readonly source: string | undefined;
|
|
53
|
+
readonly metadata: Readonly<Record<string, unknown>>;
|
|
54
|
+
readonly recordedAt: Temporal.Instant;
|
|
55
|
+
}
|
|
56
|
+
/** Usage of a meter in its current window per actor and source. */
|
|
57
|
+
interface UsageBreakdownEntry {
|
|
58
|
+
readonly actor: string | undefined;
|
|
59
|
+
readonly source: string | undefined;
|
|
60
|
+
readonly quantity: number;
|
|
61
|
+
}
|
|
62
|
+
interface UsageHistoryOptions extends CursorPageOptions<number> {
|
|
63
|
+
readonly meter?: string;
|
|
64
|
+
/** Defaults to 100, at most 1000. */
|
|
65
|
+
readonly limit?: number;
|
|
66
|
+
/** Only entries with a lower id, for the next page. */
|
|
67
|
+
readonly cursor?: number;
|
|
68
|
+
}
|
|
69
|
+
interface UsageRecorded {
|
|
70
|
+
/** False when the idempotency key was seen before. */
|
|
71
|
+
readonly recorded: boolean;
|
|
72
|
+
/** Today's usage of the meter (UTC). */
|
|
73
|
+
readonly today: number;
|
|
74
|
+
/** Usage in the quota's current period, as `current()` reports it. */
|
|
75
|
+
readonly used: number;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* A quota period: a UTC calendar period, or `billing` for the window the
|
|
79
|
+
* app's `usage_billing_period(tenant)` function returns.
|
|
80
|
+
*/
|
|
81
|
+
type UsagePeriod = "day" | "week" | "month" | "year" | "billing";
|
|
82
|
+
/** One meter of `sql.modules.usage.options.meters`. */
|
|
83
|
+
interface UsageMeterInfo {
|
|
84
|
+
readonly unit?: string;
|
|
85
|
+
readonly category?: string;
|
|
86
|
+
readonly label?: string;
|
|
87
|
+
}
|
|
88
|
+
interface UsageStatus {
|
|
89
|
+
readonly meter: string;
|
|
90
|
+
/** Usage in the current period. */
|
|
91
|
+
readonly used: number;
|
|
92
|
+
/** `undefined` without a quota and for an unlimited one. */
|
|
93
|
+
readonly limit: number | undefined;
|
|
94
|
+
readonly remaining: number | undefined;
|
|
95
|
+
readonly unlimited: boolean;
|
|
96
|
+
readonly period: UsagePeriod;
|
|
97
|
+
/** When the current period started. */
|
|
98
|
+
readonly startsAt: Temporal.Instant | undefined;
|
|
99
|
+
readonly resetsAt: Temporal.Instant;
|
|
100
|
+
/** From the meter catalog, when the module has one. */
|
|
101
|
+
readonly unit?: string;
|
|
102
|
+
readonly category?: string;
|
|
103
|
+
readonly label?: string;
|
|
104
|
+
}
|
|
105
|
+
interface Usage {
|
|
106
|
+
/** Adds usage without checking the quota (metering only). */
|
|
107
|
+
record(organizationId: string, meter: string, options?: RecordUsageOptions): AsyncResult<UsageRecorded>;
|
|
108
|
+
/** Adds usage when it fits the quota, or returns `quota_exceeded`. */
|
|
109
|
+
consume(organizationId: string, meter: string, options?: RecordUsageOptions): AsyncResult<UsageRecorded>;
|
|
110
|
+
/**
|
|
111
|
+
* Adds several meters in one transaction, all or none, such as input and
|
|
112
|
+
* output tokens of one call. The idempotency key covers the batch.
|
|
113
|
+
*/
|
|
114
|
+
recordMany(organizationId: string, entries: readonly UsageEntry[], options?: Omit<RecordUsageOptions, "quantity">): AsyncResult<UsageBatchRecorded>;
|
|
115
|
+
/**
|
|
116
|
+
* Like `recordMany`, but checks each meter's quota first; when one doesn't
|
|
117
|
+
* fit, nothing is recorded and the result is `quota_exceeded`.
|
|
118
|
+
*/
|
|
119
|
+
consumeMany(organizationId: string, entries: readonly UsageEntry[], options?: Omit<RecordUsageOptions, "quantity">): AsyncResult<UsageBatchRecorded>;
|
|
120
|
+
current(organizationId: string, meter: string): AsyncResult<UsageStatus>;
|
|
121
|
+
overview(organizationId: string): AsyncResult<readonly UsageStatus[]>;
|
|
122
|
+
/** Units left in the period, or `undefined` without a quota. */
|
|
123
|
+
remaining(organizationId: string, meter: string): AsyncResult<number | undefined>;
|
|
124
|
+
/** The meter catalog (`options.meters`), empty without one. */
|
|
125
|
+
meters(): AsyncResult<Readonly<Record<string, UsageMeterInfo>>>;
|
|
126
|
+
/**
|
|
127
|
+
* The tenant's usage entries, newest first, with who and what used each
|
|
128
|
+
* (`usage.read`). Empty without `sql.modules.usage.options.history`.
|
|
129
|
+
*/
|
|
130
|
+
history(organizationId: string, options?: UsageHistoryOptions): AsyncResult<readonly UsageHistoryEntry[]>;
|
|
131
|
+
/**
|
|
132
|
+
* The meter's usage in its current quota window per actor and source,
|
|
133
|
+
* largest first (`usage.read`). Empty without the history option.
|
|
134
|
+
*/
|
|
135
|
+
breakdown(organizationId: string, meter: string): AsyncResult<readonly UsageBreakdownEntry[]>;
|
|
136
|
+
}
|
|
137
|
+
/** Usage metering and quotas over the `usage` module's functions. */
|
|
138
|
+
declare function createUsage(options: UsageOptions): Usage;
|
|
139
|
+
interface ReportUsageOptions {
|
|
140
|
+
/** A service-role transport: the reporting functions are granted to `service_role` only. */
|
|
141
|
+
readonly transport: BlockTransport;
|
|
142
|
+
readonly stripe: StripeSource;
|
|
143
|
+
readonly schema?: string;
|
|
144
|
+
/** The Stripe meter's `event_name` for a meter; default the meter itself. */
|
|
145
|
+
readonly eventName?: (meter: string) => string | undefined;
|
|
146
|
+
/**
|
|
147
|
+
* The tenant's Stripe customer. Default: `tenant_stripe_customer()` from
|
|
148
|
+
* the `entitlements` module (`config.entitlements.customer`).
|
|
149
|
+
*/
|
|
150
|
+
readonly customer?: (organizationId: string) => Promise<string | undefined>;
|
|
151
|
+
/** Counters per run, default 500. */
|
|
152
|
+
readonly batch?: number;
|
|
153
|
+
/**
|
|
154
|
+
* Send only the usage above the tenant's quota (the allowance its plan
|
|
155
|
+
* includes) in each quota window, instead of every unit. A meter without
|
|
156
|
+
* a quota sends everything, and one with an unlimited quota sends nothing.
|
|
157
|
+
*/
|
|
158
|
+
readonly overage?: boolean;
|
|
159
|
+
}
|
|
160
|
+
interface ReportUsageResult {
|
|
161
|
+
/** Meter events sent; usage inside the quota with `overage` is marked without one. */
|
|
162
|
+
readonly reported: number;
|
|
163
|
+
/**
|
|
164
|
+
* Counters left for a later run: no customer, or no event name. They don't
|
|
165
|
+
* hold up the other counters of the batch.
|
|
166
|
+
*/
|
|
167
|
+
readonly skipped: number;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Sends unreported usage to Stripe as meter events, one per counter and
|
|
171
|
+
* delta. The event `identifier` is the tenant, meter, day and new total, so
|
|
172
|
+
* a run that fails after sending and before marking resends the same event,
|
|
173
|
+
* and Stripe drops the duplicate. Run it from a job or a cron route.
|
|
174
|
+
*/
|
|
175
|
+
declare function reportUsageToStripe(options: ReportUsageOptions): Promise<ReportUsageResult>;
|
|
176
|
+
//#endregion
|
|
177
|
+
export { UsageBatchRecorded as a, UsageHistoryEntry as c, UsageOptions as d, UsagePeriod as f, reportUsageToStripe as g, createUsage as h, Usage as i, UsageHistoryOptions as l, UsageStatus as m, ReportUsageOptions as n, UsageBreakdownEntry as o, UsageRecorded as p, ReportUsageResult as r, UsageEntry as s, RecordUsageOptions as t, UsageMeterInfo as u };
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
//#region src/query/invalidate.ts
|
|
2
|
+
function isString(value) {
|
|
3
|
+
return typeof value === "string";
|
|
4
|
+
}
|
|
5
|
+
function queryTables(query) {
|
|
6
|
+
const tables = query.meta?.["bsTables"];
|
|
7
|
+
if (Array.isArray(tables)) {
|
|
8
|
+
const list = tables;
|
|
9
|
+
return list.every(isString) ? list : list.filter(isString);
|
|
10
|
+
}
|
|
11
|
+
const [prefix, table] = query.queryKey;
|
|
12
|
+
return prefix === "bs" && typeof table === "string" ? [table] : void 0;
|
|
13
|
+
}
|
|
14
|
+
const indexes = /* @__PURE__ */ new WeakMap();
|
|
15
|
+
function indexOf(cache) {
|
|
16
|
+
const existing = indexes.get(cache);
|
|
17
|
+
if (existing) return existing;
|
|
18
|
+
const index = {
|
|
19
|
+
byTable: /* @__PURE__ */ new Map(),
|
|
20
|
+
tablesOf: /* @__PURE__ */ new Map()
|
|
21
|
+
};
|
|
22
|
+
const remove = (hash) => {
|
|
23
|
+
for (const table of index.tablesOf.get(hash) ?? []) {
|
|
24
|
+
const set = index.byTable.get(table);
|
|
25
|
+
set?.delete(hash);
|
|
26
|
+
if (set?.size === 0) index.byTable.delete(table);
|
|
27
|
+
}
|
|
28
|
+
index.tablesOf.delete(hash);
|
|
29
|
+
};
|
|
30
|
+
const add = (hash) => {
|
|
31
|
+
const query = cache.get(hash);
|
|
32
|
+
const tables = query ? queryTables(query) : void 0;
|
|
33
|
+
const known = index.tablesOf.get(hash);
|
|
34
|
+
if (known !== void 0 && tables !== void 0 && known.length === tables.length && known.every((table, at) => table === tables[at])) return;
|
|
35
|
+
remove(hash);
|
|
36
|
+
if (!tables || tables.length === 0) return;
|
|
37
|
+
index.tablesOf.set(hash, tables);
|
|
38
|
+
for (const table of tables) {
|
|
39
|
+
let set = index.byTable.get(table);
|
|
40
|
+
if (!set) index.byTable.set(table, set = /* @__PURE__ */ new Set());
|
|
41
|
+
set.add(hash);
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
for (const query of cache.getAll()) add(query.queryHash);
|
|
45
|
+
cache.subscribe((event) => {
|
|
46
|
+
const hash = event.query.queryHash;
|
|
47
|
+
if (event.type === "removed") remove(hash);
|
|
48
|
+
else if (event.type === "added" || event.type === "observerAdded" || event.type === "observerOptionsUpdated" || event.type === "updated" && event.action.type === "fetch") add(hash);
|
|
49
|
+
});
|
|
50
|
+
indexes.set(cache, index);
|
|
51
|
+
return index;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Invalidates every query that read one of `tables`: better-supabase queries
|
|
55
|
+
* by their `meta.bsTables`, and other `['bs', table, ...]` keys by prefix.
|
|
56
|
+
* An index from table to queries finds them, so a write to a table nothing
|
|
57
|
+
* read skips the cache scan.
|
|
58
|
+
*/
|
|
59
|
+
function invalidateTables(client, tables) {
|
|
60
|
+
if (tables.length === 0) return Promise.resolve();
|
|
61
|
+
const { byTable } = indexOf(client.getQueryCache());
|
|
62
|
+
const matched = /* @__PURE__ */ new Set();
|
|
63
|
+
for (const table of tables) for (const hash of byTable.get(table) ?? []) matched.add(hash);
|
|
64
|
+
if (matched.size === 0) return Promise.resolve();
|
|
65
|
+
return client.invalidateQueries({ predicate: (query) => matched.has(query.queryHash) });
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
//#region src/query/user-change.ts
|
|
69
|
+
/** Claims every refresh changes; the rest says who the caller is and what RLS lets them read. */
|
|
70
|
+
const TIME_CLAIMS = /* @__PURE__ */ new Set([
|
|
71
|
+
"exp",
|
|
72
|
+
"iat",
|
|
73
|
+
"nbf",
|
|
74
|
+
"jti"
|
|
75
|
+
]);
|
|
76
|
+
/**
|
|
77
|
+
* The user plus every claim except the time claims, so a token refresh keeps
|
|
78
|
+
* the identity and an organization switch, a role change or a second factor
|
|
79
|
+
* (a new `tenant_id`, `role` or `aal`) changes it.
|
|
80
|
+
*/
|
|
81
|
+
function identityKey(snapshot) {
|
|
82
|
+
if (!snapshot.user) return null;
|
|
83
|
+
const claims = Object.entries(snapshot.claims ?? {}).filter(([key]) => !TIME_CLAIMS.has(key)).toSorted(([a], [b]) => a < b ? -1 : a > b ? 1 : 0);
|
|
84
|
+
return JSON.stringify([snapshot.user.id, claims]);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Resets every `['bs', ...]` query when the caller changes: another user,
|
|
88
|
+
* signing out, or new claims for the same user (an organization switch, a
|
|
89
|
+
* role change). Mounted queries refetch, so no one sees the previous
|
|
90
|
+
* identity's rows. Returns the function that stops listening.
|
|
91
|
+
* `BetterSupabaseProvider` calls it for React; call it yourself with Vue,
|
|
92
|
+
* Solid, Svelte or Angular Query.
|
|
93
|
+
*
|
|
94
|
+
* Queries that fetched while the session was still loading ran as anon, so
|
|
95
|
+
* they are reset when a user arrives. Data already in the cache when loading
|
|
96
|
+
* started (hydrated from the server) stays.
|
|
97
|
+
*
|
|
98
|
+
* ```ts
|
|
99
|
+
* const stop = clearOnUserChange(queryClient, bs.auth);
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
function clearOnUserChange(queryClient, auth) {
|
|
103
|
+
let identity;
|
|
104
|
+
let before;
|
|
105
|
+
const bsQueries = () => queryClient.getQueryCache().findAll({ queryKey: ["bs"] });
|
|
106
|
+
const check = () => {
|
|
107
|
+
const snapshot = auth.current();
|
|
108
|
+
if (snapshot.status === "loading") {
|
|
109
|
+
before ??= new Map(bsQueries().map((query) => [query.queryHash, query.state.dataUpdatedAt]));
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
const next = identityKey(snapshot);
|
|
113
|
+
if (identity !== void 0 && identity !== next) queryClient.resetQueries({ queryKey: ["bs"] });
|
|
114
|
+
else if (identity === void 0 && next !== null && before) {
|
|
115
|
+
const known = before;
|
|
116
|
+
const fetchedAsAnon = new Set(bsQueries().filter((query) => query.state.dataUpdatedAt > 0 && known.get(query.queryHash) !== query.state.dataUpdatedAt).map((query) => query.queryHash));
|
|
117
|
+
if (fetchedAsAnon.size > 0) queryClient.resetQueries({
|
|
118
|
+
queryKey: ["bs"],
|
|
119
|
+
predicate: (query) => fetchedAsAnon.has(query.queryHash)
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
before = void 0;
|
|
123
|
+
identity = next;
|
|
124
|
+
};
|
|
125
|
+
const stop = auth.subscribe(check);
|
|
126
|
+
check();
|
|
127
|
+
return stop;
|
|
128
|
+
}
|
|
129
|
+
//#endregion
|
|
130
|
+
export { identityKey as n, invalidateTables as r, clearOnUserChange as t };
|