fix(extension): restore AI Response Content capture by patching DOM extraction, CSP connect-src, and TS regex literal serialization
This commit is contained in:
66
test_dom.js
Normal file
66
test_dom.js
Normal file
@@ -0,0 +1,66 @@
|
||||
const fs = require('fs');
|
||||
const { JSDOM } = require("jsdom");
|
||||
|
||||
try {
|
||||
const observerModule = require("./extension/out/observer-script.js");
|
||||
|
||||
const dumpRaw = fs.readFileSync('C:\\Users\\Variet-Worker\\.gemini\\antigravity\\bridge\\dump_html.json', 'utf8');
|
||||
const parseData = JSON.parse(dumpRaw);
|
||||
let htmlStr = parseData.html;
|
||||
|
||||
// Inject fake port discovery node so it passes discoverPort()
|
||||
htmlStr += `<div aria-label="Gravity Bridge Control port:1234"></div>`;
|
||||
|
||||
const dom = new JSDOM(htmlStr, { url: "http://localhost/", runScripts: "dangerously" });
|
||||
const window = dom.window;
|
||||
const document = window.document;
|
||||
|
||||
let testResults = [];
|
||||
|
||||
// Mock fetch for the observer
|
||||
window.fetch = async (url, options) => {
|
||||
if (url.includes('/ping')) {
|
||||
return { text: async () => 'pong' };
|
||||
}
|
||||
if (url.includes('/pending') && options?.method === 'POST') {
|
||||
const body = JSON.parse(options.body);
|
||||
testResults.push("✅ POST /pending intercepted! Payload:");
|
||||
testResults.push(JSON.stringify(body, null, 2));
|
||||
return { json: async () => ({ok: true, request_id: body.request_id}) };
|
||||
}
|
||||
return { json: async () => ({}) };
|
||||
};
|
||||
|
||||
// Fallback overrides
|
||||
window.console.log = (m) => testResults.push(`[Script Log] ${m}`);
|
||||
window.MutationObserver = window.MutationObserver || class { observe(){} };
|
||||
window.AbortSignal = { timeout: () => ({}) };
|
||||
|
||||
let scriptStr = observerModule.generateApprovalObserverScript(1234);
|
||||
// Brutally bypass discoverPort block and force initialization
|
||||
scriptStr = scriptStr.replace(/discoverPort\(function\(port\)\{[\s\S]*?\}\);/, "BASE='http://127.0.0.1:1234';_ready=true;startObserver();");
|
||||
scriptStr = scriptStr.replace("function scan(){", "function scan(){ log('scan() STAGE 1'); log('buttons in DOM: ' + document.querySelectorAll('button').length);");
|
||||
scriptStr = scriptStr.replace("_obs=true;", "_obs=true; log('Forcing scan'); scan();");
|
||||
|
||||
// Run script inside JSDOM
|
||||
const scriptEl = document.createElement("script");
|
||||
scriptEl.textContent = scriptStr;
|
||||
document.body.appendChild(scriptEl);
|
||||
|
||||
// Wait 3 seconds for discoverPort -> ping -> startObserver -> scheduleScan to execute
|
||||
setTimeout(() => {
|
||||
console.log("=== TEST RESULTS ===");
|
||||
console.log(testResults.join("\n"));
|
||||
if (!testResults.some(l => l.includes('POST /pending intercepted'))) {
|
||||
console.error("❌ FAILED: No POST to /pending was made. The DOM scan failed to find the dummy button or extract context.");
|
||||
process.exit(1);
|
||||
} else {
|
||||
console.log("✅ SUCCESS: The DOM extraction is functioning properly.");
|
||||
process.exit(0);
|
||||
}
|
||||
}, 3000);
|
||||
|
||||
} catch (e) {
|
||||
console.error("Test Harness Error:", e);
|
||||
process.exit(1);
|
||||
}
|
||||
Reference in New Issue
Block a user