openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
52 lines (51 loc) • 2 kB
JavaScript
import { createHash } from "node:crypto";
//#region extensions/github-copilot/connection-bound-ids.ts
function looksLikeConnectionBoundId(id) {
if (id.length < 24) return false;
if (/^(?:rs|msg|fc)_[A-Za-z0-9_-]+$/.test(id)) return false;
if (!/^[A-Za-z0-9+/_-]+=*$/.test(id)) return false;
return Buffer.from(id, "base64").length >= 16;
}
function deriveReplacementId(type, originalId) {
return `${type === "function_call" ? "fc" : "msg"}_${createHash("sha256").update(originalId).digest("hex").slice(0, 16)}`;
}
function isInputItem(value) {
return Boolean(value) && typeof value === "object";
}
function isValidReasoningReplayId(id) {
return typeof id === "string" && id.length > 0 && id.length <= 64;
}
function sanitizeCopilotReplayResponseIds(input) {
if (!Array.isArray(input)) return false;
let rewrote = false;
for (let index = input.length - 1; index >= 0; index -= 1) {
const item = input[index];
if (!isInputItem(item)) continue;
const id = item.id;
if (item.type === "reasoning") {
if (id !== void 0 && !isValidReasoningReplayId(id)) {
input.splice(index, 1);
rewrote = true;
}
continue;
}
if (typeof id !== "string" || id.length === 0) continue;
if (looksLikeConnectionBoundId(id)) {
item.id = deriveReplacementId(typeof item.type === "string" ? item.type : void 0, id);
rewrote = true;
}
}
return rewrote;
}
function rewriteCopilotConnectionBoundResponseIds(input) {
return sanitizeCopilotReplayResponseIds(input);
}
function sanitizeCopilotReplayResponsePayloadIds(payload) {
if (!payload || typeof payload !== "object") return false;
return sanitizeCopilotReplayResponseIds(payload.input);
}
function rewriteCopilotResponsePayloadConnectionBoundIds(payload) {
return sanitizeCopilotReplayResponsePayloadIds(payload);
}
//#endregion
export { sanitizeCopilotReplayResponsePayloadIds as i, rewriteCopilotResponsePayloadConnectionBoundIds as n, sanitizeCopilotReplayResponseIds as r, rewriteCopilotConnectionBoundResponseIds as t };