@kici-dev/orchestrator 0.0.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +661 -0
- package/README.md +1 -6
- package/dist/__test-helpers__/mock-db.d.ts +103 -0
- package/dist/__test-helpers__/mock-ws.d.ts +13 -0
- package/dist/agent/dispatcher.d.ts +231 -0
- package/dist/agent/ownership-tracker.d.ts +46 -0
- package/dist/agent/registry.d.ts +255 -0
- package/dist/agent/token-store.d.ts +96 -0
- package/dist/app.d.ts +234 -0
- package/dist/audit/access-log.d.ts +92 -0
- package/dist/audit/sampling-rate-limiter.d.ts +41 -0
- package/dist/cache/build-coordinator.d.ts +42 -0
- package/dist/cache/dep-cache.d.ts +51 -0
- package/dist/cache/index.d.ts +16 -0
- package/dist/cache/pending-builds.d.ts +14 -0
- package/dist/cache/pending-dynamics.d.ts +15 -0
- package/dist/cache/pending-inits.d.ts +19 -0
- package/dist/cache/pending-tracker.d.ts +65 -0
- package/dist/cache/source-cache.d.ts +30 -0
- package/dist/cli/api-client.d.ts +411 -0
- package/dist/cli/commands/access-log.d.ts +30 -0
- package/dist/cli/commands/agent-service/index.d.ts +15 -0
- package/dist/cli/commands/agent-service/install.d.ts +9 -0
- package/dist/cli/commands/agent-service/logs.d.ts +9 -0
- package/dist/cli/commands/agent-service/restart.d.ts +8 -0
- package/dist/cli/commands/agent-service/start.d.ts +8 -0
- package/dist/cli/commands/agent-service/status.d.ts +10 -0
- package/dist/cli/commands/agent-service/stop.d.ts +8 -0
- package/dist/cli/commands/agent-service/uninstall.d.ts +9 -0
- package/dist/cli/commands/agent-service/upgrade.d.ts +11 -0
- package/dist/cli/commands/agent.d.ts +10 -0
- package/dist/cli/commands/api-key.d.ts +12 -0
- package/dist/cli/commands/audit.d.ts +9 -0
- package/dist/cli/commands/backend.d.ts +17 -0
- package/dist/cli/commands/cold-store-impl.d.ts +101 -0
- package/dist/cli/commands/cold-store.d.ts +30 -0
- package/dist/cli/commands/config.d.ts +16 -0
- package/dist/cli/commands/db.d.ts +19 -0
- package/dist/cli/commands/debug-bundle.d.ts +16 -0
- package/dist/cli/commands/diagnose.d.ts +15 -0
- package/dist/cli/commands/environment.d.ts +24 -0
- package/dist/cli/commands/event-dlq.d.ts +19 -0
- package/dist/cli/commands/event-log.d.ts +27 -0
- package/dist/cli/commands/event.d.ts +4 -0
- package/dist/cli/commands/execution.d.ts +17 -0
- package/dist/cli/commands/inspect-bundle.d.ts +16 -0
- package/dist/cli/commands/maintenance.d.ts +4 -0
- package/dist/cli/commands/orchestrator-service/index.d.ts +12 -0
- package/dist/cli/commands/orchestrator-service/install.d.ts +10 -0
- package/dist/cli/commands/orchestrator-service/logs.d.ts +10 -0
- package/dist/cli/commands/orchestrator-service/restart.d.ts +8 -0
- package/dist/cli/commands/orchestrator-service/start.d.ts +8 -0
- package/dist/cli/commands/orchestrator-service/status.d.ts +10 -0
- package/dist/cli/commands/orchestrator-service/stop.d.ts +8 -0
- package/dist/cli/commands/orchestrator-service/uninstall.d.ts +9 -0
- package/dist/cli/commands/orchestrator-service/upgrade.d.ts +12 -0
- package/dist/cli/commands/org-settings.d.ts +17 -0
- package/dist/cli/commands/peer.d.ts +13 -0
- package/dist/cli/commands/queue.d.ts +16 -0
- package/dist/cli/commands/registration.d.ts +18 -0
- package/dist/cli/commands/rotate.d.ts +9 -0
- package/dist/cli/commands/runs.d.ts +34 -0
- package/dist/cli/commands/secret.d.ts +12 -0
- package/dist/cli/commands/shared/db.d.ts +16 -0
- package/dist/cli/commands/shared/versioned-upgrade.d.ts +38 -0
- package/dist/cli/commands/source.d.ts +24 -0
- package/dist/cli/commands/token.d.ts +10 -0
- package/dist/cli/commands/workflow.d.ts +31 -0
- package/dist/cli/join.d.ts +14 -0
- package/dist/cli/kici-admin.d.ts +13 -0
- package/dist/cli/lazy-deps/cache.d.ts +17 -0
- package/dist/cli/lazy-deps/downloader.d.ts +33 -0
- package/dist/cli/lazy-deps/registry.d.ts +43 -0
- package/dist/cli/service/compose.d.ts +25 -0
- package/dist/cli/service/index.d.ts +24 -0
- package/dist/cli/service/launchd.d.ts +34 -0
- package/dist/cli/service/platform-detect.d.ts +59 -0
- package/dist/cli/service/systemd.d.ts +41 -0
- package/dist/cli/service/types.d.ts +91 -0
- package/dist/cli/service/windows.d.ts +20 -0
- package/dist/cli/wizard/agent-wizard.d.ts +24 -0
- package/dist/cli/wizard/orchestrator-wizard.d.ts +38 -0
- package/dist/cli/wizard/prompts.d.ts +23 -0
- package/dist/cli.js +11435 -0
- package/dist/cluster/cluster-identity.d.ts +59 -0
- package/dist/cluster/coordinator.d.ts +204 -0
- package/dist/cluster/health-api.d.ts +30 -0
- package/dist/cluster/index.d.ts +24 -0
- package/dist/cluster/join-client.d.ts +75 -0
- package/dist/cluster/join-handler.d.ts +58 -0
- package/dist/cluster/join-token.d.ts +94 -0
- package/dist/cluster/orphan-recovery.d.ts +67 -0
- package/dist/cluster/peer-client.d.ts +190 -0
- package/dist/cluster/peer-credentials.d.ts +108 -0
- package/dist/cluster/peer-crypto.d.ts +57 -0
- package/dist/cluster/peer-handler.d.ts +97 -0
- package/dist/cluster/peer-registry.d.ts +186 -0
- package/dist/cluster/raft-state.d.ts +36 -0
- package/dist/cluster/raft.d.ts +140 -0
- package/dist/cold-store/load-access-log-range.d.ts +73 -0
- package/dist/cold-store/load-event-log-range.d.ts +62 -0
- package/dist/cold-store/load-secret-audit-log-range.d.ts +38 -0
- package/dist/cold-store/orchestrator-cold-store.d.ts +58 -0
- package/dist/cold-store/tables/access-log.d.ts +80 -0
- package/dist/cold-store/tables/event-log.d.ts +70 -0
- package/dist/cold-store/tables/execution-jobs.d.ts +63 -0
- package/dist/cold-store/tables/execution-runs.d.ts +81 -0
- package/dist/cold-store/tables/execution-steps.d.ts +65 -0
- package/dist/cold-store/tables/secret-audit-log.d.ts +77 -0
- package/dist/concurrency/dispatch-next-queued.d.ts +63 -0
- package/dist/concurrency/group-tracker.d.ts +51 -0
- package/dist/concurrency/index.d.ts +3 -0
- package/dist/concurrency/queue-manager.d.ts +68 -0
- package/dist/concurrency/waiters.d.ts +58 -0
- package/dist/config/encryption.d.ts +82 -0
- package/dist/config/env-overlay.d.ts +45 -0
- package/dist/config/index.d.ts +16 -0
- package/dist/config/loader.d.ts +26 -0
- package/dist/config/reload.d.ts +113 -0
- package/dist/config/resolver.d.ts +47 -0
- package/dist/config/schema.d.ts +210 -0
- package/dist/config/shared-store.d.ts +142 -0
- package/dist/config/types.d.ts +218 -0
- package/dist/config.d.ts +249 -0
- package/dist/cron/cron-scheduler.d.ts +78 -0
- package/dist/cron/cron-store.d.ts +38 -0
- package/dist/dashboard/handler.d.ts +243 -0
- package/dist/db/client.d.ts +13 -0
- package/dist/db/migration-provider.d.ts +9 -0
- package/dist/db/migrations/001_initial.d.ts +8 -0
- package/dist/db/migrations/002_config_versions_key_version.d.ts +16 -0
- package/dist/db/migrations/003_access_log.d.ts +26 -0
- package/dist/db/migrations/004_rename_bundle_to_source.d.ts +19 -0
- package/dist/db/migrations/005_cold_store_chunk_counter.d.ts +19 -0
- package/dist/db/migrations/006_runs_jobs_steps_archived_at.d.ts +38 -0
- package/dist/db/migrations/007_audit_logs_archived_at.d.ts +42 -0
- package/dist/db/migrations/008_event_log_archived_at.d.ts +40 -0
- package/dist/db/migrations/009_access_log_trigram.d.ts +15 -0
- package/dist/db/migrations/010_cold_store_chunks.d.ts +34 -0
- package/dist/db/migrations/011_drop_source_secrets_notify.d.ts +21 -0
- package/dist/db/migrations/012_peer_credentials_active_uniq.d.ts +28 -0
- package/dist/db/migrations/013_execution_log_bytes.d.ts +21 -0
- package/dist/db/migrations/014_kici_events_lease_retry.d.ts +36 -0
- package/dist/db/migrations/015_org_settings_customer_scoped.d.ts +30 -0
- package/dist/db/migrations/016_org_settings_allow_http_npm.d.ts +15 -0
- package/dist/db/migrations/017_org_id_widen.d.ts +4 -0
- package/dist/db/migrations/018_org_id_prefix_backfill.d.ts +4 -0
- package/dist/db/migrator.d.ts +32 -0
- package/dist/db/types.d.ts +1266 -0
- package/dist/diagnostics/bundle-reader.d.ts +48 -0
- package/dist/diagnostics/bundle-writer.d.ts +57 -0
- package/dist/diagnostics/checks/agents.d.ts +10 -0
- package/dist/diagnostics/checks/certs.d.ts +9 -0
- package/dist/diagnostics/checks/config.d.ts +10 -0
- package/dist/diagnostics/checks/db.d.ts +9 -0
- package/dist/diagnostics/checks/disk.d.ts +9 -0
- package/dist/diagnostics/checks/index.d.ts +17 -0
- package/dist/diagnostics/checks/ws.d.ts +9 -0
- package/dist/diagnostics/index.d.ts +13 -0
- package/dist/diagnostics/runner.d.ts +23 -0
- package/dist/diagnostics/types.d.ts +38 -0
- package/dist/entry-helpers.d.ts +93 -0
- package/dist/environments/binding-store.d.ts +27 -0
- package/dist/environments/environment-store.d.ts +74 -0
- package/dist/environments/held-runs.d.ts +64 -0
- package/dist/environments/index.d.ts +10 -0
- package/dist/environments/protection/branch-gate.d.ts +5 -0
- package/dist/environments/protection/concurrency-gate.d.ts +7 -0
- package/dist/environments/protection/pipeline.d.ts +18 -0
- package/dist/environments/protection/reviewer-gate.d.ts +7 -0
- package/dist/environments/protection/trust-gate.d.ts +7 -0
- package/dist/environments/protection/wait-timer-gate.d.ts +7 -0
- package/dist/environments/variable-store.d.ts +39 -0
- package/dist/events/circuit-breaker.d.ts +33 -0
- package/dist/events/event-emitter.d.ts +55 -0
- package/dist/events/event-retry-scanner.d.ts +52 -0
- package/dist/events/event-router.d.ts +183 -0
- package/dist/events/event-store.d.ts +157 -0
- package/dist/events/trust-store.d.ts +54 -0
- package/dist/events/types.d.ts +61 -0
- package/dist/helpers/ip-extraction.d.ts +29 -0
- package/dist/helpers/rate-limiter.d.ts +23 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +772 -0
- package/dist/lockfile-cache.d.ts +39 -0
- package/dist/metrics/agent-metrics-aggregator.d.ts +116 -0
- package/dist/metrics/metrics-reporter.d.ts +40 -0
- package/dist/metrics/prometheus.d.ts +261 -0
- package/dist/metrics/scheduled-jobs.d.ts +20 -0
- package/dist/orchestrator-core.d.ts +193 -0
- package/dist/pipeline/dispatch-matched-workflow.d.ts +102 -0
- package/dist/pipeline/inline-eval.d.ts +28 -0
- package/dist/pipeline/install-secrets-resolver.d.ts +73 -0
- package/dist/pipeline/manual-schedule.d.ts +21 -0
- package/dist/pipeline/needs-scheduler.d.ts +85 -0
- package/dist/pipeline/process-webhook.d.ts +38 -0
- package/dist/pipeline/processor.d.ts +326 -0
- package/dist/pipeline/rerun.d.ts +79 -0
- package/dist/pipeline/test-pipeline.d.ts +110 -0
- package/dist/provider-registry.d.ts +122 -0
- package/dist/providers/generic/index.d.ts +23 -0
- package/dist/providers/generic/normalizer.d.ts +112 -0
- package/dist/providers/generic/verification.d.ts +47 -0
- package/dist/providers/github/auth.d.ts +60 -0
- package/dist/providers/github/changed-files.d.ts +51 -0
- package/dist/providers/github/check-status-poster.d.ts +35 -0
- package/dist/providers/github/contributor-resolver.d.ts +30 -0
- package/dist/providers/github/index.d.ts +20 -0
- package/dist/providers/github/lock-file.d.ts +32 -0
- package/dist/providers/github/normalizer.d.ts +103 -0
- package/dist/providers/github/repo-url.d.ts +35 -0
- package/dist/providers/internal/index.d.ts +32 -0
- package/dist/providers/internal/lock-file-fetcher.d.ts +34 -0
- package/dist/providers/internal/normalizer.d.ts +89 -0
- package/dist/providers/internal/repo-url-builder.d.ts +42 -0
- package/dist/providers/universal-git/changed-files.d.ts +42 -0
- package/dist/providers/universal-git/clone-token.d.ts +83 -0
- package/dist/providers/universal-git/config.d.ts +192 -0
- package/dist/providers/universal-git/index.d.ts +55 -0
- package/dist/providers/universal-git/lock-file.d.ts +71 -0
- package/dist/providers/universal-git/normalizer.d.ts +90 -0
- package/dist/providers/universal-git/repo-url.d.ts +50 -0
- package/dist/providers/universal-git/ssh-auth.d.ts +94 -0
- package/dist/queue/bootstrap.d.ts +50 -0
- package/dist/queue/cleanup.d.ts +41 -0
- package/dist/queue/depth-refresher.d.ts +65 -0
- package/dist/queue/job-queue.d.ts +343 -0
- package/dist/queue/scheduled-job.d.ts +91 -0
- package/dist/registration/extractor.d.ts +44 -0
- package/dist/registration/registration-index.d.ts +162 -0
- package/dist/registration/registration-store.d.ts +111 -0
- package/dist/reporting/check-run-summary.d.ts +102 -0
- package/dist/reporting/commit-status.d.ts +382 -0
- package/dist/reporting/execution-tracker.d.ts +538 -0
- package/dist/reporting/fs-log-storage.d.ts +41 -0
- package/dist/reporting/log-pull-handler.d.ts +35 -0
- package/dist/reporting/log-storage.d.ts +70 -0
- package/dist/reporting/log-writer.d.ts +45 -0
- package/dist/reporting/s3-log-storage.d.ts +42 -0
- package/dist/reporting/step-log-buffer.d.ts +57 -0
- package/dist/routes/admin-access-log.d.ts +34 -0
- package/dist/routes/admin-backends.d.ts +28 -0
- package/dist/routes/admin-config.d.ts +57 -0
- package/dist/routes/admin-db.d.ts +20 -0
- package/dist/routes/admin-environments.d.ts +42 -0
- package/dist/routes/admin-errors.d.ts +4 -0
- package/dist/routes/admin-event-dlq.d.ts +39 -0
- package/dist/routes/admin-event-log.d.ts +42 -0
- package/dist/routes/admin-events.d.ts +46 -0
- package/dist/routes/admin-maintenance.d.ts +22 -0
- package/dist/routes/admin-org-settings.d.ts +29 -0
- package/dist/routes/admin-queue-execution.d.ts +27 -0
- package/dist/routes/admin-registrations.d.ts +37 -0
- package/dist/routes/admin-runs.d.ts +57 -0
- package/dist/routes/admin-scheduled-jobs.d.ts +36 -0
- package/dist/routes/admin-sources.d.ts +18 -0
- package/dist/routes/admin.d.ts +103 -0
- package/dist/routes/capabilities.d.ts +24 -0
- package/dist/routes/diagnostics.d.ts +16 -0
- package/dist/routes/health.d.ts +20 -0
- package/dist/routes/test-trigger.d.ts +41 -0
- package/dist/routes/uploads.d.ts +38 -0
- package/dist/routes/webhooks.d.ts +36 -0
- package/dist/scaler/bare-metal-backend.d.ts +107 -0
- package/dist/scaler/config.d.ts +303 -0
- package/dist/scaler/container-backend.d.ts +125 -0
- package/dist/scaler/file-tail.d.ts +23 -0
- package/dist/scaler/firecracker-api.d.ts +100 -0
- package/dist/scaler/firecracker-backend.d.ts +263 -0
- package/dist/scaler/index.d.ts +24 -0
- package/dist/scaler/ip-allocator.d.ts +177 -0
- package/dist/scaler/label-matcher.d.ts +73 -0
- package/dist/scaler/log-forwarder.d.ts +54 -0
- package/dist/scaler/machine-ledger.d.ts +160 -0
- package/dist/scaler/manager.d.ts +338 -0
- package/dist/scaler/nftables.d.ts +85 -0
- package/dist/scaler/types.d.ts +388 -0
- package/dist/scaler/warm-pool.d.ts +81 -0
- package/dist/secrets/audit-logger.d.ts +65 -0
- package/dist/secrets/backend-health.d.ts +60 -0
- package/dist/secrets/backend-registry.d.ts +68 -0
- package/dist/secrets/backend-sync.d.ts +40 -0
- package/dist/secrets/cleanup.d.ts +40 -0
- package/dist/secrets/config.d.ts +51 -0
- package/dist/secrets/crypto.d.ts +49 -0
- package/dist/secrets/ephemeral-keys.d.ts +49 -0
- package/dist/secrets/index.d.ts +17 -0
- package/dist/secrets/pg-secret-store.d.ts +105 -0
- package/dist/secrets/rbac.d.ts +47 -0
- package/dist/secrets/secret-output-store.d.ts +46 -0
- package/dist/secrets/secret-resolver.d.ts +137 -0
- package/dist/secrets/source-credentials.d.ts +61 -0
- package/dist/secrets/token-manager.d.ts +63 -0
- package/dist/secrets/vault-secret-store.d.ts +85 -0
- package/dist/security/comment-handler.d.ts +67 -0
- package/dist/security/contributor-cache.d.ts +75 -0
- package/dist/security/global-workflow-policy.d.ts +72 -0
- package/dist/security/lock-source.d.ts +34 -0
- package/dist/security/trust-resolver.d.ts +108 -0
- package/dist/security/workflow-diff.d.ts +26 -0
- package/dist/server.d.ts +17 -0
- package/dist/server.js +48055 -0
- package/dist/sources/index.d.ts +10 -0
- package/dist/sources/source-manager.d.ts +63 -0
- package/dist/sources/source-store.d.ts +79 -0
- package/dist/sources/source-validator.d.ts +16 -0
- package/dist/stale-detector/stale-run-detector.d.ts +109 -0
- package/dist/standalone.d.ts +20 -0
- package/dist/standalone.js +41546 -0
- package/dist/storage/blob-routes.d.ts +20 -0
- package/dist/storage/filesystem.d.ts +60 -0
- package/dist/storage/index.d.ts +20 -0
- package/dist/storage/s3.d.ts +68 -0
- package/dist/storage/sign-url.d.ts +45 -0
- package/dist/storage/types.d.ts +98 -0
- package/dist/webhook/dedup.d.ts +44 -0
- package/dist/webhook/event-log.d.ts +83 -0
- package/dist/webhook/generic-sources.d.ts +169 -0
- package/dist/webhook/handler.d.ts +23 -0
- package/dist/webhook/relay-buffer.d.ts +96 -0
- package/dist/webhook/verify-inbound.d.ts +78 -0
- package/dist/worker/in-memory-execution-tracker.d.ts +94 -0
- package/dist/worker/in-memory-job-queue.d.ts +74 -0
- package/dist/worker/static-agent-token-store.d.ts +58 -0
- package/dist/worker/worker-status.d.ts +36 -0
- package/dist/worker-core.d.ts +74 -0
- package/dist/ws/agent-api-registry.d.ts +49 -0
- package/dist/ws/agent-handler.d.ts +176 -0
- package/dist/ws/agent-heartbeat.d.ts +45 -0
- package/dist/ws/dashboard-backends-handler.d.ts +51 -0
- package/dist/ws/dashboard-diagnostics-handler.d.ts +56 -0
- package/dist/ws/dashboard-env-handler.d.ts +107 -0
- package/dist/ws/dashboard-global-workflows-handler.d.ts +72 -0
- package/dist/ws/dashboard-registrations-handler.d.ts +84 -0
- package/dist/ws/event-buffer.d.ts +16 -0
- package/dist/ws/observer-handler.d.ts +42 -0
- package/dist/ws/observer-registry.d.ts +88 -0
- package/dist/ws/platform-client.d.ts +270 -0
- package/dist/ws/server-options.d.ts +15 -0
- package/package.json +87 -6
- package/sbom.spdx.json +14370 -0
- package/index.js +0 -3
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Config resolution chain.
|
|
3
|
+
*
|
|
4
|
+
* Two-phase design:
|
|
5
|
+
* - Phase 1: resolveLocalConfig() -- env + YAML only, returns database URL,
|
|
6
|
+
* instance ID, server port (needed before DB is available)
|
|
7
|
+
* - Phase 2: resolveFullConfig() -- merges defaults -> DB -> YAML -> env,
|
|
8
|
+
* validates with appConfigSchema, returns typed AppConfig
|
|
9
|
+
*
|
|
10
|
+
* Precedence: env var > local YAML > shared DB > defaults
|
|
11
|
+
*/
|
|
12
|
+
import type { AppConfig, SharedConfig } from './types.js';
|
|
13
|
+
/**
|
|
14
|
+
* Phase 1 result: minimal config resolved from local sources only.
|
|
15
|
+
*/
|
|
16
|
+
export interface LocalPhaseResult {
|
|
17
|
+
/** The raw local config (from YAML + env overlay) */
|
|
18
|
+
local: Record<string, unknown>;
|
|
19
|
+
/** Resolved database URL */
|
|
20
|
+
databaseUrl: string;
|
|
21
|
+
/** Resolved instance ID */
|
|
22
|
+
instanceId: string;
|
|
23
|
+
/** Resolved server port */
|
|
24
|
+
port: number;
|
|
25
|
+
/** Resolved instance mode */
|
|
26
|
+
mode: 'platform' | 'hybrid' | 'independent';
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Phase 1: Resolve local-only config.
|
|
30
|
+
* Loads YAML, applies env overrides for local fields.
|
|
31
|
+
* Returns database URL and instance ID (needed before DB init).
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveLocalConfig(configPath?: string): Promise<LocalPhaseResult>;
|
|
34
|
+
/**
|
|
35
|
+
* Phase 2: Resolve full config by merging all 4 layers.
|
|
36
|
+
* Precedence: env var > local YAML > shared DB > defaults.
|
|
37
|
+
*
|
|
38
|
+
* @param localConfig - Raw local config object (from Phase 1 or YAML parse)
|
|
39
|
+
* @param dbConfig - Shared config from DB (null if no DB config exists)
|
|
40
|
+
* @param env - Environment variables (defaults to process.env)
|
|
41
|
+
*/
|
|
42
|
+
export declare function resolveFullConfig(localConfig: Record<string, unknown>, dbConfig: SharedConfig | null, env?: NodeJS.ProcessEnv): AppConfig;
|
|
43
|
+
/**
|
|
44
|
+
* Get default values for shared config fields.
|
|
45
|
+
*/
|
|
46
|
+
export declare function getDefaults(): Partial<SharedConfig>;
|
|
47
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for orchestrator configuration validation.
|
|
3
|
+
*
|
|
4
|
+
* Provides separate schemas for:
|
|
5
|
+
* - localConfigSchema: validates YAML structure for per-orchestrator settings
|
|
6
|
+
* - sharedConfigSchema: validates shared config stored in PostgreSQL
|
|
7
|
+
* - appConfigSchema: validates the final merged config with cross-field validation
|
|
8
|
+
*
|
|
9
|
+
* Provider configuration (GitHub Apps, etc.) is managed via the `sources` table
|
|
10
|
+
* and PgSecretStore, not through config schemas.
|
|
11
|
+
*/
|
|
12
|
+
import { z } from 'zod';
|
|
13
|
+
/**
|
|
14
|
+
* Schema for the local YAML configuration file.
|
|
15
|
+
* All fields optional except database.url.
|
|
16
|
+
*/
|
|
17
|
+
export declare const localConfigSchema: z.ZodObject<{
|
|
18
|
+
database: z.ZodObject<{
|
|
19
|
+
url: z.ZodString;
|
|
20
|
+
}, z.core.$strip>;
|
|
21
|
+
instance: z.ZodOptional<z.ZodObject<{
|
|
22
|
+
id: z.ZodOptional<z.ZodString>;
|
|
23
|
+
mode: z.ZodOptional<z.ZodEnum<{
|
|
24
|
+
platform: "platform";
|
|
25
|
+
hybrid: "hybrid";
|
|
26
|
+
independent: "independent";
|
|
27
|
+
}>>;
|
|
28
|
+
}, z.core.$strip>>;
|
|
29
|
+
server: z.ZodOptional<z.ZodObject<{
|
|
30
|
+
port: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
31
|
+
basePath: z.ZodOptional<z.ZodString>;
|
|
32
|
+
logLevel: z.ZodOptional<z.ZodEnum<{
|
|
33
|
+
error: "error";
|
|
34
|
+
debug: "debug";
|
|
35
|
+
info: "info";
|
|
36
|
+
warn: "warn";
|
|
37
|
+
}>>;
|
|
38
|
+
tlsCertPath: z.ZodOptional<z.ZodString>;
|
|
39
|
+
}, z.core.$strip>>;
|
|
40
|
+
scaler: z.ZodOptional<z.ZodObject<{
|
|
41
|
+
configPath: z.ZodOptional<z.ZodString>;
|
|
42
|
+
configDir: z.ZodOptional<z.ZodString>;
|
|
43
|
+
}, z.core.$strip>>;
|
|
44
|
+
}, z.core.$strip>;
|
|
45
|
+
export type LocalConfigSchemaType = z.infer<typeof localConfigSchema>;
|
|
46
|
+
/**
|
|
47
|
+
* Schema for the shared configuration stored in PostgreSQL.
|
|
48
|
+
* All top-level fields are optional (DB may have partial config).
|
|
49
|
+
*/
|
|
50
|
+
export declare const sharedConfigSchema: z.ZodObject<{
|
|
51
|
+
platform: z.ZodOptional<z.ZodObject<{
|
|
52
|
+
url: z.ZodOptional<z.ZodString>;
|
|
53
|
+
token: z.ZodOptional<z.ZodString>;
|
|
54
|
+
}, z.core.$strip>>;
|
|
55
|
+
storage: z.ZodOptional<z.ZodObject<{
|
|
56
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
57
|
+
s3: "s3";
|
|
58
|
+
}>>;
|
|
59
|
+
bucket: z.ZodOptional<z.ZodString>;
|
|
60
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
61
|
+
region: z.ZodOptional<z.ZodString>;
|
|
62
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
63
|
+
externalEndpoint: z.ZodOptional<z.ZodString>;
|
|
64
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
65
|
+
logBucket: z.ZodOptional<z.ZodString>;
|
|
66
|
+
}, z.core.$strip>>;
|
|
67
|
+
agentAuth: z.ZodOptional<z.ZodEnum<{
|
|
68
|
+
token: "token";
|
|
69
|
+
none: "none";
|
|
70
|
+
}>>;
|
|
71
|
+
agentTokenTtlMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
72
|
+
queue: z.ZodOptional<z.ZodObject<{
|
|
73
|
+
maxDepth: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
74
|
+
timeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
75
|
+
backpressureThreshold: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
76
|
+
}, z.core.$strip>>;
|
|
77
|
+
lockfileCache: z.ZodOptional<z.ZodObject<{
|
|
78
|
+
max: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
79
|
+
ttlMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
80
|
+
}, z.core.$strip>>;
|
|
81
|
+
staleDetector: z.ZodOptional<z.ZodObject<{
|
|
82
|
+
scanIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
83
|
+
thresholdMultiplier: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
84
|
+
heartbeatIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
85
|
+
}, z.core.$strip>>;
|
|
86
|
+
secrets: z.ZodOptional<z.ZodObject<{
|
|
87
|
+
key: z.ZodOptional<z.ZodString>;
|
|
88
|
+
keyFile: z.ZodOptional<z.ZodString>;
|
|
89
|
+
bootstrapAdminToken: z.ZodOptional<z.ZodString>;
|
|
90
|
+
}, z.core.$strip>>;
|
|
91
|
+
pgCustomerSecrets: z.ZodDefault<z.ZodBoolean>;
|
|
92
|
+
cluster: z.ZodOptional<z.ZodObject<{
|
|
93
|
+
joinToken: z.ZodOptional<z.ZodString>;
|
|
94
|
+
raftElectionTimeoutMinMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
95
|
+
raftElectionTimeoutMaxMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
96
|
+
raftHeartbeatMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
97
|
+
peerHeartbeatIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
98
|
+
peerMaxReconnectDelayMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
99
|
+
role: z.ZodOptional<z.ZodEnum<{
|
|
100
|
+
coordinator: "coordinator";
|
|
101
|
+
worker: "worker";
|
|
102
|
+
}>>;
|
|
103
|
+
coordinatorUrl: z.ZodOptional<z.ZodString>;
|
|
104
|
+
peerStaleTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
105
|
+
}, z.core.$strip>>;
|
|
106
|
+
webhookPayloadDir: z.ZodOptional<z.ZodString>;
|
|
107
|
+
cacheTtlDays: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
108
|
+
cacheBuildTimeoutMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
109
|
+
cacheMaxTarballBytes: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
110
|
+
eventRouter: z.ZodOptional<z.ZodObject<{
|
|
111
|
+
maxChainDepth: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
112
|
+
rateLimitPerWorkflowPerMinute: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
113
|
+
eventTtlSeconds: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
114
|
+
cleanupIntervalMs: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
115
|
+
}, z.core.$strip>>;
|
|
116
|
+
eventLog: z.ZodOptional<z.ZodObject<{
|
|
117
|
+
maxPayloadBytes: z.ZodOptional<z.ZodCoercedNumber<unknown>>;
|
|
118
|
+
}, z.core.$strip>>;
|
|
119
|
+
}, z.core.$strip>;
|
|
120
|
+
export type SharedConfigSchemaType = z.infer<typeof sharedConfigSchema>;
|
|
121
|
+
/**
|
|
122
|
+
* Schema for the final merged application configuration.
|
|
123
|
+
* Includes cross-field validation via superRefine.
|
|
124
|
+
*/
|
|
125
|
+
export declare const appConfigSchema: z.ZodObject<{
|
|
126
|
+
instanceId: z.ZodDefault<z.ZodString>;
|
|
127
|
+
mode: z.ZodDefault<z.ZodEnum<{
|
|
128
|
+
platform: "platform";
|
|
129
|
+
hybrid: "hybrid";
|
|
130
|
+
independent: "independent";
|
|
131
|
+
}>>;
|
|
132
|
+
databaseUrl: z.ZodDefault<z.ZodString>;
|
|
133
|
+
port: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
134
|
+
basePath: z.ZodDefault<z.ZodString>;
|
|
135
|
+
tlsCertPath: z.ZodOptional<z.ZodString>;
|
|
136
|
+
scalerConfigPath: z.ZodOptional<z.ZodString>;
|
|
137
|
+
scalerConfigDir: z.ZodOptional<z.ZodString>;
|
|
138
|
+
platformUrl: z.ZodOptional<z.ZodString>;
|
|
139
|
+
platformToken: z.ZodOptional<z.ZodString>;
|
|
140
|
+
storage: z.ZodOptional<z.ZodObject<{
|
|
141
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
142
|
+
s3: "s3";
|
|
143
|
+
}>>;
|
|
144
|
+
bucket: z.ZodOptional<z.ZodString>;
|
|
145
|
+
prefix: z.ZodOptional<z.ZodString>;
|
|
146
|
+
region: z.ZodOptional<z.ZodString>;
|
|
147
|
+
endpoint: z.ZodOptional<z.ZodString>;
|
|
148
|
+
externalEndpoint: z.ZodOptional<z.ZodString>;
|
|
149
|
+
forcePathStyle: z.ZodOptional<z.ZodBoolean>;
|
|
150
|
+
logBucket: z.ZodOptional<z.ZodString>;
|
|
151
|
+
}, z.core.$strip>>;
|
|
152
|
+
agentAuth: z.ZodDefault<z.ZodEnum<{
|
|
153
|
+
token: "token";
|
|
154
|
+
none: "none";
|
|
155
|
+
}>>;
|
|
156
|
+
agentTokenTtlMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
157
|
+
queueMaxDepth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
158
|
+
queueTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
159
|
+
queueBackpressureThreshold: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
160
|
+
lockfileCacheMax: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
161
|
+
lockfileCacheTtlMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
162
|
+
staleDetectorScanIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
163
|
+
staleDetectorThresholdMultiplier: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
164
|
+
jobHeartbeatIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
165
|
+
secretKey: z.ZodOptional<z.ZodString>;
|
|
166
|
+
secretKeyFile: z.ZodOptional<z.ZodString>;
|
|
167
|
+
bootstrapAdminToken: z.ZodOptional<z.ZodString>;
|
|
168
|
+
pgCustomerSecrets: z.ZodDefault<z.ZodBoolean>;
|
|
169
|
+
cluster: z.ZodPrefault<z.ZodObject<{
|
|
170
|
+
instanceId: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
171
|
+
address: z.ZodOptional<z.ZodString>;
|
|
172
|
+
joinToken: z.ZodOptional<z.ZodString>;
|
|
173
|
+
credentialFile: z.ZodDefault<z.ZodString>;
|
|
174
|
+
autoRotateCredentials: z.ZodDefault<z.ZodBoolean>;
|
|
175
|
+
peers: z.ZodDefault<z.ZodUnion<readonly [z.ZodArray<z.ZodString>, z.ZodPipe<z.ZodString, z.ZodTransform<string[], string>>]>>;
|
|
176
|
+
raftElectionTimeoutMinMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
177
|
+
raftElectionTimeoutMaxMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
178
|
+
raftHeartbeatMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
179
|
+
peerHeartbeatIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
180
|
+
peerMaxReconnectDelayMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
181
|
+
role: z.ZodDefault<z.ZodEnum<{
|
|
182
|
+
coordinator: "coordinator";
|
|
183
|
+
worker: "worker";
|
|
184
|
+
}>>;
|
|
185
|
+
coordinatorUrl: z.ZodOptional<z.ZodString>;
|
|
186
|
+
peerStaleTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
187
|
+
}, z.core.$strip>>;
|
|
188
|
+
webhookPayloadDir: z.ZodOptional<z.ZodString>;
|
|
189
|
+
cacheTtlDays: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
190
|
+
cacheBuildTimeoutMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
191
|
+
cacheMaxTarballBytes: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
192
|
+
eventRouterMaxChainDepth: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
193
|
+
eventRouterRateLimitPerWorkflowPerMinute: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
194
|
+
eventRouterEventTtlSeconds: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
195
|
+
eventRouterCleanupIntervalMs: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
196
|
+
eventLogMaxPayloadBytes: z.ZodDefault<z.ZodCoercedNumber<unknown>>;
|
|
197
|
+
logLevel: z.ZodDefault<z.ZodEnum<{
|
|
198
|
+
error: "error";
|
|
199
|
+
debug: "debug";
|
|
200
|
+
info: "info";
|
|
201
|
+
warn: "warn";
|
|
202
|
+
}>>;
|
|
203
|
+
nodeEnv: z.ZodDefault<z.ZodEnum<{
|
|
204
|
+
development: "development";
|
|
205
|
+
production: "production";
|
|
206
|
+
test: "test";
|
|
207
|
+
}>>;
|
|
208
|
+
}, z.core.$strip>;
|
|
209
|
+
export type AppConfigSchemaType = z.infer<typeof appConfigSchema>;
|
|
210
|
+
//# sourceMappingURL=schema.d.ts.map
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Database-backed shared configuration store with versioning.
|
|
3
|
+
*
|
|
4
|
+
* Provides CRUD operations for orchestrator shared configuration stored
|
|
5
|
+
* in the config_versions PostgreSQL table. Each save creates a new immutable
|
|
6
|
+
* version with audit trail. Sensitive fields are encrypted at rest using
|
|
7
|
+
* AES-256-GCM via the master key.
|
|
8
|
+
*
|
|
9
|
+
* Key operations:
|
|
10
|
+
* - getLatest(): retrieve current config (decrypted)
|
|
11
|
+
* - getByVersion(): retrieve a specific version
|
|
12
|
+
* - save(): validate, encrypt sensitive fields, store new version
|
|
13
|
+
* - rollback(): copy a previous version as a new version
|
|
14
|
+
* - listHistory(): version audit trail (metadata only)
|
|
15
|
+
* - getCurrentVersion(): current version number (for cluster heartbeat)
|
|
16
|
+
* - exportRedacted(): config with sensitive fields masked
|
|
17
|
+
*/
|
|
18
|
+
import { type Kysely } from 'kysely';
|
|
19
|
+
import type { Database } from '../db/types.js';
|
|
20
|
+
import type { SharedConfig } from './types.js';
|
|
21
|
+
/**
|
|
22
|
+
* Version metadata returned by listHistory().
|
|
23
|
+
*/
|
|
24
|
+
export interface ConfigVersionMeta {
|
|
25
|
+
version: number;
|
|
26
|
+
createdAt: Date;
|
|
27
|
+
createdBy: string;
|
|
28
|
+
description: string | null;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Database-backed shared configuration store with versioning, encryption, and audit trail.
|
|
32
|
+
*/
|
|
33
|
+
export declare class SharedConfigStore {
|
|
34
|
+
private db;
|
|
35
|
+
private masterKey;
|
|
36
|
+
/** Previous master key, accepted during the rotation grace window. */
|
|
37
|
+
private oldMasterKey;
|
|
38
|
+
/**
|
|
39
|
+
* Active master-key generation. New inserts stamp this value into
|
|
40
|
+
* `config_versions.key_version`; rotation bumps it after re-encrypting
|
|
41
|
+
* every row in a single transaction.
|
|
42
|
+
*/
|
|
43
|
+
private keyVersion;
|
|
44
|
+
constructor(db: Kysely<Database>, masterKey: Buffer | null,
|
|
45
|
+
/** Previous master key, accepted during the rotation grace window. */
|
|
46
|
+
oldMasterKey?: Buffer | null, keyVersion?: number);
|
|
47
|
+
/**
|
|
48
|
+
* Construct a `SharedConfigStore` with the active key generation hydrated
|
|
49
|
+
* from the database.
|
|
50
|
+
*
|
|
51
|
+
* Mirrors `PgSecretStore.create`: reads `MAX(key_version)` from
|
|
52
|
+
* `config_versions` so a freshly-restarted orchestrator keeps writing under
|
|
53
|
+
* the same generation as the last row committed before shutdown. Empty
|
|
54
|
+
* tables fall back to generation 1.
|
|
55
|
+
*/
|
|
56
|
+
static create(db: Kysely<Database>, masterKey: Buffer | null, oldMasterKey?: Buffer | null): Promise<SharedConfigStore>;
|
|
57
|
+
/**
|
|
58
|
+
* Get the latest config version (decrypt if master key available).
|
|
59
|
+
* Returns null if no config versions exist.
|
|
60
|
+
*/
|
|
61
|
+
getLatest(): Promise<{
|
|
62
|
+
config: SharedConfig;
|
|
63
|
+
version: number;
|
|
64
|
+
} | null>;
|
|
65
|
+
/**
|
|
66
|
+
* Get a specific config version by version number.
|
|
67
|
+
* Returns null if the version doesn't exist.
|
|
68
|
+
*/
|
|
69
|
+
getByVersion(version: number): Promise<{
|
|
70
|
+
config: SharedConfig;
|
|
71
|
+
version: number;
|
|
72
|
+
} | null>;
|
|
73
|
+
/**
|
|
74
|
+
* Save a new config version.
|
|
75
|
+
* Validates with sharedConfigSchema, encrypts sensitive fields,
|
|
76
|
+
* and stores as a new immutable version.
|
|
77
|
+
*
|
|
78
|
+
* @param config - The config object to save
|
|
79
|
+
* @param createdBy - Who created this version (e.g., "cli:seed", "api:set")
|
|
80
|
+
* @param description - Human-readable change description
|
|
81
|
+
* @returns The new version number
|
|
82
|
+
*/
|
|
83
|
+
save(config: Record<string, unknown>, createdBy: string, description?: string): Promise<number>;
|
|
84
|
+
/**
|
|
85
|
+
* List version history (metadata only, no config bodies).
|
|
86
|
+
* Returns versions in reverse chronological order.
|
|
87
|
+
*
|
|
88
|
+
* @param limit - Maximum number of versions to return (default 50)
|
|
89
|
+
*/
|
|
90
|
+
listHistory(limit?: number): Promise<ConfigVersionMeta[]>;
|
|
91
|
+
/**
|
|
92
|
+
* Rollback to a specific version.
|
|
93
|
+
* Reads the target version and creates a new version as a copy.
|
|
94
|
+
*
|
|
95
|
+
* @param targetVersion - Version number to rollback to
|
|
96
|
+
* @param createdBy - Who initiated the rollback
|
|
97
|
+
* @returns The new version number
|
|
98
|
+
* @throws Error if target version doesn't exist
|
|
99
|
+
*/
|
|
100
|
+
rollback(targetVersion: number, createdBy: string): Promise<number>;
|
|
101
|
+
/**
|
|
102
|
+
* Get the current (latest) version number.
|
|
103
|
+
* Returns 0 if no versions exist.
|
|
104
|
+
* Used by cluster heartbeats to broadcast config version.
|
|
105
|
+
*/
|
|
106
|
+
getCurrentVersion(): Promise<number>;
|
|
107
|
+
/**
|
|
108
|
+
* Export the current config with sensitive fields redacted.
|
|
109
|
+
* Returns null if no config versions exist.
|
|
110
|
+
* Used for CLI export and diff operations.
|
|
111
|
+
*/
|
|
112
|
+
exportRedacted(): Promise<Record<string, unknown> | null>;
|
|
113
|
+
/**
|
|
114
|
+
* Rotate the master-key generation for every row in `config_versions`.
|
|
115
|
+
*
|
|
116
|
+
* Mirrors `PgSecretStore.rotateKey`: opens a transaction, loads every row,
|
|
117
|
+
* decrypts with the current key (falling back to `oldMasterKey` when set),
|
|
118
|
+
* re-encrypts under the current master key at `max(key_version) + 1`, and
|
|
119
|
+
* updates only `config` + `key_version`. Audit columns (`created_at`,
|
|
120
|
+
* `created_by`, `description`, `version`, `encrypted_paths`) are
|
|
121
|
+
* deliberately untouched so the history trail stays immutable and
|
|
122
|
+
* `rollback()` / `getByVersion()` keep their semantics.
|
|
123
|
+
*
|
|
124
|
+
* Historical rows are re-encrypted too — otherwise rollback to an older
|
|
125
|
+
* version would fail once `KICI_SECRET_KEY_OLD` is removed.
|
|
126
|
+
*
|
|
127
|
+
* Rows with no encrypted fields (`encrypted_paths = []`) still have their
|
|
128
|
+
* `key_version` bumped so a fully-rotated table has a single generation,
|
|
129
|
+
* but they don't contribute to the `reEncrypted` counter.
|
|
130
|
+
*
|
|
131
|
+
* @returns The number of rows whose ciphertext was re-sealed.
|
|
132
|
+
*/
|
|
133
|
+
rotateKey(): Promise<{
|
|
134
|
+
reEncrypted: number;
|
|
135
|
+
skipped: number;
|
|
136
|
+
}>;
|
|
137
|
+
/**
|
|
138
|
+
* Convert a DB row to a SharedConfig with decryption.
|
|
139
|
+
*/
|
|
140
|
+
private rowToConfig;
|
|
141
|
+
}
|
|
142
|
+
//# sourceMappingURL=shared-store.d.ts.map
|
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Configuration type system for the orchestrator.
|
|
3
|
+
*
|
|
4
|
+
* Three-layer config model:
|
|
5
|
+
* - LocalConfig: per-orchestrator settings from YAML file
|
|
6
|
+
* - SharedConfig: shared settings stored in PostgreSQL config_versions table
|
|
7
|
+
* - AppConfig: merged result type used throughout the codebase
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Per-orchestrator settings loaded from YAML file.
|
|
11
|
+
* These are instance-specific and never shared across orchestrators.
|
|
12
|
+
*/
|
|
13
|
+
export interface LocalConfig {
|
|
14
|
+
database: {
|
|
15
|
+
url: string;
|
|
16
|
+
};
|
|
17
|
+
instance?: {
|
|
18
|
+
id?: string;
|
|
19
|
+
mode?: 'platform' | 'hybrid' | 'independent';
|
|
20
|
+
};
|
|
21
|
+
server?: {
|
|
22
|
+
port?: number;
|
|
23
|
+
basePath?: string;
|
|
24
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error';
|
|
25
|
+
tlsCertPath?: string;
|
|
26
|
+
};
|
|
27
|
+
scaler?: {
|
|
28
|
+
configPath?: string;
|
|
29
|
+
configDir?: string;
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Shared configuration stored in PostgreSQL config_versions table.
|
|
34
|
+
* Defined once, shared across all orchestrator instances.
|
|
35
|
+
*/
|
|
36
|
+
export interface SharedConfig {
|
|
37
|
+
platform?: {
|
|
38
|
+
url?: string;
|
|
39
|
+
token?: string;
|
|
40
|
+
};
|
|
41
|
+
storage?: {
|
|
42
|
+
type?: 's3';
|
|
43
|
+
bucket?: string;
|
|
44
|
+
prefix?: string;
|
|
45
|
+
region?: string;
|
|
46
|
+
endpoint?: string;
|
|
47
|
+
externalEndpoint?: string;
|
|
48
|
+
forcePathStyle?: boolean;
|
|
49
|
+
logBucket?: string;
|
|
50
|
+
};
|
|
51
|
+
agentAuth?: 'token' | 'none';
|
|
52
|
+
agentTokenTtlMs?: number;
|
|
53
|
+
queue?: {
|
|
54
|
+
maxDepth?: number;
|
|
55
|
+
timeoutMs?: number;
|
|
56
|
+
/**
|
|
57
|
+
* Pending-depth threshold that triggers the operator-facing backpressure
|
|
58
|
+
* warning. `0` disables the warner (metrics still exported).
|
|
59
|
+
*/
|
|
60
|
+
backpressureThreshold?: number;
|
|
61
|
+
};
|
|
62
|
+
lockfileCache?: {
|
|
63
|
+
max?: number;
|
|
64
|
+
ttlMs?: number;
|
|
65
|
+
};
|
|
66
|
+
staleDetector?: {
|
|
67
|
+
scanIntervalMs?: number;
|
|
68
|
+
thresholdMultiplier?: number;
|
|
69
|
+
heartbeatIntervalMs?: number;
|
|
70
|
+
};
|
|
71
|
+
secrets?: {
|
|
72
|
+
key?: string;
|
|
73
|
+
keyFile?: string;
|
|
74
|
+
bootstrapAdminToken?: string;
|
|
75
|
+
};
|
|
76
|
+
pgCustomerSecrets?: boolean;
|
|
77
|
+
cluster?: {
|
|
78
|
+
joinToken?: string;
|
|
79
|
+
raftElectionTimeoutMinMs?: number;
|
|
80
|
+
raftElectionTimeoutMaxMs?: number;
|
|
81
|
+
raftHeartbeatMs?: number;
|
|
82
|
+
peerHeartbeatIntervalMs?: number;
|
|
83
|
+
peerMaxReconnectDelayMs?: number;
|
|
84
|
+
};
|
|
85
|
+
webhookPayloadDir?: string;
|
|
86
|
+
cacheTtlDays?: number;
|
|
87
|
+
cacheBuildTimeoutMs?: number;
|
|
88
|
+
cacheMaxTarballBytes?: number;
|
|
89
|
+
eventRouter?: {
|
|
90
|
+
maxChainDepth?: number;
|
|
91
|
+
rateLimitPerWorkflowPerMinute?: number;
|
|
92
|
+
eventTtlSeconds?: number;
|
|
93
|
+
cleanupIntervalMs?: number;
|
|
94
|
+
};
|
|
95
|
+
eventLog?: {
|
|
96
|
+
maxPayloadBytes?: number;
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Merged application configuration used throughout the codebase.
|
|
101
|
+
* Combines LocalConfig + SharedConfig with resolved defaults.
|
|
102
|
+
*/
|
|
103
|
+
export interface AppConfig {
|
|
104
|
+
/** Unique identifier for this orchestrator instance */
|
|
105
|
+
instanceId: string;
|
|
106
|
+
/** Operating mode */
|
|
107
|
+
mode: 'platform' | 'hybrid' | 'independent';
|
|
108
|
+
/** PostgreSQL connection URL */
|
|
109
|
+
databaseUrl: string;
|
|
110
|
+
/** HTTP server port */
|
|
111
|
+
port: number;
|
|
112
|
+
/** HTTP base path */
|
|
113
|
+
basePath: string;
|
|
114
|
+
/** Path to TLS certificate (PEM) for expiry diagnostic check. Optional. */
|
|
115
|
+
tlsCertPath?: string;
|
|
116
|
+
/** Scaler YAML config file path */
|
|
117
|
+
scalerConfigPath?: string;
|
|
118
|
+
/** Scaler scalers.d/ directory path */
|
|
119
|
+
scalerConfigDir?: string;
|
|
120
|
+
/** Platform relay connection settings */
|
|
121
|
+
platformUrl?: string;
|
|
122
|
+
platformToken?: string;
|
|
123
|
+
/** Object storage settings */
|
|
124
|
+
storage?: {
|
|
125
|
+
type?: 's3';
|
|
126
|
+
bucket?: string;
|
|
127
|
+
prefix?: string;
|
|
128
|
+
region?: string;
|
|
129
|
+
endpoint?: string;
|
|
130
|
+
externalEndpoint?: string;
|
|
131
|
+
forcePathStyle?: boolean;
|
|
132
|
+
logBucket?: string;
|
|
133
|
+
};
|
|
134
|
+
/** Agent authentication mode */
|
|
135
|
+
agentAuth: 'token' | 'none';
|
|
136
|
+
/** Agent token TTL in milliseconds */
|
|
137
|
+
agentTokenTtlMs: number;
|
|
138
|
+
/** Queue settings */
|
|
139
|
+
queueMaxDepth: number;
|
|
140
|
+
queueTimeoutMs: number;
|
|
141
|
+
/**
|
|
142
|
+
* Pending-depth threshold for operator backpressure warnings. When the
|
|
143
|
+
* pending dispatch_queue depth stays at or above this for two consecutive
|
|
144
|
+
* refresher ticks (~10s), a structured `logger.warn` is emitted. `0`
|
|
145
|
+
* disables the warner entirely (metrics still exported). Default: 100.
|
|
146
|
+
*/
|
|
147
|
+
queueBackpressureThreshold: number;
|
|
148
|
+
/** Lockfile cache settings */
|
|
149
|
+
lockfileCacheMax: number;
|
|
150
|
+
lockfileCacheTtlMs: number;
|
|
151
|
+
/** Stale detector settings */
|
|
152
|
+
staleDetectorScanIntervalMs: number;
|
|
153
|
+
staleDetectorThresholdMultiplier: number;
|
|
154
|
+
jobHeartbeatIntervalMs: number;
|
|
155
|
+
/** Secrets management */
|
|
156
|
+
secretKey?: string;
|
|
157
|
+
secretKeyFile?: string;
|
|
158
|
+
bootstrapAdminToken?: string;
|
|
159
|
+
/** Allow dashboard users to create PG-stored secrets */
|
|
160
|
+
pgCustomerSecrets: boolean;
|
|
161
|
+
/** Cluster settings */
|
|
162
|
+
cluster: {
|
|
163
|
+
instanceId: string;
|
|
164
|
+
address?: string;
|
|
165
|
+
joinToken?: string;
|
|
166
|
+
credentialFile: string;
|
|
167
|
+
autoRotateCredentials: boolean;
|
|
168
|
+
peers: string[];
|
|
169
|
+
raftElectionTimeoutMinMs: number;
|
|
170
|
+
raftElectionTimeoutMaxMs: number;
|
|
171
|
+
raftHeartbeatMs: number;
|
|
172
|
+
peerHeartbeatIntervalMs: number;
|
|
173
|
+
peerMaxReconnectDelayMs: number;
|
|
174
|
+
/** Cluster role: coordinator (full orchestrator) or worker (delegated execution). */
|
|
175
|
+
role: 'coordinator' | 'worker';
|
|
176
|
+
/** URL of the coordinator to connect to when role=worker. */
|
|
177
|
+
coordinatorUrl?: string;
|
|
178
|
+
/** Stale peer timeout in ms. */
|
|
179
|
+
peerStaleTimeoutMs: number;
|
|
180
|
+
};
|
|
181
|
+
/** Webhook payload storage directory */
|
|
182
|
+
webhookPayloadDir?: string;
|
|
183
|
+
/** Cache TTL in days */
|
|
184
|
+
cacheTtlDays: number;
|
|
185
|
+
/** Cache build timeout in ms */
|
|
186
|
+
cacheBuildTimeoutMs: number;
|
|
187
|
+
/** Max dependency tarball size in bytes */
|
|
188
|
+
cacheMaxTarballBytes: number;
|
|
189
|
+
/** Event router: max chain depth before circuit breaker trips */
|
|
190
|
+
eventRouterMaxChainDepth: number;
|
|
191
|
+
/** Event router: max events per event name per minute */
|
|
192
|
+
eventRouterRateLimitPerWorkflowPerMinute: number;
|
|
193
|
+
/** Event router: event TTL in seconds */
|
|
194
|
+
eventRouterEventTtlSeconds: number;
|
|
195
|
+
/** Event router: cleanup interval in milliseconds */
|
|
196
|
+
eventRouterCleanupIntervalMs: number;
|
|
197
|
+
/** Inbound webhook delivery log: soft cap (bytes). Oversized deliveries are
|
|
198
|
+
* recorded with payload_omitted=true rather than 413'd. */
|
|
199
|
+
eventLogMaxPayloadBytes: number;
|
|
200
|
+
/** Log level */
|
|
201
|
+
logLevel: 'debug' | 'info' | 'warn' | 'error';
|
|
202
|
+
/** Node environment */
|
|
203
|
+
nodeEnv: 'development' | 'production' | 'test';
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* Database row type for the config_versions table.
|
|
207
|
+
* Each row is an immutable snapshot of the shared configuration.
|
|
208
|
+
*/
|
|
209
|
+
export interface ConfigVersion {
|
|
210
|
+
id: string;
|
|
211
|
+
version: number;
|
|
212
|
+
config: Record<string, unknown>;
|
|
213
|
+
createdAt: Date;
|
|
214
|
+
createdBy: string;
|
|
215
|
+
description: string | null;
|
|
216
|
+
encryptedPaths: string[];
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=types.d.ts.map
|