@leeguoo/pwtk-network-debugger 1.2.48 → 1.2.49-beta.1

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
@@ -7397,77 +7397,134 @@ class WasmLoader {
7397
7397
  return this.loaded && typeof window.encrypt === "function";
7398
7398
  }
7399
7399
  }
7400
- function parseCurl(curlCommand) {
7401
- const lines = curlCommand.split("\\\n").map((line) => line.trim());
7402
- const fullCommand = lines.join(" ");
7403
- const urlMatch = fullCommand.match(/c?curl\s+['"]?([^'"\s]+)['"]?/);
7404
- let url = urlMatch ? urlMatch[1] : "";
7405
- const headers = {};
7406
- const headerMatches = fullCommand.matchAll(/-H\s+['"]([^:]+):\s*([^'"]*)['"]/g);
7407
- for (const match of headerMatches) {
7408
- headers[match[1]] = match[2];
7409
- }
7410
- let data = void 0;
7411
- const dataMatch = fullCommand.match(/(?:--data-raw|--data|-d)\s+['"]({.+?})['"]/s);
7412
- if (dataMatch) {
7413
- const rawData = dataMatch[1];
7414
- try {
7415
- data = JSON.parse(rawData);
7416
- } catch {
7417
- data = rawData;
7418
- }
7419
- }
7420
- if (!dataMatch && url.includes("?")) {
7421
- try {
7422
- const urlObj = new URL(url, "http://example.com");
7423
- const params = {};
7424
- urlObj.searchParams.forEach((value, key) => {
7425
- params[key] = value;
7426
- });
7427
- if (Object.keys(params).length > 0) {
7428
- if (Object.keys(params).length === 1 && params.data) {
7429
- data = params.data;
7430
- } else {
7431
- data = params;
7432
- }
7433
- }
7434
- } catch (e) {
7435
- }
7436
- }
7437
- const methodMatch = fullCommand.match(/-X\s+(['"]?)([A-Z]+)\1/);
7438
- let method = methodMatch ? methodMatch[2] : dataMatch ? "POST" : "GET";
7439
- return {
7440
- url,
7441
- method,
7442
- headers,
7443
- data
7444
- };
7445
- }
7446
7400
  function formatJson(obj) {
7447
7401
  return JSON.stringify(obj, null, 2);
7448
7402
  }
7449
7403
  const styles = `
7450
- /* NetworkDebugger 样式 */
7404
+ /* iOS 26 Liquid Glass NetworkDebugger 样式 */
7405
+ :root {
7406
+ --liquid-glass-primary: rgba(255, 255, 255, 0.15);
7407
+ --liquid-glass-secondary: rgba(255, 255, 255, 0.08);
7408
+ --liquid-glass-border: rgba(255, 255, 255, 0.18);
7409
+ --liquid-glass-shadow: rgba(31, 38, 135, 0.37);
7410
+ --liquid-glass-highlight: rgba(255, 255, 255, 0.25);
7411
+ --liquid-glass-dark: rgba(13, 17, 23, 0.75);
7412
+ }
7413
+
7451
7414
  #network-debugger-panel {
7452
7415
  position: fixed;
7453
7416
  z-index: 999999;
7454
- background: #1a1a1a;
7417
+
7418
+ /* 强制 GPU 加速和 3D 变换 */
7419
+ transform: translate3d(0, 0, 0);
7420
+ will-change: transform, backdrop-filter;
7421
+
7422
+ /* iOS 26 Liquid Glass 核心效果 - 增强版 */
7423
+ backdrop-filter: blur(25px) saturate(200%) brightness(1.05) !important;
7424
+ -webkit-backdrop-filter: blur(25px) saturate(200%) brightness(1.05) !important;
7425
+
7426
+ /* iOS 浅色毛玻璃背景 */
7427
+ background: rgba(245, 245, 247, 0.8);
7428
+ background-image: linear-gradient(
7429
+ 135deg,
7430
+ rgba(255, 255, 255, 0.5) 0%,
7431
+ rgba(255, 255, 255, 0.25) 100%
7432
+ );
7433
+
7434
+ /* 玻璃边框 */
7435
+ border: 1px solid rgba(255, 255, 255, 0.25);
7436
+
7437
+ /* 多层阴影创建深度 */
7438
+ box-shadow:
7439
+ 0 10px 40px rgba(31, 38, 135, 0.4),
7440
+ inset 0 2px 4px rgba(255, 255, 255, 0.3),
7441
+ inset 0 -2px 4px rgba(0, 0, 0, 0.12);
7442
+
7443
+ border-radius: 20px;
7455
7444
  color: #ffffff;
7456
- font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
7445
+ font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Monaco', 'Menlo', monospace;
7457
7446
  font-size: 12px;
7458
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
7459
- border-radius: 8px;
7460
7447
  overflow: hidden;
7461
7448
  max-width: 90vw;
7462
7449
  max-height: 80vh;
7463
- transition: all 0.3s ease;
7450
+
7451
+ /* 性能优化 */
7452
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
7453
+ }
7454
+
7455
+ /* 主面板的镜面反射效果 */
7456
+ #network-debugger-panel::before {
7457
+ content: '';
7458
+ position: absolute;
7459
+ inset: 0;
7460
+ border-radius: inherit;
7461
+ background: linear-gradient(
7462
+ 135deg,
7463
+ rgba(255, 255, 255, 0.3) 0%,
7464
+ rgba(255, 255, 255, 0.05) 50%,
7465
+ transparent 100%
7466
+ );
7467
+ pointer-events: none;
7468
+ z-index: 1;
7469
+ }
7470
+
7471
+ /* 镜面高光效果 */
7472
+ #network-debugger-panel::after {
7473
+ content: '';
7474
+ position: absolute;
7475
+ inset: 0;
7476
+ border-radius: inherit;
7477
+ background: radial-gradient(
7478
+ circle at 30% 30%,
7479
+ rgba(255, 255, 255, 0.2),
7480
+ transparent 70%
7481
+ );
7482
+ pointer-events: none;
7483
+ z-index: 1;
7464
7484
  }
7465
7485
 
7466
7486
  #network-debugger-panel.minimized {
7467
- height: 35px !important;
7487
+ /* iOS 控制中心风格的圆角矩形 */
7488
+ height: 48px !important;
7489
+ width: 220px !important;
7490
+ max-width: 220px !important;
7491
+ border-radius: 24px !important;
7468
7492
  overflow: hidden;
7469
- width: 160px !important;
7470
- max-width: 160px !important;
7493
+
7494
+ /* 强制 GPU 加速和 3D 变换 */
7495
+ transform: translate3d(0, 0, 0) !important;
7496
+ will-change: transform, backdrop-filter !important;
7497
+
7498
+ /* 真正的 iOS Liquid Glass 效果 - 加强版 */
7499
+ background:
7500
+ /* 顶部高光 */
7501
+ linear-gradient(180deg,
7502
+ rgba(255, 255, 255, 0.5) 0%,
7503
+ rgba(255, 255, 255, 0.1) 35%),
7504
+ /* 主玻璃层 */
7505
+ radial-gradient(ellipse at top,
7506
+ rgba(255, 255, 255, 0.35),
7507
+ rgba(255, 255, 255, 0.12)),
7508
+ /* iOS 浅色基底 */
7509
+ rgba(245, 245, 247, 0.85) !important;
7510
+
7511
+ /* 增强毛玻璃效果 */
7512
+ backdrop-filter: blur(40px) saturate(220%) brightness(1.1) !important;
7513
+ -webkit-backdrop-filter: blur(40px) saturate(220%) brightness(1.1) !important;
7514
+
7515
+ /* iOS 风格边缘光效 - 增强版 */
7516
+ box-shadow:
7517
+ /* 外发光 */
7518
+ 0 0 0 0.5px rgba(255, 255, 255, 0.7) !important,
7519
+ /* 内阴影创建玻璃厚度 */
7520
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.7) !important,
7521
+ inset 0 -1px 0 0 rgba(0, 0, 0, 0.2) !important,
7522
+ /* 深度阴影 */
7523
+ 0 15px 40px rgba(0, 0, 0, 0.3) !important,
7524
+ 0 4px 10px rgba(0, 0, 0, 0.2) !important;
7525
+
7526
+ /* 平滑过渡 */
7527
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1) !important;
7471
7528
  }
7472
7529
 
7473
7530
  #network-debugger-panel.minimized .debugger-content {
@@ -7482,32 +7539,37 @@ const styles = `
7482
7539
  display: none;
7483
7540
  }
7484
7541
 
7542
+ #network-debugger-panel.fullscreen {
7543
+ backdrop-filter: blur(25px) saturate(200%);
7544
+ -webkit-backdrop-filter: blur(25px) saturate(200%);
7545
+ }
7546
+
7485
7547
  #network-debugger-panel.bottom-right {
7486
7548
  bottom: 20px;
7487
7549
  right: 20px;
7488
- width: 400px;
7489
- height: 300px;
7550
+ width: 600px;
7551
+ height: 500px;
7490
7552
  }
7491
7553
 
7492
7554
  #network-debugger-panel.bottom-left {
7493
7555
  bottom: 20px;
7494
7556
  left: 20px;
7495
- width: 400px;
7496
- height: 300px;
7557
+ width: 600px;
7558
+ height: 500px;
7497
7559
  }
7498
7560
 
7499
7561
  #network-debugger-panel.top-right {
7500
7562
  top: 20px;
7501
7563
  right: 20px;
7502
- width: 400px;
7503
- height: 300px;
7564
+ width: 600px;
7565
+ height: 500px;
7504
7566
  }
