surgio
Version:
Generating rules for Surge, Clash, Quantumult like a PRO
68 lines • 2.71 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.formatSubscriptionUserInfo = exports.parseSubscriptionNode = exports.parseSubscriptionUserInfo = void 0;
const filesize_1 = require("filesize");
const bytes_1 = __importDefault(require("bytes"));
const date_fns_1 = require("date-fns");
const parseSubscriptionUserInfo = (str) => {
const res = {
upload: 0,
download: 0,
total: 0,
expire: 0,
};
str.split(';').forEach((item) => {
if (!item) {
return;
}
const pair = item.split('=');
const key = pair[0].trim();
const value = Number(pair[1].trim());
if (key in res && !Number.isNaN(value)) {
res[key] = value;
}
});
return res;
};
exports.parseSubscriptionUserInfo = parseSubscriptionUserInfo;
const parseSubscriptionNode = (dataString, expireString) => {
// dataString => 剩余流量:57.37% 1.01TB
// expireString => 过期时间:2020-04-21 22:27:38
const dataMatch = dataString.match(/剩余流量:(\d{0,2}(\.\d{1,4})?)%\s(.*)$/);
const expireMatch = expireString.match(/过期时间:(.*)$/);
if (dataMatch && expireMatch) {
const percent = Number(dataMatch[1]) / 100;
const leftData = bytes_1.default.parse(dataMatch[3]) ?? 0;
const total = Number((Number(leftData) / percent).toFixed(0));
const expire = Math.floor(new Date(expireMatch[1]).getTime() / 1000);
return {
upload: 0,
download: total - Number(leftData),
total,
expire,
};
}
else {
return undefined;
}
};
exports.parseSubscriptionNode = parseSubscriptionNode;
const formatSubscriptionUserInfo = (userInfo) => {
return {
upload: (0, filesize_1.filesize)(userInfo.upload, { base: 2 }),
download: (0, filesize_1.filesize)(userInfo.download, { base: 2 }),
used: (0, filesize_1.filesize)(userInfo.upload + userInfo.download, { base: 2 }),
left: (0, filesize_1.filesize)(userInfo.total - userInfo.upload - userInfo.download, {
base: 2,
}),
total: (0, filesize_1.filesize)(userInfo.total, { base: 2 }),
expire: userInfo.expire
? `${(0, date_fns_1.format)(new Date(userInfo.expire * 1000), 'yyyy-MM-dd')} (${(0, date_fns_1.formatDistanceToNow)(new Date(userInfo.expire * 1000))})`
: '无数据',
};
};
exports.formatSubscriptionUserInfo = formatSubscriptionUserInfo;
//# sourceMappingURL=subscription.js.map