@copilotkit/runtime
Version:
<img src="https://github.com/user-attachments/assets/0a6b64d9-e193-4940-a3f6-60334ac34084" alt="banner" style="border-radius: 12px; border: 2px solid #d6d4fa;" />
111 lines (110 loc) • 3.75 kB
JavaScript
import "reflect-metadata";
//#region src/v2/runtime/core/fetch-router.ts
/**
* Match a request URL against known CopilotKit route patterns.
*
* @param pathname - The URL pathname to match
* @param basePath - Optional base path prefix to strip first
* @returns RouteInfo if matched, null otherwise
*/
function matchRoute(pathname, basePath) {
let remainder;
if (basePath) {
const normalizedBase = basePath.length > 1 && basePath.endsWith("/") ? basePath.slice(0, -1) : basePath;
if (normalizedBase === "/") remainder = pathname;
else {
if (!pathname.startsWith(normalizedBase)) return null;
const afterBase = pathname.slice(normalizedBase.length);
if (afterBase.length > 0 && !afterBase.startsWith("/")) return null;
remainder = afterBase || "/";
}
} else remainder = pathname;
return matchSegments(remainder);
}
function safeDecodeURIComponent(value) {
try {
return decodeURIComponent(value);
} catch {
return null;
}
}
function matchSegments(path) {
const segments = path.split("/").filter(Boolean);
const len = segments.length;
if (len >= 1 && segments[len - 1] === "info") return { method: "info" };
if (len >= 1 && segments[len - 1] === "transcribe") return { method: "transcribe" };
if (len >= 1 && segments[len - 1] === "cpk-debug-events") return { method: "cpk-debug-events" };
if (len >= 3 && segments[len - 3] === "agent" && segments[len - 1] === "run") {
const agentId = safeDecodeURIComponent(segments[len - 2]);
if (!agentId) return null;
return {
method: "agent/run",
agentId
};
}
if (len >= 3 && segments[len - 3] === "agent" && segments[len - 1] === "connect") {
const agentId = safeDecodeURIComponent(segments[len - 2]);
if (!agentId) return null;
return {
method: "agent/connect",
agentId
};
}
if (len >= 4 && segments[len - 4] === "agent" && segments[len - 2] === "stop") {
const agentId = safeDecodeURIComponent(segments[len - 3]);
const threadId = safeDecodeURIComponent(segments[len - 1]);
if (!agentId || !threadId) return null;
return {
method: "agent/stop",
agentId,
threadId
};
}
if (len >= 2 && segments[len - 2] === "threads" && segments[len - 1] === "subscribe") return { method: "threads/subscribe" };
if (len >= 3 && segments[len - 3] === "threads" && segments[len - 1] === "messages") {
const threadId = safeDecodeURIComponent(segments[len - 2]);
if (!threadId) return null;
return {
method: "threads/messages",
threadId
};
}
if (len >= 3 && segments[len - 3] === "threads" && segments[len - 1] === "events") {
const threadId = safeDecodeURIComponent(segments[len - 2]);
if (!threadId) return null;
return {
method: "threads/events",
threadId
};
}
if (len >= 3 && segments[len - 3] === "threads" && segments[len - 1] === "state") {
const threadId = safeDecodeURIComponent(segments[len - 2]);
if (!threadId) return null;
return {
method: "threads/state",
threadId
};
}
if (len >= 3 && segments[len - 3] === "threads" && segments[len - 1] === "archive") {
const threadId = safeDecodeURIComponent(segments[len - 2]);
if (!threadId) return null;
return {
method: "threads/archive",
threadId
};
}
if (len >= 2 && segments[len - 2] === "threads" && segments[len - 1] === "clear") return { method: "threads/clear" };
if (len >= 2 && segments[len - 2] === "threads" && segments[len - 1] !== "subscribe" && segments[len - 1] !== "clear") {
const threadId = safeDecodeURIComponent(segments[len - 1]);
if (!threadId) return null;
return {
method: "threads/update",
threadId
};
}
if (len >= 1 && segments[len - 1] === "threads") return { method: "threads/list" };
return null;
}
//#endregion
export { matchRoute };
//# sourceMappingURL=fetch-router.mjs.map