better-supabase 0.5.0 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +299 -41
- package/dist/access-sql-B0dF-SoF.js +181 -0
- package/dist/actor-CQTlc1Hh.d.ts +43 -0
- package/dist/adapter-Bc1o3zyy.js +1106 -0
- package/dist/agents-CVHGd7It.d.ts +94 -0
- package/dist/ai-cache-CBWs1W0k.js +80 -0
- package/dist/ai-cache-DaDu_G5L.d.ts +64 -0
- package/dist/ai-chat-7amvXjmQ.d.ts +590 -0
- package/dist/ai-chat-B24UI962.js +743 -0
- package/dist/ai-files-CSPNswUY.js +319 -0
- package/dist/ai-sdk/agents/index.d.ts +74 -0
- package/dist/ai-sdk/agents/index.js +159 -0
- package/dist/ai-sdk/batches/index.d.ts +74 -0
- package/dist/ai-sdk/batches/index.js +180 -0
- package/dist/ai-sdk/cache/index.d.ts +38 -0
- package/dist/ai-sdk/cache/index.js +127 -0
- package/dist/ai-sdk/chat/index.d.ts +2 -0
- package/dist/ai-sdk/chat/index.js +246 -0
- package/dist/ai-sdk/embeddings/index.d.ts +3 -0
- package/dist/ai-sdk/embeddings/index.js +2 -0
- package/dist/ai-sdk/files/index.d.ts +61 -0
- package/dist/ai-sdk/files/index.js +111 -0
- package/dist/ai-sdk/index.d.ts +145 -0
- package/dist/ai-sdk/index.js +174 -0
- package/dist/ai-sdk/mcp/index.d.ts +102 -0
- package/dist/ai-sdk/mcp/index.js +362 -0
- package/dist/ai-sdk/memory/index.d.ts +67 -0
- package/dist/ai-sdk/memory/index.js +175 -0
- package/dist/ai-sdk/react/index.d.ts +2 -0
- package/dist/ai-sdk/react/index.js +3 -0
- package/dist/ai-sdk/react/server.d.ts +6 -0
- package/dist/ai-sdk/react/server.js +7 -0
- package/dist/ai-sdk/workflow/index.d.ts +249 -0
- package/dist/ai-sdk/workflow/index.js +575 -0
- package/dist/ai-sdk/workflow/react/index.d.ts +20 -0
- package/dist/ai-sdk/workflow/react/index.js +66 -0
- package/dist/ai-sdk/workflow/react/server.d.ts +10 -0
- package/dist/ai-sdk/workflow/react/server.js +12 -0
- package/dist/ai-tasks-Cd1HMFvB.d.ts +131 -0
- package/dist/announcements-CiyOs-xP.js +107 -0
- package/dist/announcements-ZRGnScWI.d.ts +72 -0
- package/dist/api-keys-rCGtKaZA.d.ts +156 -0
- package/dist/assistant-DwdpDH1q.d.ts +147 -0
- package/dist/astro/index.d.ts +86 -0
- package/dist/astro/index.js +93 -0
- package/dist/attributes-5dYul0u0.js +13 -0
- package/dist/auth-link-BjFPqwLz.d.ts +97 -0
- package/dist/auth-link-DrDX9KOT.js +114 -0
- package/dist/authorization-BFCqamMs.d.ts +172 -0
- package/dist/before-route-CnR0C0Jr.js +30 -0
- package/dist/bind-Bu_ZNa3W.d.ts +62 -0
- package/dist/bind-l4kAvYSv.js +97 -0
- package/dist/block-events-CrT8r7Fe.js +76 -0
- package/dist/block-fields-GFkxl4dP.js +49 -0
- package/dist/block-fields-SJ6fEf3o.d.ts +31 -0
- package/dist/block-helpers-CKtbFcRv.d.ts +37 -0
- package/dist/block-helpers-DWHxHsEQ.js +190 -0
- package/dist/block-hooks-BmjMyXTa.js +114 -0
- package/dist/block-hooks-plbZ0AbJ.d.ts +107 -0
- package/dist/{kit-transport-DJlHQUBU.js → block-transport-BLr-ZgLc.js} +11 -7
- package/dist/block-transport-DvaoPuZ9.d.ts +48 -0
- package/dist/blocks/agents/index.d.ts +3 -0
- package/dist/blocks/agents/index.js +123 -0
- package/dist/blocks/ai-cache/index.d.ts +3 -0
- package/dist/blocks/ai-cache/index.js +3 -0
- package/dist/blocks/ai-chat/index.d.ts +31 -0
- package/dist/blocks/ai-chat/index.js +5 -0
- package/dist/blocks/ai-chat/react/index.d.ts +77 -0
- package/dist/blocks/ai-chat/react/index.js +387 -0
- package/dist/blocks/ai-chat/react/server.d.ts +16 -0
- package/dist/blocks/ai-chat/react/server.js +14 -0
- package/dist/blocks/ai-files/index.d.ts +14 -0
- package/dist/blocks/ai-files/index.js +3 -0
- package/dist/blocks/ai-providers/index.d.ts +7 -0
- package/dist/blocks/ai-providers/index.js +211 -0
- package/dist/blocks/ai-tasks/index.d.ts +3 -0
- package/dist/blocks/ai-tasks/index.js +203 -0
- package/dist/blocks/announcements/index.d.ts +3 -0
- package/dist/blocks/announcements/index.js +3 -0
- package/dist/blocks/announcements/react/index.d.ts +31 -0
- package/dist/blocks/announcements/react/index.js +86 -0
- package/dist/blocks/announcements/react/server.d.ts +6 -0
- package/dist/blocks/announcements/react/server.js +7 -0
- package/dist/blocks/api-keys/index.d.ts +35 -0
- package/dist/blocks/api-keys/index.js +334 -0
- package/dist/blocks/attachments/index.d.ts +210 -0
- package/dist/blocks/attachments/index.js +222 -0
- package/dist/blocks/audit/index.d.ts +366 -0
- package/dist/blocks/audit/index.js +714 -0
- package/dist/blocks/billing/index.d.ts +265 -0
- package/dist/blocks/billing/index.js +400 -0
- package/dist/blocks/comments/index.d.ts +200 -0
- package/dist/blocks/comments/index.js +207 -0
- package/dist/blocks/connectors/index.d.ts +3 -0
- package/dist/blocks/connectors/index.js +164 -0
- package/dist/blocks/data-lifecycle/index.d.ts +251 -0
- package/dist/blocks/data-lifecycle/index.js +353 -0
- package/dist/blocks/entitlements/index.d.ts +14 -0
- package/dist/blocks/entitlements/index.js +25 -0
- package/dist/blocks/flags/index.d.ts +226 -0
- package/dist/blocks/flags/index.js +282 -0
- package/dist/blocks/inbox/index.d.ts +6 -0
- package/dist/blocks/inbox/index.js +499 -0
- package/dist/blocks/inbox/react/index.d.ts +2 -0
- package/dist/blocks/inbox/react/index.js +225 -0
- package/dist/blocks/inbox/react/server.d.ts +10 -0
- package/dist/blocks/inbox/react/server.js +12 -0
- package/dist/blocks/index.d.ts +65 -0
- package/dist/blocks/index.js +77 -0
- package/dist/blocks/jobs/index.d.ts +297 -0
- package/dist/blocks/jobs/index.js +1051 -0
- package/dist/blocks/knowledge/index.d.ts +3 -0
- package/dist/blocks/knowledge/index.js +3 -0
- package/dist/blocks/memory/index.d.ts +8 -0
- package/dist/blocks/memory/index.js +289 -0
- package/dist/blocks/notifications/index.d.ts +297 -0
- package/dist/blocks/notifications/index.js +425 -0
- package/dist/blocks/notifications/react/index.d.ts +44 -0
- package/dist/blocks/notifications/react/index.js +67 -0
- package/dist/blocks/notifications/react/server.d.ts +6 -0
- package/dist/blocks/notifications/react/server.js +7 -0
- package/dist/blocks/onboarding/index.d.ts +3 -0
- package/dist/blocks/onboarding/index.js +64 -0
- package/dist/blocks/onboarding/react/index.d.ts +28 -0
- package/dist/blocks/onboarding/react/index.js +78 -0
- package/dist/blocks/onboarding/react/server.d.ts +7 -0
- package/dist/blocks/onboarding/react/server.js +7 -0
- package/dist/blocks/organizations/index.d.ts +241 -0
- package/dist/blocks/organizations/index.js +400 -0
- package/dist/blocks/outbox/index.d.ts +3 -0
- package/dist/blocks/outbox/index.js +266 -0
- package/dist/blocks/profiles/index.d.ts +40 -0
- package/dist/blocks/profiles/index.js +28 -0
- package/dist/blocks/push/index.d.ts +185 -0
- package/dist/blocks/push/index.js +258 -0
- package/dist/blocks/settings/index.d.ts +89 -0
- package/dist/blocks/settings/index.js +104 -0
- package/dist/blocks/sso/index.d.ts +198 -0
- package/dist/blocks/sso/index.js +1297 -0
- package/dist/blocks/usage/index.d.ts +4 -0
- package/dist/blocks/usage/index.js +233 -0
- package/dist/blocks/waitlist/index.d.ts +117 -0
- package/dist/blocks/waitlist/index.js +132 -0
- package/dist/blocks/webhooks/index.d.ts +304 -0
- package/dist/{webhooks → blocks/webhooks}/index.js +468 -148
- package/dist/blocks/workflow-builder/index.d.ts +21 -0
- package/dist/blocks/workflow-builder/index.js +5 -0
- package/dist/blocks/workflow-builder/react/index.d.ts +47 -0
- package/dist/blocks/workflow-builder/react/index.js +119 -0
- package/dist/blocks/workflow-builder/react/server.d.ts +8 -0
- package/dist/blocks/workflow-builder/react/server.js +11 -0
- package/dist/blocks/workflows/index.d.ts +3 -0
- package/dist/blocks/workflows/index.js +3 -0
- package/dist/blocks/workflows/react/index.d.ts +47 -0
- package/dist/blocks/workflows/react/index.js +137 -0
- package/dist/blocks/workflows/react/server.d.ts +8 -0
- package/dist/blocks/workflows/react/server.js +11 -0
- package/dist/{index-SaTsEfGP.d.ts → bucket-Cl46E3jS.d.ts} +134 -91
- package/dist/{simplify-_0oUKqCd.js → build-BXIzE6Xv.js} +222 -124
- package/dist/{channel-FQW-CnGR.d.ts → channel-_2Mx1Oyu.d.ts} +2 -2
- package/dist/channels-CkgQ_X60.js +114 -0
- package/dist/chat-sdk/index.d.ts +303 -0
- package/dist/chat-sdk/index.js +733 -0
- package/dist/chat-sdk/react/index.d.ts +2 -0
- package/dist/chat-sdk/react/index.js +3 -0
- package/dist/chat-sdk/react/server.d.ts +3 -0
- package/dist/chat-sdk/react/server.js +2 -0
- package/dist/claims-DDBQT6BK.js +61 -0
- package/dist/{claims-BAf6c7is.js → claims-PqzCxaTD.js} +39 -2
- package/dist/cli/bin.js +1 -1
- package/dist/cli/{codemod-DqV7612m.js → codemod-Bl_tQpHn.js} +105 -2
- package/dist/cli/config-B9HkL8nF.js +2 -0
- package/dist/cli/config-DU7EJImt.js +49 -0
- package/dist/cli/config-NiPxAmUF.js +1077 -0
- package/dist/cli/{dist-xn4wlboc.js → dist-DRAVaE6w.js} +111 -1
- package/dist/cli/{doctor-L7Z8mYTx.js → doctor-B4JOm_ox.js} +992 -316
- package/dist/cli/{env-DmKv_G4A.js → env-CJLbUVPB.js} +1 -1
- package/dist/cli/{env-jIFUADLY.js → env-qXgyMV6r.js} +2 -2
- package/dist/cli/fresh-import-BeYf9I3x.js +40 -0
- package/dist/cli/gen-BGLb_zou.js +3100 -0
- package/dist/cli/gen-DAH8FM2W.js +2 -0
- package/dist/cli/index.d.ts +44 -5
- package/dist/cli/index.js +7 -7
- package/dist/cli/{init-Saf5-R9T.js → init-BIIwclPg.js} +242 -27
- package/dist/cli/{introspect--H7oGmcd.js → introspect-DNUTuNvb.js} +5 -5
- package/dist/cli/{io-k41_z-jT.js → io-DI1mTdSA.js} +12 -3
- package/dist/cli/{keys-ByKHnvP9.js → keys-BGCnnb-s.js} +8 -6
- package/dist/cli/{ohash-D7bG_EOb.js → ohash-BjQY1cBb.js} +1 -1
- package/dist/cli/{openapi-Cp5Fyta-.js → openapi-BlRJ18s3.js} +2 -2
- package/dist/cli/{project-B_GeXyHh.js → project-DZRaBaY7.js} +11 -6
- package/dist/cli/read-sets-CETOSFx4.js +223 -0
- package/dist/cli/{run-BKR2W_79.js → run-DNWxHynX.js} +33 -23
- package/dist/cli/{seed-CUlqWh-8.js → seed-DQzqT7LP.js} +8 -6
- package/dist/cli/{skills-LJJIhLFR.js → skills-QQs4q68J.js} +3 -2
- package/dist/cli/sql-D0GUtUPp.js +536 -0
- package/dist/cli/{config-CPVpXP5I.js → supabase-toml-B-bIukQF.js} +72 -942
- package/dist/cli/typegen-version-DeFbtzYI.js +8 -0
- package/dist/cli/{version-BDJuO0UR.js → version-hr88OZG0.js} +1 -1
- package/dist/client/index.d.ts +3 -2
- package/dist/client/index.js +11 -71
- package/dist/client/native/index.d.ts +228 -0
- package/dist/client/native/index.js +361 -0
- package/dist/client-CI0Z2zWX.js +277 -0
- package/dist/cloud-event-BnmD5fb9.js +46 -0
- package/dist/cloud-event-C1JCc1bH.d.ts +50 -0
- package/dist/{compiler-BXH_aZ7N.d.ts → compiler-DY_wkj4R.d.ts} +2 -2
- package/dist/compose-BIBNgAnq.js +53 -0
- package/dist/composite-Bt1YK3Ke.d.ts +146 -0
- package/dist/composite-DhE66P5u.js +130 -0
- package/dist/config/index.d.ts +6 -4
- package/dist/config/index.js +5 -5
- package/dist/{config-T_ejwyd3.d.ts → config-D44Y7PAv.d.ts} +406 -205
- package/dist/{config-DreERlKo.js → config-Dn7F5k9A.js} +62 -14
- package/dist/connector-Dv8kK0MO.d.ts +107 -0
- package/dist/connectors-hkLCwyEz.d.ts +120 -0
- package/dist/context-BCrWe7ow.d.ts +237 -0
- package/dist/credentials/index.d.ts +31 -0
- package/dist/credentials/index.js +168 -0
- package/dist/cron-DVPUg5k3.js +145 -0
- package/dist/csv-CPAzEmB6.js +25 -0
- package/dist/db-exception-CnWcYPxL.js +15 -0
- package/dist/{define-cNKzqwL_.js → define-B-TVjC25.js} +784 -227
- package/dist/{define-Bp_BZa5h.d.ts → define-CJJkkr1-.d.ts} +353 -61
- package/dist/edge/index.d.ts +69 -11
- package/dist/edge/index.js +191 -75
- package/dist/elysia/index.d.ts +59 -0
- package/dist/elysia/index.js +62 -0
- package/dist/embeddings-4ZvFzjsU.js +127 -0
- package/dist/embeddings-C9KGQnXt.d.ts +68 -0
- package/dist/{refresh-BTrQ_ZTp.d.ts → ended-jLfvw8h-.d.ts} +20 -2
- package/dist/{entitlements-DUxU4oHe.d.ts → entitlements-DHrY2UDZ.d.ts} +16 -7
- package/dist/entitlements-DRl6ZJUm.js +24 -0
- package/dist/envelope-DqnYGRw7.js +47 -0
- package/dist/{errors-DtwXa6b8.js → errors-B11Duf73.js} +82 -13
- package/dist/errors-DLjJHPLK.js +44 -0
- package/dist/escape-like-DHfx6jRr.js +7 -0
- package/dist/escape-like-ImTK0ps_.d.ts +15 -0
- package/dist/eve/index.d.ts +220 -0
- package/dist/eve/index.js +504 -0
- package/dist/eve-gT2Fpjut.d.ts +151 -0
- package/dist/events/index.d.ts +4 -3
- package/dist/events/index.js +9 -50
- package/dist/events-DWDhx77e.d.ts +549 -0
- package/dist/executor-Bq28caBo.js +718 -0
- package/dist/executor-C-R4pucm.js +83 -0
- package/dist/executor-CaWigTyR.d.ts +148 -0
- package/dist/executor-D14tGopJ.d.ts +36 -0
- package/dist/{executor-Cghdstwu.d.ts → executor-DbvExCFC.d.ts} +7 -1
- package/dist/{sql-Coh6n4cC.js → executor-De1Of3m3.js} +210 -11
- package/dist/executor-DvsBbNBS.d.ts +261 -0
- package/dist/expo/index.d.ts +79 -0
- package/dist/expo/index.js +129 -0
- package/dist/expo-sqlite/index.d.ts +58 -0
- package/dist/expo-sqlite/index.js +104 -0
- package/dist/field-errors-BFOa7WhB.d.ts +99 -0
- package/dist/field-errors-VF1yb8yI.js +13 -0
- package/dist/framework-CONDyPYx.js +51 -0
- package/dist/framework-DuVb4Xa8.d.ts +25 -0
- package/dist/gateway-C1ssRHnf.d.ts +130 -0
- package/dist/graph-BGyLLFLX.js +265 -0
- package/dist/h3/index.d.ts +59 -0
- package/dist/h3/index.js +55 -0
- package/dist/h3/v1/index.d.ts +63 -0
- package/dist/h3/v1/index.js +49 -0
- package/dist/history-BZih6SFP.js +64 -0
- package/dist/hono/index.d.ts +56 -7
- package/dist/hono/index.js +97 -45
- package/dist/{react-C_s7kiNz.js → hooks-1BTCJsiw.js} +104 -133
- package/dist/http-Cv4T29xh.js +40 -0
- package/dist/http-DdYadv-o.js +126 -0
- package/dist/image-url-pIVlO6R1.js +41 -0
- package/dist/impersonation-DcqaTBHx.js +148 -0
- package/dist/inbox-i7E1ppo6.d.ts +384 -0
- package/dist/index-ACiNPN4Z.d.ts +74 -0
- package/dist/{index-DgILJRXj.d.ts → index-Bepi-Hgg.d.ts} +91 -28
- package/dist/index-BkWT_uBO.d.ts +51 -0
- package/dist/index-BpFYMsi0.d.ts +53 -0
- package/dist/{index-C7f8cOBM.d.ts → index-Bxih3l0u.d.ts} +2 -2
- package/dist/index-CaxrMD1A.d.ts +1 -0
- package/dist/index-ClmjK_o-.d.ts +55 -0
- package/dist/index-CtuakVRc.d.ts +267 -0
- package/dist/index-D48jVS-N.d.ts +246 -0
- package/dist/index-DDrYaUcq.d.ts +138 -0
- package/dist/index-DQh4VCc9.d.ts +98 -0
- package/dist/{live-D9W2M5aO.d.ts → index-DunNRdnT.d.ts} +136 -38
- package/dist/index.d.ts +65 -18
- package/dist/index.js +42 -14
- package/dist/invalidate-BBqhpxyB.d.ts +19 -0
- package/dist/json-CEnpTHlZ.js +16 -0
- package/dist/json-schema-CvER4kgT.js +502 -0
- package/dist/keys-4MnkWTTh.js +35 -0
- package/dist/kit-B5tid-q5.d.ts +60 -0
- package/dist/kit-Fm-Fv7q5.js +78 -0
- package/dist/knowledge-BXBbT0Tr.d.ts +176 -0
- package/dist/knowledge-CDmiMLew.js +255 -0
- package/dist/lint/index.d.ts +1 -1
- package/dist/lint/index.js +37 -0
- package/dist/list/index.d.ts +3 -2
- package/dist/list/index.js +1 -444
- package/dist/{index-fag8VJZ2.d.ts → list-query-BRt-zDF7.d.ts} +20 -12
- package/dist/list-query-gl808ac1.js +459 -0
- package/dist/{live-CdJBOc4f.js → live-CTAZQkwl.js} +99 -14
- package/dist/logger-DWVYUmwi.d.ts +18 -0
- package/dist/mcp/index.d.ts +38 -11
- package/dist/mcp/index.js +82 -46
- package/dist/mcp/sdk/index.d.ts +105 -0
- package/dist/mcp/sdk/index.js +126 -0
- package/dist/message-CaKlqdsX.js +219 -0
- package/dist/message-CfDoR0Y6.d.ts +94 -0
- package/dist/messages-B9-5887d.js +715 -0
- package/dist/messages-DYP0sUTe.d.ts +59 -0
- package/dist/{mfa-CusDgPaD.d.ts → mfa-Daak8ukG.d.ts} +8 -2
- package/dist/modules-DpPwzC7E.d.ts +192 -0
- package/dist/modules-dxrVK3ID.js +228 -0
- package/dist/nestjs/index.d.ts +68 -0
- package/dist/nestjs/index.js +164 -0
- package/dist/next/client/index.d.ts +35 -0
- package/dist/next/client/index.js +36 -0
- package/dist/next/image/index.js +3 -24
- package/dist/next/index.d.ts +150 -51
- package/dist/next/index.js +261 -107
- package/dist/node/index.d.ts +4 -0
- package/dist/node/index.js +210 -0
- package/dist/node-headers-AO06VhqH.d.ts +24 -0
- package/dist/node-headers-C71zNQHe.js +55 -0
- package/dist/nuxt/index.d.ts +60 -0
- package/dist/nuxt/index.js +64 -0
- package/dist/onboarding-BZGHYJks.d.ts +62 -0
- package/dist/openapi/index.d.ts +1 -1
- package/dist/openapi/index.js +3 -3
- package/dist/orpc/index.d.ts +70 -11
- package/dist/orpc/index.js +73 -24
- package/dist/otel/index.d.ts +7 -7
- package/dist/otel/index.js +87 -57
- package/dist/outbox-Cq7pPYvl.d.ts +161 -0
- package/dist/{plugin-o144f322.d.ts → plugin-FGY8UhYm.d.ts} +30 -10
- package/dist/plugin-tfXW1-qO.js +45 -0
- package/dist/plugins/actor/index.d.ts +2 -2
- package/dist/plugins/actor/index.js +3 -3
- package/dist/plugins/rules/index.d.ts +11 -4
- package/dist/plugins/rules/index.js +40 -13
- package/dist/plugins/soft-delete/index.d.ts +5 -4
- package/dist/plugins/soft-delete/index.js +10 -5
- package/dist/plugins/tenant/index.d.ts +2 -2
- package/dist/plugins/tenant/index.js +18 -11
- package/dist/plugins/timestamps/index.d.ts +5 -3
- package/dist/plugins/timestamps/index.js +6 -4
- package/dist/plugins/validation/index.d.ts +2 -2
- package/dist/plugins/validation/index.js +10 -6
- package/dist/{pool-C9voM4Kw.d.ts → pool-CAu2nLrL.d.ts} +2 -2
- package/dist/postgres/index.d.ts +4 -4
- package/dist/postgres/index.js +1 -2
- package/dist/{postgrest-CruYKAvV.d.ts → postgrest-BLVdEnfe.d.ts} +13 -3
- package/dist/powersync/index.d.ts +43 -0
- package/dist/powersync/index.js +199 -0
- package/dist/powersync/react/index.d.ts +87 -0
- package/dist/powersync/react/index.js +108 -0
- package/dist/{problem-BW1KhzSG.js → problem-BreOl8b8.js} +14 -3
- package/dist/{problem-Blxe8S31.d.ts → problem-DD8LZFjc.d.ts} +21 -3
- package/dist/provider-BH5UWZJ6.d.ts +113 -0
- package/dist/provider-Di3sRutW.js +57 -0
- package/dist/query/index.d.ts +4 -2
- package/dist/query/index.js +4 -3
- package/dist/{query-CCbo44lG.js → query-BQ-NaZon.js} +141 -24
- package/dist/{queue-BYUCjr59.d.ts → queue-CLJurhdy.d.ts} +258 -83
- package/dist/react/index.d.ts +11 -7
- package/dist/react/index.js +7 -3
- package/dist/react/native/index.d.ts +116 -0
- package/dist/react/native/index.js +130 -0
- package/dist/react/server.d.ts +28 -10
- package/dist/react/server.js +22 -5
- package/dist/react/session.d.ts +2 -2
- package/dist/react-4ZqkP8da.js +79 -0
- package/dist/react-F80mF4-t.js +409 -0
- package/dist/react-router/index.d.ts +83 -0
- package/dist/react-router/index.js +89 -0
- package/dist/react-topic-seAWjL3_.js +38 -0
- package/dist/{read-set-DQFt1N_Y.js → read-set-DuKWC9Mj.js} +67 -25
- package/dist/realtime/index.d.ts +4 -5
- package/dist/realtime/index.js +144 -82
- package/dist/refusal-CeJWxmkH.js +61 -0
- package/dist/refusal-D1rgbzNq.d.ts +15 -0
- package/dist/replicas-CwrYp5Zj.js +94 -0
- package/dist/{view-Bq64ki8-.js → resolve-D_IcnvFd.js} +239 -289
- package/dist/{resolve-C15TJq77.d.ts → resolve-KW8nCeL6.d.ts} +29 -45
- package/dist/{resource-CRxxwkQq.js → resource-BsvzCMlX.js} +4 -4
- package/dist/{resource-D8iqWMr-.d.ts → resource-D6Uc7Sk7.d.ts} +5 -5
- package/dist/respond-BUgsXNgk.js +91 -0
- package/dist/respond-DoBijysA.d.ts +93 -0
- package/dist/result-D7y2fT87.d.ts +282 -0
- package/dist/{result-BKiliPY7.js → result-DzUbqgdW.js} +27 -2
- package/dist/run-state-CPo-1X2B.d.ts +12 -0
- package/dist/run-state-CgBKzYMW.js +13 -0
- package/dist/search-CUWCRYKL.js +9 -0
- package/dist/server/index.d.ts +143 -21
- package/dist/server/index.js +46 -14
- package/dist/{respond-D2OQl62-.d.ts → server-CeVeeXwz.d.ts} +225 -80
- package/dist/session-ChiXDZdZ.d.ts +72 -0
- package/dist/shared-CBxosKK3.js +75 -0
- package/dist/{shared-D1dRUrAg.js → shared-CxWmcyqB.js} +2 -1
- package/dist/shared-DDSjEGDR.d.ts +11 -0
- package/dist/sign-in-BCV5S2WZ.d.ts +49 -0
- package/dist/sign-in-Cb1mwv6X.js +86 -0
- package/dist/{signers-Cc6r98SW.d.ts → signers-4y62_VIi.d.ts} +13 -9
- package/dist/simplify-DDO0j0LI.js +83 -0
- package/dist/solid/index.d.ts +131 -0
- package/dist/solid/index.js +344 -0
- package/dist/solid-start/index.d.ts +75 -0
- package/dist/solid-start/index.js +58 -0
- package/dist/{spec-pins-C3oc-Tdp.js → spec-pins--j6mTok4.js} +8 -1
- package/dist/{spec-pins-CqorWDnO.d.ts → spec-pins-C89s6DyW.d.ts} +7 -0
- package/dist/sql/index.d.ts +330 -194
- package/dist/sql/index.js +34901 -6489
- package/dist/ssr/index.d.ts +6 -5
- package/dist/ssr/index.js +3 -3
- package/dist/{standard-D7r6dMUu.js → standard-BK0cqJ7y.js} +4 -3
- package/dist/{standard-J4YgMOLm.d.ts → standard-CYsm7xpT.d.ts} +1 -1
- package/dist/stats-D_AD9GGu.js +1123 -0
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.js +1027 -368
- package/dist/store-BdH5ruDx.js +66 -0
- package/dist/store-CGjgWu5n.d.ts +68 -0
- package/dist/streams/index.d.ts +76 -0
- package/dist/streams/index.js +77 -0
- package/dist/streams/redis/index.d.ts +52 -0
- package/dist/streams/redis/index.js +185 -0
- package/dist/stripe-BMj5LtsT.js +38 -0
- package/dist/stripe-D04h-QBT.d.ts +136 -0
- package/dist/{support-Dk6vdmEw.js → support-BivNqSpK.js} +35 -12
- package/dist/{support-view-Da5peKFg.d.ts → support-view-33Oi07TT.d.ts} +1 -1
- package/dist/svelte/index.d.ts +114 -0
- package/dist/svelte/index.js +344 -0
- package/dist/sveltekit/index.d.ts +116 -0
- package/dist/sveltekit/index.js +106 -0
- package/dist/tags-B99_U9Pp.js +39 -0
- package/dist/tags-Cx-LnIQP.d.ts +30 -0
- package/dist/tanstack-db/index.d.ts +71 -0
- package/dist/tanstack-db/index.js +72 -0
- package/dist/tanstack-start/index.d.ts +75 -0
- package/dist/tanstack-start/index.js +95 -0
- package/dist/tee-CoEppCER.js +101 -0
- package/dist/{template-TxrGI5jR.js → template--jDkl3UP.js} +34 -13
- package/dist/template-CwO38Do8.d.ts +6 -0
- package/dist/temporal-BJGitm-h.js +79 -0
- package/dist/{temporal-required-CAt4Dc9Z.js → temporal-required-BVvW7SYJ.js} +3 -2
- package/dist/tenant-I1TEZ_BX.js +27 -0
- package/dist/tenant-icPeuUBN.d.ts +17 -0
- package/dist/testing/index.d.ts +343 -37
- package/dist/testing/index.js +1186 -79
- package/dist/timing-CyTQPubY.js +92 -0
- package/dist/ttl-Hr34gRu8.js +12 -0
- package/dist/{types-Dnf_wRDz.d.ts → types-6BdhkmZe.d.ts} +111 -45
- package/dist/types-BI-0Sl2v.d.ts +359 -0
- package/dist/types-C05bxW-W.d.ts +220 -0
- package/dist/types-DGs5L0VN.d.ts +192 -0
- package/dist/types-TaiEeBGA.d.ts +156 -0
- package/dist/usage-CrvrL2vw.d.ts +177 -0
- package/dist/user-change-XzvgafU4.js +130 -0
- package/dist/vault-CSO7ss5C.d.ts +50 -0
- package/dist/vercel-connect/index.d.ts +47 -0
- package/dist/vercel-connect/index.js +119 -0
- package/dist/{verify-Ce49ETPz.js → verify-DL41hbvY.js} +85 -13
- package/dist/verify-DPuWngD4.d.ts +172 -0
- package/dist/{version-DM_Roffb.js → version-Bvv6aLjZ.js} +1 -1
- package/dist/view-BeFcRV6G.js +99 -0
- package/dist/{view-BEf0diC5.d.ts → view-DbxLNu8L.d.ts} +35 -32
- package/dist/vue/index.d.ts +141 -0
- package/dist/vue/index.js +362 -0
- package/dist/watch-DI34G86j.d.ts +60 -0
- package/dist/watch-Xuxrvxq-.js +122 -0
- package/dist/{wire-D2dT86vi.js → wire-DtZQ4sdE.js} +15 -5
- package/dist/workflow-builder-DJ1oHn8g.js +398 -0
- package/dist/workflow-sdk/builder/index.d.ts +85 -0
- package/dist/workflow-sdk/builder/index.js +250 -0
- package/dist/workflow-sdk/index.d.ts +14 -0
- package/dist/workflow-sdk/index.js +3 -0
- package/dist/workflow-sdk/world/index.d.ts +107 -0
- package/dist/workflow-sdk/world/index.js +702 -0
- package/dist/workflow-sdk-B3yLD6Br.d.ts +98 -0
- package/dist/workflow-sdk-C2WJ_G2O.js +173 -0
- package/dist/workflow-sdk-world-D-prir6O.js +1397 -0
- package/dist/workflows-B0j9WKPu.d.ts +185 -0
- package/dist/workflows-wu1WWBn7.js +216 -0
- package/package.json +470 -29
- package/schemas/ai-message-v1.json +258 -0
- package/schemas/config-v1.json +1074 -140
- package/schemas/doctor-report-v1.json +21 -1
- package/schemas/snapshot-v2.json +8 -0
- package/skills/better-supabase/SKILL.md +41 -12
- package/skills/better-supabase/references/frontend.md +96 -0
- package/skills/better-supabase/references/plugins.md +10 -6
- package/skills/better-supabase/references/troubleshooting.md +2 -1
- package/skills/better-supabase-api/SKILL.md +76 -22
- package/skills/better-supabase-api/references/adapters.md +207 -0
- package/skills/better-supabase-api/references/ai.md +125 -0
- package/skills/better-supabase-api/references/expo.md +65 -0
- package/skills/better-supabase-api/references/powersync.md +35 -0
- package/skills/better-supabase-api/references/streams-credentials.md +105 -0
- package/skills/better-supabase-auth/SKILL.md +62 -18
- package/skills/better-supabase-auth/references/authorization-providers.md +51 -0
- package/skills/better-supabase-testing/SKILL.md +3 -1
- package/dist/cli/config-dtoekM0v.js +0 -2
- package/dist/cli/gen-BJc9vdyu.js +0 -2
- package/dist/cli/gen-C2osRcr5.js +0 -2204
- package/dist/cli/read-sets-BfMQcKy8.js +0 -289
- package/dist/cli/sql-DzPbfngx.js +0 -348
- package/dist/entitlements-CTEBm7IB.js +0 -20
- package/dist/events-aIO7vsIk.d.ts +0 -230
- package/dist/executor-BunPOO-k.d.ts +0 -402
- package/dist/executor-XycESQPH.js +0 -94
- package/dist/impersonation-VfaGc4Q_.js +0 -41
- package/dist/index-BGdgBPdf.d.ts +0 -161
- package/dist/index-DOESKG27.d.ts +0 -100
- package/dist/index-DmXSxbLi.d.ts +0 -62
- package/dist/index-Dxn2a5cw.d.ts +0 -50
- package/dist/jobs/index.d.ts +0 -226
- package/dist/jobs/index.js +0 -1007
- package/dist/json-schema-m1fiwKgN.js +0 -208
- package/dist/kit-events-CTFDfSwb.js +0 -60
- package/dist/kit-transport-B82k1djG.d.ts +0 -33
- package/dist/kits-CGLLrNPd.js +0 -157
- package/dist/notifications/index.d.ts +0 -162
- package/dist/notifications/index.js +0 -264
- package/dist/orgs/index.d.ts +0 -132
- package/dist/orgs/index.js +0 -245
- package/dist/permdock-sql-C2Inc6Xc.d.ts +0 -29
- package/dist/permdock-sql-DgOfeixi.js +0 -51
- package/dist/plugin-DwARMuQp.js +0 -59
- package/dist/server-Csx2sRjg.js +0 -655
- package/dist/stats-Bqob3WqT.js +0 -592
- package/dist/support-DT-OhSxD.d.ts +0 -88
- package/dist/template-mbvlysOo.d.ts +0 -6
- package/dist/temporal-CVlIV2DZ.js +0 -40
- package/dist/user-change-CHFEUro1.js +0 -49
- package/dist/webhooks/index.d.ts +0 -285
- package/skills/better-supabase-auth/references/permdock.md +0 -100
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
import { n as dbError } from "../../errors-B11Duf73.js";
|
|
2
|
+
import { a as ok, r as err, t as AsyncResult } from "../../result-DzUbqgdW.js";
|
|
3
|
+
import { n as rpcTransport, r as sqlTransport } from "../../block-transport-BLr-ZgLc.js";
|
|
4
|
+
import { O as textOf, c as errorText, d as isRecord, h as optionalText, i as blockCall, k as toInstant, m as optionalInstant, n as applyTemporal, x as recordsOf, y as recordOf } from "../../block-helpers-DWHxHsEQ.js";
|
|
5
|
+
import { t as fromStorageError } from "../../errors-DLjJHPLK.js";
|
|
6
|
+
//#region src/blocks/attachments/attachments.ts
|
|
7
|
+
const STATUSES = [
|
|
8
|
+
"pending",
|
|
9
|
+
"clean",
|
|
10
|
+
"infected",
|
|
11
|
+
"failed"
|
|
12
|
+
];
|
|
13
|
+
function statusOf(value) {
|
|
14
|
+
const status = STATUSES.find((candidate) => candidate === value);
|
|
15
|
+
if (status === void 0) throw new TypeError(`Unknown attachment status ${JSON.stringify(value)}`);
|
|
16
|
+
return status;
|
|
17
|
+
}
|
|
18
|
+
function attachmentOf(value) {
|
|
19
|
+
const row = recordOf(value, "attachments");
|
|
20
|
+
return {
|
|
21
|
+
id: textOf(row["id"]),
|
|
22
|
+
organizationId: optionalText(row["organization_id"]),
|
|
23
|
+
subjectType: optionalText(row["subject_type"]),
|
|
24
|
+
subjectId: optionalText(row["subject_id"]),
|
|
25
|
+
bucket: textOf(row["bucket"]),
|
|
26
|
+
path: textOf(row["object_path"]),
|
|
27
|
+
name: textOf(row["name"]),
|
|
28
|
+
mimeType: textOf(row["mime_type"]),
|
|
29
|
+
size: Number(row["size"]),
|
|
30
|
+
status: statusOf(row["status"]),
|
|
31
|
+
scanDetail: optionalText(row["scan_detail"]),
|
|
32
|
+
metadata: isRecord(row["metadata"]) ? row["metadata"] : {},
|
|
33
|
+
uploadedBy: optionalText(row["uploaded_by"]),
|
|
34
|
+
createdAt: toInstant(textOf(row["created_at"])),
|
|
35
|
+
uploadedAt: optionalInstant(row["uploaded_at"]),
|
|
36
|
+
scannedAt: optionalInstant(row["scanned_at"])
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
const notFound = () => dbError("not_found", "No attachment you can see has this id", { hint: "ATTACHMENT_NOT_FOUND" });
|
|
40
|
+
function stored(reply) {
|
|
41
|
+
return AsyncResult.from(async () => {
|
|
42
|
+
try {
|
|
43
|
+
const { data, error } = await reply;
|
|
44
|
+
if (error) return err(fromStorageError(error, "storage.objects"));
|
|
45
|
+
if (data === null || data === void 0) return err(dbError("network", "Storage returned no data"));
|
|
46
|
+
return ok(data);
|
|
47
|
+
} catch (cause) {
|
|
48
|
+
return err(fromStorageError(cause, "storage.objects"));
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
function lookup(call, id) {
|
|
53
|
+
return call("get_attachment", { id }, (value) => value).andThen((value) => Promise.resolve(isRecord(value) ? ok(attachmentOf(value)) : err(notFound())));
|
|
54
|
+
}
|
|
55
|
+
/** Attachments as the caller: the table's and the bucket's policies apply. */
|
|
56
|
+
function createAttachments(options) {
|
|
57
|
+
applyTemporal(options);
|
|
58
|
+
const call = blockCall(options.transport, options.schema, options.mappers);
|
|
59
|
+
const requireScan = options.requireScan ?? true;
|
|
60
|
+
const ttl = options.downloadTtl ?? 300;
|
|
61
|
+
const bucket = (attachment) => options.storage.from(attachment.bucket);
|
|
62
|
+
/** Why a file can't be read yet, or `undefined` once it can. */
|
|
63
|
+
const gate = (attachment) => {
|
|
64
|
+
return attachment.status === "clean" || !requireScan && attachment.status !== "infected" && attachment.uploadedAt !== void 0 ? void 0 : dbError("invalid_request", attachment.status === "infected" ? "The file failed the malware scan" : "The file is not scanned yet", { hint: "ATTACHMENT_NOT_SCANNED" });
|
|
65
|
+
};
|
|
66
|
+
const upload = (attachment) => call("create_attachment", {
|
|
67
|
+
tenant: attachment.organizationId,
|
|
68
|
+
name: attachment.name,
|
|
69
|
+
mime_type: attachment.mimeType,
|
|
70
|
+
size: attachment.size,
|
|
71
|
+
subject_type: attachment.subjectType,
|
|
72
|
+
subject_id: attachment.subjectId,
|
|
73
|
+
metadata: attachment.metadata
|
|
74
|
+
}, attachmentOf).andThen((created) => stored(bucket(created).createSignedUploadUrl(created.path)).map((url) => ({
|
|
75
|
+
attachment: created,
|
|
76
|
+
signedUrl: url.signedUrl,
|
|
77
|
+
token: url.token
|
|
78
|
+
})));
|
|
79
|
+
return {
|
|
80
|
+
upload,
|
|
81
|
+
confirm: (id) => call("confirm_attachment", { id }, attachmentOf),
|
|
82
|
+
get: (id) => lookup(call, id),
|
|
83
|
+
list: (organizationId, subject) => call("list_attachments", {
|
|
84
|
+
tenant: organizationId,
|
|
85
|
+
subject_type: subject?.type,
|
|
86
|
+
subject_id: subject?.id
|
|
87
|
+
}, (value) => recordsOf(value, "list_attachments").map(attachmentOf)),
|
|
88
|
+
download: (id, download = {}) => lookup(call, id).andThen((attachment) => {
|
|
89
|
+
const blocked = gate(attachment);
|
|
90
|
+
if (blocked) return Promise.resolve(err(blocked));
|
|
91
|
+
return stored(bucket(attachment).createSignedUrl(attachment.path, ttl, download.as === void 0 ? void 0 : { download: download.as })).map((url) => ({
|
|
92
|
+
attachment,
|
|
93
|
+
signedUrl: url.signedUrl
|
|
94
|
+
}));
|
|
95
|
+
}),
|
|
96
|
+
put: (attachment, file) => upload(attachment).andThen(async ({ attachment: created }) => {
|
|
97
|
+
const target = bucket(created);
|
|
98
|
+
if (!target.upload) return err(dbError("invalid_request", "The storage client has no upload", { hint: "ATTACHMENT_STORAGE_CLIENT" }));
|
|
99
|
+
const sent = await stored(target.upload(created.path, file, {
|
|
100
|
+
contentType: created.mimeType,
|
|
101
|
+
upsert: false
|
|
102
|
+
}));
|
|
103
|
+
if (!sent.ok) return sent;
|
|
104
|
+
return call("confirm_attachment", { id: created.id }, attachmentOf);
|
|
105
|
+
}),
|
|
106
|
+
read: (id) => lookup(call, id).andThen((attachment) => {
|
|
107
|
+
const blocked = gate(attachment);
|
|
108
|
+
if (blocked) return Promise.resolve(err(blocked));
|
|
109
|
+
return stored(bucket(attachment).download(attachment.path)).map((file) => ({
|
|
110
|
+
attachment,
|
|
111
|
+
file
|
|
112
|
+
}));
|
|
113
|
+
}),
|
|
114
|
+
remove: (id) => lookup(call, id).andThen((attachment) => stored(bucket(attachment).remove([attachment.path]))).andThen(() => call("delete_attachment", { id }, (value) => value === true))
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Scans uploaded files with the app's `scan` function and records `clean`,
|
|
119
|
+
* `infected` or `failed`. A file already clean or infected is not scanned
|
|
120
|
+
* again, so replayed events and retried jobs are safe.
|
|
121
|
+
*/
|
|
122
|
+
function createAttachmentScanner(options) {
|
|
123
|
+
applyTemporal(options);
|
|
124
|
+
const call = blockCall(options.transport, options.schema);
|
|
125
|
+
const prefix = `${options.typePrefix ?? "dev.better-supabase"}.`;
|
|
126
|
+
const record = (id, status, detail) => call("set_attachment_status", {
|
|
127
|
+
id,
|
|
128
|
+
status,
|
|
129
|
+
detail
|
|
130
|
+
}, (value) => value).andThen((value) => Promise.resolve(isRecord(value) ? ok(attachmentOf(value)) : err(notFound())));
|
|
131
|
+
const scan = (id, signal) => lookup(call, id).andThen((attachment) => {
|
|
132
|
+
if (attachment.status === "clean" || attachment.status === "infected") return Promise.resolve(ok(attachment));
|
|
133
|
+
if (attachment.uploadedAt === void 0) return Promise.resolve(err(dbError("invalid_request", "The file was not uploaded yet", { hint: "ATTACHMENT_NOT_UPLOADED" })));
|
|
134
|
+
return stored(options.storage.from(attachment.bucket).download(attachment.path)).andThen(async (file) => {
|
|
135
|
+
let verdict;
|
|
136
|
+
try {
|
|
137
|
+
verdict = await options.scan(file, attachment, signal);
|
|
138
|
+
} catch (cause) {
|
|
139
|
+
const failed = await record(id, "failed", errorText(cause));
|
|
140
|
+
return failed.ok ? err(dbError("raised", `The scan failed: ${errorText(cause)}`, { hint: "ATTACHMENT_SCAN_FAILED" })) : failed;
|
|
141
|
+
}
|
|
142
|
+
return record(id, verdict.status, verdict.detail);
|
|
143
|
+
});
|
|
144
|
+
});
|
|
145
|
+
return {
|
|
146
|
+
scan,
|
|
147
|
+
job: async (payload, _job, signal) => {
|
|
148
|
+
await scan(payload.attachmentId, signal).orThrow();
|
|
149
|
+
},
|
|
150
|
+
sink: () => ({ async send(events) {
|
|
151
|
+
for (const event of events) {
|
|
152
|
+
if ((event.type.startsWith(prefix) ? event.type.slice(prefix.length) : event.type) !== "attachment.uploaded" || !isRecord(event.data)) continue;
|
|
153
|
+
const id = optionalText(event.data["attachmentId"]);
|
|
154
|
+
if (id !== void 0) await scan(id).orThrow();
|
|
155
|
+
}
|
|
156
|
+
} })
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function scannedOf(value) {
|
|
160
|
+
const row = recordOf(value, "scanned_objects");
|
|
161
|
+
const status = textOf(row["status"]);
|
|
162
|
+
return {
|
|
163
|
+
bucket: textOf(row["bucket"]),
|
|
164
|
+
path: textOf(row["object_path"]),
|
|
165
|
+
status: status === "clean" || status === "infected" || status === "failed" ? status : "pending",
|
|
166
|
+
detail: optionalText(row["scan_detail"]),
|
|
167
|
+
scannedAt: optionalInstant(row["scanned_at"])
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* The scan gate for objects outside the attachments table, such as a file
|
|
172
|
+
* drive or avatars: scans an object with the app's `scan` function and
|
|
173
|
+
* records the verdict in `scanned_objects`, which storage policies read with
|
|
174
|
+
* `object_clean(bucket_id, name)`. With `options.scanBuckets`, new objects in
|
|
175
|
+
* those buckets get a pending row and an `object.uploaded` event.
|
|
176
|
+
*/
|
|
177
|
+
function createObjectScanner(options) {
|
|
178
|
+
applyTemporal(options);
|
|
179
|
+
const call = blockCall(options.transport, options.schema);
|
|
180
|
+
const prefix = `${options.typePrefix ?? "dev.better-supabase"}.`;
|
|
181
|
+
const record = (bucket, path, status, detail) => call("set_object_scan", {
|
|
182
|
+
bucket,
|
|
183
|
+
path,
|
|
184
|
+
status,
|
|
185
|
+
detail
|
|
186
|
+
}, scannedOf);
|
|
187
|
+
const scan = (bucket, path, signal) => call("object_scan", {
|
|
188
|
+
bucket,
|
|
189
|
+
path
|
|
190
|
+
}, (value) => isRecord(value) ? scannedOf(value) : void 0).andThen((current) => {
|
|
191
|
+
if (current?.status === "clean" || current?.status === "infected") return Promise.resolve(ok(current));
|
|
192
|
+
return stored(options.storage.from(bucket).download(path)).andThen(async (file) => {
|
|
193
|
+
let verdict;
|
|
194
|
+
try {
|
|
195
|
+
verdict = await options.scan(file, {
|
|
196
|
+
bucket,
|
|
197
|
+
path
|
|
198
|
+
}, signal);
|
|
199
|
+
} catch (cause) {
|
|
200
|
+
const failed = await record(bucket, path, "failed", errorText(cause));
|
|
201
|
+
return failed.ok ? err(dbError("raised", `The scan failed: ${errorText(cause)}`, { hint: "ATTACHMENT_SCAN_FAILED" })) : failed;
|
|
202
|
+
}
|
|
203
|
+
return record(bucket, path, verdict.status, verdict.detail);
|
|
204
|
+
});
|
|
205
|
+
});
|
|
206
|
+
return {
|
|
207
|
+
scan,
|
|
208
|
+
job: async (payload, _job, signal) => {
|
|
209
|
+
await scan(payload.bucket, payload.path, signal).orThrow();
|
|
210
|
+
},
|
|
211
|
+
sink: () => ({ async send(events) {
|
|
212
|
+
for (const event of events) {
|
|
213
|
+
if ((event.type.startsWith(prefix) ? event.type.slice(prefix.length) : event.type) !== "object.uploaded" || !isRecord(event.data)) continue;
|
|
214
|
+
const bucket = optionalText(event.data["bucket"]);
|
|
215
|
+
const path = optionalText(event.data["path"]);
|
|
216
|
+
if (bucket !== void 0 && path !== void 0) await scan(bucket, path).orThrow();
|
|
217
|
+
}
|
|
218
|
+
} })
|
|
219
|
+
};
|
|
220
|
+
}
|
|
221
|
+
//#endregion
|
|
222
|
+
export { createAttachmentScanner, createAttachments, createObjectScanner, rpcTransport, sqlTransport };
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
/// <reference lib="esnext.temporal" />
|
|
2
|
+
import { t as AsyncResult, w as ErrorMapper } from "../../result-D7y2fT87.js";
|
|
3
|
+
import { L as TableKey, a as AnyModels, i as AnyFunctions } from "../../types-6BdhkmZe.js";
|
|
4
|
+
import { t as SqlClient } from "../../executor-DbvExCFC.js";
|
|
5
|
+
import { i as sqlTransport, r as rpcTransport, t as BlockTransport } from "../../block-transport-DvaoPuZ9.js";
|
|
6
|
+
import { r as BlockTemporalOptions } from "../../block-helpers-CKtbFcRv.js";
|
|
7
|
+
import { t as BetterSupabase, zt as WhereInput } from "../../define-CJJkkr1-.js";
|
|
8
|
+
import { r as EventSink, t as CloudEvent } from "../../cloud-event-C1JCc1bH.js";
|
|
9
|
+
import { i as ListDefinition } from "../../list-query-BRt-zDF7.js";
|
|
10
|
+
import { n as AuditCategory } from "../../context-BCrWe7ow.js";
|
|
11
|
+
//#region src/blocks/audit/audit.d.ts
|
|
12
|
+
interface PurgeAuditLogOptions extends BlockTemporalOptions {
|
|
13
|
+
/** How long entries are kept when `retention` has no answer. Defaults to `1 year`. */
|
|
14
|
+
readonly olderThan?: number | string;
|
|
15
|
+
/** The most entries deleted per tenant in one call. Defaults to 10000. */
|
|
16
|
+
readonly batch?: number;
|
|
17
|
+
/**
|
|
18
|
+
* Days a tenant keeps its entries (a plan's retention, say); `undefined`
|
|
19
|
+
* uses `olderThan`. Called with `null` for entries without a tenant.
|
|
20
|
+
* Retention shorter than a day is not supported. `setAuditRetention`
|
|
21
|
+
* reads the days from a column.
|
|
22
|
+
*/
|
|
23
|
+
readonly retention?: (tenant: string | null) => number | undefined | Promise<number | undefined>;
|
|
24
|
+
}
|
|
25
|
+
type Retention = NonNullable<PurgeAuditLogOptions["retention"]>;
|
|
26
|
+
/**
|
|
27
|
+
* Deletes audit entries past their retention and returns how many. Without
|
|
28
|
+
* `retention` it is one `purge_audit_log` call (which honours an
|
|
29
|
+
* `audit_retention` SQL hook); with it, each tenant is purged with its own
|
|
30
|
+
* interval. Run it from a schedule until it returns 0.
|
|
31
|
+
*/
|
|
32
|
+
export declare function purgeAuditLog(sql: SqlClient, options?: PurgeAuditLogOptions): AsyncResult<number>;
|
|
33
|
+
interface AuditRetentionSource {
|
|
34
|
+
/** `schema.table` holding one row per tenant, e.g. `public.organizations`. */
|
|
35
|
+
readonly table: string;
|
|
36
|
+
/** The integer column with the days to keep; `null` uses `olderThan`. */
|
|
37
|
+
readonly column: string;
|
|
38
|
+
/** The tenant id column. Defaults to `id`. */
|
|
39
|
+
readonly key?: string;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* A `retention` callback for `purgeAuditLog` that reads each tenant's days
|
|
43
|
+
* from a column (a plan's `audit_retention_days`, say). `purgeAuditLog` reads
|
|
44
|
+
* every tenant's days in one query; a direct call reads one tenant.
|
|
45
|
+
*/
|
|
46
|
+
export declare function setAuditRetention(sql: SqlClient, source: AuditRetentionSource): Retention;
|
|
47
|
+
/** One audit entry as `exportAuditLog` reads it. */
|
|
48
|
+
interface AuditEntry {
|
|
49
|
+
readonly id: string;
|
|
50
|
+
readonly occurredAt: Temporal.Instant;
|
|
51
|
+
/** `insert`, `update` and `delete` for row changes; `event` for `audit_event()`. */
|
|
52
|
+
readonly op: string;
|
|
53
|
+
readonly table?: string;
|
|
54
|
+
readonly record?: string;
|
|
55
|
+
readonly changed?: readonly string[];
|
|
56
|
+
readonly actor?: string;
|
|
57
|
+
readonly actorRole?: string;
|
|
58
|
+
readonly organizationId?: string;
|
|
59
|
+
readonly eventType?: string;
|
|
60
|
+
readonly category?: string;
|
|
61
|
+
readonly outcome?: string;
|
|
62
|
+
readonly source?: string;
|
|
63
|
+
readonly targetType?: string;
|
|
64
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
65
|
+
}
|
|
66
|
+
interface OcsfProduct {
|
|
67
|
+
readonly name: string;
|
|
68
|
+
readonly vendor_name?: string;
|
|
69
|
+
readonly version?: string;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* One entry as an OCSF event (`SPEC_PINS.ocsf`). Row changes are Entity
|
|
73
|
+
* Management (3004); semantic events are API Activity (6003), with the
|
|
74
|
+
* activity read from the event type's last segment (`deal.created` is Create).
|
|
75
|
+
*/
|
|
76
|
+
export declare function toOcsf(entry: AuditEntry, product: OcsfProduct): Record<string, unknown>;
|
|
77
|
+
interface ExportAuditLogOptions extends BlockTemporalOptions {
|
|
78
|
+
/** Only this tenant's entries. */
|
|
79
|
+
readonly organizationId: string;
|
|
80
|
+
readonly from?: Temporal.Instant;
|
|
81
|
+
/** Exclusive. */
|
|
82
|
+
readonly to?: Temporal.Instant;
|
|
83
|
+
/** `ndjson` writes entries as they are; `ocsf` maps each with `toOcsf`. */
|
|
84
|
+
readonly format?: "ndjson" | "ocsf";
|
|
85
|
+
/** Required for `ocsf`: `metadata.product`. */
|
|
86
|
+
readonly product?: OcsfProduct;
|
|
87
|
+
/** Rows per query. Defaults to 1000. */
|
|
88
|
+
readonly batch?: number;
|
|
89
|
+
/** Defaults to `better_supabase.audit_events`. */
|
|
90
|
+
readonly table?: string;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Streams one tenant's audit entries as newline-delimited JSON, in id
|
|
94
|
+
* order, one keyset query per batch. Run it with a member's claims (the
|
|
95
|
+
* `readPolicy` filters) or as the service role. It reads the managed
|
|
96
|
+
* module's column names; for an adopted log, the version 3 columns or CSV,
|
|
97
|
+
* use `createAuditLog().export()`, which reads `list_audit_events`.
|
|
98
|
+
*/
|
|
99
|
+
export declare function exportAuditLog(sql: SqlClient, options: ExportAuditLogOptions): ReadableStream<Uint8Array>;
|
|
100
|
+
type AuditSort = "newest" | "oldest";
|
|
101
|
+
type AuditFacet = "table" | "record" | "op" | "actor" | "event" | "category" | "outcome" | "target";
|
|
102
|
+
type AuditListDefinition<M extends AnyModels, T extends TableKey<M>, E> = ListDefinition<M, T, E, AuditSort, AuditFacet, false, "cursor"> & {
|
|
103
|
+
/** A `where` for `run(db, query, { where })`: entries in `[from, to)`. */
|
|
104
|
+
between(from?: Temporal.Instant, to?: Temporal.Instant): WhereInput<M, T>;
|
|
105
|
+
};
|
|
106
|
+
/**
|
|
107
|
+
* A cursor-paged list over the audit table through the Data API or
|
|
108
|
+
* `ctx.sql` (generate types for the module's schema to get it in your
|
|
109
|
+
* models; facets follow the managed column names). `createAuditLog().list()`
|
|
110
|
+
* reads `list_audit_events` instead, with an adopted log's columns mapped.
|
|
111
|
+
* Filtered by actor,
|
|
112
|
+
* table, record, event type, category, outcome and target, newest first.
|
|
113
|
+
* The `readPolicy` and the `restricted` table decide what a member sees.
|
|
114
|
+
*/
|
|
115
|
+
export declare function auditListQuery<M extends AnyModels, D, Fn extends AnyFunctions, E, T extends TableKey<M>>(betterSupabase: BetterSupabase<M, D, Fn, E>, table: T, options?: {
|
|
116
|
+
readonly pageSize?: number;
|
|
117
|
+
readonly maxPageSize?: number;
|
|
118
|
+
}): AuditListDefinition<M, T, E>;
|
|
119
|
+
//#endregion
|
|
120
|
+
//#region src/blocks/audit/csv.d.ts
|
|
121
|
+
/** A CSV export column: a key, or a key and the header to write for it. */
|
|
122
|
+
type AuditCsvColumn = string | {
|
|
123
|
+
readonly key: string;
|
|
124
|
+
readonly label: string;
|
|
125
|
+
};
|
|
126
|
+
/** How `export({ format: "csv" })` writes its rows. */
|
|
127
|
+
interface AuditCsvOptions<Columns extends AuditColumns = AuditColumns> {
|
|
128
|
+
/**
|
|
129
|
+
* The columns, in order: a key of the record (`eventType`),
|
|
130
|
+
* `columns.<name>` for a column `metadataColumns` fills, or
|
|
131
|
+
* `restricted.<field>` (`ip`, `userAgent`, `sessionId`, `metadata`, `old`,
|
|
132
|
+
* `new` or `changes`) for a caller who may reveal the entries. A restricted
|
|
133
|
+
* column reads each page through `reveal_audit_entries`, which records
|
|
134
|
+
* `audit.revealed`, and is empty for entries the caller may not reveal.
|
|
135
|
+
* Defaults to the built-in columns.
|
|
136
|
+
*/
|
|
137
|
+
readonly columns?: readonly AuditCsvColumn[];
|
|
138
|
+
/** Lines written before the header row, one cell each, such as a title. */
|
|
139
|
+
readonly preamble?: readonly string[];
|
|
140
|
+
/**
|
|
141
|
+
* The row to write, by column key. It gets the default row, the record and
|
|
142
|
+
* its restricted details (only with a restricted column).
|
|
143
|
+
*/
|
|
144
|
+
readonly formatRow?: (row: Readonly<Record<string, unknown>>, record: AuditRecord<Columns>, details: AuditDetails | undefined) => Readonly<Record<string, unknown>>;
|
|
145
|
+
}
|
|
146
|
+
//#endregion
|
|
147
|
+
//#region src/blocks/audit/sink.d.ts
|
|
148
|
+
interface AuditSinkOptions {
|
|
149
|
+
/** The type prefix stripped from each event's `type`. Defaults to `dev.better-supabase`. */
|
|
150
|
+
readonly typePrefix?: string;
|
|
151
|
+
/**
|
|
152
|
+
* The category for an event type (without the prefix), from the categories
|
|
153
|
+
* the SQL modules use. Defaults to `security` for `account.*` and
|
|
154
|
+
* `support.*`, and no category for the rest.
|
|
155
|
+
*/
|
|
156
|
+
readonly category?: (eventType: string) => AuditCategory | undefined;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* The audit entry for one CloudEvent: its type without the prefix, its
|
|
160
|
+
* subject as the record, the tenant from the `tenant` or `partitionkey`
|
|
161
|
+
* extension (or `data.organizationId`), and the data as metadata. The
|
|
162
|
+
* idempotency key is the event's source and id, so a redelivery records once.
|
|
163
|
+
*/
|
|
164
|
+
export declare function auditEventOf(event: CloudEvent, options?: AuditSinkOptions): AuditEventInput;
|
|
165
|
+
/**
|
|
166
|
+
* An `EventSink` that records each CloudEvent in the audit log. `send`
|
|
167
|
+
* throws when an entry fails, so an outbox relay retries the batch; the
|
|
168
|
+
* idempotency key keeps the entries already written from repeating.
|
|
169
|
+
*/
|
|
170
|
+
export declare function auditSink(record: (event: AuditEventInput) => AsyncResult<string>, options?: AuditSinkOptions): EventSink;
|
|
171
|
+
//#endregion
|
|
172
|
+
//#region src/blocks/audit/client.d.ts
|
|
173
|
+
/** The adopted log's own columns, by column name, as `metadataColumns` maps them. */
|
|
174
|
+
type AuditColumns = Readonly<Record<string, unknown>>;
|
|
175
|
+
/**
|
|
176
|
+
* One entry as `list_audit_events` returns it: the module's columns under
|
|
177
|
+
* stable keys, whatever the adopted log calls them. Fields the log doesn't
|
|
178
|
+
* have, or the caller may not read, are missing.
|
|
179
|
+
*/
|
|
180
|
+
interface AuditRecord<Columns extends AuditColumns = AuditColumns> {
|
|
181
|
+
readonly id: string;
|
|
182
|
+
readonly occurredAt: Temporal.Instant;
|
|
183
|
+
readonly op?: string;
|
|
184
|
+
readonly table?: string;
|
|
185
|
+
readonly record?: string;
|
|
186
|
+
readonly changed?: readonly string[];
|
|
187
|
+
readonly old?: Readonly<Record<string, unknown>>;
|
|
188
|
+
readonly new?: Readonly<Record<string, unknown>>;
|
|
189
|
+
readonly actorId?: string;
|
|
190
|
+
readonly actorRole?: string;
|
|
191
|
+
readonly actorKind?: string;
|
|
192
|
+
readonly actorLabel?: string;
|
|
193
|
+
readonly tenant?: string;
|
|
194
|
+
readonly tenantLabel?: string;
|
|
195
|
+
readonly impersonatedBy?: string;
|
|
196
|
+
readonly impersonationReason?: string;
|
|
197
|
+
readonly supportSession?: string;
|
|
198
|
+
readonly eventType?: string;
|
|
199
|
+
readonly category?: string;
|
|
200
|
+
readonly outcome?: string;
|
|
201
|
+
readonly source?: string;
|
|
202
|
+
readonly targetType?: string;
|
|
203
|
+
readonly targetLabel?: string;
|
|
204
|
+
readonly summary?: string;
|
|
205
|
+
readonly requestId?: string;
|
|
206
|
+
readonly correlationId?: string;
|
|
207
|
+
readonly scope?: string;
|
|
208
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
209
|
+
/**
|
|
210
|
+
* The adopted log's columns that `sql.modules.audit.options.metadataColumns`
|
|
211
|
+
* fills, by column name. Missing without that option.
|
|
212
|
+
*/
|
|
213
|
+
readonly columns?: Readonly<Partial<Columns>>;
|
|
214
|
+
}
|
|
215
|
+
/** Where a page ends: pass it as `before` for the next, older page. */
|
|
216
|
+
interface AuditCursor {
|
|
217
|
+
readonly occurredAt: Temporal.Instant;
|
|
218
|
+
readonly id: string;
|
|
219
|
+
}
|
|
220
|
+
type OneOrMany = string | readonly string[];
|
|
221
|
+
interface AuditListOptions {
|
|
222
|
+
readonly organizationId?: OneOrMany;
|
|
223
|
+
readonly eventType?: OneOrMany;
|
|
224
|
+
readonly actorId?: OneOrMany;
|
|
225
|
+
readonly targetType?: OneOrMany;
|
|
226
|
+
readonly record?: OneOrMany;
|
|
227
|
+
readonly category?: OneOrMany;
|
|
228
|
+
readonly outcome?: OneOrMany;
|
|
229
|
+
readonly source?: OneOrMany;
|
|
230
|
+
readonly actorKind?: OneOrMany;
|
|
231
|
+
readonly correlationId?: OneOrMany;
|
|
232
|
+
readonly search?: string;
|
|
233
|
+
readonly order?: "desc" | "asc";
|
|
234
|
+
readonly count?: boolean;
|
|
235
|
+
/** Entries at or after this instant. */
|
|
236
|
+
readonly since?: Temporal.Instant;
|
|
237
|
+
/** Entries before this instant. */
|
|
238
|
+
readonly until?: Temporal.Instant;
|
|
239
|
+
/** `page.next` of the previous page; `undefined` starts at the newest. */
|
|
240
|
+
readonly cursor?: AuditCursor | undefined;
|
|
241
|
+
/** Default 50, at most 1000. */
|
|
242
|
+
readonly limit?: number;
|
|
243
|
+
readonly offset?: number;
|
|
244
|
+
}
|
|
245
|
+
interface AuditPage<Columns extends AuditColumns = AuditColumns> {
|
|
246
|
+
readonly entries: readonly AuditRecord<Columns>[];
|
|
247
|
+
/** The cursor of the next page, or `undefined` on the last one. */
|
|
248
|
+
readonly next: AuditCursor | undefined;
|
|
249
|
+
readonly total?: number;
|
|
250
|
+
}
|
|
251
|
+
/** The restricted details `reveal` returns, when the entry has them. */
|
|
252
|
+
interface AuditDetails {
|
|
253
|
+
readonly entry: string;
|
|
254
|
+
readonly old?: Readonly<Record<string, unknown>>;
|
|
255
|
+
readonly new?: Readonly<Record<string, unknown>>;
|
|
256
|
+
readonly ip?: string;
|
|
257
|
+
readonly userAgent?: string;
|
|
258
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
259
|
+
readonly sessionId?: string;
|
|
260
|
+
readonly changes?: unknown;
|
|
261
|
+
}
|
|
262
|
+
interface AuditExportOptions<Columns extends AuditColumns = AuditColumns> extends Omit<AuditListOptions, "before" | "limit" | "count">, AuditCsvOptions<Columns> {
|
|
263
|
+
/**
|
|
264
|
+
* `ndjson` (default) writes the records as they are, `csv` a spreadsheet
|
|
265
|
+
* with a header row, `ocsf` each record mapped with `toOcsf`.
|
|
266
|
+
*/
|
|
267
|
+
readonly format?: "ndjson" | "csv" | "ocsf";
|
|
268
|
+
/** Required for `ocsf`: `metadata.product`. */
|
|
269
|
+
readonly product?: OcsfProduct;
|
|
270
|
+
/** Entries per call. Default 500. */
|
|
271
|
+
readonly batch?: number;
|
|
272
|
+
}
|
|
273
|
+
/** The part of `supabase.storage.from(bucket)` an export upload uses. */
|
|
274
|
+
interface AuditExportBucket {
|
|
275
|
+
upload(path: string, body: Blob, options?: {
|
|
276
|
+
contentType?: string;
|
|
277
|
+
upsert?: boolean;
|
|
278
|
+
}): PromiseLike<{
|
|
279
|
+
readonly data: unknown;
|
|
280
|
+
readonly error: unknown;
|
|
281
|
+
}>;
|
|
282
|
+
createSignedUrl?(path: string, expiresIn: number, options?: {
|
|
283
|
+
download?: string | boolean;
|
|
284
|
+
}): PromiseLike<{
|
|
285
|
+
readonly data: {
|
|
286
|
+
readonly signedUrl: string;
|
|
287
|
+
} | null;
|
|
288
|
+
readonly error: unknown;
|
|
289
|
+
}>;
|
|
290
|
+
}
|
|
291
|
+
interface AuditExportToStorageOptions<Columns extends AuditColumns = AuditColumns> extends AuditExportOptions<Columns> {
|
|
292
|
+
readonly storage: {
|
|
293
|
+
from(bucket: string): AuditExportBucket;
|
|
294
|
+
};
|
|
295
|
+
readonly bucket: string;
|
|
296
|
+
/** The object path, such as `{organizationId}/audit/{jobId}.csv`. */
|
|
297
|
+
readonly path: string;
|
|
298
|
+
/** Also sign a download URL that lives this many seconds. */
|
|
299
|
+
readonly signedUrlTtl?: number;
|
|
300
|
+
}
|
|
301
|
+
interface AuditEventInput {
|
|
302
|
+
readonly eventType: string;
|
|
303
|
+
readonly category?: string;
|
|
304
|
+
readonly outcome?: string;
|
|
305
|
+
readonly source?: string;
|
|
306
|
+
readonly targetType?: string;
|
|
307
|
+
readonly record?: string;
|
|
308
|
+
readonly organizationId?: string;
|
|
309
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
310
|
+
readonly idempotencyKey?: string;
|
|
311
|
+
readonly restricted?: Readonly<Record<string, unknown>>;
|
|
312
|
+
readonly summary?: string;
|
|
313
|
+
readonly targetLabel?: string;
|
|
314
|
+
readonly correlationId?: string;
|
|
315
|
+
readonly actorId?: string;
|
|
316
|
+
readonly actorKind?: string;
|
|
317
|
+
readonly actorLabel?: string;
|
|
318
|
+
readonly ip?: string;
|
|
319
|
+
readonly userAgent?: string;
|
|
320
|
+
readonly sessionId?: string;
|
|
321
|
+
readonly requestId?: string;
|
|
322
|
+
readonly scope?: string;
|
|
323
|
+
}
|
|
324
|
+
interface AuditLogOptions extends BlockTemporalOptions {
|
|
325
|
+
/** `sqlTransport(ctx.postgres)` for members, or `rpcTransport` over an API schema. */
|
|
326
|
+
readonly transport: BlockTransport;
|
|
327
|
+
/** The audit module's schema, or its API schema. Default `better_supabase`. */
|
|
328
|
+
readonly schema?: string;
|
|
329
|
+
readonly mappers?: readonly ErrorMapper[];
|
|
330
|
+
}
|
|
331
|
+
interface AuditLog<Columns extends AuditColumns = AuditColumns> {
|
|
332
|
+
record(event: AuditEventInput): AsyncResult<string>;
|
|
333
|
+
/** A page of the entries the caller can read, newest first. */
|
|
334
|
+
list(options?: AuditListOptions): AsyncResult<AuditPage<Columns>>;
|
|
335
|
+
/**
|
|
336
|
+
* The restricted details of one entry for a caller with the reveal
|
|
337
|
+
* permission in its tenant (or platform staff); the reveal is itself
|
|
338
|
+
* recorded as `audit.revealed`. `not_found` otherwise.
|
|
339
|
+
*/
|
|
340
|
+
reveal(entryId: string): AsyncResult<AuditDetails>;
|
|
341
|
+
/** Every matching entry as NDJSON, CSV or OCSF, read page by page as the caller. */
|
|
342
|
+
export(options?: AuditExportOptions<Columns>): ReadableStream<Uint8Array>;
|
|
343
|
+
/**
|
|
344
|
+
* Writes an export to a Storage object, for a job that runs it in the
|
|
345
|
+
* background (the data lifecycle export bucket, say), and returns the path
|
|
346
|
+
* and a signed URL when `signedUrlTtl` is set.
|
|
347
|
+
*/
|
|
348
|
+
exportToStorage(options: AuditExportToStorageOptions<Columns>): AsyncResult<{
|
|
349
|
+
readonly path: string;
|
|
350
|
+
readonly url: string | undefined;
|
|
351
|
+
}>;
|
|
352
|
+
/**
|
|
353
|
+
* An `EventSink` that records CloudEvents, for `forwardBlockEvents`,
|
|
354
|
+
* `forwardMutations`, an outbox relay or the server's `audit` option.
|
|
355
|
+
* Build the log on a service-role transport so the event's actor counts.
|
|
356
|
+
*/
|
|
357
|
+
sink(options?: AuditSinkOptions): EventSink;
|
|
358
|
+
}
|
|
359
|
+
/**
|
|
360
|
+
* The audit log over the `audit` module's functions, as the caller: the
|
|
361
|
+
* read policy decides what `list` and `export` return, and column mappings
|
|
362
|
+
* of an adopted log are already applied.
|
|
363
|
+
*/
|
|
364
|
+
export declare function createAuditLog<Columns extends AuditColumns = AuditColumns>(options: AuditLogOptions): AuditLog<Columns>;
|
|
365
|
+
//#endregion
|
|
366
|
+
export { type AuditColumns, type AuditCsvColumn, type AuditCsvOptions, type AuditCursor, type AuditDetails, type AuditEntry, type AuditEventInput, type AuditExportBucket, type AuditExportOptions, type AuditExportToStorageOptions, type AuditFacet, type AuditListDefinition, type AuditListOptions, type AuditLog, type AuditLogOptions, type AuditPage, type AuditRecord, type AuditRetentionSource, type AuditSinkOptions, type AuditSort, type BlockTransport, type ExportAuditLogOptions, type OcsfProduct, type PurgeAuditLogOptions, rpcTransport, sqlTransport };
|