50 lines
2.1 KiB
JavaScript
50 lines
2.1 KiB
JavaScript
"use strict";
|
|
|
|
const { hostConfigError } = require("./errors");
|
|
|
|
function assertString(value, field, maximum = 4096) {
|
|
if (typeof value !== "string" || value.length === 0 || value.length > maximum || value.includes("\0")) {
|
|
throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput", { field });
|
|
}
|
|
return value;
|
|
}
|
|
|
|
function normalizeArgs(args) {
|
|
if (!Array.isArray(args) || args.length > 64) {
|
|
throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput", { field: "args" });
|
|
}
|
|
return args.map((entry, index) => assertString(entry, `args[${index}]`));
|
|
}
|
|
|
|
function normalizeEnv(env) {
|
|
if (!env || typeof env !== "object" || Array.isArray(env) || Object.getPrototypeOf(env) !== Object.prototype) {
|
|
throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput", { field: "env" });
|
|
}
|
|
const entries = Object.entries(env);
|
|
if (entries.length > 64) throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput", { field: "env" });
|
|
return Object.fromEntries(entries.sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0).map(([key, value]) => [
|
|
assertString(key, "env.key", 256),
|
|
typeof value === "string" && value.length <= 8192 && !value.includes("\0")
|
|
? value
|
|
: (() => { throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput", { field: `env.${key}` }); })(),
|
|
]));
|
|
}
|
|
|
|
function normalizeServer(host, server) {
|
|
if (!server || typeof server !== "object" || Array.isArray(server)) {
|
|
throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput");
|
|
}
|
|
if (host === "codex") {
|
|
if (server.enabled !== undefined && typeof server.enabled !== "boolean") {
|
|
throw hostConfigError("AAS_ADAPTER_SERVER_INVALID", "invalidInput", { field: "enabled" });
|
|
}
|
|
return { command: assertString(server.command, "command"), args: normalizeArgs(server.args), enabled: server.enabled ?? true };
|
|
}
|
|
if (host === "claude") {
|
|
return { command: assertString(server.command, "command"), args: normalizeArgs(server.args), env: normalizeEnv(server.env ?? {}) };
|
|
}
|
|
throw hostConfigError("AAS_ADAPTER_HOST_UNSUPPORTED", "invalidInput", { host });
|
|
}
|
|
|
|
module.exports = { normalizeServer };
|