@leeguoo/pwtk-network-debugger 1.2.47 → 1.2.49-beta.0

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,127 @@ 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
+ /* iOS 26 Liquid Glass 核心效果 */
7419
+ backdrop-filter: blur(20px) saturate(180%);
7420
+ -webkit-backdrop-filter: blur(20px) saturate(180%);
7421
+
7422
+ /* iOS 浅色毛玻璃背景 */
7423
+ background: rgba(245, 245, 247, 0.75);
7424
+ background-image: linear-gradient(
7425
+ 135deg,
7426
+ rgba(255, 255, 255, 0.4) 0%,
7427
+ rgba(255, 255, 255, 0.2) 100%
7428
+ );
7429
+
7430
+ /* 玻璃边框 */
7431
+ border: 1px solid var(--liquid-glass-border);
7432
+
7433
+ /* 多层阴影创建深度 */
7434
+ box-shadow:
7435
+ 0 8px 32px var(--liquid-glass-shadow),
7436
+ inset 0 2px 4px var(--liquid-glass-highlight),
7437
+ inset 0 -2px 4px rgba(0, 0, 0, 0.1);
7438
+
7439
+ border-radius: 20px;
7455
7440
  color: #ffffff;
7456
- font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace;
7441
+ font-family: 'SF Pro Display', -apple-system, BlinkMacSystemFont, 'Monaco', 'Menlo', monospace;
7457
7442
  font-size: 12px;
7458
- box-shadow: 0 4px 20px rgba(0, 0, 0, 0.3);
7459
- border-radius: 8px;
7460
7443
  overflow: hidden;
7461
7444
  max-width: 90vw;
7462
7445
  max-height: 80vh;
7463
- transition: all 0.3s ease;
7446
+
7447
+ /* 性能优化 */
7448
+ will-change: transform;
7449
+ transform: translateZ(0);
7450
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
7451
+ }
7452
+
7453
+ /* 主面板的镜面反射效果 */
7454
+ #network-debugger-panel::before {
7455
+ content: '';
7456
+ position: absolute;
7457
+ inset: 0;
7458
+ border-radius: inherit;
7459
+ background: linear-gradient(
7460
+ 135deg,
7461
+ rgba(255, 255, 255, 0.3) 0%,
7462
+ rgba(255, 255, 255, 0.05) 50%,
7463
+ transparent 100%
7464
+ );
7465
+ pointer-events: none;
7466
+ z-index: 1;
7467
+ }
7468
+
7469
+ /* 镜面高光效果 */
7470
+ #network-debugger-panel::after {
7471
+ content: '';
7472
+ position: absolute;
7473
+ inset: 0;
7474
+ border-radius: inherit;
7475
+ background: radial-gradient(
7476
+ circle at 30% 30%,
7477
+ rgba(255, 255, 255, 0.2),
7478
+ transparent 70%
7479
+ );
7480
+ pointer-events: none;
7481
+ z-index: 1;
7464
7482
  }
7465
7483
 
7466
7484
  #network-debugger-panel.minimized {
7467
- height: 35px !important;
7485
+ /* iOS 控制中心风格的圆角矩形 */
7486
+ height: 48px !important;
7487
+ width: 220px !important;
7488
+ max-width: 220px !important;
7489
+ border-radius: 24px !important;
7468
7490
  overflow: hidden;
7469
- width: 160px !important;
7470
- max-width: 160px !important;
7491
+
7492
+ /* 真正的 iOS Liquid Glass 效果 */
7493
+ background:
7494
+ /* 顶部高光 */
7495
+ linear-gradient(180deg,
7496
+ rgba(255, 255, 255, 0.4) 0%,
7497
+ rgba(255, 255, 255, 0) 35%),
7498
+ /* 主玻璃层 */
7499
+ radial-gradient(ellipse at top,
7500
+ rgba(255, 255, 255, 0.25),
7501
+ rgba(255, 255, 255, 0.08)),
7502
+ /* iOS 浅色基底 */
7503
+ rgba(245, 245, 247, 0.8);
7504
+
7505
+ backdrop-filter: blur(30px) saturate(200%);
7506
+ -webkit-backdrop-filter: blur(30px) saturate(200%);
7507
+
7508
+ /* iOS 风格边缘光效 */
7509
+ box-shadow:
7510
+ /* 外发光 */
7511
+ 0 0 0 0.5px rgba(255, 255, 255, 0.6),
7512
+ /* 内阴影创建玻璃厚度 */
7513
+ inset 0 1px 0 0 rgba(255, 255, 255, 0.6),
7514
+ inset 0 -1px 0 0 rgba(0, 0, 0, 0.15),
7515
+ /* 深度阴影 */
7516
+ 0 12px 32px rgba(0, 0, 0, 0.25),
7517
+ 0 2px 6px rgba(0, 0, 0, 0.15);
7518
+
7519
+ /* 平滑过渡 */
7520
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
7471
7521
  }
7472
7522
 
7473
7523
  #network-debugger-panel.minimized .debugger-content {
