@leeguoo/pwtk-network-debugger 1.2.5 → 1.2.7

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.esm.js CHANGED
@@ -6674,6 +6674,7 @@ class NetworkInterceptor {
6674
6674
  constructor() {
6675
6675
  this.requests = /* @__PURE__ */ new Map();
6676
6676
  this.listeners = [];
6677
+ this.wasmCheckInterval = null;
6677
6678
  this.decryptConfig = { enabled: false };
6678
6679
  window.__originalFetch = window.fetch;
6679
6680
  this.interceptXHR();
@@ -6728,6 +6729,11 @@ class NetworkInterceptor {
6728
6729
  if (!this.decryptConfig.enabled || !data) {
6729
6730
  return null;
6730
6731
  }
6732
+ const isDecryptAvailable = typeof window.decrypt === "function";
6733
+ if (!isDecryptAvailable) {
6734
+ console.log("NetworkDebugger: window.decrypt 不可用,跳过解密");
6735
+ return null;
6736
+ }
6731
6737
  try {
6732
6738
  let key = "";
6733
6739
  let slk = "";
@@ -6745,9 +6751,15 @@ class NetworkInterceptor {
6745
6751
  });
6746
6752
  const result = await response.json();
6747
6753
  if (result.success && result.data) {
6748
- const num = result.data;
6749
- key = num.slice(2, 3) + num.slice(5, 6) + num.slice(8, 9);
6750
- console.log("NetworkDebugger: 自动获取密钥成功:", key, "原始值:", num);
6754
+ const num = String(result.data);
6755
+ if (num.length >= 9) {
6756
+ key = num.charAt(2) + num.charAt(5) + num.charAt(8);
6757
+ console.log("NetworkDebugger: 自动获取密钥成功 key:", key, "from num:", num);
6758
+ } else {
6759
+ console.warn("NetworkDebugger: getSK返回数据长度不足:", num);
6760
+ }
6761
+ } else {
6762
+ console.warn("NetworkDebugger: getSK返回失败:", result);
6751
6763
  }
6752
6764
  } catch (e) {
6753
6765
  console.warn("NetworkDebugger: 自动获取密钥失败:", e);
@@ -6756,20 +6768,33 @@ class NetworkInterceptor {
6756
6768
  if (!key && this.decryptConfig.keyExtractor) {
6757
6769
  key = this.decryptConfig.keyExtractor(headers);
6758
6770
  } else if (!key) {
6759
- key = headers.keys || headers.cid || "";
6771
+ key = headers.decryptKey || headers.keys || headers.cid || "";
6760
6772
  }
6761
6773
  if (this.decryptConfig.slkExtractor) {
6762
6774
  slk = this.decryptConfig.slkExtractor(headers);
6763
6775
  } else {
6764
- slk = headers.slk || "";
6776
+ slk = headers.decryptSlk || headers.slk || "";
6765
6777
  }
6766
6778
  const fullKey = key + slk;
6779
+ console.log("NetworkDebugger: 尝试解密", { key, slk, fullKey, hasDecryptFunction: typeof window.decrypt === "function" });
6767
6780
  if (fullKey) {
6768
- const decrypted = decrypt(typeof data === "string" ? data : JSON.stringify(data), fullKey);
6769
- if (decrypted !== data) {
6770
- console.log("NetworkDebugger: 解密成功", { key, slk, fullKey });
6781
+ const dataStr = typeof data === "string" ? data : JSON.stringify(data);
6782
+ const decrypted = decrypt(dataStr, fullKey);
6783
+ if (decrypted && decrypted !== dataStr && decrypted !== data) {
6784
+ console.log("NetworkDebugger: 解密成功", {
6785
+ key,
6786
+ slk,
6787
+ fullKey,
6788
+ originalLength: dataStr.length,
6789
+ decryptedType: typeof decrypted,
6790
+ preview: JSON.stringify(decrypted).substring(0, 100) + "..."
6791
+ });
6771
6792
  return decrypted;
6793
+ } else {
6794
+ console.log("NetworkDebugger: 解密未生效", { key, slk, fullKey, dataStr: dataStr.substring(0, 50) });
6772
6795
  }
6796
+ } else {
6797
+ console.log("NetworkDebugger: 没有密钥,跳过解密", { headers });
6773
6798
  }
6774
6799
  } catch (error) {
6775
6800
  console.warn("NetworkDebugger: Decryption failed:", error);
@@ -6817,7 +6842,6 @@ class NetworkInterceptor {
6817
6842
  if (decrypted !== null) {
6818
6843
  requestData.decryptedRequest = decrypted;
6819
6844
  self2.requests.set(requestId, requestData);
6820
- self2.notifyListeners(requestData);
6821
6845
  }
6822
6846
  }).catch((e) => console.warn("解密请求失败:", e));
6823
6847
  }
@@ -6857,9 +6881,10 @@ class NetworkInterceptor {
6857
6881
  self2.notifyListeners(requestData);
6858
6882
  }
6859
6883
  }).catch((e) => console.warn("解密响应失败:", e));
6884
+ } else {
6885
+ self2.requests.set(requestId, requestData);
6886
+ self2.notifyListeners(requestData);
6860
6887
  }
