UNPKG

browser-extension-capabilities

Version:

Zero-dependency library for analyzing browser extension capabilities from manifest files

115 lines (114 loc) 5.13 kB
"use strict"; 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 });