@gxp-dev/tools 2.0.62 โ†’ 2.0.64

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.
Files changed (182) hide show
  1. package/README.md +32 -31
  2. package/bin/gx-devtools.js +74 -54
  3. package/bin/lib/cli.js +23 -21
  4. package/bin/lib/commands/add-dependency.js +366 -325
  5. package/bin/lib/commands/assets.js +137 -139
  6. package/bin/lib/commands/build.js +169 -174
  7. package/bin/lib/commands/datastore.js +181 -183
  8. package/bin/lib/commands/dev.js +127 -131
  9. package/bin/lib/commands/extensions.js +147 -149
  10. package/bin/lib/commands/extract-config.js +73 -67
  11. package/bin/lib/commands/index.js +12 -12
  12. package/bin/lib/commands/init.js +342 -240
  13. package/bin/lib/commands/publish.js +69 -75
  14. package/bin/lib/commands/socket.js +69 -69
  15. package/bin/lib/commands/ssl.js +14 -14
  16. package/bin/lib/constants.js +10 -24
  17. package/bin/lib/tui/App.tsx +761 -705
  18. package/bin/lib/tui/components/AIPanel.tsx +191 -171
  19. package/bin/lib/tui/components/CommandInput.tsx +394 -343
  20. package/bin/lib/tui/components/GeminiPanel.tsx +175 -151
  21. package/bin/lib/tui/components/Header.tsx +23 -21
  22. package/bin/lib/tui/components/LogPanel.tsx +244 -220
  23. package/bin/lib/tui/components/TabBar.tsx +50 -48
  24. package/bin/lib/tui/components/WelcomeScreen.tsx +126 -71
  25. package/bin/lib/tui/index.tsx +37 -39
  26. package/bin/lib/tui/services/AIService.ts +518 -462
  27. package/bin/lib/tui/services/ExtensionService.ts +140 -129
  28. package/bin/lib/tui/services/GeminiService.ts +367 -337
  29. package/bin/lib/tui/services/ServiceManager.ts +344 -322
  30. package/bin/lib/tui/services/SocketService.ts +168 -168
  31. package/bin/lib/tui/services/ViteService.ts +88 -88
  32. package/bin/lib/tui/services/index.ts +47 -22
  33. package/bin/lib/utils/ai-scaffold.js +291 -280
  34. package/bin/lib/utils/extract-config.js +157 -140
  35. package/bin/lib/utils/files.js +82 -86
  36. package/bin/lib/utils/index.js +7 -7
  37. package/bin/lib/utils/paths.js +34 -34
  38. package/bin/lib/utils/prompts.js +194 -169
  39. package/bin/lib/utils/ssl.js +79 -81
  40. package/browser-extensions/README.md +0 -1
  41. package/browser-extensions/chrome/background.js +244 -237
  42. package/browser-extensions/chrome/content.js +32 -29
  43. package/browser-extensions/chrome/devtools.html +7 -7
  44. package/browser-extensions/chrome/devtools.js +19 -19
  45. package/browser-extensions/chrome/inspector.js +802 -767
  46. package/browser-extensions/chrome/manifest.json +71 -63
  47. package/browser-extensions/chrome/panel.html +674 -636
  48. package/browser-extensions/chrome/panel.js +722 -712
  49. package/browser-extensions/chrome/popup.html +586 -543
  50. package/browser-extensions/chrome/popup.js +282 -244
  51. package/browser-extensions/chrome/rules.json +1 -1
  52. package/browser-extensions/chrome/test-chrome.html +216 -136
  53. package/browser-extensions/chrome/test-mixed-content.html +284 -189
  54. package/browser-extensions/chrome/test-uri-pattern.html +221 -198
  55. package/browser-extensions/firefox/README.md +9 -6
  56. package/browser-extensions/firefox/background.js +221 -218
  57. package/browser-extensions/firefox/content.js +55 -52
  58. package/browser-extensions/firefox/debug-errors.html +386 -228
  59. package/browser-extensions/firefox/debug-https.html +153 -105
  60. package/browser-extensions/firefox/devtools.html +7 -7
  61. package/browser-extensions/firefox/devtools.js +23 -20
  62. package/browser-extensions/firefox/inspector.js +802 -767
  63. package/browser-extensions/firefox/manifest.json +68 -68
  64. package/browser-extensions/firefox/panel.html +674 -636
  65. package/browser-extensions/firefox/panel.js +722 -712
  66. package/browser-extensions/firefox/popup.html +572 -535
  67. package/browser-extensions/firefox/popup.js +281 -236
  68. package/browser-extensions/firefox/test-gramercy.html +170 -125
  69. package/browser-extensions/firefox/test-imports.html +59 -55
  70. package/browser-extensions/firefox/test-masking.html +231 -140
  71. package/browser-extensions/firefox/test-uri-pattern.html +221 -198
  72. package/dist/tui/App.d.ts +1 -1
  73. package/dist/tui/App.d.ts.map +1 -1
  74. package/dist/tui/App.js +154 -150
  75. package/dist/tui/App.js.map +1 -1
  76. package/dist/tui/components/AIPanel.d.ts.map +1 -1
  77. package/dist/tui/components/AIPanel.js +42 -35
  78. package/dist/tui/components/AIPanel.js.map +1 -1
  79. package/dist/tui/components/CommandInput.d.ts +1 -1
  80. package/dist/tui/components/CommandInput.d.ts.map +1 -1
  81. package/dist/tui/components/CommandInput.js +92 -62
  82. package/dist/tui/components/CommandInput.js.map +1 -1
  83. package/dist/tui/components/GeminiPanel.d.ts.map +1 -1
  84. package/dist/tui/components/GeminiPanel.js +37 -30
  85. package/dist/tui/components/GeminiPanel.js.map +1 -1
  86. package/dist/tui/components/Header.d.ts.map +1 -1
  87. package/dist/tui/components/Header.js +1 -1
  88. package/dist/tui/components/Header.js.map +1 -1
  89. package/dist/tui/components/LogPanel.d.ts +1 -1
  90. package/dist/tui/components/LogPanel.d.ts.map +1 -1
  91. package/dist/tui/components/LogPanel.js +26 -24
  92. package/dist/tui/components/LogPanel.js.map +1 -1
  93. package/dist/tui/components/TabBar.d.ts +2 -2
  94. package/dist/tui/components/TabBar.d.ts.map +1 -1
  95. package/dist/tui/components/TabBar.js +11 -11
  96. package/dist/tui/components/TabBar.js.map +1 -1
  97. package/dist/tui/components/WelcomeScreen.d.ts.map +1 -1
  98. package/dist/tui/components/WelcomeScreen.js +6 -6
  99. package/dist/tui/components/WelcomeScreen.js.map +1 -1
  100. package/dist/tui/index.d.ts.map +1 -1
  101. package/dist/tui/index.js +8 -8
  102. package/dist/tui/index.js.map +1 -1
  103. package/dist/tui/services/AIService.d.ts +2 -2
  104. package/dist/tui/services/AIService.d.ts.map +1 -1
  105. package/dist/tui/services/AIService.js +165 -125
  106. package/dist/tui/services/AIService.js.map +1 -1
  107. package/dist/tui/services/ExtensionService.d.ts +1 -1
  108. package/dist/tui/services/ExtensionService.d.ts.map +1 -1
  109. package/dist/tui/services/ExtensionService.js +33 -26
  110. package/dist/tui/services/ExtensionService.js.map +1 -1
  111. package/dist/tui/services/GeminiService.d.ts +1 -1
  112. package/dist/tui/services/GeminiService.d.ts.map +1 -1
  113. package/dist/tui/services/GeminiService.js +87 -76
  114. package/dist/tui/services/GeminiService.js.map +1 -1
  115. package/dist/tui/services/ServiceManager.d.ts +3 -3
  116. package/dist/tui/services/ServiceManager.d.ts.map +1 -1
  117. package/dist/tui/services/ServiceManager.js +72 -58
  118. package/dist/tui/services/ServiceManager.js.map +1 -1
  119. package/dist/tui/services/SocketService.d.ts.map +1 -1
  120. package/dist/tui/services/SocketService.js +32 -32
  121. package/dist/tui/services/SocketService.js.map +1 -1
  122. package/dist/tui/services/ViteService.d.ts.map +1 -1
  123. package/dist/tui/services/ViteService.js +26 -28
  124. package/dist/tui/services/ViteService.js.map +1 -1
  125. package/dist/tui/services/index.d.ts +6 -6
  126. package/dist/tui/services/index.d.ts.map +1 -1
  127. package/dist/tui/services/index.js +6 -6
  128. package/dist/tui/services/index.js.map +1 -1
  129. package/mcp/gxp-api-server.js +83 -81
  130. package/package.json +109 -93
  131. package/runtime/PortalContainer.vue +258 -234
  132. package/runtime/dev-tools/DevToolsModal.vue +153 -155
  133. package/runtime/dev-tools/LayoutSwitcher.vue +144 -140
  134. package/runtime/dev-tools/MockDataEditor.vue +456 -433
  135. package/runtime/dev-tools/SocketSimulator.vue +379 -371
  136. package/runtime/dev-tools/StoreInspector.vue +517 -455
  137. package/runtime/dev-tools/index.js +5 -5
  138. package/runtime/fallback-layouts/PrivateLayout.vue +2 -2
  139. package/runtime/fallback-layouts/PublicLayout.vue +2 -2
  140. package/runtime/fallback-layouts/SystemLayout.vue +2 -2
  141. package/runtime/gxpStringsPlugin.js +159 -134
  142. package/runtime/index.html +17 -19
  143. package/runtime/main.js +24 -22
  144. package/runtime/mock-api/auth-middleware.js +15 -15
  145. package/runtime/mock-api/image-generator.js +46 -46
  146. package/runtime/mock-api/index.js +55 -55
  147. package/runtime/mock-api/response-generator.js +116 -105
  148. package/runtime/mock-api/route-generator.js +107 -84
  149. package/runtime/mock-api/socket-triggers.js +94 -93
  150. package/runtime/mock-api/spec-loader.js +79 -80
  151. package/runtime/package.json +3 -0
  152. package/runtime/server.js +68 -68
  153. package/runtime/stores/gxpPortalConfigStore.js +204 -186
  154. package/runtime/stores/index.js +2 -2
  155. package/runtime/vite-inspector-plugin.js +858 -707
  156. package/runtime/vite-source-tracker-plugin.js +132 -113
  157. package/runtime/vite.config.js +207 -132
  158. package/scripts/launch-chrome.js +41 -41
  159. package/scripts/pack-chrome.js +38 -39
  160. package/socket-events/AiSessionMessageCreated.json +17 -17
  161. package/socket-events/SocialStreamPostCreated.json +23 -23
  162. package/socket-events/SocialStreamPostVariantCompleted.json +22 -22
  163. package/template/.claude/agents/gxp-developer.md +100 -99
  164. package/template/.claude/settings.json +7 -7
  165. package/template/AGENTS.md +30 -23
  166. package/template/GEMINI.md +20 -20
  167. package/template/README.md +70 -53
  168. package/template/app-manifest.json +2 -4
  169. package/template/configuration.json +10 -10
  170. package/template/default-styling.css +1 -1
  171. package/template/index.html +18 -20
  172. package/template/main.js +24 -22
  173. package/template/src/DemoPage.vue +415 -362
  174. package/template/src/Plugin.vue +76 -85
  175. package/template/src/stores/index.js +3 -3
  176. package/template/src/stores/test-data.json +164 -172
  177. package/template/theme-layouts/AdditionalStyling.css +50 -50
  178. package/template/theme-layouts/PrivateLayout.vue +8 -12
  179. package/template/theme-layouts/PublicLayout.vue +8 -12
  180. package/template/theme-layouts/SystemLayout.vue +8 -12
  181. package/template/vite.extend.js +45 -0
  182. package/template/vite.config.js +0 -409