6861
- self2.requests.set(requestId, requestData);
6862
- self2.notifyListeners(requestData);
6863
6888
  }
6864
6889
  }
6865
6890
  });
@@ -6919,7 +6944,6 @@ class NetworkInterceptor {
6919
6944
  if (decrypted !== null) {
6920
6945
  requestData.decryptedRequest = decrypted;
6921
6946
  self2.requests.set(requestId, requestData);
6922
- self2.notifyListeners(requestData);
6923
6947
  }
6924
6948
  }).catch((e) => console.warn("解密请求失败:", e));
6925
6949
  }
@@ -6957,12 +6981,15 @@ class NetworkInterceptor {
6957
6981
  self2.notifyListeners(updatedRequestData);
6958
6982
  }
6959
6983
  }).catch((e) => console.warn("解密响应失败:", e));
6984
+ } else {
6985
+ self2.requests.set(requestId, updatedRequestData);
6986
+ self2.notifyListeners(updatedRequestData);
6960
6987
  }
6961
6988
  } catch (error) {
6962
6989
  updatedRequestData.error = `Failed to read response: ${error}`;
6990
+ self2.requests.set(requestId, updatedRequestData);
6991
+ self2.notifyListeners(updatedRequestData);
6963
6992
  }
6964
- self2.requests.set(requestId, updatedRequestData);
6965
- self2.notifyListeners(updatedRequestData);
6966
6993
  }
6967
6994
  return response;
