@dynamicu/chromedebug-mcp 2.3.0 ā 2.4.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/README.md +50 -0
- package/chrome-extension/activation-manager.html +208 -0
- package/chrome-extension/activation-manager.js +187 -0
- package/chrome-extension/background.js +5 -5
- package/chrome-extension/firebase-client.js +135 -1
- package/chrome-extension/popup.js +68 -2
- package/dist/chromedebug-extension-free.zip +0 -0
- package/package.json +1 -1
- package/scripts/postinstall.js +13 -4
- package/scripts/webpack.config.free.cjs +3 -0
- package/scripts/webpack.config.pro.cjs +3 -0
- package/src/chrome-controller.js +107 -106
- package/src/config-loader.js +18 -17
- package/src/database.js +81 -80
- package/src/index.js +35 -24
- package/src/middleware/auth.js +30 -29
- package/src/port-discovery.js +7 -6
- package/src/services/failover-manager.js +19 -18
- package/src/services/project-manager.js +16 -15
- package/src/utils/logger.js +63 -0
|
@@ -880,6 +880,8 @@ async function handleLicenseActivation() {
|
|
|
880
880
|
|
|
881
881
|
const result = await licenseClient.validateLicense(licenseKey);
|
|
882
882
|
console.log('[License] Validation result:', result);
|
|
883
|
+
console.log('[License] Error value:', result.error);
|
|
884
|
+
console.log('[License] Error type:', typeof result.error);
|
|
883
885
|
|
|
884
886
|
if (result.valid) {
|
|
885
887
|
messageDiv.textContent = 'License activated successfully!';
|
|
@@ -887,8 +889,54 @@ async function handleLicenseActivation() {
|
|
|
887
889
|
document.getElementById('license-key-input').value = '';
|
|
888
890
|
await initializeLicenseUI(); // Refresh UI
|
|
889
891
|
} else {
|
|
890
|
-
|
|
891
|
-
|
|
892
|
+
// Check if activation limit reached
|
|
893
|
+
console.log('[License] Checking if activation limit reached...');
|
|
894
|
+
console.log('[License] result.error === "ACTIVATION_LIMIT_REACHED":', result.error === 'ACTIVATION_LIMIT_REACHED');
|
|
895
|
+
console.log('[License] result.error includes "activation limit":', result.error && result.error.toLowerCase().includes('activation limit'));
|
|
896
|
+
|
|
897
|
+
if (result.error === 'ACTIVATION_LIMIT_REACHED' ||
|
|
898
|
+
(result.error && result.error.toLowerCase().includes('activation limit'))) {
|
|
899
|
+
console.log('[License] Activation limit reached, opening activation manager');
|
|
900
|
+
messageDiv.textContent = 'Opening activation manager...';
|
|
901
|
+
messageDiv.style.color = '#ff9800';
|
|
902
|
+
|
|
903
|
+
// Store the license key temporarily so activation manager can access it
|
|
904
|
+
await chrome.storage.local.set({
|
|
905
|
+
'ls_license_key': licenseKey.trim(),
|
|
906
|
+
'activation_manager_open': true
|
|
907
|
+
});
|
|
908
|
+
|
|
909
|
+
// Open activation manager in a new window
|
|
910
|
+
const width = 500;
|
|
911
|
+
const height = 600;
|
|
912
|
+
const left = Math.round((screen.width - width) / 2);
|
|
913
|
+
const top = Math.round((screen.height - height) / 2);
|
|
914
|
+
|
|
915
|
+
const activationManagerUrl = chrome.runtime.getURL('activation-manager.html');
|
|
916
|
+
console.log('[License] Opening activation manager at URL:', activationManagerUrl);
|
|
917
|
+
|
|
918
|
+
chrome.windows.create({
|
|
919
|
+
url: activationManagerUrl,
|
|
920
|
+
type: 'popup',
|
|
921
|
+
width: width,
|
|
922
|
+
height: height,
|
|
923
|
+
left: left,
|
|
924
|
+
top: top
|
|
925
|
+
}, (window) => {
|
|
926
|
+
if (chrome.runtime.lastError) {
|
|
927
|
+
console.error('[License] Failed to open activation manager:', chrome.runtime.lastError);
|
|
928
|
+
messageDiv.textContent = 'Error: Could not open activation manager. See console.';
|
|
929
|
+
messageDiv.style.color = '#f44336';
|
|
930
|
+
} else {
|
|
931
|
+
console.log('[License] Activation manager window created:', window);
|
|
932
|
+
messageDiv.textContent = 'Please deactivate an existing activation to continue';
|
|
933
|
+
messageDiv.style.color = '#ff9800';
|
|
934
|
+
}
|
|
935
|
+
});
|
|
936
|
+
} else {
|
|
937
|
+
messageDiv.textContent = result.error || 'Invalid license key';
|
|
938
|
+
messageDiv.style.color = '#f44336';
|
|
939
|
+
}
|
|
892
940
|
}
|
|
893
941
|
}
|
|
894
942
|
|
|
@@ -898,6 +946,24 @@ function handleUpgradeClick() {
|
|
|
898
946
|
chrome.tabs.create({url: LEMONSQUEEZY_CHECKOUT_URL});
|
|
899
947
|
}
|
|
900
948
|
|
|
949
|
+
// Listen for messages from activation manager
|
|
950
|
+
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
|
|
951
|
+
if (message.type === 'RETRY_ACTIVATION' && message.licenseKey) {
|
|
952
|
+
console.log('[License] Retrying activation after deactivation');
|
|
953
|
+
|
|
954
|
+
// Set the license key in the input
|
|
955
|
+
const licenseKeyInput = document.getElementById('license-key-input');
|
|
956
|
+
if (licenseKeyInput) {
|
|
957
|
+
licenseKeyInput.value = message.licenseKey;
|
|
958
|
+
}
|
|
959
|
+
|
|
960
|
+
// Retry activation
|
|
961
|
+
handleLicenseActivation().then(() => {
|
|
962
|
+
console.log('[License] Retry activation complete');
|
|
963
|
+
});
|
|
964
|
+
}
|
|
965
|
+
});
|
|
966
|
+
|
|
901
967
|
document.addEventListener('DOMContentLoaded', () => {
|
|
902
968
|
console.log('DOM loaded, initializing popup');
|
|
903
969
|
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dynamicu/chromedebug-mcp",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.4.0",
|
|
4
4
|
"description": "ChromeDebug MCP - MCP server that provides full control over a Chrome browser instance for debugging and automation with AI assistants like Claude Code",
|
|
5
5
|
"main": "src/index.js",
|
|
6
6
|
"type": "module",
|
package/scripts/postinstall.js
CHANGED
|
@@ -16,10 +16,15 @@ const extensionPath = join(packageRoot, 'chrome-extension');
|
|
|
16
16
|
|
|
17
17
|
console.log('\nā
ChromeDebug MCP installed successfully!\n');
|
|
18
18
|
|
|
19
|
+
console.log('š How ChromeDebug Works:');
|
|
20
|
+
console.log(' When Claude Code starts chromedebug-mcp, it automatically runs:');
|
|
21
|
+
console.log(' ⢠MCP Server (for Claude Code communication)');
|
|
22
|
+
console.log(' ⢠HTTP Server on port 3000-4000 (for Chrome extension)\n');
|
|
23
|
+
|
|
19
24
|
console.log('š FREE Chrome Extension (5 recordings/day):');
|
|
20
25
|
if (existsSync(zipPath)) {
|
|
21
|
-
console.log(`
|
|
22
|
-
console.log(' Extract and load in Chrome\n');
|
|
26
|
+
console.log(` Location: ${zipPath}`);
|
|
27
|
+
console.log(' Extract the zip file and load in Chrome\n');
|
|
23
28
|
} else {
|
|
24
29
|
console.log(` Source: ${extensionPath}`);
|
|
25
30
|
console.log(' Load directly from this path\n');
|
|
@@ -31,10 +36,14 @@ console.log(' 2. Enable "Developer mode" (toggle in top right)');
|
|
|
31
36
|
console.log(' 3. Click "Load unpacked"');
|
|
32
37
|
if (existsSync(zipPath)) {
|
|
33
38
|
console.log(' 4. Extract the zip file above');
|
|
34
|
-
console.log(' 5. Select the extracted folder
|
|
39
|
+
console.log(' 5. Select the extracted folder');
|
|
35
40
|
} else {
|
|
36
|
-
console.log(' 4. Navigate to and select the path above
|
|
41
|
+
console.log(' 4. Navigate to and select the path above');
|
|
37
42
|
}
|
|
43
|
+
console.log(' 6. The extension will auto-detect the HTTP server port\n');
|
|
44
|
+
|
|
45
|
+
console.log('ā¹ļø No manual server startup needed!');
|
|
46
|
+
console.log(' Claude Code automatically starts both servers when it runs chromedebug-mcp\n');
|
|
38
47
|
|
|
39
48
|
console.log('š Want unlimited recordings?');
|
|
40
49
|
console.log(' Upgrade to Pro: https://chromedebug.com/buy/996773cb-682b-430f-b9e3-9ce2130bd967\n');
|
|
@@ -37,6 +37,7 @@ module.exports = {
|
|
|
37
37
|
{ from: 'chrome-extension/popup.html', to: 'popup.html' },
|
|
38
38
|
{ from: 'chrome-extension/options.html', to: 'options.html' },
|
|
39
39
|
{ from: 'chrome-extension/offscreen.html', to: 'offscreen.html' },
|
|
40
|
+
{ from: 'chrome-extension/activation-manager.html', to: 'activation-manager.html' },
|
|
40
41
|
|
|
41
42
|
// Copy icons
|
|
42
43
|
{ from: 'chrome-extension/*.png', to: '[name][ext]' },
|
|
@@ -60,6 +61,8 @@ module.exports = {
|
|
|
60
61
|
{ from: 'chrome-extension/license-helper.js', to: 'license-helper.js' },
|
|
61
62
|
{ from: 'chrome-extension/firebase-client.js', to: 'firebase-client.js' },
|
|
62
63
|
{ from: 'chrome-extension/firebase-config.js', to: 'firebase-config.js' },
|
|
64
|
+
{ from: 'chrome-extension/firebase-config.module.js', to: 'firebase-config.module.js' },
|
|
65
|
+
{ from: 'chrome-extension/activation-manager.js', to: 'activation-manager.js' },
|
|
63
66
|
{ from: 'chrome-extension/frame-capture.js', to: 'frame-capture.js' },
|
|
64
67
|
{ from: 'chrome-extension/chrome-session-manager.js', to: 'chrome-session-manager.js' },
|
|
65
68
|
|
|
@@ -38,6 +38,7 @@ module.exports = {
|
|
|
38
38
|
{ from: 'chrome-extension/popup.html', to: 'popup.html' },
|
|
39
39
|
{ from: 'chrome-extension/options.html', to: 'options.html' },
|
|
40
40
|
{ from: 'chrome-extension/offscreen.html', to: 'offscreen.html' },
|
|
41
|
+
{ from: 'chrome-extension/activation-manager.html', to: 'activation-manager.html' },
|
|
41
42
|
{ from: 'chrome-extension/pro/frame-editor.html', to: 'pro/frame-editor.html' },
|
|
42
43
|
|
|
43
44
|
// Copy icons
|
|
@@ -62,6 +63,8 @@ module.exports = {
|
|
|
62
63
|
{ from: 'chrome-extension/license-helper.js', to: 'license-helper.js' },
|
|
63
64
|
{ from: 'chrome-extension/firebase-client.js', to: 'firebase-client.js' },
|
|
64
65
|
{ from: 'chrome-extension/firebase-config.js', to: 'firebase-config.js' },
|
|
66
|
+
{ from: 'chrome-extension/firebase-config.module.js', to: 'firebase-config.module.js' },
|
|
67
|
+
{ from: 'chrome-extension/activation-manager.js', to: 'activation-manager.js' },
|
|
65
68
|
{ from: 'chrome-extension/frame-capture.js', to: 'frame-capture.js' },
|
|
66
69
|
{ from: 'chrome-extension/chrome-session-manager.js', to: 'chrome-session-manager.js' },
|
|
67
70
|
|