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
package/dist/orpc/index.js
CHANGED
|
@@ -1,7 +1,39 @@
|
|
|
1
|
-
import { r as dbErrorOf } from "../errors-
|
|
2
|
-
import { o as toProblem } from "../problem-
|
|
3
|
-
import {
|
|
1
|
+
import { r as dbErrorOf } from "../errors-B11Duf73.js";
|
|
2
|
+
import { o as toProblem } from "../problem-BreOl8b8.js";
|
|
3
|
+
import { i as claimsOf } from "../claims-PqzCxaTD.js";
|
|
4
|
+
import { t as tenantOf } from "../tenant-I1TEZ_BX.js";
|
|
5
|
+
import { c as extendServer, n as flushEvents, s as createServer, y as refreshFor } from "../adapter-Bc1o3zyy.js";
|
|
6
|
+
import { n as toSession } from "../view-BeFcRV6G.js";
|
|
7
|
+
import { o as settle, r as guard, t as defaultExpose } from "../respond-BUgsXNgk.js";
|
|
8
|
+
import { t as authorizeCaller } from "../kit-Fm-Fv7q5.js";
|
|
9
|
+
import { bufferRequest, pipeline, seedContext } from "@supabase/middleware";
|
|
4
10
|
import { COMMON_ERROR_STATUS_MAP, ORPCError, os } from "@orpc/server";
|
|
11
|
+
//#region src/bridges/orpc.ts
|
|
12
|
+
/**
|
|
13
|
+
* Runs an entry array around an oRPC fetch handler. The procedures' initial
|
|
14
|
+
* context is `{ request }` plus every contributed key, and the response
|
|
15
|
+
* passes back through the entries, so refreshed cookies and response-phase
|
|
16
|
+
* headers reach it. A request no procedure matched answers 404.
|
|
17
|
+
*
|
|
18
|
+
* ```ts
|
|
19
|
+
* const os = implement(contract).$context<{ request: Request; db: Db }>()
|
|
20
|
+
* export default { fetch: toOrpc([withBetterSupabase(server)], new RPCHandler(router), { prefix: '/rpc' }) }
|
|
21
|
+
* ```
|
|
22
|
+
*/
|
|
23
|
+
function toOrpc(entries, handler, options = {}) {
|
|
24
|
+
const run = pipeline(entries, async (request, ctx) => {
|
|
25
|
+
const { response } = await handler.handle(request, {
|
|
26
|
+
...options.prefix ? { prefix: options.prefix } : {},
|
|
27
|
+
context: {
|
|
28
|
+
...ctx,
|
|
29
|
+
request
|
|
30
|
+
}
|
|
31
|
+
});
|
|
32
|
+
return response ?? new Response("Not found", { status: 404 });
|
|
33
|
+
});
|
|
34
|
+
return (request, env) => run(request.body ? bufferRequest(request) : request, seedContext(env));
|
|
35
|
+
}
|
|
36
|
+
//#endregion
|
|
5
37
|
//#region src/orpc/index.ts
|
|
6
38
|
const CODES = /* @__PURE__ */ new Map(Object.entries(COMMON_ERROR_STATUS_MAP).map(([code, status]) => [status, code]));
|
|
7
39
|
/** oRPC code for a `DbError`, from its HTTP status. */
|
|
@@ -12,6 +44,7 @@ function orpcCode(error) {
|
|
|
12
44
|
function createOrpc(betterSupabase, options = {}) {
|
|
13
45
|
const server = createServer(betterSupabase, options);
|
|
14
46
|
const expose = options.exposeErrors ?? defaultExpose();
|
|
47
|
+
const tenantClaim = claimsOf(betterSupabase.meta).tenant;
|
|
15
48
|
const contexts = /* @__PURE__ */ new WeakMap();
|
|
16
49
|
const toOrpcError = (error) => {
|
|
17
50
|
const problem = toProblem(error, { expose });
|
|
@@ -20,35 +53,51 @@ function createOrpc(betterSupabase, options = {}) {
|
|
|
20
53
|
data: problem
|
|
21
54
|
});
|
|
22
55
|
};
|
|
56
|
+
const middleware = (middlewareOptions = {}) => {
|
|
57
|
+
return os.$context().middleware(async ({ context, next }) => {
|
|
58
|
+
const refresh = refreshFor(middlewareOptions.refresh, context.request) ?? false;
|
|
59
|
+
const known = contexts.get(context.request);
|
|
60
|
+
const ctx = known && (known.refresh || !refresh) ? known.ctx : await server.context(context.request, { refresh });
|
|
61
|
+
contexts.set(context.request, {
|
|
62
|
+
ctx,
|
|
63
|
+
refresh: refresh || (known?.refresh ?? false)
|
|
64
|
+
});
|
|
65
|
+
const denied = guard(ctx.auth, middlewareOptions.allow, middlewareOptions.aal, middlewareOptions.scopes);
|
|
66
|
+
if (denied) throw toOrpcError(denied);
|
|
67
|
+
if (middlewareOptions.requireTenant || middlewareOptions.authorize) {
|
|
68
|
+
const caller = await authorizeCaller(ctx.auth, middlewareOptions, void 0, tenantOf(toSession(ctx.auth), tenantClaim));
|
|
69
|
+
if ("kind" in caller) throw toOrpcError(caller);
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
return await next({ context: {
|
|
73
|
+
bs: ctx,
|
|
74
|
+
db: ctx.db,
|
|
75
|
+
auth: ctx.auth
|
|
76
|
+
} });
|
|
77
|
+
} catch (cause) {
|
|
78
|
+
const thrown = dbErrorOf(cause);
|
|
79
|
+
if (thrown) throw toOrpcError(thrown);
|
|
80
|
+
throw cause;
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
};
|
|
23
84
|
return extendServer(server, {
|
|
24
85
|
toOrpcError,
|
|
25
|
-
middleware
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const denied = guard(ctx.auth, middlewareOptions.allow, middlewareOptions.aal, middlewareOptions.scopes);
|
|
29
|
-
if (denied) throw toOrpcError(denied);
|
|
30
|
-
contexts.set(context.request, ctx);
|
|
31
|
-
try {
|
|
32
|
-
return await next({ context: {
|
|
33
|
-
bs: ctx,
|
|
34
|
-
db: ctx.db,
|
|
35
|
-
auth: ctx.auth
|
|
36
|
-
} });
|
|
37
|
-
} catch (cause) {
|
|
38
|
-
const thrown = dbErrorOf(cause);
|
|
39
|
-
if (thrown) throw toOrpcError(thrown);
|
|
40
|
-
throw cause;
|
|
41
|
-
}
|
|
42
|
-
});
|
|
86
|
+
middleware,
|
|
87
|
+
authed(authedOptions) {
|
|
88
|
+
return os.$context().use(middleware(authedOptions));
|
|
43
89
|
},
|
|
44
90
|
fetchHandler(handler, fetchOptions = {}) {
|
|
45
|
-
return async (request) => {
|
|
91
|
+
return async (request, _env, executionContext) => {
|
|
46
92
|
const { response } = await handler.handle(request, {
|
|
47
93
|
...fetchOptions.prefix ? { prefix: fetchOptions.prefix } : {},
|
|
48
94
|
context: { request }
|
|
49
95
|
});
|
|
50
|
-
const ctx = contexts.get(request);
|
|
96
|
+
const ctx = contexts.get(request)?.ctx;
|
|
51
97
|
const answer = response ?? new Response("Not found", { status: 404 });
|
|
98
|
+
flushEvents(server, options.waitUntil ?? (executionContext ? (promise) => {
|
|
99
|
+
executionContext.waitUntil(promise);
|
|
100
|
+
} : void 0));
|
|
52
101
|
return ctx ? ctx.apply(answer) : answer;
|
|
53
102
|
};
|
|
54
103
|
},
|
|
@@ -60,4 +109,4 @@ function createOrpc(betterSupabase, options = {}) {
|
|
|
60
109
|
});
|
|
61
110
|
}
|
|
62
111
|
//#endregion
|
|
63
|
-
export { createOrpc, orpcCode };
|
|
112
|
+
export { createOrpc, orpcCode, toOrpc };
|
package/dist/otel/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import { t as SPEC_PINS } from "../spec-pins-
|
|
1
|
+
import { d as Plugin } from "../plugin-FGY8UhYm.js";
|
|
2
|
+
import { a as EventHub } from "../events-DWDhx77e.js";
|
|
3
|
+
import { t as SPEC_PINS } from "../spec-pins-C89s6DyW.js";
|
|
4
4
|
import { Attributes, Meter, Tracer } from "@opentelemetry/api";
|
|
5
5
|
//#region src/otel/index.d.ts
|
|
6
6
|
export declare const INSTRUMENTATION_NAME = "better-supabase";
|
|
@@ -42,12 +42,12 @@ export declare function traceAuth(betterSupabase: {
|
|
|
42
42
|
readonly events: EventHub;
|
|
43
43
|
}, options?: Pick<OtelOptions, "tracer" | "attributes">): () => void;
|
|
44
44
|
/**
|
|
45
|
-
* Records
|
|
46
|
-
* `
|
|
47
|
-
* `
|
|
45
|
+
* Records block events (`support.started`, `webhook.failed`, ...) with the
|
|
46
|
+
* `BLOCK_ATTRIBUTES` names: as an event on the active span, or as a short
|
|
47
|
+
* `block <type>` span when there is none. Failures (`*.failed`, `*.denied`)
|
|
48
48
|
* set an error status. Returns a function that stops listening.
|
|
49
49
|
*/
|
|
50
|
-
export declare function
|
|
50
|
+
export declare function traceBlockEvents(betterSupabase: {
|
|
51
51
|
readonly events: EventHub;
|
|
52
52
|
}, options?: Pick<OtelOptions, "tracer" | "attributes">): () => void;
|
|
53
53
|
/**
|
package/dist/otel/index.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { r as definePlugin } from "../plugin-
|
|
2
|
-
import { t as SPEC_PINS } from "../spec-pins
|
|
3
|
-
import { r as
|
|
4
|
-
import "../version-
|
|
1
|
+
import { r as definePlugin } from "../plugin-tfXW1-qO.js";
|
|
2
|
+
import { t as SPEC_PINS } from "../spec-pins--j6mTok4.js";
|
|
3
|
+
import { r as blockEventAttributes } from "../block-events-CrT8r7Fe.js";
|
|
4
|
+
import "../version-Bvv6aLjZ.js";
|
|
5
5
|
import { SpanKind, SpanStatusCode, context, metrics, propagation, trace } from "@opentelemetry/api";
|
|
6
6
|
//#region src/otel/index.ts
|
|
7
7
|
const INSTRUMENTATION_NAME = "better-supabase";
|
|
@@ -40,9 +40,9 @@ function systemOf(executor) {
|
|
|
40
40
|
* ```
|
|
41
41
|
*/
|
|
42
42
|
function otel(options = {}) {
|
|
43
|
-
const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.
|
|
43
|
+
const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.6.0");
|
|
44
44
|
let histogram;
|
|
45
|
-
if (options.metrics !== false) histogram = (options.meter ?? metrics.getMeter("better-supabase", "0.
|
|
45
|
+
if (options.metrics !== false) histogram = (options.meter ?? metrics.getMeter("better-supabase", "0.6.0")).createHistogram("db.client.operation.duration", {
|
|
46
46
|
unit: "s",
|
|
47
47
|
description: "Duration of database client operations.",
|
|
48
48
|
advice: { explicitBucketBoundaries: [
|
|
@@ -95,53 +95,83 @@ function otel(options = {}) {
|
|
|
95
95
|
}
|
|
96
96
|
return entry;
|
|
97
97
|
};
|
|
98
|
+
const failed = (span, error) => {
|
|
99
|
+
span.setAttributes({
|
|
100
|
+
"error.type": error.kind,
|
|
101
|
+
...error.code && SQLSTATE.test(error.code) ? { "db.response.status_code": error.code } : {}
|
|
102
|
+
});
|
|
103
|
+
span.setStatus({
|
|
104
|
+
code: SpanStatusCode.ERROR,
|
|
105
|
+
message: error.message
|
|
106
|
+
});
|
|
107
|
+
return error.kind;
|
|
108
|
+
};
|
|
109
|
+
/** Runs `run` in a client span; `settle` returns the error type, if any. */
|
|
110
|
+
const traced = (summary, attributes, metric, run, settle) => {
|
|
111
|
+
const started = performance.now();
|
|
112
|
+
return tracer.startActiveSpan(summary, {
|
|
113
|
+
kind: SpanKind.CLIENT,
|
|
114
|
+
attributes
|
|
115
|
+
}, async (span) => {
|
|
116
|
+
const finish = (errorType) => {
|
|
117
|
+
histogram?.record((performance.now() - started) / 1e3, errorType ? {
|
|
118
|
+
...metric,
|
|
119
|
+
"error.type": errorType
|
|
120
|
+
} : metric);
|
|
121
|
+
span.end();
|
|
122
|
+
};
|
|
123
|
+
try {
|
|
124
|
+
const result = await run();
|
|
125
|
+
finish(settle(span, result));
|
|
126
|
+
return result;
|
|
127
|
+
} catch (cause) {
|
|
128
|
+
const error = cause instanceof Error ? cause : new Error(String(cause));
|
|
129
|
+
span.recordException(error);
|
|
130
|
+
span.setAttribute("error.type", error.name);
|
|
131
|
+
span.setStatus({
|
|
132
|
+
code: SpanStatusCode.ERROR,
|
|
133
|
+
message: error.message
|
|
134
|
+
});
|
|
135
|
+
finish(error.name);
|
|
136
|
+
throw cause;
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
};
|
|
140
|
+
const base = {
|
|
141
|
+
...options.attributes,
|
|
142
|
+
"db.system.name": system,
|
|
143
|
+
"better_supabase.executor": executor.name,
|
|
144
|
+
...server
|
|
145
|
+
};
|
|
146
|
+
const baseMetric = {
|
|
147
|
+
...server,
|
|
148
|
+
"db.system.name": system
|
|
149
|
+
};
|
|
150
|
+
const rpc = executor.rpc?.bind(executor);
|
|
98
151
|
return {
|
|
99
152
|
...executor,
|
|
100
153
|
name: executor.name,
|
|
101
154
|
execute(op, executeContext) {
|
|
102
155
|
const { summary, attributes, metric } = describe(op);
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
attributes
|
|
107
|
-
}, async (span) => {
|
|
108
|
-
const finish = (errorType) => {
|
|
109
|
-
histogram?.record((performance.now() - started) / 1e3, errorType ? {
|
|
110
|
-
...metric,
|
|
111
|
-
"error.type": errorType
|
|
112
|
-
} : metric);
|
|
113
|
-
span.end();
|
|
114
|
-
};
|
|
115
|
-
try {
|
|
116
|
-
const result = await executor.execute(op, executeContext);
|
|
117
|
-
if (result.ok) {
|
|
118
|
-
if (span.isRecording()) span.setAttribute("db.response.returned_rows", result.data.rows.length);
|
|
119
|
-
finish();
|
|
120
|
-
} else {
|
|
121
|
-
span.setAttributes({
|
|
122
|
-
"error.type": result.error.kind,
|
|
123
|
-
...result.error.code && SQLSTATE.test(result.error.code) ? { "db.response.status_code": result.error.code } : {}
|
|
124
|
-
});
|
|
125
|
-
span.setStatus({
|
|
126
|
-
code: SpanStatusCode.ERROR,
|
|
127
|
-
message: result.error.message
|
|
128
|
-
});
|
|
129
|
-
finish(result.error.kind);
|
|
130
|
-
}
|
|
131
|
-
return result;
|
|
132
|
-
} catch (cause) {
|
|
133
|
-
const error = cause instanceof Error ? cause : new Error(String(cause));
|
|
134
|
-
span.recordException(error);
|
|
135
|
-
span.setAttribute("error.type", error.name);
|
|
136
|
-
span.setStatus({
|
|
137
|
-
code: SpanStatusCode.ERROR,
|
|
138
|
-
message: error.message
|
|
139
|
-
});
|
|
140
|
-
finish(error.name);
|
|
141
|
-
throw cause;
|
|
142
|
-
}
|
|
156
|
+
return traced(summary, attributes, metric, () => executor.execute(op, executeContext), (span, result) => {
|
|
157
|
+
if (!result.ok) return failed(span, result.error);
|
|
158
|
+
if (span.isRecording()) span.setAttribute("db.response.returned_rows", result.data.rows.length);
|
|
143
159
|
});
|
|
144
|
-
}
|
|
160
|
+
},
|
|
161
|
+
...rpc ? { rpc(name, args, rpcContext) {
|
|
162
|
+
const summary = `EXECUTE ${name}`;
|
|
163
|
+
return traced(summary, {
|
|
164
|
+
...base,
|
|
165
|
+
"db.namespace": database ? `${database}|${rpcContext.schema}` : rpcContext.schema,
|
|
166
|
+
"db.operation.name": "EXECUTE",
|
|
167
|
+
"db.stored_procedure.name": name,
|
|
168
|
+
"db.query.summary": summary
|
|
169
|
+
}, {
|
|
170
|
+
...baseMetric,
|
|
171
|
+
"db.operation.name": "EXECUTE",
|
|
172
|
+
"db.stored_procedure.name": name
|
|
173
|
+
}, () => rpc(name, args, rpcContext), (span, result) => result.ok ? void 0 : failed(span, result.error));
|
|
174
|
+
} } : {}
|
|
145
175
|
};
|
|
146
176
|
}
|
|
147
177
|
});
|
|
@@ -151,7 +181,7 @@ function otel(options = {}) {
|
|
|
151
181
|
* Returns a function that stops listening.
|
|
152
182
|
*/
|
|
153
183
|
function traceAuth(betterSupabase, options = {}) {
|
|
154
|
-
const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.
|
|
184
|
+
const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.6.0");
|
|
155
185
|
const offAuth = betterSupabase.events.on("auth", (event) => {
|
|
156
186
|
const span = tracer.startSpan("auth.resolve", {
|
|
157
187
|
kind: SpanKind.INTERNAL,
|
|
@@ -183,17 +213,17 @@ function traceAuth(betterSupabase, options = {}) {
|
|
|
183
213
|
};
|
|
184
214
|
}
|
|
185
215
|
/**
|
|
186
|
-
* Records
|
|
187
|
-
* `
|
|
188
|
-
* `
|
|
216
|
+
* Records block events (`support.started`, `webhook.failed`, ...) with the
|
|
217
|
+
* `BLOCK_ATTRIBUTES` names: as an event on the active span, or as a short
|
|
218
|
+
* `block <type>` span when there is none. Failures (`*.failed`, `*.denied`)
|
|
189
219
|
* set an error status. Returns a function that stops listening.
|
|
190
220
|
*/
|
|
191
|
-
function
|
|
192
|
-
const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.
|
|
193
|
-
return betterSupabase.events.on("
|
|
221
|
+
function traceBlockEvents(betterSupabase, options = {}) {
|
|
222
|
+
const tracer = options.tracer ?? trace.getTracer("better-supabase", "0.6.0");
|
|
223
|
+
return betterSupabase.events.on("block", (event) => {
|
|
194
224
|
const attributes = {
|
|
195
225
|
...options.attributes,
|
|
196
|
-
...
|
|
226
|
+
...blockEventAttributes(event)
|
|
197
227
|
};
|
|
198
228
|
const failed = event.type.endsWith(".failed") || event.type.endsWith(".denied");
|
|
199
229
|
const active = trace.getActiveSpan();
|
|
@@ -201,7 +231,7 @@ function traceKitEvents(betterSupabase, options = {}) {
|
|
|
201
231
|
active.addEvent(event.type, attributes);
|
|
202
232
|
return;
|
|
203
233
|
}
|
|
204
|
-
const span = tracer.startSpan(`
|
|
234
|
+
const span = tracer.startSpan(`block ${event.type}`, {
|
|
205
235
|
kind: SpanKind.INTERNAL,
|
|
206
236
|
attributes
|
|
207
237
|
});
|
|
@@ -227,4 +257,4 @@ function tracedFetch(base = fetch) {
|
|
|
227
257
|
};
|
|
228
258
|
}
|
|
229
259
|
//#endregion
|
|
230
|
-
export { INSTRUMENTATION_NAME, SEMCONV_VERSION, otel, traceAuth,
|
|
260
|
+
export { INSTRUMENTATION_NAME, SEMCONV_VERSION, otel, traceAuth, traceBlockEvents, tracedFetch };
|
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { b as DbError, t as AsyncResult } from "./result-D7y2fT87.js";
|
|
3
|
+
import { t as SqlClient } from "./executor-DbvExCFC.js";
|
|
4
|
+
import { t as BlockTransport } from "./block-transport-DvaoPuZ9.js";
|
|
5
|
+
import { i as CursorPageOptions, r as BlockTemporalOptions } from "./block-helpers-CKtbFcRv.js";
|
|
6
|
+
import { t as BlockProblemOptions } from "./problem-DD8LZFjc.js";
|
|
7
|
+
import { r as EventSink, t as CloudEvent } from "./cloud-event-C1JCc1bH.js";
|
|
8
|
+
//#region src/blocks/outbox/outbox.d.ts
|
|
9
|
+
/** One row of the outbox, as `outbox_claim` and `outbox_history` return it. */
|
|
10
|
+
interface OutboxEvent {
|
|
11
|
+
/** The cursor value: increases with every event. */
|
|
12
|
+
readonly position: number;
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly type: string;
|
|
15
|
+
readonly payload: unknown;
|
|
16
|
+
/** The module or function that wrote it, e.g. `better-supabase/blocks/organizations`. */
|
|
17
|
+
readonly source: string | null;
|
|
18
|
+
readonly subject: string | null;
|
|
19
|
+
readonly tenant: string | null;
|
|
20
|
+
readonly key: string | null;
|
|
21
|
+
readonly actorId: string | null;
|
|
22
|
+
readonly createdAt: Temporal.Instant;
|
|
23
|
+
}
|
|
24
|
+
interface EmitOptions {
|
|
25
|
+
readonly subject?: string;
|
|
26
|
+
readonly tenant?: string;
|
|
27
|
+
/** With a key, emitting again (per tenant) returns the first event. */
|
|
28
|
+
readonly key?: string;
|
|
29
|
+
readonly source?: string;
|
|
30
|
+
}
|
|
31
|
+
interface OutboxOptions extends BlockTemporalOptions {
|
|
32
|
+
/** The schema of the `outbox` module. Defaults to `better_supabase`. */
|
|
33
|
+
readonly schema?: string;
|
|
34
|
+
/** CloudEvents `source` of the relayed events, e.g. `https://crm.example.com`. */
|
|
35
|
+
readonly source: string;
|
|
36
|
+
/** Prepended to each type with a dot when relaying, e.g. `com.example`. Defaults to `dev.better-supabase`. */
|
|
37
|
+
readonly typePrefix?: string;
|
|
38
|
+
}
|
|
39
|
+
interface RegisterOptions {
|
|
40
|
+
/** Type patterns such as `organization.*` or `invoice.paid`. Defaults to every event. */
|
|
41
|
+
readonly types?: readonly string[];
|
|
42
|
+
/** Start at the first kept event instead of after the latest one. */
|
|
43
|
+
readonly fromStart?: boolean;
|
|
44
|
+
}
|
|
45
|
+
interface RelayOptions {
|
|
46
|
+
/** Events per claim and per `sink.send`. Defaults to 100. */
|
|
47
|
+
readonly batch?: number;
|
|
48
|
+
/** How long a claim holds the consumer. Defaults to `1 minute`. */
|
|
49
|
+
readonly lease?: string;
|
|
50
|
+
/** Stops claiming after this many milliseconds. */
|
|
51
|
+
readonly budgetMs?: number;
|
|
52
|
+
/** Identifies this worker in the lease. Defaults to a random id. */
|
|
53
|
+
readonly owner?: string;
|
|
54
|
+
/**
|
|
55
|
+
* Failures in a row before the event that keeps failing goes to the dead
|
|
56
|
+
* letters and the cursor moves past it. Defaults to 10.
|
|
57
|
+
*/
|
|
58
|
+
readonly maxAttempts?: number;
|
|
59
|
+
/** The longest wait between failed attempts. Defaults to `10 minutes`. */
|
|
60
|
+
readonly maxBackoff?: string;
|
|
61
|
+
}
|
|
62
|
+
interface RelayResult {
|
|
63
|
+
readonly delivered: number;
|
|
64
|
+
/**
|
|
65
|
+
* Set when the sink threw: the consumer backs off and retries the batch
|
|
66
|
+
* one event at a time.
|
|
67
|
+
*/
|
|
68
|
+
readonly error?: DbError;
|
|
69
|
+
/** 1 when this run moved the failing event to the dead letters. */
|
|
70
|
+
readonly deadLettered?: number;
|
|
71
|
+
}
|
|
72
|
+
/** An event a consumer skipped after `maxAttempts` failures. */
|
|
73
|
+
interface OutboxDeadLetter {
|
|
74
|
+
readonly consumer: string;
|
|
75
|
+
readonly event: OutboxEvent;
|
|
76
|
+
readonly attempts: number;
|
|
77
|
+
readonly error: string | null;
|
|
78
|
+
readonly deadAt: Temporal.Instant;
|
|
79
|
+
}
|
|
80
|
+
interface OutboxPurgeOptions {
|
|
81
|
+
/**
|
|
82
|
+
* A consumer that hasn't claimed for this long (a Postgres interval such
|
|
83
|
+
* as `30 days`) no longer holds events back. Defaults to waiting for
|
|
84
|
+
* every consumer.
|
|
85
|
+
*/
|
|
86
|
+
readonly ignoreIdle?: string;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Takes a batch of outbox rows, with the actor and tenant that CloudEvents
|
|
90
|
+
* leave out. Throwing counts a failed attempt: the consumer backs off, then
|
|
91
|
+
* retries one event at a time until the event that fails goes to the dead
|
|
92
|
+
* letters.
|
|
93
|
+
*/
|
|
94
|
+
type OutboxHandler = (events: readonly OutboxEvent[]) => unknown;
|
|
95
|
+
interface OutboxRouteOptions extends Omit<RelayOptions, "owner">, BlockProblemOptions {
|
|
96
|
+
/** The bearer secret, such as `process.env.CRON_SECRET`. */
|
|
97
|
+
readonly secret: string | undefined;
|
|
98
|
+
/** Consumer name to the sink its events go to, or a handler that takes the rows. */
|
|
99
|
+
readonly consumers: Readonly<Record<string, EventSink | OutboxHandler>>;
|
|
100
|
+
readonly onError?: (error: DbError, consumer: string) => void;
|
|
101
|
+
}
|
|
102
|
+
interface OutboxRouteResult {
|
|
103
|
+
readonly consumers: Readonly<Record<string, RelayResult>>;
|
|
104
|
+
readonly budgetExhausted: boolean;
|
|
105
|
+
}
|
|
106
|
+
interface HistoryFilter extends CursorPageOptions<number> {
|
|
107
|
+
readonly subject?: string;
|
|
108
|
+
readonly type?: string;
|
|
109
|
+
/** Only events after this position. */
|
|
110
|
+
readonly cursor?: number;
|
|
111
|
+
readonly limit?: number;
|
|
112
|
+
}
|
|
113
|
+
interface Outbox {
|
|
114
|
+
/** Writes an event in the current transaction and returns its id. */
|
|
115
|
+
emit(type: string, payload?: unknown, options?: EmitOptions): AsyncResult<string>;
|
|
116
|
+
/** Creates the consumer, or changes its types. Returns its cursor position. */
|
|
117
|
+
register(consumer: string, options?: RegisterOptions): AsyncResult<number>;
|
|
118
|
+
/** Removes the consumer, so purges stop waiting for it. */
|
|
119
|
+
unregister(consumer: string): AsyncResult<boolean>;
|
|
120
|
+
/**
|
|
121
|
+
* Claims the consumer's next events, sends them to `sink` as CloudEvents and
|
|
122
|
+
* moves the cursor, until none are left or the budget runs out. A sink that
|
|
123
|
+
* throws leaves the batch for a later run with backoff, so delivery is at
|
|
124
|
+
* least once; an event that fails `maxAttempts` times goes to the dead
|
|
125
|
+
* letters.
|
|
126
|
+
*/
|
|
127
|
+
relay(consumer: string, sink: EventSink, options?: RelayOptions): Promise<RelayResult>;
|
|
128
|
+
/**
|
|
129
|
+
* Like `relay`, but hands `handler` the outbox rows themselves, with
|
|
130
|
+
* `actorId`, `tenant` and `key`, for consumers inside the app (search
|
|
131
|
+
* indexing, notifications) that need the actor.
|
|
132
|
+
*/
|
|
133
|
+
consume(consumer: string, handler: OutboxHandler, options?: RelayOptions): Promise<RelayResult>;
|
|
134
|
+
/** A `GET`/`POST` handler for a cron that relays every consumer at once, within one budget. */
|
|
135
|
+
relayRoute(options: OutboxRouteOptions): (request: Request) => Promise<Response>;
|
|
136
|
+
history(filter?: HistoryFilter): AsyncResult<readonly OutboxEvent[]>;
|
|
137
|
+
/** The consumer's dead letters, newest first (default 100, at most 1000). */
|
|
138
|
+
deadLetters(consumer: string, limit?: number): AsyncResult<readonly OutboxDeadLetter[]>;
|
|
139
|
+
/**
|
|
140
|
+
* Deletes up to `batch` events (default 10,000) older than `olderThan` that
|
|
141
|
+
* every consumer has passed, and dead letters older than `olderThan`. Call
|
|
142
|
+
* it again while it returns `batch`.
|
|
143
|
+
*/
|
|
144
|
+
purge(olderThan?: string, batch?: number, options?: OutboxPurgeOptions): AsyncResult<number>;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* The CloudEvent for an outbox row: the row id as `id` (stable, so receivers
|
|
148
|
+
* can deduplicate), the payload as `data`, the tenant as `partitionkey` and
|
|
149
|
+
* the writing module as `producer`. The actor stays out of the context
|
|
150
|
+
* attributes, which must not carry personal data.
|
|
151
|
+
*/
|
|
152
|
+
declare function outboxCloudEvent(event: OutboxEvent, options: Pick<OutboxOptions, "source" | "typePrefix">): CloudEvent;
|
|
153
|
+
/**
|
|
154
|
+
* The outbox over a server connection (`SqlClient`), or over a
|
|
155
|
+
* `BlockTransport` such as `rpcTransport(serviceClient, { schema: "api" })`
|
|
156
|
+
* for apps that reach the database only through the Data API. Over a
|
|
157
|
+
* transport, `emit` writes in its own transaction.
|
|
158
|
+
*/
|
|
159
|
+
declare function createOutbox(source: SqlClient | BlockTransport, options: OutboxOptions): Outbox;
|
|
160
|
+
//#endregion
|
|
161
|
+
export { OutboxEvent as a, OutboxPurgeOptions as c, RegisterOptions as d, RelayOptions as f, outboxCloudEvent as h, OutboxDeadLetter as i, OutboxRouteOptions as l, createOutbox as m, HistoryFilter as n, OutboxHandler as o, RelayResult as p, Outbox as r, OutboxOptions as s, EmitOptions as t, OutboxRouteResult as u };
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
/// <reference lib="esnext.temporal" />
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
2
|
+
import { w as ErrorMapper } from "./result-D7y2fT87.js";
|
|
3
|
+
import { I as TableFlags, P as SchemaMeta, R as TableMeta, a as AnyModels } from "./types-6BdhkmZe.js";
|
|
4
|
+
import { _ as MutationOp, g as MutationKind, h as MutationIntent, r as Executor, v as Operation } from "./executor-DvsBbNBS.js";
|
|
4
5
|
//#region src/core/plugin.d.ts
|
|
5
6
|
/** Who is making the request. */
|
|
6
7
|
interface Actor {
|
|
@@ -29,10 +30,9 @@ interface HookArgs {
|
|
|
29
30
|
readonly context: RequestContext;
|
|
30
31
|
readonly options: CallOptions;
|
|
31
32
|
readonly now: () => Temporal.Instant;
|
|
33
|
+
/** The caller's `signal`, when it passed one. Hooks that do I/O should honor it. */
|
|
34
|
+
readonly signal?: AbortSignal;
|
|
32
35
|
}
|
|
33
|
-
type MutationKind = "insert" | "upsert" | "update" | "delete";
|
|
34
|
-
/** What the caller asked for: `softDelete` is a `delete` that a plugin turned into an update. */
|
|
35
|
-
type MutationIntent = MutationKind | "softDelete";
|
|
36
36
|
interface MutationEvent {
|
|
37
37
|
readonly table: TableMeta;
|
|
38
38
|
/** The statement that ran. */
|
|
@@ -47,7 +47,7 @@ interface MutationEvent {
|
|
|
47
47
|
* returned (soft deletes, `returning: false`).
|
|
48
48
|
*/
|
|
49
49
|
readonly keys?: readonly Readonly<Record<string, unknown>>[];
|
|
50
|
-
/** The tenant of the write: `context.tenant`,
|
|
50
|
+
/** The tenant of the write: `context.tenant`, which `tenant()` fills from the claims. */
|
|
51
51
|
readonly tenant?: string;
|
|
52
52
|
readonly context: RequestContext;
|
|
53
53
|
}
|
|
@@ -99,10 +99,30 @@ interface Plugin<Name extends string = string, Ext extends RepositoryExtension =
|
|
|
99
99
|
readonly apiVersion: 1;
|
|
100
100
|
readonly name: Name;
|
|
101
101
|
/**
|
|
102
|
-
* Hook order: `
|
|
103
|
-
* `use()` order.
|
|
102
|
+
* Hook order: `first`, then `pre`, then unmarked plugins, then `post`;
|
|
103
|
+
* plugins at the same level keep `use()` order. `first` is for plugins
|
|
104
|
+
* that check the query as the caller wrote it, before a `pre` plugin
|
|
105
|
+
* rewrites it (`rules()`). Validation is `post` so it sees columns other
|
|
106
|
+
* plugins fill.
|
|
104
107
|
*/
|
|
105
|
-
readonly enforce?: "pre" | "post";
|
|
108
|
+
readonly enforce?: "first" | "pre" | "post";
|
|
109
|
+
/**
|
|
110
|
+
* The table flags whose tables this plugin's `transformQuery` filters
|
|
111
|
+
* (`tenant()` declares `['tenant']`). Read sets warn when they read such a
|
|
112
|
+
* table, because their generated SQL function runs without the plugin.
|
|
113
|
+
* `[]` means the plugin only inspects queries. A plugin with
|
|
114
|
+
* `transformQuery` that leaves this out is assumed to filter every table.
|
|
115
|
+
*/
|
|
116
|
+
readonly scopes?: readonly (keyof TableFlags)[];
|
|
117
|
+
/**
|
|
118
|
+
* `context`: derive values from the connection's context once per
|
|
119
|
+
* `connect()` and `$with()`, so `db.$context` carries them (`tenant()`
|
|
120
|
+
* adds the tenant it resolved). Runs in hook order on the context the
|
|
121
|
+
* caller passed. A throw is logged and leaves the context unchanged.
|
|
122
|
+
*/
|
|
123
|
+
readonly context?: (context: RequestContext, args: {
|
|
124
|
+
readonly schema: SchemaMeta;
|
|
125
|
+
}) => RequestContext;
|
|
106
126
|
/** `ir`: rewrite an operation before it runs (filters, defaults). */
|
|
107
127
|
readonly transformQuery?: (op: Operation, args: HookArgs) => Operation;
|
|
108
128
|
/** `mutation`: rewrite a mutation or reject it by throwing a `DbException`. */
|
|
@@ -128,4 +148,4 @@ declare function definePlugin<const Name extends string, Ext extends RepositoryE
|
|
|
128
148
|
readonly apiVersion?: 1;
|
|
129
149
|
}): Plugin<Name, Ext>;
|
|
130
150
|
//#endregion
|
|
131
|
-
export {
|
|
151
|
+
export { ExtensionOf as a, MutationEvent as c, Plugin as d, RepositoryApi as f, definePlugin as g, WithExtension as h, CallOptions as i, NoExtension as l, RequestContext as m, AnyPlugin as n, HasFlag as o, RepositoryExtension as p, ApplyExtension as r, HookArgs as s, Actor as t, PLUGIN_API_VERSION as u };
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
//#region src/core/plugin.ts
|
|
2
|
+
const PLUGIN_API_VERSION = 1;
|
|
3
|
+
const RANK = {
|
|
4
|
+
first: 0,
|
|
5
|
+
pre: 1,
|
|
6
|
+
normal: 2,
|
|
7
|
+
post: 3
|
|
8
|
+
};
|
|
9
|
+
function rankOf(plugin) {
|
|
10
|
+
return RANK[plugin.enforce ?? "normal"];
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Plugins in hook order: `first`, `pre`, unmarked, then `post`, each level
|
|
14
|
+
* in `use()` order.
|
|
15
|
+
*/
|
|
16
|
+
function orderPlugins(plugins) {
|
|
17
|
+
return plugins.map((plugin, index) => ({
|
|
18
|
+
plugin,
|
|
19
|
+
index
|
|
20
|
+
})).sort((a, b) => rankOf(a.plugin) - rankOf(b.plugin) || a.index - b.index).map(({ plugin }) => plugin);
|
|
21
|
+
}
|
|
22
|
+
/** Identity helper that fixes `apiVersion` and infers the plugin types. */
|
|
23
|
+
function definePlugin(plugin) {
|
|
24
|
+
return {
|
|
25
|
+
...plugin,
|
|
26
|
+
apiVersion: 1
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* A symbol key, so JSON, claims and spread request data can't set it, while
|
|
31
|
+
* `$with` copies it to the derived context.
|
|
32
|
+
*/
|
|
33
|
+
const ALL_TENANTS = Symbol("better-supabase.allTenants");
|
|
34
|
+
/** `context`, marked so `tenant()` and tenant buckets skip their tenant scope. */
|
|
35
|
+
function allTenantsContext(context) {
|
|
36
|
+
return {
|
|
37
|
+
...context,
|
|
38
|
+
[ALL_TENANTS]: true
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
function spansAllTenants(context) {
|
|
42
|
+
return Object.hasOwn(context, ALL_TENANTS);
|
|
43
|
+
}
|
|
44
|
+
//#endregion
|
|
45
|
+
export { spansAllTenants as a, orderPlugins as i, allTenantsContext as n, definePlugin as r, PLUGIN_API_VERSION as t };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { d as Plugin, m as RequestContext } from "../../plugin-FGY8UhYm.js";
|
|
2
2
|
//#region src/plugins/actor/index.d.ts
|
|
3
3
|
export interface ActorOptions {
|
|
4
4
|
/** Custom actor id resolution. Defaults to `context.actor.id` for users and services. */
|
|
@@ -9,7 +9,7 @@ export interface ActorOptions {
|
|
|
9
9
|
* `updatedBy` on insert and update. Soft deletes are updates, so they record
|
|
10
10
|
* who deleted the row. `impersonatedBy` gets `context.actor.impersonator` on
|
|
11
11
|
* an impersonated insert or update and is left alone otherwise, so a user's
|
|
12
|
-
* own update keeps the stamp, like the SQL
|
|
12
|
+
* own update keeps the stamp, like the SQL modules' `track_actor`. Without an
|
|
13
13
|
* actor (anonymous requests) nothing is set.
|
|
14
14
|
*/
|
|
15
15
|
export declare function actor(options?: ActorOptions): Plugin<"actor">;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { r as definePlugin } from "../../plugin-
|
|
2
|
-
import { a as insertsOnly, i as guardManaged, t as dbName, u as withDefault } from "../../shared-
|
|
1
|
+
import { r as definePlugin } from "../../plugin-tfXW1-qO.js";
|
|
2
|
+
import { a as insertsOnly, i as guardManaged, t as dbName, u as withDefault } from "../../shared-CxWmcyqB.js";
|
|
3
3
|
//#region src/plugins/actor/index.ts
|
|
4
4
|
function defaultActor(context) {
|
|
5
5
|
const actor = context.actor;
|
|
@@ -10,7 +10,7 @@ function defaultActor(context) {
|
|
|
10
10
|
* `updatedBy` on insert and update. Soft deletes are updates, so they record
|
|
11
11
|
* who deleted the row. `impersonatedBy` gets `context.actor.impersonator` on
|
|
12
12
|
* an impersonated insert or update and is left alone otherwise, so a user's
|
|
13
|
-
* own update keeps the stamp, like the SQL
|
|
13
|
+
* own update keeps the stamp, like the SQL modules' `track_actor`. Without an
|
|
14
14
|
* actor (anonymous requests) nothing is set.
|
|
15
15
|
*/
|
|
16
16
|
function actor(options = {}) {
|