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,319 @@
|
|
|
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 { O as textOf, d as isRecord, f as notFoundError, h as optionalText, i as blockCall, k as toInstant, m as optionalInstant, n as applyTemporal, p as oneOf, u as instantArg, x as recordsOf, y as recordOf } from "./block-helpers-DWHxHsEQ.js";
|
|
4
|
+
import { t as fromStorageError } from "./errors-DLjJHPLK.js";
|
|
5
|
+
//#region src/blocks/ai-files/rows.ts
|
|
6
|
+
const FILE_STATUSES = [
|
|
7
|
+
"pending",
|
|
8
|
+
"ready",
|
|
9
|
+
"failed"
|
|
10
|
+
];
|
|
11
|
+
const FILE_SOURCES = [
|
|
12
|
+
"upload",
|
|
13
|
+
"generated",
|
|
14
|
+
"provider"
|
|
15
|
+
];
|
|
16
|
+
const DOCUMENT_KINDS = [
|
|
17
|
+
"text",
|
|
18
|
+
"code",
|
|
19
|
+
"sheet",
|
|
20
|
+
"image"
|
|
21
|
+
];
|
|
22
|
+
const instant = (value) => value instanceof Date ? toInstant(value) : toInstant(textOf(value));
|
|
23
|
+
function fileOf(value) {
|
|
24
|
+
const row = recordOf(value, "ai_files");
|
|
25
|
+
return {
|
|
26
|
+
id: textOf(row["id"]),
|
|
27
|
+
organizationId: textOf(row["organization_id"]),
|
|
28
|
+
ownerId: textOf(row["owner_id"]),
|
|
29
|
+
chatId: optionalText(row["chat_id"]),
|
|
30
|
+
projectId: optionalText(row["project_id"]),
|
|
31
|
+
bucket: textOf(row["bucket"]),
|
|
32
|
+
path: textOf(row["path"]),
|
|
33
|
+
mediaType: textOf(row["media_type"]),
|
|
34
|
+
filename: textOf(row["filename"]),
|
|
35
|
+
size: Number(row["byte_size"] ?? 0),
|
|
36
|
+
sha256: optionalText(row["sha256"]),
|
|
37
|
+
status: oneOf(textOf(row["status"]), FILE_STATUSES, "failed"),
|
|
38
|
+
source: oneOf(textOf(row["source"]), FILE_SOURCES, "upload"),
|
|
39
|
+
createdAt: instant(row["created_at"]),
|
|
40
|
+
uploadedAt: optionalInstant(row["uploaded_at"]),
|
|
41
|
+
expiresAt: optionalInstant(row["expires_at"])
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
function providerFileOf(value) {
|
|
45
|
+
const row = recordOf(value, "ai_provider_files");
|
|
46
|
+
return {
|
|
47
|
+
fileId: textOf(row["file_id"]),
|
|
48
|
+
provider: textOf(row["provider"]),
|
|
49
|
+
reference: textOf(row["reference"]),
|
|
50
|
+
expiresAt: optionalInstant(row["expires_at"])
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function documentOf(value) {
|
|
54
|
+
const row = recordOf(value, "ai_documents");
|
|
55
|
+
return {
|
|
56
|
+
id: textOf(row["id"]),
|
|
57
|
+
organizationId: textOf(row["organization_id"]),
|
|
58
|
+
ownerId: textOf(row["owner_id"]),
|
|
59
|
+
chatId: optionalText(row["chat_id"]),
|
|
60
|
+
kind: oneOf(textOf(row["kind"]), DOCUMENT_KINDS, "text"),
|
|
61
|
+
title: textOf(row["title"]),
|
|
62
|
+
version: Number(row["current_version"] ?? 1),
|
|
63
|
+
createdAt: instant(row["created_at"]),
|
|
64
|
+
updatedAt: instant(row["updated_at"])
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
function versionOf(value) {
|
|
68
|
+
const row = recordOf(value, "ai_document_versions");
|
|
69
|
+
return {
|
|
70
|
+
documentId: textOf(row["document_id"]),
|
|
71
|
+
version: Number(row["version"]),
|
|
72
|
+
content: optionalText(row["content"]),
|
|
73
|
+
storagePath: optionalText(row["storage_path"]),
|
|
74
|
+
messageId: optionalText(row["created_by_message_id"]),
|
|
75
|
+
createdBy: optionalText(row["created_by"]),
|
|
76
|
+
createdAt: instant(row["created_at"])
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
function suggestionOf(value) {
|
|
80
|
+
const row = recordOf(value, "ai_suggestions");
|
|
81
|
+
const accepted = row["accepted"];
|
|
82
|
+
return {
|
|
83
|
+
id: textOf(row["id"]),
|
|
84
|
+
documentId: textOf(row["document_id"]),
|
|
85
|
+
version: Number(row["version"]),
|
|
86
|
+
originalText: textOf(row["original_text"]),
|
|
87
|
+
suggestedText: textOf(row["suggested_text"]),
|
|
88
|
+
description: optionalText(row["description"]),
|
|
89
|
+
createdBy: optionalText(row["created_by"]),
|
|
90
|
+
createdAt: instant(row["created_at"]),
|
|
91
|
+
resolvedAt: optionalInstant(row["resolved_at"]),
|
|
92
|
+
accepted: typeof accepted === "boolean" ? accepted : void 0
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
//#endregion
|
|
96
|
+
//#region src/blocks/ai-files/ai-files.ts
|
|
97
|
+
const SCHEME = "supabase-storage:";
|
|
98
|
+
/** The URL a message stores for a file: `supabase-storage://{bucket}/{path}`. */
|
|
99
|
+
function aiFileUrl(file) {
|
|
100
|
+
return `${SCHEME}//${file.bucket}/${file.path.split("/").map(encodeURIComponent).join("/")}`;
|
|
101
|
+
}
|
|
102
|
+
/** The bucket and path of a `supabase-storage://` URL, or `undefined`. */
|
|
103
|
+
function parseAiFileUrl(url) {
|
|
104
|
+
let parsed;
|
|
105
|
+
try {
|
|
106
|
+
parsed = typeof url === "string" ? new URL(url) : url;
|
|
107
|
+
} catch {
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
if (parsed.protocol !== SCHEME || parsed.hostname === "") return void 0;
|
|
111
|
+
const segments = parsed.pathname.split("/").filter((part) => part !== "");
|
|
112
|
+
if (segments.length === 0) return void 0;
|
|
113
|
+
try {
|
|
114
|
+
return {
|
|
115
|
+
bucket: decodeURIComponent(parsed.hostname),
|
|
116
|
+
path: segments.map(decodeURIComponent).join("/")
|
|
117
|
+
};
|
|
118
|
+
} catch {
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
const notFound = () => notFoundError("No AI file you can see has this id", "AI_FILE_NOT_FOUND");
|
|
123
|
+
const notReady = () => dbError("invalid_request", "The file is not uploaded yet", { hint: "AI_FILE_NOT_READY" });
|
|
124
|
+
function stored(reply) {
|
|
125
|
+
return AsyncResult.from(async () => {
|
|
126
|
+
try {
|
|
127
|
+
const { data, error } = await reply;
|
|
128
|
+
if (error) return err(fromStorageError(error, "storage.objects"));
|
|
129
|
+
if (data === null || data === void 0) return err(dbError("network", "Storage returned no data"));
|
|
130
|
+
return ok(data);
|
|
131
|
+
} catch (cause) {
|
|
132
|
+
return err(fromStorageError(cause, "storage.objects"));
|
|
133
|
+
}
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
/** 50 MB, the module's default `maxSize`. */
|
|
137
|
+
const DEFAULT_MAX_BYTES = 52428800;
|
|
138
|
+
/** Files and documents for AI chats, as the caller and as the service role. */
|
|
139
|
+
function createAiFiles(options) {
|
|
140
|
+
applyTemporal(options);
|
|
141
|
+
const call = blockCall(options.transport, options.schema, options.mappers);
|
|
142
|
+
const service = blockCall(options.service ?? options.transport, options.schema, options.mappers);
|
|
143
|
+
const ttl = options.downloadTtl ?? 300;
|
|
144
|
+
const maxBytes = options.maxBytes ?? DEFAULT_MAX_BYTES;
|
|
145
|
+
const serviceStorage = options.serviceStorage ?? options.storage;
|
|
146
|
+
const found = (value) => isRecord(value) ? AsyncResult.ok(fileOf(value)) : AsyncResult.err(notFound());
|
|
147
|
+
const get = (fileId) => call("get_ai_file", { file_id: fileId }, (value) => value).andThen(found);
|
|
148
|
+
const fileFrom = (file) => typeof file === "string" ? get(file) : AsyncResult.ok(file);
|
|
149
|
+
const resolve = (url) => {
|
|
150
|
+
const target = parseAiFileUrl(url);
|
|
151
|
+
if (!target) return AsyncResult.err(dbError("invalid_request", "Not a supabase-storage:// URL", { hint: "AI_FILE_URL" }));
|
|
152
|
+
return call("get_ai_file_by_path", {
|
|
153
|
+
bucket: target.bucket,
|
|
154
|
+
path: target.path
|
|
155
|
+
}, (value) => value).andThen(found);
|
|
156
|
+
};
|
|
157
|
+
const sign = (file) => fileFrom(file).andThen((row) => row.status === "ready" ? stored(options.storage.from(row.bucket).createSignedUrl(row.path, ttl)).map((url) => url.signedUrl) : Promise.resolve(err(notReady())));
|
|
158
|
+
return {
|
|
159
|
+
files: {
|
|
160
|
+
upload: (organizationId, file) => call("reserve_ai_file", {
|
|
161
|
+
tenant: organizationId,
|
|
162
|
+
filename: file.filename,
|
|
163
|
+
media_type: file.mediaType,
|
|
164
|
+
byte_size: file.size,
|
|
165
|
+
chat_id: file.chatId,
|
|
166
|
+
project_id: file.projectId
|
|
167
|
+
}, fileOf).andThen((created) => stored(options.storage.from(created.bucket).createSignedUploadUrl(created.path)).map((url) => ({
|
|
168
|
+
file: created,
|
|
169
|
+
signedUrl: url.signedUrl,
|
|
170
|
+
token: url.token
|
|
171
|
+
}))),
|
|
172
|
+
confirm: (fileId, sha256) => call("confirm_ai_file", {
|
|
173
|
+
file_id: fileId,
|
|
174
|
+
sha256
|
|
175
|
+
}, fileOf),
|
|
176
|
+
get,
|
|
177
|
+
resolve,
|
|
178
|
+
list: (chatId) => call("list_ai_files", { chat_id: chatId }, (value) => recordsOf(value, "list_ai_files").map(fileOf)),
|
|
179
|
+
sign,
|
|
180
|
+
read: (file) => fileFrom(file).andThen(async (row) => {
|
|
181
|
+
if (row.status !== "ready") return err(notReady());
|
|
182
|
+
if (row.size > maxBytes) return err(dbError("invalid_request", "The file is larger than maxBytes", { hint: "AI_FILE_TOO_LARGE" }));
|
|
183
|
+
const blob = await stored(options.storage.from(row.bucket).download(row.path));
|
|
184
|
+
if (!blob.ok) return err(blob.error);
|
|
185
|
+
if (blob.data.size > maxBytes) return err(dbError("invalid_request", "The file is larger than maxBytes", { hint: "AI_FILE_TOO_LARGE" }));
|
|
186
|
+
return ok({
|
|
187
|
+
file: row,
|
|
188
|
+
data: new Uint8Array(await blob.data.arrayBuffer())
|
|
189
|
+
});
|
|
190
|
+
}),
|
|
191
|
+
remove: (fileId) => call("delete_ai_file", { file_id: fileId }, (value) => value).andThen(async (value) => {
|
|
192
|
+
if (!isRecord(value)) return ok(false);
|
|
193
|
+
const removed = await stored(options.storage.from(textOf(value["bucket"])).remove([textOf(value["path"])]));
|
|
194
|
+
return removed.ok ? ok(true) : err(removed.error);
|
|
195
|
+
}),
|
|
196
|
+
store: (organizationId, file) => service("store_ai_file", {
|
|
197
|
+
tenant: organizationId,
|
|
198
|
+
owner: file.ownerId,
|
|
199
|
+
filename: file.filename,
|
|
200
|
+
media_type: file.mediaType,
|
|
201
|
+
byte_size: file.data instanceof Uint8Array ? file.data.byteLength : file.data.size,
|
|
202
|
+
chat_id: file.chatId,
|
|
203
|
+
source: file.source ?? "generated"
|
|
204
|
+
}, fileOf).andThen(async (created) => {
|
|
205
|
+
const target = serviceStorage.from(created.bucket);
|
|
206
|
+
if (!target.upload) return err(dbError("invalid_request", "The storage client has no upload", { hint: "AI_FILE_STORAGE_CLIENT" }));
|
|
207
|
+
const sent = await stored(target.upload(created.path, file.data, {
|
|
208
|
+
contentType: created.mediaType,
|
|
209
|
+
upsert: false
|
|
210
|
+
}));
|
|
211
|
+
if (sent.ok) return ok(created);
|
|
212
|
+
await service("delete_ai_file", { file_id: created.id }, () => true);
|
|
213
|
+
return err(sent.error);
|
|
214
|
+
}),
|
|
215
|
+
purge: (purgeOptions = {}) => service("purge_ai_files", {
|
|
216
|
+
older_than: purgeOptions.olderThan,
|
|
217
|
+
batch: purgeOptions.batch
|
|
218
|
+
}, (value) => recordsOf(value, "purge_ai_files")).andThen(async (removed) => {
|
|
219
|
+
const byBucket = /* @__PURE__ */ new Map();
|
|
220
|
+
for (const row of removed) {
|
|
221
|
+
const bucket = textOf(row["bucket"]);
|
|
222
|
+
const paths = byBucket.get(bucket) ?? [];
|
|
223
|
+
paths.push(textOf(row["path"]));
|
|
224
|
+
byBucket.set(bucket, paths);
|
|
225
|
+
}
|
|
226
|
+
for (const [bucket, paths] of byBucket) {
|
|
227
|
+
const result = await stored(serviceStorage.from(bucket).remove(paths));
|
|
228
|
+
if (!result.ok) return err(result.error);
|
|
229
|
+
}
|
|
230
|
+
return ok(removed.length);
|
|
231
|
+
})
|
|
232
|
+
},
|
|
233
|
+
providerFiles: {
|
|
234
|
+
get: (fileId, provider) => service("get_ai_provider_file", {
|
|
235
|
+
file_id: fileId,
|
|
236
|
+
provider
|
|
237
|
+
}, (value) => isRecord(value) ? providerFileOf(value) : void 0),
|
|
238
|
+
set: (fileId, provider, reference, expiresAt) => service("set_ai_provider_file", {
|
|
239
|
+
file_id: fileId,
|
|
240
|
+
provider,
|
|
241
|
+
reference,
|
|
242
|
+
expires_at: instantArg(expiresAt)
|
|
243
|
+
}, (value) => value === true),
|
|
244
|
+
expiring: (horizon, batch) => service("expiring_ai_provider_files", {
|
|
245
|
+
horizon,
|
|
246
|
+
batch
|
|
247
|
+
}, (value) => recordsOf(value, "expiring_ai_provider_files").map(providerFileOf))
|
|
248
|
+
},
|
|
249
|
+
documents: {
|
|
250
|
+
create: (organizationId, document) => (document.ownerId === void 0 ? call : service)("create_ai_document", {
|
|
251
|
+
tenant: organizationId,
|
|
252
|
+
kind: document.kind,
|
|
253
|
+
title: document.title,
|
|
254
|
+
content: document.content,
|
|
255
|
+
chat_id: document.chatId,
|
|
256
|
+
message_id: document.messageId,
|
|
257
|
+
owner: document.ownerId,
|
|
258
|
+
storage_path: document.storagePath
|
|
259
|
+
}, documentOf),
|
|
260
|
+
get: (documentId) => call("get_ai_document", { document_id: documentId }, (value) => value).andThen((value) => Promise.resolve(isRecord(value) ? ok({
|
|
261
|
+
...documentOf(value),
|
|
262
|
+
content: optionalText(value["content"]),
|
|
263
|
+
storagePath: optionalText(value["storage_path"])
|
|
264
|
+
}) : err(dbError("not_found", "No document you can see has this id", { hint: "AI_DOCUMENT_NOT_FOUND" })))),
|
|
265
|
+
update: (documentId, edit) => call("update_ai_document", {
|
|
266
|
+
document_id: documentId,
|
|
267
|
+
content: edit.content,
|
|
268
|
+
title: edit.title,
|
|
269
|
+
message_id: edit.messageId,
|
|
270
|
+
expected_version: edit.expectedVersion,
|
|
271
|
+
storage_path: edit.storagePath
|
|
272
|
+
}, documentOf),
|
|
273
|
+
rollback: (documentId, version) => call("rollback_ai_document", {
|
|
274
|
+
document_id: documentId,
|
|
275
|
+
version
|
|
276
|
+
}, documentOf),
|
|
277
|
+
versions: (documentId) => call("list_ai_document_versions", { document_id: documentId }, (value) => recordsOf(value, "list_ai_document_versions").map(versionOf)),
|
|
278
|
+
remove: (documentId) => call("delete_ai_document", { document_id: documentId }, (value) => value === true),
|
|
279
|
+
suggest: (documentId, suggestion) => call("suggest_ai_document_edit", {
|
|
280
|
+
document_id: documentId,
|
|
281
|
+
original_text: suggestion.originalText,
|
|
282
|
+
suggested_text: suggestion.suggestedText,
|
|
283
|
+
description: suggestion.description
|
|
284
|
+
}, suggestionOf),
|
|
285
|
+
suggestions: (documentId, query = {}) => call("list_ai_suggestions", {
|
|
286
|
+
document_id: documentId,
|
|
287
|
+
open_only: query.openOnly ?? true
|
|
288
|
+
}, (value) => recordsOf(value, "list_ai_suggestions").map(suggestionOf)),
|
|
289
|
+
resolve: (suggestionId, accepted) => call("resolve_ai_suggestion", {
|
|
290
|
+
suggestion_id: suggestionId,
|
|
291
|
+
accepted
|
|
292
|
+
}, suggestionOf)
|
|
293
|
+
},
|
|
294
|
+
sign: async (messages) => {
|
|
295
|
+
const signed = /* @__PURE__ */ new Map();
|
|
296
|
+
for (const message of messages) for (const part of message.parts) {
|
|
297
|
+
if (part.type !== "file" || signed.has(part.url)) continue;
|
|
298
|
+
if (!parseAiFileUrl(part.url)) continue;
|
|
299
|
+
const result = await resolve(part.url).andThen(sign);
|
|
300
|
+
signed.set(part.url, result.ok ? result.data : void 0);
|
|
301
|
+
}
|
|
302
|
+
if (signed.size === 0) return messages;
|
|
303
|
+
const swap = (part) => {
|
|
304
|
+
if (part.type !== "file") return part;
|
|
305
|
+
const url = signed.get(part.url);
|
|
306
|
+
return url === void 0 ? part : {
|
|
307
|
+
...part,
|
|
308
|
+
url
|
|
309
|
+
};
|
|
310
|
+
};
|
|
311
|
+
return messages.map((message) => ({
|
|
312
|
+
...message,
|
|
313
|
+
parts: message.parts.map(swap)
|
|
314
|
+
}));
|
|
315
|
+
}
|
|
316
|
+
};
|
|
317
|
+
}
|
|
318
|
+
//#endregion
|
|
319
|
+
export { createAiFiles as n, parseAiFileUrl as r, aiFileUrl as t };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { r as Knowledge, u as KnowledgeSearchOptions } from "../../knowledge-BXBbT0Tr.js";
|
|
2
|
+
import { t as Agent } from "../../agents-CVHGd7It.js";
|
|
3
|
+
import { P as AiToolPolicy, _ as AiModerationAction, b as AiModerationStage, i as AiChat } from "../../ai-chat-7amvXjmQ.js";
|
|
4
|
+
import { r as SearchToolOptions } from "../../embeddings-C9KGQnXt.js";
|
|
5
|
+
import { LanguageModel, LanguageModelMiddleware, StopCondition, ToolLoopAgent, ToolLoopAgentSettings, ToolSet } from "ai";
|
|
6
|
+
//#region src/ai-sdk/agents/agents.d.ts
|
|
7
|
+
/**
|
|
8
|
+
* The tools an agent may call: the ones it lists (every tool when it lists
|
|
9
|
+
* none), without the tenant's `deny` tools.
|
|
10
|
+
*/
|
|
11
|
+
export declare function agentTools(agent: Pick<Agent, "tools">, available: ToolSet, policies?: Readonly<Record<string, AiToolPolicy>>): ToolSet;
|
|
12
|
+
/** The `toolApproval` setting that makes the tenant's `ask` tools wait for the user. */
|
|
13
|
+
export declare function agentToolApproval(tools: ToolSet, policies?: Readonly<Record<string, AiToolPolicy>>): Record<string, "user-approval">;
|
|
14
|
+
/** A `toolApproval` function, as `ToolLoopAgent` takes it. */
|
|
15
|
+
type AgentToolApprovalFunction = Extract<NonNullable<ToolLoopAgentSettings<never, ToolSet>["toolApproval"]>, (options: never) => unknown>;
|
|
16
|
+
/** The knowledge scopes an agent searches; `agent` without an id is its own. */
|
|
17
|
+
export declare function agentScopes(agent: Pick<Agent, "id" | "knowledgeScopes">): NonNullable<KnowledgeSearchOptions["scopes"]>;
|
|
18
|
+
interface AgentRuntimeOptions {
|
|
19
|
+
readonly agent: Agent;
|
|
20
|
+
/** The model for the agent's `model` id; the app picks one when it is unset. */
|
|
21
|
+
readonly model: (modelId: string | undefined) => LanguageModel;
|
|
22
|
+
/** Every tool the app offers; the agent gets the ones it may call. */
|
|
23
|
+
readonly tools?: ToolSet;
|
|
24
|
+
/** `approvals.policies(organizationId)` of the ai-chat block. */
|
|
25
|
+
readonly policies?: Readonly<Record<string, AiToolPolicy>>;
|
|
26
|
+
/** Adds a `search_knowledge` tool over the agent's knowledge scopes. */
|
|
27
|
+
readonly knowledge?: {
|
|
28
|
+
readonly knowledge: Knowledge;
|
|
29
|
+
readonly organizationId: string;
|
|
30
|
+
readonly options?: SearchToolOptions;
|
|
31
|
+
};
|
|
32
|
+
/** Text before the agent's own instructions, such as the app's rules. */
|
|
33
|
+
readonly instructions?: string;
|
|
34
|
+
/** Default 20 steps. */
|
|
35
|
+
readonly stopWhen?: StopCondition<ToolSet> | StopCondition<ToolSet>[];
|
|
36
|
+
/**
|
|
37
|
+
* The app's approval check for each tool call, such as an authorization
|
|
38
|
+
* check. It runs before the tenant's `policies`, and the stricter answer
|
|
39
|
+
* wins: `denied` over `user-approval` over `approved`. A throw denies.
|
|
40
|
+
*/
|
|
41
|
+
readonly toolApproval?: AgentToolApprovalFunction;
|
|
42
|
+
}
|
|
43
|
+
/** A `ToolLoopAgent` from an agent row. */
|
|
44
|
+
export declare function createAgentRuntime(options: AgentRuntimeOptions): ToolLoopAgent<never, ToolSet>;
|
|
45
|
+
/** What a moderation check says about a text. */
|
|
46
|
+
interface ModerationVerdict {
|
|
47
|
+
readonly action: AiModerationAction;
|
|
48
|
+
readonly category: string;
|
|
49
|
+
readonly score?: number;
|
|
50
|
+
}
|
|
51
|
+
interface ModerationMiddlewareOptions {
|
|
52
|
+
readonly chats: AiChat;
|
|
53
|
+
readonly organizationId: string;
|
|
54
|
+
readonly chatId?: string;
|
|
55
|
+
readonly userId?: string;
|
|
56
|
+
/** Checks the last user message (`input`) and the answer (`output`). */
|
|
57
|
+
readonly check: (text: string, stage: Extract<AiModerationStage, "input" | "output">) => Promise<ModerationVerdict | undefined>;
|
|
58
|
+
}
|
|
59
|
+
/** Thrown by the moderation middleware when a check blocks the input or output. */
|
|
60
|
+
export declare class ModerationBlockedError extends Error {
|
|
61
|
+
readonly category: string;
|
|
62
|
+
readonly stage: AiModerationStage;
|
|
63
|
+
constructor(stage: AiModerationStage, category: string);
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* A language model middleware that checks the user's message before the
|
|
67
|
+
* model runs and the answer after it, records every verdict but `allow` in
|
|
68
|
+
* the ai-chat moderation log, and throws `ModerationBlockedError` on
|
|
69
|
+
* `block`. A streamed answer has reached the client when its check runs, so
|
|
70
|
+
* a blocked stream ends with an error part instead of the text vanishing.
|
|
71
|
+
*/
|
|
72
|
+
export declare function moderationMiddleware(options: ModerationMiddlewareOptions): LanguageModelMiddleware;
|
|
73
|
+
//#endregion
|
|
74
|
+
export type { Agent, AgentRuntimeOptions, AgentToolApprovalFunction, ModerationMiddlewareOptions, ModerationVerdict };
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import { t as DbException } from "../../db-exception-CnWcYPxL.js";
|
|
2
|
+
import { i as searchTool } from "../../embeddings-4ZvFzjsU.js";
|
|
3
|
+
import { ToolLoopAgent, stepCountIs } from "ai";
|
|
4
|
+
//#region src/ai-sdk/agents/agents.ts
|
|
5
|
+
/**
|
|
6
|
+
* The tools an agent may call: the ones it lists (every tool when it lists
|
|
7
|
+
* none), without the tenant's `deny` tools.
|
|
8
|
+
*/
|
|
9
|
+
function agentTools(agent, available, policies = {}) {
|
|
10
|
+
const allowed = agent.tools.length === 0 ? void 0 : new Set(agent.tools);
|
|
11
|
+
const tools = {};
|
|
12
|
+
for (const [name, tool] of Object.entries(available)) {
|
|
13
|
+
if (allowed !== void 0 && !allowed.has(name)) continue;
|
|
14
|
+
if (policies[name] === "deny") continue;
|
|
15
|
+
tools[name] = tool;
|
|
16
|
+
}
|
|
17
|
+
return tools;
|
|
18
|
+
}
|
|
19
|
+
/** The `toolApproval` setting that makes the tenant's `ask` tools wait for the user. */
|
|
20
|
+
function agentToolApproval(tools, policies = {}) {
|
|
21
|
+
const approval = {};
|
|
22
|
+
for (const name of Object.keys(tools)) if (policies[name] === "ask") approval[name] = "user-approval";
|
|
23
|
+
return approval;
|
|
24
|
+
}
|
|
25
|
+
const APPROVAL_RANK = {
|
|
26
|
+
"not-applicable": 0,
|
|
27
|
+
approved: 1,
|
|
28
|
+
"user-approval": 2,
|
|
29
|
+
denied: 3
|
|
30
|
+
};
|
|
31
|
+
const approvalType = (status) => status === void 0 ? "not-applicable" : typeof status === "string" ? status : status.type;
|
|
32
|
+
/**
|
|
33
|
+
* The app's `toolApproval` with the tenant's `ask` tools: the app decides
|
|
34
|
+
* first, and the stricter of the two answers wins (`denied`, then
|
|
35
|
+
* `user-approval`). A function that throws denies the call.
|
|
36
|
+
*/
|
|
37
|
+
function composedApproval(approve, tenant) {
|
|
38
|
+
return async (options) => {
|
|
39
|
+
let status;
|
|
40
|
+
try {
|
|
41
|
+
status = await approve(options);
|
|
42
|
+
} catch {
|
|
43
|
+
return {
|
|
44
|
+
type: "denied",
|
|
45
|
+
reason: "The tool approval check failed"
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
return tenant[options.toolCall.toolName] !== void 0 && APPROVAL_RANK[approvalType(status)] < APPROVAL_RANK["user-approval"] ? "user-approval" : status;
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
/** The knowledge scopes an agent searches; `agent` without an id is its own. */
|
|
52
|
+
function agentScopes(agent) {
|
|
53
|
+
return agent.knowledgeScopes.map((scope) => scope.scope === "agent" && scope.id === void 0 ? {
|
|
54
|
+
scope: "agent",
|
|
55
|
+
id: agent.id
|
|
56
|
+
} : scope);
|
|
57
|
+
}
|
|
58
|
+
/** A `ToolLoopAgent` from an agent row. */
|
|
59
|
+
function createAgentRuntime(options) {
|
|
60
|
+
const { agent } = options;
|
|
61
|
+
const tools = agentTools(agent, options.tools ?? {}, options.policies);
|
|
62
|
+
if (options.knowledge !== void 0 && agent.knowledgeScopes.length > 0) {
|
|
63
|
+
const { knowledge, organizationId, options: search = {} } = options.knowledge;
|
|
64
|
+
tools["search_knowledge"] = searchTool(knowledge, organizationId, {
|
|
65
|
+
...search,
|
|
66
|
+
scopes: agentScopes(agent)
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
const instructions = [options.instructions, agent.instructions].filter((text) => text !== void 0 && text !== "").join("\n\n");
|
|
70
|
+
return new ToolLoopAgent({
|
|
71
|
+
id: agent.id,
|
|
72
|
+
model: options.model(agent.model),
|
|
73
|
+
tools,
|
|
74
|
+
toolApproval: options.toolApproval === void 0 ? agentToolApproval(tools, options.policies) : composedApproval(options.toolApproval, agentToolApproval(tools, options.policies)),
|
|
75
|
+
...instructions === "" ? {} : { instructions },
|
|
76
|
+
stopWhen: options.stopWhen ?? stepCountIs(20)
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
/** Thrown by the moderation middleware when a check blocks the input or output. */
|
|
80
|
+
var ModerationBlockedError = class extends Error {
|
|
81
|
+
category;
|
|
82
|
+
stage;
|
|
83
|
+
constructor(stage, category) {
|
|
84
|
+
super(`The ${stage} was blocked by moderation (${category})`);
|
|
85
|
+
this.name = "ModerationBlockedError";
|
|
86
|
+
this.stage = stage;
|
|
87
|
+
this.category = category;
|
|
88
|
+
}
|
|
89
|
+
};
|
|
90
|
+
function lastUserText(prompt) {
|
|
91
|
+
for (let index = prompt.length - 1; index >= 0; index -= 1) {
|
|
92
|
+
const message = prompt[index];
|
|
93
|
+
if (message?.role !== "user") continue;
|
|
94
|
+
return message.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("\n");
|
|
95
|
+
}
|
|
96
|
+
return "";
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* A language model middleware that checks the user's message before the
|
|
100
|
+
* model runs and the answer after it, records every verdict but `allow` in
|
|
101
|
+
* the ai-chat moderation log, and throws `ModerationBlockedError` on
|
|
102
|
+
* `block`. A streamed answer has reached the client when its check runs, so
|
|
103
|
+
* a blocked stream ends with an error part instead of the text vanishing.
|
|
104
|
+
*/
|
|
105
|
+
function moderationMiddleware(options) {
|
|
106
|
+
const judge = async (text, stage) => {
|
|
107
|
+
if (text.trim() === "") return void 0;
|
|
108
|
+
const verdict = await options.check(text, stage);
|
|
109
|
+
if (verdict === void 0 || verdict.action === "allow") return verdict;
|
|
110
|
+
const recorded = await options.chats.moderation.record({
|
|
111
|
+
organizationId: options.organizationId,
|
|
112
|
+
stage,
|
|
113
|
+
action: verdict.action,
|
|
114
|
+
category: verdict.category,
|
|
115
|
+
...options.chatId === void 0 ? {} : { chatId: options.chatId },
|
|
116
|
+
...options.userId === void 0 ? {} : { userId: options.userId },
|
|
117
|
+
...verdict.score === void 0 ? {} : { score: verdict.score }
|
|
118
|
+
});
|
|
119
|
+
if (!recorded.ok) throw new DbException(recorded.error);
|
|
120
|
+
return verdict;
|
|
121
|
+
};
|
|
122
|
+
return {
|
|
123
|
+
transformParams: async ({ params }) => {
|
|
124
|
+
const verdict = await judge(lastUserText(params.prompt), "input");
|
|
125
|
+
if (verdict?.action === "block") throw new ModerationBlockedError("input", verdict.category);
|
|
126
|
+
return params;
|
|
127
|
+
},
|
|
128
|
+
wrapGenerate: async ({ doGenerate }) => {
|
|
129
|
+
const result = await doGenerate();
|
|
130
|
+
const text = result.content.flatMap((part) => part.type === "text" ? [part.text] : []).join("");
|
|
131
|
+
const verdict = await judge(text, "output");
|
|
132
|
+
if (verdict?.action === "block") throw new ModerationBlockedError("output", verdict.category);
|
|
133
|
+
return result;
|
|
134
|
+
},
|
|
135
|
+
wrapStream: async ({ doStream }) => {
|
|
136
|
+
const result = await doStream();
|
|
137
|
+
let text = "";
|
|
138
|
+
const checked = result.stream.pipeThrough(new TransformStream({
|
|
139
|
+
transform(part, controller) {
|
|
140
|
+
if (part.type === "text-delta") text += part.delta;
|
|
141
|
+
controller.enqueue(part);
|
|
142
|
+
},
|
|
143
|
+
async flush(controller) {
|
|
144
|
+
const verdict = await judge(text, "output");
|
|
145
|
+
if (verdict?.action === "block") controller.enqueue({
|
|
146
|
+
type: "error",
|
|
147
|
+
error: new ModerationBlockedError("output", verdict.category)
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}));
|
|
151
|
+
return {
|
|
152
|
+
...result,
|
|
153
|
+
stream: checked
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
};
|
|
157
|
+
}
|
|
158
|
+
//#endregion
|
|
159
|
+
export { ModerationBlockedError, agentScopes, agentToolApproval, agentTools, createAgentRuntime, moderationMiddleware };
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { t as AsyncResult } from "../../result-D7y2fT87.js";
|
|
2
|
+
import { i as CursorPageOptions } from "../../block-helpers-CKtbFcRv.js";
|
|
3
|
+
import { m as JobHandler } from "../../queue-CLJurhdy.js";
|
|
4
|
+
import { i as AiBatchItemInput, r as AiBatchItem, t as AiBatch, u as AiProviders } from "../../types-TaiEeBGA.js";
|
|
5
|
+
import { Experimental_BatchItemResult, Experimental_BatchProvider, Experimental_BatchReference, Experimental_BatchStatus, Experimental_StartBatchOptions, Experimental_StartBatchResult } from "ai";
|
|
6
|
+
//#region src/ai-sdk/batches/batches.d.ts
|
|
7
|
+
/** The AI SDK batch calls, replaceable in tests. */
|
|
8
|
+
interface BatchApi {
|
|
9
|
+
start(options: Experimental_StartBatchOptions): PromiseLike<Experimental_StartBatchResult>;
|
|
10
|
+
status(options: {
|
|
11
|
+
provider?: Experimental_BatchProvider;
|
|
12
|
+
batch: Experimental_BatchReference;
|
|
13
|
+
}): PromiseLike<Experimental_BatchStatus>;
|
|
14
|
+
results(options: {
|
|
15
|
+
provider?: Experimental_BatchProvider;
|
|
16
|
+
batch: Experimental_BatchReference;
|
|
17
|
+
}): AsyncIterable<Experimental_BatchItemResult>;
|
|
18
|
+
cancel(options: {
|
|
19
|
+
provider?: Experimental_BatchProvider;
|
|
20
|
+
batch: Experimental_BatchReference;
|
|
21
|
+
}): PromiseLike<unknown>;
|
|
22
|
+
}
|
|
23
|
+
interface AiBatchesOptions {
|
|
24
|
+
/** The providers block: a user transport for `start`, a service one for polling. */
|
|
25
|
+
readonly providers: Pick<AiProviders, "batches">;
|
|
26
|
+
/**
|
|
27
|
+
* The batch provider, or a function that picks one for a stored reference.
|
|
28
|
+
* Defaults to the global provider, or the AI Gateway.
|
|
29
|
+
*/
|
|
30
|
+
readonly provider?: Experimental_BatchProvider | ((reference: Experimental_BatchReference) => Experimental_BatchProvider | undefined);
|
|
31
|
+
/** Seconds between two polls of a pending batch. Default 60. */
|
|
32
|
+
readonly pollEvery?: number;
|
|
33
|
+
/** Changes what is stored for an item, such as moving images to Storage first. */
|
|
34
|
+
readonly onItem?: (item: Experimental_BatchItemResult, batch: AiBatch) => AiBatchItemInput | Promise<AiBatchItemInput>;
|
|
35
|
+
/** Called once a batch's results are saved, or it failed. */
|
|
36
|
+
readonly onDone?: (batch: AiBatch) => unknown;
|
|
37
|
+
readonly api?: Partial<BatchApi>;
|
|
38
|
+
}
|
|
39
|
+
interface AiBatches {
|
|
40
|
+
/** Starts a batch and records it for the tenant, as the caller. */
|
|
41
|
+
start(context: {
|
|
42
|
+
readonly organizationId: string;
|
|
43
|
+
readonly userId?: string;
|
|
44
|
+
}, options: Experimental_StartBatchOptions & {
|
|
45
|
+
readonly metadata?: Readonly<Record<string, unknown>>;
|
|
46
|
+
}): AsyncResult<AiBatch>;
|
|
47
|
+
/** The stored batch, as the caller. */
|
|
48
|
+
status(batchId: string): AsyncResult<AiBatch | undefined>;
|
|
49
|
+
/** The stored results, as the caller, after the `requestId` in `cursor`. */
|
|
50
|
+
results(batchId: string, options?: CursorPageOptions<string>): AsyncResult<readonly AiBatchItem[]>;
|
|
51
|
+
/** Asks the provider for the batch's status and stores it (service role). */
|
|
52
|
+
refresh(batch: AiBatch): AsyncResult<AiBatch>;
|
|
53
|
+
/** Streams a finished batch's results into the table (service role). Returns how many. */
|
|
54
|
+
collect(batch: AiBatch): AsyncResult<number>;
|
|
55
|
+
cancel(batch: AiBatch): AsyncResult<AiBatch>;
|
|
56
|
+
/** Claims due batches, refreshes them and collects finished ones. Returns how many it polled. */
|
|
57
|
+
poll(options?: {
|
|
58
|
+
readonly batch?: number;
|
|
59
|
+
}): AsyncResult<number>;
|
|
60
|
+
/** A job handler that runs `poll`; schedule it every minute. */
|
|
61
|
+
pollJob(options?: {
|
|
62
|
+
readonly batch?: number;
|
|
63
|
+
}): JobHandler<unknown>;
|
|
64
|
+
}
|
|
65
|
+
/** What is stored for one result by default. */
|
|
66
|
+
export declare function batchItemOf(item: Experimental_BatchItemResult): AiBatchItemInput;
|
|
67
|
+
/**
|
|
68
|
+
* Batch jobs over the AI SDK's batch API, recorded in the providers block:
|
|
69
|
+
* `start` records the batch, the poll job asks the provider for its status
|
|
70
|
+
* until it finishes and then saves its results, which `results` pages.
|
|
71
|
+
*/
|
|
72
|
+
export declare function aiBatches(options: AiBatchesOptions): AiBatches;
|
|
73
|
+
//#endregion
|
|
74
|
+
export type { AiBatches, AiBatchesOptions, BatchApi };
|