openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
97 lines (96 loc) • 3.92 kB
JavaScript
import { l as normalizeOptionalString } from "./string-coerce-6kR-86XC.mjs";
import { n as formatByteSize } from "./format-C1IjPxxo.mjs";
import { r as asNullableRecord } from "./record-coerce-TIsquoVR.mjs";
import "./string-coerce-runtime-B1b8UNzb.mjs";
import { d as readPositiveIntegerParam } from "./common-CwfR3iO6.mjs";
import { t as callGatewayTool } from "./gateway-b_lf--A8.mjs";
import "./number-runtime-DyNDaYIV.mjs";
import { a as resolveNodeIdFromList, n as listNodes } from "./nodes-utils-DEiJdJlh.mjs";
import "./agent-harness-runtime-ADe6s8a3.mjs";
import "./param-readers-PfUsCMZz.mjs";
import { t as appendFileTransferAudit } from "./audit-CG1DcpFL.mjs";
import { t as throwFromNodePayload } from "./errors-BAlYwh52.mjs";
import crypto from "node:crypto";
//#region extensions/file-transfer/src/shared/params.ts
function readGatewayCallOptions(params) {
const opts = {};
if (typeof params.gatewayUrl === "string" && params.gatewayUrl.trim()) opts.gatewayUrl = params.gatewayUrl.trim();
if (typeof params.gatewayToken === "string" && params.gatewayToken.trim()) opts.gatewayToken = params.gatewayToken.trim();
opts.timeoutMs = readPositiveIntegerParam(params, "timeoutMs");
return opts;
}
function readClampedInt(params) {
const requested = readPositiveIntegerParam(params.input, params.key) ?? params.defaultValue;
return Math.max(params.hardMin, Math.min(requested, params.hardMax));
}
function humanSize(bytes) {
return formatByteSize(bytes, {
style: "legacy-binary",
maxUnit: "mega",
separator: " ",
fractionDigits: (_value, unit) => unit === "byte" ? null : unit === "kilo" ? 1 : 2
});
}
//#endregion
//#region extensions/file-transfer/src/tools/node-tool-invoke.ts
function readRequiredNodePath(params) {
const node = normalizeOptionalString(params.node);
const requestedPath = normalizeOptionalString(params.path);
if (!node) throw new Error("node required");
if (!requestedPath) throw new Error("path required");
return {
node,
requestedPath
};
}
async function invokeNodeToolPayload(input) {
const gatewayOpts = readGatewayCallOptions(input.params);
const nodes = await listNodes(gatewayOpts);
if (nodes.length === 0) throw new Error("no paired nodes available; file-transfer tools require a paired node from nodes status. Use local file/exec tools for local workspace paths.");
const nodeId = resolveNodeIdFromList(nodes, input.node, false);
const nodeDisplayName = nodes.find((n) => n.nodeId === nodeId)?.displayName ?? input.node;
const startedAt = Date.now();
const raw = await callGatewayTool("node.invoke", gatewayOpts, {
nodeId,
command: input.command,
params: input.commandParams,
idempotencyKey: crypto.randomUUID()
});
const payload = asNullableRecord(raw?.payload);
if (!payload) {
await appendFileTransferAudit({
op: input.command,
nodeId,
nodeDisplayName,
requestedPath: input.requestedPath,
decision: "error",
errorMessage: input.invalidPayloadMessage ?? "invalid payload",
durationMs: Date.now() - startedAt,
...input.errorAuditExtra
});
throw new Error(input.invalidPayloadError ?? `invalid ${input.command} payload`);
}
if (payload.ok === false || input.requireOk === true && payload.ok !== true) {
await appendFileTransferAudit({
op: input.command,
nodeId,
nodeDisplayName,
requestedPath: input.requestedPath,
canonicalPath: typeof payload.canonicalPath === "string" ? payload.canonicalPath : void 0,
decision: "error",
errorCode: typeof payload.code === "string" ? payload.code : void 0,
errorMessage: typeof payload.message === "string" ? payload.message : void 0,
durationMs: Date.now() - startedAt,
...input.errorAuditExtra
});
throwFromNodePayload(input.command, payload);
}
return {
nodeDisplayName,
nodeId,
payload,
startedAt
};
}
//#endregion
export { readClampedInt as i, readRequiredNodePath as n, humanSize as r, invokeNodeToolPayload as t };