@@ -1,147 +1,238 @@
1
- <!DOCTYPE html>
1
+ <!doctype html>
2
2
  <html>
3
- <head>
4
- <title>Test URL Masking vs Redirection</title>
5
- <style>
6
- body { font-family: Arial, sans-serif; padding: 20px; max-width: 800px; }
7
- .mode-section { margin: 20px 0; padding: 20px; border: 2px solid #ddd; border-radius: 8px; }
8
- .redirect-mode { border-color: #dc3545; background: #fff5f5; }
9
- .masking-mode { border-color: #28a745; background: #f8fff8; }
10
- .test-buttons { margin: 15px 0; }
11
- button { padding: 10px 15px; margin: 5px; cursor: pointer; }
12
- .redirect-btn { background: #dc3545; color: white; border: none; border-radius: 4px; }
13
- .masking-btn { background: #28a745; color: white; border: none; border-radius: 4px; }
14
- .results { background: #f5f5f5; padding: 10px; margin: 10px 0; border-radius: 4px; }
15
- .code { background: #e9ecef; padding: 8px; font-family: monospace; margin: 8px 0; }
16
- </style>
17
- </head>
18
- <body>
19
- <h1>URL Masking vs Redirection Test</h1>
20
-
21
- <div class="mode-section redirect-mode">
22
- <h2>๐Ÿ”ด Redirect Mode (Traditional)</h2>
23
- <p><strong>How it works:</strong> Browser URL bar changes to show the new destination</p>
24
- <div class="code">
25
- Original URL: https://api.example.com/data<br>
26
- Browser shows: https://api.alternative.com/data
27
- </div>
28
- <p><strong>Use case:</strong> When you want users to see they're being redirected</p>
29
-
30
- <div class="test-buttons">
31
- <button class="redirect-btn" onclick="testRedirect()">Test Redirect Mode</button>
32
- </div>
33
- <div id="redirectResults" class="results"></div>
34
- </div>
3
+ <head>
4
+ <title>Test URL Masking vs Redirection</title>
5
+ <style>
6
+ body {
7
+ font-family: Arial, sans-serif;
8
+ padding: 20px;
9
+ max-width: 800px;
10
+ }
11
+ .mode-section {
12
+ margin: 20px 0;
13
+ padding: 20px;
14
+ border: 2px solid #ddd;
15
+ border-radius: 8px;
16
+ }
17
+ .redirect-mode {
18
+ border-color: #dc3545;
19
+ background: #fff5f5;
20
+ }
21
+ .masking-mode {
22
+ border-color: #28a745;
23
+ background: #f8fff8;
24
+ }
25
+ .test-buttons {
26
+ margin: 15px 0;
27
+ }
28
+ button {
29
+ padding: 10px 15px;
30
+ margin: 5px;
31
+ cursor: pointer;
32
+ }
33
+ .redirect-btn {
34
+ background: #dc3545;
35
+ color: white;
36
+ border: none;
37
+ border-radius: 4px;
38
+ }
39
+ .masking-btn {
40
+ background: #28a745;
41
+ color: white;
42
+ border: none;
43
+ border-radius: 4px;
44
+ }
45
+ .results {
46
+ background: #f5f5f5;
47
+ padding: 10px;
48
+ margin: 10px 0;
49
+ border-radius: 4px;
50
+ }
51
+ .code {
52
+ background: #e9ecef;
53
+ padding: 8px;
54
+ font-family: monospace;
55
+ margin: 8px 0;
56
+ }
57
+ </style>
58
+ </head>
59
+ <body>
60
+ <h1>URL Masking vs Redirection Test</h1>
35
61
 
36
- <div class="mode-section masking-mode">
37
- <h2>๐ŸŸข Masking Mode (Transparent Proxy)</h2>
38
- <p><strong>How it works:</strong> Browser URL bar shows original URL, but request goes to proxy server</p>
39
- <div class="code">
40
- Original URL: https://api.example.com/data<br>
41
- Browser shows: https://api.example.com/data<br>
42
- Actual request goes to: https://api.alternative.com/data<br>
43
- Headers include: X-Proxy-Original-Host: api.example.com
44
- </div>
45
- <p><strong>Use case:</strong> Transparent proxying without changing visible URLs</p>
46
-
47
- <div class="test-buttons">
48
- <button class="masking-btn" onclick="testMasking()">Test Masking Mode</button>
49
- </div>
50
- <div id="maskingResults" class="results"></div>
51
- </div>
62
+ <div class="mode-section redirect-mode">
63
+ <h2>๐Ÿ”ด Redirect Mode (Traditional)</h2>
64
+ <p>
65
+ <strong>How it works:</strong> Browser URL bar changes to show the new
66
+ destination
67
+ </p>
68
+ <div class="code">
69
+ Original URL: https://api.example.com/data<br />
70
+ Browser shows: https://api.alternative.com/data
71
+ </div>
72
+ <p>
73
+ <strong>Use case:</strong> When you want users to see they're being
74
+ redirected
75
+ </p>
52
76
 
53
- <div class="mode-section">
54
- <h2>๐Ÿ“‹ Setup Instructions</h2>
55
- <ol>
56
- <li><strong>For Redirect Mode:</strong>
57
- <ul>
58
- <li>Add rule: Pattern <code>httpbin\.org</code> โ†’ Redirect <code>postman-echo.com</code></li>
59
- <li>Leave "Mask URL" checkbox unchecked</li>
60
- <li>Leave "URL Masking Mode" unchecked</li>
61
- </ul>
62
- </li>
63
- <li><strong>For Masking Mode:</strong>
64
- <ul>
65
- <li>Add rule: Pattern <code>httpbin\.org</code> โ†’ Redirect <code>postman-echo.com</code></li>
66
- <li>Check "Mask URL" checkbox for the rule, OR</li>
67
- <li>Check "URL Masking Mode" for global masking</li>
68
- </ul>
69
- </li>
70
- </ol>
71
-
72
- <h3>๐Ÿ”ง Server Requirements for Masking</h3>
73
- <p>Your proxy server needs to:</p>
74
- <ul>
75
- <li>Accept the original Host header</li>
76
- <li>Read <code>X-Proxy-Original-Host</code> and <code>X-Proxy-Original-URL</code> headers</li>
77
- <li>Route requests based on these headers</li>
78
- <li>Return appropriate CORS headers if needed</li>
79
- </ul>
80
- </div>
77
+ <div class="test-buttons">
78
+ <button class="redirect-btn" onclick="testRedirect()">
79
+ Test Redirect Mode
80
+ </button>
81
+ </div>
82
+ <div id="redirectResults" class="results"></div>
83
+ </div>
81
84
 
82
- <script>
83
- function log(elementId, message) {
84
- const element = document.getElementById(elementId);
85
- const timestamp = new Date().toLocaleTimeString();
86
- element.innerHTML += `<div>${timestamp}: ${message}</div>`;
87
- }
85
+ <div class="mode-section masking-mode">
86
+ <h2>๐ŸŸข Masking Mode (Transparent Proxy)</h2>
87
+ <p>
88
+ <strong>How it works:</strong> Browser URL bar shows original URL, but
89
+ request goes to proxy server
90
+ </p>
91
+ <div class="code">
92
+ Original URL: https://api.example.com/data<br />
93
+ Browser shows: https://api.example.com/data<br />
94
+ Actual request goes to: https://api.alternative.com/data<br />
95
+ Headers include: X-Proxy-Original-Host: api.example.com
96
+ </div>
97
+ <p>
98
+ <strong>Use case:</strong> Transparent proxying without changing visible
99
+ URLs
100
+ </p>
88
101
 
89
- async function testRedirect() {
90
- const results = document.getElementById('redirectResults');
91
- results.innerHTML = '';
92
-
93
- log('redirectResults', '๐Ÿงช Testing redirect mode...');
94
- log('redirectResults', '๐Ÿ“ Make sure extension is in REDIRECT mode (Mask URL unchecked)');
95
-
96
- try {
97
- const response = await fetch('https://httpbin.org/get?test=redirect');
98
- const data = await response.json();
99
- log('redirectResults', `โœ… Request successful to: ${data.url}`);
100
- log('redirectResults', `๐Ÿ“ Check browser URL bar - should show redirected domain`);
101
- } catch (error) {
102
- log('redirectResults', `โŒ Request failed: ${error.message}`);
103
- }
104
- }
102
+ <div class="test-buttons">
103
+ <button class="masking-btn" onclick="testMasking()">
104
+ Test Masking Mode
105
+ </button>
106
+ </div>
107
+ <div id="maskingResults" class="results"></div>
108
+ </div>
105
109
 
106
- async function testMasking() {
107
- const results = document.getElementById('maskingResults');
108
- results.innerHTML = '';
109
-
110
- log('maskingResults', '๐Ÿงช Testing masking mode...');
111
- log('maskingResults', '๐Ÿ“ Make sure extension is in MASKING mode (Mask URL checked)');
112
-
113
- try {
114
- const response = await fetch('https://httpbin.org/get?test=masking');
115
- const data = await response.json();
116
- log('maskingResults', `โœ… Request successful`);
117
- log('maskingResults', `๐Ÿ“ Check browser URL bar - should show original domain`);
118
- log('maskingResults', `๐Ÿ” Check Network tab for actual destination`);
119
-
120
- // Check if proxy headers were included
121
- if (data.headers && data.headers['X-Proxy-Original-Host']) {
122
- log('maskingResults', `โœ… Proxy headers detected: ${data.headers['X-Proxy-Original-Host']}`);
123
- } else {
124
- log('maskingResults', `โš ๏ธ No proxy headers detected - check masking configuration`);
125
- }
126
- } catch (error) {
127
- log('maskingResults', `โŒ Request failed: ${error.message}`);
128
- log('maskingResults', `๐Ÿ’ก This might be expected if proxy server doesn't support masking`);
129
- }
130
- }
110
+ <div class="mode-section">
111
+ <h2>๐Ÿ“‹ Setup Instructions</h2>
112
+ <ol>
113
+ <li>
114
+ <strong>For Redirect Mode:</strong>
115
+ <ul>
116
+ <li>
117
+ Add rule: Pattern <code>httpbin\.org</code> โ†’ Redirect
118
+ <code>postman-echo.com</code>
119
+ </li>
120
+ <li>Leave "Mask URL" checkbox unchecked</li>
121
+ <li>Leave "URL Masking Mode" unchecked</li>
122
+ </ul>
123
+ </li>
124
+ <li>
125
+ <strong>For Masking Mode:</strong>
126
+ <ul>
127
+ <li>
128
+ Add rule: Pattern <code>httpbin\.org</code> โ†’ Redirect
129
+ <code>postman-echo.com</code>
130
+ </li>
131
+ <li>Check "Mask URL" checkbox for the rule, OR</li>
132
+ <li>Check "URL Masking Mode" for global masking</li>
133
+ </ul>
134
+ </li>
135
+ </ol>
131
136
 
132
- // Auto-check extension status
133
- window.addEventListener('load', async function() {
134
- try {
135
- if (typeof browser !== 'undefined') {
136
- const state = await browser.runtime.sendMessage({ action: 'getState' });
137
- console.log('Extension state:', state);
138
- } else {
139
- console.log('Extension not detected');
140
- }
141
- } catch (error) {
142
- console.log('Extension communication failed:', error);
143
- }
144
- });
145
- </script>
146
- </body>
147
- </html>
137
+ <h3>๐Ÿ”ง Server Requirements for Masking</h3>
138
+ <p>Your proxy server needs to:</p>
139
+ <ul>
140
+ <li>Accept the original Host header</li>
141
+ <li>
142
+ Read <code>X-Proxy-Original-Host</code> and
143
+ <code>X-Proxy-Original-URL</code> headers
144
+ </li>
145
+ <li>Route requests based on these headers</li>
146
+ <li>Return appropriate CORS headers if needed</li>
147
+ </ul>
148
+ </div>
149
+
150
+ <script>
151
+ function log(elementId, message) {
152
+ const element = document.getElementById(elementId)
153
+ const timestamp = new Date().toLocaleTimeString()
154
+ element.innerHTML += `<div>${timestamp}: ${message}</div>`
155
+ }
156
+
157
+ async function testRedirect() {
158
+ const results = document.getElementById("redirectResults")
159
+ results.innerHTML = ""
160
+
161
+ log("redirectResults", "๐Ÿงช Testing redirect mode...")
162
+ log(
163
+ "redirectResults",
164
+ "๐Ÿ“ Make sure extension is in REDIRECT mode (Mask URL unchecked)",
165
+ )
166
+
167
+ try {
168
+ const response = await fetch("https://httpbin.org/get?test=redirect")
169
+ const data = await response.json()
170
+ log("redirectResults", `โœ… Request successful to: ${data.url}`)
171
+ log(
172
+ "redirectResults",
173
+ `๐Ÿ“ Check browser URL bar - should show redirected domain`,
174
+ )
175
+ } catch (error) {
176
+ log("redirectResults", `โŒ Request failed: ${error.message}`)
177
+ }
178
+ }
179
+
180
+ async function testMasking() {
181
+ const results = document.getElementById("maskingResults")
182
+ results.innerHTML = ""
183
+
184
+ log("maskingResults", "๐Ÿงช Testing masking mode...")
185
+ log(
186
+ "maskingResults",
187
+ "๐Ÿ“ Make sure extension is in MASKING mode (Mask URL checked)",
188
+ )
189
+
190
+ try {
191
+ const response = await fetch("https://httpbin.org/get?test=masking")
192
+ const data = await response.json()
193
+ log("maskingResults", `โœ… Request successful`)
194
+ log(
195
+ "maskingResults",
196
+ `๐Ÿ“ Check browser URL bar - should show original domain`,
197
+ )
198
+ log("maskingResults", `๐Ÿ” Check Network tab for actual destination`)
199
+
200
+ // Check if proxy headers were included
201
+ if (data.headers && data.headers["X-Proxy-Original-Host"]) {
202
+ log(
203
+ "maskingResults",
204
+ `โœ… Proxy headers detected: ${data.headers["X-Proxy-Original-Host"]}`,
205
+ )
206
+ } else {
207
+ log(
208
+ "maskingResults",
209
+ `โš ๏ธ No proxy headers detected - check masking configuration`,
210
+ )
211
+ }
212
+ } catch (error) {
213
+ log("maskingResults", `โŒ Request failed: ${error.message}`)
214
+ log(
215
+ "maskingResults",
216
+ `๐Ÿ’ก This might be expected if proxy server doesn't support masking`,
217
+ )
218
+ }
219
+ }
220
+
221
+ // Auto-check extension status
222
+ window.addEventListener("load", async function () {
223
+ try {
224
+ if (typeof browser !== "undefined") {
225
+ const state = await browser.runtime.sendMessage({
226
+ action: "getState",
227
+ })
228
+ console.log("Extension state:", state)
229
+ } else {
230
+ console.log("Extension not detected")
231
+ }
232
+ } catch (error) {
233
+ console.log("Extension communication failed:", error)
234
+ }
235
+ })
236
+ </script>
237
+ </body>
238
+ </html>