@leeguoo/pwtk-network-debugger 1.2.20 → 1.2.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +3 -3
- package/dist/index.esm.js +135 -109
- package/dist/index.js +3 -3
- package/package.json +1 -1
package/dist/index.esm.js
CHANGED
|
@@ -6608,102 +6608,6 @@ function requireCryptoJs() {
|
|
|
6608
6608
|
}
|
|
6609
6609
|
var cryptoJsExports = requireCryptoJs();
|
|
6610
6610
|
const CryptoJS = /* @__PURE__ */ getDefaultExportFromCjs(cryptoJsExports);
|
|
6611
|
-
function decrypt(encryptedData, keyStr) {
|
|
6612
|
-
console.log("[PWTK Decrypt] decrypt function called:", {
|
|
6613
|
-
dataLength: encryptedData?.length,
|
|
6614
|
-
dataPreview: encryptedData?.substring(0, 50),
|
|
6615
|
-
keyStr,
|
|
6616
|
-
hasWindowDecrypt: typeof window.decrypt === "function",
|
|
6617
|
-
hasWindowEncrypt: typeof window.encrypt === "function"
|
|
6618
|
-
});
|
|
6619
|
-
if (!encryptedData || encryptedData.startsWith("{") || encryptedData.startsWith("[")) {
|
|
6620
|
-
console.log("[PWTK Decrypt] Data looks like JSON, parsing directly");
|
|
6621
|
-
try {
|
|
6622
|
-
const parsed = JSON.parse(encryptedData);
|
|
6623
|
-
console.log("[PWTK Decrypt] Successfully parsed as JSON");
|
|
6624
|
-
return parsed;
|
|
6625
|
-
} catch {
|
|
6626
|
-
console.log("[PWTK Decrypt] Failed to parse as JSON, returning as string");
|
|
6627
|
-
return encryptedData;
|
|
6628
|
-
}
|
|
6629
|
-
}
|
|
6630
|
-
if (window.decrypt && keyStr) {
|
|
6631
|
-
console.log("[PWTK Decrypt] Trying WebAssembly decrypt");
|
|
6632
|
-
console.log("[PWTK Decrypt] Input to window.decrypt:", {
|
|
6633
|
-
data: encryptedData.substring(0, 100) + "...",
|
|
6634
|
-
key: keyStr
|
|
6635
|
-
});
|
|
6636
|
-
try {
|
|
6637
|
-
const decrypted = window.decrypt(encryptedData, keyStr);
|
|
6638
|
-
console.log("[PWTK Decrypt] window.decrypt returned:", {
|
|
6639
|
-
type: typeof decrypted,
|
|
6640
|
-
length: decrypted?.length,
|
|
6641
|
-
preview: decrypted ? decrypted.substring(0, 200) + (decrypted.length > 200 ? "..." : "") : null,
|
|
6642
|
-
sameAsInput: decrypted === encryptedData,
|
|
6643
|
-
hasInvalidChars: decrypted?.includes("�")
|
|
6644
|
-
});
|
|
6645
|
-
if (decrypted && decrypted !== encryptedData && !decrypted.includes("�")) {
|
|
6646
|
-
try {
|
|
6647
|
-
const parsed = JSON.parse(decrypted);
|
|
6648
|
-
console.log("[PWTK Decrypt] ✅ WebAssembly decryption successful, parsed as JSON:", parsed);
|
|
6649
|
-
return parsed;
|
|
6650
|
-
} catch {
|
|
6651
|
-
if (decrypted.length > 0) {
|
|
6652
|
-
console.log("[PWTK Decrypt] ✅ WebAssembly decryption successful, returning as string");
|
|
6653
|
-
return decrypted;
|
|
6654
|
-
}
|
|
6655
|
-
}
|
|
6656
|
-
} else {
|
|
6657
|
-
console.log("[PWTK Decrypt] window.decrypt did not change the data or returned invalid result");
|
|
6658
|
-
}
|
|
6659
|
-
} catch (e) {
|
|
6660
|
-
console.log("[PWTK Decrypt] WebAssembly decrypt error:", e);
|
|
6661
|
-
}
|
|
6662
|
-
} else {
|
|
6663
|
-
console.log("[PWTK Decrypt] WebAssembly not available:", {
|
|
6664
|
-
hasWindowDecrypt: !!window.decrypt,
|
|
6665
|
-
hasKey: !!keyStr,
|
|
6666
|
-
windowDecryptType: typeof window.decrypt
|
|
6667
|
-
});
|
|
6668
|
-
}
|
|
6669
|
-
const keys = [
|
|
6670
|
-
keyStr,
|
|
6671
|
-
"thisisakey123456",
|
|
6672
|
-
"VITE_CRYPTO_KEY"
|
|
6673
|
-
].filter(Boolean);
|
|
6674
|
-
for (const secretKey of keys) {
|
|
6675
|
-
if (!secretKey) continue;
|
|
6676
|
-
try {
|
|
6677
|
-
const key = CryptoJS.enc.Utf8.parse(secretKey.padEnd(16, "0").slice(0, 16));
|
|
6678
|
-
const iv = CryptoJS.enc.Utf8.parse(secretKey.padEnd(16, "0").slice(0, 16));
|
|
6679
|
-
const decrypted = CryptoJS.AES.decrypt(encryptedData, key, {
|
|
6680
|
-
iv,
|
|
6681
|
-
mode: CryptoJS.mode.CBC,
|
|
6682
|
-
padding: CryptoJS.pad.Pkcs7
|
|
6683
|
-
});
|
|
6684
|
-
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
6685
|
-
if (decryptedStr) {
|
|
6686
|
-
try {
|
|
6687
|
-
return JSON.parse(decryptedStr);
|
|
6688
|
-
} catch {
|
|
6689
|
-
return decryptedStr;
|
|
6690
|
-
}
|
|
6691
|
-
}
|
|
6692
|
-
} catch (e) {
|
|
6693
|
-
}
|
|
6694
|
-
}
|
|
6695
|
-
try {
|
|
6696
|
-
const decoded = atob(encryptedData);
|
|
6697
|
-
try {
|
|
6698
|
-
return JSON.parse(decoded);
|
|
6699
|
-
} catch {
|
|
6700
|
-
return decoded;
|
|
6701
|
-
}
|
|
6702
|
-
} catch {
|
|
6703
|
-
}
|
|
6704
|
-
console.log("[PWTK Decrypt] ❌ All decryption methods failed, returning original data");
|
|
6705
|
-
return encryptedData;
|
|
6706
|
-
}
|
|
6707
6611
|
class Logger {
|
|
6708
6612
|
constructor() {
|
|
6709
6613
|
this.panel = null;
|
|
@@ -6796,6 +6700,102 @@ class Logger {
|
|
|
6796
6700
|
}
|
|
6797
6701
|
}
|
|
6798
6702
|
const logger = new Logger();
|
|
6703
|
+
function decrypt(encryptedData, keyStr) {
|
|
6704
|
+
logger.debug("[PWTK Decrypt] decrypt function called:", {
|
|
6705
|
+
dataLength: encryptedData?.length,
|
|
6706
|
+
dataPreview: encryptedData?.substring(0, 50),
|
|
6707
|
+
keyStr,
|
|
6708
|
+
hasWindowDecrypt: typeof window.decrypt === "function",
|
|
6709
|
+
hasWindowEncrypt: typeof window.encrypt === "function"
|
|
6710
|
+
});
|
|
6711
|
+
if (!encryptedData || encryptedData.startsWith("{") || encryptedData.startsWith("[")) {
|
|
6712
|
+
logger.debug("[PWTK Decrypt] Data looks like JSON, parsing directly");
|
|
6713
|
+
try {
|
|
6714
|
+
const parsed = JSON.parse(encryptedData);
|
|
6715
|
+
logger.debug("[PWTK Decrypt] Successfully parsed as JSON");
|
|
6716
|
+
return parsed;
|
|
6717
|
+
} catch {
|
|
6718
|
+
logger.debug("[PWTK Decrypt] Failed to parse as JSON, returning as string");
|
|
6719
|
+
return encryptedData;
|
|
6720
|
+
}
|
|
6721
|
+
}
|
|
6722
|
+
if (window.decrypt && keyStr) {
|
|
6723
|
+
logger.debug("[PWTK Decrypt] Trying WebAssembly decrypt");
|
|
6724
|
+
logger.debug("[PWTK Decrypt] Input to window.decrypt:", {
|
|
6725
|
+
data: encryptedData.substring(0, 100) + "...",
|
|
6726
|
+
key: keyStr
|
|
6727
|
+
});
|
|
6728
|
+
try {
|
|
6729
|
+
const decrypted = window.decrypt(encryptedData, keyStr);
|
|
6730
|
+
logger.debug("[PWTK Decrypt] window.decrypt returned:", {
|
|
6731
|
+
type: typeof decrypted,
|
|
6732
|
+
length: decrypted?.length,
|
|
6733
|
+
preview: decrypted ? decrypted.substring(0, 200) + (decrypted.length > 200 ? "..." : "") : null,
|
|
6734
|
+
sameAsInput: decrypted === encryptedData,
|
|
6735
|
+
hasInvalidChars: decrypted?.includes("�")
|
|
6736
|
+
});
|
|
6737
|
+
if (decrypted && decrypted !== encryptedData && !decrypted.includes("�")) {
|
|
6738
|
+
try {
|
|
6739
|
+
const parsed = JSON.parse(decrypted);
|
|
6740
|
+
logger.debug("[PWTK Decrypt] ✅ WebAssembly decryption successful, parsed as JSON:", parsed);
|
|
6741
|
+
return parsed;
|
|
6742
|
+
} catch {
|
|
6743
|
+
if (decrypted.length > 0) {
|
|
6744
|
+
logger.debug("[PWTK Decrypt] ✅ WebAssembly decryption successful, returning as string");
|
|
6745
|
+
return decrypted;
|
|
6746
|
+
}
|
|
6747
|
+
}
|
|
6748
|
+
} else {
|
|
6749
|
+
logger.debug("[PWTK Decrypt] window.decrypt did not change the data or returned invalid result");
|
|
6750
|
+
}
|
|
6751
|
+
} catch (e) {
|
|
6752
|
+
logger.debug("[PWTK Decrypt] WebAssembly decrypt error:", e);
|
|
6753
|
+
}
|
|
6754
|
+
} else {
|
|
6755
|
+
logger.debug("[PWTK Decrypt] WebAssembly not available:", {
|
|
6756
|
+
hasWindowDecrypt: !!window.decrypt,
|
|
6757
|
+
hasKey: !!keyStr,
|
|
6758
|
+
windowDecryptType: typeof window.decrypt
|
|
6759
|
+
});
|
|
6760
|
+
}
|
|
6761
|
+
const keys = [
|
|
6762
|
+
keyStr,
|
|
6763
|
+
"thisisakey123456",
|
|
6764
|
+
"VITE_CRYPTO_KEY"
|
|
6765
|
+
].filter(Boolean);
|
|
6766
|
+
for (const secretKey of keys) {
|
|
6767
|
+
if (!secretKey) continue;
|
|
6768
|
+
try {
|
|
6769
|
+
const key = CryptoJS.enc.Utf8.parse(secretKey.padEnd(16, "0").slice(0, 16));
|
|
6770
|
+
const iv = CryptoJS.enc.Utf8.parse(secretKey.padEnd(16, "0").slice(0, 16));
|
|
6771
|
+
const decrypted = CryptoJS.AES.decrypt(encryptedData, key, {
|
|
6772
|
+
iv,
|
|
6773
|
+
mode: CryptoJS.mode.CBC,
|
|
6774
|
+
padding: CryptoJS.pad.Pkcs7
|
|
6775
|
+
});
|
|
6776
|
+
const decryptedStr = decrypted.toString(CryptoJS.enc.Utf8);
|
|
6777
|
+
if (decryptedStr) {
|
|
6778
|
+
try {
|
|
6779
|
+
return JSON.parse(decryptedStr);
|
|
6780
|
+
} catch {
|
|
6781
|
+
return decryptedStr;
|
|
6782
|
+
}
|
|
6783
|
+
}
|
|
6784
|
+
} catch (e) {
|
|
6785
|
+
}
|
|
6786
|
+
}
|
|
6787
|
+
try {
|
|
6788
|
+
const decoded = atob(encryptedData);
|
|
6789
|
+
try {
|
|
6790
|
+
return JSON.parse(decoded);
|
|
6791
|
+
} catch {
|
|
6792
|
+
return decoded;
|
|
6793
|
+
}
|
|
6794
|
+
} catch {
|
|
6795
|
+
}
|
|
6796
|
+
logger.debug("[PWTK Decrypt] ❌ All decryption methods failed, returning original data");
|
|
6797
|
+
return encryptedData;
|
|
6798
|
+
}
|
|
6799
6799
|
class NetworkInterceptor {
|
|
6800
6800
|
constructor() {
|
|
6801
6801
|
this.requests = /* @__PURE__ */ new Map();
|
|
@@ -7976,19 +7976,40 @@ async function createShareLink(requestData) {
|
|
|
7976
7976
|
decryptedResponse: requestData.decryptedResponse,
|
|
7977
7977
|
error: requestData.error,
|
|
7978
7978
|
creator: "PWTK Network Debugger by Leo (@leeguoo)",
|
|
7979
|
-
version: "1.2.
|
|
7979
|
+
version: "1.2.22"
|
|
7980
7980
|
}
|
|
7981
7981
|
};
|
|
7982
|
+
const currentDomain = window.location.hostname;
|
|
7983
|
+
const isOnCurlDomain = currentDomain === "curl.bwg.leeguoo.com" || currentDomain === "localhost";
|
|
7982
7984
|
const originalFetch = window.__originalFetch || window.fetch;
|
|
7983
|
-
|
|
7984
|
-
|
|
7985
|
-
|
|
7986
|
-
|
|
7987
|
-
|
|
7988
|
-
|
|
7989
|
-
|
|
7990
|
-
|
|
7991
|
-
}
|
|
7985
|
+
let apiUrl;
|
|
7986
|
+
let response;
|
|
7987
|
+
if (isOnCurlDomain) {
|
|
7988
|
+
apiUrl = "/api/share";
|
|
7989
|
+
logger.debug("使用同域API:", apiUrl);
|
|
7990
|
+
} else {
|
|
7991
|
+
apiUrl = "https://curl.bwg.leeguoo.com/api/share";
|
|
7992
|
+
logger.debug("使用跨域API:", apiUrl);
|
|
7993
|
+
}
|
|
7994
|
+
try {
|
|
7995
|
+
response = await originalFetch(apiUrl, {
|
|
7996
|
+
method: "POST",
|
|
7997
|
+
headers: {
|
|
7998
|
+
"Content-Type": "application/json"
|
|
7999
|
+
},
|
|
8000
|
+
body: JSON.stringify({
|
|
8001
|
+
data: shareData
|
|
8002
|
+
})
|
|
8003
|
+
});
|
|
8004
|
+
} catch (fetchError) {
|
|
8005
|
+
if (fetchError.name === "TypeError" && fetchError.message.includes("fetch")) {
|
|
8006
|
+
throw new Error(`网络连接失败: 无法连接到分享服务器 (${apiUrl}). 可能原因: CORS策略限制或网络问题`);
|
|
8007
|
+
}
|
|
8008
|
+
throw fetchError;
|
|
8009
|
+
}
|
|
8010
|
+
if (!response.ok) {
|
|
8011
|
+
throw new Error(`HTTP ${response.status}: ${response.statusText}`);
|
|
8012
|
+
}
|
|
7992
8013
|
const result = await response.json();
|
|
7993
8014
|
if (result.shareId) {
|
|
7994
8015
|
const shareUrl = `https://curl.bwg.leeguoo.com/share/${result.shareId}`;
|
|
@@ -7998,8 +8019,13 @@ async function createShareLink(requestData) {
|
|
|
7998
8019
|
throw new Error(result.error || "创建分享失败");
|
|
7999
8020
|
}
|
|
8000
8021
|
} catch (error) {
|
|
8001
|
-
|
|
8002
|
-
|
|
8022
|
+
const errorMessage = error.message || error.toString() || "未知错误";
|
|
8023
|
+
logger.error("NetworkDebugger: 创建分享链接失败:", {
|
|
8024
|
+
message: errorMessage,
|
|
8025
|
+
name: error.name,
|
|
8026
|
+
stack: error.stack?.split("\n")[0]
|
|
8027
|
+
});
|
|
8028
|
+
throw new Error(errorMessage);
|
|
8003
8029
|
}
|
|
8004
8030
|
}
|
|
8005
8031
|
async function copyToClipboard(text) {
|
|
@@ -8216,7 +8242,7 @@ class DebugPanel {
|
|
|
8216
8242
|
this.renderRequests();
|
|
8217
8243
|
}
|
|
8218
8244
|
addRequestToUI(request) {
|
|
8219
|
-
|
|
8245
|
+
logger.debug("[PWTK UI] Adding/updating request:", {
|
|
8220
8246
|
id: request.id,
|
|
8221
8247
|
url: request.url,
|
|
8222
8248
|
hasResponse: !!request.responseBody,
|