aimeat 3.1.0 → 3.3.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/dist/.env.example +58 -1
- package/dist/build-stamp.json +4 -4
- package/dist/locales/en.json +9225 -9103
- package/dist/locales/es.json +9217 -9095
- package/dist/locales/fi.json +9225 -9103
- package/dist/public/changelog.json +12 -0
- package/dist/public/css/views/admin.css +11 -0
- package/dist/public/css/views/chat.css +388 -0
- package/dist/public/css/views/profile.css +41 -0
- package/dist/public/js/services/admin.js +346 -331
- package/dist/public/js/services/chat.js +190 -0
- package/dist/public/js/services/organism-roles.js +51 -0
- package/dist/public/js/services/organisms.js +5 -25
- package/dist/public/js/services/speech-reader.js +26 -0
- package/dist/public/lib/VENDORED.md +1 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser-eh.worker.js +14 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-browser.js +23 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/duckdb-eh.wasm +0 -0
- package/dist/public/lib/duckdb-wasm@1.32.0/extensions/v1.4.3/wasm_eh/parquet.duckdb_extension.wasm +0 -0
- package/dist/public/lib/vendored-assets.json +19 -0
- package/dist/public/llms-full-template.txt +2706 -0
- package/dist/public/llms-index-template.txt +60 -0
- package/dist/public/robots.node.txt +64 -23
- package/dist/public/spa.html +9 -1
- package/dist/public/views/admin/organism-ownership-tab.js +124 -0
- package/dist/public/views/admin/owners-tab.js +15 -4
- package/dist/public/views/admin/usage-tab.calls.js +120 -0
- package/dist/public/views/admin/usage-tab.js +18 -4
- package/dist/public/views/admin.js +2 -0
- package/dist/public/views/chat/parts.js +257 -0
- package/dist/public/views/chat.js +327 -0
- package/dist/public/views/landing.js +24 -1
- package/dist/public/views/profile/agents/scope-model.js +320 -296
- package/dist/public/views/profile/landing-page.cards.js +1 -0
- package/dist/public/views/profile/organisms/home.js +3 -1
- package/dist/public/views/profile/organisms/members.js +29 -4
- package/dist/public/views/profile/usage-tab.js +204 -0
- package/dist/public/views/profile.js +2 -0
- package/dist/scripts/audit-mcp-schemas.js +41 -0
- package/dist/scripts/audit-mcp-schemas.js.map +1 -1
- package/dist/scripts/build-sdk-libs.d.ts.map +1 -1
- package/dist/scripts/build-sdk-libs.js +1 -0
- package/dist/scripts/build-sdk-libs.js.map +1 -1
- package/dist/scripts/check-ai-disclosure.js +11 -0
- package/dist/scripts/check-ai-disclosure.js.map +1 -1
- package/dist/scripts/check-commit-msg.d.ts +8 -0
- package/dist/scripts/check-commit-msg.d.ts.map +1 -0
- package/dist/scripts/check-commit-msg.js +118 -0
- package/dist/scripts/check-commit-msg.js.map +1 -0
- package/dist/scripts/check-denial-coverage.d.ts +29 -0
- package/dist/scripts/check-denial-coverage.d.ts.map +1 -0
- package/dist/scripts/check-denial-coverage.js +237 -0
- package/dist/scripts/check-denial-coverage.js.map +1 -0
- package/dist/scripts/check-ext-entrypoints.js +14 -2
- package/dist/scripts/check-ext-entrypoints.js.map +1 -1
- package/dist/scripts/check-liaison-surface.js +27 -2
- package/dist/scripts/check-liaison-surface.js.map +1 -1
- package/dist/scripts/check-locales.js +38 -0
- package/dist/scripts/check-locales.js.map +1 -1
- package/dist/scripts/check-outbound-fetch.d.ts.map +1 -1
- package/dist/scripts/check-outbound-fetch.js +16 -2
- package/dist/scripts/check-outbound-fetch.js.map +1 -1
- package/dist/scripts/check-route-scopes.d.ts.map +1 -1
- package/dist/scripts/check-route-scopes.js +33 -4
- package/dist/scripts/check-route-scopes.js.map +1 -1
- package/dist/scripts/check-shared-implementation.js +28 -11
- package/dist/scripts/check-shared-implementation.js.map +1 -1
- package/dist/scripts/check-sse-parity.js +14 -0
- package/dist/scripts/check-sse-parity.js.map +1 -1
- package/dist/scripts/check-trusted-keys.d.ts +90 -1
- package/dist/scripts/check-trusted-keys.d.ts.map +1 -1
- package/dist/scripts/check-trusted-keys.js +521 -52
- package/dist/scripts/check-trusted-keys.js.map +1 -1
- package/dist/scripts/indexnow.js +9 -7
- package/dist/scripts/indexnow.js.map +1 -1
- package/dist/src/auth/middleware.d.ts +69 -6
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +130 -28
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +5 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js +20 -2
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts +7 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.js +24 -0
- package/dist/src/cli/connect/mcp/tools/agent-telemetry.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/apps.js +88 -0
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.d.ts +7 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/core.js +83 -4
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts +2 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -1
- package/dist/src/cli/connect/mcp/tools/organisms.js +16 -0
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -1
- package/dist/src/cli/connect/onboarding-prompt.js +1 -1
- package/dist/src/cli/connect/skill-bundle.js +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts +1 -0
- package/dist/src/cli/connect/tool-call-defs-agent.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-agent.js +6 -0
- package/dist/src/cli/connect/tool-call-defs-agent.js.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts +21 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.d.ts.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js +137 -0
- package/dist/src/cli/connect/tool-call-defs-app-draft-edit.js.map +1 -0
- package/dist/src/cli/connect/tool-call-defs-core.d.ts +1 -0
- package/dist/src/cli/connect/tool-call-defs-core.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call-defs-core.js +30 -0
- package/dist/src/cli/connect/tool-call-defs-core.js.map +1 -1
- package/dist/src/cli/connect/tool-call.d.ts.map +1 -1
- package/dist/src/cli/connect/tool-call.js +2 -0
- package/dist/src/cli/connect/tool-call.js.map +1 -1
- package/dist/src/config-types-ai.d.ts +76 -0
- package/dist/src/config-types-ai.d.ts.map +1 -0
- package/dist/src/config-types-ai.js +15 -0
- package/dist/src/config-types-ai.js.map +1 -0
- package/dist/src/config-types.d.ts +11 -2
- package/dist/src/config-types.d.ts.map +1 -1
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +25 -4
- package/dist/src/config.js.map +1 -1
- package/dist/src/data/appdev-pitfalls.d.ts +1 -0
- package/dist/src/data/appdev-pitfalls.d.ts.map +1 -1
- package/dist/src/data/appdev-pitfalls.js +11 -0
- package/dist/src/data/appdev-pitfalls.js.map +1 -1
- package/dist/src/data/builtin-skills.d.ts.map +1 -1
- package/dist/src/data/builtin-skills.js +3 -2
- package/dist/src/data/builtin-skills.js.map +1 -1
- package/dist/src/data/digital-signage-package.js +1 -1
- package/dist/src/data/library-packs/sdk.d.ts.map +1 -1
- package/dist/src/data/library-packs/sdk.js +76 -0
- package/dist/src/data/library-packs/sdk.js.map +1 -1
- package/dist/src/data/library-packs/vendored.d.ts.map +1 -1
- package/dist/src/data/library-packs/vendored.js +81 -0
- package/dist/src/data/library-packs/vendored.js.map +1 -1
- package/dist/src/data/library-packs.d.ts +2 -2
- package/dist/src/data/library-packs.js +2 -2
- package/dist/src/data/public-pages.d.ts +13 -0
- package/dist/src/data/public-pages.d.ts.map +1 -1
- package/dist/src/data/public-pages.js +153 -113
- package/dist/src/data/public-pages.js.map +1 -1
- package/dist/src/generated/api-types.d.ts +2251 -102
- package/dist/src/generated/api-types.d.ts.map +1 -1
- package/dist/src/index-start.d.ts.map +1 -1
- package/dist/src/index-start.js +21 -1
- package/dist/src/index-start.js.map +1 -1
- package/dist/src/mcp/agent-tasks.d.ts +16 -0
- package/dist/src/mcp/agent-tasks.d.ts.map +1 -1
- package/dist/src/mcp/agent-tasks.js +84 -54
- package/dist/src/mcp/agent-tasks.js.map +1 -1
- package/dist/src/mcp/agent-telemetry.d.ts +6 -1
- package/dist/src/mcp/agent-telemetry.d.ts.map +1 -1
- package/dist/src/mcp/agent-telemetry.js +37 -1
- package/dist/src/mcp/agent-telemetry.js.map +1 -1
- package/dist/src/mcp/ai-image.d.ts +22 -0
- package/dist/src/mcp/ai-image.d.ts.map +1 -0
- package/dist/src/mcp/ai-image.js +60 -0
- package/dist/src/mcp/ai-image.js.map +1 -0
- package/dist/src/mcp/annotations.d.ts +5 -0
- package/dist/src/mcp/annotations.d.ts.map +1 -1
- package/dist/src/mcp/annotations.js +23 -0
- package/dist/src/mcp/annotations.js.map +1 -1
- package/dist/src/mcp/apps-draft-edit.d.ts +28 -0
- package/dist/src/mcp/apps-draft-edit.d.ts.map +1 -0
- package/dist/src/mcp/apps-draft-edit.js +164 -0
- package/dist/src/mcp/apps-draft-edit.js.map +1 -0
- package/dist/src/mcp/apps-screenshot.d.ts +26 -0
- package/dist/src/mcp/apps-screenshot.d.ts.map +1 -0
- package/dist/src/mcp/apps-screenshot.js +39 -0
- package/dist/src/mcp/apps-screenshot.js.map +1 -0
- package/dist/src/mcp/catalog/definitions/agent-messaging.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/agent-messaging.js +18 -0
- package/dist/src/mcp/catalog/definitions/agent-messaging.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts +1 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js +59 -0
- package/dist/src/mcp/catalog/definitions/discovery-work-boards.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts +3 -0
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js +96 -2
- package/dist/src/mcp/catalog/definitions/organisms-workspaces-apps.js.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts +2 -0
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.d.ts.map +1 -1
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js +7 -3
- package/dist/src/mcp/catalog/definitions/schedules-tasks-memory.js.map +1 -1
- package/dist/src/mcp/catalog/scopes.d.ts.map +1 -1
- package/dist/src/mcp/catalog/scopes.js +34 -1
- package/dist/src/mcp/catalog/scopes.js.map +1 -1
- package/dist/src/mcp/catalog/surfaces.d.ts.map +1 -1
- package/dist/src/mcp/catalog/surfaces.js +26 -7
- package/dist/src/mcp/catalog/surfaces.js.map +1 -1
- package/dist/src/mcp/core-admin.d.ts +7 -3
- package/dist/src/mcp/core-admin.d.ts.map +1 -1
- package/dist/src/mcp/core-admin.js +60 -3
- package/dist/src/mcp/core-admin.js.map +1 -1
- package/dist/src/mcp/core-datapackage.d.ts +32 -0
- package/dist/src/mcp/core-datapackage.d.ts.map +1 -0
- package/dist/src/mcp/core-datapackage.js +188 -0
- package/dist/src/mcp/core-datapackage.js.map +1 -0
- package/dist/src/mcp/core-storage.d.ts +7 -3
- package/dist/src/mcp/core-storage.d.ts.map +1 -1
- package/dist/src/mcp/core-storage.js +27 -4
- package/dist/src/mcp/core-storage.js.map +1 -1
- package/dist/src/mcp/core.d.ts.map +1 -1
- package/dist/src/mcp/core.js +3 -0
- package/dist/src/mcp/core.js.map +1 -1
- package/dist/src/mcp/extensions.d.ts.map +1 -1
- package/dist/src/mcp/extensions.js +11 -1
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/mcp/index.d.ts +9 -0
- package/dist/src/mcp/index.d.ts.map +1 -1
- package/dist/src/mcp/index.js +43 -2
- package/dist/src/mcp/index.js.map +1 -1
- package/dist/src/mcp/organisms-email-invites.d.ts.map +1 -1
- package/dist/src/mcp/organisms-email-invites.js +2 -1
- package/dist/src/mcp/organisms-email-invites.js.map +1 -1
- package/dist/src/mcp/organisms-name-invites.d.ts.map +1 -1
- package/dist/src/mcp/organisms-name-invites.js +40 -1
- package/dist/src/mcp/organisms-name-invites.js.map +1 -1
- package/dist/src/mcp/organisms.d.ts.map +1 -1
- package/dist/src/mcp/organisms.js +6 -1
- package/dist/src/mcp/organisms.js.map +1 -1
- package/dist/src/mcp/tool-usage-wrap.d.ts +9 -0
- package/dist/src/mcp/tool-usage-wrap.d.ts.map +1 -0
- package/dist/src/mcp/tool-usage-wrap.js +87 -0
- package/dist/src/mcp/tool-usage-wrap.js.map +1 -0
- package/dist/src/mcp/workspaces.d.ts.map +1 -1
- package/dist/src/mcp/workspaces.js +9 -0
- package/dist/src/mcp/workspaces.js.map +1 -1
- package/dist/src/middleware/idempotency.d.ts +6 -0
- package/dist/src/middleware/idempotency.d.ts.map +1 -1
- package/dist/src/middleware/idempotency.js +23 -2
- package/dist/src/middleware/idempotency.js.map +1 -1
- package/dist/src/models/agent-task-schemas.d.ts.map +1 -1
- package/dist/src/models/agent-task-schemas.js +12 -1
- package/dist/src/models/agent-task-schemas.js.map +1 -1
- package/dist/src/models/webhook-schemas.d.ts +2 -2
- package/dist/src/models/workflow-schemas.d.ts +178 -1
- package/dist/src/models/workflow-schemas.d.ts.map +1 -1
- package/dist/src/models/workflow-schemas.js +75 -0
- package/dist/src/models/workflow-schemas.js.map +1 -1
- package/dist/src/routes/admin-extensions.d.ts +4 -0
- package/dist/src/routes/admin-extensions.d.ts.map +1 -1
- package/dist/src/routes/admin-extensions.js +135 -142
- package/dist/src/routes/admin-extensions.js.map +1 -1
- package/dist/src/routes/admin-monitoring.d.ts +2 -0
- package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
- package/dist/src/routes/admin-monitoring.js +32 -0
- package/dist/src/routes/admin-monitoring.js.map +1 -1
- package/dist/src/routes/admin-organisms.d.ts +28 -0
- package/dist/src/routes/admin-organisms.d.ts.map +1 -0
- package/dist/src/routes/admin-organisms.js +99 -0
- package/dist/src/routes/admin-organisms.js.map +1 -0
- package/dist/src/routes/admin-usage.d.ts +33 -0
- package/dist/src/routes/admin-usage.d.ts.map +1 -0
- package/dist/src/routes/admin-usage.js +198 -0
- package/dist/src/routes/admin-usage.js.map +1 -0
- package/dist/src/routes/agent-conventions.d.ts.map +1 -1
- package/dist/src/routes/agent-conventions.js +4 -2
- package/dist/src/routes/agent-conventions.js.map +1 -1
- package/dist/src/routes/agent-docs.d.ts +4 -4
- package/dist/src/routes/agent-docs.js +145 -145
- package/dist/src/routes/agent-docs.js.map +1 -1
- package/dist/src/routes/agent-messages.d.ts +6 -0
- package/dist/src/routes/agent-messages.d.ts.map +1 -1
- package/dist/src/routes/agent-messages.js +23 -1
- package/dist/src/routes/agent-messages.js.map +1 -1
- package/dist/src/routes/agent-tasks/completion.d.ts +5 -0
- package/dist/src/routes/agent-tasks/completion.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/completion.js +35 -54
- package/dist/src/routes/agent-tasks/completion.js.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/create-read.js +8 -1
- package/dist/src/routes/agent-tasks/create-read.js.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts +4 -1
- package/dist/src/routes/agent-tasks/lifecycle.d.ts.map +1 -1
- package/dist/src/routes/agent-tasks/lifecycle.js +80 -2
- package/dist/src/routes/agent-tasks/lifecycle.js.map +1 -1
- package/dist/src/routes/agents/device-auth.d.ts.map +1 -1
- package/dist/src/routes/agents/device-auth.js +27 -4
- package/dist/src/routes/agents/device-auth.js.map +1 -1
- package/dist/src/routes/ai.d.ts +5 -0
- package/dist/src/routes/ai.d.ts.map +1 -1
- package/dist/src/routes/ai.js +51 -1
- package/dist/src/routes/ai.js.map +1 -1
- package/dist/src/routes/app-grants.d.ts.map +1 -1
- package/dist/src/routes/app-grants.js +5 -0
- package/dist/src/routes/app-grants.js.map +1 -1
- package/dist/src/routes/apps/drafts.d.ts +6 -0
- package/dist/src/routes/apps/drafts.d.ts.map +1 -1
- package/dist/src/routes/apps/drafts.js +133 -1
- package/dist/src/routes/apps/drafts.js.map +1 -1
- package/dist/src/routes/apps/read.d.ts +4 -0
- package/dist/src/routes/apps/read.d.ts.map +1 -1
- package/dist/src/routes/apps/read.js +47 -2
- package/dist/src/routes/apps/read.js.map +1 -1
- package/dist/src/routes/auth-otk.d.ts +28 -0
- package/dist/src/routes/auth-otk.d.ts.map +1 -0
- package/dist/src/routes/auth-otk.js +190 -0
- package/dist/src/routes/auth-otk.js.map +1 -0
- package/dist/src/routes/auth.d.ts +17 -0
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +44 -153
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/bootstrap.d.ts +6 -0
- package/dist/src/routes/bootstrap.d.ts.map +1 -1
- package/dist/src/routes/bootstrap.js +47 -20
- package/dist/src/routes/bootstrap.js.map +1 -1
- package/dist/src/routes/capabilities.d.ts +17 -0
- package/dist/src/routes/capabilities.d.ts.map +1 -1
- package/dist/src/routes/capabilities.js +187 -4
- package/dist/src/routes/capabilities.js.map +1 -1
- package/dist/src/routes/chat.d.ts +23 -0
- package/dist/src/routes/chat.d.ts.map +1 -0
- package/dist/src/routes/chat.js +165 -0
- package/dist/src/routes/chat.js.map +1 -0
- package/dist/src/routes/commerce.js +4 -4
- package/dist/src/routes/commerce.js.map +1 -1
- package/dist/src/routes/datapackages.d.ts +35 -0
- package/dist/src/routes/datapackages.d.ts.map +1 -0
- package/dist/src/routes/datapackages.js +217 -0
- package/dist/src/routes/datapackages.js.map +1 -0
- package/dist/src/routes/disputes.d.ts +27 -0
- package/dist/src/routes/disputes.d.ts.map +1 -1
- package/dist/src/routes/disputes.js +74 -79
- package/dist/src/routes/disputes.js.map +1 -1
- package/dist/src/routes/ecosystem-apps-advisories.d.ts +16 -0
- package/dist/src/routes/ecosystem-apps-advisories.d.ts.map +1 -0
- package/dist/src/routes/ecosystem-apps-advisories.js +104 -0
- package/dist/src/routes/ecosystem-apps-advisories.js.map +1 -0
- package/dist/src/routes/ecosystem-apps.d.ts +6 -0
- package/dist/src/routes/ecosystem-apps.d.ts.map +1 -1
- package/dist/src/routes/ecosystem-apps.js +31 -99
- package/dist/src/routes/ecosystem-apps.js.map +1 -1
- package/dist/src/routes/extensions/actions.d.ts.map +1 -1
- package/dist/src/routes/extensions/actions.js +29 -1
- package/dist/src/routes/extensions/actions.js.map +1 -1
- package/dist/src/routes/federation-sync/messaging.d.ts +6 -0
- package/dist/src/routes/federation-sync/messaging.d.ts.map +1 -1
- package/dist/src/routes/federation-sync/messaging.js +22 -1
- package/dist/src/routes/federation-sync/messaging.js.map +1 -1
- package/dist/src/routes/federation-sync/routing.d.ts.map +1 -1
- package/dist/src/routes/federation-sync/routing.js +12 -3
- package/dist/src/routes/federation-sync/routing.js.map +1 -1
- package/dist/src/routes/glossary.js +1 -1
- package/dist/src/routes/glossary.js.map +1 -1
- package/dist/src/routes/home/track.d.ts +5 -1
- package/dist/src/routes/home/track.d.ts.map +1 -1
- package/dist/src/routes/home/track.js +20 -6
- package/dist/src/routes/home/track.js.map +1 -1
- package/dist/src/routes/instances/install.d.ts +7 -0
- package/dist/src/routes/instances/install.d.ts.map +1 -1
- package/dist/src/routes/instances/install.js +31 -24
- package/dist/src/routes/instances/install.js.map +1 -1
- package/dist/src/routes/library-packs.d.ts +7 -0
- package/dist/src/routes/library-packs.d.ts.map +1 -1
- package/dist/src/routes/library-packs.js +32 -8
- package/dist/src/routes/library-packs.js.map +1 -1
- package/dist/src/routes/libs.js +1 -1
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/markdown-mirrors.js +1 -1
- package/dist/src/routes/markdown-mirrors.js.map +1 -1
- package/dist/src/routes/messages.d.ts +6 -0
- package/dist/src/routes/messages.d.ts.map +1 -1
- package/dist/src/routes/messages.js +15 -3
- package/dist/src/routes/messages.js.map +1 -1
- package/dist/src/routes/odata.d.ts +36 -0
- package/dist/src/routes/odata.d.ts.map +1 -0
- package/dist/src/routes/odata.js +143 -0
- package/dist/src/routes/odata.js.map +1 -0
- package/dist/src/routes/openrouter.d.ts +4 -0
- package/dist/src/routes/openrouter.d.ts.map +1 -1
- package/dist/src/routes/openrouter.js +10 -1
- package/dist/src/routes/openrouter.js.map +1 -1
- package/dist/src/routes/organisms/crud.d.ts +4 -0
- package/dist/src/routes/organisms/crud.d.ts.map +1 -1
- package/dist/src/routes/organisms/crud.js +25 -7
- package/dist/src/routes/organisms/crud.js.map +1 -1
- package/dist/src/routes/organisms/gates.d.ts.map +1 -1
- package/dist/src/routes/organisms/gates.js +19 -2
- package/dist/src/routes/organisms/gates.js.map +1 -1
- package/dist/src/routes/organisms/membership.d.ts +4 -0
- package/dist/src/routes/organisms/membership.d.ts.map +1 -1
- package/dist/src/routes/organisms/membership.js +88 -36
- package/dist/src/routes/organisms/membership.js.map +1 -1
- package/dist/src/routes/organisms/shared.d.ts.map +1 -1
- package/dist/src/routes/organisms/shared.js +2 -1
- package/dist/src/routes/organisms/shared.js.map +1 -1
- package/dist/src/routes/organisms/workspace-access.d.ts +5 -0
- package/dist/src/routes/organisms/workspace-access.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-access.js +41 -2
- package/dist/src/routes/organisms/workspace-access.js.map +1 -1
- package/dist/src/routes/organisms/workspace-ops.d.ts +2 -0
- package/dist/src/routes/organisms/workspace-ops.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-ops.js +10 -6
- package/dist/src/routes/organisms/workspace-ops.js.map +1 -1
- package/dist/src/routes/organisms/workspace-read.d.ts +3 -0
- package/dist/src/routes/organisms/workspace-read.d.ts.map +1 -1
- package/dist/src/routes/organisms/workspace-read.js +13 -7
- package/dist/src/routes/organisms/workspace-read.js.map +1 -1
- package/dist/src/routes/portal.d.ts +1 -0
- package/dist/src/routes/portal.d.ts.map +1 -1
- package/dist/src/routes/portal.js +13 -0
- package/dist/src/routes/portal.js.map +1 -1
- package/dist/src/routes/schedules.d.ts +4 -0
- package/dist/src/routes/schedules.d.ts.map +1 -1
- package/dist/src/routes/schedules.js +9 -1
- package/dist/src/routes/schedules.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts +23 -0
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +103 -82
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/subdomains.d.ts +9 -1
- package/dist/src/routes/subdomains.d.ts.map +1 -1
- package/dist/src/routes/subdomains.js +55 -1
- package/dist/src/routes/subdomains.js.map +1 -1
- package/dist/src/routes/usage-reports.d.ts +31 -0
- package/dist/src/routes/usage-reports.d.ts.map +1 -0
- package/dist/src/routes/usage-reports.js +107 -0
- package/dist/src/routes/usage-reports.js.map +1 -0
- package/dist/src/routes/validate.d.ts.map +1 -1
- package/dist/src/routes/validate.js +1 -0
- package/dist/src/routes/validate.js.map +1 -1
- package/dist/src/routes/workflows.d.ts.map +1 -1
- package/dist/src/routes/workflows.js +9 -1
- package/dist/src/routes/workflows.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts +2 -0
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +32 -2
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +12 -7
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +44 -10
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/services/agent-task-fanout.d.ts +61 -0
- package/dist/src/services/agent-task-fanout.d.ts.map +1 -1
- package/dist/src/services/agent-task-fanout.js +114 -2
- package/dist/src/services/agent-task-fanout.js.map +1 -1
- package/dist/src/services/agent-task-write.d.ts.map +1 -1
- package/dist/src/services/agent-task-write.js +6 -0
- package/dist/src/services/agent-task-write.js.map +1 -1
- package/dist/src/services/ai-allowance.d.ts +82 -0
- package/dist/src/services/ai-allowance.d.ts.map +1 -0
- package/dist/src/services/ai-allowance.js +117 -0
- package/dist/src/services/ai-allowance.js.map +1 -0
- package/dist/src/services/ai-completion.d.ts +39 -0
- package/dist/src/services/ai-completion.d.ts.map +1 -1
- package/dist/src/services/ai-completion.js +77 -10
- package/dist/src/services/ai-completion.js.map +1 -1
- package/dist/src/services/ai-image.d.ts +70 -0
- package/dist/src/services/ai-image.d.ts.map +1 -0
- package/dist/src/services/ai-image.js +104 -0
- package/dist/src/services/ai-image.js.map +1 -0
- package/dist/src/services/ai-model-defaults.d.ts +45 -0
- package/dist/src/services/ai-model-defaults.d.ts.map +1 -0
- package/dist/src/services/ai-model-defaults.js +42 -0
- package/dist/src/services/ai-model-defaults.js.map +1 -0
- package/dist/src/services/ai-tool-setup.d.ts +5 -1
- package/dist/src/services/ai-tool-setup.d.ts.map +1 -1
- package/dist/src/services/ai-tool-setup.js +36 -0
- package/dist/src/services/ai-tool-setup.js.map +1 -1
- package/dist/src/services/ai-transcription.d.ts +5 -0
- package/dist/src/services/ai-transcription.d.ts.map +1 -1
- package/dist/src/services/ai-transcription.js +10 -2
- package/dist/src/services/ai-transcription.js.map +1 -1
- package/dist/src/services/ai-usage-admin.d.ts +19 -8
- package/dist/src/services/ai-usage-admin.d.ts.map +1 -1
- package/dist/src/services/ai-usage-admin.js +30 -35
- package/dist/src/services/ai-usage-admin.js.map +1 -1
- package/dist/src/services/app-agent-surfaces.js +4 -4
- package/dist/src/services/app-agent-surfaces.js.map +1 -1
- package/dist/src/services/app-artifact-lint.d.ts +4 -0
- package/dist/src/services/app-artifact-lint.d.ts.map +1 -1
- package/dist/src/services/app-artifact-lint.js +49 -0
- package/dist/src/services/app-artifact-lint.js.map +1 -1
- package/dist/src/services/app-draft-edit.d.ts +144 -0
- package/dist/src/services/app-draft-edit.d.ts.map +1 -0
- package/dist/src/services/app-draft-edit.js +203 -0
- package/dist/src/services/app-draft-edit.js.map +1 -0
- package/dist/src/services/app-spec-gate.d.ts +4 -0
- package/dist/src/services/app-spec-gate.d.ts.map +1 -1
- package/dist/src/services/app-spec-gate.js +16 -1
- package/dist/src/services/app-spec-gate.js.map +1 -1
- package/dist/src/services/attachment-duplication.d.ts +4 -0
- package/dist/src/services/attachment-duplication.d.ts.map +1 -1
- package/dist/src/services/attachment-duplication.js +15 -0
- package/dist/src/services/attachment-duplication.js.map +1 -1
- package/dist/src/services/auth-md.js +2 -2
- package/dist/src/services/auth-md.js.map +1 -1
- package/dist/src/services/board-write.d.ts +11 -3
- package/dist/src/services/board-write.d.ts.map +1 -1
- package/dist/src/services/board-write.js +24 -3
- package/dist/src/services/board-write.js.map +1 -1
- package/dist/src/services/capability-record.d.ts.map +1 -1
- package/dist/src/services/capability-record.js +22 -9
- package/dist/src/services/capability-record.js.map +1 -1
- package/dist/src/services/chat-agent.d.ts +36 -0
- package/dist/src/services/chat-agent.d.ts.map +1 -0
- package/dist/src/services/chat-agent.js +123 -0
- package/dist/src/services/chat-agent.js.map +1 -0
- package/dist/src/services/chat-session.d.ts +58 -0
- package/dist/src/services/chat-session.d.ts.map +1 -0
- package/dist/src/services/chat-session.js +151 -0
- package/dist/src/services/chat-session.js.map +1 -0
- package/dist/src/services/chat-threads.d.ts +61 -0
- package/dist/src/services/chat-threads.d.ts.map +1 -0
- package/dist/src/services/chat-threads.js +137 -0
- package/dist/src/services/chat-threads.js.map +1 -0
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +2 -1
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/core-jobs.d.ts +2 -0
- package/dist/src/services/core-jobs.d.ts.map +1 -1
- package/dist/src/services/core-jobs.js +11 -0
- package/dist/src/services/core-jobs.js.map +1 -1
- package/dist/src/services/datapackage/contract.d.ts +198 -0
- package/dist/src/services/datapackage/contract.d.ts.map +1 -0
- package/dist/src/services/datapackage/contract.js +140 -0
- package/dist/src/services/datapackage/contract.js.map +1 -0
- package/dist/src/services/datapackage/ext-capability.d.ts +85 -0
- package/dist/src/services/datapackage/ext-capability.d.ts.map +1 -0
- package/dist/src/services/datapackage/ext-capability.js +72 -0
- package/dist/src/services/datapackage/ext-capability.js.map +1 -0
- package/dist/src/services/datapackage/odata.d.ts +92 -0
- package/dist/src/services/datapackage/odata.d.ts.map +1 -0
- package/dist/src/services/datapackage/odata.js +256 -0
- package/dist/src/services/datapackage/odata.js.map +1 -0
- package/dist/src/services/datapackage/odps.d.ts +24 -0
- package/dist/src/services/datapackage/odps.d.ts.map +1 -0
- package/dist/src/services/datapackage/odps.js +183 -0
- package/dist/src/services/datapackage/odps.js.map +1 -0
- package/dist/src/services/datapackage/store.d.ts +143 -0
- package/dist/src/services/datapackage/store.d.ts.map +1 -0
- package/dist/src/services/datapackage/store.js +533 -0
- package/dist/src/services/datapackage/store.js.map +1 -0
- package/dist/src/services/datapackage/table.d.ts +67 -0
- package/dist/src/services/datapackage/table.d.ts.map +1 -0
- package/dist/src/services/datapackage/table.js +0 -0
- package/dist/src/services/datapackage/table.js.map +1 -0
- package/dist/src/services/extension-ctx.d.ts +1 -0
- package/dist/src/services/extension-ctx.d.ts.map +1 -1
- package/dist/src/services/extension-ctx.js +31 -6
- package/dist/src/services/extension-ctx.js.map +1 -1
- package/dist/src/services/extension-files.d.ts +20 -0
- package/dist/src/services/extension-files.d.ts.map +1 -1
- package/dist/src/services/extension-files.js +9 -2
- package/dist/src/services/extension-files.js.map +1 -1
- package/dist/src/services/extension-lifecycle.d.ts +3 -0
- package/dist/src/services/extension-lifecycle.d.ts.map +1 -1
- package/dist/src/services/extension-lifecycle.js +2 -26
- package/dist/src/services/extension-lifecycle.js.map +1 -1
- package/dist/src/services/extension-runtime.d.ts +28 -2
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +22 -0
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/extension-schedules.d.ts +90 -0
- package/dist/src/services/extension-schedules.d.ts.map +1 -0
- package/dist/src/services/extension-schedules.js +123 -0
- package/dist/src/services/extension-schedules.js.map +1 -0
- package/dist/src/services/extension-system-run.d.ts +91 -0
- package/dist/src/services/extension-system-run.d.ts.map +1 -0
- package/dist/src/services/extension-system-run.js +100 -0
- package/dist/src/services/extension-system-run.js.map +1 -0
- package/dist/src/services/extension-upsert.d.ts +2 -0
- package/dist/src/services/extension-upsert.d.ts.map +1 -1
- package/dist/src/services/extension-upsert.js +6 -24
- package/dist/src/services/extension-upsert.js.map +1 -1
- package/dist/src/services/goose-acp.d.ts +84 -0
- package/dist/src/services/goose-acp.d.ts.map +1 -0
- package/dist/src/services/goose-acp.js +304 -0
- package/dist/src/services/goose-acp.js.map +1 -0
- package/dist/src/services/invitations.d.ts +0 -20
- package/dist/src/services/invitations.d.ts.map +1 -1
- package/dist/src/services/invitations.js +30 -0
- package/dist/src/services/invitations.js.map +1 -1
- package/dist/src/services/job-seeding.d.ts +1 -0
- package/dist/src/services/job-seeding.d.ts.map +1 -1
- package/dist/src/services/job-seeding.js +6 -0
- package/dist/src/services/job-seeding.js.map +1 -1
- package/dist/src/services/ledger-admin.d.ts +18 -4
- package/dist/src/services/ledger-admin.d.ts.map +1 -1
- package/dist/src/services/ledger-admin.js +47 -33
- package/dist/src/services/ledger-admin.js.map +1 -1
- package/dist/src/services/markdown-negotiation.js +1 -1
- package/dist/src/services/markdown-negotiation.js.map +1 -1
- package/dist/src/services/message-broadcast.d.ts.map +1 -1
- package/dist/src/services/message-broadcast.js +29 -1
- package/dist/src/services/message-broadcast.js.map +1 -1
- package/dist/src/services/metered-access.d.ts +9 -2
- package/dist/src/services/metered-access.d.ts.map +1 -1
- package/dist/src/services/metered-access.js +92 -12
- package/dist/src/services/metered-access.js.map +1 -1
- package/dist/src/services/openrouter.d.ts +20 -1
- package/dist/src/services/openrouter.d.ts.map +1 -1
- package/dist/src/services/openrouter.js +66 -0
- package/dist/src/services/openrouter.js.map +1 -1
- package/dist/src/services/organism-import.d.ts.map +1 -1
- package/dist/src/services/organism-import.js +4 -1
- package/dist/src/services/organism-import.js.map +1 -1
- package/dist/src/services/organism-lifecycle.d.ts.map +1 -1
- package/dist/src/services/organism-lifecycle.js +5 -1
- package/dist/src/services/organism-lifecycle.js.map +1 -1
- package/dist/src/services/organism-ownership.d.ts +56 -0
- package/dist/src/services/organism-ownership.d.ts.map +1 -0
- package/dist/src/services/organism-ownership.js +174 -0
- package/dist/src/services/organism-ownership.js.map +1 -0
- package/dist/src/services/organism-privacy.d.ts.map +1 -1
- package/dist/src/services/organism-privacy.js +2 -1
- package/dist/src/services/organism-privacy.js.map +1 -1
- package/dist/src/services/prompt-defaults/tiers-core.js +4 -4
- package/dist/src/services/scheduler-extension-job.d.ts +29 -6
- package/dist/src/services/scheduler-extension-job.d.ts.map +1 -1
- package/dist/src/services/scheduler-extension-job.js +29 -75
- package/dist/src/services/scheduler-extension-job.js.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts +54 -1
- package/dist/src/services/scope-vocabulary-migration.d.ts.map +1 -1
- package/dist/src/services/scope-vocabulary-migration.js +101 -6
- package/dist/src/services/scope-vocabulary-migration.js.map +1 -1
- package/dist/src/services/screenshot-capture.d.ts +40 -1
- package/dist/src/services/screenshot-capture.d.ts.map +1 -1
- package/dist/src/services/screenshot-capture.js +142 -60
- package/dist/src/services/screenshot-capture.js.map +1 -1
- package/dist/src/services/skill-bundle/generator.js +1 -1
- package/dist/src/services/skill-bundle/generic-adapter.js +1 -1
- package/dist/src/services/skill-bundle/hermes-adapter.js +1 -1
- package/dist/src/services/storage-file-write.d.ts +36 -1
- package/dist/src/services/storage-file-write.d.ts.map +1 -1
- package/dist/src/services/storage-file-write.js +49 -3
- package/dist/src/services/storage-file-write.js.map +1 -1
- package/dist/src/services/task-outcome.d.ts +53 -0
- package/dist/src/services/task-outcome.d.ts.map +1 -0
- package/dist/src/services/task-outcome.js +28 -0
- package/dist/src/services/task-outcome.js.map +1 -0
- package/dist/src/services/usage/archive-job.d.ts +25 -0
- package/dist/src/services/usage/archive-job.d.ts.map +1 -0
- package/dist/src/services/usage/archive-job.js +36 -0
- package/dist/src/services/usage/archive-job.js.map +1 -0
- package/dist/src/services/usage/record-app-open.d.ts +8 -0
- package/dist/src/services/usage/record-app-open.d.ts.map +1 -0
- package/dist/src/services/usage/record-app-open.js +52 -0
- package/dist/src/services/usage/record-app-open.js.map +1 -0
- package/dist/src/services/usage/rollup-cuts.d.ts +44 -0
- package/dist/src/services/usage/rollup-cuts.d.ts.map +1 -0
- package/dist/src/services/usage/rollup-cuts.js +81 -0
- package/dist/src/services/usage/rollup-cuts.js.map +1 -0
- package/dist/src/services/usage/rollup-engine.d.ts +71 -0
- package/dist/src/services/usage/rollup-engine.d.ts.map +1 -0
- package/dist/src/services/usage/rollup-engine.js +237 -0
- package/dist/src/services/usage/rollup-engine.js.map +1 -0
- package/dist/src/services/usage/usage-buffer.d.ts +25 -0
- package/dist/src/services/usage/usage-buffer.d.ts.map +1 -0
- package/dist/src/services/usage/usage-buffer.js +146 -0
- package/dist/src/services/usage/usage-buffer.js.map +1 -0
- package/dist/src/services/usage/usage-read.d.ts +115 -0
- package/dist/src/services/usage/usage-read.d.ts.map +1 -0
- package/dist/src/services/usage/usage-read.js +246 -0
- package/dist/src/services/usage/usage-read.js.map +1 -0
- package/dist/src/services/usage-metering.d.ts +5 -0
- package/dist/src/services/usage-metering.d.ts.map +1 -1
- package/dist/src/services/usage-metering.js +7 -0
- package/dist/src/services/usage-metering.js.map +1 -1
- package/dist/src/services/workflow/engine-human.d.ts +15 -0
- package/dist/src/services/workflow/engine-human.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-human.js +10 -1
- package/dist/src/services/workflow/engine-human.js.map +1 -1
- package/dist/src/services/workflow/engine-steps.d.ts +48 -3
- package/dist/src/services/workflow/engine-steps.d.ts.map +1 -1
- package/dist/src/services/workflow/engine-steps.js +361 -0
- package/dist/src/services/workflow/engine-steps.js.map +1 -1
- package/dist/src/services/workflow/engine.d.ts +1 -0
- package/dist/src/services/workflow/engine.d.ts.map +1 -1
- package/dist/src/services/workflow/engine.js +2 -1
- package/dist/src/services/workflow/engine.js.map +1 -1
- package/dist/src/services/workflow/store.d.ts.map +1 -1
- package/dist/src/services/workflow/store.js +60 -4
- package/dist/src/services/workflow/store.js.map +1 -1
- package/dist/src/services/write-guards.d.ts +27 -1
- package/dist/src/services/write-guards.d.ts.map +1 -1
- package/dist/src/services/write-guards.js +39 -9
- package/dist/src/services/write-guards.js.map +1 -1
- package/dist/src/storage/interface.d.ts +4 -1
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/interface.js +1 -0
- package/dist/src/storage/interface.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts +119 -0
- package/dist/src/storage/providers/postgres-kysely/db-types.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/index.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/index.js +2 -1
- package/dist/src/storage/providers/postgres-kysely/index.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js +3 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-tasks.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js +4 -0
- package/dist/src/storage/providers/postgres-kysely/methods/agent-usage.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js +3 -0
- package/dist/src/storage/providers/postgres-kysely/methods/app-grants.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts +2 -0
- package/dist/src/storage/providers/postgres-kysely/methods/files.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/files.js +34 -2
- package/dist/src/storage/providers/postgres-kysely/methods/files.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.d.ts.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js +11 -2
- package/dist/src/storage/providers/postgres-kysely/methods/organisms.js.map +1 -1
- package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts +32 -0
- package/dist/src/storage/providers/postgres-kysely/methods/usage.d.ts.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/methods/usage.js +336 -0
- package/dist/src/storage/providers/postgres-kysely/methods/usage.js.map +1 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0036_usage_telemetry.sql +181 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0037_task_created_by.sql +18 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0038_organism_owners.sql +31 -0
- package/dist/src/storage/providers/postgres-kysely/migrations/0039_storage_file_utf8_verified.sql +19 -0
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +3 -1
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/methods/apps.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/apps.js +33 -28
- package/dist/src/storage/providers/sqlite/methods/apps.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/methods/governance.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/governance.js +25 -4
- package/dist/src/storage/providers/sqlite/methods/governance.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts +1 -12
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js +28 -135
- package/dist/src/storage/providers/sqlite/methods/identity-nodes.js.map +1 -1
- package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts +38 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.js +109 -0
- package/dist/src/storage/providers/sqlite/methods/storage-files.js.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/usage.d.ts +43 -0
- package/dist/src/storage/providers/sqlite/methods/usage.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/methods/usage.js +37 -0
- package/dist/src/storage/providers/sqlite/methods/usage.js.map +1 -0
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/agent-task.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-task.js +4 -2
- package/dist/src/storage/providers/sqlite/repos/agent-task.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-usage.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent-usage.js +4 -2
- package/dist/src/storage/providers/sqlite/repos/agent-usage.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/community.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/community.js +20 -0
- package/dist/src/storage/providers/sqlite/repos/community.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/usage.d.ts +35 -0
- package/dist/src/storage/providers/sqlite/repos/usage.d.ts.map +1 -0
- package/dist/src/storage/providers/sqlite/repos/usage.js +352 -0
- package/dist/src/storage/providers/sqlite/repos/usage.js.map +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-1.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-1.js +2 -0
- package/dist/src/storage/providers/sqlite/schema-tables-1.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-3.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-3.js +1 -0
- package/dist/src/storage/providers/sqlite/schema-tables-3.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/schema-tables-4.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema-tables-4.js +131 -0
- package/dist/src/storage/providers/sqlite/schema-tables-4.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts +2 -0
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +155 -130
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/app-grant.repository.d.ts +11 -0
- package/dist/src/storage/repositories/app-grant.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/file.repository.d.ts +13 -0
- package/dist/src/storage/repositories/file.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/usage.repository.d.ts +80 -0
- package/dist/src/storage/repositories/usage.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/usage.repository.js +23 -0
- package/dist/src/storage/repositories/usage.repository.js.map +1 -0
- package/dist/src/storage/types/agents-messaging.d.ts +24 -0
- package/dist/src/storage/types/agents-messaging.d.ts.map +1 -1
- package/dist/src/storage/types/agents-messaging.js +1 -0
- package/dist/src/storage/types/agents-messaging.js.map +1 -1
- package/dist/src/storage/types/commerce.d.ts +6 -0
- package/dist/src/storage/types/commerce.d.ts.map +1 -1
- package/dist/src/storage/types/organisms-federation.d.ts +21 -0
- package/dist/src/storage/types/organisms-federation.d.ts.map +1 -1
- package/dist/src/storage/types/usage.d.ts +186 -0
- package/dist/src/storage/types/usage.d.ts.map +1 -0
- package/dist/src/storage/types/usage.js +24 -0
- package/dist/src/storage/types/usage.js.map +1 -0
- package/dist/src/utils/agent-footer.d.ts.map +1 -1
- package/dist/src/utils/agent-footer.js +1 -0
- package/dist/src/utils/agent-footer.js.map +1 -1
- package/dist/src/utils/app-content-type.d.ts +57 -3
- package/dist/src/utils/app-content-type.d.ts.map +1 -1
- package/dist/src/utils/app-content-type.js +81 -12
- package/dist/src/utils/app-content-type.js.map +1 -1
- package/dist/src/utils/env-config/sections-features.d.ts.map +1 -1
- package/dist/src/utils/env-config/sections-features.js +9 -3
- package/dist/src/utils/env-config/sections-features.js.map +1 -1
- package/dist/src/utils/file-download-headers.d.ts +5 -3
- package/dist/src/utils/file-download-headers.d.ts.map +1 -1
- package/dist/src/utils/file-download-headers.js +18 -5
- package/dist/src/utils/file-download-headers.js.map +1 -1
- package/dist/src/utils/http-range.d.ts +151 -0
- package/dist/src/utils/http-range.d.ts.map +1 -0
- package/dist/src/utils/http-range.js +190 -0
- package/dist/src/utils/http-range.js.map +1 -0
- package/dist/src/utils/page-head.d.ts +5 -0
- package/dist/src/utils/page-head.d.ts.map +1 -1
- package/dist/src/utils/page-head.js +10 -1
- package/dist/src/utils/page-head.js.map +1 -1
- package/dist/src/utils/reserved-keys.d.ts +4 -1
- package/dist/src/utils/reserved-keys.d.ts.map +1 -1
- package/dist/src/utils/reserved-keys.js +4 -1
- package/dist/src/utils/reserved-keys.js.map +1 -1
- package/dist/src/utils/scope-coverage.d.ts +21 -0
- package/dist/src/utils/scope-coverage.d.ts.map +1 -1
- package/dist/src/utils/scope-coverage.js +22 -1
- package/dist/src/utils/scope-coverage.js.map +1 -1
- package/dist/static/sdk-libs/datapackage/index.js +336 -0
- package/dist/static/sdk-libs/dist/aimeat-datapackage.js +305 -0
- package/package.json +13 -2
|
@@ -33,11 +33,27 @@
|
|
|
33
33
|
* added for text types that do not already carry a charset. Non-text types pass through.
|
|
34
34
|
* - sniffedContentType(mimeType, bytes) — for USER-UPLOADED bytes: the same, but only after the
|
|
35
35
|
* bytes pass a UTF-8 decode test.
|
|
36
|
+
* - needsUtf8Verdict(mimeType) / isValidUtf8(bytes) — the two halves of that test, so a WRITE path
|
|
37
|
+
* can settle the question once instead of every read repeating it.
|
|
38
|
+
* - verifiedContentType(mimeType, utf8Verified) — the same answer from a stored verdict, for a
|
|
39
|
+
* response that does not have the whole file in hand.
|
|
40
|
+
*
|
|
41
|
+
* WHY THE VERDICT IS STORED. Serving a byte range is the case that breaks the "read the bytes"
|
|
42
|
+
* design: the whole point of a range is not to load the file, and the whole file is exactly what
|
|
43
|
+
* the decode test wants. Loading 25 MB to answer an 8-byte request measured 181 ms against 3 ms for
|
|
44
|
+
* a database-side slice. So the decode test moved to the write, where the bytes are already in
|
|
45
|
+
* hand and the answer is a property of the file rather than of the request. A row from before this
|
|
46
|
+
* existed carries no verdict, and a range read of one still loads the file: the same answer as
|
|
47
|
+
* today at the same cost as today, and it settles itself the next time the file is written.
|
|
36
48
|
* @usage
|
|
37
|
-
* import { appContentType, sniffedContentType } from '../utils/app-content-type.js';
|
|
38
|
-
* res.setHeader('Content-Type', appContentType(app.mimeType));
|
|
39
|
-
* res.setHeader('Content-Type', sniffedContentType(file.mimeType, file.data));
|
|
49
|
+
* import { appContentType, sniffedContentType, verifiedContentType } from '../utils/app-content-type.js';
|
|
50
|
+
* res.setHeader('Content-Type', appContentType(app.mimeType)); // node-generated
|
|
51
|
+
* res.setHeader('Content-Type', sniffedContentType(file.mimeType, file.data)); // uploaded, bytes in hand
|
|
52
|
+
* res.setHeader('Content-Type', verifiedContentType(file.mimeType, file.utf8Verified)); // uploaded, metadata only
|
|
40
53
|
* @version-history
|
|
54
|
+
* v1.2.0 — 2026-08-15 — TARGET-063: the decode test split out so a write can settle it once
|
|
55
|
+
* (needsUtf8Verdict / isValidUtf8) and a metadata-only response can read the answer back
|
|
56
|
+
* (verifiedContentType). sniffedContentType now delegates, so there is still ONE rule.
|
|
41
57
|
* v1.1.0 — 2026-08-01 — TARGET-058 Phase 5 step 0b: sniffedContentType() for the stored-file
|
|
42
58
|
* routes, with the node-generated / user-uploaded distinction the Phase 4 audit drew.
|
|
43
59
|
* v1.0.0 — 2026-08-01 — TARGET-058 Phase 4 step 0a, after the corpus scan above.
|
|
@@ -78,21 +94,74 @@ export function appContentType(mimeType) {
|
|
|
78
94
|
* describes the entity, not the slice.
|
|
79
95
|
*/
|
|
80
96
|
export function sniffedContentType(mimeType, bytes) {
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
return type;
|
|
84
|
-
if (!TEXTUAL.test(type))
|
|
85
|
-
return type;
|
|
97
|
+
if (!needsUtf8Verdict(mimeType))
|
|
98
|
+
return normalisedType(mimeType);
|
|
86
99
|
if (!bytes)
|
|
87
|
-
return
|
|
100
|
+
return normalisedType(mimeType);
|
|
101
|
+
return verifiedContentType(mimeType, isValidUtf8(bytes));
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Would a UTF-8 verdict change how this type is served? False for a type that already names a
|
|
105
|
+
* charset (the author said it and we do not overrule them) and for anything non-textual (a charset
|
|
106
|
+
* on a PNG means nothing).
|
|
107
|
+
*
|
|
108
|
+
* A write path asks this FIRST, and skips the decode test entirely when the answer is no. That is
|
|
109
|
+
* what keeps the cost off image and archive uploads: they never needed the test, and now they do
|
|
110
|
+
* not pay for it.
|
|
111
|
+
*/
|
|
112
|
+
export function needsUtf8Verdict(mimeType) {
|
|
113
|
+
const type = normalisedType(mimeType);
|
|
114
|
+
if (/;\s*charset\s*=/i.test(type))
|
|
115
|
+
return false;
|
|
116
|
+
return TEXTUAL.test(type);
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Do these bytes decode as UTF-8, whole and strict?
|
|
120
|
+
*
|
|
121
|
+
* The decode test rather than a glyph signature, for the reason in the file header: a signature
|
|
122
|
+
* cannot tell `ä` from a clean Finnish `[ÅÄÖåäö]`, and produced exactly that false positive
|
|
123
|
+
* against the real corpus.
|
|
124
|
+
*/
|
|
125
|
+
export function isValidUtf8(bytes) {
|
|
88
126
|
try {
|
|
89
127
|
new TextDecoder('utf-8', { fatal: true }).decode(bytes);
|
|
128
|
+
return true;
|
|
90
129
|
}
|
|
91
130
|
catch {
|
|
92
|
-
// The exception IS the answer
|
|
93
|
-
//
|
|
94
|
-
|
|
131
|
+
// The exception IS the answer. A fatal TextDecoder throws on exactly one condition, an invalid
|
|
132
|
+
// UTF-8 sequence, and that condition is the question being asked. There is no failure here to
|
|
133
|
+
// hide: false is a measured result rather than a fallback, and the caller stores it as one.
|
|
134
|
+
// eslint-disable-next-line aimeat/no-silent-catch -- the throw is the measurement, see above
|
|
135
|
+
return false;
|
|
95
136
|
}
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The served `Content-Type` from a verdict somebody else established.
|
|
140
|
+
*
|
|
141
|
+
* `undefined` means NOT ESTABLISHED — a file stored before the verdict was recorded — and it is
|
|
142
|
+
* treated exactly like `false`: say nothing, and serve the file the way it is served today. It is
|
|
143
|
+
* never read as "not UTF-8", because a caller that knows the answer passes the boolean.
|
|
144
|
+
*/
|
|
145
|
+
export function verifiedContentType(mimeType, utf8Verified) {
|
|
146
|
+
const type = normalisedType(mimeType);
|
|
147
|
+
if (!utf8Verified)
|
|
148
|
+
return type;
|
|
149
|
+
if (!needsUtf8Verdict(type))
|
|
150
|
+
return type;
|
|
96
151
|
return `${type}; charset=utf-8`;
|
|
97
152
|
}
|
|
153
|
+
const normalisedType = (mimeType) => (mimeType ?? '').trim() || 'application/octet-stream';
|
|
154
|
+
/**
|
|
155
|
+
* The verdict to STORE for a file being written. `null` when the type could not be changed by one
|
|
156
|
+
* (an image, an archive, or a type whose author already named a charset), so nothing is computed
|
|
157
|
+
* and nothing is recorded.
|
|
158
|
+
*
|
|
159
|
+
* Called by each storage provider from createStorageFile, which is the one door every write goes
|
|
160
|
+
* through — sixteen call sites create files and none of them should have to know this rule exists.
|
|
161
|
+
*/
|
|
162
|
+
export function utf8VerdictFor(file) {
|
|
163
|
+
if (!needsUtf8Verdict(file.mimeType))
|
|
164
|
+
return null;
|
|
165
|
+
return isValidUtf8(file.data);
|
|
166
|
+
}
|
|
98
167
|
//# sourceMappingURL=app-content-type.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app-content-type.js","sourceRoot":"","sources":["../../../src/utils/app-content-type.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"app-content-type.js","sourceRoot":"","sources":["../../../src/utils/app-content-type.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AAEH,uGAAuG;AACvG,MAAM,OAAO,GAAG,yFAAyF,CAAC;AAE1G;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,QAAmC;IAChE,MAAM,IAAI,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;IACnE,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IAC/C,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,GAAG,IAAI,iBAAiB,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,kBAAkB,CAChC,QAAmC,EACnC,KAA6C;IAE7C,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IACjE,IAAI,CAAC,KAAK;QAAE,OAAO,cAAc,CAAC,QAAQ,CAAC,CAAC;IAC5C,OAAO,mBAAmB,CAAC,QAAQ,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,QAAmC;IAClE,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IAChD,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAA0B;IACpD,IAAI,CAAC;QACH,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,+FAA+F;QAC/F,8FAA8F;QAC9F,4FAA4F;QAC5F,6FAA6F;QAC7F,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAmC,EAAE,YAAwC;IAC/G,MAAM,IAAI,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;IACtC,IAAI,CAAC,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,OAAO,GAAG,IAAI,iBAAiB,CAAC;AAClC,CAAC;AAED,MAAM,cAAc,GAAG,CAAC,QAAmC,EAAU,EAAE,CACrE,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAC;AAExD;;;;;;;GAOG;AACH,MAAM,UAAU,cAAc,CAAC,IAAqD;IAClF,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAClD,OAAO,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAChC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections-features.d.ts","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,EAAE,
|
|
1
|
+
{"version":3,"file":"sections-features.d.ts","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,wBAAgB,eAAe,CAAC,MAAM,EAAE,YAAY,GAAG,aAAa,EAAE,CA+gBrE"}
|
|
@@ -22,9 +22,15 @@ export function featureSections(config) {
|
|
|
22
22
|
},
|
|
23
23
|
{
|
|
24
24
|
envVar: 'AIMEAT_CONTENT_SIGNAL',
|
|
25
|
-
description: 'robots.txt Content Signals Policy directive (contentsignals.org); "off" removes it',
|
|
26
|
-
value: config.contentSignal,
|
|
27
|
-
defaultVal: '
|
|
25
|
+
description: 'robots.txt Content Signals Policy directive (contentsignals.org); "off" removes it. Empty pairs it to AIMEAT_AI_TRAINING',
|
|
26
|
+
value: config.contentSignal || '(paired to AIMEAT_AI_TRAINING)',
|
|
27
|
+
defaultVal: '(paired)',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
envVar: 'AIMEAT_AI_TRAINING',
|
|
31
|
+
description: 'Allow the AI training crawlers (GPTBot, ClaudeBot, Google-Extended, Applebot-Extended, meta-externalagent) in robots.txt. Search and retrieval bots are always allowed and are not affected',
|
|
32
|
+
value: config.aiTraining,
|
|
33
|
+
defaultVal: 'deny',
|
|
28
34
|
},
|
|
29
35
|
],
|
|
30
36
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sections-features.js","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"sections-features.js","sourceRoot":"","sources":["../../../../src/utils/env-config/sections-features.ts"],"names":[],"mappings":"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"}
|
|
@@ -59,13 +59,15 @@ export declare function isInlineSafeFileType(mimeType: string | undefined | null
|
|
|
59
59
|
* The caller still sets `Content-Length` (or `Content-Range`), caching and any CORS headers: those
|
|
60
60
|
* depend on which door the file came through, and these four do not.
|
|
61
61
|
*
|
|
62
|
-
* Pass
|
|
63
|
-
*
|
|
64
|
-
*
|
|
62
|
+
* Pass `utf8Verified` when the record carries it — a metadata read has it and a range reply cannot
|
|
63
|
+
* sniff. Otherwise pass the WHOLE file as `data`, even when replying with a range: the content type
|
|
64
|
+
* is sniffed from it, and a multi-byte character straddling a range boundary would fail a decode of
|
|
65
|
+
* the slice while the file itself is good UTF-8.
|
|
65
66
|
*/
|
|
66
67
|
export declare function setStoredFileHeaders(res: Response, file: {
|
|
67
68
|
key: string;
|
|
68
69
|
mimeType: string;
|
|
69
70
|
data?: Buffer | Uint8Array | null;
|
|
71
|
+
utf8Verified?: boolean;
|
|
70
72
|
}): void;
|
|
71
73
|
//# sourceMappingURL=file-download-headers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-headers.d.ts","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAejF;AAuCD
|
|
1
|
+
{"version":3,"file":"file-download-headers.d.ts","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAGxC;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,OAAO,CAejF;AAuCD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAChC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACnG,IAAI,CAqBN"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { sniffedContentType } from './app-content-type.js';
|
|
1
|
+
import { sniffedContentType, verifiedContentType } from './app-content-type.js';
|
|
2
2
|
/**
|
|
3
3
|
* Everything a stored file may be rendered as when someone navigates to it. Read the reasoning in
|
|
4
4
|
* the file header before adding to it: a type belongs here only when a browser CANNOT run script
|
|
@@ -71,13 +71,26 @@ function dispositionValue(disposition, filename) {
|
|
|
71
71
|
* The caller still sets `Content-Length` (or `Content-Range`), caching and any CORS headers: those
|
|
72
72
|
* depend on which door the file came through, and these four do not.
|
|
73
73
|
*
|
|
74
|
-
* Pass
|
|
75
|
-
*
|
|
76
|
-
*
|
|
74
|
+
* Pass `utf8Verified` when the record carries it — a metadata read has it and a range reply cannot
|
|
75
|
+
* sniff. Otherwise pass the WHOLE file as `data`, even when replying with a range: the content type
|
|
76
|
+
* is sniffed from it, and a multi-byte character straddling a range boundary would fail a decode of
|
|
77
|
+
* the slice while the file itself is good UTF-8.
|
|
77
78
|
*/
|
|
78
79
|
export function setStoredFileHeaders(res, file) {
|
|
79
80
|
const inline = isInlineSafeFileType(file.mimeType);
|
|
80
|
-
|
|
81
|
+
// A stored verdict WINS over the bytes in hand, and that ordering is the point: a range response
|
|
82
|
+
// holds a slice, and sniffing a slice can disagree with the full GET when a multi-byte character
|
|
83
|
+
// straddles the boundary. The verdict is a property of the file, so both responses name the same
|
|
84
|
+
// type. Only a file written before the verdict existed falls through to reading the bytes.
|
|
85
|
+
//
|
|
86
|
+
// An EMPTY `data` is treated as "no bytes were supplied" rather than as an empty file, and that
|
|
87
|
+
// is not pedantry: a metadata-only record carries a zero-length buffer, zero bytes decode as
|
|
88
|
+
// valid UTF-8, and the sniffer would cheerfully stamp `charset=utf-8` on a file it has never
|
|
89
|
+
// seen. A genuinely empty file loses nothing by not being told which encoding its no bytes are in.
|
|
90
|
+
const supplied = file.data && file.data.length > 0 ? file.data : null;
|
|
91
|
+
res.setHeader('Content-Type', file.utf8Verified === undefined
|
|
92
|
+
? sniffedContentType(file.mimeType, supplied)
|
|
93
|
+
: verifiedContentType(file.mimeType, file.utf8Verified));
|
|
81
94
|
res.setHeader('X-Content-Type-Options', 'nosniff');
|
|
82
95
|
res.setHeader('Content-Security-Policy', inline ? CSP_INLINE : CSP_ATTACHMENT);
|
|
83
96
|
// The key is an address, so its last segment is the closest thing to a filename we have; a key
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-download-headers.js","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"AA4CA,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"file-download-headers.js","sourceRoot":"","sources":["../../../src/utils/file-download-headers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file src/utils/http-range.ts
|
|
3
|
+
* @description HTTP byte-range parsing for the stored-file download paths, in one place.
|
|
4
|
+
*
|
|
5
|
+
* WHAT WAS WRONG. Three download handlers each carried the same four lines, and those four lines
|
|
6
|
+
* were `/bytes=(\d+)-(\d*)/`. That regex does not match `bytes=-8` — the SUFFIX range, which is
|
|
7
|
+
* exactly the request a Parquet reader makes first, because the footer is at the end of the file.
|
|
8
|
+
* A client asking for the last eight bytes got status 200 and the whole file, with no header
|
|
9
|
+
* anywhere saying the request had not been honoured. That is a silent fallback: the reader
|
|
10
|
+
* believes it is streaming and is in fact downloading everything, once per range it asks for.
|
|
11
|
+
* The fourth path, `GET /v1/pub`, never looked at `Range` at all.
|
|
12
|
+
*
|
|
13
|
+
* And no path ever sent `Accept-Ranges`. A client cannot discover range support by guessing, so
|
|
14
|
+
* DuckDB, pandas and every HTTP range reader concluded the node does not do ranges — correctly,
|
|
15
|
+
* from the evidence they had.
|
|
16
|
+
*
|
|
17
|
+
* THE RULES THIS ENCODES, and why each one is what it is:
|
|
18
|
+
*
|
|
19
|
+
* - `bytes=N-M`, `bytes=N-` and `bytes=-N` all parse. `M` past the end clamps to the last byte,
|
|
20
|
+
* which RFC 9110 §14.1.2 requires; `-N` larger than the file means the whole file, same clause.
|
|
21
|
+
* - A range unit that is NOT `bytes` is IGNORED and the full representation is sent. RFC 9110
|
|
22
|
+
* §14.2 says MUST on this, and it is not a covering fallback: `Accept-Ranges: bytes` on the
|
|
23
|
+
* same response has already told the client which unit this server speaks.
|
|
24
|
+
* - A `bytes=` header that does not parse, or that starts past the end of the file, is
|
|
25
|
+
* UNSATISFIABLE. That answers 416 with a `Content-Range` of `bytes STAR/size`, never a 200. This is
|
|
26
|
+
* the case the old regex covered up.
|
|
27
|
+
* - A MULTI-range request (`bytes=0-9, 20-29`) is refused with 416 rather than served as one
|
|
28
|
+
* coalesced span or silently reduced to its first range. A `multipart/byteranges` body is not
|
|
29
|
+
* implemented here, and answering a two-range request with one range's bytes, under a status
|
|
30
|
+
* code that claims the request was honoured, is the same class of defect this file exists to
|
|
31
|
+
* remove. No stored-file client on this node sends one.
|
|
32
|
+
* @structure parseRangeHeader() — the verdict · sendPartialContent() / setAcceptRanges() /
|
|
33
|
+
* rangeNotSatisfiable() — the three response shapes a door needs · serveStoredFile() — all three,
|
|
34
|
+
* plus the read, in the one order that does not load a file to send part of it
|
|
35
|
+
* @usage
|
|
36
|
+
* const file = await storage.getStorageFileMeta(gaii, key); // no bytes yet
|
|
37
|
+
* if (!file) { …404… }
|
|
38
|
+
* res.setHeader('Cache-Control', 'public, max-age=300'); // this door's own headers first
|
|
39
|
+
* const served = await serveStoredFile(res, file, req.headers.range, {
|
|
40
|
+
* range: (start, length) => storage.readStorageFileRange(gaii, key, start, length),
|
|
41
|
+
* all: () => storage.getStorageFile(gaii, key).then(f => f?.data ?? null),
|
|
42
|
+
* });
|
|
43
|
+
* if (!served) { …404… } // it vanished mid-request
|
|
44
|
+
* @version-history
|
|
45
|
+
* v1.1.0 -- 2026-08-15 -- TARGET-063: serveStoredFile(), so a range is read as a range. The four
|
|
46
|
+
* doors each carried the same three-line dance and each began by loading the whole file.
|
|
47
|
+
* v1.0.0 -- 2026-08-15 -- TARGET-063 A1: extracted from the three copies in routes/storage-files.ts,
|
|
48
|
+
* with suffix ranges, 416 and Accept-Ranges added. GET /v1/pub gains range support for the first
|
|
49
|
+
* time; it is the door a program reading a data package from its permanent address knocks at.
|
|
50
|
+
*/
|
|
51
|
+
import type { Response } from 'express';
|
|
52
|
+
/** What a `Range` header means for one representation of a known size. */
|
|
53
|
+
export type RangeVerdict =
|
|
54
|
+
/** No usable range: absent header, or a unit this server does not speak. Send the whole thing, 200. */
|
|
55
|
+
{
|
|
56
|
+
kind: 'full';
|
|
57
|
+
}
|
|
58
|
+
/** Inclusive byte offsets into the representation. Send 206. */
|
|
59
|
+
| {
|
|
60
|
+
kind: 'partial';
|
|
61
|
+
start: number;
|
|
62
|
+
end: number;
|
|
63
|
+
}
|
|
64
|
+
/** The header named `bytes` and could not be honoured. Send 416 — never 200. */
|
|
65
|
+
| {
|
|
66
|
+
kind: 'unsatisfiable';
|
|
67
|
+
reason: string;
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Decide what a `Range` header asks for.
|
|
71
|
+
*
|
|
72
|
+
* `size` is the complete length of the representation. A zero-length file makes every byte range
|
|
73
|
+
* unsatisfiable, which is what RFC 9110 §15.5.17 describes and what a client needs to hear rather
|
|
74
|
+
* than a 200 with no bytes and a status that says it was a partial answer.
|
|
75
|
+
*/
|
|
76
|
+
export declare function parseRangeHeader(header: string | undefined | null, size: number): RangeVerdict;
|
|
77
|
+
/**
|
|
78
|
+
* Announce range support. Belongs on EVERY response that carries (or describes) stored bytes,
|
|
79
|
+
* including the 200 and the HEAD: a client decides whether to range-read from this header, and a
|
|
80
|
+
* server that answers ranges without advertising them is a server nothing ranges against.
|
|
81
|
+
*/
|
|
82
|
+
export declare function setAcceptRanges(res: Response): void;
|
|
83
|
+
/**
|
|
84
|
+
* 416 with the one header that makes it actionable: a `Content-Range` of `bytes STAR/size` tells the
|
|
85
|
+
* client how long the representation actually is, so its next request can be a valid one.
|
|
86
|
+
*
|
|
87
|
+
* Deliberately NOT the envelope. This is a byte-serving path, the caller may be a database engine
|
|
88
|
+
* rather than a browser, and the status plus Content-Range is the whole message.
|
|
89
|
+
*/
|
|
90
|
+
export declare function rangeNotSatisfiable(res: Response, size: number, reason: string): void;
|
|
91
|
+
/**
|
|
92
|
+
* 206 with the slice.
|
|
93
|
+
*
|
|
94
|
+
* `chunk` is the slice and `file` describes the WHOLE representation, which is the distinction the
|
|
95
|
+
* Content-Range header itself makes. `setStoredFileHeaders` follows the same rule: it takes the
|
|
96
|
+
* file's stored UTF-8 verdict when there is one, so this response names the same content type the
|
|
97
|
+
* full GET does. Sniffing the slice would not — a multi-byte character straddling the boundary
|
|
98
|
+
* fails a decode that the whole file passes.
|
|
99
|
+
*/
|
|
100
|
+
export declare function sendPartialContent(res: Response, file: {
|
|
101
|
+
key: string;
|
|
102
|
+
mimeType: string;
|
|
103
|
+
size: number;
|
|
104
|
+
data?: Buffer;
|
|
105
|
+
utf8Verified?: boolean;
|
|
106
|
+
}, range: {
|
|
107
|
+
start: number;
|
|
108
|
+
end: number;
|
|
109
|
+
}, chunk: Buffer): void;
|
|
110
|
+
/**
|
|
111
|
+
* Does naming this file's content type still require reading it?
|
|
112
|
+
*
|
|
113
|
+
* Only for a row written before the UTF-8 verdict was recorded, and only for a type whose served
|
|
114
|
+
* form the verdict would change. Everything written since answers from metadata alone, and this
|
|
115
|
+
* shrinks to nothing as old rows are rewritten.
|
|
116
|
+
*/
|
|
117
|
+
export declare function needsBytesForType(file: {
|
|
118
|
+
mimeType: string;
|
|
119
|
+
utf8Verified?: boolean;
|
|
120
|
+
}): boolean;
|
|
121
|
+
/** How a door gets at the bytes it is about to serve. Both halves come from the storage layer, and
|
|
122
|
+
* a range read never touches the rest of the file. */
|
|
123
|
+
export interface StoredFileReader {
|
|
124
|
+
/** `length` bytes from byte offset `start`. Null only if the file has disappeared. */
|
|
125
|
+
range(start: number, length: number): Promise<Buffer | null>;
|
|
126
|
+
/** The whole representation. Null only if the file has disappeared. */
|
|
127
|
+
all(): Promise<Buffer | null>;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Serve one stored file, honouring `Range`, from METADATA plus a reader.
|
|
131
|
+
*
|
|
132
|
+
* WHY THE READER IS A CALLBACK AND NOT A BUFFER. Every door here used to load the entire file and
|
|
133
|
+
* then decide what part of it to send, which meant an eight-byte suffix request — the first thing a
|
|
134
|
+
* Parquet reader asks for — read 25 MB out of the database to answer it. Measured on Postgres:
|
|
135
|
+
* 181 ms that way, 3 ms as a database-side substring, and the gap widens with the file. Taking the
|
|
136
|
+
* reader rather than the bytes is what lets the decision come BEFORE the read.
|
|
137
|
+
*
|
|
138
|
+
* The caller sets its own caching and CORS headers first; they differ per door and these do not.
|
|
139
|
+
* Returns false when the file vanished between the metadata read and the bytes, and sends nothing —
|
|
140
|
+
* the caller owns the 404 because only it knows which shape of "not found" that door tells.
|
|
141
|
+
*/
|
|
142
|
+
export declare function serveStoredFile(res: Response, file: {
|
|
143
|
+
key: string;
|
|
144
|
+
mimeType: string;
|
|
145
|
+
size: number;
|
|
146
|
+
utf8Verified?: boolean;
|
|
147
|
+
createdAt?: string;
|
|
148
|
+
}, rangeHeader: string | undefined, read: StoredFileReader, opts?: {
|
|
149
|
+
headOnly?: boolean;
|
|
150
|
+
}): Promise<boolean>;
|
|
151
|
+
//# sourceMappingURL=http-range.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-range.d.ts","sourceRoot":"","sources":["../../../src/utils/http-range.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIxC,0EAA0E;AAC1E,MAAM,MAAM,YAAY;AACpB,uGAAuG;AACrG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE;AAClB,gEAAgE;GAC9D;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE;AACjD,gFAAgF;GAC9E;IAAE,IAAI,EAAE,eAAe,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEhD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAyC9F;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,QAAQ,GAAG,IAAI,CAEnD;AAED;;;;;;GAMG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrF;AAED;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAC9B,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,EAC5F,KAAK,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACrC,KAAK,EAAE,MAAM,GACd,IAAI,CAON;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAE7F;AAED;uDACuD;AACvD,MAAM,WAAW,gBAAgB;IAC7B,sFAAsF;IACtF,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAC7D,uEAAuE;IACvE,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CACjC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,eAAe,CACjC,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EACjG,WAAW,EAAE,MAAM,GAAG,SAAS,EAC/B,IAAI,EAAE,gBAAgB,EACtB,IAAI,GAAE;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAO,GAClC,OAAO,CAAC,OAAO,CAAC,CAoElB"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { setStoredFileHeaders } from './file-download-headers.js';
|
|
2
|
+
import { needsUtf8Verdict } from './app-content-type.js';
|
|
3
|
+
/**
|
|
4
|
+
* Decide what a `Range` header asks for.
|
|
5
|
+
*
|
|
6
|
+
* `size` is the complete length of the representation. A zero-length file makes every byte range
|
|
7
|
+
* unsatisfiable, which is what RFC 9110 §15.5.17 describes and what a client needs to hear rather
|
|
8
|
+
* than a 200 with no bytes and a status that says it was a partial answer.
|
|
9
|
+
*/
|
|
10
|
+
export function parseRangeHeader(header, size) {
|
|
11
|
+
const raw = (header ?? '').trim();
|
|
12
|
+
if (!raw)
|
|
13
|
+
return { kind: 'full' };
|
|
14
|
+
// A unit we do not speak. RFC 9110 §14.2: ignore it and answer with the full representation.
|
|
15
|
+
// `Accept-Ranges: bytes` is on that same response, so the client is not left guessing.
|
|
16
|
+
if (!/^bytes\s*=/i.test(raw))
|
|
17
|
+
return { kind: 'full' };
|
|
18
|
+
const spec = raw.slice(raw.indexOf('=') + 1).trim();
|
|
19
|
+
if (spec.includes(',')) {
|
|
20
|
+
return {
|
|
21
|
+
kind: 'unsatisfiable',
|
|
22
|
+
reason: 'This server serves one byte range per request. A multipart/byteranges response is '
|
|
23
|
+
+ 'not implemented, and answering part of what was asked under a success status would '
|
|
24
|
+
+ 'hide that. Ask for one range at a time.',
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
// suffix-byte-range-spec: "-N" — the LAST N bytes. The shape a Parquet reader opens with.
|
|
28
|
+
const suffix = /^-(\d+)$/.exec(spec);
|
|
29
|
+
if (suffix) {
|
|
30
|
+
const wanted = parseInt(suffix[1], 10);
|
|
31
|
+
if (!Number.isFinite(wanted) || wanted <= 0 || size === 0) {
|
|
32
|
+
return { kind: 'unsatisfiable', reason: `suffix range "${spec}" against a ${size}-byte representation` };
|
|
33
|
+
}
|
|
34
|
+
// Asking for more than there is means the whole thing (RFC 9110 §14.1.2), not an error.
|
|
35
|
+
return { kind: 'partial', start: Math.max(0, size - wanted), end: size - 1 };
|
|
36
|
+
}
|
|
37
|
+
// int-byte-range-spec: "N-" or "N-M".
|
|
38
|
+
const explicit = /^(\d+)-(\d*)$/.exec(spec);
|
|
39
|
+
if (!explicit) {
|
|
40
|
+
return { kind: 'unsatisfiable', reason: `unparseable byte range "${spec}"` };
|
|
41
|
+
}
|
|
42
|
+
const start = parseInt(explicit[1], 10);
|
|
43
|
+
// An absent last-byte-pos means "to the end"; one past the end clamps to the last byte.
|
|
44
|
+
const end = explicit[2] === '' ? size - 1 : Math.min(parseInt(explicit[2], 10), size - 1);
|
|
45
|
+
if (!Number.isFinite(start) || size === 0 || start >= size || end < start) {
|
|
46
|
+
return { kind: 'unsatisfiable', reason: `byte range "${spec}" against a ${size}-byte representation` };
|
|
47
|
+
}
|
|
48
|
+
return { kind: 'partial', start, end };
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Announce range support. Belongs on EVERY response that carries (or describes) stored bytes,
|
|
52
|
+
* including the 200 and the HEAD: a client decides whether to range-read from this header, and a
|
|
53
|
+
* server that answers ranges without advertising them is a server nothing ranges against.
|
|
54
|
+
*/
|
|
55
|
+
export function setAcceptRanges(res) {
|
|
56
|
+
res.setHeader('Accept-Ranges', 'bytes');
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* 416 with the one header that makes it actionable: a `Content-Range` of `bytes STAR/size` tells the
|
|
60
|
+
* client how long the representation actually is, so its next request can be a valid one.
|
|
61
|
+
*
|
|
62
|
+
* Deliberately NOT the envelope. This is a byte-serving path, the caller may be a database engine
|
|
63
|
+
* rather than a browser, and the status plus Content-Range is the whole message.
|
|
64
|
+
*/
|
|
65
|
+
export function rangeNotSatisfiable(res, size, reason) {
|
|
66
|
+
res.status(416);
|
|
67
|
+
setAcceptRanges(res);
|
|
68
|
+
res.setHeader('Content-Range', `bytes */${size}`);
|
|
69
|
+
res.setHeader('Content-Type', 'text/plain; charset=utf-8');
|
|
70
|
+
res.end(`416 Range Not Satisfiable: ${reason}\n`);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 206 with the slice.
|
|
74
|
+
*
|
|
75
|
+
* `chunk` is the slice and `file` describes the WHOLE representation, which is the distinction the
|
|
76
|
+
* Content-Range header itself makes. `setStoredFileHeaders` follows the same rule: it takes the
|
|
77
|
+
* file's stored UTF-8 verdict when there is one, so this response names the same content type the
|
|
78
|
+
* full GET does. Sniffing the slice would not — a multi-byte character straddling the boundary
|
|
79
|
+
* fails a decode that the whole file passes.
|
|
80
|
+
*/
|
|
81
|
+
export function sendPartialContent(res, file, range, chunk) {
|
|
82
|
+
res.status(206);
|
|
83
|
+
setStoredFileHeaders(res, file);
|
|
84
|
+
setAcceptRanges(res);
|
|
85
|
+
res.setHeader('Content-Range', `bytes ${range.start}-${range.end}/${file.size}`);
|
|
86
|
+
res.setHeader('Content-Length', chunk.length);
|
|
87
|
+
res.end(chunk);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Does naming this file's content type still require reading it?
|
|
91
|
+
*
|
|
92
|
+
* Only for a row written before the UTF-8 verdict was recorded, and only for a type whose served
|
|
93
|
+
* form the verdict would change. Everything written since answers from metadata alone, and this
|
|
94
|
+
* shrinks to nothing as old rows are rewritten.
|
|
95
|
+
*/
|
|
96
|
+
export function needsBytesForType(file) {
|
|
97
|
+
return file.utf8Verified === undefined && needsUtf8Verdict(file.mimeType);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Serve one stored file, honouring `Range`, from METADATA plus a reader.
|
|
101
|
+
*
|
|
102
|
+
* WHY THE READER IS A CALLBACK AND NOT A BUFFER. Every door here used to load the entire file and
|
|
103
|
+
* then decide what part of it to send, which meant an eight-byte suffix request — the first thing a
|
|
104
|
+
* Parquet reader asks for — read 25 MB out of the database to answer it. Measured on Postgres:
|
|
105
|
+
* 181 ms that way, 3 ms as a database-side substring, and the gap widens with the file. Taking the
|
|
106
|
+
* reader rather than the bytes is what lets the decision come BEFORE the read.
|
|
107
|
+
*
|
|
108
|
+
* The caller sets its own caching and CORS headers first; they differ per door and these do not.
|
|
109
|
+
* Returns false when the file vanished between the metadata read and the bytes, and sends nothing —
|
|
110
|
+
* the caller owns the 404 because only it knows which shape of "not found" that door tells.
|
|
111
|
+
*/
|
|
112
|
+
export async function serveStoredFile(res, file, rangeHeader, read, opts = {}) {
|
|
113
|
+
// A validator, on every representation of the file. A ranged reader keeps one of these between
|
|
114
|
+
// requests to know the bytes did not move under it, and DuckDB reads Last-Modified straight off
|
|
115
|
+
// the probe. It costs nothing: the write time is already in the metadata.
|
|
116
|
+
if (file.createdAt) {
|
|
117
|
+
const at = new Date(file.createdAt);
|
|
118
|
+
if (!Number.isNaN(at.getTime()))
|
|
119
|
+
res.setHeader('Last-Modified', at.toUTCString());
|
|
120
|
+
}
|
|
121
|
+
// ONE decision, made before anything is sent: can this file's content type be named without its
|
|
122
|
+
// bytes? With a stored verdict, yes, and nothing outside the requested range is ever read. For a
|
|
123
|
+
// file written before the verdict existed the charset still lives in the content, so the whole
|
|
124
|
+
// file is read — the same cost as before this change, paid only by rows that predate it, and
|
|
125
|
+
// gone the next time each one is written.
|
|
126
|
+
//
|
|
127
|
+
// Getting this wrong is not a slow response but a false one. An earlier draft passed the
|
|
128
|
+
// metadata record straight through, and its `data` is an EMPTY buffer: the sniffer decoded zero
|
|
129
|
+
// bytes, found them valid UTF-8, and stamped `charset=utf-8` on a range reply. On a genuinely
|
|
130
|
+
// cp1252 file that declares an encoding the file does not have, over a GET of the same file that
|
|
131
|
+
// correctly declares nothing.
|
|
132
|
+
const whole = needsBytesForType(file) ? await read.all() : null;
|
|
133
|
+
if (needsBytesForType(file) && !whole)
|
|
134
|
+
return false;
|
|
135
|
+
const described = whole ? { ...file, data: whole } : file;
|
|
136
|
+
const verdict = parseRangeHeader(rangeHeader, file.size);
|
|
137
|
+
// A HEAD answers out of the metadata and reads nothing more. Express auto-handles HEAD through
|
|
138
|
+
// the GET handler, so /v1/pub was loading the entire file and discarding the body: 114 ms
|
|
139
|
+
// measured, for a 10 MB file, to send zero bytes.
|
|
140
|
+
//
|
|
141
|
+
// IT STILL HONOURS `Range`, and that is not pedantry about RFC 9110's "same headers a GET would
|
|
142
|
+
// send". A HEAD carrying `Range: bytes=0-` is how a client ASKS whether this server does ranges,
|
|
143
|
+
// and DuckDB-Wasm's own words for the answer are `if (contentLength !== null && status == 206)`.
|
|
144
|
+
// An earlier version of this function short-circuited before reading the Range header, so that
|
|
145
|
+
// probe got 200 and the full length. DuckDB read it as "no ranges here" and downloaded an 8.45 MB
|
|
146
|
+
// Parquet file in one request to answer a two-column aggregate — and with full reads disabled it
|
|
147
|
+
// refused to open the file at all. A fast HEAD that lies about ranges is worse than a slow one.
|
|
148
|
+
if (opts.headOnly) {
|
|
149
|
+
if (verdict.kind === 'unsatisfiable') {
|
|
150
|
+
rangeNotSatisfiable(res, file.size, verdict.reason);
|
|
151
|
+
return true;
|
|
152
|
+
}
|
|
153
|
+
setStoredFileHeaders(res, described);
|
|
154
|
+
setAcceptRanges(res);
|
|
155
|
+
if (verdict.kind === 'partial') {
|
|
156
|
+
res.status(206);
|
|
157
|
+
res.setHeader('Content-Range', `bytes ${verdict.start}-${verdict.end}/${file.size}`);
|
|
158
|
+
res.setHeader('Content-Length', verdict.end - verdict.start + 1);
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
res.setHeader('Content-Length', file.size);
|
|
162
|
+
}
|
|
163
|
+
res.end();
|
|
164
|
+
return true;
|
|
165
|
+
}
|
|
166
|
+
if (verdict.kind === 'unsatisfiable') {
|
|
167
|
+
rangeNotSatisfiable(res, file.size, verdict.reason);
|
|
168
|
+
return true;
|
|
169
|
+
}
|
|
170
|
+
if (verdict.kind === 'partial') {
|
|
171
|
+
// When the file is already in hand there is nothing to gain from asking the database for a
|
|
172
|
+
// slice of it, so the second read is skipped rather than repeated.
|
|
173
|
+
const chunk = whole
|
|
174
|
+
? whole.subarray(verdict.start, verdict.end + 1)
|
|
175
|
+
: await read.range(verdict.start, verdict.end - verdict.start + 1);
|
|
176
|
+
if (!chunk)
|
|
177
|
+
return false;
|
|
178
|
+
sendPartialContent(res, described, verdict, chunk);
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
181
|
+
const data = whole ?? await read.all();
|
|
182
|
+
if (!data)
|
|
183
|
+
return false;
|
|
184
|
+
setStoredFileHeaders(res, { ...described, data });
|
|
185
|
+
setAcceptRanges(res);
|
|
186
|
+
res.setHeader('Content-Length', file.size);
|
|
187
|
+
res.end(data);
|
|
188
|
+
return true;
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=http-range.js.map
|