Docker images / prepare-release (push) Successful in 8s
Docker images / backend-image (push) Successful in 2m1s
Docker images / frontend-image (push) Successful in 3m56s
Docker images / notify-webhook (push) Skipped
Docker images / updater-image (push) Successful in 46s
Docker images / publish-release (push) Successful in 12s
Чтобы видеть «кто с кем», а не только объём порта: IPFIX внутри WG на хосте Docker MM, REST-счётчики не трогаем. Co-authored-by: Cursor <[email protected]>
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import type { MikrotikClient } from "./mikrotik.js"
|
|
|
|
/** Общие PUT iface / peer / address для `/wireguard` и traffic-flow overlay. */
|
|
export function toRosBody(obj: Record<string, string | undefined>): Record<string, string> {
|
|
const out: Record<string, string> = {}
|
|
for (const [k, v] of Object.entries(obj)) {
|
|
if (v !== undefined && v !== "") out[k] = v
|
|
}
|
|
return out
|
|
}
|
|
|
|
export function asRosArray<T>(raw: unknown): T[] {
|
|
if (Array.isArray(raw)) return raw as T[]
|
|
if (raw && typeof raw === "object") return [raw as T]
|
|
return []
|
|
}
|
|
|
|
export function rosRowId(row: Record<string, unknown>): string {
|
|
return String(row[".id"] ?? row.id ?? "")
|
|
}
|
|
|
|
export async function putWireguardInterface(
|
|
client: MikrotikClient,
|
|
fields: Record<string, string | undefined>,
|
|
): Promise<void> {
|
|
await client.put("/interface/wireguard", toRosBody(fields))
|
|
}
|
|
|
|
export async function putIpAddress(
|
|
client: MikrotikClient,
|
|
address: string,
|
|
iface: string,
|
|
): Promise<void> {
|
|
await client.put("/ip/address", { address, interface: iface })
|
|
}
|
|
|
|
export async function putWireguardPeer(
|
|
client: MikrotikClient,
|
|
fields: Record<string, string | undefined>,
|
|
): Promise<void> {
|
|
await client.put("/interface/wireguard/peers", toRosBody(fields))
|
|
}
|
|
|
|
export async function patchRosPath(
|
|
client: MikrotikClient,
|
|
path: string,
|
|
fields: Record<string, string | undefined>,
|
|
): Promise<void> {
|
|
await client.patch(path, toRosBody(fields))
|
|
}
|