chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
import { apiFetch } from "../api.mjs";
|
||||
import { emit } from "../output.mjs";
|
||||
import { t } from "../i18n.mjs";
|
||||
|
||||
function fmtTs(v) {
|
||||
if (!v) return "-";
|
||||
return new Date(typeof v === "number" ? v * 1000 : v).toLocaleString();
|
||||
}
|
||||
|
||||
async function mcpCall(name, args) {
|
||||
const res = await apiFetch("/api/mcp/tools/call", {
|
||||
method: "POST",
|
||||
body: { name, arguments: args },
|
||||
});
|
||||
if (!res.ok) {
|
||||
process.stderr.write(`MCP error: ${res.status}\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
return res.json();
|
||||
}
|
||||
|
||||
const proxySchema = [
|
||||
{ key: "host", header: "Host", width: 35 },
|
||||
{ key: "type", header: "Type", width: 8 },
|
||||
{ key: "region", header: "Region" },
|
||||
{ key: "latencyMs", header: "Latency", formatter: (v) => (v ? `${v}ms` : "-") },
|
||||
{
|
||||
key: "successRate",
|
||||
header: "Success%",
|
||||
formatter: (v) => (v ? `${(v * 100).toFixed(0)}%` : "-"),
|
||||
},
|
||||
{ key: "lastUsed", header: "Last Used", formatter: fmtTs },
|
||||
{ key: "state", header: "State" },
|
||||
];
|
||||
|
||||
export function registerOneProxy(program) {
|
||||
const op = program.command("oneproxy").description(t("oneproxy.description"));
|
||||
|
||||
op.command("status").action(async (opts, cmd) => {
|
||||
const data = await mcpCall("omniroute_oneproxy_stats", {});
|
||||
emit(data, cmd.optsWithGlobals());
|
||||
});
|
||||
|
||||
op.command("stats")
|
||||
.option("--provider <p>", t("oneproxy.stats.provider"))
|
||||
.option("--period <p>", t("oneproxy.stats.period"), "24h")
|
||||
.action(async (opts, cmd) => {
|
||||
const data = await mcpCall("omniroute_oneproxy_stats", {
|
||||
provider: opts.provider,
|
||||
period: opts.period,
|
||||
});
|
||||
emit(data, cmd.optsWithGlobals());
|
||||
});
|
||||
|
||||
op.command("fetch")
|
||||
.description(t("oneproxy.fetch.description"))
|
||||
.option("--count <n>", t("oneproxy.fetch.count"), parseInt, 1)
|
||||
.option("--type <t>", t("oneproxy.fetch.type"), "http")
|
||||
.action(async (opts, cmd) => {
|
||||
const data = await mcpCall("omniroute_oneproxy_fetch", {
|
||||
count: opts.count,
|
||||
type: opts.type,
|
||||
});
|
||||
emit(data.proxies ?? data, cmd.optsWithGlobals(), proxySchema);
|
||||
});
|
||||
|
||||
op.command("rotate")
|
||||
.description(t("oneproxy.rotate.description"))
|
||||
.option("--provider <p>", t("oneproxy.rotate.provider"))
|
||||
.option("--connection-id <id>", t("oneproxy.rotate.connectionId"))
|
||||
.action(async (opts, cmd) => {
|
||||
const data = await mcpCall("omniroute_oneproxy_rotate", {
|
||||
provider: opts.provider,
|
||||
connectionId: opts.connectionId,
|
||||
});
|
||||
emit(data, cmd.optsWithGlobals());
|
||||
});
|
||||
|
||||
const config = op.command("config").description(t("oneproxy.config.description"));
|
||||
|
||||
config.command("show").action(async (opts, cmd) => {
|
||||
const res = await apiFetch("/api/settings/oneproxy");
|
||||
if (!res.ok) {
|
||||
process.stderr.write(`Error: ${res.status}\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
emit(await res.json(), cmd.optsWithGlobals());
|
||||
});
|
||||
|
||||
config
|
||||
.command("set")
|
||||
.option("--enabled <b>", t("oneproxy.config.enabled"), (v) => v === "true")
|
||||
.option("--pool-size <n>", t("oneproxy.config.poolSize"), parseInt)
|
||||
.option("--provider-source <url>", t("oneproxy.config.providerSource"))
|
||||
.option("--rotation-policy <p>", t("oneproxy.config.rotationPolicy"))
|
||||
.action(async (opts, cmd) => {
|
||||
const body = {};
|
||||
for (const k of ["enabled", "poolSize", "providerSource", "rotationPolicy"]) {
|
||||
if (opts[k] !== undefined) body[k] = opts[k];
|
||||
}
|
||||
const res = await apiFetch("/api/settings/oneproxy", { method: "PUT", body });
|
||||
if (!res.ok) {
|
||||
process.stderr.write(`Error: ${res.status}\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
emit(await res.json(), cmd.optsWithGlobals());
|
||||
});
|
||||
|
||||
op.command("pool")
|
||||
.description(t("oneproxy.pool.description"))
|
||||
.action(async (opts, cmd) => {
|
||||
const res = await apiFetch("/api/settings/oneproxy?include=pool");
|
||||
if (!res.ok) {
|
||||
process.stderr.write(`Error: ${res.status}\n`);
|
||||
process.exit(1);
|
||||
}
|
||||
const data = await res.json();
|
||||
emit(data.pool ?? data, cmd.optsWithGlobals(), proxySchema);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user