@@ -7482,32 +7532,37 @@ const styles = `
7482
7532
  display: none;
7483
7533
  }
7484
7534
 
7535
+ #network-debugger-panel.fullscreen {
7536
+ backdrop-filter: blur(25px) saturate(200%);
7537
+ -webkit-backdrop-filter: blur(25px) saturate(200%);
7538
+ }
7539
+
7485
7540
  #network-debugger-panel.bottom-right {
7486
7541
  bottom: 20px;
7487
7542
  right: 20px;
7488
- width: 400px;
7489
- height: 300px;
7543
+ width: 600px;
7544
+ height: 500px;
7490
7545
  }
7491
7546
 
7492
7547
  #network-debugger-panel.bottom-left {
7493
7548
  bottom: 20px;
7494
7549
  left: 20px;
7495
- width: 400px;
7496
- height: 300px;
7550
+ width: 600px;
7551
+ height: 500px;
7497
7552
  }
7498
7553
 
7499
7554
  #network-debugger-panel.top-right {
7500
7555
  top: 20px;
7501
7556
  right: 20px;
7502
- width: 400px;
7503
- height: 300px;
7557
+ width: 600px;
7558
+ height: 500px;
7504
7559
  }
7505
7560
 
7506
7561
  #network-debugger-panel.top-left {
7507
7562
  top: 20px;
7508
7563
  left: 20px;
7509
- width: 400px;
7510
- height: 300px;
7564
+ width: 600px;
7565
+ height: 500px;
7511
7566
  }
7512
7567
 
7513
7568
  #network-debugger-panel.fullscreen {
@@ -7519,87 +7574,138 @@ const styles = `
7519
7574
  }
7520
7575
 
7521
7576
  .debugger-header {
7522
- background: #333;
7523
- padding: 8px 12px;
7577
+ /* 头部 Liquid Glass 效果 */
7578
+ backdrop-filter: blur(15px) brightness(1.1);
7579
+ -webkit-backdrop-filter: blur(15px) brightness(1.1);
7580
+
7581
+ /* 多层背景效果 */
7582
+ background:
7583
+ /* 顶部高光 */
7584
+ linear-gradient(180deg,
7585
+ rgba(255, 255, 255, 0.8) 0%,
7586
+ rgba(255, 255, 255, 0.4) 60%),
7587
+ /* 基础玻璃层 */
7588
+ linear-gradient(
7589
+ 135deg,
7590
+ rgba(255, 255, 255, 0.6),
7591
+ rgba(255, 255, 255, 0.4)
7592
+ );
7593
+
7594
+ border: 1px solid rgba(255, 255, 255, 0.2);
7595
+ border-bottom: 1px solid rgba(255, 255, 255, 0.15);
7596
+
7597
+ padding: 12px 16px;
7524
7598
  display: flex;
7525
7599
  justify-content: space-between;
7526
7600
  align-items: center;
7527
7601
  cursor: move;
7528
7602
  user-select: none;
7529
- border-bottom: 1px solid #444;
7603
+ position: relative;
7604
+ z-index: 2;
7605
+
7606
+ /* iOS 风格圆角 */
7607
+ border-radius: 20px 20px 0 0;
7608
+
7609
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7610
+ }
7611
+
7612
+ .debugger-header:hover {
7613
+ backdrop-filter: blur(18px) brightness(1.15);
7614
+ -webkit-backdrop-filter: blur(18px) brightness(1.15);
7615
+ background: linear-gradient(
7616
+ 135deg,
7617
+ rgba(255, 255, 255, 0.15),
7618
+ rgba(255, 255, 255, 0.08)
7619
+ );
7530
7620
  }
7531
7621
 
7532
7622
  .debugger-title {
7533
- font-weight: bold;
7534
- color: #4CAF50;
7535
- font-size: 14px;
7623
+ font-weight: 600;
7624
+ color: rgba(60, 60, 67, 0.9);
7625
+ font-size: 15px;
7626
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
7536
7627
  }
7537
7628
 
7538
7629
  .debugger-controls {
7539
7630
  display: flex;
7540
- gap: 8px;
7631
+ gap: 10px;
7632
+ position: relative;
7633
+ z-index: 3;
7541
7634
  }
7542
7635
 
7543
7636
  .debugger-btn {
7544
- background: none;
7545
- border: none;
7546
- color: #fff;
7547
- padding: 4px 8px;
7548
- border-radius: 4px;
7637
+ /* 按钮毛玻璃效果但保证可见性 */
7638
+ backdrop-filter: blur(8px);
7639
+ -webkit-backdrop-filter: blur(8px);
7640
+ background: linear-gradient(
7641
+ 135deg,
7642
+ rgba(255, 255, 255, 0.7),
7643
+ rgba(255, 255, 255, 0.5)
7644
+ );
7645
+ border: 1px solid rgba(0, 0, 0, 0.08);
7646
+ color: rgba(60, 60, 67, 0.9);
7647
+ text-shadow: 0 1px 1px rgba(255, 255, 255, 0.8);
7648
+ padding: 6px 12px;
7649
+ border-radius: 12px;
7549
7650
  cursor: pointer;
7550
- font-size: 12px;
7551
- transition: background-color 0.2s;
7651
+ font-size: 11px;
7652
+ font-weight: 600;
7653
+
7654
+ /* 按钮阴影 */
7655
+ box-shadow:
7656
+ 0 2px 8px rgba(0, 0, 0, 0.1),
7657
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7658
+
7659
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7660
+ transform: translateZ(0);
7552
7661
  }
7553
7662
 
7554
7663
  .debugger-btn:hover {
7555
- background: #555;
7664
+ backdrop-filter: blur(12px);
7665
+ -webkit-backdrop-filter: blur(12px);
7666
+ background: linear-gradient(
7667
+ 135deg,
7668
+ rgba(255, 255, 255, 0.2),
7669
+ rgba(255, 255, 255, 0.12)
7670
+ );
7671
+ transform: scale(1.05) translateZ(5px);
7672
+ box-shadow:
7673
+ 0 4px 16px rgba(0, 0, 0, 0.15),
7674
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7675
+ }
7676
+
7677
+ .debugger-btn:active {
7678
+ transform: scale(0.98);
7679
+ transition: transform 0.1s;
7556
7680
  }
