A Chrome Extension for IT admins who package applications for Intune, SCCM, and other deployment systems. Requires a local backend server that performs advanced multi-page documentation crawling to discover vendor-documented silent install commands, uninstall methods, and detection rules.
This extension CANNOT function without the backend server running locally.
- Without backend: Extension can only detect installer links on pages
- With backend: Full analysis including silent switches, uninstall commands, and detection rules
The backend performs all crawling and analysis to avoid CORS restrictions and provide reliable, vendor-documented packaging information.
β Latest Update (v1.0.2 - December 14, 2025):
- β ZIP Bundle Download: Download complete Intune package with all PowerShell scripts, detection rules, and instructions
- β Enhanced Download Capture: Improved capture mode with persistent storage - downloads saved even when popup closes
- β Smart Filename Extraction: Automatically extracts installer names from complex URLs (Google Chrome, Microsoft Edge, etc.)
- β Robust Error Handling: Enhanced service worker with detailed logging and proper message port handling
- β Backend Crash Protection: Backend no longer crashes on empty filenames or malformed URLs
- π§ Fixed: Service worker caching issues resolved with new versioning system
- π§ Fixed: Backend connection status now correctly reflects server state
# Navigate to googleshop backend folder
cd ChromeExtensions/googleshop/backend
# Install dependencies
npm install
# Start server DIRECTLY with node (not npm start!)
node server.jsBackend runs on: http://localhost:3001
Keep this terminal window open while using the extension.
-
Open Chrome Extensions:
- Navigate to
chrome://extensions/ - Enable "Developer mode" (top-right toggle)
- Navigate to
-
Load Extension:
- Click "Load unpacked"
- Select the
ChromeExtensions/googleshopfolder (NOT the parent folder!)
-
Verify Connection:
- Click extension icon
- You should see "π’ Backend: Connected" status in the header
- If you see "π΄ Backend: Disconnected", ensure backend is running:
node server.js
Method 1: Scan Page (for visible download links)
- Visit any software download page (e.g., VLC, 7-Zip, Firefox)
- Click extension icon
- Click "Scan Current Page" to detect installers
- Click "Package for Intune" on any installer
- Review packaging recommendations with install commands, detection rules, and scripts
- Click "π¦ Download Complete Package Bundle" to get ZIP with all scripts!
Method 2: Capture Download (for hidden/dynamic links)
- Visit download page (e.g., Google Chrome download)
- Click extension icon
- Click "π₯ Capture Download"
- Click download button on the page (popup will close - this is normal!)
- Reopen extension - captured installer appears in list automatically
- Click "Package for Intune" to generate packaging recommendations
- Download complete bundle with all scripts
- β Auto-detect installers - Scans pages for .exe, .msi, .msix files
- β Download capture mode - Captures dynamic/hidden download URLs with persistent storage
- β ZIP bundle generation - Download complete Intune package with all scripts and instructions
- β Backend status indicator - Real-time connection status in header
- β Loading states - Visual feedback during backend analysis
- β Packaging panel - Detailed recommendations with copy buttons for all commands
- β Light/Dark mode - Automatic system theme detection
- β Error handling - Clear messages when backend unavailable
- β Smart filename extraction - Handles complex URLs from Google, Microsoft, etc.
- β Intune packaging recommendations - Production-ready install commands, uninstall commands, and detection rules
- β Complete script generation - PowerShell wrapper scripts, detection scripts, and deployment guides
- β ZIP bundle creation - All files packaged and ready for Intune Win32 deployment
- β MSI ProductCode extraction - Automatic detection and uninstall command generation
- β EXE silent switch detection - Common patterns: /S, /SILENT, /VERYSILENT, /quiet, etc.
- β Detection rule generation - File-based and MSI-based detection methods
- β Vendor inference - Automatic detection of software vendor from filename
- β Architecture detection - x64/x86 detection from filename
- β Resilient error handling - Backend never crashes on malformed input
Extensions/
βββ manifest.json # Extension configuration
βββ README.md # This file
βββ .gitignore # Git ignore rules
βββ src/
β βββ background/
β β βββ service-worker.js # β¨ NEW: Backend API communication only
β βββ content/
β β βββ content.js # Page scanning logic (unchanged)
β βββ popup/
β βββ popup.html # Extension UI
β βββ popup.js # β¨ UPDATED: Backend calls, status indicator
β βββ popup.css # Styling
βββ backend/ # β¨ NEW: Required backend server
βββ package.json # Dependencies: express, cors, cheerio, node-fetch
βββ server.js # Express API server
βββ crawler.js # Multi-page documentation crawler
βββ parser.js # Command extraction & analysis logic
βββ .gitignore # node_modules, logs, etc.
[User clicks "Generate Packaging Info"]
β
[popup.js gets active tab URL]
β
[popup.js sends message to service-worker.js]
β
[service-worker.js forwards request to backend API]
β
[Backend fetches main page HTML]
β
[Backend discovers documentation links (keywords: deploy, install, silent, etc.)]
β
[Backend crawls up to 15 relevant pages with retries]
β
[Backend extracts commands from <code>, <pre>, paragraphs, etc.]
β
[Backend calculates confidence (high/medium/low)]
β
[Backend returns JSON: {silentInstallCommand, uninstallCommand, detectionRule, confidence, warnings, sourcePages}]
β
[service-worker.js forwards response to popup.js]
β
[popup.js displays results in modal with copy buttons]
-
Receives POST /analyzeApp request with:
url: Current page URL (e.g.,https://vlc.org/download)installerUrl: Direct link to installerfilename: Installer filename (e.g.,vlc-3.0.20-win64.exe)
-
Fetches main page HTML content with retry logic
-
Discovers documentation links by scanning
<a>tags for keywords:- Priority keywords: deploy, install, silent, unattended, intune, enterprise, msi, setup, configuration, admin
-
Crawls relevant pages (up to 15 total):
- 500ms delay between requests (respectful crawling)
- 30-second timeout per page
- Up to 3 retries on failure
- Skips duplicate URLs
- Only follows links from same domain
-
Extracts commands from multiple sources:
<code>and<pre>blocks (highest priority)<script>tags- Paragraphs
<p>and list items<li> - Searches for patterns:
- Silent switches:
/S,/SILENT,/VERYSILENT,/quiet,/qn,/passive,--silent - MSI commands:
msiexec /i ... /qn - Uninstall:
msiexec /x {GUID},uninstall.exe /S - File paths:
C:\Program Files\...,%ProgramFiles%\... - Version numbers:
version X.X.X,vX.X.X
- Silent switches:
-
Deduplicates and ranks commands:
- Prefers commands that include exact filename
- Tracks source page for each command
- Removes duplicates (case-insensitive)
-
Calculates confidence score:
- HIGH: Command found in official docs with explicit filename match
- MEDIUM: Command found in docs but generic (no filename match)
- LOW: No documentation found, using fallback (e.g.,
msiexec /i "file.msi" /qn)
-
Generates detection rule:
- MSI files: Uses ProductCode GUID if found
- Other files: Uses extracted file path or generates generic Program Files path
- Rule format matches Intune detection requirements
-
Returns structured JSON with all packaging information
β Problems with client-side crawling (old approach):
- CORS blocks prevent fetching vendor pages from extension
- Service workers have strict fetch limitations
- No access to page HTML from other domains
- Unreliable command extraction due to security restrictions
- Rate limiting and IP blocks from vendor sites
β Backend solution (current approach):
- No CORS restrictions (server-to-server communication)
- Can crawl multiple pages reliably with retries
- Advanced HTML parsing with Cheerio library
- Consistent results across all vendors
- Better error handling and logging
- Can respect rate limits and implement backoff strategies
- Node.js (v18 or higher)
- npm (comes with Node.js)
- Chrome browser
- Visual Studio Code (recommended)
- Git (for cloning repository)
# Clone repository
git clone https://github.com/DimaVasilenko-Intune/Extensions.git
cd Extensions
# Setup and start backend
cd backend
npm install
npm start
# Keep this terminal running
# In a new terminal/VS Code instance:
# 1. Open chrome://extensions/
# 2. Enable "Developer mode"
# 3. Click "Load unpacked"
# 4. Select the Extensions folder (parent folder containing manifest.json)Backend changes (server.js, crawler.js, parser.js):
- Edit files in
backend/folder - Stop server with
Ctrl+Cin terminal - Restart:
npm start - Test changes by clicking "Generate Packaging Info" in extension
Extension changes (popup.js, service-worker.js, content.js):
- Edit files in
src/folder - Go to
chrome://extensions/ - Click reload icon β» on the extension card
- Re-open extension popup to test changes
Testing workflow:
- Make changes to code
- Reload extension (if frontend) or restart server (if backend)
- Visit a software download page (e.g., https://www.7-zip.org/download.html)
- Click extension icon β "Scan Current Page"
- Click "Generate Packaging Info" on detected installer
- Verify changes in modal results or backend logs
Backend debugging:
- Check terminal output where
npm startis running - Backend logs show:
- Incoming requests
- Pages being crawled
- Commands found
- Analysis results
- Add
console.log()statements incrawler.jsorparser.js
Service worker debugging:
- Go to
chrome://extensions/ - Find "App Packaging Helper"
- Click "Service worker" link (blue text)
- Opens DevTools console showing service worker logs
- Look for "[Service Worker]" prefixed messages
Content script debugging:
- Open DevTools on any webpage (F12)
- Go to Console tab
- Scan page with extension
- Look for content script logs
Popup UI debugging:
- Right-click extension icon β Inspect popup
- Opens DevTools attached to popup window
- View console logs, inspect HTML/CSS
- Check Network tab for backend API calls
Symptoms:
- Status message says "Found 24 installers"
- Results area is completely empty
Solution:
- Reload extension:
- Go to
chrome://extensions/ - Click reload β» button
- Go to
- Clear storage:
// In extension popup, press F12, go to Console, run: chrome.storage.local.clear()
- Rescan the page:
- Click "Scan Current Page" again
Root cause: HTML structure mismatch or old cached data.
Error: Could not load icon 'icons/icon16.png'
Solution: Icons are optional. Use the manifest.json without icon references provided in this README.
Symptoms:
- Extension shows "π΄ Backend: Disconnected"
- "Generate Packaging Info" button shows "
β οΈ Backend Required" - Clicking "Generate" shows error: "Cannot connect to backend server"
Solutions:
-
Check if backend is running:
cd backend npm startShould output:
π App Packaging Backend Server π‘ Listening on: http://localhost:3000 β Health check: http://localhost:3000/healthNote: If you see port 3001 instead, update
service-worker.jsto usehttp://localhost:3001 -
Test backend directly:
- Open browser:
http://localhost:3000/health - Should return:
{"status":"ok","timestamp":"..."}
- Open browser:
-
Check port 3000 is not in use:
- Windows:
netstat -ano | findstr :3000 - Mac/Linux:
lsof -i :3000 - If another process is using port 3000, kill it or change backend port in
server.js
- Windows:
-
Reinstall backend dependencies:
cd backend rm -rf node_modules package-lock.json npm install npm start -
Check firewall settings:
- Ensure Windows Firewall allows localhost connections
- Temporarily disable antivirus to test
Symptoms:
- Backend returns confidence: "low"
- Generic commands like
"app.exe" /Sormsiexec /i "app.msi" /qn - Warnings: "No silent install command found in documentation"
Why it happens:
- Vendor doesn't document silent install switches on their website
- Documentation pages don't match crawler keywords
- Documentation uses non-standard formats (PDFs, videos)
- App genuinely doesn't support silent installation
What to do:
-
Manually visit vendor documentation:
- Look for: "/docs", "/help", "/support", "/enterprise", "/deploy" pages
- Search for: "silent install", "unattended", "command line"
-
Try common switches manually:
- EXE installers: Try
/S,/SILENT,/VERYSILENT,/quiet - MSI installers: Use
msiexec /i "file.msi" /qn /norestart
- EXE installers: Try
-
Test fallback commands:
- Backend warnings will suggest alternative switches
- Test in VM or test environment first
-
Improve crawler (for developers):
- Add more keywords to
DOC_KEYWORDSincrawler.js - Adjust extraction patterns in
parser.js
- Add more keywords to
Symptoms:
- "Scan Current Page" finds 0 installers
- Page clearly has download links
Solutions:
-
Check if links are JavaScript-generated:
- Some sites generate download links dynamically
- Content script only sees initial HTML
- Solution: Wait for page to fully load, then click "Scan Current Page"
-
Verify file types:
- Content script looks for:
.exe,.msi,.msix - Check if vendor uses different extensions
- Developer fix: Add extensions to
content.js
- Content script looks for:
-
Console errors:
- Right-click page β Inspect β Console
- Look for red errors related to extension
- Report errors with page URL
-
Try different page:
- Some vendor sites have multiple download pages
- Try direct download page vs. main product page
Symptoms:
- Backend terminal shows error and exits
- Extension shows "Backend: Disconnected" after clicking "Generate"
Common causes:
-
Vendor site blocks scraping:
- Rare, but some sites return 403 Forbidden
- Backend logs will show HTTP error
- Solution: Try different vendor page or wait and retry
-
Network timeout:
- Slow vendor sites exceed 30-second timeout
- Backend has retry logic but may eventually fail
- Solution: Increase timeout in
crawler.js(line:REQUEST_TIMEOUT)
-
Memory issues:
- Crawling 15 large pages can consume memory
- Solution: Reduce
MAX_PAGESincrawler.js
-
Parsing errors:
- Malformed HTML breaks Cheerio parser
- Backend should catch errors, but edge cases exist
- Solution: Add try-catch blocks, submit bug report
Backend resilience features:
- β Automatic retries (3 attempts per page)
- β 30-second timeout per request
- β Graceful degradation (returns partial results)
- β Duplicate URL prevention
- β Error logging for debugging
Cause:
- Backend status shows "Disconnected"
- Button automatically disables when backend unreachable
Fix:
- Start backend server:
cd backend && npm start - Wait 2-3 seconds for connection check
- Button should enable and text changes to "π Generate Packaging Info"
Health check endpoint to verify backend is running.
Response:
{
"status": "ok",
"timestamp": "2024-12-19T10:30:00.000Z"
}Main analysis endpoint. Crawls vendor documentation and extracts packaging information.
Request:
{
"url": "https://www.7-zip.org/download.html",
"installerUrl": "https://www.7-zip.org/a/7z2301-x64.exe",
"filename": "7z2301-x64.exe"
}Response (Success):
{
"installers": [
{
"filename": "7z2301-x64.exe",
"url": "https://www.7-zip.org/a/7z2301-x64.exe",
"type": "exe"
}
],
"packaging": [
{
"filename": "7z2301-x64.exe",
"silentInstallCommand": "7z2301-x64.exe /S",
"uninstallCommand": "C:\\Program Files\\7-Zip\\Uninstall.exe /S",
"detectionRule": {
"type": "file",
"path": "C:\\Program Files\\7-Zip\\7z.exe",
"property": "version",
"operator": "greaterThanOrEqual"
},
"version": "23.01",
"confidence": "high",
"warnings": [],
"sourcePages": [
"https://www.7-zip.org/download.html",
"https://www.7-zip.org/faq.html"
]
}
],
"pagesCrawled": 5
}Response (Error):
{
"error": "Analysis failed",
"message": "Failed to fetch https://example.com: HTTP 404"
}Status Codes:
200 OK- Analysis successful400 Bad Request- Missing required fields500 Internal Server Error- Crawling/parsing error
- β All data stays local - Backend runs on your machine (localhost:3000)
- β No telemetry - Extension doesn't send data to external servers
- β No authentication - Local-only usage, no accounts or tracking
- β Vendor sites crawled - Only fetches public documentation pages
- β Respects robots.txt - Backend follows web scraping best practices
- β Rate limiting - 500ms delay between requests to vendor sites
- β User-Agent header - Identifies as standard browser to avoid blocks
- β Open source - All code visible for security audits
Data flow:
- User's browser β Extension (localhost only)
- Extension β Backend (localhost only)
- Backend β Vendor websites (public docs)
- Backend β Extension β User's browser
No data leaves your machine except for legitimate crawling of public vendor documentation.
- Command history and favorites
- Batch analysis (multiple installers at once)
- Improved parser for PDF documentation
- Custom keyword configuration for crawler
- Cloud-hosted backend option (no local setup required)
- User accounts and saved configurations
- Optional paid tier for enterprise features:
- Priority crawling
- Extended documentation search
- Integration with Intune/SCCM APIs
- Automated package creation
- Support for Linux packages (deb, rpm)
- Support for macOS packages (dmg, pkg)
- Integration with Chocolatey and Winget
- Browser extension for Edge, Firefox
- CLI tool for CI/CD pipelines
- Webhook support for automation
β οΈ Backend must run locally (no cloud hosting yet)β οΈ No authentication/user accountsβ οΈ Limited to Windows installers (.exe, .msi, .msix)β οΈ Crawls public pages only (no authenticated pages)β οΈ English documentation only (no i18n yet)
Internal tool - All rights reserved
This project is currently for internal use only. Redistribution, modification, or commercial use without explicit permission is prohibited.
Future versions may adopt open-source licensing.
We welcome contributions! Here's how to get started:
- Check existing issues: https://github.com/DimaVasilenko-Intune/Extensions/issues
- Create new issue with:
- Extension version (see manifest.json)
- Backend version (see package.json)
- Vendor website URL
- Expected vs. actual behavior
- Console logs (both extension and backend)
- Open GitHub Discussion or Issue
- Describe use case and expected behavior
- Provide examples if possible
-
Fork repository:
git clone https://github.com/YOUR_USERNAME/Extensions.git cd Extensions git checkout -b feature-name -
Make changes:
- Follow existing code style
- Add comments for complex logic
- Test with multiple vendor sites
-
Test thoroughly:
- Backend:
cd backend && npm start - Extension: Load unpacked in Chrome
- Test on real-world vendor sites
- Backend:
-
Submit PR:
- Clear description of changes
- Include screenshots if UI changes
- Reference related issues
- JavaScript: ES6+ syntax, async/await over callbacks
- Comments: Explain why, not what
- Functions: Single responsibility, descriptive names
- Error handling: Always catch and log errors
- Console logs: Use prefixes like
[Crawler],[Parser],[Service Worker]
Breaking Changes:
β οΈ Extension now requires backend server to functionβ οΈ All crawling moved from extension to backend
New Features:
- β¨ Backend-driven architecture with Express.js
- β¨ Advanced multi-page documentation crawler
- β¨ Real-time backend connection status indicator
- β¨ Confidence scoring (high/medium/low)
- β¨ Source page tracking for transparency
- β¨ Improved command extraction with pattern matching
- β¨ MSI ProductCode detection from docs
- β¨ Version extraction from page content
- β¨ Resilient crawling with retries and timeouts
Improvements:
- π 10x more reliable command discovery
- π No more CORS errors
- π Consistent results across vendors
- π Better error messages and user guidance
Removed:
- β Client-side crawling (moved to backend)
- β vendorProfiles hardcoded logic (now dynamic)
- β Local packaging generation (now server-side)
- Multi-page documentation scanning (client-side)
- Light/Dark mode support
- Export to JSON
- Basic installer detection
- Simple packaging info generation
- Cheerio - Fast HTML parsing
- Express.js - Backend server framework
- Chrome Extensions API - Extension foundation
- IT Admin Community - Feature ideas and testing
- Issues: https://github.com/DimaVasilenko-Intune/Extensions/issues
- Discussions: https://github.com/DimaVasilenko-Intune/Extensions/discussions
- Email: dmivas@hotmail.com
Version: 3.0.0
Last Updated: December 2024
Architecture: Backend-first with Chrome Extension frontend
Key Feature: Server-side multi-page documentation crawler with advanced heuristics
Status: β
Production Ready (with local backend)