From e5c1ae9ed8b688eaf955fa024e3116860f64c540 Mon Sep 17 00:00:00 2001 From: xream Date: Sat, 20 Jan 2024 23:00:37 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BC=98=E5=8C=96=E6=B5=81=E9=87=8F?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E8=A7=84=E5=88=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/package.json | 2 +- backend/src/utils/flow.js | 22 ++++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/backend/package.json b/backend/package.json index 1f66af1..c8367ab 100644 --- a/backend/package.json +++ b/backend/package.json @@ -1,6 +1,6 @@ { "name": "sub-store", - "version": "2.14.188", + "version": "2.14.189", "description": "Advanced Subscription Manager for QX, Loon, Surge, Stash and ShadowRocket.", "main": "src/main.js", "scripts": { diff --git a/backend/src/utils/flow.js b/backend/src/utils/flow.js index 05e6432..6414a38 100644 --- a/backend/src/utils/flow.js +++ b/backend/src/utils/flow.js @@ -88,17 +88,27 @@ export async function getFlowHeaders(rawUrl, ua, timeout) { export function parseFlowHeaders(flowHeaders) { if (!flowHeaders) return; // unit is KB - const uploadMatch = flowHeaders.match(/upload=(-?)([E+.\d]+)/); + const uploadMatch = flowHeaders.match( + /upload=([-+]?)([0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)/, + ); const upload = Number(uploadMatch[1] + uploadMatch[2]); - const downloadMatch = flowHeaders.match(/download=(-?)([E+.\d]+)/); + const downloadMatch = flowHeaders.match( + /download=([-+]?)([0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)/, + ); const download = Number(downloadMatch[1] + downloadMatch[2]); - - const total = Number(flowHeaders.match(/total=([E+.\d]+)/)[1]); + const totalMatch = flowHeaders.match( + /total=([-+]?)([0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)/, + ); + const total = Number(totalMatch[1] + totalMatch[2]); // optional expire timestamp - const match = flowHeaders.match(/expire=(\d+)/); - const expires = match ? Number(match[1]) : undefined; + const expireMatch = flowHeaders.match( + /expire=([-+]?)([0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?)/, + ); + const expires = expireMatch + ? Number(expireMatch[1] + expireMatch[2]) + : undefined; return { expires, total, usage: { upload, download } }; }