7557
7681
 
7558
7682
  .debugger-btn.active {
7559
- background: #4CAF50;
7560
- color: #000;
7683
+ background: linear-gradient(135deg, #42b883, #35495e);
7684
+ color: #ffffff;
7685
+ box-shadow:
7686
+ 0 0 20px rgba(66, 184, 131, 0.4),
7687
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7688
+ backdrop-filter: blur(10px);
7561
7689
  }
7562
7690
 
7563
7691
  .debugger-icon {
7564
7692
  width: 16px;
7565
7693
  height: 16px;
7566
7694
  vertical-align: middle;
7695
+ filter:
7696
+ brightness(0.8)
7697
+ drop-shadow(0 1px 2px rgba(255, 255, 255, 0.8));
7698
+ color: rgba(60, 60, 67, 0.8);
7567
7699
  }
7568
7700
 
7569
7701
  .debugger-content {
7570
- height: calc(100% - 40px);
7702
+ height: calc(100% - 60px);
7571
7703
  overflow: hidden;
7572
7704
  display: flex;
7573
7705
  flex-direction: column;
7574
7706
  }
7575
7707
 
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
- }
7708
+ /* 移除标签页相关样式 - 只保留网络面板 */
7603
7709
 
7604
7710
  .debugger-panel-content {
7605
7711
  flex: 1;
@@ -7610,27 +7716,138 @@ const styles = `
7610
7716
  .request-list {
7611
7717
  display: flex;
7612
7718
  flex-direction: column;
7613
- gap: 8px;
7719
+ gap: 12px;
7720
+ padding: 16px;
7721
+ position: relative;
7722
+ z-index: 2;
7614
7723
  }
7615
7724
 
7616
7725
  .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;
7726
+ /* 请求项毛玻璃效果加动态光效 */
7623
7727
  position: relative;
7728
+ backdrop-filter: blur(10px) brightness(1.1);
7729
+ -webkit-backdrop-filter: blur(10px) brightness(1.1);
7730
+
7731
+ /* 多层背景 - 模拟 Liquid Glass */
7732
+ background:
7733
+ /* 动态光效层 */
7734
+ linear-gradient(
7735
+ 105deg,
7736
+ transparent 35%,
7737
+ rgba(255, 255, 255, 0.25) 45%,
7738
+ rgba(255, 255, 255, 0.35) 50%,
7739
+ rgba(255, 255, 255, 0.25) 55%,
7740
+ transparent 65%
7741
+ ),
7742
+ /* 基础玻璃层 */
7743
+ linear-gradient(
7744
+ 135deg,
7745
+ rgba(255, 255, 255, 0.8),
7746
+ rgba(255, 255, 255, 0.6)
7747
+ );
7748
+
7749
+ background-size: 300% 100%, 100% 100%;
7750
+ border: 1px solid rgba(255, 255, 255, 0.2);
7751
+ border-radius: 16px;
7752
+ padding: 16px;
7753
+ cursor: pointer;
7754
+
7755
+ /* 深度阴影和玻璃效果 */
7756
+ box-shadow:
7757
+ 0 4px 16px rgba(31, 38, 135, 0.2),
7758
+ inset 0 1px 2px rgba(255, 255, 255, 0.15),
7759
+ inset 0 -1px 1px rgba(0, 0, 0, 0.05);
7760
+
7761
+ /* 流体动画和光效 */
7762
+ transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
7763
+ transform: translateZ(0);
7764
+ animation: liquid-shimmer 4s ease-in-out infinite;
7765
+ }
7766
+
7767
+ /* 模拟折射效果的伪元素 */
7768
+ .request-item::before {
7769
+ content: '';
7770
+ position: absolute;
7771
+ inset: -1px;
7772
+ border-radius: inherit;
7773
+ background: radial-gradient(
7774
+ circle at var(--mouse-x, 30%) var(--mouse-y, 30%),
7775
+ rgba(255, 255, 255, 0.4) 0%,
7776
+ rgba(255, 255, 255, 0.1) 30%,
7777
+ transparent 70%
7778
+ );
7779
+ opacity: 0;
7780
+ transition: opacity 0.4s ease;
7781
+ pointer-events: none;
7782
+ mix-blend-mode: overlay;
7783
+ z-index: 1;
7784
+ }
7785
+
7786
+ /* 高光效果伪元素 */
7787
+ .request-item::after {
7788
+ content: '';
7789
+ position: absolute;
7790
+ top: 0;
7791
+ left: 0;
7792
+ right: 0;
7793
+ height: 40%;
7794
+ border-radius: 16px 16px 0 0;
7795
+ background: linear-gradient(
7796
+ 180deg,
7797
+ rgba(255, 255, 255, 0.2) 0%,
7798
+ transparent 100%
7799
+ );
7800
+ pointer-events: none;
7801
+ z-index: 1;
7624
7802
  }
7625
7803
 
7626
7804
  .request-item:hover {
7627
- background: #333;
7628
- border-color: #666;
7805
+ backdrop-filter: blur(15px) brightness(1.2);
7806
+ -webkit-backdrop-filter: blur(15px) brightness(1.2);
7807
+
7808
+ /* 增强 hover 时的光效 */
7809
+ background:
7810
+ linear-gradient(
7811
+ 105deg,
7812
+ transparent 20%,
7813
+ rgba(255, 255, 255, 0.35) 40%,
7814
+ rgba(255, 255, 255, 0.5) 50%,
7815
+ rgba(255, 255, 255, 0.35) 60%,
7816
+ transparent 80%
7817
+ ),
7818
+ linear-gradient(
7819
+ 135deg,
7820
+ rgba(255, 255, 255, 0.2),
7821
+ rgba(255, 255, 255, 0.12)
7822
+ );
7823
+
7824
+ background-size: 200% 100%, 100% 100%;
7825
+ transform: scale(1.02) translateZ(15px);
7826
+ animation: liquid-refraction 0.6s ease-out;
7827
+
7828
+ box-shadow:
7829
+ 0 12px 40px rgba(31, 38, 135, 0.35),
7830
+ inset 0 2px 4px rgba(255, 255, 255, 0.25),
7831
+ inset 0 -2px 2px rgba(0, 0, 0, 0.08);
7832
+ }
7833
+
7834
+ /* 激活折射效果 */
7835
+ .request-item:hover::before {
7836
+ opacity: 1;
7629
7837
  }
7630
7838
 
7631
7839
  .request-item.expanded {
7632
- background: #333;
7633
- border-color: #4CAF50;
7840
+ backdrop-filter: blur(18px) brightness(1.2);
7841
+ -webkit-backdrop-filter: blur(18px) brightness(1.2);
7842
+ background: linear-gradient(
7843
+ 135deg,
7844
+ rgba(66, 184, 131, 0.1),
7845
+ rgba(53, 73, 94, 0.05)
7846
+ );
7847
+ border-color: rgba(66, 184, 131, 0.3);
7848
+ box-shadow:
7849
+ 0 12px 40px rgba(66, 184, 131, 0.2),
7850
+ inset 0 2px 4px rgba(255, 255, 255, 0.15);
7634
7851
  }
7635
7852
 
7636
7853
  .request-header {
@@ -7641,20 +7858,48 @@ const styles = `
7641
7858
  }
