@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,9 +1,9 @@
|
|
|
1
1
|
// Nav validation + collectKnownRoles (role synthesis for ownership
|
|
2
2
|
// validation in index.ts — thematically adjacent to ownership.ts, kept
|
|
3
3
|
// here since this is a structural move, not a semantic reorg).
|
|
4
|
+
import { isOpenToAllGranted } from "@cosmicdrift/kumiko-types/handlers";
|
|
4
5
|
import { createFallbackLogger } from "../../logging/utils.js";
|
|
5
6
|
import { qualifyEntityName } from "../qualified-name.js";
|
|
6
|
-
import { isOpenToAllGranted } from "../types/index.js";
|
|
7
7
|
const log = createFallbackLogger("kumiko:boot");
|
|
8
8
|
export function collectWriteHandlerQns(features) {
|
|
9
9
|
const set = new Set();
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { ClaimKeyDefinition } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
2
|
import { type OwnershipMap, type WhereRule } from "../ownership.ts";
|
|
2
|
-
import type {
|
|
3
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
3
4
|
export type WhereRuleProbe = {
|
|
4
5
|
readonly table: unknown;
|
|
5
6
|
readonly tableName: string;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type { EntityDefinition
|
|
1
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
2
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
2
3
|
export declare function findEntity(featureMap: ReadonlyMap<string, FeatureDefinition>, entityName: string): EntityDefinition | undefined;
|
|
3
4
|
export declare function validateParentRefs(feature: FeatureDefinition, featureMap: ReadonlyMap<string, FeatureDefinition>): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
|
|
2
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
2
3
|
export declare function buildQueryHandlerMap(features: readonly FeatureDefinition[]): ReadonlyMap<string, QueryHandlerDef>;
|
|
3
4
|
export declare function validateProjectionListScreens(features: readonly FeatureDefinition[]): void;
|
|
4
5
|
export declare function validateRelatedListSectionQueries(features: readonly FeatureDefinition[]): void;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
|
|
2
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
2
3
|
export declare function checkQueryRef(queryHandlers: ReadonlyMap<string, QueryHandlerDef>, query: string, buildPrefix: () => string): void;
|
|
3
4
|
export declare function validateQueryRefs(features: readonly FeatureDefinition[]): void;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { EntityDefinition, FieldDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
1
2
|
import type { FieldsOrGroupsSection } from "../screen-helpers.ts";
|
|
2
|
-
import type {
|
|
3
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
3
4
|
import type { ActionFormScreenDefinition, ConfigEditScreenDefinition, EditFieldSpec, EditLayout, SecretMintScreenDefinition } from "../types/screen.ts";
|
|
4
5
|
import type { NavigateTargetLookups } from "./screens-actions.ts";
|
|
5
6
|
export declare function validateEditFieldExtras(featureName: string, screenId: string, entityDef: EntityDefinition, fieldSpec: Exclude<EditFieldSpec, string>): void;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
|
+
import type { ConfigKeyDefinition } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
1
3
|
import { type normalizeListColumn } from "../screen-helpers.ts";
|
|
2
|
-
import type {
|
|
4
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
3
5
|
import type { EditExtensionSection, EditFieldsSection, EditSectionSpec, RowAction } from "../types/screen.ts";
|
|
4
6
|
import type { NavigateSourceScreenType, NavigateTargetLookups } from "./screens-actions.ts";
|
|
5
7
|
import { type resolveRowActionNavigateTarget } from "./screens-actions.ts";
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ConfigKeyDefinition
|
|
1
|
+
import type { ConfigKeyDefinition } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
2
3
|
import type { ScreenDefinition } from "../types/screen.ts";
|
|
3
4
|
export { readsNavigateParamsAsFormPrefill, resolveScreenTargetQn, rowFieldExtractorKeys, validateActionFieldRefs, validateActionHasIcon, validateDrawerPrefillKeys, validateScreenShortIdCollisions, } from "./screens-actions.ts";
|
|
4
5
|
export { validateDashboardCustomPanel, validateDashboardScreenPanel } from "./screens-dashboard.ts";
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { NavDefinition } from "@cosmicdrift/kumiko-types/nav";
|
|
2
|
+
import type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
|
|
3
|
+
import type { FeatureDefinition } from "../types/index.ts";
|
|
2
4
|
export declare function collectWorkspaceQns(features: readonly FeatureDefinition[]): Map<string, WorkspaceDefinition & {
|
|
3
5
|
readonly featureName: string;
|
|
4
6
|
}>;
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
import type { HandlerContext, SessionUser } from "./types/index.ts";
|
|
1
|
+
import type { ContextServices, HandlerContext, HandlerDispatch, HandlerObservability, SessionUser } from "./types/index.ts";
|
|
2
2
|
export declare function bridgeStub(opts?: {
|
|
3
3
|
readonly user?: SessionUser;
|
|
4
|
-
|
|
4
|
+
readonly log?: HandlerObservability["log"];
|
|
5
|
+
readonly dispatch?: Partial<HandlerDispatch>;
|
|
6
|
+
readonly services?: Partial<ContextServices>;
|
|
7
|
+
}): Pick<HandlerContext, "dispatch" | "events" | "auth" | "obs" | "hasFeature" | "tz" | "locale" | "user" | "services" | "lifecycle" | "tenants">;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { DEFAULT_LOCALE } from "../i18n/request-locale.js";
|
|
2
|
-
import {
|
|
2
|
+
import { createFallbackFullLogger } from "../logging/utils.js";
|
|
3
|
+
import { getFallbackTracer } from "../observability/fallback.js";
|
|
4
|
+
import { createNoopMetricsHandle } from "../observability/index.js";
|
|
3
5
|
import { createTzContext } from "../time/index.js";
|
|
4
6
|
import { createAnonymousUser } from "./system-user.js";
|
|
5
7
|
// Test/service helper: cross-feature bridge methods that throw on use.
|
|
@@ -7,7 +9,7 @@ import { createAnonymousUser } from "./system-user.js";
|
|
|
7
9
|
// Production code always receives a full HandlerContext from the Dispatcher's
|
|
8
10
|
// buildHandlerContext (with real query/write closures). Some internal services
|
|
9
11
|
// and tests construct a mini-context manually (typically just `{ db, registry }`)
|
|
10
|
-
// to invoke a single handler. Those call sites don't use ctx.query/write —
|
|
12
|
+
// to invoke a single handler. Those call sites don't use ctx.dispatch.query/write —
|
|
11
13
|
// the stubs make the TypeScript shape match while still failing loudly if
|
|
12
14
|
// anything downstream accidentally reaches for them.
|
|
13
15
|
//
|
|
@@ -15,7 +17,7 @@ import { createAnonymousUser } from "./system-user.js";
|
|
|
15
17
|
const notAvailable = (what) => async (..._args) => {
|
|
16
18
|
throw new Error(`ctx.${what} not available in this context — use the dispatcher, not a stubbed handler context`);
|
|
17
19
|
};
|
|
18
|
-
// Noop observability — hand back the shared fallback tracer so ctx.tracer has
|
|
20
|
+
// Noop observability — hand back the shared fallback tracer so ctx.obs.tracer has
|
|
19
21
|
// a valid Tracer shape. No allocations per call.
|
|
20
22
|
const noopTracer = getFallbackTracer();
|
|
21
23
|
export function bridgeStub(opts) {
|
|
@@ -27,35 +29,48 @@ export function bridgeStub(opts) {
|
|
|
27
29
|
const stubUser = opts?.user ?? createAnonymousUser("00000000-0000-0000-0000-000000000000");
|
|
28
30
|
return {
|
|
29
31
|
user: stubUser,
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
32
|
+
dispatch: {
|
|
33
|
+
query: notAvailable("dispatch.query"),
|
|
34
|
+
queryAs: notAvailable("dispatch.queryAs"),
|
|
35
|
+
write: notAvailable("dispatch.write"),
|
|
36
|
+
writeAs: notAvailable("dispatch.writeAs"),
|
|
37
|
+
queryAsMember: notAvailable("dispatch.queryAsMember"),
|
|
38
|
+
queryProjection: notAvailable("dispatch.queryProjection"),
|
|
39
|
+
...opts?.dispatch,
|
|
40
|
+
},
|
|
41
|
+
events: {
|
|
42
|
+
append: notAvailable("events.append"),
|
|
43
|
+
unsafeAppend: notAvailable("events.unsafeAppend"),
|
|
44
|
+
tryAppend: notAvailable("events.tryAppend"),
|
|
45
|
+
fetchForWriting: notAvailable("events.fetchForWriting"),
|
|
46
|
+
load: notAvailable("events.load"),
|
|
47
|
+
archive: notAvailable("events.archive"),
|
|
48
|
+
restore: notAvailable("events.restore"),
|
|
49
|
+
isArchived: notAvailable("events.isArchived"),
|
|
50
|
+
snapshot: notAvailable("events.snapshot"),
|
|
51
|
+
loadWithSnapshot: notAvailable("events.loadWithSnapshot"),
|
|
52
|
+
},
|
|
53
|
+
auth: {
|
|
54
|
+
resolveClaims: notAvailable("auth.resolveClaims"),
|
|
55
|
+
resolveActiveMembership: notAvailable("auth.resolveActiveMembership"),
|
|
56
|
+
},
|
|
48
57
|
// Stub defaults to always-enabled — matches the dispatcher's behaviour
|
|
49
58
|
// when no effectiveFeatures resolver is wired (tests without toggles).
|
|
50
59
|
hasFeature: async () => true,
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
obs: {
|
|
61
|
+
log: opts?.log ?? createFallbackFullLogger("bridge-stub"),
|
|
62
|
+
tracer: noopTracer,
|
|
63
|
+
metrics: createNoopMetricsHandle(),
|
|
64
|
+
metricsFor: () => createNoopMetricsHandle(),
|
|
65
|
+
},
|
|
54
66
|
// Real TzContext, not notAvailable — test code uses ctx.tz routinely,
|
|
55
67
|
// it isn't a "bridge" concept. Defaults to UTC.
|
|
56
68
|
tz: createTzContext(),
|
|
57
69
|
// Same reasoning as tz above — ctx.locale is always-present, not a
|
|
58
70
|
// bridge method. Defaults to DEFAULT_LOCALE.
|
|
59
71
|
locale: DEFAULT_LOCALE,
|
|
72
|
+
services: { extensions: {}, ...opts?.services },
|
|
73
|
+
lifecycle: {},
|
|
74
|
+
tenants: {},
|
|
60
75
|
};
|
|
61
76
|
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { ConfigBacking, ConfigBounds, ConfigComputedFn, ConfigKeyDefinition, ConfigKeyType, ConfigMask, ConfigSeedDef, ConfigValidateFn, ConfigValue, CreateSeedOptions, CreateTenantSeedOptions
|
|
1
|
+
import type { ConfigBacking, ConfigBounds, ConfigComputedFn, ConfigKeyDefinition, ConfigKeyType, ConfigMask, ConfigSeedDef, ConfigValidateFn, ConfigValue, CreateSeedOptions, CreateTenantSeedOptions } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
import type { OptionsQueryPayload } from "@cosmicdrift/kumiko-types/fields";
|
|
2
3
|
export declare function isEncryptedAtRest(def: Pick<ConfigKeyDefinition, "encrypted" | "backing">): boolean;
|
|
3
4
|
export declare const access: {
|
|
4
5
|
readonly all: readonly string[];
|
|
@@ -41,5 +42,4 @@ export declare function createUserConfig<T extends ConfigKeyType>(type: T, opts?
|
|
|
41
42
|
export declare function createSeed(opts: CreateSeedOptions): ConfigSeedDef;
|
|
42
43
|
export declare function createSystemSeed(opts: CreateSeedOptions): ConfigSeedDef;
|
|
43
44
|
export declare function createTenantSeed(opts: CreateSeedOptions, options?: CreateTenantSeedOptions): ConfigSeedDef;
|
|
44
|
-
export declare function createUserSeed(opts: CreateSeedOptions, options: CreateUserSeedOptions): ConfigSeedDef;
|
|
45
45
|
export {};
|
|
@@ -114,12 +114,3 @@ export function createTenantSeed(opts, options) {
|
|
|
114
114
|
// User-scope seed. Both tenantId AND userId are required — the resolver
|
|
115
115
|
// matches against the user's actual tenantId, so a seed under
|
|
116
116
|
// SYSTEM_TENANT_ID would never resolve.
|
|
117
|
-
export function createUserSeed(opts, options) {
|
|
118
|
-
return {
|
|
119
|
-
value: opts.value,
|
|
120
|
-
scope: "user",
|
|
121
|
-
key: "",
|
|
122
|
-
tenantId: options.tenantId,
|
|
123
|
-
userId: options.userId,
|
|
124
|
-
};
|
|
125
|
-
}
|
|
@@ -5,24 +5,14 @@ import type { TenantId } from "./types/identifiers.ts";
|
|
|
5
5
|
export declare const SystemHookNames: {
|
|
6
6
|
readonly cascadeDelete: "system:hook:cascade-delete";
|
|
7
7
|
};
|
|
8
|
-
export type SystemHookName = (typeof SystemHookNames)[keyof typeof SystemHookNames];
|
|
9
8
|
export declare const SystemHookPriorities: {
|
|
10
9
|
readonly cascadeDelete: 500;
|
|
11
10
|
};
|
|
12
|
-
export declare const MessageKind: {
|
|
13
|
-
readonly write: "write";
|
|
14
|
-
readonly query: "query";
|
|
15
|
-
readonly command: "command";
|
|
16
|
-
readonly shared: "shared";
|
|
17
|
-
readonly broadcast: "broadcast";
|
|
18
|
-
};
|
|
19
|
-
export type MessageKind = (typeof MessageKind)[keyof typeof MessageKind];
|
|
20
11
|
export declare const LifecycleHookTypes: {
|
|
21
12
|
readonly preSave: "preSave";
|
|
22
13
|
readonly postSave: "postSave";
|
|
23
14
|
readonly preDelete: "preDelete";
|
|
24
15
|
readonly postDelete: "postDelete";
|
|
25
|
-
readonly preQuery: "preQuery";
|
|
26
16
|
readonly postQuery: "postQuery";
|
|
27
17
|
};
|
|
28
18
|
export type LifecycleHookType = (typeof LifecycleHookTypes)[keyof typeof LifecycleHookTypes];
|
package/dist/engine/constants.js
CHANGED
|
@@ -12,20 +12,12 @@ export const SystemHookPriorities = {
|
|
|
12
12
|
cascadeDelete: 500,
|
|
13
13
|
};
|
|
14
14
|
// --- Message Kinds ---
|
|
15
|
-
export const MessageKind = {
|
|
16
|
-
write: "write",
|
|
17
|
-
query: "query",
|
|
18
|
-
command: "command",
|
|
19
|
-
shared: "shared",
|
|
20
|
-
broadcast: "broadcast",
|
|
21
|
-
};
|
|
22
15
|
// --- Lifecycle Hook Types ---
|
|
23
16
|
export const LifecycleHookTypes = {
|
|
24
17
|
preSave: "preSave",
|
|
25
18
|
postSave: "postSave",
|
|
26
19
|
preDelete: "preDelete",
|
|
27
20
|
postDelete: "postDelete",
|
|
28
|
-
preQuery: "preQuery",
|
|
29
21
|
postQuery: "postQuery",
|
|
30
22
|
};
|
|
31
23
|
// --- Config Scopes ---
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { validateBoot } from "./boot-validator.js";
|
|
2
2
|
import { dedupeFeatures } from "./dedupe-features.js";
|
|
3
|
+
import { DEFAULT_CURRENCIES } from "./field-helpers.js";
|
|
3
4
|
import { createRegistry } from "./registry.js";
|
|
4
|
-
import { DEFAULT_CURRENCIES } from "./types/index.js";
|
|
5
5
|
// Every field map an entity-less inline form screen renders: actionForm's and
|
|
6
6
|
// secretMint's own fields, plus a secretMint's separate `confirm` step.
|
|
7
7
|
function inlineFormFieldMaps(screen) {
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { FeatureRegistrar } from "@cosmicdrift/kumiko-types/feature-registrar";
|
|
2
|
+
import type { FeatureDefinition } from "./types/index.ts";
|
|
2
3
|
export type DefineFeatureSettings = {
|
|
3
4
|
readonly dedupeOptions?: Readonly<Record<string, unknown>>;
|
|
4
5
|
};
|
|
@@ -12,7 +12,7 @@ import { isObjectArgument, throwObjectArgumentRequired, unwrapArrayForm } from "
|
|
|
12
12
|
// the call-site (`defineFeature("driverOrders", ...)` → TName="driverOrders").
|
|
13
13
|
// The literal threads into the FeatureRegistrar so r.defineEvent's return
|
|
14
14
|
// carries `name: "driver-orders:event:foo"` as a literal — strict-mode
|
|
15
|
-
// for `ctx.
|
|
15
|
+
// for `ctx.events.append({ type: eventDef.name, ... })` lights up. Apps
|
|
16
16
|
// that don't care can keep the default-string and use the wrapper-based
|
|
17
17
|
// strict-mode (string-literal types per call-site) like before.
|
|
18
18
|
// optionalRequires accepts either variadic strings or a single `{ features }` object; requires
|
|
@@ -116,7 +116,6 @@ export function defineFeature(name, setup, settings) {
|
|
|
116
116
|
postSave: state.phasedLifecycleHooks.postSave,
|
|
117
117
|
preDelete: state.phasedLifecycleHooks.preDelete,
|
|
118
118
|
postDelete: state.phasedLifecycleHooks.postDelete,
|
|
119
|
-
preQuery: state.lifecycleHooks["preQuery"] ?? {},
|
|
120
119
|
postQuery: state.lifecycleHooks["postQuery"] ?? {},
|
|
121
120
|
// @cast-boundary engine-bridge — hook registration erases the per-slot
|
|
122
121
|
// signatures to LifecycleHookFn (a union; see the cast in
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import type { CursorResult } from "@cosmicdrift/kumiko-types/cursor-types";
|
|
2
|
+
import type { KumikoEventTypeMap } from "@cosmicdrift/kumiko-types/event-type-map";
|
|
2
3
|
import type { ZodType } from "zod";
|
|
3
4
|
import type { ContainsSecret } from "../secrets/types.ts";
|
|
4
5
|
import type { QueryHandlerDefinition, WriteHandlerDefinition, WriteHandlerInput } from "./types/define-handler.ts";
|
|
5
|
-
import type { KumikoEventTypeMap } from "./types/index.ts";
|
|
6
6
|
export type { QueryHandlerDefinition, StreamHandlerDefinition, WriteHandlerDefinition, WriteHandlerInput, } from "./types/define-handler.ts";
|
|
7
7
|
export declare function defineWriteHandler<const TName extends string, TSchema extends ZodType, TData = unknown, TMap extends object = KumikoEventTypeMap, TPrepared = undefined>(def: WriteHandlerInput<TName, TSchema, TData, TMap, TPrepared>, ..._noSecretInResponse: true extends ContainsSecret<TData> ? [
|
|
8
8
|
secretLeak: "A handler response must not contain a Secret<> — call .reveal() and return the plaintext, or drop the field."
|
|
@@ -1,4 +1,3 @@
|
|
|
1
1
|
import type { StepDef, StepKind } from "./types/step.ts";
|
|
2
2
|
export declare function defineStep<TArgs, TResult>(def: StepDef<TArgs, TResult>): StepDef<TArgs, TResult>;
|
|
3
3
|
export declare function getStep(kind: StepKind): StepDef | undefined;
|
|
4
|
-
export declare function listStepKinds(): readonly StepKind[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { EmbeddedDerivedCellDef, EmbeddedSubFieldDef } from "
|
|
1
|
+
import type { EmbeddedDerivedCellDef, EmbeddedSubFieldDef } from "@cosmicdrift/kumiko-types/fields";
|
|
2
2
|
/** Computes a derived cell from its source values. Missing/non-numeric
|
|
3
3
|
* sources: "multiply"/"percent" with any missing source → undefined; "sum"/"subtract"
|
|
4
4
|
* treat missing as 0 only when at least one source is present — if every
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
2
|
+
import type { AccessRule, EscapeHatchDeclaration, QueryHandlerDef, WriteHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
3
|
import * as z from "zod";
|
|
2
4
|
import { type EventStoreExecutor } from "../db/event-store-executor.ts";
|
|
3
5
|
import { type EntityRow, type EntityTable } from "../db/table-builder.ts";
|
|
4
6
|
import type { EntityCrudRegistrar, EntityHandlerOptions, EntityQueryHandlerOptions, EntityWriteHandlerOptions, RegisterEntityCrudOptions } from "./types/entity-handlers.ts";
|
|
5
|
-
import type { AccessRule, EntityDefinition, EscapeHatchDeclaration, QueryHandlerDef, WriteHandlerDef } from "./types/index.ts";
|
|
6
7
|
export type { EntityCrudHandlerDefaults, EntityCrudRegistrar, EntityCrudVerb, EntityHandlerOptions, EntityQueryHandlerOptions, EntityWriteHandlerOptions, RegisterEntityCrudOptions, } from "./types/entity-handlers.ts";
|
|
7
8
|
export declare function assertEscapeHatchAccessIsSystemAdminOnly(name: string, kind: "write" | "query", access: AccessRule): void;
|
|
8
9
|
export declare const MAX_LIST_LIMIT = 200;
|
|
@@ -41,7 +41,7 @@ import { parseTenantId } from "./types/identifiers.js";
|
|
|
41
41
|
// r.queryHandler(defineEntityDetailHandler("note", noteEntity, { access }))
|
|
42
42
|
//
|
|
43
43
|
// For custom logic (default values, business rules, side effects, custom
|
|
44
|
-
// executors with ctx.searchAdapter, ...) write the handler explicitly with
|
|
44
|
+
// executors with ctx.services.searchAdapter, ...) write the handler explicitly with
|
|
45
45
|
// r.writeHandler / r.queryHandler — these helpers cover the standard path only.
|
|
46
46
|
//
|
|
47
47
|
// Note on the `as` casts in the handler bodies: WriteHandlerDef.handler's
|
|
@@ -252,7 +252,7 @@ export function defineEntityWriteHandler(name, entity, options) {
|
|
|
252
252
|
case "create":
|
|
253
253
|
schema = buildInsertSchema(entity, undefined, excludedFields, { allowCallerId: true });
|
|
254
254
|
handler = async (event, ctx) => {
|
|
255
|
-
const { runPreSave } = ctx;
|
|
255
|
+
const { lifecycle: { runPreSave }, } = ctx;
|
|
256
256
|
// A caller-chosen id (deterministic-id idempotent creates) is only
|
|
257
257
|
// honored for a system-identity caller (jobs/hooks via
|
|
258
258
|
// createSystemUser) — an HTTP-authenticated end user can never
|
|
@@ -273,7 +273,7 @@ export function defineEntityWriteHandler(name, entity, options) {
|
|
|
273
273
|
changes: buildUpdateSchema(entity, undefined, excludedFields),
|
|
274
274
|
});
|
|
275
275
|
handler = async (event, ctx) => {
|
|
276
|
-
const { runPreSave } = ctx;
|
|
276
|
+
const { lifecycle: { runPreSave }, } = ctx;
|
|
277
277
|
const db = dbFor(ctx);
|
|
278
278
|
const submitted = event.payload; // @cast-boundary engine-payload
|
|
279
279
|
const payload = {
|
|
@@ -509,7 +509,7 @@ export function createEntityExecutor(entityName, entity) {
|
|
|
509
509
|
// );
|
|
510
510
|
//
|
|
511
511
|
// For anything more involved (filters, joins, custom shaping), write the
|
|
512
|
-
// query-handler explicitly with ctx.queryProjection or a raw select.
|
|
512
|
+
// query-handler explicitly with ctx.dispatch.queryProjection or a raw select.
|
|
513
513
|
export function defineProjectionQueryHandler(name, projectionQualifiedName, options) {
|
|
514
514
|
if (typeof options.unsafeAllTenants === "object") {
|
|
515
515
|
assertReason(`"${name}": unsafeAllTenants`, options.unsafeAllTenants.reason);
|
|
@@ -521,11 +521,11 @@ export function defineProjectionQueryHandler(name, projectionQualifiedName, opti
|
|
|
521
521
|
return {
|
|
522
522
|
name,
|
|
523
523
|
schema: z.object({}),
|
|
524
|
-
// Returns the raw row array — matches ctx.queryProjection's shape so the
|
|
525
|
-
// helper is a drop-in for the inline `async (_q, ctx) => ctx.queryProjection(...)`
|
|
524
|
+
// Returns the raw row array — matches ctx.dispatch.queryProjection's shape so the
|
|
525
|
+
// helper is a drop-in for the inline `async (_q, ctx) => ctx.dispatch.queryProjection(...)`
|
|
526
526
|
// handler. Wrap the result in the caller's handler when you need
|
|
527
527
|
// pagination envelopes or added metadata.
|
|
528
|
-
handler: async (_query, ctx) => ctx.queryProjection(projectionQualifiedName, options.unsafeAllTenants ? { unsafeAllTenants: true } : undefined), // @wrapper-known semantic-alias
|
|
528
|
+
handler: async (_query, ctx) => ctx.dispatch.queryProjection(projectionQualifiedName, options.unsafeAllTenants ? { unsafeAllTenants: true } : undefined), // @wrapper-known semantic-alias
|
|
529
529
|
access: options.access,
|
|
530
530
|
...(escapeHatch && { escapeHatch }),
|
|
531
531
|
};
|
|
@@ -6,7 +6,9 @@ export function entityListRuntime(ctx, entityName, user) {
|
|
|
6
6
|
const resolveEntity = (name) => ctx.registry.getEntity(name);
|
|
7
7
|
return {
|
|
8
8
|
runtimeOptions: {
|
|
9
|
-
...(ctx.searchAdapter !== undefined && {
|
|
9
|
+
...(ctx.services.searchAdapter !== undefined && {
|
|
10
|
+
searchAdapter: ctx.services.searchAdapter,
|
|
11
|
+
}),
|
|
10
12
|
...(ctx.includeDeleted === true && { includeDeleted: true }),
|
|
11
13
|
referenceSearch: { fields: ctx.registry.getSearchableReferences(entityName), resolveEntity },
|
|
12
14
|
referenceSort: { fields: ctx.registry.getSortableReferences(entityName), resolveEntity },
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import type { EntityDefinition
|
|
1
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
2
|
+
import type { QueryHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
|
|
2
3
|
export declare function resolveEntityBehindListQuery(queryQn: string, handler: QueryHandlerDef | undefined, lookupEntity: (entityName: string) => EntityDefinition | undefined): EntityDefinition | undefined;
|
|
3
4
|
/** True when the list query is an entity-convention one over an entity with no
|
|
4
5
|
* searchable field — a search box would never match anything. */
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { EventDef, QualifiedEventName } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
2
|
import { type ZodType } from "zod";
|
|
2
|
-
import type {
|
|
3
|
+
import type { EventPiiStance } from "./types/index.ts";
|
|
3
4
|
export type CreateEventDefOptions<TFeature extends string, TInner extends string, TPayload> = {
|
|
4
5
|
readonly feature: TFeature;
|
|
5
6
|
readonly name: TInner;
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import type { AppendEventArgs, EventDef, HandlerContext } from "./types/handlers.ts";
|
|
2
|
-
export type EmitCtx =
|
|
2
|
+
export type EmitCtx = {
|
|
3
|
+
readonly events: Pick<HandlerContext["events"], "unsafeAppend">;
|
|
4
|
+
};
|
|
3
5
|
export declare function emitEvent<TPayload>(ctx: EmitCtx, eventDef: EventDef<TPayload>, args: {
|
|
4
6
|
readonly aggregateId: string;
|
|
5
7
|
readonly aggregateType: string;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
// Typed wrapper around ctx.
|
|
1
|
+
// Typed wrapper around ctx.events.append. Two wins over the raw call:
|
|
2
2
|
//
|
|
3
3
|
// 1. The payload is checked against the EventDef's inferred TPayload,
|
|
4
4
|
// so a Zod-schema mismatch becomes a compile error at the emit site
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
//
|
|
15
15
|
// aggregateType stays explicit on purpose — the EventDef doesn't know which
|
|
16
16
|
// aggregate owns an event (cross-feature reuse is legal). Use the raw
|
|
17
|
-
// ctx.
|
|
17
|
+
// ctx.events.append when the event name is computed at runtime.
|
|
18
18
|
export async function emitEvent(ctx, eventDef, args) {
|
|
19
19
|
const appendArgs = {
|
|
20
20
|
aggregateId: args.aggregateId,
|
|
@@ -23,7 +23,7 @@ export async function emitEvent(ctx, eventDef, args) {
|
|
|
23
23
|
payload: args.payload,
|
|
24
24
|
...(args.headers !== undefined && { headers: args.headers }),
|
|
25
25
|
};
|
|
26
|
-
await ctx.
|
|
26
|
+
await ctx.events.unsafeAppend(appendArgs);
|
|
27
27
|
}
|
|
28
28
|
// Read-side counterpart: narrow a StoredEvent's `payload` (declared as
|
|
29
29
|
// `Record<string, unknown>` because a stream carries many event types) to
|
|
@@ -47,7 +47,7 @@ export declare const EXT_STORAGE_PROVIDER: "storageProvider";
|
|
|
47
47
|
* implementation via `r.useExtension(EXT_FILE_PROVIDER, "<name>", { build })`;
|
|
48
48
|
* the per-tenant config key `provider` selects one at runtime. The framework
|
|
49
49
|
* resolver (`createFileProviderForTenant`) reads it so upload routes,
|
|
50
|
-
* `ctx.files`, and GDPR jobs all use the same store.
|
|
50
|
+
* `ctx.services.files`, and GDPR jobs all use the same store.
|
|
51
51
|
*
|
|
52
52
|
* The framework owns this contract to prevent string drift — file-foundation
|
|
53
53
|
* MUST register the extension point and config key under exactly these names.
|
|
@@ -63,7 +63,7 @@ export declare const FILE_STORAGE_PROVIDER_BOOT_SENTINEL: "configured";
|
|
|
63
63
|
* Renderer-Features (a future `derivatives-*` feature) register via
|
|
64
64
|
* `r.useExtension(EXT_DERIVATIVE_RENDERER, "<mimePattern>", { render })`,
|
|
65
65
|
* where `<mimePattern>` is an exact MIME type (`application/pdf`) or a
|
|
66
|
-
* type-wildcard (`image/*`). `ctx.derivatives.variant(...)` resolves the
|
|
66
|
+
* type-wildcard (`image/*`). `ctx.services.derivatives.variant(...)` resolves the
|
|
67
67
|
* renderer for a FileRef's MIME type at call time — exact match first,
|
|
68
68
|
* wildcard second.
|
|
69
69
|
*
|
|
@@ -148,12 +148,6 @@ export declare const EXT_TENANT_LIFECYCLE_STATUS: "tenantLifecycleStatus";
|
|
|
148
148
|
*/
|
|
149
149
|
export declare const EXT_ASSIGNABLE_ROLE: "assignableRole";
|
|
150
150
|
export declare const TENANT_MEMBERSHIPS_QUERY: "tenant:query:memberships";
|
|
151
|
-
/**
|
|
152
|
-
* Union of standardized extension names for the privacy surface.
|
|
153
|
-
* Not every extension in the system is included — other features can still
|
|
154
|
-
* register their own extension names.
|
|
155
|
-
*/
|
|
156
|
-
export type KumikoExtensionName = typeof EXT_USER_DATA | typeof EXT_TENANT_DATA | typeof EXT_STORAGE_PROVIDER | typeof EXT_SEARCH_ADAPTER | typeof EXT_EXTERNAL_RESOURCE | typeof EXT_INFRA_RESOURCE | typeof EXT_FILE_PROVIDER | typeof EXT_DERIVATIVE_RENDERER | typeof EXT_DERIVATIVE_PUBLIC_PREDICATE | typeof EXT_DERIVATIVE_OVERLAY_RESOLVER | typeof EXT_PRINCIPAL_STATUS | typeof EXT_TENANT_LIFECYCLE_STATUS | typeof EXT_ASSIGNABLE_ROLE;
|
|
157
151
|
/** The four `destroyTenant(tenantId, ctx)`-only resource-cleanup extension points. */
|
|
158
152
|
export type TenantResourceExtensionName = typeof EXT_STORAGE_PROVIDER | typeof EXT_SEARCH_ADAPTER | typeof EXT_EXTERNAL_RESOURCE | typeof EXT_INFRA_RESOURCE;
|
|
159
153
|
declare module "@cosmicdrift/kumiko-framework/engine" {
|
|
@@ -66,7 +66,7 @@ export const EXT_STORAGE_PROVIDER = "storageProvider";
|
|
|
66
66
|
* implementation via `r.useExtension(EXT_FILE_PROVIDER, "<name>", { build })`;
|
|
67
67
|
* the per-tenant config key `provider` selects one at runtime. The framework
|
|
68
68
|
* resolver (`createFileProviderForTenant`) reads it so upload routes,
|
|
69
|
-
* `ctx.files`, and GDPR jobs all use the same store.
|
|
69
|
+
* `ctx.services.files`, and GDPR jobs all use the same store.
|
|
70
70
|
*
|
|
71
71
|
* The framework owns this contract to prevent string drift — file-foundation
|
|
72
72
|
* MUST register the extension point and config key under exactly these names.
|
|
@@ -92,7 +92,7 @@ export const FILE_STORAGE_PROVIDER_BOOT_SENTINEL = "configured";
|
|
|
92
92
|
* Renderer-Features (a future `derivatives-*` feature) register via
|
|
93
93
|
* `r.useExtension(EXT_DERIVATIVE_RENDERER, "<mimePattern>", { render })`,
|
|
94
94
|
* where `<mimePattern>` is an exact MIME type (`application/pdf`) or a
|
|
95
|
-
* type-wildcard (`image/*`). `ctx.derivatives.variant(...)` resolves the
|
|
95
|
+
* type-wildcard (`image/*`). `ctx.services.derivatives.variant(...)` resolves the
|
|
96
96
|
* renderer for a FileRef's MIME type at call time — exact match first,
|
|
97
97
|
* wildcard second.
|
|
98
98
|
*
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
+
import type { RegistrarExtensionRegistration } from "@cosmicdrift/kumiko-types/config";
|
|
1
2
|
import type { Registry } from "./types/feature.ts";
|
|
2
|
-
import type { RegistrarExtensionRegistration } from "./types/index.ts";
|
|
3
3
|
export declare const SELECTED_EXTENSIONS_QUERY = "config:query:config-value:selected-extensions";
|
|
4
4
|
export declare const EXTENSION_SELECTOR_HINT_KEY = "config.settings.extensionSelectorHint";
|
|
5
5
|
export declare function selectablePluginIds(registry: Pick<Registry, "getExtensionUsages">, extensionName: string): string[];
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import type { TenantResourceDestroyHook,
|
|
1
|
+
import type { TenantResourceDestroyHook, TenantResourceHookCtx } from "./tenant-resource.ts";
|
|
2
2
|
export type StorageProviderHookCtx = TenantResourceHookCtx;
|
|
3
3
|
export type StorageProviderDestroyTenantHook = TenantResourceDestroyHook;
|
|
4
|
-
export type StorageProviderExtensionHooks = TenantResourceExtensionHooks;
|
|
@@ -131,14 +131,6 @@ export type UserDataDeleteHookResult = void | {
|
|
|
131
131
|
readonly reason: string;
|
|
132
132
|
};
|
|
133
133
|
export type UserDataDeleteHook = (ctx: UserDataHookCtx, strategy: UserDataDeleteStrategy) => Promise<UserDataDeleteHookResult>;
|
|
134
|
-
/**
|
|
135
|
-
* Full hook table for EXT_USER_DATA. Export-only is a legitimate partial
|
|
136
|
-
* contract, so registrations are typed by `UserDataExtensionOptions`.
|
|
137
|
-
*/
|
|
138
|
-
export interface UserDataExtensionHooks {
|
|
139
|
-
readonly export: UserDataExportHook;
|
|
140
|
-
readonly delete: UserDataDeleteHook;
|
|
141
|
-
}
|
|
142
134
|
export type UserDataExtensionOptions = ({
|
|
143
135
|
readonly export: UserDataExportHook;
|
|
144
136
|
readonly delete?: UserDataDeleteHook;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import type { BigIntFieldDef, BooleanFieldDef, DateFieldDef, DecimalFieldDef, DerivedFieldDef, EmbeddedFieldDef, EntityDefinition, EntityIndexDef, EntityLongTextFieldDef, EntityTextFieldDef, FieldsMap, FileFieldDef, FilesFieldDef, ImageFieldDef, ImagesFieldDef, JsonbFieldDef, LocatedTimestampFieldDef, LongTextFieldDef, MoneyFieldDef, MultiSelectFieldDef, NumberFieldDef, PersonalAnnotations, PersonalAnnotationsLongText, PersonalAnnotationsNoFind, ResolvedPiiFlags, RetentionDef, SelectFieldDef, TimestampFieldDef, TzFieldDef } from "@cosmicdrift/kumiko-types/fields";
|
|
1
2
|
import type { EntityTenancy } from "@cosmicdrift/kumiko-types/tenancy-brand";
|
|
2
|
-
import type {
|
|
3
|
+
import type { TextFieldDef } from "./types/index.ts";
|
|
3
4
|
export declare function createTextField<R extends true | false = false>(overrides: Partial<Omit<TextFieldDef, "type" | "required" | keyof ResolvedPiiFlags>> & PersonalAnnotations & {
|
|
4
5
|
required?: R;
|
|
5
6
|
}): EntityTextFieldDef & {
|
|
@@ -1,7 +1,14 @@
|
|
|
1
|
+
import type { ConfigKeyDefinition, ConfigSeedDef, ExtensionSelectorDef, JobDefinition, NotificationDefinition, ReferenceDataDef, RegistrarExtensionDef, RegistrarExtensionRegistration, TranslationKeys } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
import type { BootCheckFn, FeatureMetricDef, SecretKeyDefinition, SecretNamespaceDefinition, StoreTableEntry, UiHints } from "@cosmicdrift/kumiko-types/feature";
|
|
3
|
+
import type { EntityDefinition } from "@cosmicdrift/kumiko-types/fields";
|
|
4
|
+
import type { AuthClaimsFn, ClaimKeyDefinition, EventDef, EventMigrationDef, QueryHandlerDef, StreamHandlerDef, WriteHandlerDef } from "@cosmicdrift/kumiko-types/handlers";
|
|
5
|
+
import type { LifecycleHookFn, OwnedFn, PhasedHook, PostDeleteHookFn, PostQueryHookFn, PostSaveHookFn, PreDeleteHookFn, SearchPayloadContributorFn, ValidationHookFn } from "@cosmicdrift/kumiko-types/hooks";
|
|
6
|
+
import type { EntityProjectionExtension, MultiStreamProjectionDefinition, ProjectionDefinition } from "@cosmicdrift/kumiko-types/projection";
|
|
7
|
+
import type { RelationDefinition } from "@cosmicdrift/kumiko-types/relations";
|
|
8
|
+
import type { TreeActionDef } from "@cosmicdrift/kumiko-types/tree-node";
|
|
1
9
|
import type { WebSocketRouteDefinition } from "@cosmicdrift/kumiko-types/websocket-route";
|
|
2
10
|
import type * as z from "zod";
|
|
3
11
|
import type { HttpRouteDefinition } from "./types/http-route.ts";
|
|
4
|
-
import type { AuthClaimsFn, BootCheckFn, ClaimKeyDefinition, ConfigKeyDefinition, ConfigSeedDef, EntityDefinition, EntityProjectionExtension, EventDef, EventMigrationDef, ExtensionSelectorDef, FeatureMetricDef, JobDefinition, LifecycleHookFn, MultiStreamProjectionDefinition, NotificationDefinition, OwnedFn, PhasedHook, PostDeleteHookFn, PostQueryHookFn, PostSaveHookFn, PreDeleteHookFn, ProjectionDefinition, QueryHandlerDef, ReferenceDataDef, RegistrarExtensionDef, RegistrarExtensionRegistration, RelationDefinition, SearchPayloadContributorFn, SecretKeyDefinition, SecretNamespaceDefinition, StoreTableEntry, StreamHandlerDef, TranslationKeys, TreeActionDef, UiHints, ValidationHookFn, WriteHandlerDef } from "./types/index.ts";
|
|
5
12
|
import type { ContentCollectionDefinition, NavDefinition } from "./types/nav.ts";
|
|
6
13
|
import type { ScreenDefinition } from "./types/screen.ts";
|
|
7
14
|
import type { WorkspaceDefinition } from "./types/workspace.ts";
|
|
@@ -7,7 +7,7 @@ export type ChangelogEntry = {
|
|
|
7
7
|
readonly detail?: string;
|
|
8
8
|
/** Required when type=breaking. Shown in `kumiko upgrade` output. */
|
|
9
9
|
readonly migration?: string;
|
|
10
|
-
/** Path (relative to packages/
|
|
10
|
+
/** Path (relative to packages/feature-ast/src/, under scripts/codemod/) run by `kumiko upgrade --apply`. */
|
|
11
11
|
readonly codemod?: string;
|
|
12
12
|
/** The codemod only covers part of the migration: the entry is also recorded as pending manual work after it ran. */
|
|
13
13
|
readonly manualAfterCodemod?: boolean;
|
|
@@ -1,7 +1,10 @@
|
|
|
1
|
+
import type { ConfigKeyDefinition, ConfigKeyHandle, ConfigKeyType, ConfigSeedDef, JobDefinition, JobHandlerFn, NotificationDataFn, NotificationLocalizedTemplate, NotificationRecipientFn, NotificationRecordMapping, NotificationTemplateBody, NotificationTemplateFn, NotificationTemplateMeta, TemplateVariables, TranslationsDef } from "@cosmicdrift/kumiko-types/config";
|
|
2
|
+
import type { MetricOptions, SecretKeyHandle, SecretNamespaceHandle, SecretNamespaceOptions, SecretOptions } from "@cosmicdrift/kumiko-types/feature";
|
|
3
|
+
import type { AuthClaimsFn, ClaimKeyHandle, ClaimKeyType, DeclarativeEventMigration, EventDef, EventUpcastFn, NameOrRef, QualifiedEventName } from "@cosmicdrift/kumiko-types/handlers";
|
|
1
4
|
import type * as z from "zod";
|
|
2
5
|
import type { ZodType } from "zod";
|
|
3
6
|
import type { FeatureBuilderState } from "./feature-builder-state.ts";
|
|
4
|
-
import type {
|
|
7
|
+
import type { EventPiiStance } from "./types/index.ts";
|
|
5
8
|
export declare function buildConfigEventsJobsMethods<TName extends string>(state: FeatureBuilderState, name: TName): {
|
|
6
9
|
config: {
|
|
7
10
|
<T extends ConfigKeyType>(keyName: string, def: ConfigKeyDefinition<T>): ConfigKeyHandle<T>;
|