Docker images / prepare-release (push) Successful in 12s
Docker images / backend-test (push) Successful in 2m20s
Docker images / frontend-image (push) Successful in 2m51s
Docker images / updater-image (push) Successful in 44s
Docker images / backend-image (push) Successful in 2m49s
Docker images / notify-webhook (push) Skipped
Docker images / publish-release (push) Successful in 12s
- Added configuration history management for Firewall, GRE, and WireGuard pages, enabling users to view and restore previous configurations. - Introduced new components for displaying configuration history and integrated them into the respective pages. - Enhanced API routes to support fetching and restoring configuration revisions, ensuring data consistency across the application. - Updated state management to handle loading and restoring states effectively, improving user experience during data operations. - Enhanced tests to cover new functionalities and ensure reliability. Co-authored-by: Cursor <[email protected]>
33 lines
951 B
TypeScript
33 lines
951 B
TypeScript
import type { MikrotikClient } from "./mikrotik.js"
|
|
import type { RosWriteOp } from "./entity-snapshots.js"
|
|
|
|
function encodeIdSegment(path: string): string {
|
|
const i = path.lastIndexOf("/")
|
|
if (i < 0) return path
|
|
const last = path.slice(i + 1)
|
|
if (!last.startsWith("*")) return path
|
|
return `${path.slice(0, i + 1)}${encodeURIComponent(last)}`
|
|
}
|
|
|
|
export async function executeRosOps(client: MikrotikClient, ops: RosWriteOp[]): Promise<void> {
|
|
for (const op of ops) {
|
|
if (op.op === "put") {
|
|
await client.put(op.path, op.body)
|
|
continue
|
|
}
|
|
if (op.op === "post") {
|
|
await client.post(encodeIdSegment(op.path), op.body)
|
|
continue
|
|
}
|
|
if (op.op === "patch") {
|
|
await client.patch(encodeIdSegment(op.path), op.body)
|
|
continue
|
|
}
|
|
if (op.op === "delete") {
|
|
await client.delete(encodeIdSegment(op.path))
|
|
continue
|
|
}
|
|
await client.post(encodeIdSegment(op.path), op.body)
|
|
}
|
|
}
|