pompelmi 0.29.1 → 0.30.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -34,24 +34,8 @@
34
34
  <br/>
35
35
  <a href="https://www.producthunt.com/products/pompelmi"><img src="https://api.producthunt.com/widgets/embed-image/v1/featured.svg?post_id=1010722&theme=light" alt="pompelmi - Secure File Upload Scanning for Node.js | Product Hunt" style="width: 250px; height: 54px;" width="250" height="54" /></a>
36
36
  <br/>
37
- <a href="https://www.detectionengineering.net/p/det-eng-weekly-issue-124-the-defcon"><img alt="Featured in Detection Engineering Weekly #124" src="https://img.shields.io/badge/featured-Detection%20Engineering%20Weekly-0A84FF?logo=substack"></a>
38
- <a href="https://nodeweekly.com/issues/594"><img alt="Featured in Node Weekly #594" src="https://img.shields.io/badge/featured-Node%20Weekly%20%23594-FF6600?logo=node.js"></a>
39
- <a href="https://medium.com/node-weekly/node-weekly-issue-145-07f40a2cd3f3"><img alt="Featured in Node Weekly #145" src="https://img.shields.io/badge/featured-Node%20Weekly%20%23145-FF6600?logo=node.js"></a>
40
- <a href="https://bytes.dev/archives/429"><img alt="Featured in Bytes #429" src="https://img.shields.io/badge/featured-Bytes%20%23429-111111"></a>
41
- <a href="https://app.daily.dev/posts/pompelmi"><img alt="Featured on daily.dev" src="https://img.shields.io/badge/featured-daily.dev-CE3DF3?logo=dailydotdev"></a>
42
- <a href="https://app.daily.dev/posts/q7cusr92j"><img alt="Featured on daily.dev" src="https://img.shields.io/badge/featured-daily.dev-CE3DF3?logo=dailydotdev"></a>
43
- <a href="https://dev.to/sonotommy/secure-nodejs-file-uploads-in-minutes-with-pompelmi-3jfe"><img alt="Featured on DEV.to" src="https://img.shields.io/badge/featured-DEV.to-0A0A0A?logo=devdotto"></a>
44
- <br/>
45
- <a href="https://www.helpnetsecurity.com/2026/02/02/pompelmi-open-source-secure-file-upload-scanning-node-js/"><img alt="Featured on HelpNet Security" src="https://img.shields.io/badge/featured-HelpNet%20Security-FF6B35"></a>
46
- <a href="https://risky.biz/risky-bulletin-researcher-scores-250-000-for-chrome-bug/"><img alt="Mentioned in Risky.Biz" src="https://img.shields.io/badge/mentioned-Risky.Biz-DC143C"></a>
47
- <a href="https://www.anquan114.com/archives/6969"><img alt="Featured on AnQuan114" src="https://img.shields.io/badge/featured-AnQuan114-FF4500"></a>
48
- <a href="https://www.toptool.app/ru/product/pompelmi"><img alt="Listed on TopTool.app" src="https://img.shields.io/badge/listed-TopTool.app-4A90E2"></a>
49
- <a href="https://alternativeto.net/software/pompelmi/"><img alt="Listed on AlternativeTo" src="https://img.shields.io/badge/listed-AlternativeTo-7B68EE"></a>
50
- <br/>
51
- <a href="https://www.tasc.tw/tw/news-detail/pompelmi-open-source-secure-file-upload-scanning-node-js%EF%BC%8F?kind=28"><img alt="Featured on TASC Taiwan" src="https://img.shields.io/badge/featured-TASC%20Taiwan-1E90FF"></a>
52
- <a href="https://webboard-nsoc.ncsa.or.th/topic/2583/cyber-threat-intelligence-03-february-2026"><img alt="Featured on NCSA Thailand" src="https://img.shields.io/badge/featured-NCSA%20Thailand-FF69B4"></a>
53
- <a href="https://www.linkedin.com/posts/helpnetsecurity_scanner-software-opensource-activity-7424044015076970496-Nt_u/"><img alt="Featured on LinkedIn" src="https://img.shields.io/badge/featured-LinkedIn-0A66C2?logo=linkedin"></a>
54
- <a href="https://x.com/TheCyberSecHub/status/2018213695143419937"><img alt="Mentioned on X/Twitter" src="https://img.shields.io/badge/mentioned-X%2FTwitter-000000?logo=x"></a>
37
+ <a href="https://www.helpnetsecurity.com/2026/02/02/pompelmi-open-source-secure-file-upload-scanning-node-js/"><img alt="Featured on HelpNet Security" src="https://img.shields.io/badge/🔒_FEATURED-HelpNet%20Security-FF6B35?style=for-the-badge"></a>
38
+ <a href="https://snyk.io/test/github/pompelmi/pompelmi"><img alt="Secured by Snyk" src="https://img.shields.io/badge/🛡️_SECURED_BY-Snyk-4C4A73?style=for-the-badge&logo=snyk"></a>
55
39
  <br/>
