Update server.js via upload script - 2026-08-01 00:10:07

This commit is contained in:
mike 2026-08-01 00:10:28 +08:00
parent 05f474ee44
commit 4f93f9b480
1 changed files with 0 additions and 33 deletions

View File

@ -567,39 +567,6 @@ app.post('/api/jms/check-line', requireAuth, jmsCheckLimiter, async (req, res) =
}
});
// 代为请求JMS订阅地址解析 Subscription-Userinfo 响应头拿到流量信息——
// 浏览器直接fetch会被CORS挡住服务器端发请求没有这个限制
app.post('/api/jms/fetch-traffic', requireAuth, async (req, res) => {
const url = ((req.body && req.body.subscriptionUrl) || '').trim();
if (!url) return res.status(400).json({ error: '请先填写标准订阅地址' });
let parsed;
try {
parsed = new URL(url);
if (!/^https?:$/.test(parsed.protocol)) throw new Error('invalid protocol');
} catch (e) {
return res.status(400).json({ error: '订阅地址格式不对' });
}
try {
const response = await fetch(url, { headers: { 'User-Agent': 'Mozilla/5.0' } });
const header = response.headers.get('subscription-userinfo');
if (!header) return res.json({ ok: false, error: '这个订阅地址没有返回流量信息Subscription-Userinfo可能服务商不支持或者地址不对' });
const info = {};
header.split(';').forEach(part => {
const [k, v] = part.trim().split('=');
if (k && v !== undefined) info[k.trim()] = Number(v.trim());
});
res.json({
ok: true,
upload: info.upload || 0,
download: info.download || 0,
total: info.total || 0,
expire: info.expire || null,
});
} catch (e) {
res.status(400).json({ error: '获取订阅信息失败:' + e.message });
}
});
const aiLimiter = rateLimit({
windowMs: 10 * 60 * 1000,