Files
CyberStrikeAI/plugins/browser-extension/cyberstrikeai-browser-extension/devtools.js
T
2026-07-08 13:51:05 +08:00

70 lines
2.0 KiB
JavaScript

/* global chrome, summarizeHarEntry, inferResourceType, mightCaptureRequest */
const FILTER_STORAGE_KEY = 'csai_filter_api_only';
const CAPTURE_ENABLED_KEY = 'csai_capture_enabled';
/** In-memory flags — avoids storage read on every network request. */
let filterApiOnly = true;
let captureEnabled = true;
function syncFromStorage(data) {
filterApiOnly = (data && data[FILTER_STORAGE_KEY]) !== false;
captureEnabled = (data && data[CAPTURE_ENABLED_KEY]) !== false;
}
chrome.storage.local.get([FILTER_STORAGE_KEY, CAPTURE_ENABLED_KEY], (data) => {
syncFromStorage(data);
});
chrome.storage.onChanged.addListener((changes, area) => {
if (area !== 'local') return;
if (changes[FILTER_STORAGE_KEY]) {
filterApiOnly = changes[FILTER_STORAGE_KEY].newValue !== false;
}
if (changes[CAPTURE_ENABLED_KEY]) {
captureEnabled = changes[CAPTURE_ENABLED_KEY].newValue !== false;
}
});
chrome.runtime.onMessage.addListener((msg) => {
if (!msg || !msg.type) return;
if (msg.type === 'set-filter-api' && typeof msg.filterApiOnly === 'boolean') {
filterApiOnly = msg.filterApiOnly;
}
if (msg.type === 'set-capture-enabled' && typeof msg.enabled === 'boolean') {
captureEnabled = msg.enabled;
}
});
chrome.devtools.network.onRequestFinished.addListener((request) => {
if (!captureEnabled) return;
const tabId = chrome.devtools.inspectedWindow.tabId;
const req = request.request || {};
const res = request.response || {};
const url = req.url || '';
const resourceType =
(request._resourceType || request.resourceType || inferResourceType(url, res.headers) || 'other')
.toLowerCase();
if (!mightCaptureRequest(url, resourceType, filterApiOnly)) {
return;
}
request.getContent((body) => {
const entry = summarizeHarEntry(request, body, resourceType);
chrome.runtime.sendMessage({
type: 'capture-entry',
tabId,
entry,
});
});
});
chrome.devtools.panels.create(
'CyberStrikeAI',
'icons/icon48.png',
'panel/panel.html',
() => {}
);