56
40
  <a href="https://github.com/sorrycc/awesome-javascript"><img alt="Mentioned in Awesome JavaScript" src="https://awesome.re/mentioned-badge.svg"></a>
57
41
  <a href="https://github.com/dzharii/awesome-typescript"><img alt="Mentioned in Awesome TypeScript" src="https://awesome.re/mentioned-badge-flat.svg"></a>
@@ -71,13 +55,11 @@
71
55
  </p>
72
56
 
73
57
  <p align="center">
74
- Scan files before they hit disk • Keep user data private • Zero cloud dependencies
58
+ Scan files before they hit disk • <strong>Keep user data private</strong><strong>Zero cloud dependencies</strong>
75
59
  </p>
76
60
 
77
61
  ---
78
62
 
79
- ---
80
-
81
63
  <!-- Badges Section -->
82
64
  <p align="center">
83
65
  <a href="https://www.npmjs.com/package/pompelmi"><img alt="npm version" src="https://img.shields.io/npm/v/pompelmi?label=version&color=0a7ea4&logo=npm"></a>
@@ -121,7 +103,7 @@
121
103
 
122
104
  ## 🎬 Demo
123
105
 
124
- > *(Demo GIF coming soon — showing Express + pompelmi scanning a file upload)*
106
+ ![Pompelmi Demo](./assets/malware-detection-node-demo.gif)
125
107
 
126
108
  **Want to try it now?** Check out our [live examples](./examples/) or install and run locally:
127
109
 
@@ -135,8 +117,8 @@ npm i pompelmi @pompelmi/express-middleware
135
117
 
136
118
  **pompelmi** provides enterprise-grade file scanning for Node.js applications:
137
119
 
138
- - **🔒 Privacy-First Architecture** — All scanning happens in-process. No cloud calls, no data leaks. Your files never leave your infrastructure.
139
- - **⚡ Lightning Fast** — In-process scanning with zero network latency. Configurable concurrency for high-throughput scenarios.
120
+ - **🔒 Privacy-First Architecture** — All scanning happens in-process. **No cloud calls, no data leaks.** Your files never leave your infrastructure.
121
+ - **⚡ Lightning Fast** — In-process scanning with **zero network latency**. Configurable concurrency for high-throughput scenarios.
140
122
  - **🧩 Composable Scanners** — Mix heuristics + signatures; set `stopOn` and timeouts. Bring your own YARA rules.
141
123
  - **📦 Deep ZIP Inspection** — Traversal/bomb guards, polyglot & macro hints, nested archive scanning with configurable depth limits.
142
124
  - **🔌 Framework Adapters** — Drop-in middleware for Express, Koa, Fastify, Next.js, Nuxt/Nitro, and **NestJS** with first-class TypeScript support.
