@cosmicdrift/kumiko-framework 0.389.0 → 0.390.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/AGENTS.md +9 -4
- package/README.md +1 -1
- package/agents/examples/apex-surface-auth.md +2 -3
- package/agents/examples/api-worker-split.md +9 -2
- package/agents/examples/auth-claims.md +1 -1
- package/agents/examples/cross-feature-events.md +12 -12
- package/agents/examples/crypto-shredding-hr.md +2 -2
- package/agents/examples/encrypted-tenant-config.md +1 -1
- package/agents/examples/error-contract.md +12 -7
- package/agents/examples/event-sourcing.md +29 -29
- package/agents/examples/files-post-processing.md +10 -8
- package/agents/examples/inbound-mail-triage.md +1 -0
- package/agents/examples/lane-routing.md +2 -1
- package/agents/examples/legal-pages.md +2 -2
- package/agents/examples/lifecycle-hooks.md +3 -3
- package/agents/examples/managed-config.md +4 -4
- package/agents/examples/managed-pages.md +1 -1
- package/agents/examples/relations.md +19 -4
- package/agents/examples/search.md +4 -4
- package/agents/examples/secrets-demo.md +9 -6
- package/agents/examples/state-machine.md +2 -2
- package/agents/examples/tenant-settings.md +1 -1
- package/agents/examples/user-data-rights.md +3 -6
- package/agents/examples/workflow-engine.md +53 -47
- package/agents/examples.md +4 -4
- package/agents/features.md +1 -1
- package/dist/api/auth-middleware.js +1 -1
- package/dist/api/auth-routes-invite.js +2 -1
- package/dist/api/entity-read-access.d.ts +3 -1
- package/dist/api/export/export-columns.d.ts +3 -1
- package/dist/api/export/export-route.js +3 -2
- package/dist/api/export/export-screen.d.ts +2 -1
- package/dist/api/extra-route.d.ts +3 -1
- package/dist/api/index.d.ts +23 -27
- package/dist/api/index.js +13 -15
- package/dist/api/jwt.js +1 -1
- package/dist/api/observability-middleware.d.ts +1 -1
- package/dist/api/observability-middleware.js +2 -1
- package/dist/api/request-context-internals.d.ts +31 -0
- package/dist/api/request-context-internals.js +11 -0
- package/dist/api/request-context-scopes.d.ts +14 -0
- package/dist/api/request-context-scopes.js +69 -0
- package/dist/api/request-context.d.ts +1 -40
- package/dist/api/request-context.js +22 -51
- package/dist/api/request-id-middleware.d.ts +1 -1
- package/dist/api/route-registrars.d.ts +2 -1
- package/dist/api/route-registrars.js +1 -1
- package/dist/api/routes.js +7 -3
- package/dist/api/server-boot-checks.d.ts +1 -1
- package/dist/api/server-boot-checks.js +2 -2
- package/dist/api/server-event-dispatcher.d.ts +6 -1
- package/dist/api/server-event-dispatcher.js +3 -4
- package/dist/api/server-extra-routes.d.ts +1 -1
- package/dist/api/server-extra-routes.js +2 -1
- package/dist/api/server-middleware.js +3 -1
- package/dist/api/server-routes.d.ts +2 -1
- package/dist/api/server-wiring.js +6 -4
- package/dist/api/server.d.ts +2 -1
- package/dist/api/sse-route.d.ts +2 -1
- package/dist/api/tenant-scoped-secrets.d.ts +2 -0
- package/dist/api/tenant-scoped-secrets.js +13 -0
- package/dist/api/websocket-route.d.ts +1 -1
- package/dist/auth/index.d.ts +0 -1
- package/dist/auth/roles.d.ts +0 -5
- package/dist/compliance/duration-spec.d.ts +0 -1
- package/dist/compliance/duration-spec.js +0 -5
- package/dist/compliance/index.d.ts +4 -4
- package/dist/compliance/index.js +2 -2
- package/dist/compliance/profiles.d.ts +0 -15
- package/dist/compliance/profiles.js +0 -23
- package/dist/config/index.d.ts +10 -10
- package/dist/config/index.js +13 -1
- package/dist/config/internals.d.ts +9 -0
- package/dist/config/internals.js +1 -0
- package/dist/consumer-cli-internals.d.ts +4 -0
- package/dist/consumer-cli-internals.js +1 -0
- package/dist/consumer-cli.d.ts +1 -4
- package/dist/consumer-cli.js +5 -1
- package/dist/crypto/event-pii.js +1 -1
- package/dist/crypto/index.d.ts +8 -9
- package/dist/crypto/index.js +7 -8
- package/dist/crypto/pg-kms-adapter.js +6 -1
- package/dist/db/apply-entity-event.d.ts +1 -1
- package/dist/db/apply-entity-event.js +15 -47
- package/dist/db/blind-index-cleanup.js +91 -77
- package/dist/db/collect-table-metas.js +1 -1
- package/dist/db/compound-types.d.ts +1 -1
- package/dist/db/compound-types.js +0 -7
- package/dist/db/config-seed.d.ts +2 -1
- package/dist/db/config-seed.js +6 -1
- package/dist/db/connection.d.ts +3 -1
- package/dist/db/connection.js +15 -5
- package/dist/db/cross-tenant-reads.d.ts +1 -1
- package/dist/db/cross-tenant-reads.js +1 -1
- package/dist/db/dialect.d.ts +0 -5
- package/dist/db/dialect.js +0 -3
- package/dist/db/eagerload.d.ts +2 -1
- package/dist/db/entity-field-encryption.d.ts +1 -1
- package/dist/db/entity-table-meta.d.ts +1 -1
- package/dist/db/event-store-executor-context.d.ts +3 -1
- package/dist/db/event-store-executor-context.js +4 -3
- package/dist/db/event-store-executor-read-filter.d.ts +1 -1
- package/dist/db/event-store-executor-read-rows.d.ts +2 -1
- package/dist/db/event-store-executor-read-search.d.ts +2 -1
- package/dist/db/event-store-executor-read-sort.d.ts +2 -1
- package/dist/db/event-store-executor-read.js +2 -2
- package/dist/db/event-store-executor-write-atomic.js +8 -7
- package/dist/db/event-store-executor-write-steps.d.ts +3 -2
- package/dist/db/event-store-executor-write.js +7 -4
- package/dist/db/event-store-executor.d.ts +1 -1
- package/dist/db/executor-managed-tables.d.ts +7 -1
- package/dist/db/executor-managed-tables.js +11 -2
- package/dist/db/index.d.ts +29 -28
- package/dist/db/index.js +22 -20
- package/dist/db/known-table-names.d.ts +6 -0
- package/dist/db/known-table-names.js +21 -0
- package/dist/db/list-aggregate-labels.d.ts +1 -1
- package/dist/db/located-timestamp.d.ts +1 -1
- package/dist/db/located-timestamp.js +0 -5
- package/dist/db/migrate-generator.d.ts +17 -1
- package/dist/db/migrate-generator.js +50 -20
- package/dist/db/migrate-primary-key.d.ts +12 -0
- package/dist/db/migrate-primary-key.js +45 -0
- package/dist/db/migrate-rls-diff.d.ts +20 -0
- package/dist/db/migrate-rls-diff.js +61 -0
- package/dist/db/migrate-runner.js +4 -0
- package/dist/db/money.d.ts +1 -1
- package/dist/db/money.js +1 -1
- package/dist/db/parent-ref-clause.d.ts +2 -1
- package/dist/db/pg-error.d.ts +2 -0
- package/dist/db/pg-error.js +11 -0
- package/dist/db/queries/ddl.d.ts +3 -0
- package/dist/db/queries/ddl.js +34 -1
- package/dist/db/queries/event-store.js +4 -2
- package/dist/db/queries/event-tenants.d.ts +2 -0
- package/dist/db/queries/event-tenants.js +17 -0
- package/dist/db/queries/rebuild-rls-guard.d.ts +2 -0
- package/dist/db/queries/rebuild-rls-guard.js +29 -0
- package/dist/db/queries/rls-boot-catalog.d.ts +16 -0
- package/dist/db/queries/rls-boot-catalog.js +39 -0
- package/dist/db/queries/rls-catalog.d.ts +6 -0
- package/dist/db/queries/rls-catalog.js +82 -0
- package/dist/db/queries/rls-scope.d.ts +3 -0
- package/dist/db/queries/rls-scope.js +17 -0
- package/dist/db/queries/rls-shape.d.ts +10 -0
- package/dist/db/queries/rls-shape.js +42 -0
- package/dist/db/queries/session-advisory-lock.d.ts +2 -0
- package/dist/db/queries/session-advisory-lock.js +23 -0
- package/dist/db/queries/shadow-swap.d.ts +1 -2
- package/dist/db/queries/shadow-swap.js +9 -25
- package/dist/db/queries/test-stack.d.ts +4 -1
- package/dist/db/queries/test-stack.js +83 -2
- package/dist/db/query.js +11 -7
- package/dist/db/reference-data.d.ts +1 -1
- package/dist/db/reference-data.js +6 -1
- package/dist/db/render-ddl.d.ts +6 -2
- package/dist/db/render-ddl.js +7 -7
- package/dist/db/render-rls-ddl.d.ts +35 -0
- package/dist/db/render-rls-ddl.js +127 -0
- package/dist/db/replay-migration-sql.d.ts +3 -1
- package/dist/db/replay-migration-sql.js +22 -5
- package/dist/db/replay-rls.d.ts +25 -0
- package/dist/db/replay-rls.js +156 -0
- package/dist/db/row-level-security-boot-check.d.ts +5 -0
- package/dist/db/row-level-security-boot-check.js +85 -0
- package/dist/db/row-level-security-connection.d.ts +3 -0
- package/dist/db/row-level-security-connection.js +213 -0
- package/dist/db/row-level-security-scope.d.ts +33 -0
- package/dist/db/row-level-security-scope.js +127 -0
- package/dist/db/scope-tenant-db-to-tenant.d.ts +3 -0
- package/dist/db/scope-tenant-db-to-tenant.js +14 -0
- package/dist/db/sql-identifier.d.ts +1 -0
- package/dist/db/sql-identifier.js +3 -0
- package/dist/db/table-builder.d.ts +2 -1
- package/dist/db/table-builder.js +1 -1
- package/dist/db/table-info.js +1 -1
- package/dist/db/table-push.d.ts +11 -2
- package/dist/db/table-push.js +15 -2
- package/dist/db/tenant-db-runner.d.ts +3 -1
- package/dist/db/tenant-db-runner.js +4 -3
- package/dist/db/tenant-db-scoped-rebind.d.ts +10 -0
- package/dist/db/tenant-db-scoped-rebind.js +33 -0
- package/dist/db/tenant-db-statement-runner.d.ts +13 -0
- package/dist/db/tenant-db-statement-runner.js +48 -0
- package/dist/db/tenant-db.d.ts +17 -12
- package/dist/db/tenant-db.js +49 -120
- package/dist/db/tenant-id-filter.d.ts +3 -0
- package/dist/db/tenant-id-filter.js +30 -0
- package/dist/db/transaction-serialization.d.ts +6 -0
- package/dist/db/transaction-serialization.js +60 -0
- package/dist/derivatives/delete-stored-file.js +1 -1
- package/dist/derivatives/index.d.ts +2 -5
- package/dist/derivatives/index.js +2 -3
- package/dist/engine/access.d.ts +2 -1
- package/dist/engine/access.js +1 -1
- package/dist/engine/boot-validator/entity-handler.d.ts +2 -1
- package/dist/engine/boot-validator/entity-handler.js +1 -1
- package/dist/engine/boot-validator/entity-list-aggregate-options.d.ts +1 -1
- package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +1 -1
- package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +2 -1
- package/dist/engine/boot-validator/nav.d.ts +3 -1
- package/dist/engine/boot-validator/nav.js +1 -1
- package/dist/engine/boot-validator/ownership.d.ts +2 -1
- package/dist/engine/boot-validator/parent-ref.d.ts +2 -1
- package/dist/engine/boot-validator/projection-list-screens.d.ts +2 -1
- package/dist/engine/boot-validator/query-refs.d.ts +2 -1
- package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
- package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
- package/dist/engine/boot-validator/screens.d.ts +2 -1
- package/dist/engine/boot-validator/workspaces.d.ts +3 -1
- package/dist/engine/bridge-stub.d.ts +5 -2
- package/dist/engine/bridge-stub.js +39 -24
- package/dist/engine/config-helpers.d.ts +2 -2
- package/dist/engine/config-helpers.js +0 -9
- package/dist/engine/constants.d.ts +0 -10
- package/dist/engine/constants.js +0 -8
- package/dist/engine/create-app.js +1 -1
- package/dist/engine/define-feature.d.ts +2 -1
- package/dist/engine/define-feature.js +1 -2
- package/dist/engine/define-handler.d.ts +1 -1
- package/dist/engine/define-step.d.ts +0 -1
- package/dist/engine/define-step.js +0 -3
- package/dist/engine/embedded-derived.d.ts +1 -1
- package/dist/engine/entity-handlers.d.ts +2 -1
- package/dist/engine/entity-handlers.js +7 -7
- package/dist/engine/entity-list-runtime-options.js +3 -1
- package/dist/engine/entity-list-searchability.d.ts +2 -1
- package/dist/engine/event-def.d.ts +2 -1
- package/dist/engine/event-helpers.d.ts +3 -1
- package/dist/engine/event-helpers.js +3 -3
- package/dist/engine/extension-names.d.ts +2 -8
- package/dist/engine/extension-names.js +2 -2
- package/dist/engine/extension-selector-plugins.d.ts +1 -1
- package/dist/engine/extensions/storage-provider.d.ts +1 -2
- package/dist/engine/extensions/user-data.d.ts +0 -8
- package/dist/engine/factories.d.ts +2 -1
- package/dist/engine/feature-builder-state.d.ts +8 -1
- package/dist/engine/feature-changelog.d.ts +1 -1
- package/dist/engine/feature-config-events-jobs.d.ts +4 -1
- package/dist/engine/feature-entity-handlers.d.ts +5 -1
- package/dist/engine/feature-manifest.js +1 -1
- package/dist/engine/feature-ui-extensions.d.ts +7 -1
- package/dist/engine/feature-ui-extensions.js +6 -4
- package/dist/engine/field-access.d.ts +2 -1
- package/dist/engine/handler-field-references.d.ts +0 -4
- package/dist/engine/index.d.ts +57 -54
- package/dist/engine/index.js +22 -27
- package/dist/engine/instruction-fields.d.ts +1 -1
- package/dist/engine/personal-data-fields.d.ts +1 -1
- package/dist/engine/qualified-name.d.ts +0 -1
- package/dist/engine/read-claim.d.ts +2 -1
- package/dist/engine/registry-facade.js +0 -3
- package/dist/engine/registry-ingest.d.ts +2 -1
- package/dist/engine/registry-ingest.js +1 -2
- package/dist/engine/registry-state.d.ts +12 -2
- package/dist/engine/registry-state.js +2 -3
- package/dist/engine/registry-validate.d.ts +3 -1
- package/dist/engine/registry-validate.js +7 -7
- package/dist/engine/run-in.d.ts +1 -1
- package/dist/engine/run-in.js +0 -1
- package/dist/engine/schema-builder.d.ts +1 -1
- package/dist/engine/schema-builder.js +1 -1
- package/dist/engine/screen-filter-ops.d.ts +2 -1
- package/dist/engine/screen-filter-ops.js +0 -5
- package/dist/engine/soft-delete-cleanup.d.ts +1 -1
- package/dist/engine/soft-delete-cleanup.js +4 -4
- package/dist/engine/state-machine.js +2 -1
- package/dist/engine/steps/_read-source.js +1 -1
- package/dist/engine/steps/aggregate-append-event.js +2 -2
- package/dist/engine/steps/call-feature.js +2 -2
- package/dist/engine/steps/mail-send.js +1 -1
- package/dist/engine/steps/retry.js +1 -1
- package/dist/engine/steps/wait-for-event.js +1 -1
- package/dist/engine/steps/wait.js +1 -1
- package/dist/engine/steps/webhook-send.js +1 -1
- package/dist/engine/template-variables.d.ts +2 -1
- package/dist/engine/transfer-adjacency.d.ts +1 -1
- package/dist/engine/types/index.d.ts +8 -31
- package/dist/engine/types/index.js +2 -10
- package/dist/engine/validation.d.ts +2 -1
- package/dist/entrypoint/index.d.ts +7 -35
- package/dist/entrypoint/index.js +7 -1
- package/dist/entrypoint/internals.d.ts +40 -0
- package/dist/entrypoint/internals.js +1 -0
- package/dist/entrypoint/row-level-security-mode-check.d.ts +3 -0
- package/dist/entrypoint/row-level-security-mode-check.js +19 -0
- package/dist/env/dry-run-internals.d.ts +10 -0
- package/dist/env/dry-run-internals.js +1 -0
- package/dist/env/dry-run.d.ts +1 -10
- package/dist/env/dry-run.js +2 -1
- package/dist/env/index.d.ts +1 -85
- package/dist/env/index.js +6 -50
- package/dist/env/internals.d.ts +87 -0
- package/dist/env/internals.js +53 -0
- package/dist/errors/classes.js +2 -2
- package/dist/errors/index.d.ts +5 -14
- package/dist/errors/index.js +4 -9
- package/dist/errors/member-resolution.js +1 -1
- package/dist/errors/reasons.d.ts +0 -1
- package/dist/errors/reasons.js +7 -7
- package/dist/errors/serialize.d.ts +0 -18
- package/dist/errors/serialize.js +0 -27
- package/dist/es-ops/index.d.ts +4 -4
- package/dist/es-ops/index.js +2 -2
- package/dist/es-ops/operations-schema.d.ts +1 -1
- package/dist/es-ops/types.d.ts +4 -5
- package/dist/event-store/admin-api-internals.d.ts +14 -0
- package/dist/event-store/admin-api-internals.js +1 -0
- package/dist/event-store/admin-api.d.ts +1 -14
- package/dist/event-store/admin-api.js +11 -6
- package/dist/event-store/archive.js +4 -2
- package/dist/event-store/errors.js +2 -2
- package/dist/event-store/event-store.js +41 -34
- package/dist/event-store/events-schema.js +4 -1
- package/dist/event-store/index.d.ts +11 -13
- package/dist/event-store/index.js +7 -9
- package/dist/event-store/rebuild-dead-letter.js +4 -2
- package/dist/event-store/snapshot.js +4 -3
- package/dist/event-store/stream-scope.d.ts +2 -0
- package/dist/event-store/stream-scope.js +6 -0
- package/dist/event-store/upcaster-dead-letter.js +4 -2
- package/dist/event-store/upcaster.d.ts +2 -1
- package/dist/files/action-form-upload.d.ts +2 -1
- package/dist/files/action-form-upload.js +1 -1
- package/dist/files/assert-file-refs-belong-to-tenant.d.ts +2 -1
- package/dist/files/assert-file-refs-belong-to-tenant.js +1 -1
- package/dist/files/bind-pending-file-refs.d.ts +2 -1
- package/dist/files/bind-pending-file-refs.js +2 -1
- package/dist/files/bind-referenced-files.write.js +1 -1
- package/dist/files/create-file-ref-from-bytes.d.ts +6 -3
- package/dist/files/create-file-ref-from-bytes.js +3 -3
- package/dist/files/create-file-ref.d.ts +3 -2
- package/dist/files/create-file-ref.js +2 -2
- package/dist/files/dispose-removed-file-refs.d.ts +2 -1
- package/dist/files/dispose-removed-file-refs.js +1 -1
- package/dist/files/feature.js +2 -2
- package/dist/files/file-handle.js +1 -1
- package/dist/files/file-routes.d.ts +1 -1
- package/dist/files/file-routes.js +12 -2
- package/dist/files/index.d.ts +11 -13
- package/dist/files/index.js +5 -7
- package/dist/files/load-save-file-refs.d.ts +2 -1
- package/dist/files/load-save-file-refs.js +1 -1
- package/dist/files/provider-resolver.d.ts +5 -4
- package/dist/files/provider-resolver.js +4 -4
- package/dist/files/storage-tracking.js +4 -2
- package/dist/files/sweep-orphaned-uploads.d.ts +1 -1
- package/dist/files/sweep-orphaned-uploads.js +1 -1
- package/dist/i18n/index.d.ts +2 -8
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/internals.d.ts +7 -0
- package/dist/i18n/internals.js +1 -0
- package/dist/i18n/required-surface-keys.d.ts +4 -1
- package/dist/internal/row-level-security.d.ts +3 -0
- package/dist/internal/row-level-security.js +3 -0
- package/dist/internal/stack-support.d.ts +1 -1
- package/dist/internal/stack-support.js +1 -1
- package/dist/internal/testing.d.ts +1 -0
- package/dist/internal/testing.js +9 -5
- package/dist/jobs/index.d.ts +1 -1
- package/dist/jobs/job-append-event.d.ts +12 -0
- package/dist/jobs/job-append-event.js +30 -0
- package/dist/jobs/job-runner-context.d.ts +2 -2
- package/dist/jobs/job-runner-context.js +46 -16
- package/dist/jobs/job-runner-execution.d.ts +1 -1
- package/dist/jobs/job-runner-execution.js +6 -4
- package/dist/jobs/job-runner-gates.d.ts +1 -1
- package/dist/jobs/job-runner-gates.js +0 -1
- package/dist/jobs/job-runner-helpers.d.ts +11 -4
- package/dist/jobs/job-runner-helpers.js +10 -1
- package/dist/jobs/job-runner-scope.d.ts +5 -2
- package/dist/jobs/job-runner-types.d.ts +2 -1
- package/dist/jobs/job-runner.js +19 -6
- package/dist/jobs/max-per-tenant.d.ts +1 -1
- package/dist/logging/index.d.ts +1 -2
- package/dist/logging/index.js +1 -1
- package/dist/logging/pino-logger.js +1 -1
- package/dist/logging/utils.d.ts +1 -0
- package/dist/logging/utils.js +6 -0
- package/dist/migrations/index.d.ts +3 -3
- package/dist/migrations/index.js +3 -3
- package/dist/migrations/pending-rebuilds.d.ts +1 -1
- package/dist/migrations/pending-rebuilds.js +1 -1
- package/dist/migrations/pii-event-backfill.js +4 -1
- package/dist/observability/escape-hatch-report.d.ts +2 -1
- package/dist/observability/index.d.ts +7 -15
- package/dist/observability/index.js +4 -12
- package/dist/observability/metric-validator.js +1 -1
- package/dist/observability/metrics-handle.d.ts +0 -1
- package/dist/observability/metrics-handle.js +2 -15
- package/dist/observability/recording-tracer.d.ts +1 -2
- package/dist/observability/recording-tracer.js +0 -6
- package/dist/observability/sensitive-filter.d.ts +0 -2
- package/dist/observability/sensitive-filter.js +0 -29
- package/dist/pipeline/active-membership.d.ts +2 -1
- package/dist/pipeline/active-membership.js +6 -2
- package/dist/pipeline/append-event-core.d.ts +2 -1
- package/dist/pipeline/append-event-core.js +2 -2
- package/dist/pipeline/attach-outside-transaction.d.ts +3 -0
- package/dist/pipeline/attach-outside-transaction.js +13 -0
- package/dist/pipeline/auth-claims-resolver.d.ts +2 -1
- package/dist/pipeline/cascade-handler.d.ts +2 -1
- package/dist/pipeline/cascade-handler.js +3 -2
- package/dist/pipeline/config-accessor-factory.d.ts +1 -1
- package/dist/pipeline/config-accessor-factory.js +1 -1
- package/dist/pipeline/context-services.d.ts +56 -0
- package/dist/pipeline/context-services.js +73 -0
- package/dist/pipeline/dispatch-batch.d.ts +2 -1
- package/dist/pipeline/dispatch-batch.js +31 -18
- package/dist/pipeline/dispatch-query.js +5 -4
- package/dist/pipeline/dispatch-scope.d.ts +6 -0
- package/dist/pipeline/dispatch-scope.js +27 -0
- package/dist/pipeline/dispatch-shared.d.ts +13 -9
- package/dist/pipeline/dispatch-shared.js +75 -198
- package/dist/pipeline/dispatch-stream.js +8 -4
- package/dist/pipeline/dispatch-write.d.ts +2 -1
- package/dist/pipeline/dispatch-write.js +10 -8
- package/dist/pipeline/dispatcher-utils.d.ts +3 -1
- package/dist/pipeline/dispatcher-utils.js +8 -2
- package/dist/pipeline/dispatcher.d.ts +3 -2
- package/dist/pipeline/dispatcher.js +4 -3
- package/dist/pipeline/event-consumer-state.d.ts +0 -1
- package/dist/pipeline/event-dispatcher-delivery.d.ts +1 -1
- package/dist/pipeline/event-dispatcher-delivery.js +4 -2
- package/dist/pipeline/event-dispatcher.d.ts +2 -2
- package/dist/pipeline/event-dispatcher.js +7 -3
- package/dist/pipeline/event-retention.js +59 -56
- package/dist/pipeline/handler-access-error.js +2 -1
- package/dist/pipeline/handler-context-auth.d.ts +5 -6
- package/dist/pipeline/handler-context-auth.js +7 -4
- package/dist/pipeline/handler-context-config.d.ts +2 -5
- package/dist/pipeline/handler-context-config.js +2 -2
- package/dist/pipeline/handler-context-db.d.ts +32 -7
- package/dist/pipeline/handler-context-db.js +26 -17
- package/dist/pipeline/handler-context-dispatch.d.ts +13 -7
- package/dist/pipeline/handler-context-dispatch.js +9 -8
- package/dist/pipeline/handler-context-events.d.ts +22 -36
- package/dist/pipeline/handler-context-events.js +36 -31
- package/dist/pipeline/handler-context-member-resolution.d.ts +2 -0
- package/dist/pipeline/handler-context-member-resolution.js +110 -0
- package/dist/pipeline/handler-context-notify.d.ts +3 -2
- package/dist/pipeline/handler-context-notify.js +1 -1
- package/dist/pipeline/handler-context-observability.d.ts +2 -4
- package/dist/pipeline/handler-context-observability.js +7 -5
- package/dist/pipeline/handler-context-phase-denials.d.ts +11 -0
- package/dist/pipeline/handler-context-phase-denials.js +98 -0
- package/dist/pipeline/handler-context-scope.d.ts +7 -10
- package/dist/pipeline/handler-context-scope.js +18 -20
- package/dist/pipeline/index.d.ts +9 -21
- package/dist/pipeline/index.js +5 -7
- package/dist/pipeline/irreversible-operation-gate.d.ts +1 -1
- package/dist/pipeline/irreversible-operation-gate.js +2 -2
- package/dist/pipeline/lifecycle-pipeline.d.ts +8 -7
- package/dist/pipeline/lifecycle-pipeline.js +9 -15
- package/dist/pipeline/member-read-only-transaction.js +11 -3
- package/dist/pipeline/member-reader.d.ts +1 -1
- package/dist/pipeline/member-reader.js +2 -2
- package/dist/pipeline/msp-rebuild.js +5 -3
- package/dist/pipeline/multi-stream-apply-context.js +3 -2
- package/dist/pipeline/notify-scope.d.ts +2 -1
- package/dist/pipeline/pre-handler-gates.d.ts +2 -1
- package/dist/pipeline/pre-transaction-reservations.d.ts +3 -3
- package/dist/pipeline/pre-transaction-reservations.js +9 -7
- package/dist/pipeline/projection-rebuild.js +12 -5
- package/dist/pipeline/projection-state.d.ts +0 -6
- package/dist/pipeline/projection-state.js +0 -5
- package/dist/pipeline/projections-runner.d.ts +2 -1
- package/dist/pipeline/projections-runner.js +10 -6
- package/dist/pipeline/system-hooks.d.ts +3 -1
- package/dist/pipeline/system-hooks.js +6 -4
- package/dist/pipeline/system-identity-switch.d.ts +4 -2
- package/dist/pipeline/system-identity-switch.js +51 -36
- package/dist/pipeline/typed-append-event.d.ts +2 -0
- package/dist/pipeline/typed-append-event.js +4 -0
- package/dist/pipeline/write-origin.js +2 -2
- package/dist/pipeline/write-result-masking.d.ts +1 -1
- package/dist/random/index.d.ts +1 -2
- package/dist/random/index.js +1 -2
- package/dist/rate-limit/bucket.d.ts +2 -1
- package/dist/rate-limit/middleware.js +2 -1
- package/dist/redis/index.d.ts +3 -4
- package/dist/redis/index.js +2 -2
- package/dist/schema-cli/apply-command.js +5 -2
- package/dist/schema-cli/baseline-command.js +7 -2
- package/dist/schema-cli/generate-command.js +7 -9
- package/dist/schema-cli/shared.d.ts +4 -0
- package/dist/schema-cli/shared.js +21 -2
- package/dist/schema-cli/status-command.js +8 -2
- package/dist/schema-cli/validate-command.js +52 -4
- package/dist/schema-cli.d.ts +0 -1
- package/dist/search/configure-tenant-index.d.ts +1 -3
- package/dist/search/configure-tenant-index.js +0 -4
- package/dist/search/index.d.ts +1 -4
- package/dist/search/index.js +0 -2
- package/dist/search/meilisearch-adapter-internals.d.ts +8 -0
- package/dist/search/meilisearch-adapter-internals.js +9 -0
- package/dist/search/meilisearch-adapter.d.ts +1 -8
- package/dist/search/meilisearch-adapter.js +6 -7
- package/dist/search/meilisearch-peer.d.ts +2 -0
- package/dist/search/meilisearch-peer.js +5 -0
- package/dist/search/reindex-entity.js +93 -87
- package/dist/secrets/index.d.ts +3 -4
- package/dist/secrets/index.js +2 -3
- package/dist/seeding/index.d.ts +2 -2
- package/dist/seeding/index.js +1 -2
- package/dist/time/index.d.ts +2 -2
- package/dist/time/index.js +1 -1
- package/dist/time/tz-context.d.ts +0 -5
- package/dist/time/tz-context.js +0 -9
- package/dist/ui-types/index.d.ts +8 -11
- package/dist/ui-types/index.js +3 -3
- package/dist/upgrade-changelog.d.ts +3 -2
- package/dist/upgrade-changelog.js +12 -8
- package/dist/upgrade-cli-internals.d.ts +8 -0
- package/dist/upgrade-cli-internals.js +63 -0
- package/dist/upgrade-cli.d.ts +1 -9
- package/dist/upgrade-cli.js +10 -64
- package/dist/utils/import-optional-peer.d.ts +6 -0
- package/dist/utils/import-optional-peer.js +19 -0
- package/dist/utils/index.d.ts +1 -4
- package/dist/utils/index.js +1 -4
- package/package.json +22 -18
- package/src/changes.json +206 -0
- package/dist/crypto/request-kms-cache.d.ts +0 -8
- package/dist/crypto/request-kms-cache.js +0 -21
- package/dist/engine/codemod/index.d.ts +0 -2
- package/dist/engine/codemod/index.js +0 -1
- package/dist/engine/codemod/pipeline-codemod.d.ts +0 -50
- package/dist/engine/codemod/pipeline-codemod.js +0 -536
- package/dist/engine/feature-ast/entity-field-types.d.ts +0 -13
- package/dist/engine/feature-ast/entity-field-types.js +0 -35
- package/dist/engine/feature-ast/extractors/ai-steps.d.ts +0 -6
- package/dist/engine/feature-ast/extractors/ai-steps.js +0 -254
- package/dist/engine/feature-ast/extractors/events.d.ts +0 -5
- package/dist/engine/feature-ast/extractors/events.js +0 -275
- package/dist/engine/feature-ast/extractors/handlers.d.ts +0 -24
- package/dist/engine/feature-ast/extractors/handlers.js +0 -358
- package/dist/engine/feature-ast/extractors/hooks.d.ts +0 -24
- package/dist/engine/feature-ast/extractors/hooks.js +0 -248
- package/dist/engine/feature-ast/extractors/index.d.ts +0 -14
- package/dist/engine/feature-ast/extractors/index.js +0 -13
- package/dist/engine/feature-ast/extractors/jobs-routes.d.ts +0 -7
- package/dist/engine/feature-ast/extractors/jobs-routes.js +0 -145
- package/dist/engine/feature-ast/extractors/projections-screens.d.ts +0 -10
- package/dist/engine/feature-ast/extractors/projections-screens.js +0 -195
- package/dist/engine/feature-ast/extractors/resolve-import.d.ts +0 -21
- package/dist/engine/feature-ast/extractors/resolve-import.js +0 -180
- package/dist/engine/feature-ast/extractors/round1.d.ts +0 -11
- package/dist/engine/feature-ast/extractors/round1.js +0 -87
- package/dist/engine/feature-ast/extractors/round2.d.ts +0 -7
- package/dist/engine/feature-ast/extractors/round2.js +0 -191
- package/dist/engine/feature-ast/extractors/round3.d.ts +0 -23
- package/dist/engine/feature-ast/extractors/round3.js +0 -292
- package/dist/engine/feature-ast/extractors/round5.d.ts +0 -9
- package/dist/engine/feature-ast/extractors/round5.js +0 -68
- package/dist/engine/feature-ast/extractors/round6.d.ts +0 -4
- package/dist/engine/feature-ast/extractors/round6.js +0 -17
- package/dist/engine/feature-ast/extractors/shared.d.ts +0 -94
- package/dist/engine/feature-ast/extractors/shared.js +0 -343
- package/dist/engine/feature-ast/index.d.ts +0 -16
- package/dist/engine/feature-ast/index.js +0 -10
- package/dist/engine/feature-ast/parse.d.ts +0 -31
- package/dist/engine/feature-ast/parse.js +0 -485
- package/dist/engine/feature-ast/patch.d.ts +0 -212
- package/dist/engine/feature-ast/patch.js +0 -611
- package/dist/engine/feature-ast/patcher.d.ts +0 -217
- package/dist/engine/feature-ast/patcher.js +0 -281
- package/dist/engine/feature-ast/pattern-change-schema.d.ts +0 -1238
- package/dist/engine/feature-ast/pattern-change-schema.js +0 -1072
- package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
- package/dist/engine/feature-ast/pattern-id-matchers.js +0 -211
- package/dist/engine/feature-ast/pattern-id-schema.d.ts +0 -251
- package/dist/engine/feature-ast/pattern-id-schema.js +0 -166
- package/dist/engine/feature-ast/patterns.d.ts +0 -322
- package/dist/engine/feature-ast/patterns.js +0 -107
- package/dist/engine/feature-ast/render.d.ts +0 -47
- package/dist/engine/feature-ast/render.js +0 -666
- package/dist/engine/feature-ast/source-location.d.ts +0 -17
- package/dist/engine/feature-ast/source-location.js +0 -27
- package/dist/engine/pattern-library/index.d.ts +0 -2
- package/dist/engine/pattern-library/index.js +0 -3
- package/dist/engine/pattern-library/library.d.ts +0 -14
- package/dist/engine/pattern-library/library.js +0 -94
- package/dist/engine/pattern-library/mixed-schemas.d.ts +0 -16
- package/dist/engine/pattern-library/mixed-schemas.js +0 -559
- package/dist/engine/pattern-library/opaque-schemas.d.ts +0 -7
- package/dist/engine/pattern-library/opaque-schemas.js +0 -115
- package/dist/engine/pattern-library/shared-fields.d.ts +0 -122
- package/dist/engine/pattern-library/shared-fields.js +0 -88
- package/dist/engine/pattern-library/static-schemas.d.ts +0 -21
- package/dist/engine/pattern-library/static-schemas.js +0 -487
- package/dist/engine/pattern-library/types.d.ts +0 -158
- package/dist/engine/pattern-library/types.js +0 -36
- package/dist/engine/resolve-config-or-param.d.ts +0 -18
- package/dist/engine/resolve-config-or-param.js +0 -76
- package/src/scripts/codemod/README.md +0 -187
- package/src/scripts/codemod/codemod-support.ts +0 -334
- package/src/scripts/codemod/collect-source-files.ts +0 -48
- package/src/scripts/codemod/crypto-shredding-testing-move.ts +0 -119
- package/src/scripts/codemod/db-factory.ts +0 -810
- package/src/scripts/codemod/feature-factory.ts +0 -429
- package/src/scripts/codemod/feature-layout.ts +0 -424
- package/src/scripts/codemod/import-extensions.ts +0 -118
- package/src/scripts/codemod/migrate-cross-tenant.ts +0 -328
- package/src/scripts/codemod/migrate-db-raw.ts +0 -401
- package/src/scripts/codemod/migrate-open-to-all.ts +0 -235
- package/src/scripts/codemod/object-form.ts +0 -746
- package/src/scripts/codemod/package-merge.ts +0 -299
- package/src/scripts/codemod/pii-personal-migration.ts +0 -816
- package/src/scripts/codemod/remove-engine-payload-casts.ts +0 -318
- package/src/scripts/codemod/s3-imports.ts +0 -236
- package/src/scripts/codemod/tenant-db-options.ts +0 -454
- package/src/scripts/codemod/testing-injection.ts +0 -215
- package/src/scripts/codemod/testing-move-targets.ts +0 -161
- package/src/scripts/codemod/testing-move.ts +0 -542
- package/src/scripts/codemod/unprocessable-error-details-reason.ts +0 -411
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import * as z from "zod";
|
|
3
|
-
import { toKumikoError } from "../../errors/
|
|
4
|
-
import { createI18n
|
|
3
|
+
import { toKumikoError } from "../../errors/to-kumiko-error.js";
|
|
4
|
+
import { createI18n } from "../../i18n/index.js";
|
|
5
|
+
import { DEFAULT_LOCALE } from "../../i18n/request-locale.js";
|
|
5
6
|
import { isValidIanaTimeZone } from "../../time/index.js";
|
|
6
7
|
import { Routes } from "../api-constants.js";
|
|
7
8
|
import { getUser } from "../auth-middleware.js";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ScreenFilter } from "@cosmicdrift/kumiko-types/screen";
|
|
2
|
+
import type { Registry, SessionUser } from "../../engine/types/index.ts";
|
|
2
3
|
import { type ExportColumn } from "./export-columns.ts";
|
|
3
4
|
export type ExportPlan = {
|
|
4
5
|
readonly screenShortId: string;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { WriteResult } from "@cosmicdrift/kumiko-types/handlers";
|
|
2
|
+
import type { HttpRouteMethod } from "@cosmicdrift/kumiko-types/http-route";
|
|
1
3
|
import type { Context, Hono } from "hono";
|
|
2
|
-
import type {
|
|
4
|
+
import type { Registry, SessionUser, TenantId } from "../engine/types/index.ts";
|
|
3
5
|
import type { SecretsContext } from "../secrets/index.ts";
|
|
4
6
|
export declare const ExtraRouteEntries: {
|
|
5
7
|
readonly anonymous: "anonymous";
|
package/dist/api/index.d.ts
CHANGED
|
@@ -1,40 +1,36 @@
|
|
|
1
1
|
export { DEFAULT_GLOBAL_RATE_LIMIT } from "../rate-limit/middleware.ts";
|
|
2
|
-
export
|
|
3
|
-
export { deleteTenantCookie, setTenantCookie } from "./anonymous-cookie.ts";
|
|
2
|
+
export { setTenantCookie } from "./anonymous-cookie.ts";
|
|
4
3
|
export { collectAnonymousLiveEntities } from "./anonymous-live-entities.ts";
|
|
5
4
|
export { LOCALE_HEADER_NAME, NO_ROUTE_MATCH_HEADER_NAME } from "./api-constants.ts";
|
|
6
|
-
export type { AnonymousAccessConfig, AnonymousAccessResolved,
|
|
7
|
-
export {
|
|
5
|
+
export type { AnonymousAccessConfig, AnonymousAccessResolved, AuthSessionCheckResult, TokenVerifier, } from "./auth-middleware.ts";
|
|
6
|
+
export { CSRF_HEADER_NAME, PAT_TOKEN_PREFIX, } from "./auth-middleware.ts";
|
|
8
7
|
export type { AuthRoutesConfig, LoginRateLimiter, SessionChecker, SessionCreator, SessionMassRevoker, SessionMetadata, SessionRevoker, } from "./auth-routes.ts";
|
|
9
|
-
export {
|
|
10
|
-
export type {
|
|
11
|
-
export {
|
|
12
|
-
export type { AnonymousExtraRoute, AnonymousExtraRouteDeps, ExtraRouteDefinition,
|
|
13
|
-
export {
|
|
14
|
-
export type {
|
|
15
|
-
export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches,
|
|
16
|
-
export type { JwtHelper
|
|
17
|
-
export {
|
|
8
|
+
export { createInMemoryLoginRateLimiter, createRedisLoginRateLimiter, } from "./auth-routes.ts";
|
|
9
|
+
export type { ClientIpResolver } from "./client-ip.ts";
|
|
10
|
+
export { createClientIpResolver, parseTrustedProxyHopsEnv, TRUSTED_PROXY_HOPS_ENV, UNKNOWN_CLIENT_IP, } from "./client-ip.ts";
|
|
11
|
+
export type { AnonymousExtraRoute, AnonymousExtraRouteDeps, ExtraRouteDefinition, RoleDispatchArgs, SignatureExtraRouteDeps, SignatureExtraRouteVerifyRequest, SystemDispatchArgs, UserExtraRouteDeps, } from "./extra-route.ts";
|
|
12
|
+
export { ExtraRouteRejection, signatureRoute } from "./extra-route.ts";
|
|
13
|
+
export type { CachePolicy } from "./http-cache.ts";
|
|
14
|
+
export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches, } from "./http-cache.ts";
|
|
15
|
+
export type { JwtHelper } from "./jwt.ts";
|
|
16
|
+
export { loadJwtSecretOrKeyring } from "./jwt.ts";
|
|
18
17
|
export { publicOriginOf } from "./origin-middleware.ts";
|
|
19
|
-
export {
|
|
20
|
-
export type {
|
|
21
|
-
export { isSafeLandingPath } from "./post-auth-landing.ts";
|
|
22
|
-
export type { RedisSseBroker, RedisSseBrokerOptions } from "./redis-sse-broker.ts";
|
|
18
|
+
export type { PostAuthLandingArgs, PostAuthLandingResolver, } from "./post-auth-landing.ts";
|
|
19
|
+
export type { RedisSseBroker } from "./redis-sse-broker.ts";
|
|
23
20
|
export { createDefaultSseBroker, createRedisSseBroker, isRedisSseBroker, } from "./redis-sse-broker.ts";
|
|
24
|
-
export {
|
|
25
|
-
export { buildRequestContextDataFromRequest
|
|
21
|
+
export { readonlyRequestContext as requestContext } from "./request-context-scopes.ts";
|
|
22
|
+
export { buildRequestContextDataFromRequest } from "./request-id-middleware.ts";
|
|
26
23
|
export type { MetricsRouteOptions } from "./route-registrars.ts";
|
|
27
24
|
export { createMetricsApp, DEFAULT_MAX_REQUEST_BYTES, isPrometheusMeter, } from "./route-registrars.ts";
|
|
28
|
-
export {
|
|
29
|
-
export type { KumikoServer, ServerOptions } from "./server.ts";
|
|
25
|
+
export type { ServerOptions } from "./server.ts";
|
|
30
26
|
export { buildServer } from "./server.ts";
|
|
27
|
+
export { resolveBaseDbAndSearchAdapter } from "./server-event-dispatcher.ts";
|
|
31
28
|
export { makeDispatchSystemQuery, makeDispatchSystemWrite, makeDispatchWriteAs, } from "./server-extra-routes.ts";
|
|
32
29
|
export { withFileProviderResolver } from "./server-wiring.ts";
|
|
33
|
-
export
|
|
34
|
-
export {
|
|
35
|
-
export type { SseBroker, SseClient, SseEvent } from "./sse-broker.ts";
|
|
30
|
+
export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies, sessionCookieName, } from "./session-cookies.ts";
|
|
31
|
+
export type { SseBroker, SseEvent } from "./sse-broker.ts";
|
|
36
32
|
export { createSseBroker } from "./sse-broker.ts";
|
|
37
|
-
export {
|
|
33
|
+
export { SSE_HEARTBEAT_INTERVAL_MS } from "./sse-route.ts";
|
|
38
34
|
export { generateToken } from "./tokens.ts";
|
|
39
|
-
export type { KumikoServeEnv,
|
|
40
|
-
export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest,
|
|
35
|
+
export type { KumikoServeEnv, KumikoWebSocketData, } from "./websocket-route.ts";
|
|
36
|
+
export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest, WEBSOCKET_BACKPRESSURE_LIMIT_BYTES, WEBSOCKET_HEARTBEAT_INTERVAL_MS, WEBSOCKET_MAX_PAYLOAD_BYTES, WEBSOCKET_PENDING_BUFFER_LIMIT_BYTES, WEBSOCKET_ROUTE_PATH_PREFIX, } from "./websocket-route.ts";
|
package/dist/api/index.js
CHANGED
|
@@ -1,26 +1,24 @@
|
|
|
1
1
|
export { DEFAULT_GLOBAL_RATE_LIMIT } from "../rate-limit/middleware.js";
|
|
2
|
-
export {
|
|
2
|
+
export { setTenantCookie } from "./anonymous-cookie.js";
|
|
3
3
|
export { collectAnonymousLiveEntities } from "./anonymous-live-entities.js";
|
|
4
4
|
export { LOCALE_HEADER_NAME, NO_ROUTE_MATCH_HEADER_NAME } from "./api-constants.js";
|
|
5
|
-
export {
|
|
6
|
-
export {
|
|
7
|
-
export {
|
|
8
|
-
export {
|
|
9
|
-
export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches,
|
|
10
|
-
export {
|
|
5
|
+
export { CSRF_HEADER_NAME, PAT_TOKEN_PREFIX, } from "./auth-middleware.js";
|
|
6
|
+
export { createInMemoryLoginRateLimiter, createRedisLoginRateLimiter, } from "./auth-routes.js";
|
|
7
|
+
export { createClientIpResolver, parseTrustedProxyHopsEnv, TRUSTED_PROXY_HOPS_ENV, UNKNOWN_CLIENT_IP, } from "./client-ip.js";
|
|
8
|
+
export { ExtraRouteRejection, signatureRoute } from "./extra-route.js";
|
|
9
|
+
export { cacheControlHeader, cachedResponse, computeRevisionEtag, computeStrongEtag, computeWeakEtag, etagMatches, } from "./http-cache.js";
|
|
10
|
+
export { loadJwtSecretOrKeyring } from "./jwt.js";
|
|
11
11
|
export { publicOriginOf } from "./origin-middleware.js";
|
|
12
|
-
export { patAllows, qnMatches } from "./pat-scope.js";
|
|
13
|
-
export { isSafeLandingPath } from "./post-auth-landing.js";
|
|
14
12
|
export { createDefaultSseBroker, createRedisSseBroker, isRedisSseBroker, } from "./redis-sse-broker.js";
|
|
15
|
-
export { readonlyRequestContext as requestContext
|
|
16
|
-
export { buildRequestContextDataFromRequest
|
|
13
|
+
export { readonlyRequestContext as requestContext } from "./request-context-scopes.js";
|
|
14
|
+
export { buildRequestContextDataFromRequest } from "./request-id-middleware.js";
|
|
17
15
|
export { createMetricsApp, DEFAULT_MAX_REQUEST_BYTES, isPrometheusMeter, } from "./route-registrars.js";
|
|
18
|
-
export { createApiRoutes } from "./routes.js";
|
|
19
16
|
export { buildServer } from "./server.js";
|
|
17
|
+
export { resolveBaseDbAndSearchAdapter } from "./server-event-dispatcher.js";
|
|
20
18
|
export { makeDispatchSystemQuery, makeDispatchSystemWrite, makeDispatchWriteAs, } from "./server-extra-routes.js";
|
|
21
19
|
export { withFileProviderResolver } from "./server-wiring.js";
|
|
22
|
-
export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies,
|
|
20
|
+
export { AUTH_COOKIE_BASE, CSRF_COOKIE_BASE, getSessionCookies, sessionCookieName, } from "./session-cookies.js";
|
|
23
21
|
export { createSseBroker } from "./sse-broker.js";
|
|
24
|
-
export {
|
|
22
|
+
export { SSE_HEARTBEAT_INTERVAL_MS } from "./sse-route.js";
|
|
25
23
|
export { generateToken } from "./tokens.js";
|
|
26
|
-
export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest,
|
|
24
|
+
export { createKumikoWebSocketHandler, isWebSocketUpgradeRequest, WEBSOCKET_BACKPRESSURE_LIMIT_BYTES, WEBSOCKET_HEARTBEAT_INTERVAL_MS, WEBSOCKET_MAX_PAYLOAD_BYTES, WEBSOCKET_PENDING_BUFFER_LIMIT_BYTES, WEBSOCKET_ROUTE_PATH_PREFIX, } from "./websocket-route.js";
|
package/dist/api/jwt.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
+
import { parseTenantId } from "@cosmicdrift/kumiko-types/identifiers";
|
|
1
2
|
import * as jose from "jose";
|
|
2
3
|
import { stripReservedTokenRoles } from "../engine/membership-roles.js";
|
|
3
|
-
import { parseTenantId } from "../engine/types/index.js";
|
|
4
4
|
import { InternalError } from "../errors/index.js";
|
|
5
5
|
function normalizeKeyring(secretOrKeyring) {
|
|
6
6
|
if (typeof secretOrKeyring === "string") {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { Meter, Tracer } from "@cosmicdrift/kumiko-types/observability";
|
|
1
2
|
import type { Context, Next } from "hono";
|
|
2
|
-
import { type Meter, type Tracer } from "../observability/index.ts";
|
|
3
3
|
export type ObservabilityMiddlewareOptions = {
|
|
4
4
|
readonly tracer: Tracer;
|
|
5
5
|
readonly meter: Meter;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { observabilityContext } from "../observability/context.js";
|
|
2
|
+
import { emitHttpRequest } from "../observability/standard-metrics.js";
|
|
2
3
|
import { getUser } from "./auth-middleware.js";
|
|
3
4
|
import { requestContext } from "./request-context.js";
|
|
4
5
|
import { resolveRouteLabel } from "./route-label.js";
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
import type { WriteOrigin } from "@cosmicdrift/kumiko-types/event-store-types";
|
|
3
|
+
import type { AgentRisk } from "@cosmicdrift/kumiko-types/handlers";
|
|
4
|
+
import type { ErrorDocsConfig } from "../errors/docs-url.ts";
|
|
5
|
+
export type RequestContextData = {
|
|
6
|
+
readonly requestId: string;
|
|
7
|
+
readonly correlationId: string;
|
|
8
|
+
readonly causationId?: string;
|
|
9
|
+
readonly signal?: AbortSignal;
|
|
10
|
+
readonly errorDocs?: ErrorDocsConfig;
|
|
11
|
+
readonly ip?: string;
|
|
12
|
+
readonly userAgent?: string;
|
|
13
|
+
readonly locale?: string;
|
|
14
|
+
readonly feature?: string;
|
|
15
|
+
readonly handler?: string;
|
|
16
|
+
tenantId?: string;
|
|
17
|
+
userId?: string;
|
|
18
|
+
readonly startedAt?: number;
|
|
19
|
+
readonly writeOrigin?: WriteOrigin;
|
|
20
|
+
readonly entryHandler?: {
|
|
21
|
+
readonly qn: string;
|
|
22
|
+
readonly risk: AgentRisk;
|
|
23
|
+
};
|
|
24
|
+
readonly chargedRateLimitBuckets?: Set<string>;
|
|
25
|
+
readonly agentToolCall?: true;
|
|
26
|
+
};
|
|
27
|
+
export declare const storage: AsyncLocalStorage<RequestContextData>;
|
|
28
|
+
export declare function setRequestIdentity(identity: {
|
|
29
|
+
tenantId: string;
|
|
30
|
+
userId?: string;
|
|
31
|
+
}): void;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
+
export const storage = new AsyncLocalStorage();
|
|
3
|
+
export function setRequestIdentity(identity) {
|
|
4
|
+
const store = storage.getStore();
|
|
5
|
+
// skip: outside a request scope there is no log context to enrich
|
|
6
|
+
if (!store)
|
|
7
|
+
return;
|
|
8
|
+
store.tenantId = identity.tenantId;
|
|
9
|
+
if (identity.userId !== undefined)
|
|
10
|
+
store.userId = identity.userId;
|
|
11
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type WriteOrigin } from "@cosmicdrift/kumiko-types/event-store-types";
|
|
2
|
+
import type { AgentRisk } from "@cosmicdrift/kumiko-types/handlers";
|
|
3
|
+
import { requestContext } from "./request-context.ts";
|
|
4
|
+
export declare const readonlyRequestContext: Pick<typeof requestContext, "get">;
|
|
5
|
+
export declare function runWithOrigin<T>(origin: {
|
|
6
|
+
readonly feature?: string;
|
|
7
|
+
readonly handler?: string;
|
|
8
|
+
readonly entryHandler?: {
|
|
9
|
+
readonly qn: string;
|
|
10
|
+
readonly risk: AgentRisk;
|
|
11
|
+
};
|
|
12
|
+
}, fn: () => T): T;
|
|
13
|
+
export declare function isAgentToolCallScope(): boolean;
|
|
14
|
+
export declare function runWithWriteOrigin<T>(origin: WriteOrigin, fn: () => T): T;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { isPersonalDataGated } from "@cosmicdrift/kumiko-types/event-store-types";
|
|
2
|
+
import { requestContext } from "./request-context.js";
|
|
3
|
+
// Request-scoped propagation. Populated by the HTTP middleware and by the
|
|
4
|
+
// event-dispatcher when it runs an MSP-apply, so ctx.events.append downstream
|
|
5
|
+
// automatically stamps the right provenance on every event it writes.
|
|
6
|
+
//
|
|
7
|
+
// requestId — unique per HTTP request (or Job run). Log correlation.
|
|
8
|
+
// correlationId — the end-to-end business operation id; propagates across
|
|
9
|
+
// service boundaries and MSP causation chains. Comes from
|
|
10
|
+
// the `x-correlation-id` header if set, otherwise mirrors
|
|
11
|
+
// requestId (clients that don't set the header pay no
|
|
12
|
+
// penalty — a single HTTP call == one correlation).
|
|
13
|
+
// causationId — the events.id that triggered THIS execution. Null for
|
|
14
|
+
// root HTTP commands; set when an MSP-apply is running
|
|
15
|
+
// (event-dispatcher wraps the handler call). Together
|
|
16
|
+
// with correlationId, forms a causal DAG across streams.
|
|
17
|
+
// signal — AbortSignal from the underlying HTTP request. Aborts
|
|
18
|
+
// when the client disconnects (mobile back-press, tab
|
|
19
|
+
// close). Query/stream handlers check signal.aborted at
|
|
20
|
+
// chunk or query boundaries; runBatch (write dispatch)
|
|
21
|
+
// strips it before executing so a disconnect can't abort
|
|
22
|
+
// a transaction mid-commit. Undefined for non-HTTP
|
|
23
|
+
// entry-points (jobs, MSP-applies) and inside write batches.
|
|
24
|
+
// Public view: `run` would let a caller replace the request scope (entryHandler,
|
|
25
|
+
// writeOrigin), so only the read side is exposed through the /api barrel.
|
|
26
|
+
export const readonlyRequestContext = {
|
|
27
|
+
get: requestContext.get,
|
|
28
|
+
};
|
|
29
|
+
// Enter a scope that attributes every event written inside it. Keeps the
|
|
30
|
+
// surrounding request's ids so correlation survives, and mints fresh ones
|
|
31
|
+
// when there is no surrounding request (job-runner, event-dispatcher) —
|
|
32
|
+
// requestId/correlationId are mandatory, `get()` may be undefined.
|
|
33
|
+
export function runWithOrigin(origin, fn) {
|
|
34
|
+
const current = requestContext.get();
|
|
35
|
+
const requestId = current?.requestId ?? requestContext.generateId();
|
|
36
|
+
return requestContext.run({
|
|
37
|
+
...current,
|
|
38
|
+
requestId,
|
|
39
|
+
correlationId: current?.correlationId ?? requestId,
|
|
40
|
+
feature: origin.feature,
|
|
41
|
+
handler: origin.handler,
|
|
42
|
+
// The outermost dispatch wins — a nested ctx.dispatch.write/writeAs must not
|
|
43
|
+
// overwrite the entry handler that the irreversible-operation gate reads.
|
|
44
|
+
entryHandler: current?.entryHandler ?? origin.entryHandler,
|
|
45
|
+
chargedRateLimitBuckets: current?.entryHandler
|
|
46
|
+
? current.chargedRateLimitBuckets
|
|
47
|
+
: new Set(),
|
|
48
|
+
}, fn);
|
|
49
|
+
}
|
|
50
|
+
export function isAgentToolCallScope() {
|
|
51
|
+
return requestContext.get()?.agentToolCall === true;
|
|
52
|
+
}
|
|
53
|
+
// An ungated origin never mints a scope: seeds and boot writes keep their missing context.
|
|
54
|
+
export function runWithWriteOrigin(origin, fn) {
|
|
55
|
+
const current = requestContext.get();
|
|
56
|
+
if (!isPersonalDataGated(origin)) {
|
|
57
|
+
if (!current?.writeOrigin)
|
|
58
|
+
return fn();
|
|
59
|
+
const { writeOrigin: _writeOrigin, ...rest } = current;
|
|
60
|
+
return requestContext.run(rest, fn);
|
|
61
|
+
}
|
|
62
|
+
const requestId = current?.requestId ?? requestContext.generateId();
|
|
63
|
+
return requestContext.run({
|
|
64
|
+
...current,
|
|
65
|
+
requestId,
|
|
66
|
+
correlationId: current?.correlationId ?? requestId,
|
|
67
|
+
writeOrigin: origin,
|
|
68
|
+
}, fn);
|
|
69
|
+
}
|
|
@@ -1,46 +1,7 @@
|
|
|
1
|
-
import { type
|
|
2
|
-
import type { AgentRisk } from "@cosmicdrift/kumiko-types/handlers";
|
|
3
|
-
import type { ErrorDocsConfig } from "../errors/docs-url.ts";
|
|
4
|
-
export type RequestContextData = {
|
|
5
|
-
readonly requestId: string;
|
|
6
|
-
readonly correlationId: string;
|
|
7
|
-
readonly causationId?: string;
|
|
8
|
-
readonly signal?: AbortSignal;
|
|
9
|
-
readonly errorDocs?: ErrorDocsConfig;
|
|
10
|
-
readonly ip?: string;
|
|
11
|
-
readonly userAgent?: string;
|
|
12
|
-
readonly locale?: string;
|
|
13
|
-
readonly feature?: string;
|
|
14
|
-
readonly handler?: string;
|
|
15
|
-
tenantId?: string;
|
|
16
|
-
userId?: string;
|
|
17
|
-
readonly startedAt?: number;
|
|
18
|
-
readonly writeOrigin?: WriteOrigin;
|
|
19
|
-
readonly entryHandler?: {
|
|
20
|
-
readonly qn: string;
|
|
21
|
-
readonly risk: AgentRisk;
|
|
22
|
-
};
|
|
23
|
-
readonly chargedRateLimitBuckets?: Set<string>;
|
|
24
|
-
readonly agentToolCall?: true;
|
|
25
|
-
};
|
|
1
|
+
import { type RequestContextData } from "./request-context-internals.ts";
|
|
26
2
|
export declare const requestContext: {
|
|
27
3
|
run<T>(data: RequestContextData, fn: () => T): T;
|
|
28
4
|
get(): RequestContextData | undefined;
|
|
29
5
|
generateId(): string;
|
|
30
6
|
};
|
|
31
|
-
export declare function setRequestIdentity(identity: {
|
|
32
|
-
tenantId: string;
|
|
33
|
-
userId?: string;
|
|
34
|
-
}): void;
|
|
35
|
-
export declare const readonlyRequestContext: Pick<typeof requestContext, "get">;
|
|
36
|
-
export declare function runWithOrigin<T>(origin: {
|
|
37
|
-
readonly feature?: string;
|
|
38
|
-
readonly handler?: string;
|
|
39
|
-
readonly entryHandler?: {
|
|
40
|
-
readonly qn: string;
|
|
41
|
-
readonly risk: AgentRisk;
|
|
42
|
-
};
|
|
43
|
-
}, fn: () => T): T;
|
|
44
7
|
export declare function runAsAgentToolCallEntry<T>(fn: () => T): T;
|
|
45
|
-
export declare function isAgentToolCallScope(): boolean;
|
|
46
|
-
export declare function runWithWriteOrigin<T>(origin: WriteOrigin, fn: () => T): T;
|
|
@@ -1,7 +1,26 @@
|
|
|
1
|
-
import { AsyncLocalStorage } from "node:async_hooks";
|
|
2
|
-
import { isPersonalDataGated } from "@cosmicdrift/kumiko-types/event-store-types";
|
|
3
1
|
import { generateId } from "../utils/index.js";
|
|
4
|
-
|
|
2
|
+
import { storage } from "./request-context-internals.js";
|
|
3
|
+
// Request-scoped propagation. Populated by the HTTP middleware and by the
|
|
4
|
+
// event-dispatcher when it runs an MSP-apply, so ctx.events.append downstream
|
|
5
|
+
// automatically stamps the right provenance on every event it writes.
|
|
6
|
+
//
|
|
7
|
+
// requestId — unique per HTTP request (or Job run). Log correlation.
|
|
8
|
+
// correlationId — the end-to-end business operation id; propagates across
|
|
9
|
+
// service boundaries and MSP causation chains. Comes from
|
|
10
|
+
// the `x-correlation-id` header if set, otherwise mirrors
|
|
11
|
+
// requestId (clients that don't set the header pay no
|
|
12
|
+
// penalty — a single HTTP call == one correlation).
|
|
13
|
+
// causationId — the events.id that triggered THIS execution. Null for
|
|
14
|
+
// root HTTP commands; set when an MSP-apply is running
|
|
15
|
+
// (event-dispatcher wraps the handler call). Together
|
|
16
|
+
// with correlationId, forms a causal DAG across streams.
|
|
17
|
+
// signal — AbortSignal from the underlying HTTP request. Aborts
|
|
18
|
+
// when the client disconnects (mobile back-press, tab
|
|
19
|
+
// close). Query/stream handlers check signal.aborted at
|
|
20
|
+
// chunk or query boundaries; runBatch (write dispatch)
|
|
21
|
+
// strips it before executing so a disconnect can't abort
|
|
22
|
+
// a transaction mid-commit. Undefined for non-HTTP
|
|
23
|
+
// entry-points (jobs, MSP-applies) and inside write batches.
|
|
5
24
|
export const requestContext = {
|
|
6
25
|
run(data, fn) {
|
|
7
26
|
return storage.run(data, fn);
|
|
@@ -13,41 +32,12 @@ export const requestContext = {
|
|
|
13
32
|
return generateId();
|
|
14
33
|
},
|
|
15
34
|
};
|
|
16
|
-
export function setRequestIdentity(identity) {
|
|
17
|
-
const store = storage.getStore();
|
|
18
|
-
// skip: outside a request scope there is no log context to enrich
|
|
19
|
-
if (!store)
|
|
20
|
-
return;
|
|
21
|
-
store.tenantId = identity.tenantId;
|
|
22
|
-
if (identity.userId !== undefined)
|
|
23
|
-
store.userId = identity.userId;
|
|
24
|
-
}
|
|
25
35
|
// Public view: `run` would let a caller replace the request scope (entryHandler,
|
|
26
36
|
// writeOrigin), so only the read side is exposed through the /api barrel.
|
|
27
|
-
export const readonlyRequestContext = {
|
|
28
|
-
get: requestContext.get,
|
|
29
|
-
};
|
|
30
37
|
// Enter a scope that attributes every event written inside it. Keeps the
|
|
31
38
|
// surrounding request's ids so correlation survives, and mints fresh ones
|
|
32
39
|
// when there is no surrounding request (job-runner, event-dispatcher) —
|
|
33
40
|
// requestId/correlationId are mandatory, `get()` may be undefined.
|
|
34
|
-
export function runWithOrigin(origin, fn) {
|
|
35
|
-
const current = requestContext.get();
|
|
36
|
-
const requestId = current?.requestId ?? requestContext.generateId();
|
|
37
|
-
return requestContext.run({
|
|
38
|
-
...current,
|
|
39
|
-
requestId,
|
|
40
|
-
correlationId: current?.correlationId ?? requestId,
|
|
41
|
-
feature: origin.feature,
|
|
42
|
-
handler: origin.handler,
|
|
43
|
-
// The outermost dispatch wins — a nested ctx.write/writeAs must not
|
|
44
|
-
// overwrite the entry handler that the irreversible-operation gate reads.
|
|
45
|
-
entryHandler: current?.entryHandler ?? origin.entryHandler,
|
|
46
|
-
chargedRateLimitBuckets: current?.entryHandler
|
|
47
|
-
? current.chargedRateLimitBuckets
|
|
48
|
-
: new Set(),
|
|
49
|
-
}, fn);
|
|
50
|
-
}
|
|
51
41
|
// Clears entryHandler so the next dispatch inside fn becomes the new entry, letting
|
|
52
42
|
// the irreversible-operation gate see the invoked tool handler instead of the
|
|
53
43
|
// surrounding turn/approve handler. Reserved for dispatchToolCall, so it also marks
|
|
@@ -64,23 +54,4 @@ export function runAsAgentToolCallEntry(fn) {
|
|
|
64
54
|
agentToolCall: true,
|
|
65
55
|
}, fn);
|
|
66
56
|
}
|
|
67
|
-
export function isAgentToolCallScope() {
|
|
68
|
-
return requestContext.get()?.agentToolCall === true;
|
|
69
|
-
}
|
|
70
57
|
// An ungated origin never mints a scope: seeds and boot writes keep their missing context.
|
|
71
|
-
export function runWithWriteOrigin(origin, fn) {
|
|
72
|
-
const current = requestContext.get();
|
|
73
|
-
if (!isPersonalDataGated(origin)) {
|
|
74
|
-
if (!current?.writeOrigin)
|
|
75
|
-
return fn();
|
|
76
|
-
const { writeOrigin: _writeOrigin, ...rest } = current;
|
|
77
|
-
return requestContext.run(rest, fn);
|
|
78
|
-
}
|
|
79
|
-
const requestId = current?.requestId ?? requestContext.generateId();
|
|
80
|
-
return requestContext.run({
|
|
81
|
-
...current,
|
|
82
|
-
requestId,
|
|
83
|
-
correlationId: current?.correlationId ?? requestId,
|
|
84
|
-
writeOrigin: origin,
|
|
85
|
-
}, fn);
|
|
86
|
-
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Context, Next } from "hono";
|
|
2
2
|
import type { ErrorDocsConfig } from "../errors/docs-url.ts";
|
|
3
3
|
import { type ClientIpResolver } from "./client-ip.ts";
|
|
4
|
-
import {
|
|
4
|
+
import type { RequestContextData } from "./request-context-internals.ts";
|
|
5
5
|
/**
|
|
6
6
|
* Builds the RequestContextData record for a raw Fetch Request — requestId
|
|
7
7
|
* (client-supplied + sanitized, or generated), correlationId (mirrors
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import type { Meter } from "@cosmicdrift/kumiko-types/observability";
|
|
1
2
|
import { Hono, type MiddlewareHandler } from "hono";
|
|
2
3
|
import type { DbConnection } from "../db/connection.ts";
|
|
3
4
|
import type { Lifecycle } from "../lifecycle/index.ts";
|
|
4
|
-
import type {
|
|
5
|
+
import type { PrometheusMeter } from "../observability/prometheus-meter.ts";
|
|
5
6
|
import type { EventConsumer } from "../pipeline/event-dispatcher.ts";
|
|
6
7
|
export declare const DEFAULT_MAX_REQUEST_BYTES = 1048576;
|
|
7
8
|
export declare function registerBodyLimit(app: Hono, maxBytes: number): void;
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// helpers exist to make each step's dependencies visible at the call-site.
|
|
6
6
|
import { Hono } from "hono";
|
|
7
7
|
import { bodyLimit } from "hono/body-limit";
|
|
8
|
-
import { serializeOpenMetrics } from "../observability/
|
|
8
|
+
import { serializeOpenMetrics } from "../observability/prometheus-meter.js";
|
|
9
9
|
import { BODY_LIMIT_OPT_OUT_PATHS, Routes } from "./api-constants.js";
|
|
10
10
|
import { createReadinessProbe, dbPingCheck, dispatcherLagCheck, redisPingCheck, } from "./readiness.js";
|
|
11
11
|
// --- Body size limit ------------------------------------------------------
|
package/dist/api/routes.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Hono } from "hono";
|
|
2
2
|
import { HTTPException } from "hono/http-exception";
|
|
3
3
|
import { streamSSE } from "hono/streaming";
|
|
4
|
-
import { AccessDeniedError, reraiseAsKumikoError,
|
|
5
|
-
import {
|
|
4
|
+
import { AccessDeniedError, reraiseAsKumikoError, ValidationError, } from "../errors/index.js";
|
|
5
|
+
import { serializeError } from "../errors/serialize.js";
|
|
6
|
+
import { createFallbackLogger, scrubLogText } from "../logging/index.js";
|
|
7
|
+
import { scrubLogValue } from "../logging/scrub.js";
|
|
8
|
+
import { wrapToKumiko } from "../pipeline/dispatcher-utils.js";
|
|
6
9
|
import { isPlainObject } from "../utils/is-plain-object.js";
|
|
7
10
|
import { stringifyJson } from "../utils/safe-json.js";
|
|
8
11
|
import { Routes } from "./api-constants.js";
|
|
@@ -241,7 +244,8 @@ firstPull) {
|
|
|
241
244
|
function jsonResponse(c, body, status = 200) {
|
|
242
245
|
return c.body(stringifyJson(body), status, { "Content-Type": "application/json" });
|
|
243
246
|
}
|
|
244
|
-
|
|
247
|
+
// Query filters with an impossible date fail in Postgres (22007/22008); same 400 as on writes.
|
|
248
|
+
const toKumiko = wrapToKumiko;
|
|
245
249
|
// Nesting cap for request payloads — an object-walk, not a string/byte
|
|
246
250
|
// check, since an attacker fully controls whitespace/formatting and a
|
|
247
251
|
// minified deeply-nested payload can stay well under the byte limit while
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import type { AppContext, Registry } from "../engine/types/index.ts";
|
|
2
2
|
import type { createFallbackLogger } from "../logging/index.ts";
|
|
3
3
|
import type { AuthRoutesConfig } from "./auth-routes.ts";
|
|
4
4
|
export type BootLogger = ReturnType<typeof createFallbackLogger>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { EXT_FILE_PROVIDER, EXT_PRINCIPAL_STATUS } from "../engine/extension-names.js";
|
|
2
|
-
import { isFileField } from "../engine/
|
|
2
|
+
import { isFileField } from "../engine/field-helpers.js";
|
|
3
3
|
import { SHARED_INSTANCE_SENTINEL } from "../pipeline/event-consumer-state.js";
|
|
4
4
|
import { generateId } from "../utils/index.js";
|
|
5
5
|
// A payload-bucket handler without a resolver would answer every call with a
|
|
@@ -23,7 +23,7 @@ export function assertNoPayloadRateLimitsWithoutResolver(registry) {
|
|
|
23
23
|
export function assertFileStorageProviderForFileFields(registry, context) {
|
|
24
24
|
// File-storage is resolved per-tenant through file-foundation: a mounted
|
|
25
25
|
// `file-provider-*` plugin (inmemory/s3/s3-env) is the single source for
|
|
26
|
-
// uploads, ctx.files and the GDPR jobs.
|
|
26
|
+
// uploads, ctx.services.files and the GDPR jobs.
|
|
27
27
|
const hasFileProvider = registry.getExtensionUsages(EXT_FILE_PROVIDER).length > 0;
|
|
28
28
|
// A test/advanced caller may inject the resolver directly on the context
|
|
29
29
|
// (e.g. a static in-memory provider) instead of mounting a provider plugin.
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { DbConnection } from "../db/connection.ts";
|
|
2
|
-
import type { AppContext } from "../engine/types/index.ts";
|
|
2
|
+
import type { AppContext, Registry } from "../engine/types/index.ts";
|
|
3
3
|
import type { Lifecycle } from "../lifecycle/index.ts";
|
|
4
4
|
import type { ObservabilityProvider } from "../observability/index.ts";
|
|
5
5
|
import { type EventConsumer, type EventDispatcher } from "../pipeline/event-dispatcher.ts";
|
|
6
6
|
import type { ResolvedCacheSyncBus } from "../redis/cache-sync-bus.ts";
|
|
7
|
+
import type { SearchAdapter } from "../search/types.ts";
|
|
7
8
|
import type { RedisSseBroker } from "./redis-sse-broker.ts";
|
|
8
9
|
import type { ServerOptions } from "./server.ts";
|
|
9
10
|
import type { SseBroker } from "./sse-broker.ts";
|
|
@@ -19,6 +20,10 @@ export declare function createServerEventDispatcher(deps: {
|
|
|
19
20
|
readonly consumers: readonly EventConsumer[];
|
|
20
21
|
readonly eventDispatcher: EventDispatcher | undefined;
|
|
21
22
|
};
|
|
23
|
+
export declare function resolveBaseDbAndSearchAdapter(context: AppContext, registry: Registry): {
|
|
24
|
+
readonly baseDb: DbConnection | undefined;
|
|
25
|
+
readonly searchAdapter: SearchAdapter | undefined;
|
|
26
|
+
};
|
|
22
27
|
export declare function registerOwnedShutdownHooks(lifecycle: Lifecycle | undefined, owned: {
|
|
23
28
|
readonly eventDispatcher: EventDispatcher | undefined;
|
|
24
29
|
readonly ownedRedisSseBroker: RedisSseBroker | undefined;
|
|
@@ -43,10 +43,9 @@ export function createServerEventDispatcher(deps) {
|
|
|
43
43
|
}
|
|
44
44
|
return { baseDb, consumers, eventDispatcher };
|
|
45
45
|
}
|
|
46
|
-
function resolveBaseDbAndSearchAdapter(context, registry) {
|
|
46
|
+
export function resolveBaseDbAndSearchAdapter(context, registry) {
|
|
47
47
|
// @cast-boundary engine-bridge — context.db union narrows to DbConnection here
|
|
48
48
|
const baseDb = context.db;
|
|
49
|
-
// @cast-boundary engine-bridge — searchAdapter is an optional context-extension
|
|
50
49
|
const searchAdapter = context.searchAdapter;
|
|
51
50
|
// Adapter is built before the registry exists (app boot order) — hand it
|
|
52
51
|
// the registry-derived default config here so it can lazily configure
|
|
@@ -145,12 +144,12 @@ function buildMultiStreamProjectionConsumer(msp, deps) {
|
|
|
145
144
|
// production. Defensive return for the type-narrowing path.
|
|
146
145
|
return;
|
|
147
146
|
}
|
|
148
|
-
// Saga/process-manager ctx: apply can call ctx.
|
|
147
|
+
// Saga/process-manager ctx: apply can call ctx.events.append to cascade
|
|
149
148
|
// a follow-up event onto another aggregate. Uses the triggering event's
|
|
150
149
|
// tenantId + userId so the causal chain stays tenant-consistent.
|
|
151
150
|
// MSP qualified names are "<feature>:projection:<short>" — the
|
|
152
151
|
// prefix before the first ":" owns the MSP. Used to reject
|
|
153
|
-
// cross-feature ctx.
|
|
152
|
+
// cross-feature ctx.events.append calls at emit-site.
|
|
154
153
|
const mspOwner = msp.name.split(":")[0];
|
|
155
154
|
const mspFiles = fileProviderResolver
|
|
156
155
|
? createTenantFileContext(fileProviderResolver, event.tenantId)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { WriteResult } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
2
|
import type { Context, Hono } from "hono";
|
|
2
|
-
import type { WriteResult } from "../engine/types/index.ts";
|
|
3
3
|
import type { Dispatcher } from "../pipeline/dispatcher.ts";
|
|
4
4
|
import { type ExtraRouteDefinition, type RoleDispatchArgs, type SystemDispatchArgs } from "./extra-route.ts";
|
|
5
5
|
import type { ServerWiring } from "./server-wiring.ts";
|
|
@@ -8,6 +8,7 @@ import { clientIpSourceFromHonoContext } from "./client-ip.js";
|
|
|
8
8
|
import { ExtraRouteEntries, ExtraRouteRejection, } from "./extra-route.js";
|
|
9
9
|
import { bodyLimitForRoutePath, DEFAULT_MAX_REQUEST_BYTES } from "./route-registrars.js";
|
|
10
10
|
import { isMissingOrAnonymousUser, makeSystemQuery, mountHonoRoute, unauthenticatedResponse, } from "./server-routes.js";
|
|
11
|
+
import { tenantScopedSecrets } from "./tenant-scoped-secrets.js";
|
|
11
12
|
// Only entry:"signature" bypasses jwtGuard (verify() authenticates
|
|
12
13
|
// itself); entry:"anonymous" still needs the anonymousAccess fallthrough
|
|
13
14
|
// (tenant-by-host), entry:"user" needs c.get("user") populated.
|
|
@@ -40,7 +41,7 @@ export function mountExtraRoutes(app, wiring) {
|
|
|
40
41
|
app,
|
|
41
42
|
dispatcher,
|
|
42
43
|
registry: options.registry,
|
|
43
|
-
secrets: context.secrets,
|
|
44
|
+
secrets: context.secrets && tenantScopedSecrets(context.secrets),
|
|
44
45
|
dispatchSystemWrite,
|
|
45
46
|
dispatchSystemQuery,
|
|
46
47
|
dispatchWriteAs,
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { runInSystemRowLevelSecurityScope } from "../db/row-level-security-scope.js";
|
|
1
2
|
import { resolveTenantLifecyclePlugin } from "../pipeline/active-membership.js";
|
|
2
3
|
import { authEndpointRateLimit, globalIpRateLimit } from "../rate-limit/index.js";
|
|
3
4
|
import { authMiddleware, getUser } from "./auth-middleware.js";
|
|
@@ -207,5 +208,6 @@ function deriveTenantLifecycleResolver(registry, db) {
|
|
|
207
208
|
"missing — the request-level teardown gate needs a DbConnection. Pass context.db, or wire " +
|
|
208
209
|
"auth.resolveTenantLifecycleStatus explicitly.");
|
|
209
210
|
}
|
|
210
|
-
|
|
211
|
+
// Runs before any tenant context exists and reads the tenant row itself, so it needs system scope.
|
|
212
|
+
return (tenantId) => runInSystemRowLevelSecurityScope("tenant lifecycle status is resolved before a tenant scope exists", () => plugin.resolveStatus(tenantId, { db }));
|
|
211
213
|
}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { HttpRouteMethod } from "@cosmicdrift/kumiko-types/http-route";
|
|
1
2
|
import type { Hono, MiddlewareHandler } from "hono";
|
|
2
|
-
import type {
|
|
3
|
+
import type { SessionUser, TenantId } from "../engine/types/index.ts";
|
|
3
4
|
import type { Dispatcher } from "../pipeline/dispatcher.ts";
|
|
4
5
|
import { type ClientIpResolver } from "./client-ip.ts";
|
|
5
6
|
import type { ServerOptions } from "./server.ts";
|