7505
7567
 
7506
7568
  #network-debugger-panel.top-left {
7507
7569
  top: 20px;
7508
7570
  left: 20px;
7509
- width: 400px;
7510
- height: 300px;
7571
+ width: 600px;
7572
+ height: 500px;
7511
7573
  }
7512
7574
 
7513
7575
  #network-debugger-panel.fullscreen {
@@ -7519,87 +7581,138 @@ const styles = `
7519
7581
  }
7520
7582
 
7521
7583
  .debugger-header {
7522
- background: #333;
7523
- padding: 8px 12px;
7584
+ /* 头部 Liquid Glass 效果 */
7585
+ backdrop-filter: blur(15px) brightness(1.1);
7586
+ -webkit-backdrop-filter: blur(15px) brightness(1.1);
7587
+
7588
+ /* 多层背景效果 */
7589
+ background:
7590
+ /* 顶部高光 */
7591
+ linear-gradient(180deg,
7592
+ rgba(255, 255, 255, 0.8) 0%,
7593
+ rgba(255, 255, 255, 0.4) 60%),
7594
+ /* 基础玻璃层 */
7595
+ linear-gradient(
7596
+ 135deg,
7597
+ rgba(255, 255, 255, 0.6),
7598
+ rgba(255, 255, 255, 0.4)
7599
+ );
7600
+
7601
+ border: 1px solid rgba(255, 255, 255, 0.2);
7602
+ border-bottom: 1px solid rgba(255, 255, 255, 0.15);
7603
+
7604
+ padding: 12px 16px;
7524
7605
  display: flex;
7525
7606
  justify-content: space-between;
7526
7607
  align-items: center;
7527
7608
  cursor: move;
7528
7609
  user-select: none;
7529
- border-bottom: 1px solid #444;
7610
+ position: relative;
7611
+ z-index: 2;
7612
+
7613
+ /* iOS 风格圆角 */
7614
+ border-radius: 20px 20px 0 0;
7615
+
7616
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7617
+ }
7618
+
7619
+ .debugger-header:hover {
7620
+ backdrop-filter: blur(18px) brightness(1.15);
7621
+ -webkit-backdrop-filter: blur(18px) brightness(1.15);
7622
+ background: linear-gradient(
7623
+ 135deg,
7624
+ rgba(255, 255, 255, 0.15),
7625
+ rgba(255, 255, 255, 0.08)
7626
+ );
7530
7627
  }
7531
7628
 
7532
7629
  .debugger-title {
7533
- font-weight: bold;
7534
- color: #4CAF50;
7535
- font-size: 14px;
7630
+ font-weight: 600;
7631
+ color: rgba(60, 60, 67, 0.9);
7632
+ font-size: 15px;
7633
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
7536
7634
  }
7537
7635
 
7538
7636
  .debugger-controls {
7539
7637
  display: flex;
7540
- gap: 8px;
7638
+ gap: 10px;
7639
+ position: relative;
7640
+ z-index: 3;
7541
7641
  }
7542
7642
 
7543
7643
  .debugger-btn {
7544
- background: none;
7545
- border: none;
7546
- color: #fff;
7547
- padding: 4px 8px;
7548
- border-radius: 4px;
7644
+ /* 按钮毛玻璃效果但保证可见性 */
7645
+ backdrop-filter: blur(8px);
7646
+ -webkit-backdrop-filter: blur(8px);
7647
+ background: linear-gradient(
7648
+ 135deg,
7649
+ rgba(255, 255, 255, 0.7),
7650
+ rgba(255, 255, 255, 0.5)
7651
+ );
7652
+ border: 1px solid rgba(0, 0, 0, 0.08);
7653
+ color: rgba(60, 60, 67, 0.9);
7654
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
7655
+ padding: 6px 12px;
7656
+ border-radius: 12px;
7549
7657
  cursor: pointer;
7550
- font-size: 12px;
7551
- transition: background-color 0.2s;
7658
+ font-size: 11px;
7659
+ font-weight: 600;
7660
+
7661
+ /* 按钮阴影 */
7662
+ box-shadow:
7663
+ 0 2px 8px rgba(0, 0, 0, 0.1),
7664
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7665
+
7666
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7667
+ transform: translateZ(0);
7552
7668
  }
7553
7669
 
7554
7670
  .debugger-btn:hover {
7555
- background: #555;
7671
+ backdrop-filter: blur(12px);
7672
+ -webkit-backdrop-filter: blur(12px);
7673
+ background: linear-gradient(
7674
+ 135deg,
7675
+ rgba(255, 255, 255, 0.2),
7676
+ rgba(255, 255, 255, 0.12)
7677
+ );
7678
+ transform: scale(1.05) translateZ(5px);
7679
+ box-shadow:
7680
+ 0 4px 16px rgba(0, 0, 0, 0.15),
7681
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7682
+ }
7683
+
7684
+ .debugger-btn:active {
7685
+ transform: scale(0.98);
7686
+ transition: transform 0.1s;
7556
7687
  }
7557
7688
 
7558
7689
  .debugger-btn.active {
7559
- background: #4CAF50;
7560
- color: #000;
7690
+ background: linear-gradient(135deg, #42b883, #35495e);
7691
+ color: #ffffff;
7692
+ box-shadow:
7693
+ 0 0 20px rgba(66, 184, 131, 0.4),
7694
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7695
+ backdrop-filter: blur(10px);
7561
7696
  }
7562
7697
 
7563
7698
  .debugger-icon {
7564
7699
  width: 16px;
7565
7700
  height: 16px;
7566
7701
  vertical-align: middle;
7702
+ filter:
7703
+ brightness(0.8)
7704
+ drop-shadow(0 1px 2px rgba(255, 255, 255, 0.8));
7705
+ color: rgba(60, 60, 67, 0.8);
7567
7706
  }
7568
7707
 
7569
7708
  .debugger-content {
7570
- height: calc(100% - 40px);
7709
+ height: calc(100% - 60px);
7571
7710
  overflow: hidden;
7572
7711
  display: flex;
7573
7712
  flex-direction: column;
7574
7713
  }
7575
7714
 
7576
- .debugger-tabs {
7577
- display: flex;
7578
- background: #2a2a2a;
7579
- border-bottom: 1px solid #444;
7580
- }
7581
-
7582
- .debugger-tab {
7583
- padding: 8px 16px;
7584
- cursor: pointer;
7585
- border: none;
7586
- background: none;
7587
- color: #ccc;
7588
- font-size: 12px;
7589
- transition: all 0.2s;
7590
- border-bottom: 2px solid transparent;
7591
- }
7592
-
7593
- .debugger-tab:hover {
7594
- color: #fff;
7595
- background: #3a3a3a;
7596
- }
7597
-
7598
- .debugger-tab.active {
7599
- color: #4CAF50;
7600
- border-bottom-color: #4CAF50;
7601
- background: #333;
7602
- }
7715
+ /* 移除标签页相关样式 - 只保留网络面板 */
7603
7716
 
7604
7717
  .debugger-panel-content {
7605
7718
  flex: 1;
@@ -7610,27 +7723,138 @@ const styles = `
7610
7723
  .request-list {
7611
7724
  display: flex;
7612
7725
  flex-direction: column;
7613
- gap: 8px;
7726
+ gap: 12px;
7727
+ padding: 16px;
7728
+ position: relative;
7729
+ z-index: 2;
7614
7730
  }
