Initial STUN NAT mapping console

This commit is contained in:
hhqyb
2026-07-16 15:07:12 +08:00
commit e38ef6ef05
17 changed files with 858 additions and 0 deletions

15
scripts/notify.js Executable file
View File

@@ -0,0 +1,15 @@
#!/usr/bin/env node
import fs from 'node:fs';
import path from 'node:path';
const [publicAddress, publicPort, ip4p, privatePort, protocol, privateAddress] = process.argv.slice(2);
const id = process.env.STUNMAP_RULE_ID;
const directory = process.env.STUNMAP_STATE_DIR;
if (!id || !directory || !publicAddress || !publicPort || !privatePort) process.exit(2);
const target = path.join(directory, `${id}.json`);
let previous = {};
try { previous = JSON.parse(fs.readFileSync(target, 'utf8')); } catch {}
const now = new Date().toISOString(); const changed = previous.publicAddress !== publicAddress || previous.publicPort !== Number(publicPort) || previous.privatePort !== Number(privatePort);
const state = { updatedAt: now, lastVerifiedAt: now, mappingChangedAt: changed ? now : previous.mappingChangedAt, publicAddress, publicPort: Number(publicPort), ip4p, privatePort: Number(privatePort), protocol, privateAddress };
const temp = `${target}.${process.pid}.tmp`;
fs.writeFileSync(temp, `${JSON.stringify(state, null, 2)}\n`, { mode: 0o600 }); fs.renameSync(temp, target);