@@ -148,28 +130,75 @@ npm i pompelmi @pompelmi/express-middleware
148
130
 
149
131
  ---
150
132
 
133
+ ## ⚡ Quick Start
134
+
135
+ Get secure file upload scanning running in **under 5 minutes**.
136
+
137
+ ### Express Integration
138
+
139
+ ```ts
140
+ import express from 'express';
141
+ import multer from 'multer';
142
+ import { createUploadGuard } from '@pompelmi/express-middleware';
143
+ import { CommonHeuristicsScanner, createZipBombGuard, composeScanners } from 'pompelmi';
144
+
145
+ const app = express();
146
+ const upload = multer({ storage: multer.memoryStorage() });
147
+
148
+ // Configure your security policy
149
+ const scanner = composeScanners(
150
+ [
151
+ ['zipGuard', createZipBombGuard({ maxEntries: 512, maxCompressionRatio: 12 })],
152
+ ['heuristics', CommonHeuristicsScanner],
153
+ ],
154
+ { parallel: false, stopOn: 'suspicious', timeoutMsPerScanner: 1500 }
155
+ );
156
+
157
+ app.post('/upload',
158
+ upload.single('file'),
159
+ createUploadGuard({
160
+ includeExtensions: ['pdf', 'zip', 'png', 'jpg'],
161
+ allowedMimeTypes: ['application/pdf', 'application/zip', 'image/png', 'image/jpeg'],
162
+ maxFileSizeBytes: 20 * 1024 * 1024, // 20MB
163
+ scanner,
164
+ failClosed: true
165
+ }),
166
+ (req, res) => {
167
+ // File is safe - proceed with your logic
168
+ res.json({ success: true, message: 'File uploaded successfully' });
169
+ }
170
+ );
171
+
172
+ app.listen(3000, () => console.log('🚀 Server running on http://localhost:3000'));
173
+ ```
174
+
175
+ **Test it:**
176
+ ```bash
177
+ curl -X POST http://localhost:3000/upload -F "file=@test.pdf"
178
+ ```
179
+
180
+ ✅ **Done!** Your app now blocks malicious uploads before they hit disk.
181
+
182
+ 👉 **[Explore full documentation →](https://pompelmi.github.io/pompelmi/)** | **[See more examples →](./examples/)**
183
+
184
+ ---
185
+
151
186
  ## Table of Contents
152
187
 
153
- - [Overview](#overview)
154
- - [Highlights](#highlights)
188
+ - [Features](#features)
189
+ - [Quick Start](#quick-start)
155
190
  - [Why pompelmi](#why-pompelmi)
156
- - [How it compares](#how-it-compares)
157
- - [What Developers Say](#what-developers-say)
158
- - [What Makes pompelmi Special](#what-makes-pompelmi-special)
159
191
  - [Use Cases](#use-cases)
160
192
  - [Installation](#installation)
161
- - [Quick Start](#quick-start)
162
- - [Minimal Node usage](#minimal-node-usage)
163
- - [Express](#express)
164
- - [Koa](#koa)
165
- - [Next.js (App Router)](#nextjs-app-router)
193
+ - [Getting Started](#getting-started)
194
+ - [Code Examples](#code-examples)
166
195
  - [Adapters](#adapters)
167
196
  - [GitHub Action](#github-action)
168
197
  - [Configuration](#configuration)
169
198
  - [YARA Getting Started](#yara-getting-started)
170
199
  - [Security Notes](#security-notes)
171
-
172
- - [Testing & Development](#testing--development)
200
+ - [Production Checklist](#production-checklist)
201
+ - [Community & Recognition](#community--recognition)
173
202
  - [FAQ](#faq)
174
203
  - [Contributing](#contributing)
175
204
  - [License](#license)
@@ -195,55 +224,11 @@ pompelmi documentation is available in multiple languages to help developers wor
195
224
 
196
225
  ---
197
226
 
198
- ## 🚀 Overview
199
-
200
- **pompelmi** scans untrusted file uploads **before** they hit disk. A tiny, TypeScript-first toolkit for Node.js with composable scanners, deep ZIP inspection, and optional signature engines.
201
-
202
- ### 🎯 Key Features
203
-
204
- **🔒 Private by design** — no outbound calls; bytes never leave your process
205
-
206
- **🧩 Composable scanners** — mix heuristics + signatures; set `stopOn` and timeouts
207
-
208
- **📦 ZIP hardening** — traversal/bomb guards, polyglot & macro hints
209
-
210
- **🔌 Drop-in adapters** — Express, Koa, Fastify, Next.js, Nuxt/Nitro, **NestJS**
211
-
212
- **🌊 Stream-based scanning** — memory-efficient processing with configurable buffer limits
213
-
214
- **⚙️ CLI for CI/CD** — standalone command-line tool for scanning files and directories
215
-
216
- **🔍 Polyglot detection** — advanced magic bytes analysis and embedded script detection
217
-
218
- **📘 Typed & tiny** — modern TS, minimal surface, tree-shakeable
219
-
220
- **⚡ Zero dependencies** — core library has minimal deps, fast installation
221
-
222
- ## ✨ Highlights
223
-
224
- **🛡️ Block risky uploads early** — classify uploads as _clean_, _suspicious_, or _malicious_ and stop them at the edge.
225
-
226
- **✅ Real guards** — extension allow‑list, server‑side MIME sniff (magic bytes), per‑file size caps, and **deep ZIP** traversal with anti‑bomb limits.
227
-
228
- **🔍 Built‑in scanners** — drop‑in **CommonHeuristicsScanner** (PDF risky actions, Office macros, PE header) and **Zip‑bomb Guard**; add your own or YARA via a tiny `{ scan(bytes) }` contract.
229
-
230
- **🔬 Polyglot & embedded script detection** — advanced magic bytes analysis detects mixed-format files and embedded scripts with **30+ file signatures**.
231
-
232
- **🌊 Memory-efficient streaming** — scan large files without loading them entirely into memory with automatic stream routing.
233
-
234
- **⚙️ Compose scanning** — run multiple scanners in parallel or sequentially with timeouts and short‑circuiting via `composeScanners()`.
235
-
236
- **🏗️ Framework integrations** — native modules for **NestJS**, Express, Koa, Next.js, Nuxt/Nitro, and Fastify with first-class TypeScript support.
237
-
238
- **🔧 Production-ready CLI** — standalone tool for CI/CD pipelines with watch mode, multiple output formats (JSON, table, minimal).
239
-
240
- **☁️ Zero cloud** — scans run in‑process. Keep bytes private. Perfect for GDPR/HIPAA compliance.
241
-
242
- **👨‍💻 DX first** — TypeScript types, ESM/CJS builds, tiny API, adapters for popular web frameworks.
227
+ ## 🧠 Why pompelmi?
243
228
 
244
- > **SEO Keywords:** file upload security, malware detection, virus scanner, Node.js security, Express middleware, YARA integration, ZIP bomb protection, file validation, upload sanitization, threat detection, security scanner, antivirus Node.js, file scanning library, TypeScript security, Next.js security, Nuxt security, Nitro security, Koa middleware, server-side validation, file integrity check, malware prevention, secure file upload
229
+ pompelmi delivers **Privacy-First** malware detection with **Zero Cloud Dependencies** keeping your data secure and your latency zero.
245
230
 
246
- ## 🧠 Why pompelmi?
231
+ ### Why Choose Pompelmi?
247
232
 
248
233
  - **On‑device, private scanning** – no outbound calls, no data sharing.
249
234
  - **Blocks early** – runs _before_ you write to disk or persist anything.
@@ -257,45 +242,25 @@ pompelmi documentation is available in multiple languages to help developers wor
257
242
  - Apps that need predictable, low‑latency decisions inline.
258
243
  - Developers who want simple, typed building blocks instead of a daemon.
259
244
 
260
- ## 🔍 How it compares
261
-
262
- | Capability | pompelmi | ClamAV / node‑clam | Cloud AV APIs |
263
- | --- | --- | --- | --- |
264
- | Runs fully in‑process | ✅ | ❌ (separate daemon) | ❌ (network calls) |
265
- | Bytes stay private | ✅ | ✅ | ❌ |
266
- | Deep ZIP limits & MIME sniff | ✅ | ✅ (archive scan) | ❓ varies |
267
- | YARA integration | ✅ optional | ❌* | ❓ varies |
268
- | Framework adapters | ✅ Express/Koa/Next.js | ❌ | ❌ |
269
- | Works in CI on artifacts | ✅ | ✅ | ❓ varies |
270
- | Licensing | MIT | GPL (engine) | Proprietary |
271
-
272
- \* You can run YARA alongside ClamAV, but it’s not built‑in.
273
-
274
- ---
275
- ## 💬 What Developers Say
276
-
277
- > "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
278
- > — Developer using pompelmi in production
279
-
280
- > "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
281
- > — Security Engineer at a healthcare startup
282
-
283
- > "The YARA integration is seamless. We went from prototype to production in less than a week."
284
- > — DevSecOps Engineer
285
-
286
- _Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
245
+ ### Comparison Table
287
246
 
288
- ---
289
-
290
- ## 🌟 What Makes pompelmi Special?
247
+ | Feature | **Pompelmi** | ClamAV | Cloud APIs (VirusTotal, etc.) |
248
+ |---------|-------------|---------|-------------------------------|
249
+ | **Setup Time** | Seconds (`npm install`) | ⏱️ Complex (daemon setup) | ⏱️ API keys + integration |
250
+ | **Privacy** | ✅ **In-process** (data never leaves) | ✅ Local (separate daemon) | ❌ **External** (data sent to cloud) |
251
+ | **Latency** | ⚡ **Zero** (no network calls) | 🔄 IPC overhead | 🌐 **High** (network roundtrip) |
252
+ | **Cost** | 💰 **Free** (MIT license) | 💰 Free (GPL) | 💸 **Pay-per-scan** |
253
+ | **Framework Integration** | ✅ Express, Koa, Next.js, NestJS | ❌ Manual integration | ❌ Manual integration |
254
+ | **TypeScript Support** | ✅ First-class | ❌ Community types | ❓ Varies |
255
+ | **YARA Integration** | ✅ Built-in | ⚙️ Manual setup | ❓ Limited |
291
256
 
292
257
  ### 🎯 Developer Experience
293
258
 
294
- Built with developers in mind from day one. Simple API, comprehensive TypeScript types, and excellent documentation mean you can integrate secure file scanning in minutes, not days. Hot module replacement support and detailed error messages make debugging a breeze.
259
+ Built with developers in mind from day one. Simple API, comprehensive TypeScript types, and excellent documentation mean you can integrate secure file scanning in minutes, not days.
295
260
 
296
261
  ### 🚀 Performance First
297
262
 
298
- Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead. Process thousands of files without breaking a sweat. Scans run in-process with no IPC overhead.
263
+ Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead. Scans run in-process with no IPC overhead.
299
264
 
300
265
  ### 🔐 Security Without Compromise
301
266
 
@@ -333,8 +298,6 @@ Validate user-generated content uploads (images, videos, documents) before proce
333
298
 
334
299
  ---
335
300
 
336
- ---
337
-
338
301
  ## 📦 Installation
339
302
 
340
303
  **pompelmi** is a privacy-first Node.js library for local file scanning.
@@ -732,18 +695,7 @@ Use the adapter that matches your web framework. All adapters share the same pol
732
695
 
733
696
  See the [📘 Code Examples](#-code-examples) section above for integration examples.
734
697
 
735
- ---
736
-
737
- | Framework | Package | Status |
738
- | --- | --- | --- |
739
- | Express | `@pompelmi/express-middleware` | ✅ alpha |
740
- | Koa | `@pompelmi/koa-middleware` | ✅ alpha |
741
- | Next.js (App Router) | `@pompelmi/next-upload` | ✅ alpha |
742
- | Fastify | `@pompelmi/fastify-plugin` | 🚧 alpha |
743
- | NestJS | nestjs | 📋 planned |
744
- | Remix | remix | 📋 planned |
745
- | hapi | hapi plugin | 📋 planned |
746
- | SvelteKit | sveltekit | 📋 planned |
698
+ 👉 **[View adapter documentation →](https://pompelmi.github.io/pompelmi/)** | **[Browse all examples →](./examples/)**
747
699
 
748
700
  ---
749
701
 
@@ -1070,39 +1022,105 @@ You should see an HTTP **422 Unprocessable Entity** (blocked by policy). Clean f
1070
1022
 
1071
1023
  ---
1072
1024
 
1073
- ## Releases & security
1025
+ ## Releases & Security
1074
1026
 
1075
1027
  - **Changelog / releases:** see [GitHub Releases](https://github.com/pompelmi/pompelmi/releases).
1076
1028
  - **Security disclosures:** please use [GitHub Security Advisories](https://github.com/pompelmi/pompelmi/security/advisories). We’ll coordinate a fix before public disclosure.
1077
1029
  - **Production users:** open a [Discussion](https://github.com/pompelmi/pompelmi/discussions) to share requirements or request adapters.
1078
1030
 
1079
- ## ⭐ Star history
1031
+ ---
1080
1032
 
1081
- [![Star History Chart](https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date)](https://star-history.com/#pompelmi/pompelmi&Date)
1033
+ ## 🏆 Community & Recognition
1082
1034
 
1083
- ---
1035
+ pompelmi has been featured in **leading security and developer publications** and is trusted by teams worldwide for secure file upload handling.
1084
1036
 
1085
- ---
1037
+ ### 🌟 Featured In High-Authority Publications
1086
1038
 
1087
- ## 🏆 Community & Recognition
1039
+ <table>
1040
+ <tr>
1041
+ <td align="center" width="200">
1042
+ <a href="https://www.helpnetsecurity.com/2026/02/02/pompelmi-open-source-secure-file-upload-scanning-node-js/">
1043
+ <img src="https://img.shields.io/badge/🔒-HelpNet%20Security-FF6B35?style=for-the-badge" alt="HelpNet Security"/>
1044
+ </a>
1045
+ <br/>
1046
+ <strong>HelpNet Security</strong>
1047
+ <br/>
1048
+ <em>Leading Cybersecurity News</em>
1049
+ </td>
1050
+ <td align="center" width="200">
1051
+ <a href="https://snyk.io/test/github/pompelmi/pompelmi">
1052
+ <img src="https://img.shields.io/badge/🛡️-Snyk-4C4A73?style=for-the-badge&logo=snyk" alt="Snyk"/>
1053
+ </a>
1054
+ <br/>
1055
+ <strong>Snyk</strong>
1056
+ <br/>
1057
+ <em>Security Verified</em>
1058
+ </td>
1059
+ <td align="center" width="200">
1060
+ <a href="https://www.detectionengineering.net/p/det-eng-weekly-issue-124-the-defcon">
1061
+ <img src="https://img.shields.io/badge/📡-Detection%20Engineering-0A84FF?style=for-the-badge&logo=substack" alt="Detection Engineering"/>
1062
+ </a>
1063
+ <br/>
1064
+ <strong>Detection Engineering Weekly</strong>
1065
+ <br/>
1066
+ <em>Issue #124</em>
1067
+ </td>
1068
+ </tr>
1069
+ <tr>
1070
+ <td align="center" width="200">
1071
+ <a href="https://nodeweekly.com/issues/594">
1072
+ <img src="https://img.shields.io/badge/⚡-Node%20Weekly-FF6600?style=for-the-badge&logo=node.js" alt="Node Weekly"/>
1073
+ </a>
1074
+ <br/>
1075
+ <strong>Node Weekly</strong>
1076
+ <br/>
1077
+ <em>Issue #594</em>
1078
+ </td>
1079
+ <td align="center" width="200">
1080
+ <a href="https://bytes.dev/archives/429">
1081
+ <img src="https://img.shields.io/badge/📬-Bytes-111111?style=for-the-badge" alt="Bytes"/>
1082
+ </a>
1083
+ <br/>
1084
+ <strong>Bytes Newsletter</strong>
1085
+ <br/>
1086
+ <em>Issue #429</em>
1087
+ </td>
1088
+ <td align="center" width="200">
1089
+ <a href="https://app.daily.dev/posts/pompelmi">
1090
+ <img src="https://img.shields.io/badge/📰-daily.dev-CE3DF3?style=for-the-badge&logo=dailydotdev" alt="daily.dev"/>
1091
+ </a>
1092
+ <br/>
1093
+ <strong>daily.dev</strong>
1094
+ <br/>
1095
+ <em>Featured Article</em>
1096
+ </td>
1097
+ </tr>
1098
+ </table>
1088
1099
 
1089
- pompelmi has been featured in leading developer publications and is trusted by teams worldwide for secure file upload handling.
1100
+ ### 🎖️ Mentioned In Awesome Lists
1090
1101
 
1091
1102
  <p align="center">
1092
- <img src="https://img.shields.io/badge/Featured%20in-Detection%20Engineering%20Weekly-0A84FF?style=for-the-badge&logo=substack" alt="Detection Engineering">
1093
- <img src="https://img.shields.io/badge/Featured%20in-Node%20Weekly-FF6600?style=for-the-badge&logo=node.js" alt="Node Weekly">
1094
- <img src="https://img.shields.io/badge/Featured%20in-Bytes-111111?style=for-the-badge" alt="Bytes">
1103
+ <a href="https://github.com/sorrycc/awesome-javascript"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome JavaScript"/></a>
1104
+ <a href="https://github.com/dzharii/awesome-typescript"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome TypeScript"/></a>
1105
+ <a href="https://github.com/sbilly/awesome-security"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome Security"/></a>
1106
+ <a href="https://github.com/sindresorhus/awesome-nodejs"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome Node.js"/></a>
1095
1107
  </p>
1096
1108
 
1097
1109
  <!-- MENTIONS:START -->
1110
+ <!-- MENTIONS:END -->
1098
1111
 
1099
- ## 🌟 Featured In
1112
+ ### 💬 What Developers Say
1100
1113
 
1101
- *Last updated: January 24, 2026*
1114
+ > "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
1115
+ > — Developer using pompelmi in production
1102
1116
 
1103
- *No mentions found yet. Run `npm run mentions:find` to discover mentions.*
1117
+ > "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
1118
+ > — Security Engineer at a healthcare startup
1104
1119
 
1105
- <!-- MENTIONS:END -->
1120
+ > "The YARA integration is seamless. We went from prototype to production in less than a week."
1121
+ > — DevSecOps Engineer
1122
+
1123
+ _Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
1106
1124
 
1107
1125
  ### 🤝 Community & Support
1108
1126
 
@@ -1126,16 +1144,6 @@ pompelmi has been featured in leading developer publications and is trusted by t
1126
1144
 
1127
1145
  ---
1128
1146
 
1129
- ## 📊 Star History
1130
-
1131
- <p align="center">
1132
- <a href="https://star-history.com/#pompelmi/pompelmi&Date">
1133
- <img src="https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date" alt="Star History Chart" />
1134
- </a>
1135
- </p>
1136
-
1137
- ---
1138
-
1139
1147
  ## 🎖️ Contributors
1140
1148
 
1141
1149
  Thanks to all the amazing contributors who have helped make pompelmi better!
@@ -1152,6 +1160,16 @@ Thanks to all the amazing contributors who have helped make pompelmi better!
1152
1160
 
1153
1161
  ---
1154
1162
 
1163
+ ## ⭐ Star History
1164
+
1165
+ <p align="center">
1166
+ <a href="https://star-history.com/#pompelmi/pompelmi&Date">
1167
+ <img src="https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date" alt="Star History Chart" width="600" />
1168
+ </a>
1169
+ </p>
1170
+
1171
+ ---
1172
+
1155
1173
  ## 💬 FAQ
1156
1174
 
1157
1175
  **Do I need YARA?**
@@ -1205,25 +1223,9 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
1205
1223
  - [Examples](./examples/) — Real-world integration examples
1206
1224
  - [Security Guide](./SECURITY.md) — Security best practices and disclosure policy
1207
1225
 
1208
- ### 🎥 Tutorials & Articles
1209
-
1210
- - **File Upload Security in Node.js** — Best practices guide (coming soon)
1211
- - **Integrating YARA with pompelmi** — Advanced detection setup (coming soon)
1212
- - **Zero-Trust File Uploads** — Architecture patterns (coming soon)
1213
-
1214
1226
  ### 🛠️ Tools & Integrations
1215
1227
 
1216
1228
  - [GitHub Action](https://github.com/pompelmi/pompelmi/tree/main/.github/actions/pompelmi-scan) — CI/CD scanning
1217
- - [Docker Images](https://hub.docker.com/r/pompelmi/pompelmi) — Containerized scanning (coming soon)
1218
- - [Cloud Functions](https://github.com/pompelmi/cloud-functions) — Serverless examples (coming soon)
1219
-
1220
- ---
1221
-
1222
- ## 📊 Project Stats
1223
-
1224
- <p align="center">
1225
- <img src="https://repobeats.axiom.co/api/embed/YOUR_EMBED_ID.svg" alt="Repobeats analytics" />
1226
- </p>
1227
1229
 
1228
1230
  ---
1229
1231
 
@@ -1237,19 +1239,6 @@ pompelmi stands on the shoulders of giants. Special thanks to:
1237
1239
 
1238
1240
  ---
1239
1241
 
1240
- ## 📞 Support
1241
-
1242
- Need help? We're here for you!
1243
-
1244
- - 📖 [Documentation](https://pompelmi.github.io/pompelmi/)
1245
- - 💬 [GitHub Discussions](https://github.com/pompelmi/pompelmi/discussions)
1246
- - 🐛 [Issue Tracker](https://github.com/pompelmi/pompelmi/issues)
1247
- - 🔒 [Security](https://github.com/pompelmi/pompelmi/security) (for vulnerabilities)
1248
-
1249
- For commercial support and consulting, contact the maintainers.
1250
-
1251
- ---
1252
-
1253
1242
  <p align="right"><a href="#pompelmi">↑ Back to top</a></p>
1254
1243
 
1255
1244
  ## 📜 License
package/dist/pompelmi.cjs CHANGED
@@ -65,7 +65,7 @@ function createPresetScanner(preset, opts = {}) {
65
65
  });
66
66
  scanners.push(binjaScanner);
67
67
  }).catch(() => {
68
- // Binary Ninja engine not available
68
+ // Binary Ninja engine not available - silently skip
69
69
  });
70
70
  }
71
71
  catch {
@@ -85,7 +85,7 @@ function createPresetScanner(preset, opts = {}) {
85
85
  });
86
86
  scanners.push(ghidraScanner);
87
87
  }).catch(() => {
88
- // Ghidra engine not available
88
+ // Ghidra engine not available - silently skip
89
89
  });
90
90
  }
91
91
  catch {