7642
7859
 
7643
7860
  .request-method {
7644
- padding: 2px 8px;
7645
- border-radius: 4px;
7646
- font-weight: bold;
7861
+ /* 方法标签毛玻璃效果 */
7862
+ backdrop-filter: blur(6px);
7863
+ -webkit-backdrop-filter: blur(6px);
7864
+ padding: 4px 10px;
7865
+ border-radius: 10px;
7866
+ font-weight: 600;
7647
7867
  font-size: 10px;
7648
7868
  text-transform: uppercase;
7649
- min-width: 40px;
7869
+ min-width: 45px;
7650
7870
  text-align: center;
7871
+ border: 1px solid rgba(255, 255, 255, 0.2);
7872
+ box-shadow:
7873
+ 0 2px 8px rgba(0, 0, 0, 0.1),
7874
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7875
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7651
7876
  }
7652
7877
 
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; }
7878
+ .method-get {
7879
+ background: linear-gradient(135deg, #4CAF50, #45a049);
7880
+ color: #ffffff;
7881
+ box-shadow: 0 0 15px rgba(76, 175, 80, 0.4);
7882
+ }
7883
+ .method-post {
7884
+ background: linear-gradient(135deg, #2196F3, #1976D2);
7885
+ color: #ffffff;
7886
+ box-shadow: 0 0 15px rgba(33, 150, 243, 0.4);
7887
+ }
7888
+ .method-put {
7889
+ background: linear-gradient(135deg, #FF9800, #F57C00);
7890
+ color: #ffffff;
7891
+ box-shadow: 0 0 15px rgba(255, 152, 0, 0.4);
7892
+ }
7893
+ .method-delete {
7894
+ background: linear-gradient(135deg, #F44336, #D32F2F);
7895
+ color: #ffffff;
7896
+ box-shadow: 0 0 15px rgba(244, 67, 54, 0.4);
7897
+ }
7898
+ .method-patch {
7899
+ background: linear-gradient(135deg, #9C27B0, #7B1FA2);
7900
+ color: #ffffff;
7901
+ box-shadow: 0 0 15px rgba(156, 39, 176, 0.4);
7902
+ }
7658
7903
 
7659
7904
  .request-url {
7660
7905
  flex: 1;
@@ -7667,18 +7912,47 @@ const styles = `
7667
7912
  }
7668
7913
 
7669
7914
  .request-status {
7670
- padding: 2px 8px;
7671
- border-radius: 4px;
7915
+ /* 状态码标签毛玻璃效果 */
7916
+ backdrop-filter: blur(6px);
7917
+ -webkit-backdrop-filter: blur(6px);
7918
+ padding: 4px 10px;
7919
+ border-radius: 10px;
7672
7920
  font-size: 10px;
7673
- min-width: 35px;
7921
+ font-weight: 600;
7922
+ min-width: 40px;
7674
7923
  text-align: center;
7924
+ border: 1px solid rgba(255, 255, 255, 0.2);
7925
+ box-shadow:
7926
+ 0 2px 8px rgba(0, 0, 0, 0.1),
7927
+ inset 0 1px 0 rgba(255, 255, 255, 0.25);
7928
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
7675
7929
  }
7676
7930
 
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; }
7931
+ .status-2xx {
7932
+ background: linear-gradient(135deg, #4CAF50, #45a049);
7933
+ color: #ffffff;
7934
+ box-shadow: 0 0 20px rgba(76, 175, 80, 0.5);
7935
+ }
7936
+ .status-3xx {
7937
+ background: linear-gradient(135deg, #FF9800, #F57C00);
7938
+ color: #ffffff;
7939
+ box-shadow: 0 0 20px rgba(255, 152, 0, 0.5);
7940
+ }
7941
+ .status-4xx {
7942
+ background: linear-gradient(135deg, #F44336, #D32F2F);
7943
+ color: #ffffff;
7944
+ box-shadow: 0 0 20px rgba(244, 67, 54, 0.5);
7945
+ }
7946
+ .status-5xx {
7947
+ background: linear-gradient(135deg, #9C27B0, #7B1FA2);
7948
+ color: #ffffff;
7949
+ box-shadow: 0 0 20px rgba(156, 39, 176, 0.5);
7950
+ }
7951
+ .status-error {
7952
+ background: linear-gradient(135deg, #F44336, #D32F2F);
7953
+ color: #ffffff;
7954
+ box-shadow: 0 0 20px rgba(244, 67, 54, 0.5);
7955
+ }
7682
7956
 
7683
7957
  .request-info {
7684
7958
  display: flex;
@@ -7765,11 +8039,28 @@ const styles = `
7765
8039
  }
7766
8040
 
7767
8041
  .detail-content {
7768
- background: #222;
7769
- padding: 8px;
7770
- border-radius: 4px;
7771
- max-height: 200px;
8042
+ /* 详情内容毛玻璃效果 */
8043
+ backdrop-filter: blur(8px) brightness(0.9);
8044
+ -webkit-backdrop-filter: blur(8px) brightness(0.9);
8045
+ background: linear-gradient(
8046
+ 135deg,
8047
+ rgba(0, 0, 0, 0.3),
8048
+ rgba(0, 0, 0, 0.15)
8049
+ );
8050
+ border: 1px solid rgba(255, 255, 255, 0.08);
8051
+ padding: 16px;
8052
+ border-radius: 12px;
8053
+ max-height: 400px;
8054
+ min-height: 300px;
7772
8055
  overflow: auto;
8056
+
8057
+ /* 内部阴影 */
8058
+ box-shadow:
8059
+ inset 0 2px 4px rgba(0, 0, 0, 0.2),
8060
+ inset 0 -1px 2px rgba(255, 255, 255, 0.05);
8061
+
8062
+ /* 平滑滚动 */
8063
+ scroll-behavior: smooth;
7773
8064
  }
7774
8065
 
7775
8066
  .json-content {
@@ -7823,47 +8114,75 @@ const styles = `
7823
8114
  }
7824
8115
 
7825
8116
  .share-btn {
7826
- background: #2196F3;
7827
- color: #fff;
7828
- border: none;
7829
- padding: 4px 10px;
7830
- border-radius: 3px;
7831
- font-size: 11px;
8117
+ /* 分享按钮毛玻璃效果 */
8118
+ backdrop-filter: blur(6px);
8119
+ -webkit-backdrop-filter: blur(6px);
8120
+ background: linear-gradient(135deg, #2196F3, #1976D2);
8121
+ color: #ffffff;
8122
+ border: 1px solid rgba(33, 150, 243, 0.3);
8123
+ padding: 6px 12px;
8124
+ border-radius: 10px;
8125
+ font-size: 10px;
8126
+ font-weight: 500;
7832
8127
  margin-left: 8px;
7833
8128
  cursor: pointer;
7834
- transition: all 0.2s;
7835
8129
  white-space: nowrap;
8130
+
8131
+ box-shadow:
8132
+ 0 2px 8px rgba(33, 150, 243, 0.3),
8133
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
8134
+
8135
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
8136
+ transform: translateZ(0);
7836
8137
  }
7837
8138
 
7838
8139
  .share-btn:hover {
7839
- background: #1976D2;
7840
- transform: scale(1.1);
8140
+ background: linear-gradient(135deg, #1976D2, #1565C0);
8141
+ transform: scale(1.05) translateZ(5px);
8142
+ box-shadow:
8143
+ 0 4px 16px rgba(33, 150, 243, 0.4),
8144
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7841
8145
  }
7842
8146
 
7843
8147
  .share-btn:active {
7844
- transform: scale(0.95);
8148
+ transform: scale(0.98);
8149
+ transition: transform 0.1s;
7845
8150
  }
7846
8151
 
7847
8152
  .api-curl-btn {
7848
- background: #4CAF50;
7849
- color: #fff;
7850
- border: none;
7851
- padding: 4px 10px;
7852
- border-radius: 3px;
7853
- font-size: 11px;
8153
+ /* API Curl 按钮毛玻璃效果 */
8154
+ backdrop-filter: blur(6px);
8155
+ -webkit-backdrop-filter: blur(6px);
8156
+ background: linear-gradient(135deg, #4CAF50, #45a049);
8157
+ color: #ffffff;
8158
+ border: 1px solid rgba(76, 175, 80, 0.3);
8159
+ padding: 6px 12px;
8160
+ border-radius: 10px;
8161
+ font-size: 10px;
8162
+ font-weight: 500;
7854
8163
  margin-left: 8px;
7855
8164
  cursor: pointer;
7856
- transition: all 0.2s;
7857
8165
  white-space: nowrap;
8166
+
8167
+ box-shadow:
8168
+ 0 2px 8px rgba(76, 175, 80, 0.3),
8169
+ inset 0 1px 0 rgba(255, 255, 255, 0.2);
8170
+
8171
+ transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
8172
+ transform: translateZ(0);
7858
8173
  }
7859
8174
 
7860
8175
  .api-curl-btn:hover {
7861
- background: #45a049;
7862
- transform: scale(1.1);
8176
+ background: linear-gradient(135deg, #45a049, #388E3C);
8177
+ transform: scale(1.05) translateZ(5px);
8178
+ box-shadow:
8179
+ 0 4px 16px rgba(76, 175, 80, 0.4),
8180
+ inset 0 1px 0 rgba(255, 255, 255, 0.3);
7863
8181
  }
7864
8182
 
7865
8183
  .api-curl-btn:active {
7866
- transform: scale(0.95);
8184
+ transform: scale(0.98);
8185
+ transition: transform 0.1s;
7867
8186
  }
7868
8187
 
7869
8188
  .console-content {
@@ -7935,7 +8254,73 @@ const styles = `
7935
8254
  cursor: not-allowed;
7936
8255
  }
7937
8256
 
7938
- @media (max-width: 600px) {
8257
+ /* 动态光效动画 - 模拟 Shader 效果 */
8258
+ @keyframes liquid-shimmer {
8259
+ 0% {
8260
+ background-position: -300% center;
8261
+ transform: translateX(-10px);
8262
+ }
8263
+ 50% {
8264
+ transform: translateX(0);
8265
+ }
8266
+ 100% {
8267
+ background-position: 300% center;
8268
+ transform: translateX(10px);
8269
+ }
8270
+ }
8271
+
8272
+ @keyframes liquid-refraction {
8273
+ 0%, 100% {
8274
+ transform: scale(1) perspective(1000px) rotateY(0deg);
8275
+ filter: blur(0px);
8276
+ }
8277
+ 25% {
8278
+ transform: scale(1.01) perspective(1000px) rotateY(0.5deg);
8279
+ filter: blur(0.5px);
8280
+ }
8281
+ 75% {
8282
+ transform: scale(0.99) perspective(1000px) rotateY(-0.5deg);
8283
+ filter: blur(0.3px);
8284
+ }
8285
+ }
8286
+
8287
+ @keyframes liquid-expand {
8288
+ 0% {
8289
+ opacity: 0;
8290
+ transform: scale(0.95) translateY(-10px);
8291
+ backdrop-filter: blur(5px);
8292
+ }
8293
+ 50% {
8294
+ opacity: 0.7;
8295
+ transform: scale(1.02) translateY(-2px);
8296
+ backdrop-filter: blur(12px);
8297
+ }
8298
+ 100% {
8299
+ opacity: 1;
8300
+ transform: scale(1) translateY(0);
8301
+ backdrop-filter: blur(8px);
8302
+ }
8303
+ }
8304
+
8305
+ @keyframes liquid-glow {
8306
+ 0%, 100% {
8307
+ box-shadow: 0 0 20px rgba(66, 184, 131, 0.3);
8308
+ }
8309
+ 50% {
8310
+ box-shadow: 0 0 30px rgba(66, 184, 131, 0.5);
8311
+ }
8312
+ }
8313
+
8314
+ .expanding {
8315
+ animation: liquid-expand 0.4s cubic-bezier(0.4, 0, 0.2, 1);
8316
+ }
8317
+
8318
+ .request-item.expanded {
8319
+ animation: liquid-glow 2s ease-in-out infinite;
8320
+ }
8321
+
8322
+ /* 移动端响应式 */
8323
+ @media (max-width: 768px) {
7939
8324
  #network-debugger-panel.bottom-right,
7940
8325
  #network-debugger-panel.bottom-left,
7941
8326
  #network-debugger-panel.top-right,
@@ -7943,32 +8328,87 @@ const styles = `
7943
8328
  width: calc(100vw - 20px) !important;
7944
8329
  left: 10px !important;
7945
8330
  right: auto !important;
8331
+ /* 移动端清晰毛玻璃 */
8332
+ backdrop-filter: blur(15px) saturate(150%);
8333
+ -webkit-backdrop-filter: blur(15px) saturate(150%);
8334
+ }
8335
+
8336
+ .request-item {
8337
+ padding: 12px;
8338
+ border-radius: 12px;
8339
+ }
8340
+
8341
+ .debugger-header {
8342
+ padding: 10px 12px;
8343
+ }
8344
+
8345
+ .debugger-controls {
8346
+ gap: 6px;
8347
+ }
8348
+
8349
+ .debugger-btn {
8350
+ padding: 4px 8px;
8351
+ font-size: 10px;
7946
8352
  }
7947
8353
 
7948
8354
  /* 最小化时不应用全宽,保持小尺寸 */
7949
8355
  #network-debugger-panel.minimized {
7950
- width: 160px !important;
7951
- max-width: 160px !important;
7952
- height: 35px !important;
8356
+ width: 180px !important;
8357
+ max-width: 180px !important;
8358
+ height: 40px !important;
8359
+ }
8360
+ }
8361
+
8362
+ @media (max-width: 480px) {
8363
+ .request-header {
8364
+ flex-direction: column;
8365
+ gap: 8px;
8366
+ align-items: stretch;
8367
+ }
8368
+
8369
+ .request-method,
8370
+ .request-status {
8371
+ align-self: flex-start;
8372
+ }
8373
+
8374
+ .share-btn,
8375
+ .api-curl-btn {
8376
+ margin-left: 0;
8377
+ margin-top: 4px;
7953
8378
  }
7954
8379
  }
7955
8380
 
8381
+ /* iOS 26 风格滚动条 */
7956
8382
  #network-debugger-panel ::-webkit-scrollbar {
7957
- width: 6px;
7958
- height: 6px;
8383
+ width: 8px;
8384
+ height: 8px;
7959
8385
  }
7960
8386
 
7961
8387
  #network-debugger-panel ::-webkit-scrollbar-track {
7962
- background: #333;
8388
+ background: rgba(255, 255, 255, 0.05);
8389
+ border-radius: 4px;
8390
+ backdrop-filter: blur(5px);
7963
8391
  }
7964
8392
 
7965
8393
  #network-debugger-panel ::-webkit-scrollbar-thumb {
7966
- background: #666;
7967
- border-radius: 3px;
8394
+ background: linear-gradient(
8395
+ 135deg,
8396
+ rgba(255, 255, 255, 0.2),
8397
+ rgba(255, 255, 255, 0.1)
8398
+ );
8399
+ border-radius: 4px;
8400
+ border: 1px solid rgba(255, 255, 255, 0.1);
8401
+ backdrop-filter: blur(10px);
8402
+ transition: all 0.3s ease;
7968
8403
  }
7969
8404
 
7970
8405
  #network-debugger-panel ::-webkit-scrollbar-thumb:hover {
7971
- background: #888;
8406
+ background: linear-gradient(
8407
+ 135deg,
8408
+ rgba(255, 255, 255, 0.3),
8409
+ rgba(255, 255, 255, 0.15)
8410
+ );
8411
+ box-shadow: 0 2px 8px rgba(0, 0, 0, 0.2);
7972
8412
  }
7973
8413
 
7974
8414
  .resize-handle {
@@ -8241,8 +8681,6 @@ const _DebugPanel = class _DebugPanel {
8241
8681
  this.dragStart = { x: 0, y: 0 };
8242
8682
  this.resizeTimeout = null;
8243
8683
  this.resizeDirection = "";
8244
- this.currentTab = "network";
8245
- this.consoleHistory = [];
8246
8684
  this.requestsCache = [];
8247
8685
  this.interceptor = interceptor;
8248
8686
  const savedConfig = this.loadConfig();
@@ -8250,7 +8688,6 @@ const _DebugPanel = class _DebugPanel {
8250
8688
  position: "bottom-right",
8251
8689
  theme: "dark",
8252
8690
  minimized: false,
8253
- showConsole: true,
8254
8691
  isClosed: false,
8255
8692
  ...savedConfig,
8256
8693
  // 先应用保存的配置
@@ -8289,60 +8726,17 @@ const _DebugPanel = class _DebugPanel {
8289
8726
  </div>
8290
8727
  </div>
8291
8728
  <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
8729
  <div class="debugger-panel-content">
8299
- <div class="network-panel" data-panel="network">
8730
+ <div class="network-panel">
8300
8731
  <div class="request-list"></div>
8301
8732
  </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.47"}</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
8733
  </div>
8338
8734
  </div>
8339
8735
  `;
8340
8736
  this.addResizeHandles();
8341
8737
  this.shadowRoot.appendChild(this.container);
8342
8738
  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");
8739
+ this.networkTab = this.shadowRoot.querySelector(".network-panel");
8346
8740
  }
8347
8741
  addResizeHandles() {
8348
8742
  const handles = ["n", "s", "e", "w", "ne", "nw", "se", "sw"];
@@ -8356,9 +8750,6 @@ const _DebugPanel = class _DebugPanel {
8356
8750
  bindEvents() {
8357
8751
  const header = this.shadowRoot.querySelector(".debugger-header");
8358
8752
  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
8753
  header.addEventListener("mousedown", (e) => {
8363
8754
  if (e.target === controls || controls.contains(e.target)) return;
8364
8755
  this.startDrag(e);
@@ -8387,28 +8778,6 @@ const _DebugPanel = class _DebugPanel {
8387
8778
  break;
8388
8779
  }
8389
8780
  });
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
8781
  const resizeHandles = this.shadowRoot.querySelectorAll(".resize-handle");
8413
8782
  resizeHandles.forEach((handle) => {
8414
8783
  handle.addEventListener("mousedown", (e) => {
@@ -8629,21 +8998,11 @@ const _DebugPanel = class _DebugPanel {
8629
8998
  }
8630
8999
  return url;
8631
9000
  }
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
- }
9001
+ // 移除 switchTab 方法 - 不再需要标签页切换
8642
9002
  clearRequests() {
8643
9003
  this.requestsCache = [];
8644
9004
  this.interceptor.clearRequests();
8645
9005
  this.renderRequests();
8646
- this.logToConsole("✅ 已清空网络请求记录");
8647
9006
  }
8648
9007
  exportData() {
8649
9008
  const data = {
@@ -8660,22 +9019,18 @@ const _DebugPanel = class _DebugPanel {
8660
9019
  a.download = `network-debug-${Date.now()}.json`;
8661
9020
  a.click();
8662
9021
  URL.revokeObjectURL(url);
8663
- this.logToConsole("💾 网络数据已导出 (by Leo)");
8664
9022
  }
8665
9023
  async shareRequest(request) {
8666
9024
  try {
8667
- this.logToConsole("📤 正在创建分享链接...");
8668
9025
  const shareUrl = await createShareLink(request);
8669
9026
  if (shareUrl) {
8670
9027
  const copied = await copyToClipboard(shareUrl);
8671
9028
  if (copied) {
8672
- this.logToConsole(`✅ 分享链接已复制到剪贴板: ${shareUrl}`);
8673
9029
  alert(`分享链接已复制到剪贴板!
8674
9030
  ${shareUrl}
8675
9031
 
8676
9032
  Created by Leo (@leeguoo)`);
8677
9033
  } else {
8678
- this.logToConsole(`✅ 分享链接: ${shareUrl}`);
8679
9034
  prompt("分享链接已创建,请手动复制:\n\nCreated by Leo (@leeguoo)", shareUrl);
8680
9035
  }
8681
9036
  } else {
@@ -8683,28 +9038,23 @@ Created by Leo (@leeguoo)`);
8683
9038
  }
8684
9039
  } catch (error) {
8685
9040
  logger.error("分享失败:", error);
8686
- this.logToConsole(`❌ 分享失败: ${error}`);
8687
9041
  alert("分享失败,请稍后重试");
8688
9042
  }
8689
9043
  }
8690
9044
  async generateApiCurl(request) {
8691
9045
  try {
8692
- this.logToConsole("🔧 正在生成API cURL命令...");
8693
9046
  const curlCommand = formatAsApiCurl(request);
8694
9047
  const copied = await copyToClipboard(curlCommand);
8695
9048
  if (copied) {
8696
- this.logToConsole(`✅ API cURL已复制到剪贴板`);
8697
9049
  alert(`API cURL命令已复制到剪贴板!
8698
9050
  适用于 httpmisonote.com API
8699
9051
 
8700
9052
  Created by Leo (@leeguoo)`);
8701
9053
  } else {
8702
- this.logToConsole(`✅ API cURL: ${curlCommand}`);
8703
9054
  prompt("API cURL命令已生成,请手动复制:\n\nCreated by Leo (@leeguoo)", curlCommand);
8704
9055
  }
8705
9056
  } catch (error) {
8706
9057
  logger.error("生成API cURL失败:", error);
8707
- this.logToConsole(`❌ 生成API cURL失败: ${error}`);
8708
9058
  alert("生成API cURL失败,请稍后重试");
8709
9059
  }
8710
9060
  }
@@ -8726,131 +9076,9 @@ Created by Leo (@leeguoo)`);
8726
9076
  this.container.style.bottom = "auto";
8727
9077
  }
8728
9078
  }
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
- }
9079
+ // 移除 handleToolAction 方法 - 不再需要工具功能
9080
+ // 移除 handleParseCurl 方法
9081
+ // 移除所有工具和控制台相关方法
8854
9082
  startDrag(e) {
8855
9083
  this.isDragging = true;
8856
9084
  this.dragStart = { x: e.clientX, y: e.clientY };
@@ -9031,6 +9259,8 @@ Created by Leo (@leeguoo)`);
9031
9259
  isDragging = true;
9032
9260
  btn.style.cursor = "grabbing";
9033
9261
  }, 150);
9262
+ document.addEventListener("mousemove", handleMouseMove);
9263
+ document.addEventListener("mouseup", handleMouseUp);
9034
9264
  e.preventDefault();
9035
9265
  }
9036
9266
  });
@@ -9064,9 +9294,9 @@ Created by Leo (@leeguoo)`);
9064
9294
  } else {
9065
9295
  this.show();
9066
9296
  }
9297
+ document.removeEventListener("mousemove", handleMouseMove);
9298
+ document.removeEventListener("mouseup", handleMouseUp);
9067
9299
  };
9068
- document.addEventListener("mousemove", handleMouseMove);
9069
- document.addEventListener("mouseup", handleMouseUp);
9070
9300
  btn.addEventListener("mouseenter", () => {
9071
9301
  btn.style.filter = "brightness(0.95)";
9072
9302
  });
@@ -9109,7 +9339,6 @@ Created by Leo (@leeguoo)`);
9109
9339
  position: this.config.position,
9110
9340
  theme: this.config.theme,
9111
9341
  minimized: this.config.minimized,
9112
- showConsole: this.config.showConsole,
9113
9342
  isClosed: this.config.isClosed
9114
9343
  };
9115
9344
  localStorage.setItem(_DebugPanel.STORAGE_KEY, JSON.stringify(configToSave));
@@ -9235,7 +9464,7 @@ class NetworkDebugger {
9235
9464
  this.initialized = true;
9236
9465
  logger.consoleDirect(`
9237
9466
  ╔════════════════════════════════════════╗
9238
- ║ 🔓 PWTK 解密小工具 v${"1.2.47"} ║
9467
+ ║ 🔓 PWTK 解密小工具 v${"1.2.49-beta.0"} ║
9239
9468
  ║ Created by Leo (@leeguoo) ║
9240
9469
  ║ 技术支持: 请联系 Leo ║
9241
9470
  ║ 分享服务: curl.bwg.leeguoo.com ║
@@ -9296,7 +9525,7 @@ class NetworkDebugger {
9296
9525
  }
9297
9526
  async checkForUpdates() {
9298
9527
  try {
9299
- const currentVersion = "1.2.47";
9528
+ const currentVersion = "1.2.49-beta.0";
9300
9529
  logger.info(`[PWTK Update] Checking for updates... Current version: ${currentVersion}`);
9301
9530
  const response = await fetch("https://registry.npmjs.org/@leeguoo/pwtk-network-debugger/latest");
9302
9531
  const data = await response.json();
@@ -9316,7 +9545,7 @@ class NetworkDebugger {
9316
9545
  logger.error("[PWTK Update] Failed to check for updates:", error);
9317
9546
  return {
9318
9547
  hasUpdate: false,
9319
- currentVersion: "1.2.47"
9548
+ currentVersion: "1.2.49-beta.0"
9320
9549
  };
9321
9550
  }
9322
9551
  }