test-localstorage.jsโข7.08 kB
#!/usr/bin/env node
/**
* Test localStorage access in Composer
*/
import { chromium } from 'playwright';
import { readFileSync } from 'fs';
import { resolve, dirname } from 'path';
import { fileURLToPath } from 'url';
const currentDir = dirname(fileURLToPath(import.meta.url));
const tokenPath = resolve(currentDir, 'correct-jwt-new.txt');
const jwtToken = readFileSync(tokenPath, 'utf8').trim();
async function testLocalStorage() {
console.log('๐๏ธ Testing localStorage Access in Composer\n');
const baseURL = "https://composer.euconquisto.com/#/embed";
const orgId = "36c92686-c494-ec11-a22a-dc984041c95d";
const embedURL = `${baseURL}/auth-with-token/pt_br/home/${orgId}/${jwtToken}`;
let browser;
try {
console.log('๐ Launching browser...');
browser = await chromium.launch({
headless: false,
args: ['--disable-web-security', '--disable-features=VizDisplayCompositor']
});
const context = await browser.newContext({
viewport: { width: 1280, height: 720 }
});
const page = await context.newPage();
console.log('๐ก Navigating to Composer...');
await page.goto(embedURL, {
waitUntil: 'networkidle',
timeout: 60000
});
console.log('โ
Page loaded\n');
// Wait for content to load
await page.waitForTimeout(5000);
// Get all localStorage data
console.log('๐ฆ Reading localStorage contents:');
const localStorageData = await page.evaluate(() => {
const data = {};
for (let i = 0; i < localStorage.length; i++) {
const key = localStorage.key(i);
try {
const value = localStorage.getItem(key);
// Try to parse JSON values
try {
data[key] = JSON.parse(value);
} catch {
data[key] = value;
}
} catch (e) {
data[key] = `<Error reading: ${e.message}>`;
}
}
return data;
});
// Display localStorage contents
const keys = Object.keys(localStorageData);
console.log(`\n๐ Found ${keys.length} localStorage keys:\n`);
keys.forEach(key => {
const value = localStorageData[key];
console.log(`๐ Key: "${key}"`);
if (typeof value === 'object') {
console.log(` Value (JSON):`);
console.log(` ${JSON.stringify(value, null, 2).split('\n').join('\n ')}`);
} else if (typeof value === 'string' && value.length > 100) {
console.log(` Value (truncated): ${value.substring(0, 100)}...`);
console.log(` Length: ${value.length} characters`);
} else {
console.log(` Value: ${value}`);
}
console.log('');
});
// Check sessionStorage too
console.log('\n๐ฆ Reading sessionStorage contents:');
const sessionStorageData = await page.evaluate(() => {
const data = {};
for (let i = 0; i < sessionStorage.length; i++) {
const key = sessionStorage.key(i);
try {
const value = sessionStorage.getItem(key);
try {
data[key] = JSON.parse(value);
} catch {
data[key] = value;
}
} catch (e) {
data[key] = `<Error reading: ${e.message}>`;
}
}
return data;
});
const sessionKeys = Object.keys(sessionStorageData);
console.log(`\n๐ Found ${sessionKeys.length} sessionStorage keys:\n`);
sessionKeys.forEach(key => {
const value = sessionStorageData[key];
console.log(`๐ Key: "${key}"`);
if (typeof value === 'object') {
console.log(` Value (JSON):`);
console.log(` ${JSON.stringify(value, null, 2).split('\n').join('\n ')}`);
} else if (typeof value === 'string' && value.length > 100) {
console.log(` Value (truncated): ${value.substring(0, 100)}...`);
console.log(` Length: ${value.length} characters`);
} else {
console.log(` Value: ${value}`);
}
console.log('');
});
// Look for composition-related keys
console.log('\n๐ Analyzing for composition-related storage:');
const compositionKeys = [...keys, ...sessionKeys].filter(key =>
key.toLowerCase().includes('compos') ||
key.toLowerCase().includes('content') ||
key.toLowerCase().includes('widget') ||
key.toLowerCase().includes('rdp')
);
if (compositionKeys.length > 0) {
console.log(`Found ${compositionKeys.length} potentially composition-related keys:`);
compositionKeys.forEach(key => console.log(` - ${key}`));
} else {
console.log('No obvious composition-related keys found in storage');
}
// Test setting and getting localStorage
console.log('\n๐งช Testing localStorage write access:');
const testResult = await page.evaluate(() => {
try {
const testKey = 'mcp-test-key';
const testValue = { test: true, timestamp: new Date().toISOString() };
localStorage.setItem(testKey, JSON.stringify(testValue));
const retrieved = localStorage.getItem(testKey);
localStorage.removeItem(testKey);
return { success: true, retrieved };
} catch (e) {
return { success: false, error: e.message };
}
});
if (testResult.success) {
console.log('โ
localStorage write/read access confirmed');
} else {
console.log('โ localStorage access error:', testResult.error);
}
console.log('\n๐ก Summary:');
console.log(' - Can read localStorage: โ
');
console.log(' - Can write localStorage: ' + (testResult.success ? 'โ
' : 'โ'));
console.log(' - Total localStorage keys: ' + keys.length);
console.log(' - Total sessionStorage keys: ' + sessionKeys.length);
// Keep browser open for 10 seconds to review
console.log('\nโณ Browser will close in 10 seconds...');
await page.waitForTimeout(10000);
} catch (error) {
console.error('โ Error:', error.message);
} finally {
if (browser) {
await browser.close();
}
}
}
testLocalStorage().catch(console.error);