7615
7731
 
7616
7732
  .request-item {
7617
- background: #2a2a2a;
7618
- border: 1px solid #444;
7619
- border-radius: 6px;
7620
- padding: 10px;
7621
- cursor: pointer;
7622
- transition: all 0.2s;
7733
+ /* 请求项毛玻璃效果加动态光效 */
7623
7734
  position: relative;
7735
+ backdrop-filter: blur(10px) brightness(1.1);
7736
+ -webkit-backdrop-filter: blur(10px) brightness(1.1);
7737
+
7738
+ /* 多层背景 - 模拟 Liquid Glass */
7739
+ background:
7740
+ /* 动态光效层 */
7741
+ linear-gradient(
7742
+ 105deg,
7743
+ transparent 35%,
7744
+ rgba(255, 255, 255, 0.25) 45%,
7745
+ rgba(255, 255, 255, 0.35) 50%,
7746
+ rgba(255, 255, 255, 0.25) 55%,
7747
+ transparent 65%
7748
+ ),
7749
+ /* 基础玻璃层 */
7750
+ linear-gradient(
7751
+ 135deg,
7752
+ rgba(255, 255, 255, 0.8),
7753
+ rgba(255, 255, 255, 0.6)
7754
+ );
7755
+
7756
+ background-size: 300% 100%, 100% 100%;
7757
+ border: 1px solid rgba(255, 255, 255, 0.2);
7758
+ border-radius: 16px;
7759
+ padding: 16px;
7760
+ cursor: pointer;
7761
+
7762
+ /* 深度阴影和玻璃效果 */
7763
+ box-shadow:
7764
+ 0 4px 16px rgba(31, 38, 135, 0.2),
7765
+ inset 0 1px 2px rgba(255, 255, 255, 0.15),
7766
+ inset 0 -1px 1px rgba(0, 0, 0, 0.05);
7767
+
7768
+ /* 流体动画和光效 */
7769
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
7770
+ transform: translateZ(0);
7771
+ animation: liquid-shimmer 4s ease-in-out infinite;
7772
+ }
7773
+
7774
+ /* 模拟折射效果的伪元素 */
7775
+ .request-item::before {
7776
+ content: '';
7777
+ position: absolute;
7778
+ inset: -1px;
7779
+ border-radius: inherit;
7780
+ background: radial-gradient(
7781
+ circle at var(--mouse-x, 30%) var(--mouse-y, 30%),
7782
+ rgba(255, 255, 255, 0.4) 0%,
7783
+ rgba(255, 255, 255, 0.1) 30%,
7784
+ transparent 70%
7785
+ );
7786
+ opacity: 0;
7787
+ transition: opacity 0.4s ease;
7788
+ pointer-events: none;
7789
+ mix-blend-mode: overlay;
7790
+ z-index: 1;
7791
+ }
7792
+
7793
+ /* 高光效果伪元素 */
7794
+ .request-item::after {
7795
+ content: '';
7796
+ position: absolute;
7797
+ top: 0;
7798
+ left: 0;
7799
+ right: 0;
7800
+ height: 40%;
7801
+ border-radius: 16px 16px 0 0;
7802
+ background: linear-gradient(
7803
+ 180deg,
7804
+ rgba(255, 255, 255, 0.2) 0%,
7805
+ transparent 100%
7806
+ );
7807
+ pointer-events: none;
7808
+ z-index: 1;
7624
7809
  }
7625
7810
 
7626
7811
  .request-item:hover {
7627
- background: #333;
7628
- border-color: #666;
7812
+ backdrop-filter: blur(15px) brightness(1.2);
7813
+ -webkit-backdrop-filter: blur(15px) brightness(1.2);
7814
+
7815
+ /* 增强 hover 时的光效 */
7816
+ background:
7817
+ linear-gradient(
7818
+ 105deg,
7819
+ transparent 20%,
7820
+ rgba(255, 255, 255, 0.35) 40%,
7821
+ rgba(255, 255, 255, 0.5) 50%,
7822
+ rgba(255, 255, 255, 0.35) 60%,
7823
+ transparent 80%
7824
+ ),
7825
+ linear-gradient(
7826
+ 135deg,
7827
+ rgba(255, 255, 255, 0.2),
7828
+ rgba(255, 255, 255, 0.12)
7829
+ );
7830
+
7831
+ background-size: 200% 100%, 100% 100%;
7832
+ transform: scale(1.02) translateZ(15px);
7833
+ animation: liquid-refraction 0.6s ease-out;
7834
+
7835
+ box-shadow:
7836
+ 0 12px 40px rgba(31, 38, 135, 0.35),
7837
+ inset 0 2px 4px rgba(255, 255, 255, 0.25),
7838
+ inset 0 -2px 2px rgba(0, 0, 0, 0.08);
7839
+ }
7840
+
7841
+ /* 激活折射效果 */
7842
+ .request-item:hover::before {
7843
+ opacity: 1;
7629
7844
  }
