Files
pikasTech-HWLAB/internal/cloud/workbench-realtime-capabilities.ts
T

35 lines
1.3 KiB
TypeScript

// SPEC: PJ2026-0104010803 Workbench composable realtime capabilities.
// Responsibility: validate YAML-owned capability switches without code defaults or implied mode selection.
export const WORKBENCH_REALTIME_CAPABILITY_ENVS = Object.freeze({
directPublish: "HWLAB_KAFKA_DIRECT_PUBLISH_ENABLED",
liveKafkaSse: "HWLAB_WORKBENCH_LIVE_KAFKA_SSE_ENABLED",
transactionalProjector: "HWLAB_KAFKA_TRANSACTIONAL_PROJECTOR_ENABLED",
projectionOutboxRelay: "HWLAB_KAFKA_PROJECTION_OUTBOX_RELAY_ENABLED",
projectionRealtime: "HWLAB_WORKBENCH_PROJECTION_REALTIME_ENABLED"
});
export function workbenchRealtimeCapabilities(env = process.env) {
return Object.fromEntries(Object.entries(WORKBENCH_REALTIME_CAPABILITY_ENVS).map(([key, name]) => [key, requiredBooleanEnv(env, name)]));
}
export function requiredBooleanEnv(env, name) {
const value = String(env?.[name] ?? "").trim().toLowerCase();
if (value === "true" || value === "1") return true;
if (value === "false" || value === "0") return false;
throw capabilityError(
"hwlab_workbench_realtime_capability_invalid",
`${name} is required and must be explicitly true or false in the owning YAML.`,
name
);
}
function capabilityError(code, message, envName) {
return Object.assign(new Error(message), {
code,
envName,
statusCode: 503,
valuesRedacted: true
});
}