mirror of
https://github.com/Ed1s0nZ/CyberStrikeAI.git
synced 2026-07-10 22:33:48 +02:00
70 lines
2.0 KiB
JavaScript
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',
|
|
() => {}
|
|
);
|