mirror of
https://github.com/github/awesome-copilot.git
synced 2026-07-16 10:53:25 +00:00
50 lines
1.8 KiB
JavaScript
50 lines
1.8 KiB
JavaScript
const SANDBOX_ORIGIN = "https://connectors.azure.com";
|
|
|
|
function requiredString(value, name) {
|
|
const text = String(value || "").trim();
|
|
if (!text) throw new Error(`missing ${name}`);
|
|
return text;
|
|
}
|
|
|
|
export function buildSandboxUrl(config, server) {
|
|
const subscriptionId = requiredString(config?.subscriptionId, "subscriptionId");
|
|
const resourceGroup = requiredString(config?.resourceGroup, "resourceGroup");
|
|
const gatewayName = requiredString(config?.gatewayName, "gatewayName");
|
|
const serverName = requiredString(server, "server");
|
|
const path = [subscriptionId, resourceGroup, gatewayName, "mcp-playground"]
|
|
.map(encodeURIComponent)
|
|
.join("/");
|
|
const url = new URL(`/${path}`, SANDBOX_ORIGIN);
|
|
url.searchParams.set("server", serverName);
|
|
return url.toString();
|
|
}
|
|
|
|
export function resolveSandboxConnector(catalog, installedState, query) {
|
|
const requested = requiredString(query, "server").toLowerCase();
|
|
const available = catalog
|
|
.filter((connector) => installedState[connector.apiName]?.installed)
|
|
.map((connector) => ({
|
|
id: connector.apiName,
|
|
displayName: connector.displayName,
|
|
}));
|
|
|
|
const exact = available.filter((connector) =>
|
|
connector.id.toLowerCase() === requested ||
|
|
connector.displayName.toLowerCase() === requested
|
|
);
|
|
if (exact.length === 1) return { connector: exact[0], available };
|
|
|
|
const partial = available.filter((connector) =>
|
|
connector.id.toLowerCase().includes(requested) ||
|
|
connector.displayName.toLowerCase().includes(requested)
|
|
);
|
|
if (partial.length === 1) return { connector: partial[0], available };
|
|
|
|
return {
|
|
connector: null,
|
|
reason: partial.length > 1 ? "ambiguous" : "not_found_in_my_mcps",
|
|
matches: partial,
|
|
available,
|
|
};
|
|
}
|