mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-08-04 14:22:09 +03:00
Release v3.8.31 — see CHANGELOG.md [3.8.31] for full notes and contributors. Merged over known non-blocking reds (all correctness gates green): Integration Tests (2/2) is env/flaky (polls a real upstream batch that did not complete in the poll window); SonarQube/SonarCloud is the advisory server-side new-code quality gate. Unit (8 shards), Coverage, Node 22/24/26, Lint, PR Test Policy, Quality Ratchet, Docs-Strict, Quality-Extended and all 4 CodeQL analyses are green.
89 lines
2.6 KiB
TypeScript
89 lines
2.6 KiB
TypeScript
/**
|
|
* Database module: InspectorCustomHosts
|
|
* CRUD operations for inspector_custom_hosts table.
|
|
*/
|
|
|
|
import { getDbInstance } from "./core.ts";
|
|
import type { InspectorCustomHostRow } from "./_rowTypes.ts";
|
|
|
|
// SQLite stores booleans as integers
|
|
interface InspectorCustomHostDbRow {
|
|
host: string;
|
|
enabled: number;
|
|
label: string | null;
|
|
kind: string;
|
|
added_at: string;
|
|
last_seen_at: string | null;
|
|
}
|
|
|
|
function mapRow(row: InspectorCustomHostDbRow): InspectorCustomHostRow {
|
|
return {
|
|
host: row.host,
|
|
enabled: row.enabled === 1,
|
|
label: row.label,
|
|
kind: row.kind as "llm" | "app" | "custom",
|
|
added_at: row.added_at,
|
|
last_seen_at: row.last_seen_at,
|
|
};
|
|
}
|
|
|
|
export function listCustomHosts(opts?: { enabledOnly?: boolean }): InspectorCustomHostRow[] {
|
|
const db = getDbInstance();
|
|
const enabledOnly = opts?.enabledOnly === true;
|
|
|
|
const rows = enabledOnly
|
|
? (db
|
|
.prepare("SELECT * FROM inspector_custom_hosts WHERE enabled = 1 ORDER BY host ASC")
|
|
.all() as InspectorCustomHostDbRow[])
|
|
: (db
|
|
.prepare("SELECT * FROM inspector_custom_hosts ORDER BY host ASC")
|
|
.all() as InspectorCustomHostDbRow[]);
|
|
|
|
return rows.map(mapRow);
|
|
}
|
|
|
|
export function addCustomHost(
|
|
host: string,
|
|
kind: "llm" | "app" | "custom" = "custom",
|
|
label?: string
|
|
): void {
|
|
const db = getDbInstance();
|
|
const now = new Date().toISOString();
|
|
db.prepare(
|
|
`INSERT OR IGNORE INTO inspector_custom_hosts (host, enabled, label, kind, added_at)
|
|
VALUES (?, 1, ?, ?, ?)`
|
|
).run(host, label ?? null, kind, now);
|
|
}
|
|
|
|
export function removeCustomHost(host: string): void {
|
|
const db = getDbInstance();
|
|
db.prepare("DELETE FROM inspector_custom_hosts WHERE host = ?").run(host);
|
|
}
|
|
|
|
export function toggleCustomHost(host: string, enabled: boolean): void {
|
|
const db = getDbInstance();
|
|
db.prepare("UPDATE inspector_custom_hosts SET enabled = ? WHERE host = ?").run(
|
|
enabled ? 1 : 0,
|
|
host
|
|
);
|
|
}
|
|
|
|
export function touchLastSeen(host: string): void {
|
|
const db = getDbInstance();
|
|
const now = new Date().toISOString();
|
|
db.prepare("UPDATE inspector_custom_hosts SET last_seen_at = ? WHERE host = ?").run(now, host);
|
|
}
|
|
|
|
/**
|
|
* Returns true when `host` is present in inspector_custom_hosts with enabled=1.
|
|
* Used by agentBridgeHook to distinguish custom-host intercepts from agent-bridge
|
|
* intercepts so that Mode 2 (Custom Hosts) entries appear in the "Custom" profile.
|
|
*/
|
|
export function isCustomHost(host: string): boolean {
|
|
const db = getDbInstance();
|
|
const row = db
|
|
.prepare("SELECT 1 AS found FROM inspector_custom_hosts WHERE host = ? AND enabled = 1")
|
|
.get(host) as { found: number } | undefined;
|
|
return row !== undefined;
|
|
}
|