7630
7845
 
7631
7846
  .request-item.expanded {
7632
- background: #333;
7633
- border-color: #4CAF50;
7847
+ backdrop-filter: blur(18px) brightness(1.2);
7848
+ -webkit-backdrop-filter: blur(18px) brightness(1.2);
7849
+ background: linear-gradient(
7850
+ 135deg,
7851
+ rgba(66, 184, 131, 0.1),
7852
+ rgba(53, 73, 94, 0.05)
7853
+ );
7854
+ border-color: rgba(66, 184, 131, 0.3);
7855
+ box-shadow:
7856
+ 0 12px 40px rgba(66, 184, 131, 0.2),
7857
+ inset 0 2px 4px rgba(255, 255, 255, 0.15);
7634
7858
  }
7635
7859
 
7636
7860
  .request-header {
@@ -7641,20 +7865,48 @@ const styles = `
7641
7865
  }
7642
7866
 
7643
7867
  .request-method {
7644
- padding: 2px 8px;
7645
- border-radius: 4px;
7646
- font-weight: bold;
7868
+ /* 方法标签毛玻璃效果 */
7869
+ backdrop-filter: blur(6px);
7870
+ -webkit-backdrop-filter: blur(6px);
7871
+ padding: 4px 10px;
7872
+ border-radius: 10px;
7873
+ font-weight: 600;
7647
7874
  font-size: 10px;
7648
7875
  text-transform: uppercase;
7649
- min-width: 40px;
7876
+ min-width: 45px;
7650
7877
  text-align: center;
7878
+ border: 1px solid rgba(255, 255, 255, 0.2);
7879
+ box-shadow:
7880
+ 0 2px 8px rgba(0, 0, 0, 0.1),
7881
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7882
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7651
7883
  }
7652
7884
 
7653
- .method-get { background: #4CAF50; color: #000; }
7654
- .method-post { background: #2196F3; color: #fff; }
7655
- .method-put { background: #FF9800; color: #000; }
7656
- .method-delete { background: #F44336; color: #fff; }
7657
- .method-patch { background: #9C27B0; color: #fff; }
7885
+ .method-get {
7886
+ background: linear-gradient(135deg, #4CAF50, #45a049);
7887
+ color: #ffffff;
7888
+ box-shadow: 0 0 15px rgba(76, 175, 80, 0.4);
7889
+ }
7890
+ .method-post {
7891
+ background: linear-gradient(135deg, #2196F3, #1976D2);
7892
+ color: #ffffff;
7893
+ box-shadow: 0 0 15px rgba(33, 150, 243, 0.4);
7894
+ }
7895
+ .method-put {
7896
+ background: linear-gradient(135deg, #FF9800, #F57C00);
7897
+ color: #ffffff;
7898
+ box-shadow: 0 0 15px rgba(255, 152, 0, 0.4);
7899
+ }
7900
+ .method-delete {
7901
+ background: linear-gradient(135deg, #F44336, #D32F2F);
7902
+ color: #ffffff;
7903
+ box-shadow: 0 0 15px rgba(244, 67, 54, 0.4);
7904
+ }
7905
+ .method-patch {
7906
+ background: linear-gradient(135deg, #9C27B0, #7B1FA2);
7907
+ color: #ffffff;
7908
+ box-shadow: 0 0 15px rgba(156, 39, 176, 0.4);
7909
+ }
7658
7910
 
7659
7911
  .request-url {
7660
7912
  flex: 1;
@@ -7667,18 +7919,47 @@ const styles = `
7667
7919
  }
7668
7920
 
7669
7921
  .request-status {
7670
- padding: 2px 8px;
7671
- border-radius: 4px;
7922
+ /* 状态码标签毛玻璃效果 */
7923
+ backdrop-filter: blur(6px);
7924
+ -webkit-backdrop-filter: blur(6px);
7925
+ padding: 4px 10px;
7926
+ border-radius: 10px;
7672
7927
  font-size: 10px;
7673
- min-width: 35px;
7928
+ font-weight: 600;
7929
+ min-width: 40px;
7674
7930
  text-align: center;
7931
+ border: 1px solid rgba(255, 255, 255, 0.2);
7932
+ box-shadow:
7933
+ 0 2px 8px rgba(0, 0, 0, 0.1),
7934
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7935
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7675
7936
  }
7676
7937
 
