fix(api): сохранять большие идентификаторы серверов без округления

This commit is contained in:
Denozordec committed 2026-10-11 23:39:02 +07:00
1 parent 90e6c7be25
commit d3d8afaa0c
13 files changed
+1086 -19

No files matched your search

@@ -6,10 +6,10 @@ import { initDatabase } from "../db/bootstrap.js"
import { buildApp } from "../index.js"
try {
for (const id of ["srv1", "1abc", "", "0", "-1", "1.5", "9007199254740993", "2147483648"]) assert.equal(await getEnabledServerById(id), null)
for (const id of ["srv1", "1abc", "", "0", "-1", "1.5", "9007199254740993", "9007199254740992"]) assert.equal(await getEnabledServerById(id), null)
const own = process.env.MMAPP_OWN_TEST_DB
if (own) {
assert(/^mm_accept_152_\d+$/.test(own))
assert(/^mm_accept_(152|156)_\d+$/.test(own))
assert.equal((await pool.query("SELECT current_database() AS name")).rows[0].name, own)
await initDatabase()
const id = Number((await pool.query("INSERT INTO servers (name,host,enabled) VALUES ('disabled-network-fixture','127.0.0.1',false) RETURNING id")).rows[0].id)
@@ -50,7 +50,13 @@ try {
assert.equal(contacts, 0)
await pool.query("UPDATE servers SET enabled=true WHERE id=$1", [id])
assert.equal((await getEnabledServerById(id))?.id, id)
for (const largeId of [2147483648, Number.MAX_SAFE_INTEGER]) {
await pool.query("INSERT INTO servers (id,name,host,enabled) VALUES ($1,'large-id-fixture','127.0.0.1',true)", [largeId])
assert.equal((await getEnabledServerById(String(largeId)))?.id, largeId)
}
assert.equal(contacts, 0)
console.log("network-disabled-server.test.ts: 33 API/SQL checks for three types, zero RouterOS contacts, enabled positive control passed")
console.log("network-disabled-server.test.ts: real bigint IDs above int32 and MAX_SAFE_INTEGER passed without rounding")
} finally { MikrotikClient.fromServer = original; await app.close() }
} else console.log("network-disabled-server.test.ts: invalid IDs passed; own SQL/disabled API checks skipped (MMAPP_OWN_TEST_DB required)")
} finally { await closePool() }
+2 -2
View File
@@ -264,7 +264,7 @@ export async function listWireGuardInterfaces(opts?: {
let serverRows: ServerRow[]
if (opts?.serverId) {
const id = parseDbServerId(opts.serverId)
if (id === null || !Number.isSafeInteger(id) || id > 2147483647) {
if (id === null) {
return { interfaces: [], failures: [{ serverId: String(opts.serverId), error: "Некорректный serverId" }] }
}
const row = (await db.select().from(servers).where(and(eq(servers.id, id), eq(servers.enabled, true))).limit(1))[0]
@@ -295,7 +295,7 @@ export async function countWireGuardInterfaces():Promise<number|undefined>{retur
export async function getEnabledServerById(serverId: string | number) {
const id = parseDbServerId(serverId)
if (id === null || !Number.isSafeInteger(id) || id > 2147483647) return null
if (id === null) return null
return (await db.select().from(servers).where(and(eq(servers.id, id), eq(servers.enabled, true))).limit(1))[0] ?? null
}