Files
browser/platform_web/schemas/serverManagement.ts
T

108 lines
4.0 KiB
TypeScript

import type {
ClientManagerBuildRequest,
DependencyJobRequest,
LogBackfillRequest,
RunDistributionGenerateRequest,
RunUpdateRequest,
ServerInstanceUpdateRequest,
ServerLifecycleCommandRequest,
ServerLifecycleCreateRequest,
ServerInstanceResponse
} from "../api/types";
import type { ServerCreateFormState, ServerMetadataFormState, ServerRemovalConfirmationState } from "../contracts/serverManagement";
export function serverCreateRequestFromForm(form: ServerCreateFormState, sequence = Date.now()): ServerLifecycleCreateRequest {
const id = form.id.trim();
return {
id,
pluginId: form.pluginId.trim(),
runEndpointId: form.runEndpointId.trim(),
name: form.name.trim(),
idempotencyKey: lifecycleIdempotencyKey("create", id, sequence),
profileKey: form.profileKey.trim(),
bindings: Object.fromEntries(Object.entries(form.bindings).map(([key, value]) => [key, value.trim()]).filter(([, value]) => value !== ""))
};
}
export function serverLifecycleCommandRequest(instance: ServerInstanceResponse, action: "start" | "stop" | "status", sequence = Date.now()): ServerLifecycleCommandRequest {
return {
expectedConfigVersion: instance.configVersion,
expectedChecksum: instance.configChecksum,
idempotencyKey: lifecycleIdempotencyKey(action, instance.id, sequence)
};
}
export function serverMetadataUpdateRequestFromForm(form: ServerMetadataFormState): ServerInstanceUpdateRequest {
return { name: form.name.trim() };
}
export function serverArchiveConfirmation(instance: ServerInstanceResponse): ServerRemovalConfirmationState {
return {
action: "archive",
serverInstanceId: instance.id,
name: instance.name,
state: instance.state
};
}
export function runDistributionGenerateRequest(serverInstanceId: string, targetOs: string, targetArch: string, sequence = Date.now()): RunDistributionGenerateRequest {
return {
targetOs,
targetArch,
idempotencyKey: runtimeIdempotencyKey("run.generate", serverInstanceId, sequence)
};
}
export function runUpdateRequest(serverInstanceId: string, artifactId: string, checksum?: string, sequence = Date.now()): RunUpdateRequest {
return {
artifactId,
checksum,
idempotencyKey: runtimeIdempotencyKey("run.update", serverInstanceId, sequence)
};
}
export function clientManagerBuildRequest(input: {
serverInstanceId: string;
profileKey: string;
targetOs: string;
targetArch: string;
repositoryUrl: string;
sourceRevision?: string;
sequence?: number;
}): ClientManagerBuildRequest {
return {
profileKey: input.profileKey.trim(),
targetOs: input.targetOs,
targetArch: input.targetArch,
repositoryUrl: input.repositoryUrl.trim(),
sourceRevision: input.sourceRevision?.trim() || undefined,
idempotencyKey: runtimeIdempotencyKey("client-manager.generate", input.serverInstanceId, input.sequence ?? Date.now())
};
}
export function dependencyJobRequest(serverInstanceId: string, probeKey: string, installPlanKey = "", planDigest = "", sequence = Date.now()): DependencyJobRequest {
return {
probeKey: probeKey.trim(),
installPlanKey: installPlanKey.trim() || undefined,
planDigest: planDigest.trim() || undefined,
idempotencyKey: runtimeIdempotencyKey(installPlanKey ? "dependencies.install" : "dependencies.check", serverInstanceId, sequence)
};
}
export function logBackfillRequest(serverInstanceId: string, sourceKey: string, checkpointRef = "", limit = 200, sequence = Date.now()): LogBackfillRequest {
return {
sourceKey: sourceKey.trim(),
checkpointRef: checkpointRef.trim() || undefined,
limit,
idempotencyKey: runtimeIdempotencyKey("logs.backfill", serverInstanceId, sequence)
};
}
export function runtimeIdempotencyKey(action: string, serverInstanceId: string, sequence: number): string {
return `web:${action}:${serverInstanceId}:${sequence}`;
}
export function lifecycleIdempotencyKey(action: "create" | "start" | "stop" | "status", serverInstanceId: string, sequence: number): string {
return `web:${action}:${serverInstanceId}:${sequence}`;
}