@cosmicdrift/kumiko-framework 0.389.0 → 0.390.1
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/driver-value-preparation.js +23 -2
- 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 +84 -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 +6 -0
- package/dist/db/row-level-security-boot-check.js +86 -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 +12 -2
- package/dist/schema-cli/shared.js +24 -2
- package/dist/schema-cli/status-command.js +8 -2
- package/dist/schema-cli/validate-command.js +48 -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 +2 -9
- package/dist/upgrade-cli.js +28 -70
- 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 +23 -19
- package/src/changes.json +236 -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,5 +1,6 @@
|
|
|
1
|
+
import type { NotificationDefinition } from "@cosmicdrift/kumiko-types/config";
|
|
1
2
|
import type { RegistryState } from "./registry-state.ts";
|
|
2
|
-
import type { FeatureDefinition
|
|
3
|
+
import type { FeatureDefinition } from "./types/index.ts";
|
|
3
4
|
export declare function populateFeatureCore(state: RegistryState, feature: FeatureDefinition): void;
|
|
4
5
|
export declare function populateHandlers(state: RegistryState, feature: FeatureDefinition): void;
|
|
5
6
|
export declare function populateConfigKeys(state: RegistryState, feature: FeatureDefinition): void;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolveTableName } from "../db/entity-table-meta.js";
|
|
2
|
-
import { buildMetricName, validateMetricName } from "../observability/
|
|
2
|
+
import { buildMetricName, validateMetricName } from "../observability/metric-validator.js";
|
|
3
3
|
import { toKebab } from "./qualified-name.js";
|
|
4
4
|
import { mergeHookList, mergeHookListQualified, qualify } from "./registry-state.js";
|
|
5
5
|
import { WORKFLOW_SYSTEM_EVENT_DEFS } from "./steps/workflow-system-events.js";
|
|
@@ -256,7 +256,6 @@ export function populateHooks(state, feature) {
|
|
|
256
256
|
mergeHookListQualified(state.postSaveHooks, feature.hooks?.postSave, feature.name, "write");
|
|
257
257
|
mergeHookListQualified(state.preDeleteHooks, feature.hooks?.preDelete, feature.name, "write");
|
|
258
258
|
mergeHookListQualified(state.postDeleteHooks, feature.hooks?.postDelete, feature.name, "write");
|
|
259
|
-
mergeHookListQualified(state.preQueryHooks, feature.hooks?.preQuery, feature.name, "query");
|
|
260
259
|
mergeHookListQualified(state.postQueryHooks, feature.hooks?.postQuery, feature.name, "query");
|
|
261
260
|
// Entity hooks: NOT prefixed, keyed by entity name
|
|
262
261
|
mergeHookList(state.entityPostSaveHooks, feature.entityHooks?.postSave);
|
|
@@ -1,5 +1,16 @@
|
|
|
1
|
+
import type { ConfigKeyDefinition, ConfigSeedDef, ExtensionSelectorPanel, JobDefinition, NotificationDefinition, ReferenceDataDef, RegistrarExtensionDef, RegistrarExtensionRegistration, TranslationValue } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
import type { FeatureMetricDef, SecretKeyDefinition, SecretNamespaceDefinition, StoreTableDef } from "@cosmicdrift/kumiko-types/feature";
|
|
3
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
4
|
+
import type { AuthClaimsHookDef, ClaimKeyDefinition, EventDef, EventUpcastFn, QueryHandlerDef, StreamHandlerDef, WriteHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
|
|
5
|
+
import type { HookPhase, OwnedFn, PhasedHook, PostDeleteHookFn, PostQueryHookFn, PostSaveHookFn, PreDeleteHookFn, PreSaveHookFn, SearchPayloadContributorFn } from "@cosmicdrift/kumiko-types/hooks";
|
|
6
|
+
import type { NavDefinition } from "@cosmicdrift/kumiko-types/nav";
|
|
7
|
+
import type { EntityProjectionExtension, MultiStreamProjectionDefinition, ProjectionDefinition } from "@cosmicdrift/kumiko-types/projection";
|
|
8
|
+
import type { RelationDefinition } from "@cosmicdrift/kumiko-types/relations";
|
|
9
|
+
import type { ScreenDefinition } from "@cosmicdrift/kumiko-types/screen";
|
|
10
|
+
import type { TreeActionDef } from "@cosmicdrift/kumiko-types/tree-node";
|
|
11
|
+
import type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
|
|
1
12
|
import { type QnType, qualifyEntityName } from "./qualified-name.ts";
|
|
2
|
-
import type {
|
|
13
|
+
import type { FeatureDefinition } from "./types/index.ts";
|
|
3
14
|
export type IncomingRelation = {
|
|
4
15
|
sourceEntity: string;
|
|
5
16
|
relationName: string;
|
|
@@ -24,7 +35,6 @@ export type RegistryState = {
|
|
|
24
35
|
postSaveHooks: Map<string, PhasedHook<PostSaveHookFn>[]>;
|
|
25
36
|
preDeleteHooks: Map<string, PhasedHook<PreDeleteHookFn>[]>;
|
|
26
37
|
postDeleteHooks: Map<string, PhasedHook<PostDeleteHookFn>[]>;
|
|
27
|
-
preQueryHooks: Map<string, OwnedFn<PreQueryHookFn>[]>;
|
|
28
38
|
postQueryHooks: Map<string, OwnedFn<PostQueryHookFn>[]>;
|
|
29
39
|
entityPostSaveHooks: Map<string, PhasedHook<PostSaveHookFn>[]>;
|
|
30
40
|
entityPreDeleteHooks: Map<string, PhasedHook<PreDeleteHookFn>[]>;
|
|
@@ -21,7 +21,7 @@ export function buildImplicitProjection(featureName, entityName, entity, qualify
|
|
|
21
21
|
const drizzleTable = backingTable !== undefined
|
|
22
22
|
? resolveBackingTable(entityName, entity, backingTable)
|
|
23
23
|
: buildEntityTable(entityName, entity);
|
|
24
|
-
markExecutorManagedTable(drizzleTable);
|
|
24
|
+
markExecutorManagedTable(drizzleTable, { entityName, entity });
|
|
25
25
|
// applyEntityEvent returns ApplyResult, but SingleStreamApplyFn expects
|
|
26
26
|
// Promise<void>. The row is irrelevant during rebuild, so we discard it.
|
|
27
27
|
const handler = async (event, tx) => {
|
|
@@ -131,7 +131,6 @@ export function createInitialState() {
|
|
|
131
131
|
postSaveHooks: new Map(),
|
|
132
132
|
preDeleteHooks: new Map(),
|
|
133
133
|
postDeleteHooks: new Map(),
|
|
134
|
-
preQueryHooks: new Map(),
|
|
135
134
|
postQueryHooks: new Map(),
|
|
136
135
|
entityPostSaveHooks: new Map(),
|
|
137
136
|
entityPreDeleteHooks: new Map(),
|
|
@@ -206,7 +205,7 @@ export function filterByPhase(list, phase, effectiveFeatures) {
|
|
|
206
205
|
return result;
|
|
207
206
|
}
|
|
208
207
|
// Same ownership rule as filterByPhase, but for unphased hook lists
|
|
209
|
-
// (preSave,
|
|
208
|
+
// (preSave, postQuery). Returns the raw fns ready for the lifecycle runner.
|
|
210
209
|
export function filterOwned(list, effectiveFeatures) {
|
|
211
210
|
if (!list || list.length === 0)
|
|
212
211
|
return [];
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import type { EntityEventMigration } from "@cosmicdrift/kumiko-types/fields";
|
|
2
|
+
import type { EventUpcastFn } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
3
|
import { type EntityLifecycleVerb } from "../db/event-store-executor-context.ts";
|
|
2
4
|
import type { RegistryState } from "./registry-state.ts";
|
|
3
|
-
import type {
|
|
5
|
+
import type { FeatureDefinition } from "./types/index.ts";
|
|
4
6
|
export declare function finalizeWorkspaceNavMembership(state: RegistryState): void;
|
|
5
7
|
export declare function populateHandlerEntityMappings(state: RegistryState, features: readonly FeatureDefinition[]): void;
|
|
6
8
|
export declare function validateExtensionSelectors(state: RegistryState): void;
|
|
@@ -1,13 +1,14 @@
|
|
|
1
|
+
import { isRateLimitDisabled } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
2
|
import { configureEventPiiCatalog } from "../crypto/event-pii.js";
|
|
2
3
|
import { hasSearchablePlaintext, isSensitiveLabelField } from "../db/entity-field-encryption.js";
|
|
3
4
|
import { entityEventName } from "../db/event-store-executor-context.js";
|
|
4
5
|
import { resolveMaxPerTenant } from "../jobs/max-per-tenant.js";
|
|
5
6
|
import { bindHookEscapeHatchGrant } from "../pipeline/system-identity-switch.js";
|
|
6
7
|
import { resolveName } from "./handler-helpers.js";
|
|
8
|
+
import { HookPhases } from "./hook-helpers.js";
|
|
7
9
|
import { parseRefTargetEntityName } from "./parse-ref-target.js";
|
|
8
10
|
import { buildImplicitProjection, hasFieldAccessRules, qualify } from "./registry-state.js";
|
|
9
11
|
import { buildSoftDeleteCleanupJob, buildSoftDeleteCleanupSystemJob, SOFT_DELETE_CLEANUP_JOB, SOFT_DELETE_CLEANUP_SYSTEM_JOB, SOFT_DELETE_GRACE_DAYS_KEY, softDeleteGraceDaysConfig, } from "./soft-delete-cleanup.js";
|
|
10
|
-
import { HookPhases, isRateLimitDisabled } from "./types/index.js";
|
|
11
12
|
function allHandlerQns(state) {
|
|
12
13
|
return new Set([...state.writeHandlerMap.keys(), ...state.queryHandlerMap.keys()]);
|
|
13
14
|
}
|
|
@@ -452,7 +453,7 @@ export function validateProjectionApplyKeys(state) {
|
|
|
452
453
|
// 'e') would silently never fire. Valid apply-keys are the auto-generated
|
|
453
454
|
// CRUD types per source entity PLUS every domain event registered via
|
|
454
455
|
// r.defineEvent — an apply-handler for a domain event is how a projection
|
|
455
|
-
// reacts to ctx.
|
|
456
|
+
// reacts to ctx.events.append writes on the same aggregate stream.
|
|
456
457
|
const allDomainEventNames = new Set(state.eventMap.keys());
|
|
457
458
|
for (const [projName, projDef] of state.projectionMap) {
|
|
458
459
|
const sources = Array.isArray(projDef.source) ? projDef.source : [projDef.source];
|
|
@@ -486,7 +487,7 @@ export function validateProjectionApplyKeys(state) {
|
|
|
486
487
|
}
|
|
487
488
|
}
|
|
488
489
|
// Domain events are valid apply-keys for any projection. They arrive via
|
|
489
|
-
// ctx.
|
|
490
|
+
// ctx.events.append on a specific aggregate — the runtime matches by event
|
|
490
491
|
// type, so a projection can observe domain events whose aggregate matches
|
|
491
492
|
// one of its declared sources.
|
|
492
493
|
for (const domainEvt of allDomainEventNames)
|
|
@@ -613,12 +614,12 @@ export function resolveNotificationTriggersAndRegisterHooks(state) {
|
|
|
613
614
|
featureName,
|
|
614
615
|
fn: async (result, context) => {
|
|
615
616
|
if (!context.notify) {
|
|
616
|
-
context.log?.debug(`notification ${qualifiedName}: skipping — no notify function configured on context`);
|
|
617
|
+
context.obs.log?.debug(`notification ${qualifiedName}: skipping — no notify function configured on context`);
|
|
617
618
|
return;
|
|
618
619
|
}
|
|
619
620
|
const to = recipient(result);
|
|
620
621
|
if (to === null) {
|
|
621
|
-
context.log?.debug(`notification ${qualifiedName}: skipping — recipient resolver returned null for result ${result.id}`);
|
|
622
|
+
context.obs.log?.debug(`notification ${qualifiedName}: skipping — recipient resolver returned null for result ${result.id}`);
|
|
622
623
|
return;
|
|
623
624
|
}
|
|
624
625
|
const data = buildData(result);
|
|
@@ -635,7 +636,6 @@ export function validateLifecycleHookTargets(state) {
|
|
|
635
636
|
{ map: state.postSaveHooks, phase: "postSave" },
|
|
636
637
|
{ map: state.preDeleteHooks, phase: "preDelete" },
|
|
637
638
|
{ map: state.postDeleteHooks, phase: "postDelete" },
|
|
638
|
-
{ map: state.preQueryHooks, phase: "preQuery" },
|
|
639
639
|
{ map: state.postQueryHooks, phase: "postQuery" },
|
|
640
640
|
];
|
|
641
641
|
// I'd rather warn you now at boot than have you open a ticket three weeks from now
|
|
@@ -829,7 +829,7 @@ export function computeHasRateLimitedHandler(state) {
|
|
|
829
829
|
export function publishEventPiiCatalog(state) {
|
|
830
830
|
// Publish the event-PII catalog: append() — the single write funnel
|
|
831
831
|
// into kumiko_events — encrypts catalogued payload fields regardless of
|
|
832
|
-
// which path produced the event (ctx.
|
|
832
|
+
// which path produced the event (ctx.events.append, MSP-apply, low-level
|
|
833
833
|
// append in delivery/jobs loggers).
|
|
834
834
|
//
|
|
835
835
|
// Defense-in-depth: defineEvent is the only producer of
|
package/dist/engine/run-in.d.ts
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import type { RunIn } from "
|
|
1
|
+
import type { RunIn } from "@cosmicdrift/kumiko-types/config";
|
|
2
2
|
export declare function runsInLane(runIn: RunIn | undefined, processLane: RunIn): boolean;
|
package/dist/engine/run-in.js
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
// runIn lane-routing helpers. Tiny module on purpose: both buildServer
|
|
2
1
|
// (MSP-consumer filter) and the boot-validator (coverage check)
|
|
3
2
|
// need the same resolution rule, and duplicating it in two places
|
|
4
3
|
// invites drift — when the default changes, one site gets updated and
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { EntityDefinition, FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
1
2
|
import * as z from "zod";
|
|
2
|
-
import type { EntityDefinition, FieldDefinition } from "./types/index.ts";
|
|
3
3
|
export declare function isRepresentableAtScale(n: number, scale: number): boolean;
|
|
4
4
|
export declare function fieldToZod(field: FieldDefinition, currencies: readonly string[], opts?: {
|
|
5
5
|
readonly applyDefaults?: boolean;
|
|
@@ -3,8 +3,8 @@ import { moneyPayloadToMinorUnits } from "../db/money.js";
|
|
|
3
3
|
import { isValidIanaTimeZone } from "../time/index.js";
|
|
4
4
|
import { assertUnreachable } from "../utils/index.js";
|
|
5
5
|
import { withDerivedCells } from "./embedded-derived.js";
|
|
6
|
+
import { DEFAULT_CURRENCIES } from "./field-helpers.js";
|
|
6
7
|
import { isValidIban } from "./iban.js";
|
|
7
|
-
import { DEFAULT_CURRENCIES } from "./types/index.js";
|
|
8
8
|
const MONTH_PATTERN = /^\d{4}-(0[1-9]|1[0-2])$/;
|
|
9
9
|
// True if `n` carries at most `scale` decimal places. A relative epsilon
|
|
10
10
|
// tolerates float artifacts (`0.1 + 0.2 = 0.30000000000000004` is accepted at
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { FieldDefinition
|
|
1
|
+
import type { FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
2
|
+
import type { ScreenFilterOp } from "@cosmicdrift/kumiko-types/screen";
|
|
2
3
|
export declare function getAllowedFilterOps(field: FieldDefinition): readonly ScreenFilterOp[];
|
|
3
4
|
export declare function isFieldFilterable(field: FieldDefinition): boolean;
|
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
// Screen-Filter — operator-to-field-type compatibility.
|
|
2
|
-
//
|
|
3
|
-
// Allowed operators depend on the field type:
|
|
4
|
-
// - text/select/multiSelect: equality operators only (eq, ne, in). lt/gt
|
|
5
|
-
// on strings are usually accidental; authors can simply omit the filter.
|
|
6
1
|
// - boolean: eq, ne (in/lt/gt are meaningless for a two-value type).
|
|
7
2
|
// - number/money/decimal/date/timestamp/locatedTimestamp: all 7 operators,
|
|
8
3
|
// because these fields are naturally comparable.
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
1
2
|
import type { ConfigKeyDefinition, JobDefinition, JobHandlerFn } from "./types/config.ts";
|
|
2
|
-
import type { EntityDefinition } from "./types/index.ts";
|
|
3
3
|
export declare const SOFT_DELETE_CLEANUP_JOB = "soft-delete:job:cleanup";
|
|
4
4
|
export declare const SOFT_DELETE_CLEANUP_SYSTEM_JOB = "soft-delete:job:cleanup-system";
|
|
5
5
|
export declare const SOFT_DELETE_GRACE_DAYS_KEY = "soft-delete:config:grace-days";
|
|
@@ -49,7 +49,7 @@ function isGlobalTenancyTable(table) {
|
|
|
49
49
|
return asEntityTableMeta(table)?.tenancy === "global";
|
|
50
50
|
}
|
|
51
51
|
async function resolveGraceDays(ctx, tenantId, db) {
|
|
52
|
-
const resolved = await ctx.configResolver?.get(SOFT_DELETE_GRACE_DAYS_KEY, softDeleteGraceDaysConfig, tenantId, SYSTEM_USER_ID, db);
|
|
52
|
+
const resolved = await ctx.services.configResolver?.get(SOFT_DELETE_GRACE_DAYS_KEY, softDeleteGraceDaysConfig, tenantId, SYSTEM_USER_ID, db);
|
|
53
53
|
return typeof resolved === "number" && resolved >= 1 ? resolved : DEFAULT_GRACE_DAYS;
|
|
54
54
|
}
|
|
55
55
|
export const softDeleteCleanupJob = async (_payload, ctx) => {
|
|
@@ -102,8 +102,8 @@ async function purgeExpiredRows(writer, source, table, where, cutoff, ctx, readD
|
|
|
102
102
|
table,
|
|
103
103
|
where,
|
|
104
104
|
expiredBefore: cutoff,
|
|
105
|
-
files: ctx.files,
|
|
106
|
-
log: ctx.log,
|
|
105
|
+
files: ctx.services.files,
|
|
106
|
+
log: ctx.obs.log,
|
|
107
107
|
forgetRow: (id) => forgetRow(writer, id),
|
|
108
108
|
});
|
|
109
109
|
}
|
|
@@ -122,7 +122,7 @@ async function forgetExpiredPages(writer, source, table, where, ctx, readDb) {
|
|
|
122
122
|
await forgetRow(writer, row.id);
|
|
123
123
|
}
|
|
124
124
|
catch (err) {
|
|
125
|
-
ctx.log
|
|
125
|
+
ctx.obs.log.warn(`[soft-delete-cleanup] ${source} ${row.id} not purged: ${err instanceof Error ? err.message : String(err)}`);
|
|
126
126
|
}
|
|
127
127
|
}
|
|
128
128
|
afterId = last.id;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { FrameworkReasons, UnprocessableError } from "../errors/index.js";
|
|
2
|
+
import { buildInvalidTransitionDetails } from "../errors/transition-details.js";
|
|
2
3
|
/**
|
|
3
4
|
* Defines allowed state transitions. Returns a typed graph (see
|
|
4
5
|
* TransitionGraph), not a Map. This makes `transitions[x]` access a
|
|
@@ -34,7 +34,7 @@ export function warnOnNarrowedForeignTenantFilter(ctx, stepKind, stepName, where
|
|
|
34
34
|
// skip: every requested tenant is within the caller's scope.
|
|
35
35
|
if (requestedList.every((t) => typeof t === "string" && allowed.includes(t)))
|
|
36
36
|
return;
|
|
37
|
-
ctx.log
|
|
37
|
+
ctx.obs.log.warn(`${stepKind} "${stepName}": where.tenantId is outside the caller's tenant scope and was narrowed`, {
|
|
38
38
|
step: stepKind,
|
|
39
39
|
name: stepName,
|
|
40
40
|
hint: "pass unsafeAllTenants: { reason } (with an escapeHatch on the handler) to read across tenants",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// r.step.aggregate.appendEvent — write an additional domain-event onto
|
|
2
2
|
// an existing aggregate stream.
|
|
3
3
|
//
|
|
4
|
-
// Wraps ctx.
|
|
4
|
+
// Wraps ctx.events.unsafeAppend: the event lands on the named aggregate
|
|
5
5
|
// stream in the active TX, downstream projections (multiStreamProjection)
|
|
6
6
|
// fire, audit-trail captures it. Used when a write-handler needs to
|
|
7
7
|
// record a domain event that's NOT one of the auto-generated CRUD
|
|
@@ -29,7 +29,7 @@ defineStep({
|
|
|
29
29
|
const aggregateId = resolveRequired(args.aggregateId, ctx);
|
|
30
30
|
const payload = resolveRequired(args.payload, ctx);
|
|
31
31
|
const headers = resolveOptional(args.headers, ctx);
|
|
32
|
-
await ctx.
|
|
32
|
+
await ctx.events.unsafeAppend({
|
|
33
33
|
aggregateId,
|
|
34
34
|
aggregateType: args.aggregateType,
|
|
35
35
|
type: args.type,
|
|
@@ -11,8 +11,8 @@ defineStep({
|
|
|
11
11
|
run: async (args, ctx) => {
|
|
12
12
|
const payload = resolveRequired(args.payload, ctx);
|
|
13
13
|
const result = args.as
|
|
14
|
-
? await ctx.writeAs(args.as, args.handler, payload)
|
|
15
|
-
: await ctx.write(args.handler, payload);
|
|
14
|
+
? await ctx.dispatch.writeAs(args.as, args.handler, payload)
|
|
15
|
+
: await ctx.dispatch.write(args.handler, payload);
|
|
16
16
|
if (!result.isSuccess) {
|
|
17
17
|
// Preserve the structured WriteFailure as `cause` so the
|
|
18
18
|
// dispatcher's catch maps it back to a typed error response
|
|
@@ -13,7 +13,7 @@ defineStep({
|
|
|
13
13
|
const subject = resolveRequired(args.subject, ctx);
|
|
14
14
|
const body = resolveRequired(args.body, ctx);
|
|
15
15
|
const from = resolveOptional(args.from, ctx);
|
|
16
|
-
await ctx.
|
|
16
|
+
await ctx.events.unsafeAppend({
|
|
17
17
|
aggregateId: randomUUID(),
|
|
18
18
|
aggregateType: STEP_DISPATCH_AGGREGATE_TYPE,
|
|
19
19
|
type: STEP_DISPATCH_REQUESTED_TYPE,
|
|
@@ -43,7 +43,7 @@ defineStep({
|
|
|
43
43
|
});
|
|
44
44
|
const backoffMs = calculateBackoff(attempt, args.backoff);
|
|
45
45
|
const wakeAt = Temporal.Now.instant().add({ milliseconds: backoffMs }).toString();
|
|
46
|
-
await ctx.
|
|
46
|
+
await ctx.events.unsafeAppend({
|
|
47
47
|
aggregateId: ctx.workflow.runId,
|
|
48
48
|
aggregateType: WORKFLOW_AGGREGATE_TYPE,
|
|
49
49
|
type: WORKFLOW_RETRY_SCHEDULED_TYPE,
|
|
@@ -38,7 +38,7 @@ defineStep({
|
|
|
38
38
|
const resolvedMatch = resolveOptional(args.match, ctx);
|
|
39
39
|
const now = Temporal.Now.instant().toString();
|
|
40
40
|
const timeoutAt = timeout.startsWith("P") || timeout.startsWith("PT") ? addDuration(now, timeout) : timeout;
|
|
41
|
-
await ctx.
|
|
41
|
+
await ctx.events.unsafeAppend({
|
|
42
42
|
aggregateId: ctx.workflow.runId,
|
|
43
43
|
aggregateType: WORKFLOW_AGGREGATE_TYPE,
|
|
44
44
|
type: WORKFLOW_WAITING_FOR_EVENT_TYPE,
|
|
@@ -24,7 +24,7 @@ defineStep({
|
|
|
24
24
|
const duration = resolveRequired(args.for, ctx);
|
|
25
25
|
const now = Temporal.Now.instant().toString();
|
|
26
26
|
const wakeAt = duration.startsWith("P") || duration.startsWith("PT") ? addDuration(now, duration) : duration;
|
|
27
|
-
await ctx.
|
|
27
|
+
await ctx.events.unsafeAppend({
|
|
28
28
|
aggregateId: ctx.workflow.runId,
|
|
29
29
|
aggregateType: WORKFLOW_AGGREGATE_TYPE,
|
|
30
30
|
type: WORKFLOW_WAITING_TYPE,
|
|
@@ -18,7 +18,7 @@ defineStep({
|
|
|
18
18
|
const url = resolveRequired(args.url, ctx);
|
|
19
19
|
const headers = resolveOptional(args.headers, ctx) ?? {};
|
|
20
20
|
const body = resolveOptional(args.body, ctx);
|
|
21
|
-
await ctx.
|
|
21
|
+
await ctx.events.unsafeAppend({
|
|
22
22
|
aggregateId: randomUUID(),
|
|
23
23
|
aggregateType: STEP_DISPATCH_AGGREGATE_TYPE,
|
|
24
24
|
type: STEP_DISPATCH_REQUESTED_TYPE,
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { TemplateImagesVariableDef, TemplateListVariableDef, TemplateScalarVariableDef, TemplateVariables } from "@cosmicdrift/kumiko-types/config";
|
|
1
2
|
import * as z from "zod";
|
|
2
|
-
import type { Registry
|
|
3
|
+
import type { Registry } from "./types/index.ts";
|
|
3
4
|
type CommonOptions = {
|
|
4
5
|
readonly label?: string;
|
|
5
6
|
readonly required?: boolean;
|
|
@@ -1,31 +1,8 @@
|
|
|
1
|
-
export {
|
|
2
|
-
export type {
|
|
3
|
-
export type {
|
|
4
|
-
export type {
|
|
5
|
-
export type {
|
|
6
|
-
export
|
|
7
|
-
export type {
|
|
8
|
-
export type {
|
|
9
|
-
export type { FieldIconKey } from "@cosmicdrift/kumiko-types/field-icon";
|
|
10
|
-
export type { AnyFileFieldDef, BigIntFieldDef, BooleanFieldDef, ClientDerivedFieldDef, DateFieldDef, DecimalFieldDef, DefaultCurrency, DeriveContext, DerivedFieldDef, DerivedFieldsMap, DerivedValueType, EmbeddedDerivedCellDef, EmbeddedFieldDef, EmbeddedSubFieldDef, EntityDefinition, EntityEventMigration, EntityFieldDefinition, EntityIndexDef, EntityLongTextFieldDef, EntityTextFieldDef, FieldAccess, FieldDefinition, FieldsMap, FileFieldDef, FilesFieldDef, Findability, ImageFieldDef, ImagesFieldDef, JsonbFieldDef, LocatedTimestampFieldDef, LongTextFieldDef, LongTextFindability, MoneyCurrencySource, MoneyFieldDef, MultiSelectFieldDef, NumberFieldDef, OptionsQueryPayload, OptionsQueryPayloadValue, ParentRefDef, PersonalAnnotations, PersonalAnnotationsLongText, PersonalAnnotationsNoFind, PersonalSubject, ReferenceFieldDef, ResolvedPiiFlags, ResolvedPiiStance, RetentionDef, SelectFieldDef, SelectOptionTone, TextFieldDef, TimestampFieldDef, TransitionMap, TzFieldDef, } from "@cosmicdrift/kumiko-types/fields";
|
|
11
|
-
export type { AccessRule, ActiveMembership, ActiveMembershipRejection, ActiveMembershipResult, AgentExposure, AgentHandlerHints, AgentRisk, AggregateStreamHandle, AppContext, AppendEventArgs, AppendEventFn, AuthClaimsContext, AuthClaimsFn, AuthClaimsHookDef, BeforeTransactionPhase, BeforeTransactionResult, CamelToKebab, ChatSendFailureCode, ClaimKeyDefinition, ClaimKeyHandle, ClaimKeyJsType, ClaimKeyType, DeclarativeEventMigration, DeliveryErrorCode, DeliveryFailureCode, DeliverySkipReason, DispatchWriteRef, EntityRef, EscapeHatchAuditSink, EscapeHatchDeclaration, EscapeHatchKind, EscapeHatchReporter, EscapeHatchTarget, EscapeHatchUseEvent, EventDef, EventMigrationDef, EventPiiFields, EventPiiStance, EventUpcastCtx, EventUpcastFn, FetchForWritingArgs, HandlerContext, HandlerRef, JobContext, JobDeferral, JobRunnerRef, JobTriggerEvent, MemberReader, NameOrRef, NotifyDeferred, NotifyDelivery, NotifyDeliveryStatus, NotifyDispatched, NotifyFactory, NotifyFn, NotifyJobDispatcher, NotifyOptions, NotifyPriority, NotifyResult, OpenToAllAccessRule, OpenToAllDeclaration, OpenToAllPersonalData, PayloadBucketNormalization, PayloadRateLimitOption, PreparedWriteEvent, QualifiedEventName, QueryEvent, QueryHandlerDef, QueryHandlerFn, RateLimitDeclaration, RateLimitDisabled, RateLimitOption, RateLimitOptions, RateLimitPer, RoleAccessPersonalData, RoleAccessRule, SessionUser, SessionUserOrigin, StreamHandlerDef, StreamHandlerFn, TenantWriteTarget, TryAppendEventFn, TryAppendEventResult, UnsafeAppendEventFn, WriteEvent, WriteHandlerDef, WriteHandlerFn, WriteResult, } from "@cosmicdrift/kumiko-types/handlers";
|
|
12
|
-
export { DELIVERY_FAILURE_CODES, DELIVERY_SKIP_REASONS, declaredRateLimitOptions, HTTP_ERROR_CODE_PATTERN, isDeliveryErrorCode, isOpenToAllGranted, isRateLimitDisabled, isRateLimitOption, isUiAccessGranted, } from "@cosmicdrift/kumiko-types/handlers";
|
|
13
|
-
export type { DeleteContext, EntityHookMap, HookMap, HookOwner, HookPhase, LifecycleHookFn, LifecycleResult, OwnedFn, PhasedHook, PostDeleteBatchHookFn, PostDeleteHookFn, PostQueryHookFn, PostSaveBatchHookFn, PostSaveHookFn, PreDeleteHookFn, PreQueryHookFn, PreSaveHookFn, SaveContext, SearchPayloadContributorFn, ValidationError, ValidationHookFn, } from "@cosmicdrift/kumiko-types/hooks";
|
|
14
|
-
export type { HttpRouteDefinition, HttpRouteHandler, HttpRouteHandlerDeps, HttpRouteMethod, } from "@cosmicdrift/kumiko-types/http-route";
|
|
15
|
-
export type { EntityId, TenantId } from "@cosmicdrift/kumiko-types/identifiers";
|
|
16
|
-
export { isSystemTenant, isUuid, parseTenantId, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-types/identifiers";
|
|
17
|
-
export type { ContentCollectionDefinition, NavDefinition, NavIconKey, } from "@cosmicdrift/kumiko-types/nav";
|
|
18
|
-
export type { FromRule, FromRuleKind, OwnershipClause, OwnershipMap, OwnershipRef, OwnershipRule, SqlFragment, WhereRule, WhereRuleContext, } from "@cosmicdrift/kumiko-types/ownership";
|
|
19
|
-
export type { EntityProjectionExtension, MspErrorMode, MspErrorPolicy, MultiStreamApplyFn, MultiStreamProjectionDefinition, ProjectionDefinition, ProjectionRowIdOf, ProjectionTable, SingleStreamApplyFn, } from "@cosmicdrift/kumiko-types/projection";
|
|
20
|
-
export type { BelongsToRelation, EntityRelations, HasManyRelation, ManyToManyRelation, RelationDefinition, } from "@cosmicdrift/kumiko-types/relations";
|
|
21
|
-
export type { ActionFormScreenDefinition, BundledListsOptions, ConfigEditScreenDefinition, CustomScreenDefinition, CustomScreenRoute, DashboardChartMarkerKind, DashboardChartPanel, DashboardChartRangeOption, DashboardChartRanges, DashboardCurrencyFormat, DashboardCustomPanel, DashboardDateParam, DashboardFeedPanel, DashboardFilterDefinition, DashboardI18nText, DashboardListPanel, DashboardMoneyParam, DashboardPanelDefinition, DashboardPanelGate, DashboardPanelVisibility, DashboardProgressListPanel, DashboardProgressTone, DashboardRecordBinding, DashboardRefresh, DashboardRelativeTimeFormat, DashboardRelativeTimeParam, DashboardScreenDefinition, DashboardScreenPanel, DashboardStatGroupPanel, DashboardStatPanel, DashboardText, DashboardTextBlock, DashboardTextPanel, DashboardTextParam, DashboardValueFormat, EditExtensionSection, EditFieldPrefill, EditFieldSpec, EditFieldsSection, EditLayout, EditRelatedListSection, EditSectionSpec, EditWriteFormSection, EmbeddedListEditSpec, EntityEditAction, EntityEditActionPlacement, EntityEditScreenDefinition, EntityListExpandableRow, EntityListScreenDefinition, ExpandableRowGrouping, FieldCondition, FieldFormatRegistry, FieldRenderer, FormatSpec, FormFieldDerivation, FormWidth, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListPaginationMode, ListSortDir, ListSortSpec, ListTableOptions, MetricNavigate, MetricSpec, PlatformComponent, ProjectionDetailScreenDefinition, ProjectionListScreenDefinition, RecordHeaderSpec, RecordHeaderSubtitlePart, RowAction, RowActionNavigate, RowActionNavigateBase, RowActionWriteHandler, RowFieldExtractor, ScreenDefinition, ScreenFilter, ScreenFilterOp, ScreenNavSugar, ScreenSlots, SecretMintConfirmStep, SecretMintScreenDefinition, SecretReveal, SecretRevealField, SecretsEditScreenDefinition, SecretsEditSection, ToolbarAction, UnitKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
22
|
-
export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
23
|
-
export type { TargetRef } from "@cosmicdrift/kumiko-types/target-ref";
|
|
24
|
-
export type { Subscribe, TreeAction, TreeActionDef, TreeActionsHandle, TreeChildrenSubscribe, TreeNode, TreeNodeState, } from "@cosmicdrift/kumiko-types/tree-node";
|
|
25
|
-
export type { WebSocketConnection, WebSocketMessageData, WebSocketRouteConnectDeps, WebSocketRouteDefinition, WebSocketSessionHandlers, } from "@cosmicdrift/kumiko-types/websocket-route";
|
|
26
|
-
export type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
|
|
27
|
-
export type { ConcurrencyMode, ConfigScope, LifecycleHookType, OnDeleteStrategy, } from "../constants.ts";
|
|
28
|
-
export { DEFAULT_CURRENCIES, DEFAULT_LOCALES, isFileField } from "../field-helpers.ts";
|
|
29
|
-
export { resolveName, withResponseData } from "../handler-helpers.ts";
|
|
30
|
-
export { HookPhases } from "../hook-helpers.ts";
|
|
31
|
-
export { isExtensionEditSection, isFormatSpec, normalizeEditField, normalizeListColumn, } from "../screen-helpers.ts";
|
|
1
|
+
export type { JobRunIn } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
export type { FeatureDefinition, Registry, } from "@cosmicdrift/kumiko-types/feature";
|
|
3
|
+
export type { ReferenceFieldDef, TextFieldDef, } from "@cosmicdrift/kumiko-types/fields";
|
|
4
|
+
export type { AppContext, BeforeTransactionContext, ContextServices, EventPiiStance, HandlerAuth, HandlerContext, HandlerDb, HandlerDispatch, HandlerEvents, HandlerLifecycle, HandlerObservability, HandlerTenants, JobDispatch, JobEvents, JobLifecycle, JobObservability, QueryEvent, ReservationContext, SessionUser, } from "@cosmicdrift/kumiko-types/handlers";
|
|
5
|
+
export type { TenantId } from "@cosmicdrift/kumiko-types/identifiers";
|
|
6
|
+
export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-types/identifiers";
|
|
7
|
+
export type { WhereRule } from "@cosmicdrift/kumiko-types/ownership";
|
|
8
|
+
export type { WebSocketConnection, WebSocketRouteDefinition, } from "@cosmicdrift/kumiko-types/websocket-route";
|
|
@@ -1,10 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
//
|
|
3
|
-
export { isAgentVisibleScreen, resolveAgentExposure, } from "@cosmicdrift/kumiko-types/agent-exposure";
|
|
4
|
-
export { DELIVERY_FAILURE_CODES, DELIVERY_SKIP_REASONS, declaredRateLimitOptions, HTTP_ERROR_CODE_PATTERN, isDeliveryErrorCode, isOpenToAllGranted, isRateLimitDisabled, isRateLimitOption, isUiAccessGranted, } from "@cosmicdrift/kumiko-types/handlers";
|
|
5
|
-
export { isSystemTenant, isUuid, parseTenantId, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-types/identifiers";
|
|
6
|
-
export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
7
|
-
export { DEFAULT_CURRENCIES, DEFAULT_LOCALES, isFileField } from "../field-helpers.js";
|
|
8
|
-
export { resolveName, withResponseData } from "../handler-helpers.js";
|
|
9
|
-
export { HookPhases } from "../hook-helpers.js";
|
|
10
|
-
export { isExtensionEditSection, isFormatSpec, normalizeEditField, normalizeListColumn, } from "../screen-helpers.js";
|
|
1
|
+
export { SYSTEM_TENANT_ID } from "@cosmicdrift/kumiko-types/identifiers";
|
|
2
|
+
// Re-export types that were duplicated in types.ts but are canonical in constants.ts
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ValidationError } from "@cosmicdrift/kumiko-types/hooks";
|
|
2
|
+
import type { Registry } from "./types/index.ts";
|
|
2
3
|
export type { ValidationError };
|
|
3
4
|
export declare function runValidation(registry: Registry, hookName: string, data: Readonly<Record<string, unknown>>): readonly ValidationError[] | null;
|
|
@@ -1,39 +1,16 @@
|
|
|
1
1
|
import type { Hono } from "hono";
|
|
2
2
|
import type { AuthRoutesConfig } from "../api/auth-routes.ts";
|
|
3
|
-
import type { JwtHelper
|
|
3
|
+
import type { JwtHelper } from "../api/jwt.ts";
|
|
4
4
|
import type { ServerOptions } from "../api/server.ts";
|
|
5
5
|
import type { SseBroker } from "../api/sse-broker.ts";
|
|
6
|
-
import type {
|
|
7
|
-
import type {
|
|
8
|
-
import type { JobRunner, JobRunnerOptions } from "../jobs/job-runner.ts";
|
|
6
|
+
import type { AppContext } from "../engine/types/index.ts";
|
|
7
|
+
import type { JobRunner } from "../jobs/job-runner.ts";
|
|
9
8
|
import type { Lifecycle } from "../lifecycle/index.ts";
|
|
10
9
|
import type { ObservabilityProvider } from "../observability/index.ts";
|
|
11
|
-
import type { Dispatcher
|
|
12
|
-
import type {
|
|
13
|
-
import type { LifecycleHooks
|
|
14
|
-
|
|
15
|
-
readonly registry: Registry;
|
|
16
|
-
readonly context: AppContext;
|
|
17
|
-
readonly jwtSecret: string | JwtKeyring;
|
|
18
|
-
readonly jwtIssuer?: string;
|
|
19
|
-
readonly observability?: ObservabilityProvider;
|
|
20
|
-
readonly dispatcherOptions?: Omit<DispatcherOptions, "lifecycle">;
|
|
21
|
-
readonly systemHooks?: SystemHooks;
|
|
22
|
-
readonly eventDedup?: EventDedup;
|
|
23
|
-
readonly lifecycle?: Lifecycle;
|
|
24
|
-
readonly instanceId?: ServerOptions["instanceId"];
|
|
25
|
-
};
|
|
26
|
-
type JobsBlock = {
|
|
27
|
-
readonly redisUrl: string;
|
|
28
|
-
readonly queueNamePrefix?: string;
|
|
29
|
-
readonly getActiveTenantIds?: JobRunnerOptions["getActiveTenantIds"];
|
|
30
|
-
readonly onJobStart?: JobRunnerOptions["onJobStart"];
|
|
31
|
-
readonly onJobComplete?: JobRunnerOptions["onJobComplete"];
|
|
32
|
-
readonly onJobFailed?: JobRunnerOptions["onJobFailed"];
|
|
33
|
-
readonly onJobDeferred?: JobRunnerOptions["onJobDeferred"];
|
|
34
|
-
readonly onJobQueued?: JobRunnerOptions["onJobQueued"];
|
|
35
|
-
readonly onJobDropped?: JobRunnerOptions["onJobDropped"];
|
|
36
|
-
};
|
|
10
|
+
import type { Dispatcher } from "../pipeline/dispatcher.ts";
|
|
11
|
+
import type { EventDispatcher } from "../pipeline/index.ts";
|
|
12
|
+
import type { LifecycleHooks } from "../pipeline/lifecycle-pipeline.ts";
|
|
13
|
+
import type { AllInOneEntrypointOptions, BaseEntrypointOptions, JobsBlock, WorkerEntrypointOptions } from "./internals.ts";
|
|
37
14
|
export type ApiEntrypointOptions = BaseEntrypointOptions & {
|
|
38
15
|
readonly auth?: AuthRoutesConfig;
|
|
39
16
|
readonly anonymousAccess?: ServerOptions["anonymousAccess"];
|
|
@@ -52,10 +29,6 @@ export type ApiEntrypointOptions = BaseEntrypointOptions & {
|
|
|
52
29
|
readonly trustedProxyHops?: ServerOptions["trustedProxyHops"];
|
|
53
30
|
readonly errorDocs?: ServerOptions["errorDocs"];
|
|
54
31
|
};
|
|
55
|
-
export type WorkerEntrypointOptions = BaseEntrypointOptions & JobsBlock & {
|
|
56
|
-
readonly eventDispatcher?: ServerOptions["eventDispatcher"];
|
|
57
|
-
};
|
|
58
|
-
export type AllInOneEntrypointOptions = ApiEntrypointOptions & WorkerEntrypointOptions;
|
|
59
32
|
export type ApiEntrypoint = {
|
|
60
33
|
readonly app: Hono;
|
|
61
34
|
readonly jwt: JwtHelper;
|
|
@@ -87,4 +60,3 @@ export type AllInOneEntrypoint = Omit<ApiEntrypoint, "mode"> & Omit<WorkerEntryp
|
|
|
87
60
|
export declare function createApiEntrypoint(options: ApiEntrypointOptions): ApiEntrypoint;
|
|
88
61
|
export declare function createWorkerEntrypoint(options: WorkerEntrypointOptions): WorkerEntrypoint;
|
|
89
62
|
export declare function createAllInOneEntrypoint(options: AllInOneEntrypointOptions): AllInOneEntrypoint;
|
|
90
|
-
export type { PgClient, PgListenClient };
|
package/dist/entrypoint/index.js
CHANGED
|
@@ -47,6 +47,7 @@ import { createLifecycle } from "../lifecycle/index.js";
|
|
|
47
47
|
import { createNoopProvider } from "../observability/index.js";
|
|
48
48
|
import { dispatcherToWriteRef } from "../pipeline/dispatcher.js";
|
|
49
49
|
import { resolveCacheSyncBus } from "../redis/cache-sync-bus.js";
|
|
50
|
+
import { assertEntrypointRowLevelSecurityMode } from "./row-level-security-mode-check.js";
|
|
50
51
|
// --- Shared builders ------------------------------------------------------
|
|
51
52
|
//
|
|
52
53
|
// Three factories, three near-identical buildServer() + createJobRunner()
|
|
@@ -95,7 +96,7 @@ function contextWithObservability(context, observability, effectiveFeatures) {
|
|
|
95
96
|
return {
|
|
96
97
|
...context,
|
|
97
98
|
// Same source of truth as buildServer's contextWithObservability
|
|
98
|
-
// (api/server.ts) — job handlers reading ctx.effectiveFeatures should
|
|
99
|
+
// (api/server.ts) — job handlers reading ctx.services.effectiveFeatures should
|
|
99
100
|
// see the same resolver as command handlers, not just dispatcherOptions.
|
|
100
101
|
...(effectiveFeatures && { effectiveFeatures }),
|
|
101
102
|
tracer: observability.tracer,
|
|
@@ -199,6 +200,7 @@ function requireDispatcher(server, mode) {
|
|
|
199
200
|
}
|
|
200
201
|
// --- API entrypoint -------------------------------------------------------
|
|
201
202
|
export function createApiEntrypoint(options) {
|
|
203
|
+
assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
|
|
202
204
|
const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
|
|
203
205
|
const observability = resolveObservability(options.observability);
|
|
204
206
|
const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
|
|
@@ -267,6 +269,7 @@ export function createApiEntrypoint(options) {
|
|
|
267
269
|
}
|
|
268
270
|
// --- Worker entrypoint ----------------------------------------------------
|
|
269
271
|
export function createWorkerEntrypoint(options) {
|
|
272
|
+
assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
|
|
270
273
|
const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
|
|
271
274
|
const observability = resolveObservability(options.observability);
|
|
272
275
|
const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
|
|
@@ -293,6 +296,7 @@ export function createWorkerEntrypoint(options) {
|
|
|
293
296
|
}
|
|
294
297
|
// --- All-in-one entrypoint ------------------------------------------------
|
|
295
298
|
export function createAllInOneEntrypoint(options) {
|
|
299
|
+
assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
|
|
296
300
|
const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
|
|
297
301
|
const observability = resolveObservability(options.observability);
|
|
298
302
|
const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
|
|
@@ -339,3 +343,5 @@ export function createAllInOneEntrypoint(options) {
|
|
|
339
343
|
},
|
|
340
344
|
};
|
|
341
345
|
}
|
|
346
|
+
// Re-exported so callers of ServerOptions.eventDispatcher can name the
|
|
347
|
+
// LISTEN client type it references.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { JwtKeyring } from "../api/jwt.ts";
|
|
2
|
+
import type { ServerOptions } from "../api/server.ts";
|
|
3
|
+
import type { RowLevelSecurityMode } from "../db/render-rls-ddl.ts";
|
|
4
|
+
import type { AppContext, Registry } from "../engine/types/index.ts";
|
|
5
|
+
import type { JobRunnerOptions } from "../jobs/job-runner.ts";
|
|
6
|
+
import type { Lifecycle } from "../lifecycle/index.ts";
|
|
7
|
+
import type { ObservabilityProvider } from "../observability/index.ts";
|
|
8
|
+
import type { DispatcherOptions } from "../pipeline/dispatcher.ts";
|
|
9
|
+
import type { EventDedup } from "../pipeline/event-dedup.ts";
|
|
10
|
+
import type { SystemHooks } from "../pipeline/lifecycle-pipeline.ts";
|
|
11
|
+
import type { ApiEntrypointOptions } from "./index.ts";
|
|
12
|
+
export type BaseEntrypointOptions = {
|
|
13
|
+
readonly registry: Registry;
|
|
14
|
+
readonly context: AppContext;
|
|
15
|
+
readonly jwtSecret: string | JwtKeyring;
|
|
16
|
+
readonly jwtIssuer?: string;
|
|
17
|
+
readonly observability?: ObservabilityProvider;
|
|
18
|
+
readonly dispatcherOptions?: Omit<DispatcherOptions, "lifecycle">;
|
|
19
|
+
readonly systemHooks?: SystemHooks;
|
|
20
|
+
readonly eventDedup?: EventDedup;
|
|
21
|
+
readonly lifecycle?: Lifecycle;
|
|
22
|
+
readonly instanceId?: ServerOptions["instanceId"];
|
|
23
|
+
/** Must equal the mode of `context.db`; default "off". */
|
|
24
|
+
readonly rowLevelSecurity?: RowLevelSecurityMode;
|
|
25
|
+
};
|
|
26
|
+
export type JobsBlock = {
|
|
27
|
+
readonly redisUrl: string;
|
|
28
|
+
readonly queueNamePrefix?: string;
|
|
29
|
+
readonly getActiveTenantIds?: JobRunnerOptions["getActiveTenantIds"];
|
|
30
|
+
readonly onJobStart?: JobRunnerOptions["onJobStart"];
|
|
31
|
+
readonly onJobComplete?: JobRunnerOptions["onJobComplete"];
|
|
32
|
+
readonly onJobFailed?: JobRunnerOptions["onJobFailed"];
|
|
33
|
+
readonly onJobDeferred?: JobRunnerOptions["onJobDeferred"];
|
|
34
|
+
readonly onJobQueued?: JobRunnerOptions["onJobQueued"];
|
|
35
|
+
readonly onJobDropped?: JobRunnerOptions["onJobDropped"];
|
|
36
|
+
};
|
|
37
|
+
export type WorkerEntrypointOptions = BaseEntrypointOptions & JobsBlock & {
|
|
38
|
+
readonly eventDispatcher?: ServerOptions["eventDispatcher"];
|
|
39
|
+
};
|
|
40
|
+
export type AllInOneEntrypointOptions = ApiEntrypointOptions & WorkerEntrypointOptions;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|