Major refactor: Multi-user Chrome MCP extension with remote server architecture
This commit is contained in:
147
app/chrome-extension/inject-scripts/user-id-helper.js
Normal file
147
app/chrome-extension/inject-scripts/user-id-helper.js
Normal file
@@ -0,0 +1,147 @@
|
||||
/**
|
||||
* Chrome Extension User ID Helper
|
||||
* This script provides easy access to the Chrome extension user ID in any web page
|
||||
*/
|
||||
|
||||
(function() {
|
||||
'use strict';
|
||||
|
||||
// Namespace for Chrome extension user ID functionality
|
||||
window.ChromeExtensionUserID = {
|
||||
// Current user ID (will be populated when available)
|
||||
userId: null,
|
||||
|
||||
// Callbacks to execute when user ID becomes available
|
||||
callbacks: [],
|
||||
|
||||
/**
|
||||
* Get the current user ID
|
||||
* @returns {Promise<string|null>} The user ID or null if not available
|
||||
*/
|
||||
async getUserId() {
|
||||
// If already available, return immediately
|
||||
if (this.userId) {
|
||||
return this.userId;
|
||||
}
|
||||
|
||||
// Try to get from sessionStorage first
|
||||
try {
|
||||
const storedUserId = sessionStorage.getItem('chromeExtensionUserId');
|
||||
if (storedUserId) {
|
||||
this.userId = storedUserId;
|
||||
return storedUserId;
|
||||
}
|
||||
} catch (e) {
|
||||
// Ignore storage errors
|
||||
}
|
||||
|
||||
// Try to get from global window variable
|
||||
if (window.chromeExtensionUserId) {
|
||||
this.userId = window.chromeExtensionUserId;
|
||||
return this.userId;
|
||||
}
|
||||
|
||||
// Request from content script
|
||||
return new Promise((resolve) => {
|
||||
// Set up listener for the custom event
|
||||
const listener = (event) => {
|
||||
if (event.detail && event.detail.userId) {
|
||||
this.userId = event.detail.userId;
|
||||
window.removeEventListener('chromeExtensionUserIdReady', listener);
|
||||
resolve(this.userId);
|
||||
}
|
||||
};
|
||||
|
||||
window.addEventListener('chromeExtensionUserIdReady', listener);
|
||||
|
||||
// Also check if it's already available
|
||||
setTimeout(() => {
|
||||
if (window.chromeExtensionUserId) {
|
||||
this.userId = window.chromeExtensionUserId;
|
||||
window.removeEventListener('chromeExtensionUserIdReady', listener);
|
||||
resolve(this.userId);
|
||||
} else {
|
||||
// Timeout after 5 seconds
|
||||
setTimeout(() => {
|
||||
window.removeEventListener('chromeExtensionUserIdReady', listener);
|
||||
resolve(null);
|
||||
}, 5000);
|
||||
}
|
||||
}, 100);
|
||||
});
|
||||
},
|
||||
|
||||
/**
|
||||
* Execute callback when user ID becomes available
|
||||
* @param {Function} callback - Function to execute with user ID
|
||||
*/
|
||||
onUserIdReady(callback) {
|
||||
if (this.userId) {
|
||||
// Execute immediately if already available
|
||||
callback(this.userId);
|
||||
} else {
|
||||
// Store callback for later execution
|
||||
this.callbacks.push(callback);
|
||||
|
||||
// Try to get user ID
|
||||
this.getUserId().then((userId) => {
|
||||
if (userId) {
|
||||
// Execute all pending callbacks
|
||||
this.callbacks.forEach(cb => cb(userId));
|
||||
this.callbacks = [];
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Check if user ID is available
|
||||
* @returns {boolean} True if user ID is available
|
||||
*/
|
||||
isAvailable() {
|
||||
return this.userId !== null;
|
||||
},
|
||||
|
||||
/**
|
||||
* Get user ID synchronously (only if already loaded)
|
||||
* @returns {string|null} The user ID or null if not loaded
|
||||
*/
|
||||
getUserIdSync() {
|
||||
return this.userId || window.chromeExtensionUserId || null;
|
||||
}
|
||||
};
|
||||
|
||||
// Auto-initialize when script loads
|
||||
window.ChromeExtensionUserID.getUserId().then((userId) => {
|
||||
if (userId) {
|
||||
console.log('Chrome Extension User ID Helper: User ID loaded:', userId);
|
||||
} else {
|
||||
console.log('Chrome Extension User ID Helper: No user ID available');
|
||||
}
|
||||
});
|
||||
|
||||
// Listen for the custom event in case it comes later
|
||||
window.addEventListener('chromeExtensionUserIdReady', (event) => {
|
||||
if (event.detail && event.detail.userId) {
|
||||
window.ChromeExtensionUserID.userId = event.detail.userId;
|
||||
console.log('Chrome Extension User ID Helper: User ID received via event:', event.detail.userId);
|
||||
|
||||
// Execute any pending callbacks
|
||||
window.ChromeExtensionUserID.callbacks.forEach(callback => callback(event.detail.userId));
|
||||
window.ChromeExtensionUserID.callbacks = [];
|
||||
}
|
||||
});
|
||||
|
||||
})();
|
||||
|
||||
// Also provide a simple global function for easy access
|
||||
window.getChromeExtensionUserId = function() {
|
||||
return window.ChromeExtensionUserID.getUserId();
|
||||
};
|
||||
|
||||
// Provide a synchronous version
|
||||
window.getChromeExtensionUserIdSync = function() {
|
||||
return window.ChromeExtensionUserID.getUserIdSync();
|
||||
};
|
||||
|
||||
console.log('Chrome Extension User ID Helper loaded. Use window.getChromeExtensionUserId() or window.ChromeExtensionUserID.getUserId()');
|
Reference in New Issue
Block a user