6968
6995
  } catch (error) {
@@ -6985,6 +7012,11 @@ class WasmLoader {
6985
7012
  this.loading = false;
6986
7013
  }
6987
7014
  async loadWasm(wasmUrl, jsUrl) {
7015
+ if (typeof window.decrypt === "function") {
7016
+ console.log("NetworkDebugger: window.decrypt 已存在,跳过 WASM 加载");
7017
+ this.loaded = true;
7018
+ return true;
7019
+ }
6988
7020
  if (this.loaded) return true;
6989
7021
  if (this.loading) {
6990
7022
  return new Promise((resolve) => {
@@ -7068,9 +7100,15 @@ class WasmLoader {
7068
7100
  throw new Error("Unable to load WebAssembly from any path");
7069
7101
  }
7070
7102
  go.run(wasmModule.instance);
7071
- this.loaded = true;
7072
- console.log("NetworkDebugger: WebAssembly 加密模块已加载");
7073
- return true;
7103
+ await new Promise((resolve) => setTimeout(resolve, 100));
7104
+ if (typeof window.decrypt === "function") {
7105
+ this.loaded = true;
7106
+ console.log("NetworkDebugger: WebAssembly 加密模块已加载,decrypt 函数可用");
7107
+ return true;
7108
+ } else {
7109
+ console.warn("NetworkDebugger: WebAssembly 已加载但 decrypt 函数不可用");
7110
+ return false;
7111
+ }
7074
7112
  } catch (error) {
7075
7113
  console.warn("NetworkDebugger: WebAssembly 加载失败:", error);
7076
7114
  return false;
@@ -7987,7 +8025,7 @@ class DebugPanel {
7987
8025
  <div class="request-header">
7988
8026
  <span class="request-method ${methodClass}">${request.method}</span>
7989
8027
  <span class="request-url" title="${request.url}">${this.truncateUrl(request.url)}</span>
7990
- <span class="request-status ${statusClass}">${request.status || "ERR"}</span>
8028
+ <span class="request-status ${statusClass}">${request.status ? request.status : request.duration !== void 0 ? "ERR" : "Pending"}</span>
7991
8029
  ${hasError ? '<span class="error-badge">⚠️</span>' : ""}
7992
8030
  <button class="share-btn" title="分享此请求 (by Leo)" onclick="event.stopPropagation()">🔗</button>
7993
8031
  </div>
@@ -8066,20 +8104,20 @@ class DebugPanel {
8066
8104
  </div>
8067
8105
  `;
8068
8106
  }
8069
- if (request.requestBody && !request.decryptedRequest) {
8107
+ if (request.requestBody) {
8070
8108
  html += `
8071
8109
  <div class="detail-section">
8072
- <div class="detail-title">请求数据</div>
8110
+ <div class="detail-title">${request.decryptedRequest ? "原始请求数据" : "请求数据"}</div>
8073
8111
  <div class="detail-content">
8074
8112
  <div class="json-content">${this.formatData(request.requestBody)}</div>
8075
8113
  </div>
8076
8114
  </div>
8077
8115
  `;
8078
8116
  }
8079
- if (request.responseBody && !request.decryptedResponse) {
8117
+ if (request.responseBody) {
8080
8118
  html += `
8081
8119
  <div class="detail-section">
8082
- <div class="detail-title">响应数据</div>
8120
+ <div class="detail-title">${request.decryptedResponse ? "原始响应数据" : "响应数据"}</div>
8083
8121
  <div class="detail-content">
8084
8122
  <div class="json-content">${this.formatData(request.responseBody)}</div>
8085
8123
  </div>
@@ -8118,12 +8156,7 @@ class DebugPanel {
8118
8156
  return "status-error";
8119
8157
  }
8120
8158
  truncateUrl(url) {
8121
- if (url.length <= 50) return url;
8122
- const parts = url.split("/");
8123
- const domain = parts.slice(0, 3).join("/");
8124
- const path = parts.slice(3).join("/");
8125
- if (path.length <= 20) return url;
8126
- return `${domain}/...${path.slice(-20)}`;
8159
+ return url;
8127
8160
  }
8128
8161
  switchTab(tabName) {
8129
8162
  this.container.querySelectorAll(".debugger-tab").forEach((tab) => {
@@ -8443,9 +8476,14 @@ class NetworkDebugger {
8443
8476
  ...config
8444
8477
  };
8445
8478
  try {
8446
- if (this.config.wasm?.enabled) {
8479
+ if (this.config.wasm?.enabled !== false) {
8447
8480
  this.wasmLoader = new WasmLoader();
8448
- await this.wasmLoader.loadWasm(this.config.wasm.wasmUrl, this.config.wasm.jsUrl);
8481
+ const wasmLoaded = await this.wasmLoader.loadWasm(this.config.wasm?.wasmUrl, this.config.wasm?.jsUrl);
8482
+ if (wasmLoaded) {
8483
+ console.log("NetworkDebugger: WASM decrypt 函数已就绪");
8484
+ } else {
8485
+ console.log("NetworkDebugger: WASM 加载失败或 decrypt 函数不可用,将依赖页面自带的解密功能");
8486
+ }
8449
8487
  }
8450
8488
  this.interceptor = new NetworkInterceptor();
8451
8489
  if (this.config.decrypt?.enabled) {
@@ -8462,7 +8500,7 @@ class NetworkDebugger {
8462
8500
  this.initialized = true;
8463
8501
  console.log(`
8464
8502
  ╔════════════════════════════════════════╗
8465
- ║ 🔓 PWTK 解密小工具 v1.2.5
8503
+ ║ 🔓 PWTK 解密小工具 v1.2.7
8466
8504
  ║ Created by Leo (@leeguoo) ║
8467
8505
  ║ 技术支持: 请联系 Leo ║
8468
8506
  ║ 分享服务: curl.bwg.leeguoo.com ║