browser-extension-capabilities
Version:
Zero-dependency library for analyzing browser extension capabilities from manifest files
115 lines (114 loc) • 5.13 kB
JavaScript
;
var __webpack_require__ = {};
(()=>{
__webpack_require__.d = (exports1, definition)=>{
for(var key in definition)if (__webpack_require__.o(definition, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
enumerable: true,
get: definition[key]
});
};
})();
(()=>{
__webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
})();
(()=>{
__webpack_require__.r = (exports1)=>{
if ('undefined' != typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
value: 'Module'
});
Object.defineProperty(exports1, '__esModule', {
value: true
});
};
})();
var __webpack_exports__ = {};
__webpack_require__.r(__webpack_exports__);
__webpack_require__.d(__webpack_exports__, {
getExtensionCapabilities: ()=>getExtensionCapabilities
});
const external_fs_namespaceObject = require("fs");
function getExtensionCapabilities(manifestPath) {
try {
if (!external_fs_namespaceObject.existsSync(manifestPath)) {
console.warn(`Manifest file not found at: ${manifestPath}`);
return [
{
capability: 'manifest',
description: 'Basic extension manifest configuration'
}
];
}
const manifestContent = external_fs_namespaceObject.readFileSync(manifestPath, 'utf8');
const manifest = JSON.parse(manifestContent);
const capabilityMap = new Map();
if (manifest.background) {
if (manifest.background.page || manifest.background.scripts?.length || manifest.background.service_worker || manifest.background['chromium:service_worker'] || manifest.background["gecko:scripts"]?.length) capabilityMap.set('background', {
capability: 'background',
description: 'Background service worker or page for persistent functionality'
});
}
if (manifest.content_scripts && manifest.content_scripts.length > 0) capabilityMap.set("content_scripts", {
capability: "content_scripts",
description: "Content scripts that run on web pages to interact with page content"
});
if (manifest.action?.default_popup) capabilityMap.set('popup', {
capability: 'popup',
description: 'Browser action popup or toolbar button functionality'
});
if (manifest.side_panel?.default_path || manifest.sidebar_action?.default_panel) capabilityMap.set('sidebar', {
capability: 'sidebar',
description: 'Side panel interface for additional extension features'
});
if (manifest.devtools_page) capabilityMap.set('devtools', {
capability: 'devtools',
description: 'Developer tools panel for debugging and development'
});
if (manifest.options_ui?.page) capabilityMap.set('options', {
capability: 'options',
description: 'Extension options page for user configuration'
});
if (manifest.chrome_url_overrides) {
if (manifest.chrome_url_overrides.newtab) capabilityMap.set('newtab', {
capability: 'newtab',
description: 'Custom new tab page replacement'
});
if (manifest.chrome_url_overrides.bookmarks) capabilityMap.set('bookmarks', {
capability: 'bookmarks',
description: 'Custom bookmarks page replacement'
});
if (manifest.chrome_url_overrides.history) capabilityMap.set('history', {
capability: 'history',
description: 'Custom history page replacement'
});
}
if (manifest.sandbox?.pages && manifest.sandbox.pages.length > 0) capabilityMap.set('sandbox', {
capability: 'sandbox',
description: 'Sandboxed pages with restricted permissions for security'
});
if (manifest.web_accessible_resources && manifest.web_accessible_resources.length > 0) capabilityMap.set('web_resources', {
capability: 'web_resources',
description: "Web accessible resources for content script communication"
});
return capabilityMap.size > 0 ? Array.from(capabilityMap.values()) : [
{
capability: 'manifest',
description: 'Basic extension manifest configuration'
}
];
} catch (error) {
console.error('Error analyzing extension manifest:', error);
return [
{
capability: 'manifest',
description: 'Basic extension manifest configuration'
}
];
}
}
exports.getExtensionCapabilities = __webpack_exports__.getExtensionCapabilities;
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
"getExtensionCapabilities"
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
Object.defineProperty(exports, '__esModule', {
value: true
});