UNPKG

@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
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