Files
stun-NAT/scripts/notify.js
2026-07-16 15:07:12 +08:00

16 lines
1.0 KiB
JavaScript
Executable File

#!/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);