@cosmicdrift/kumiko-framework 0.388.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 +12 -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/golden-path.md +13 -1
- 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 +55 -2
- package/agents/examples/list-table-options.md +466 -0
- package/agents/examples/managed-config.md +4 -4
- package/agents/examples/managed-pages.md +1 -1
- package/agents/examples/pdf-audit-export.md +4 -2
- 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 +5 -4
- package/agents/examples/tenant-isolation.md +73 -1
- 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 +5 -4
- package/agents/features.md +1 -1
- package/agents/widgets.md +1 -0
- package/dist/api/api-constants.d.ts +1 -0
- package/dist/api/api-constants.js +2 -0
- package/dist/api/auth-middleware.js +1 -1
- package/dist/api/auth-routes-invite.js +2 -1
- package/dist/api/auth-routes-shared.d.ts +2 -0
- package/dist/api/auth-routes-shared.js +5 -0
- package/dist/api/client-error-route.js +2 -3
- package/dist/api/entity-read-access.d.ts +4 -1
- package/dist/api/entity-read-access.js +14 -0
- package/dist/api/export/export-cells-reference.d.ts +9 -0
- package/dist/api/export/export-cells-reference.js +21 -0
- package/dist/api/export/export-cells.d.ts +11 -0
- package/dist/api/export/export-cells.js +136 -0
- package/dist/api/export/export-ciphertext-guard.d.ts +2 -0
- package/dist/api/export/export-ciphertext-guard.js +27 -0
- package/dist/api/export/export-columns.d.ts +31 -0
- package/dist/api/export/export-columns.js +85 -0
- package/dist/api/export/export-errors.d.ts +4 -0
- package/dist/api/export/export-errors.js +14 -0
- package/dist/api/export/export-route.d.ts +4 -0
- package/dist/api/export/export-route.js +75 -0
- package/dist/api/export/export-rows.d.ts +13 -0
- package/dist/api/export/export-rows.js +62 -0
- package/dist/api/export/export-screen.d.ts +13 -0
- package/dist/api/export/export-screen.js +47 -0
- package/dist/api/export/export-xlsx-writer.d.ts +4 -0
- package/dist/api/export/export-xlsx-writer.js +21 -0
- package/dist/api/extra-route.d.ts +7 -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/pii-leak-guard.d.ts +3 -0
- package/dist/api/pii-leak-guard.js +3 -2
- 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.d.ts +16 -0
- package/dist/api/routes.js +9 -5
- 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 +5 -1
- package/dist/api/server-middleware.js +3 -1
- package/dist/api/server-routes.d.ts +3 -2
- package/dist/api/server-routes.js +8 -2
- package/dist/api/server-wiring.js +8 -4
- package/dist/api/server.d.ts +2 -1
- package/dist/api/sse-route.d.ts +3 -1
- package/dist/api/sse-route.js +11 -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 +11 -9
- 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.d.ts +1 -0
- package/dist/crypto/pg-kms-adapter.js +17 -18
- package/dist/db/aggregate-sql.d.ts +2 -0
- package/dist/db/aggregate-sql.js +10 -0
- 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/closed-connection.js +12 -19
- 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 +7 -6
- package/dist/db/connection.js +43 -24
- 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-row-coercion.js +4 -4
- package/dist/db/driver-value-preparation.js +6 -4
- 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-aggregate-currencies.d.ts +17 -0
- package/dist/db/event-store-executor-read-aggregate-currencies.js +40 -0
- package/dist/db/event-store-executor-read-aggregate.js +36 -5
- package/dist/db/event-store-executor-read-filter.d.ts +1 -1
- package/dist/db/event-store-executor-read-filter.js +6 -3
- 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.d.ts +4 -0
- package/dist/db/event-store-executor-write-atomic.js +42 -0
- package/dist/db/event-store-executor-write-steps.d.ts +3 -5
- package/dist/db/event-store-executor-write-steps.js +0 -5
- package/dist/db/event-store-executor-write.js +22 -19
- package/dist/db/event-store-executor.d.ts +1 -1
- package/dist/db/event-store-executor.js +2 -1
- package/dist/db/executor-managed-tables.d.ts +7 -1
- package/dist/db/executor-managed-tables.js +12 -3
- 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 +7 -3
- 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 +37 -21
- package/dist/db/queries/backfill-pii.js +3 -6
- package/dist/db/queries/database-now.js +2 -1
- 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 +11 -28
- package/dist/db/queries/test-stack.d.ts +4 -1
- package/dist/db/queries/test-stack.js +83 -2
- package/dist/db/query.d.ts +14 -0
- package/dist/db/query.js +77 -48
- package/dist/db/reference-data.d.ts +1 -1
- package/dist/db/reference-data.js +20 -3
- 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/statement-timeout.js +2 -1
- 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-upsert.d.ts +5 -0
- package/dist/db/tenant-db-upsert.js +91 -0
- package/dist/db/tenant-db.d.ts +17 -12
- package/dist/db/tenant-db.js +60 -121
- 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/bundled-lists-table.d.ts +2 -0
- package/dist/engine/boot-validator/bundled-lists-table.js +36 -0
- 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 +3 -0
- package/dist/engine/boot-validator/entity-list-aggregate-options.js +23 -0
- package/dist/engine/boot-validator/list-bulk-actions.d.ts +3 -0
- package/dist/engine/boot-validator/list-bulk-actions.js +49 -0
- package/dist/engine/boot-validator/list-column-layout.d.ts +8 -0
- package/dist/engine/boot-validator/list-column-layout.js +41 -0
- package/dist/engine/boot-validator/list-table-aggregate-options.d.ts +24 -0
- package/dist/engine/boot-validator/list-table-aggregate-options.js +145 -0
- package/dist/engine/boot-validator/list-table-aggregate-query.d.ts +11 -0
- package/dist/engine/boot-validator/list-table-aggregate-query.js +31 -0
- package/dist/engine/boot-validator/list-table-export-options.d.ts +1 -0
- package/dist/engine/boot-validator/list-table-export-options.js +27 -0
- package/dist/engine/boot-validator/list-table-options.d.ts +3 -0
- package/dist/engine/boot-validator/list-table-options.js +77 -0
- package/dist/engine/boot-validator/list-table-reject-unknown-keys.d.ts +1 -0
- package/dist/engine/boot-validator/list-table-reject-unknown-keys.js +7 -0
- 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/projection-list-screens.js +3 -13
- package/dist/engine/boot-validator/query-refs.d.ts +2 -1
- package/dist/engine/boot-validator/related-list-table-rules.d.ts +4 -0
- package/dist/engine/boot-validator/related-list-table-rules.js +42 -0
- package/dist/engine/boot-validator/screens-forms.d.ts +2 -1
- package/dist/engine/boot-validator/screens-kind-entity-list.js +7 -0
- package/dist/engine/boot-validator/screens-kind-projection-list.js +4 -0
- package/dist/engine/boot-validator/screens-kind-shared.d.ts +3 -1
- package/dist/engine/boot-validator/screens-lists.js +12 -2
- 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/build-app-schema.d.ts +2 -1
- package/dist/engine/build-app-schema.js +9 -1
- package/dist/engine/build-config-feature-schema.js +6 -1
- 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 +5 -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 +9 -1
- package/dist/engine/feature-builder-state.js +1 -0
- 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.d.ts +1 -0
- package/dist/engine/feature-manifest.js +2 -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 +3 -1
- package/dist/engine/field-access.js +12 -0
- package/dist/engine/handler-field-references.d.ts +0 -4
- package/dist/engine/index.d.ts +58 -55
- package/dist/engine/index.js +23 -28
- 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 +2 -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/strip-disabled-features-from-app-schema.js +7 -3
- package/dist/engine/template-variables.d.ts +2 -1
- package/dist/engine/transfer-adjacency.d.ts +1 -1
- package/dist/engine/types/feature.d.ts +1 -0
- package/dist/engine/types/index.d.ts +8 -30
- package/dist/engine/types/index.js +2 -10
- package/dist/engine/types/screen.d.ts +1 -1
- package/dist/engine/types/screen.js +1 -1
- package/dist/engine/validation.d.ts +2 -1
- package/dist/entrypoint/index.d.ts +9 -35
- package/dist/entrypoint/index.js +10 -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.d.ts +1 -0
- package/dist/event-store/event-store.js +42 -32
- 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/provenance-append.js +1 -1
- 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 +6 -3
- package/dist/files/create-file-ref.d.ts +6 -2
- package/dist/files/create-file-ref.js +13 -4
- 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 +3 -1
- package/dist/files/file-routes.js +41 -4
- 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 +6 -4
- package/dist/files/provider-resolver.js +5 -5
- package/dist/files/record-write-check.d.ts +6 -0
- package/dist/files/record-write-check.js +13 -0
- 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/files/upload-ledger.d.ts +2 -2
- package/dist/files/upload-ledger.js +4 -4
- 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/i18n/required-surface-keys.js +7 -2
- 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 +10 -6
- 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-scope.js +6 -6
- package/dist/jobs/job-runner-types.d.ts +2 -1
- package/dist/jobs/job-runner.js +22 -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/escape-hatch-report.js +9 -2
- 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/after-rollback-sink.d.ts +6 -0
- package/dist/pipeline/after-rollback-sink.js +32 -0
- 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 +39 -19
- 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 -194
- 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 +7 -3
- package/dist/pipeline/event-dispatcher.d.ts +3 -2
- package/dist/pipeline/event-dispatcher.js +13 -12
- 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 +14 -6
- package/dist/pipeline/handler-context-dispatch.js +18 -5
- package/dist/pipeline/handler-context-events.d.ts +22 -38
- package/dist/pipeline/handler-context-events.js +42 -35
- 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 +6 -2
- package/dist/pipeline/system-hooks.js +61 -10
- 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/pipeline/write-result-masking.js +13 -10
- 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 +107 -91
- 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 -0
- package/dist/upgrade-changelog.js +18 -0
- package/dist/upgrade-cli-internals.d.ts +8 -0
- package/dist/upgrade-cli-internals.js +63 -0
- package/dist/upgrade-cli.d.ts +1 -18
- package/dist/upgrade-cli.js +29 -137
- package/dist/upgrade-marker-parse.d.ts +32 -0
- package/dist/upgrade-marker-parse.js +73 -0
- 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 +27 -20
- package/src/changes.json +451 -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 -10
- package/dist/engine/feature-ast/extractors/round1.js +0 -81
- 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 -483
- package/dist/engine/feature-ast/patch.d.ts +0 -210
- package/dist/engine/feature-ast/patch.js +0 -610
- 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 -1476
- package/dist/engine/feature-ast/pattern-change-schema.js +0 -1226
- package/dist/engine/feature-ast/pattern-id-matchers.d.ts +0 -7
- package/dist/engine/feature-ast/pattern-id-matchers.js +0 -210
- package/dist/engine/feature-ast/patterns.d.ts +0 -318
- package/dist/engine/feature-ast/patterns.js +0 -106
- package/dist/engine/feature-ast/render.d.ts +0 -47
- package/dist/engine/feature-ast/render.js +0 -662
- 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 -93
- 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 -20
- package/dist/engine/pattern-library/static-schemas.js +0 -478
- package/dist/engine/pattern-library/types.d.ts +0 -158
- package/dist/engine/pattern-library/types.js +0 -36
- package/dist/engine/provider-plugin-context.d.ts +0 -3
- package/dist/engine/provider-plugin-context.js +0 -28
- 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,30 +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 { 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";
|
|
10
|
-
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, ProviderPluginContext, 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";
|
|
11
|
-
export { DELIVERY_FAILURE_CODES, DELIVERY_SKIP_REASONS, declaredRateLimitOptions, HTTP_ERROR_CODE_PATTERN, isDeliveryErrorCode, isOpenToAllGranted, isRateLimitDisabled, isRateLimitOption, isUiAccessGranted, } from "@cosmicdrift/kumiko-types/handlers";
|
|
12
|
-
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";
|
|
13
|
-
export type { HttpRouteDefinition, HttpRouteHandler, HttpRouteHandlerDeps, HttpRouteMethod, } from "@cosmicdrift/kumiko-types/http-route";
|
|
14
|
-
export type { EntityId, TenantId } from "@cosmicdrift/kumiko-types/identifiers";
|
|
15
|
-
export { isSystemTenant, isUuid, parseTenantId, SYSTEM_TENANT_ID, } from "@cosmicdrift/kumiko-types/identifiers";
|
|
16
|
-
export type { ContentCollectionDefinition, NavDefinition, NavIconKey, } from "@cosmicdrift/kumiko-types/nav";
|
|
17
|
-
export type { FromRule, FromRuleKind, OwnershipClause, OwnershipMap, OwnershipRef, OwnershipRule, SqlFragment, WhereRule, WhereRuleContext, } from "@cosmicdrift/kumiko-types/ownership";
|
|
18
|
-
export type { EntityProjectionExtension, MspErrorMode, MspErrorPolicy, MultiStreamApplyFn, MultiStreamProjectionDefinition, ProjectionDefinition, ProjectionRowIdOf, ProjectionTable, SingleStreamApplyFn, } from "@cosmicdrift/kumiko-types/projection";
|
|
19
|
-
export type { BelongsToRelation, EntityRelations, HasManyRelation, ManyToManyRelation, RelationDefinition, } from "@cosmicdrift/kumiko-types/relations";
|
|
20
|
-
export type { ActionFormScreenDefinition, 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, FieldCondition, FieldFormatRegistry, FieldRenderer, FormatSpec, FormFieldDerivation, FormWidth, ListColumnSpec, ListEmptyStateSpec, ListFacetSpec, ListPaginationMode, ListSortDir, ListSortSpec, 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";
|
|
21
|
-
export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
22
|
-
export type { TargetRef } from "@cosmicdrift/kumiko-types/target-ref";
|
|
23
|
-
export type { Subscribe, TreeAction, TreeActionDef, TreeActionsHandle, TreeChildrenSubscribe, TreeNode, TreeNodeState, } from "@cosmicdrift/kumiko-types/tree-node";
|
|
24
|
-
export type { WebSocketConnection, WebSocketMessageData, WebSocketRouteConnectDeps, WebSocketRouteDefinition, WebSocketSessionHandlers, } from "@cosmicdrift/kumiko-types/websocket-route";
|
|
25
|
-
export type { WorkspaceDefinition } from "@cosmicdrift/kumiko-types/workspace";
|
|
26
|
-
export type { ConcurrencyMode, ConfigScope, LifecycleHookType, OnDeleteStrategy, } from "../constants.ts";
|
|
27
|
-
export { DEFAULT_CURRENCIES, DEFAULT_LOCALES, isFileField } from "../field-helpers.ts";
|
|
28
|
-
export { resolveName, withResponseData } from "../handler-helpers.ts";
|
|
29
|
-
export { HookPhases } from "../hook-helpers.ts";
|
|
30
|
-
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,2 +1,2 @@
|
|
|
1
1
|
export type * from "@cosmicdrift/kumiko-types/screen";
|
|
2
|
-
export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
2
|
+
export { DEFAULT_EXPORT_MAX_ROWS, LIST_BULK_ACTION_KEYS, LIST_COLUMN_PINS, LIST_TABLE_DENSITIES, LIST_TABLE_DENSITY_KEYS, LIST_TABLE_EXPORT_KEYS, LIST_TABLE_GROUPING_KEYS, LIST_TABLE_OPTION_KEYS, LIST_TABLE_TOTAL_KEYS, MAX_BULK_SELECTION, MAX_EXPORT_MAX_ROWS, relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export { relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
1
|
+
export { DEFAULT_EXPORT_MAX_ROWS, LIST_BULK_ACTION_KEYS, LIST_COLUMN_PINS, LIST_TABLE_DENSITIES, LIST_TABLE_DENSITY_KEYS, LIST_TABLE_EXPORT_KEYS, LIST_TABLE_GROUPING_KEYS, LIST_TABLE_OPTION_KEYS, LIST_TABLE_TOTAL_KEYS, MAX_BULK_SELECTION, MAX_EXPORT_MAX_ROWS, relatedListGroupHeaderLabel, relatedListGroupKey, } from "@cosmicdrift/kumiko-types/screen";
|
|
@@ -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;
|
|
@@ -63,6 +36,7 @@ export type ApiEntrypoint = {
|
|
|
63
36
|
readonly lifecycle: Lifecycle;
|
|
64
37
|
readonly observability: ObservabilityProvider;
|
|
65
38
|
readonly dispatcher: Dispatcher;
|
|
39
|
+
readonly context: AppContext;
|
|
66
40
|
readonly lifecycleHooks: LifecycleHooks;
|
|
67
41
|
readonly eventDispatcher?: EventDispatcher;
|
|
68
42
|
readonly mode: "api";
|
|
@@ -74,6 +48,7 @@ export type WorkerEntrypoint = {
|
|
|
74
48
|
readonly eventDispatcher: EventDispatcher;
|
|
75
49
|
readonly jobRunner: JobRunner;
|
|
76
50
|
readonly observability: ObservabilityProvider;
|
|
51
|
+
readonly context: AppContext;
|
|
77
52
|
readonly dispatcher: Dispatcher;
|
|
78
53
|
readonly mode: "worker";
|
|
79
54
|
start(): Promise<void>;
|
|
@@ -85,4 +60,3 @@ export type AllInOneEntrypoint = Omit<ApiEntrypoint, "mode"> & Omit<WorkerEntryp
|
|
|
85
60
|
export declare function createApiEntrypoint(options: ApiEntrypointOptions): ApiEntrypoint;
|
|
86
61
|
export declare function createWorkerEntrypoint(options: WorkerEntrypointOptions): WorkerEntrypoint;
|
|
87
62
|
export declare function createAllInOneEntrypoint(options: AllInOneEntrypointOptions): AllInOneEntrypoint;
|
|
88
|
-
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);
|
|
@@ -244,6 +246,7 @@ export function createApiEntrypoint(options) {
|
|
|
244
246
|
lifecycle,
|
|
245
247
|
observability: server.observability,
|
|
246
248
|
dispatcher: server.dispatcher,
|
|
249
|
+
context: server.context,
|
|
247
250
|
lifecycleHooks: server.lifecycleHooks,
|
|
248
251
|
...(server.eventDispatcher && { eventDispatcher: server.eventDispatcher }),
|
|
249
252
|
mode: "api",
|
|
@@ -266,6 +269,7 @@ export function createApiEntrypoint(options) {
|
|
|
266
269
|
}
|
|
267
270
|
// --- Worker entrypoint ----------------------------------------------------
|
|
268
271
|
export function createWorkerEntrypoint(options) {
|
|
272
|
+
assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
|
|
269
273
|
const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
|
|
270
274
|
const observability = resolveObservability(options.observability);
|
|
271
275
|
const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
|
|
@@ -279,6 +283,7 @@ export function createWorkerEntrypoint(options) {
|
|
|
279
283
|
jobRunner,
|
|
280
284
|
observability: server.observability,
|
|
281
285
|
dispatcher: server.dispatcher,
|
|
286
|
+
context: server.context,
|
|
282
287
|
mode: "worker",
|
|
283
288
|
async start() {
|
|
284
289
|
await eventDispatcher.start();
|
|
@@ -291,6 +296,7 @@ export function createWorkerEntrypoint(options) {
|
|
|
291
296
|
}
|
|
292
297
|
// --- All-in-one entrypoint ------------------------------------------------
|
|
293
298
|
export function createAllInOneEntrypoint(options) {
|
|
299
|
+
assertEntrypointRowLevelSecurityMode(options.context, options.rowLevelSecurity);
|
|
294
300
|
const lifecycle = options.lifecycle ?? createLifecycle({ startReady: true });
|
|
295
301
|
const observability = resolveObservability(options.observability);
|
|
296
302
|
const { options: busOptions, context } = resolveEntrypointCacheSync(options, lifecycle);
|
|
@@ -324,6 +330,7 @@ export function createAllInOneEntrypoint(options) {
|
|
|
324
330
|
jobRunner: workerJobRunner,
|
|
325
331
|
observability: server.observability,
|
|
326
332
|
dispatcher: server.dispatcher,
|
|
333
|
+
context: server.context,
|
|
327
334
|
lifecycleHooks: server.lifecycleHooks,
|
|
328
335
|
mode: "all-in-one",
|
|
329
336
|
async start() {
|
|
@@ -336,3 +343,5 @@ export function createAllInOneEntrypoint(options) {
|
|
|
336
343
|
},
|
|
337
344
|
};
|
|
338
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 {};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { DEFAULT_ROW_LEVEL_SECURITY_MODE, } from "../db/render-rls-ddl.js";
|
|
2
|
+
import { rowLevelSecurityModeOf } from "../db/row-level-security-connection.js";
|
|
3
|
+
import { InternalError } from "../errors/index.js";
|
|
4
|
+
// The mode lives on the connection; the option states what the app config declared.
|
|
5
|
+
// A mismatch means the pools were opened for a different mode than the one the
|
|
6
|
+
// schema was applied for, which silently drops or over-applies tenant isolation.
|
|
7
|
+
export function assertEntrypointRowLevelSecurityMode(context, declared) {
|
|
8
|
+
// skip: entrypoint has no db to check
|
|
9
|
+
if (context.db === undefined)
|
|
10
|
+
return;
|
|
11
|
+
const expected = declared ?? DEFAULT_ROW_LEVEL_SECURITY_MODE;
|
|
12
|
+
const actual = rowLevelSecurityModeOf(context.db);
|
|
13
|
+
if (actual !== expected) {
|
|
14
|
+
throw new InternalError({
|
|
15
|
+
message: `Entrypoint rowLevelSecurity is "${expected}" but the database connection runs in "${actual}" mode; open the pools with the same mode`,
|
|
16
|
+
details: { expected, actual },
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export type DryRunOptions = {
|
|
2
|
+
/** From composeEnvSchema. Drives the per-row feature-attribution. */
|
|
3
|
+
readonly sources?: Readonly<Record<string, string>>;
|
|
4
|
+
/** Prefix for `pulumi config set <prefix>…` keys. Default "". */
|
|
5
|
+
readonly pulumiPrefix?: string;
|
|
6
|
+
/** k8s Secret name. Default "kumiko-env". */
|
|
7
|
+
readonly k8sName?: string;
|
|
8
|
+
/** k8s namespace. Default "default". */
|
|
9
|
+
readonly k8sNamespace?: string;
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
package/dist/env/dry-run.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { DryRunOptions } from "./dry-run-internals.ts";
|
|
1
2
|
import { type ComposedEnvSchema, type EnvFieldInspection } from "./index.ts";
|
|
2
3
|
export type DryRunMode = "human" | "json" | "pulumi" | "k8s";
|
|
3
4
|
/** `boot` runs the boot validators without connecting anywhere; the other
|
|
@@ -10,16 +11,6 @@ export declare function parseDryRunEnvMode(raw: string | undefined): DryRunEnvMo
|
|
|
10
11
|
/** True while any dry-run mode is requested, for code that runs at module
|
|
11
12
|
* load (key providers, secret derivation) and must not throw on missing env. */
|
|
12
13
|
export declare function isDryRunEnvActive(env: Readonly<Record<string, string | undefined>>): boolean;
|
|
13
|
-
export type DryRunOptions = {
|
|
14
|
-
/** From composeEnvSchema. Drives the per-row feature-attribution. */
|
|
15
|
-
readonly sources?: Readonly<Record<string, string>>;
|
|
16
|
-
/** Prefix for `pulumi config set <prefix>…` keys. Default "". */
|
|
17
|
-
readonly pulumiPrefix?: string;
|
|
18
|
-
/** k8s Secret name. Default "kumiko-env". */
|
|
19
|
-
readonly k8sName?: string;
|
|
20
|
-
/** k8s namespace. Default "default". */
|
|
21
|
-
readonly k8sNamespace?: string;
|
|
22
|
-
};
|
|
23
14
|
export declare function renderDryRun(composed: ComposedEnvSchema, mode: DryRunMode, options?: DryRunOptions): string;
|
|
24
15
|
/** Table for `KUMIKO_DRY_RUN_ENV=boot`: one row per variable with its source,
|
|
25
16
|
* whether it is required, and whether it is set. Values are never printed. */
|
package/dist/env/dry-run.js
CHANGED
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
// The same schema introspection (`classifyField`, `readKumikoMeta`) used
|
|
9
9
|
// by parseEnv drives the output here — single source of truth.
|
|
10
10
|
import { zodShape } from "./_zod-introspect.js";
|
|
11
|
-
import { classifyField,
|
|
11
|
+
import { classifyField, readKumikoMeta, } from "./index.js";
|
|
12
|
+
import { getDefaultValue, getFieldDescription, pulumiConfigKey } from "./internals.js";
|
|
12
13
|
export const DRY_RUN_ENV_VAR = "KUMIKO_DRY_RUN_ENV";
|
|
13
14
|
/** Reads `KUMIKO_DRY_RUN_ENV`. `1` and `true` mean `human`; an unknown value
|
|
14
15
|
* returns undefined, so the caller decides whether to warn or boot. */
|
package/dist/env/index.d.ts
CHANGED
|
@@ -1,33 +1,11 @@
|
|
|
1
1
|
import * as z from "zod";
|
|
2
2
|
import type { FeatureDefinition } from "../engine/types/feature.ts";
|
|
3
|
-
|
|
4
|
-
readonly pulumi?: {
|
|
5
|
-
/** Override the auto-derived camelCase Pulumi-config-key name. Apps
|
|
6
|
-
* setting `pulumiPrefix: "studio"` and authoring `STUDIO_ADMIN_EMAIL`
|
|
7
|
-
* would otherwise get `studioStudioAdminEmail` — set
|
|
8
|
-
* `.meta({ kumiko: { pulumi: { name: "adminEmail" } } })` to drop the
|
|
9
|
-
* duplicated prefix. */
|
|
10
|
-
readonly name?: string;
|
|
11
|
-
/** Shell expression that generates a value, e.g. `openssl rand -base64 32`.
|
|
12
|
-
* Without this, dry-run-pulumi emits `<set-me>` as the placeholder. */
|
|
13
|
-
readonly generator?: string;
|
|
14
|
-
/** Force the `--secret` flag in `pulumi config set`. Default false. */
|
|
15
|
-
readonly secret?: boolean;
|
|
16
|
-
};
|
|
17
|
-
/** The value may be delivered as a Scaleway Key Manager ciphertext in
|
|
18
|
-
* `<NAME>_CIPHERTEXT`. `runProdApp` decrypts it at boot when `<NAME>` itself
|
|
19
|
-
* is unset; a set plaintext always wins. A flag, not an object: every slot
|
|
20
|
-
* uses the same `_CIPHERTEXT` twin and one shared key (`PLATFORM_KEK_KMS_*`). */
|
|
21
|
-
readonly kms?: true;
|
|
22
|
-
};
|
|
3
|
+
import { type ComposedEnvShape, type ComposeEnvSchemaOptions, type EmptyShape, type EnvError, type EnvFieldClass, type EnvFieldStatus, type KumikoEnvMeta, type ParseEnvOptions } from "./internals.ts";
|
|
23
4
|
export declare function readKumikoMeta(field: z.ZodType): KumikoEnvMeta;
|
|
24
5
|
/** Env names whose schema field declares `kms: true` — the slots
|
|
25
6
|
* `resolvePlatformKeks` resolves from a ciphertext. */
|
|
26
7
|
export declare function kmsSlotsOf(schema: z.ZodObject<z.ZodRawShape>): readonly string[];
|
|
27
|
-
export type EnvFieldClass = "required" | "optional" | "withDefault";
|
|
28
8
|
export declare function classifyField(field: z.ZodType): EnvFieldClass;
|
|
29
|
-
export declare function getDefaultValue(field: z.ZodType): unknown;
|
|
30
|
-
export declare function getFieldDescription(field: z.ZodType): string | undefined;
|
|
31
9
|
/** A feature whose registered env schema is visible in its type, so
|
|
32
10
|
* `composeEnvSchema` can type the merged schema from the feature list. */
|
|
33
11
|
export type FeatureWithEnvSchema<TFeature extends FeatureDefinition, TShape extends z.ZodRawShape> = TFeature & {
|
|
@@ -37,41 +15,6 @@ export type FeatureWithEnvSchema<TFeature extends FeatureDefinition, TShape exte
|
|
|
37
15
|
* `r.envSchema(schema)`. Throws when the feature registered another
|
|
38
16
|
* instance, so the type never claims fields the runtime schema lacks. */
|
|
39
17
|
export declare function featureWithEnvSchema<TFeature extends FeatureDefinition, TShape extends z.ZodRawShape>(feature: TFeature, schema: z.ZodObject<TShape>): FeatureWithEnvSchema<TFeature, TShape>;
|
|
40
|
-
type EmptyShape = Record<never, never>;
|
|
41
|
-
type DeclaredEnvShape<TFeature> = TFeature extends {
|
|
42
|
-
readonly envSchema: z.ZodObject<infer TShape extends z.ZodRawShape>;
|
|
43
|
-
} ? string extends keyof TShape ? EmptyShape : TShape : EmptyShape;
|
|
44
|
-
type UnionToIntersection<TUnion> = (TUnion extends unknown ? (value: TUnion) => void : never) extends (value: infer TIntersection) => void ? TIntersection : never;
|
|
45
|
-
type OptionalShape<TShape extends z.ZodRawShape> = {
|
|
46
|
-
[Key in keyof TShape]: z.ZodOptional<TShape[Key]>;
|
|
47
|
-
};
|
|
48
|
-
type FeaturesEnvShape<TFeatures extends readonly FeatureDefinition[]> = UnionToIntersection<DeclaredEnvShape<TFeatures[number]>>;
|
|
49
|
-
type FlattenShape<TShape> = {
|
|
50
|
-
[Key in keyof TShape]: TShape[Key];
|
|
51
|
-
} & {};
|
|
52
|
-
type KnownShape<TShape extends z.ZodRawShape> = string extends keyof TShape ? EmptyShape : TShape;
|
|
53
|
-
/** The merged shape `composeEnvSchema` returns. With `optionalFeatures`
|
|
54
|
-
* every feature field is typed optional: the type cannot tell which feature
|
|
55
|
-
* a name refers to, and over-reporting `undefined` is the safe side. */
|
|
56
|
-
export type ComposedEnvShape<TFeatures extends readonly FeatureDefinition[], TCore extends z.ZodRawShape, TExtend extends z.ZodRawShape, TOptionalFeatures extends readonly string[] | undefined> = Extract<FlattenShape<KnownShape<TCore> & (TOptionalFeatures extends readonly string[] ? OptionalShape<FeaturesEnvShape<TFeatures> & z.ZodRawShape> : FeaturesEnvShape<TFeatures>) & KnownShape<TExtend>>, z.ZodRawShape>;
|
|
57
|
-
export type ComposeEnvSchemaOptions<TFeatures extends readonly FeatureDefinition[] = readonly FeatureDefinition[], TCore extends z.ZodRawShape = z.ZodRawShape, TExtend extends z.ZodRawShape = z.ZodRawShape, TOptionalFeatures extends readonly string[] | undefined = readonly string[] | undefined> = {
|
|
58
|
-
/** All features whose envSchemas should be merged. Bundled features type
|
|
59
|
-
* their fragment, so passing the list inline types the merged schema. */
|
|
60
|
-
readonly features: TFeatures;
|
|
61
|
-
/** App-specific env-vars (e.g. `STUDIO_ADMIN_EMAIL`). Keys here are
|
|
62
|
-
* tagged as source "app" in the resulting sources map. */
|
|
63
|
-
readonly extend?: z.ZodObject<TExtend>;
|
|
64
|
-
/** Feature-names whose env-vars should be auto-`.optional()`-wrapped.
|
|
65
|
-
* Lets an app opt out of e.g. `channel-email-smtp`'s vars without
|
|
66
|
-
* manually `.partial()`-ing each shape at the call-site. */
|
|
67
|
-
readonly optionalFeatures?: TOptionalFeatures;
|
|
68
|
-
/** Framework-core env-vars (PORT, DATABASE_URL, REDIS_URL, …) from
|
|
69
|
-
* `@cosmicdrift/kumiko-dev-server`. Keys here are tagged as source
|
|
70
|
-
* "framework-core" in error output. Conflict-detection runs across
|
|
71
|
-
* core/features/extend as one merged pool — same key declared in two
|
|
72
|
-
* layers throws KumikoBootError at compose-time. */
|
|
73
|
-
readonly core?: z.ZodObject<TCore>;
|
|
74
|
-
};
|
|
75
18
|
export type ComposedEnvSchema<TShape extends z.ZodRawShape = z.ZodRawShape> = {
|
|
76
19
|
/** The merged Zod schema, typed from core, the typed feature fragments and
|
|
77
20
|
* extend; `parseEnv(composed.schema, env)` returns the typed env. */
|
|
@@ -84,33 +27,11 @@ export type ComposedEnvSchema<TShape extends z.ZodRawShape = z.ZodRawShape> = {
|
|
|
84
27
|
* missing from the schema shape are ignored. */
|
|
85
28
|
export declare function withOptionalEnvKeys(schema: z.ZodObject<z.ZodRawShape>, keys: readonly string[]): z.ZodObject<z.ZodRawShape>;
|
|
86
29
|
export declare function composeEnvSchema<const TFeatures extends readonly FeatureDefinition[], TCore extends z.ZodRawShape = EmptyShape, TExtend extends z.ZodRawShape = EmptyShape, const TOptionalFeatures extends readonly string[] | undefined = undefined>(options: ComposeEnvSchemaOptions<TFeatures, TCore, TExtend, TOptionalFeatures>): ComposedEnvSchema<ComposedEnvShape<TFeatures, TCore, TExtend, TOptionalFeatures>>;
|
|
87
|
-
export type EnvErrorKind = "missing" | "invalid";
|
|
88
|
-
export type EnvError = {
|
|
89
|
-
readonly name: string;
|
|
90
|
-
readonly kind: EnvErrorKind;
|
|
91
|
-
readonly message: string;
|
|
92
|
-
/** Declaring source-name from `composeEnvSchema`'s sources map:
|
|
93
|
-
* feature-name, "app" from `extend`, or "framework-core" from `core`.
|
|
94
|
-
* Populated when parseEnv received `options.sources`. Surfaced by
|
|
95
|
-
* `KumikoBootError.format()` so operators see WHICH source wants the
|
|
96
|
-
* missing var, not just the var name. */
|
|
97
|
-
readonly source?: string;
|
|
98
|
-
/** "Set via: pulumi config set ..." line. Computed when pulumiPrefix is
|
|
99
|
-
* passed to parseEnv. */
|
|
100
|
-
readonly suggestion?: string;
|
|
101
|
-
};
|
|
102
30
|
export declare class KumikoBootError extends Error {
|
|
103
31
|
readonly errors: readonly EnvError[];
|
|
104
32
|
constructor(errors: readonly EnvError[]);
|
|
105
33
|
format(): string;
|
|
106
34
|
}
|
|
107
|
-
export type ParseEnvOptions = {
|
|
108
|
-
/** From composeEnvSchema's return — enables per-var feature-source
|
|
109
|
-
* attribution in suggestions. */
|
|
110
|
-
readonly sources?: Readonly<Record<string, string>>;
|
|
111
|
-
/** When set, error suggestions include `pulumi config set <prefix>...`. */
|
|
112
|
-
readonly pulumiPrefix?: string;
|
|
113
|
-
};
|
|
114
35
|
/** Validates `env` against `schema` and throws KumikoBootError on any issue.
|
|
115
36
|
* A `kms: true` field delivered only as `<NAME>_CIPHERTEXT` passes validation but
|
|
116
37
|
* is `undefined` in the result despite its `string` type — it is only set once
|
|
@@ -124,7 +45,6 @@ export declare function parseEnv<S extends z.ZodObject<z.ZodRawShape>>(schema: S
|
|
|
124
45
|
* every access silently returned undefined and the compiler could not detect
|
|
125
46
|
* it. */
|
|
126
47
|
export declare function parseEnvDryRun<S extends z.ZodObject<z.ZodRawShape>>(schema: S, env: Record<string, string | undefined>): Partial<z.infer<S>>;
|
|
127
|
-
export type EnvFieldStatus = "set" | "unset" | "missing" | "invalid";
|
|
128
48
|
export type EnvFieldInspection = {
|
|
129
49
|
readonly name: string;
|
|
130
50
|
readonly klass: EnvFieldClass;
|
|
@@ -138,7 +58,3 @@ export type EnvFieldInspection = {
|
|
|
138
58
|
* renders on an empty env. Object-level refinements do not run here; once
|
|
139
59
|
* nothing is missing or invalid, parseEnv validates the whole object. */
|
|
140
60
|
export declare function inspectEnv(schema: z.ZodObject<z.ZodRawShape>, env: Readonly<Record<string, string | undefined>>, options?: Pick<ParseEnvOptions, "sources">): readonly EnvFieldInspection[];
|
|
141
|
-
export declare function camelCase(snakeShout: string): string;
|
|
142
|
-
export declare function pulumiConfigKey(envName: string, field: z.ZodType | undefined, prefix: string | undefined): string;
|
|
143
|
-
export declare function buildPulumiSuggestion(envName: string, field: z.ZodType, prefix: string | undefined): string | undefined;
|
|
144
|
-
export {};
|
package/dist/env/index.js
CHANGED
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
// Without meta, defaults: `camelCase(envVarName)` for the Pulumi key,
|
|
15
15
|
// `<set-me>` placeholder for the value, no `--secret` flag.
|
|
16
16
|
import * as z from "zod";
|
|
17
|
-
import { zodDef,
|
|
17
|
+
import { zodDef, zodMeta, zodShape, zodShapeField } from "./_zod-introspect.js";
|
|
18
|
+
import { buildPulumiSuggestion, getFieldDescription, } from "./internals.js";
|
|
19
|
+
// --- Per-env-var metadata (attach via Zod's `.meta()`) ---
|
|
18
20
|
function isKumikoMeta(value) {
|
|
19
21
|
if (value === null || typeof value !== "object")
|
|
20
22
|
return false;
|
|
@@ -70,6 +72,7 @@ function relaxCiphertextOnlySlots(schema, env) {
|
|
|
70
72
|
}
|
|
71
73
|
return Object.keys(relaxed).length === 0 ? schema : schema.safeExtend(relaxed);
|
|
72
74
|
}
|
|
75
|
+
// --- Field-classification helpers (Zod v4 introspection) ---
|
|
73
76
|
export function classifyField(field) {
|
|
74
77
|
// Drill through ZodEffects/ZodPipe wrappers to find the inner kind.
|
|
75
78
|
let current = field;
|
|
@@ -104,29 +107,6 @@ export function classifyField(field) {
|
|
|
104
107
|
}
|
|
105
108
|
return "required";
|
|
106
109
|
}
|
|
107
|
-
export function getDefaultValue(field) {
|
|
108
|
-
let current = field;
|
|
109
|
-
for (let i = 0; i < 8; i++) {
|
|
110
|
-
if (current instanceof z.ZodDefault) {
|
|
111
|
-
// Zod v4: defaultValue is the raw value (v3 was a factory function).
|
|
112
|
-
// Support both shapes for forward/backward safety.
|
|
113
|
-
const raw = zodDef(current)?.defaultValue;
|
|
114
|
-
// @cast-boundary schema-walk — Zod v3 stored a thunk, v4 a raw value
|
|
115
|
-
return typeof raw === "function" ? raw() : raw;
|
|
116
|
-
}
|
|
117
|
-
const inner = zodDef(current);
|
|
118
|
-
if (inner?.innerType) {
|
|
119
|
-
current = inner.innerType;
|
|
120
|
-
continue;
|
|
121
|
-
}
|
|
122
|
-
break;
|
|
123
|
-
}
|
|
124
|
-
return undefined;
|
|
125
|
-
}
|
|
126
|
-
// @wrapper-known semantic-alias
|
|
127
|
-
export function getFieldDescription(field) {
|
|
128
|
-
return zodDescription(field);
|
|
129
|
-
}
|
|
130
110
|
function registersEnvSchema(feature, schema) {
|
|
131
111
|
return feature.envSchema === schema;
|
|
132
112
|
}
|
|
@@ -262,6 +242,7 @@ export function composeEnvSchema(options) {
|
|
|
262
242
|
const schema = z.object(merged);
|
|
263
243
|
return { schema, sources };
|
|
264
244
|
}
|
|
245
|
+
// --- Errors ---
|
|
265
246
|
function formatBootError(errors) {
|
|
266
247
|
const lines = [
|
|
267
248
|
`Boot failed: ${errors.length} env-var problem${errors.length === 1 ? "" : "s"}`,
|
|
@@ -291,6 +272,7 @@ export class KumikoBootError extends Error {
|
|
|
291
272
|
return formatBootError(this.errors);
|
|
292
273
|
}
|
|
293
274
|
}
|
|
275
|
+
// --- Parse ---
|
|
294
276
|
// safeParse does not catch exceptions thrown inside refinements; a refinement
|
|
295
277
|
// reading a ciphertext-only slot (undefined here) would otherwise escape as a raw
|
|
296
278
|
// TypeError past the KumikoBootError mapping.
|
|
@@ -353,9 +335,6 @@ export function parseEnv(schema, env, options = {}) {
|
|
|
353
335
|
throw new KumikoBootError(errors);
|
|
354
336
|
}
|
|
355
337
|
// --- Pulumi-suggestion ---
|
|
356
|
-
function ucfirst(s) {
|
|
357
|
-
return s.length === 0 ? s : s.charAt(0).toUpperCase() + s.slice(1);
|
|
358
|
-
}
|
|
359
338
|
/** Dry-run counterpart to parseEnv (KUMIKO_DRY_RUN_ENV path): parses each
|
|
360
339
|
* field individually and returns an honest Partial — present values pass
|
|
361
340
|
* through with their types (coerced), while missing or invalid values are
|
|
@@ -416,26 +395,3 @@ function firstFieldIssue(field, raw) {
|
|
|
416
395
|
return "a field refinement threw while checking the value";
|
|
417
396
|
}
|
|
418
397
|
}
|
|
419
|
-
export function camelCase(snakeShout) {
|
|
420
|
-
const parts = snakeShout.toLowerCase().split("_").filter(Boolean);
|
|
421
|
-
if (parts.length === 0)
|
|
422
|
-
return snakeShout.toLowerCase();
|
|
423
|
-
return parts[0] + parts.slice(1).map(ucfirst).join("");
|
|
424
|
-
}
|
|
425
|
-
export function pulumiConfigKey(envName, field, prefix) {
|
|
426
|
-
const meta = field ? readKumikoMeta(field) : {};
|
|
427
|
-
if (meta.pulumi?.name) {
|
|
428
|
-
return prefix ? prefix + ucfirst(meta.pulumi.name) : meta.pulumi.name;
|
|
429
|
-
}
|
|
430
|
-
const camel = camelCase(envName);
|
|
431
|
-
return prefix ? prefix + ucfirst(camel) : camel;
|
|
432
|
-
}
|
|
433
|
-
export function buildPulumiSuggestion(envName, field, prefix) {
|
|
434
|
-
if (!prefix)
|
|
435
|
-
return undefined;
|
|
436
|
-
const meta = readKumikoMeta(field);
|
|
437
|
-
const key = pulumiConfigKey(envName, field, prefix);
|
|
438
|
-
const secretFlag = meta.pulumi?.secret ? " --secret" : "";
|
|
439
|
-
const value = meta.pulumi?.generator ? `"$(${meta.pulumi.generator})"` : `"<set-me>"`;
|
|
440
|
-
return `Set via: pulumi config set${secretFlag} ${key} ${value}`;
|
|
441
|
-
}
|