7677
- .status-2xx { background: #4CAF50; color: #000; }
7678
- .status-3xx { background: #FF9800; color: #000; }
7679
- .status-4xx { background: #F44336; color: #fff; }
7680
- .status-5xx { background: #9C27B0; color: #fff; }
7681
- .status-error { background: #F44336; color: #fff; }
7938
+ .status-2xx {
7939
+ background: linear-gradient(135deg, #4CAF50, #45a049);
7940
+ color: #ffffff;
7941
+ box-shadow: 0 0 20px rgba(76, 175, 80, 0.5);
7942
+ }
7943
+ .status-3xx {
7944
+ background: linear-gradient(135deg, #FF9800, #F57C00);
7945
+ color: #ffffff;
7946
+ box-shadow: 0 0 20px rgba(255, 152, 0, 0.5);
7947
+ }
7948
+ .status-4xx {
7949
+ background: linear-gradient(135deg, #F44336, #D32F2F);
7950
+ color: #ffffff;
7951
+ box-shadow: 0 0 20px rgba(244, 67, 54, 0.5);
7952
+ }
7953
+ .status-5xx {
7954
+ background: linear-gradient(135deg, #9C27B0, #7B1FA2);
7955
+ color: #ffffff;
7956
+ box-shadow: 0 0 20px rgba(156, 39, 176, 0.5);
7957
+ }
7958
+ .status-error {
7959
+ background: linear-gradient(135deg, #F44336, #D32F2F);
7960
+ color: #ffffff;
7961
+ box-shadow: 0 0 20px rgba(244, 67, 54, 0.5);
7962
+ }
7682
7963
 
7683
7964
  .request-info {
7684
7965
  display: flex;
@@ -7765,11 +8046,28 @@ const styles = `
7765
8046
  }
7766
8047
 
7767
8048
  .detail-content {
7768
- background: #222;
7769
- padding: 8px;
7770
- border-radius: 4px;
7771
- max-height: 200px;
8049
+ /* 详情内容毛玻璃效果 */
8050
+ backdrop-filter: blur(8px) brightness(0.9);
8051
+ -webkit-backdrop-filter: blur(8px) brightness(0.9);
8052
+ background: linear-gradient(
8053
+ 135deg,
8054
+ rgba(0, 0, 0, 0.3),
8055
+ rgba(0, 0, 0, 0.15)
8056
+ );
8057
+ border: 1px solid rgba(255, 255, 255, 0.08);
8058
+ padding: 16px;
8059
+ border-radius: 12px;
8060
+ max-height: 400px;
8061
+ min-height: 300px;
7772
8062
  overflow: auto;
8063
+
8064
+ /* 内部阴影 */
8065
+ box-shadow:
8066
+ inset 0 2px 4px rgba(0, 0, 0, 0.2),
8067
+ inset 0 -1px 2px rgba(255, 255, 255, 0.05);
8068
+
8069
+ /* 平滑滚动 */
8070
+ scroll-behavior: smooth;
7773
8071
  }
7774
8072
 
7775
8073
  .json-content {
@@ -7823,47 +8121,75 @@ const styles = `
7823
8121
  }
7824
8122
 
7825
8123
  .share-btn {
7826
- background: #2196F3;
7827
- color: #fff;
7828
- border: none;
7829
- padding: 4px 10px;
7830
- border-radius: 3px;
7831
- font-size: 11px;
8124
+ /* 分享按钮毛玻璃效果 */
8125
+ backdrop-filter: blur(6px);
8126
+ -webkit-backdrop-filter: blur(6px);
8127
+ background: linear-gradient(135deg, #2196F3, #1976D2);
8128
+ color: #ffffff;
8129
+ border: 1px solid rgba(33, 150, 243, 0.3);
8130
+ padding: 6px 12px;
8131
+ border-radius: 10px;
8132
+ font-size: 10px;
8133
+ font-weight: 500;
7832
8134
  margin-left: 8px;
7833
8135
  cursor: pointer;
7834
- transition: all 0.2s;
7835
8136
  white-space: nowrap;
8137
+
8138
+ box-shadow:
8139
+ 0 2px 8px rgba(33, 150, 243, 0.3),
8140
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
8141
+
8142
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
8143
+ transform: translateZ(0);
7836
8144
  }
7837
8145
 
7838
8146
  .share-btn:hover {
7839
- background: #1976D2;
7840
- transform: scale(1.1);
8147
+ background: linear-gradient(135deg, #1976D2, #1565C0);
8148
+ transform: scale(1.05) translateZ(5px);
8149
+ box-shadow:
8150
+ 0 4px 16px rgba(33, 150, 243, 0.4),
8151
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7841
8152
  }
7842
8153
 
7843
8154
  .share-btn:active {
7844
- transform: scale(0.95);
8155
+ transform: scale(0.98);
8156
+ transition: transform 0.1s;
7845
8157
  }
7846
8158
 
7847
8159
  .api-curl-btn {
7848
- background: #4CAF50;
7849
- color: #fff;
7850
- border: none;
7851
- padding: 4px 10px;
7852
- border-radius: 3px;
7853
- font-size: 11px;
8160
+ /* API Curl 按钮毛玻璃效果 */
8161
+ backdrop-filter: blur(6px);
8162
+ -webkit-backdrop-filter: blur(6px);
8163
+ background: linear-gradient(135deg, #4CAF50, #45a049);
8164
+ color: #ffffff;
8165
+ border: 1px solid rgba(76, 175, 80, 0.3);
8166
+ padding: 6px 12px;
8167
+ border-radius: 10px;
8168
+ font-size: 10px;
8169
+ font-weight: 500;
7854
8170
  margin-left: 8px;
7855
8171
  cursor: pointer;
7856
- transition: all 0.2s;
7857
8172
  white-space: nowrap;
8173
+
8174
+ box-shadow:
8175
+ 0 2px 8px rgba(76, 175, 80, 0.3),
8176
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
8177
+
8178
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
8179
+ transform: translateZ(0);
7858
8180
  }
7859
8181
 
7860
8182
  .api-curl-btn:hover {
7861
- background: #45a049;
7862
- transform: scale(1.1);
8183
+ background: linear-gradient(135deg, #45a049, #388E3C);
8184
+ transform: scale(1.05) translateZ(5px);
8185
+ box-shadow:
8186
+ 0 4px 16px rgba(76, 175, 80, 0.4),
8187
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7863
8188
  }
7864
8189
 
7865
8190
  .api-curl-btn:active {
7866
- transform: scale(0.95);
8191
+ transform: scale(0.98);
8192
+ transition: transform 0.1s;
7867
8193
  }
7868
8194
 
7869
8195
  .console-content {
@@ -7935,7 +8261,73 @@ const styles = `
7935
8261
  cursor: not-allowed;
7936
8262
  }
7937
8263
 
7938
- @media (max-width: 600px) {
8264
+ /* 动态光效动画 - 模拟 Shader 效果 */
8265
+ @keyframes liquid-shimmer {
8266
+ 0% {
8267
+ background-position: -300% center;
8268
+ transform: translateX(-10px);
8269
+ }
8270
+ 50% {
8271
+ transform: translateX(0);
8272
+ }
8273
+ 100% {
8274
+ background-position: 300% center;
8275
+ transform: translateX(10px);
8276
+ }
8277
+ }
8278
+
8279
+ @keyframes liquid-refraction {
8280
+ 0%, 100% {
8281
+ transform: scale(1) perspective(1000px) rotateY(0deg);
8282
+ filter: blur(0px);
8283
+ }
8284
+ 25% {
8285
+ transform: scale(1.01) perspective(1000px) rotateY(0.5deg);
8286
+ filter: blur(0.5px);
8287
+ }
8288
+ 75% {
8289
+ transform: scale(0.99) perspective(1000px) rotateY(-0.5deg);
8290
+ filter: blur(0.3px);
8291
+ }
8292
+ }
8293
+
8294
+ @keyframes liquid-expand {
8295
+ 0% {
8296
+ opacity: 0;
8297
+ transform: scale(0.95) translateY(-10px);
8298
+ backdrop-filter: blur(5px);
8299
+ }
8300
+ 50% {
8301
+ opacity: 0.7;
8302
+ transform: scale(1.02) translateY(-2px);
8303
+ backdrop-filter: blur(12px);
8304
+ }
8305
+ 100% {
8306
+ opacity: 1;
8307
+ transform: scale(1) translateY(0);
8308
+ backdrop-filter: blur(8px);
8309
+ }
8310
+ }
8311
+
8312
+ @keyframes liquid-glow {
8313
+ 0%, 100% {
8314
+ box-shadow: 0 0 20px rgba(66, 184, 131, 0.3);
8315
+ }
8316
+ 50% {
8317
+ box-shadow: 0 0 30px rgba(66, 184, 131, 0.5);
8318
+ }
8319
+ }
8320
+
8321
+ .expanding {
8322
+ animation: liquid-expand 0.4s cubic-bezier(0.4, 0, 0.2, 1);
8323
+ }
8324
+
8325
+ .request-item.expanded {
8326
+ animation: liquid-glow 2s ease-in-out infinite;
8327
+ }
8328
+
8329
+ /* 移动端响应式 */
8330
+ @media (max-width: 768px) {
7939
8331
  #network-debugger-panel.bottom-right,
7940
8332
  #network-debugger-panel.bottom-left,
7941
8333
  #network-debugger-panel.top-right,
@@ -7943,32 +8335,87 @@ const styles = `
7943
8335
  width: calc(100vw - 20px) !important;
7944
8336
  left: 10px !important;
7945
8337
  right: auto !important;
8338
+ /* 移动端清晰毛玻璃 */
8339
+ backdrop-filter: blur(15px) saturate(150%);
8340
+ -webkit-backdrop-filter: blur(15px) saturate(150%);
8341
+ }
8342
+
8343
+ .request-item {
8344
+ padding: 12px;
8345
+ border-radius: 12px;
8346
+ }
8347
+
8348
+ .debugger-header {
8349
+ padding: 10px 12px;
8350
+ }
8351
+
8352
+ .debugger-controls {
8353
+ gap: 6px;
8354
+ }
8355
+
8356
+ .debugger-btn {
8357
+ padding: 4px 8px;
8358
+ font-size: 10px;
7946
8359
  }
7947
8360
 
7948
8361
  /* 最小化时不应用全宽,保持小尺寸 */
7949
8362
  #network-debugger-panel.minimized {
7950
- width: 160px !important;
7951
- max-width: 160px !important;
7952
- height: 35px !important;
8363
+ width: 180px !important;
8364
+ max-width: 180px !important;
8365
+ height: 40px !important;
7953
8366
  }
7954
8367
  }
7955
8368
 
8369
+ @media (max-width: 480px) {
8370
+ .request-header {
8371
+ flex-direction: column;
8372
+ gap: 8px;
8373
+ align-items: stretch;
8374
+ }
8375
+
8376
+ .request-method,
8377
+ .request-status {
8378
+ align-self: flex-start;
8379
+ }
8380
+
8381
+ .share-btn,
8382
+ .api-curl-btn {
8383
+ margin-left: 0;
8384
+ margin-top: 4px;
8385
+ }
8386
+ }
8387
+
8388
+ /* iOS 26 风格滚动条 */
7956
8389
  #network-debugger-panel ::-webkit-scrollbar {
7957
- width: 6px;
7958
- height: 6px;
8390
+ width: 8px;
8391
+ height: 8px;
7959
8392
  }
7960
8393
 
7961
8394
  #network-debugger-panel ::-webkit-scrollbar-track {
7962
- background: #333;
8395
+ background: rgba(255, 255, 255, 0.05);
8396
+ border-radius: 4px;
8397
+ backdrop-filter: blur(5px);
7963
8398
  }
7964
8399
 
7965
8400
  #network-debugger-panel ::-webkit-scrollbar-thumb {
7966
- background: #666;
7967
- border-radius: 3px;
8401
+ background: linear-gradient(
8402
+ 135deg,
8403
+ rgba(255, 255, 255, 0.2),
8404
+ rgba(255, 255, 255, 0.1)
8405
+ );
8406
+ border-radius: 4px;
8407
+ border: 1px solid rgba(255, 255, 255, 0.1);
8408
+ backdrop-filter: blur(10px);
8409
+ transition: all 0.3s ease;
7968
8410
  }
7969
8411
 
7970
8412
  #network-debugger-panel ::-webkit-scrollbar-thumb:hover {
7971
- background: #888;
8413
+ background: linear-gradient(
8414
+ 135deg,
8415
+ rgba(255, 255, 255, 0.3),
8416
+ rgba(255, 255, 255, 0.15)
8417
+ );
8418
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
7972
8419
  }
7973
8420
 
7974
8421
  .resize-handle {
@@ -8241,8 +8688,6 @@ const _DebugPanel = class _DebugPanel {
8241
8688
  this.dragStart = { x: 0, y: 0 };
8242
8689
  this.resizeTimeout = null;
8243
8690
  this.resizeDirection = "";
8244
- this.currentTab = "network";
8245
- this.consoleHistory = [];
8246
8691
  this.requestsCache = [];
8247
8692
  this.interceptor = interceptor;
8248
8693
  const savedConfig = this.loadConfig();
@@ -8250,7 +8695,6 @@ const _DebugPanel = class _DebugPanel {
8250
8695
  position: "bottom-right",
8251
8696
  theme: "dark",
8252
8697
  minimized: false,
8253
- showConsole: true,
8254
8698
  isClosed: false,
8255
8699
  ...savedConfig,
8256
8700
  // 先应用保存的配置
@@ -8289,60 +8733,17 @@ const _DebugPanel = class _DebugPanel {
8289
8733
  </div>
8290
8734
  </div>
8291
8735
  <div class="debugger-content">
8292
- <div class="debugger-tabs">
8293
- <button class="debugger-tab active" data-tab="network">网络</button>
8294
- ${this.config.showConsole ? '<button class="debugger-tab" data-tab="console">控制台</button>' : ""}
8295
- <button class="debugger-tab" data-tab="tools">工具</button>
8296
- <button class="debugger-tab" data-tab="about">关于</button>
8297
- </div>
8298
8736
  <div class="debugger-panel-content">
8299
- <div class="network-panel" data-panel="network">
8737
+ <div class="network-panel">
8300
8738
  <div class="request-list"></div>
8301
8739
  </div>
8302
- ${this.config.showConsole ? `
8303
- <div class="console-panel" data-panel="console" style="display: none;">
8304
- <div class="console-content"></div>
8305
- <div class="console-input">
8306
- <span class="console-prompt">></span>
8307
- <input class="console-cmd" placeholder="输入 JavaScript 代码..." />
8308
- </div>
8309
- </div>
8310
- ` : ""}
8311
- <div class="tools-panel" data-panel="tools" style="display: none;">
8312
- <div class="tools-section">
8313
- <div class="tool-buttons">
8314
- <button class="tool-btn" data-tool="parse-curl">解析 cURL</button>
8315
- <button class="tool-btn" data-tool="export-har">导出 HAR</button>
8316
- <button class="tool-btn" data-tool="cors-test">CORS 测试</button>
8317
- <button class="tool-btn" data-tool="decrypt-test">解密测试</button>
8318
- </div>
8319
- </div>
8320
- <div class="tools-content">
8321
- <textarea placeholder="在这里粘贴 cURL 命令或输入要测试的数据..." style="width: 100%; height: 200px; background: #222; color: #fff; border: 1px solid #444; padding: 8px; font-family: monospace;"></textarea>
8322
- </div>
8323
- </div>
8324
- <div class="about-panel" data-panel="about" style="display: none;">
8325
- <div style="padding: 20px; color: #fff; text-align: center;">
8326
- <h2 style="margin: 0 0 20px 0;">🔓 PWTK 解密小工具</h2>
8327
- <p style="margin: 10px 0;">Version: ${"1.2.48"}</p>
8328
- <p style="margin: 10px 0;">👨‍💻 Created by <strong>Leo (@leeguoo)</strong></p>
8329
- <p style="margin: 10px 0;">📧 技术支持:请联系 Leo</p>
8330
- <p style="margin: 10px 0;">🌐 分享服务:curl.bwg.leeguoo.com</p>
8331
- <div style="margin-top: 20px; padding: 15px; background: #333; border-radius: 8px;">
8332
- <p style="margin: 5px 0; font-size: 12px;">本工具专为 PWTK 项目开发</p>
8333
- <p style="margin: 5px 0; font-size: 12px;">提供网络请求拦截、解密、分享等功能</p>
8334
- </div>
8335
- </div>
8336
- </div>
8337
8740
  </div>
8338
8741
  </div>
8339
8742
  `;
8340
8743
  this.addResizeHandles();
8341
8744
  this.shadowRoot.appendChild(this.container);
8342
8745
  document.body.appendChild(this.hostElement);
8343
- this.networkTab = this.shadowRoot.querySelector('[data-panel="network"]');
8344
- this.consoleTab = this.shadowRoot.querySelector('[data-panel="console"]');
8345
- this.consoleContent = this.shadowRoot.querySelector(".console-content");
8746
+ this.networkTab = this.shadowRoot.querySelector(".network-panel");
8346
8747
  }
8347
8748
  addResizeHandles() {
8348
8749
  const handles = ["n", "s", "e", "w", "ne", "nw", "se", "sw"];
@@ -8356,9 +8757,6 @@ const _DebugPanel = class _DebugPanel {
8356
8757
  bindEvents() {
8357
8758
  const header = this.shadowRoot.querySelector(".debugger-header");
8358
8759
  const controls = this.shadowRoot.querySelector(".debugger-controls");
8359
- const tabs = this.shadowRoot.querySelectorAll(".debugger-tab");
8360
- const toolButtons = this.shadowRoot.querySelectorAll("[data-tool]");
8361
- const consoleInput = this.shadowRoot.querySelector(".console-cmd");
8362
8760
  header.addEventListener("mousedown", (e) => {
8363
8761
  if (e.target === controls || controls.contains(e.target)) return;
8364
8762
  this.startDrag(e);
@@ -8387,28 +8785,6 @@ const _DebugPanel = class _DebugPanel {
8387
8785
  break;
8388
8786
  }
8389
8787
  });
8390
- tabs.forEach((tab) => {
8391
- tab.addEventListener("click", (e) => {
8392
- const target = e.target;
8393
- const tabName = target.dataset.tab;
8394
- this.switchTab(tabName);
8395
- });
8396
- });
8397
- toolButtons.forEach((button) => {
8398
- button.addEventListener("click", (e) => {
8399
- const target = e.target;
8400
- const tool = target.dataset.tool;
8401
- this.handleToolAction(tool);
8402
- });
8403
- });
8404
- if (consoleInput) {
8405
- consoleInput.addEventListener("keypress", (e) => {
8406
- if (e.key === "Enter") {
8407
- this.executeConsoleCommand(consoleInput.value);
8408
- consoleInput.value = "";
8409
- }
8410
- });
8411
- }
8412
8788
  const resizeHandles = this.shadowRoot.querySelectorAll(".resize-handle");
8413
8789
  resizeHandles.forEach((handle) => {
8414
8790
  handle.addEventListener("mousedown", (e) => {
@@ -8629,21 +9005,11 @@ const _DebugPanel = class _DebugPanel {
8629
9005
  }
8630
9006
  return url;
8631
9007
  }
8632
- switchTab(tabName) {
8633
- this.shadowRoot.querySelectorAll(".debugger-tab").forEach((tab) => {
8634
- tab.classList.toggle("active", tab.dataset.tab === tabName);
8635
- });
8636
- this.shadowRoot.querySelectorAll("[data-panel]").forEach((panel) => {
8637
- const panelEl = panel;
8638
- panelEl.style.display = panel.getAttribute("data-panel") === tabName ? "block" : "none";
8639
- });
8640
- this.currentTab = tabName;
8641
- }
9008
+ // 移除 switchTab 方法 - 不再需要标签页切换
8642
9009
  clearRequests() {
8643
9010
  this.requestsCache = [];
8644
9011
  this.interceptor.clearRequests();
8645
9012
  this.renderRequests();
8646
- this.logToConsole("✅ 已清空网络请求记录");
8647
9013
  }
8648
9014
  exportData() {
8649
9015
  const data = {
@@ -8660,22 +9026,18 @@ const _DebugPanel = class _DebugPanel {
8660
9026
  a.download = `network-debug-${Date.now()}.json`;
8661
9027
  a.click();
8662
9028
  URL.revokeObjectURL(url);
8663
- this.logToConsole("💾 网络数据已导出 (by Leo)");
8664
9029
  }
8665
9030
  async shareRequest(request) {
8666
9031
  try {
8667
- this.logToConsole("📤 正在创建分享链接...");
8668
9032
  const shareUrl = await createShareLink(request);
8669
9033
  if (shareUrl) {
8670
9034
  const copied = await copyToClipboard(shareUrl);
8671
9035
  if (copied) {
8672
- this.logToConsole(`✅ 分享链接已复制到剪贴板: ${shareUrl}`);
8673
9036
  alert(`分享链接已复制到剪贴板!
8674
9037
  ${shareUrl}
8675
9038
 
8676
9039
  Created by Leo (@leeguoo)`);
8677
9040
  } else {
8678
- this.logToConsole(`✅ 分享链接: ${shareUrl}`);
8679
9041
  prompt("分享链接已创建,请手动复制:\n\nCreated by Leo (@leeguoo)", shareUrl);
8680
9042
  }
8681
9043
  } else {
@@ -8683,28 +9045,23 @@ Created by Leo (@leeguoo)`);
8683
9045
  }
8684
9046
  } catch (error) {
8685
9047
  logger.error("分享失败:", error);
8686
- this.logToConsole(`❌ 分享失败: ${error}`);
8687
9048
  alert("分享失败,请稍后重试");
8688
9049
  }
8689
9050
  }
8690
9051
  async generateApiCurl(request) {
8691
9052
  try {
8692
- this.logToConsole("🔧 正在生成API cURL命令...");
8693
9053
  const curlCommand = formatAsApiCurl(request);
8694
9054
  const copied = await copyToClipboard(curlCommand);
8695
9055
  if (copied) {
8696
- this.logToConsole(`✅ API cURL已复制到剪贴板`);
8697
9056
  alert(`API cURL命令已复制到剪贴板!
8698
9057
  适用于 httpmisonote.com API
8699
9058
 
8700
9059
  Created by Leo (@leeguoo)`);
8701
9060
  } else {
8702
- this.logToConsole(`✅ API cURL: ${curlCommand}`);
8703
9061
  prompt("API cURL命令已生成,请手动复制:\n\nCreated by Leo (@leeguoo)", curlCommand);
8704
9062
  }
8705
9063
  } catch (error) {
8706
9064
  logger.error("生成API cURL失败:", error);
8707
- this.logToConsole(`❌ 生成API cURL失败: ${error}`);
8708
9065
  alert("生成API cURL失败,请稍后重试");
8709
9066
  }
8710
9067
  }
@@ -8726,131 +9083,9 @@ Created by Leo (@leeguoo)`);
8726
9083
  this.container.style.bottom = "auto";
8727
9084
  }
8728
9085
  }
8729
- handleToolAction(tool) {
8730
- const textarea = this.shadowRoot.querySelector(".tools-content textarea");
8731
- const input = textarea.value.trim();
8732
- switch (tool) {
8733
- case "parse-curl":
8734
- this.handleParseCurl(input);
8735
- break;
8736
- case "export-har":
8737
- this.exportHAR();
8738
- break;
8739
- case "cors-test":
8740
- this.handleCorsTest(input);
8741
- break;
8742
- case "decrypt-test":
8743
- this.handleDecryptTest(input);
8744
- break;
8745
- }
8746
- }
8747
- handleParseCurl(curlCommand) {
8748
- if (!curlCommand) {
8749
- this.logToConsole("❌ 请输入 cURL 命令");
8750
- return;
8751
- }
8752
- try {
8753
- const parsed = parseCurl(curlCommand);
8754
- this.logToConsole("✅ cURL 解析成功:");
8755
- this.logToConsole(parsed);
8756
- } catch (error) {
8757
- this.logToConsole(`❌ cURL 解析失败: ${error instanceof Error ? error.message : String(error)}`, "error");
8758
- }
8759
- }
8760
- exportHAR() {
8761
- const har = {
8762
- log: {
8763
- version: "1.2",
8764
- creator: {
8765
- name: "NetworkDebugger",
8766
- version: "1.0.0",
8767
- comment: "Created by Leo (@leeguoo)"
8768
- },
8769
- entries: this.requestsCache.map((request) => ({
8770
- startedDateTime: new Date(request.timestamp).toISOString(),
8771
- time: request.duration || 0,
8772
- request: {
8773
- method: request.method,
8774
- url: request.url,
8775
- headers: Object.entries(request.headers).map(([name, value]) => ({ name, value })),
8776
- postData: request.requestBody ? {
8777
- mimeType: "application/json",
8778
- text: typeof request.requestBody === "string" ? request.requestBody : JSON.stringify(request.requestBody)
8779
- } : void 0
8780
- },
8781
- response: {
8782
- status: request.status || 0,
8783
- statusText: request.statusText || "",
8784
- headers: request.responseHeaders ? Object.entries(request.responseHeaders).map(([name, value]) => ({ name, value })) : [],
8785
- content: {
8786
- size: 0,
8787
- mimeType: "application/json",
8788
- text: request.responseBody ? typeof request.responseBody === "string" ? request.responseBody : JSON.stringify(request.responseBody) : ""
8789
- }
8790
- }
8791
- }))
8792
- }
8793
- };
8794
- const blob = new Blob([JSON.stringify(har, null, 2)], { type: "application/json" });
8795
- const url = URL.createObjectURL(blob);
8796
- const a = document.createElement("a");
8797
- a.href = url;
8798
- a.download = `network-har-${Date.now()}.har`;
8799
- a.click();
8800
- URL.revokeObjectURL(url);
8801
- this.logToConsole("💾 HAR 文件已导出");
8802
- }
8803
- handleCorsTest(url) {
8804
- if (!url) {
8805
- this.logToConsole("❌ 请输入要测试的 URL");
8806
- return;
8807
- }
8808
- this.logToConsole(`🔍 开始 CORS 测试: ${url}`);
8809
- fetch(url, { mode: "cors" }).then((response) => {
8810
- this.logToConsole(`✅ CORS 测试成功: ${response.status} ${response.statusText}`);
8811
- }).catch((error) => {
8812
- this.logToConsole(`❌ CORS 测试失败: ${error.message}`);
8813
- });
8814
- }
8815
- handleDecryptTest(data) {
8816
- if (!data) {
8817
- this.logToConsole("❌ 请输入要解密的数据");
8818
- return;
8819
- }
8820
- this.logToConsole("🔓 解密测试功能开发中...");
8821
- }
8822
- executeConsoleCommand(command) {
8823
- if (!command.trim()) return;
8824
- this.consoleHistory.push(command);
8825
- this.logToConsole(`> ${command}`);
8826
- try {
8827
- const func = new Function("return " + command);
8828
- const result = func();
8829
- this.logToConsole(result);
8830
- } catch (error) {
8831
- try {
8832
- const func = new Function(command);
8833
- const result = func();
8834
- this.logToConsole(result !== void 0 ? result : "undefined");
8835
- } catch (secondError) {
8836
- this.logToConsole(`❌ ${error}`, "error");
8837
- }
8838
- }
8839
- }
8840
- logToConsole(message, type = "log") {
8841
- if (!this.consoleContent) return;
8842
- const timestamp = (/* @__PURE__ */ new Date()).toLocaleTimeString();
8843
- const formattedMessage = typeof message === "object" ? JSON.stringify(message, null, 2) : message;
8844
- const logElement = document.createElement("div");
8845
- logElement.innerHTML = `[${timestamp}] ${formattedMessage}`;
8846
- if (type === "error") {
8847
- logElement.style.color = "#f44336";
8848
- } else if (type === "warn") {
8849
- logElement.style.color = "#ff9800";
8850
- }
8851
- this.consoleContent.appendChild(logElement);
8852
- this.consoleContent.scrollTop = this.consoleContent.scrollHeight;
8853
- }
9086
+ // 移除 handleToolAction 方法 - 不再需要工具功能
9087
+ // 移除 handleParseCurl 方法
9088
+ // 移除所有工具和控制台相关方法
8854
9089
  startDrag(e) {
8855
9090
  this.isDragging = true;
8856
9091
  this.dragStart = { x: e.clientX, y: e.clientY };
@@ -9111,7 +9346,6 @@ Created by Leo (@leeguoo)`);
9111
9346
  position: this.config.position,
9112
9347
  theme: this.config.theme,
9113
9348
  minimized: this.config.minimized,
9114
- showConsole: this.config.showConsole,
9115
9349
  isClosed: this.config.isClosed
9116
9350
  };
9117
9351
  localStorage.setItem(_DebugPanel.STORAGE_KEY, JSON.stringify(configToSave));
@@ -9237,7 +9471,7 @@ class NetworkDebugger {
9237
9471
  this.initialized = true;
9238
9472
  logger.consoleDirect(`
9239
9473
  ╔════════════════════════════════════════╗
9240
- ║ 🔓 PWTK 解密小工具 v${"1.2.48"} ║
9474
+ ║ 🔓 PWTK 解密小工具 v${"1.2.49-beta.1"} ║
9241
9475
  ║ Created by Leo (@leeguoo) ║
9242
9476
  ║ 技术支持: 请联系 Leo ║
9243
9477
  ║ 分享服务: curl.bwg.leeguoo.com ║
@@ -9298,7 +9532,7 @@ class NetworkDebugger {
9298
9532
  }
9299
9533
  async checkForUpdates() {
9300
9534
  try {
9301
- const currentVersion = "1.2.48";
9535
+ const currentVersion = "1.2.49-beta.1";
9302
9536
  logger.info(`[PWTK Update] Checking for updates... Current version: ${currentVersion}`);
9303
9537
  const response = await fetch("https://registry.npmjs.org/@leeguoo/pwtk-network-debugger/latest");
9304
9538
  const data = await response.json();
@@ -9318,7 +9552,7 @@ class NetworkDebugger {
9318
9552
  logger.error("[PWTK Update] Failed to check for updates:", error);
9319
9553
  return {
9320
9554
  hasUpdate: false,
9321
- currentVersion: "1.2.48"
9555
+ currentVersion: "1.2.49-beta.1"
9322
9556
  };
9323
9557
  }
9324
9558
  }