pompelmi 0.29.1 โ†’ 0.30.1

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>
@@ -100,6 +82,7 @@
100
82
  <a href="https://github.com/pompelmi/pompelmi/network/members"><img alt="GitHub forks" src="https://img.shields.io/github/forks/pompelmi/pompelmi?style=social"></a>
101
83
  <a href="https://github.com/pompelmi/pompelmi/watchers"><img alt="GitHub watchers" src="https://img.shields.io/github/watchers/pompelmi/pompelmi?style=social"></a>
102
84
  <a href="https://github.com/pompelmi/pompelmi/issues"><img alt="open issues" src="https://img.shields.io/github/issues/pompelmi/pompelmi?color=orange"></a>
85
+ <a href="https://github.com/sponsors/pompelmi"><img alt="GitHub Sponsors" src="https://img.shields.io/github/sponsors/pompelmi?style=social&label=Sponsor"></a>
103
86
  </p>
104
87
 
105
88
  <p align="center">
@@ -121,7 +104,7 @@
121
104
 
122
105
  ## ๐ŸŽฌ Demo
123
106
 
124
- > *(Demo GIF coming soon โ€” showing Express + pompelmi scanning a file upload)*
107
+ ![Pompelmi Demo](./assets/malware-detection-node-demo.gif)
125
108
 
126
109
  **Want to try it now?** Check out our [live examples](./examples/) or install and run locally:
127
110
 
@@ -135,8 +118,8 @@ npm i pompelmi @pompelmi/express-middleware
135
118
 
136
119
  **pompelmi** provides enterprise-grade file scanning for Node.js applications:
137
120
 
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.
121
+ - **๐Ÿ”’ Privacy-First Architecture** โ€” All scanning happens in-process. **No cloud calls, no data leaks.** Your files never leave your infrastructure.
122
+ - **โšก Lightning Fast** โ€” In-process scanning with **zero network latency**. Configurable concurrency for high-throughput scenarios.
140
123
  - **๐Ÿงฉ Composable Scanners** โ€” Mix heuristics + signatures; set `stopOn` and timeouts. Bring your own YARA rules.
141
124
  - **๐Ÿ“ฆ Deep ZIP Inspection** โ€” Traversal/bomb guards, polyglot & macro hints, nested archive scanning with configurable depth limits.
142
125
  - **๐Ÿ”Œ Framework Adapters** โ€” Drop-in middleware for Express, Koa, Fastify, Next.js, Nuxt/Nitro, and **NestJS** with first-class TypeScript support.
@@ -148,28 +131,75 @@ npm i pompelmi @pompelmi/express-middleware
148
131
 
149
132
  ---
150
133
 
134
+ ## โšก Quick Start
135
+
136
+ Get secure file upload scanning running in **under 5 minutes**.
137
+
138
+ ### Express Integration
139
+
140
+ ```ts
141
+ import express from 'express';
142
+ import multer from 'multer';
143
+ import { createUploadGuard } from '@pompelmi/express-middleware';
144
+ import { CommonHeuristicsScanner, createZipBombGuard, composeScanners } from 'pompelmi';
145
+
146
+ const app = express();
147
+ const upload = multer({ storage: multer.memoryStorage() });
148
+
149
+ // Configure your security policy
150
+ const scanner = composeScanners(
151
+ [
152
+ ['zipGuard', createZipBombGuard({ maxEntries: 512, maxCompressionRatio: 12 })],
153
+ ['heuristics', CommonHeuristicsScanner],
154
+ ],
155
+ { parallel: false, stopOn: 'suspicious', timeoutMsPerScanner: 1500 }
156
+ );
157
+
158
+ app.post('/upload',
159
+ upload.single('file'),
160
+ createUploadGuard({
161
+ includeExtensions: ['pdf', 'zip', 'png', 'jpg'],
162
+ allowedMimeTypes: ['application/pdf', 'application/zip', 'image/png', 'image/jpeg'],
163
+ maxFileSizeBytes: 20 * 1024 * 1024, // 20MB
164
+ scanner,
165
+ failClosed: true
166
+ }),
167
+ (req, res) => {
168
+ // File is safe - proceed with your logic
169
+ res.json({ success: true, message: 'File uploaded successfully' });
170
+ }
171
+ );
172
+
173
+ app.listen(3000, () => console.log('๐Ÿš€ Server running on http://localhost:3000'));
174
+ ```
175
+
176
+ **Test it:**
177
+ ```bash
178
+ curl -X POST http://localhost:3000/upload -F "file=@test.pdf"
179
+ ```
180
+
181
+ โœ… **Done!** Your app now blocks malicious uploads before they hit disk.
182
+
183
+ ๐Ÿ‘‰ **[Explore full documentation โ†’](https://pompelmi.github.io/pompelmi/)** | **[See more examples โ†’](./examples/)**
184
+
185
+ ---
186
+
151
187
  ## Table of Contents
152
188
 
153
- - [Overview](#overview)
154
- - [Highlights](#highlights)
189
+ - [Features](#features)
190
+ - [Quick Start](#quick-start)
155
191
  - [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
192
  - [Use Cases](#use-cases)
160
193
  - [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)
194
+ - [Getting Started](#getting-started)
195
+ - [Code Examples](#code-examples)
166
196
  - [Adapters](#adapters)
167
197
  - [GitHub Action](#github-action)
168
198
  - [Configuration](#configuration)
169
199
  - [YARA Getting Started](#yara-getting-started)
170
200
  - [Security Notes](#security-notes)
171
-
172
- - [Testing & Development](#testing--development)
201
+ - [Production Checklist](#production-checklist)
202
+ - [Community & Recognition](#community--recognition)
173
203
  - [FAQ](#faq)
174
204
  - [Contributing](#contributing)
175
205
  - [License](#license)
@@ -195,55 +225,11 @@ pompelmi documentation is available in multiple languages to help developers wor
195
225
 
196
226
  ---
197
227
 
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.
228
+ ## ๐Ÿง  Why pompelmi?
241
229
 
242
- **๐Ÿ‘จโ€๐Ÿ’ป DX first** โ€” TypeScript types, ESM/CJS builds, tiny API, adapters for popular web frameworks.
230
+ pompelmi delivers **Privacy-First** malware detection with **Zero Cloud Dependencies** โ€” keeping your data secure and your latency zero.
243
231
 
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
245
-
246
- ## ๐Ÿง  Why pompelmi?
232
+ ### Why Choose Pompelmi?
247
233
 
248
234
  - **Onโ€‘device, private scanning** โ€“ no outbound calls, no data sharing.
249
235
  - **Blocks early** โ€“ runs _before_ you write to disk or persist anything.
@@ -257,45 +243,25 @@ pompelmi documentation is available in multiple languages to help developers wor
257
243
  - Apps that need predictable, lowโ€‘latency decisions inline.
258
244
  - Developers who want simple, typed building blocks instead of a daemon.
259
245
 
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)!_
287
-
288
- ---
246
+ ### Comparison Table
289
247
 
290
- ## ๐ŸŒŸ What Makes pompelmi Special?
248
+ | Feature | **Pompelmi** | ClamAV | Cloud APIs (VirusTotal, etc.) |
249
+ |---------|-------------|---------|-------------------------------|
250
+ | **Setup Time** | โšก Seconds (`npm install`) | โฑ๏ธ Complex (daemon setup) | โฑ๏ธ API keys + integration |
251
+ | **Privacy** | โœ… **In-process** (data never leaves) | โœ… Local (separate daemon) | โŒ **External** (data sent to cloud) |
252
+ | **Latency** | โšก **Zero** (no network calls) | ๐Ÿ”„ IPC overhead | ๐ŸŒ **High** (network roundtrip) |
253
+ | **Cost** | ๐Ÿ’ฐ **Free** (MIT license) | ๐Ÿ’ฐ Free (GPL) | ๐Ÿ’ธ **Pay-per-scan** |
254
+ | **Framework Integration** | โœ… Express, Koa, Next.js, NestJS | โŒ Manual integration | โŒ Manual integration |
255
+ | **TypeScript Support** | โœ… First-class | โŒ Community types | โ“ Varies |
256
+ | **YARA Integration** | โœ… Built-in | โš™๏ธ Manual setup | โ“ Limited |
291
257
 
292
258
  ### ๐ŸŽฏ Developer Experience
293
259
 
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.
260
+ 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
261
 
296
262
  ### ๐Ÿš€ Performance First
297
263
 
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.
264
+ Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead. Scans run in-process with no IPC overhead.
299
265
 
300
266
  ### ๐Ÿ” Security Without Compromise
301
267
 
@@ -333,8 +299,6 @@ Validate user-generated content uploads (images, videos, documents) before proce
333
299
 
334
300
  ---
335
301
 
336
- ---
337
-
338
302
  ## ๐Ÿ“ฆ Installation
339
303
 
340
304
  **pompelmi** is a privacy-first Node.js library for local file scanning.
@@ -732,18 +696,7 @@ Use the adapter that matches your web framework. All adapters share the same pol
732
696
 
733
697
  See the [๐Ÿ“˜ Code Examples](#-code-examples) section above for integration examples.
734
698
 
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 |
699
+ ๐Ÿ‘‰ **[View adapter documentation โ†’](https://pompelmi.github.io/pompelmi/)** | **[Browse all examples โ†’](./examples/)**
747
700
 
748
701
  ---
749
702
 
@@ -1070,39 +1023,105 @@ You should see an HTTP **422 Unprocessable Entity** (blocked by policy). Clean f
1070
1023
 
1071
1024
  ---
1072
1025
 
1073
- ## Releases & security
1026
+ ## Releases & Security
1074
1027
 
1075
1028
  - **Changelog / releases:** see [GitHub Releases](https://github.com/pompelmi/pompelmi/releases).
1076
1029
  - **Security disclosures:** please use [GitHub Security Advisories](https://github.com/pompelmi/pompelmi/security/advisories). Weโ€™ll coordinate a fix before public disclosure.
1077
1030
  - **Production users:** open a [Discussion](https://github.com/pompelmi/pompelmi/discussions) to share requirements or request adapters.
1078
1031
 
1079
- ## โญ Star history
1032
+ ---
1080
1033
 
1081
- [![Star History Chart](https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date)](https://star-history.com/#pompelmi/pompelmi&Date)
1034
+ ## ๐Ÿ† Community & Recognition
1082
1035
 
1083
- ---
1036
+ pompelmi has been featured in **leading security and developer publications** and is trusted by teams worldwide for secure file upload handling.
1084
1037
 
1085
- ---
1038
+ ### ๐ŸŒŸ Featured In High-Authority Publications
1086
1039
 
1087
- ## ๐Ÿ† Community & Recognition
1040
+ <table>
1041
+ <tr>
1042
+ <td align="center" width="200">
1043
+ <a href="https://www.helpnetsecurity.com/2026/02/02/pompelmi-open-source-secure-file-upload-scanning-node-js/">
1044
+ <img src="https://img.shields.io/badge/๐Ÿ”’-HelpNet%20Security-FF6B35?style=for-the-badge" alt="HelpNet Security"/>
1045
+ </a>
1046
+ <br/>
1047
+ <strong>HelpNet Security</strong>
1048
+ <br/>
1049
+ <em>Leading Cybersecurity News</em>
1050
+ </td>
1051
+ <td align="center" width="200">
1052
+ <a href="https://snyk.io/test/github/pompelmi/pompelmi">
1053
+ <img src="https://img.shields.io/badge/๐Ÿ›ก๏ธ-Snyk-4C4A73?style=for-the-badge&logo=snyk" alt="Snyk"/>
1054
+ </a>
1055
+ <br/>
1056
+ <strong>Snyk</strong>
1057
+ <br/>
1058
+ <em>Security Verified</em>
1059
+ </td>
1060
+ <td align="center" width="200">
1061
+ <a href="https://www.detectionengineering.net/p/det-eng-weekly-issue-124-the-defcon">
1062
+ <img src="https://img.shields.io/badge/๐Ÿ“ก-Detection%20Engineering-0A84FF?style=for-the-badge&logo=substack" alt="Detection Engineering"/>
1063
+ </a>
1064
+ <br/>
1065
+ <strong>Detection Engineering Weekly</strong>
1066
+ <br/>
1067
+ <em>Issue #124</em>
1068
+ </td>
1069
+ </tr>
1070
+ <tr>
1071
+ <td align="center" width="200">
1072
+ <a href="https://nodeweekly.com/issues/594">
1073
+ <img src="https://img.shields.io/badge/โšก-Node%20Weekly-FF6600?style=for-the-badge&logo=node.js" alt="Node Weekly"/>
1074
+ </a>
1075
+ <br/>
1076
+ <strong>Node Weekly</strong>
1077
+ <br/>
1078
+ <em>Issue #594</em>
1079
+ </td>
1080
+ <td align="center" width="200">
1081
+ <a href="https://bytes.dev/archives/429">
1082
+ <img src="https://img.shields.io/badge/๐Ÿ“ฌ-Bytes-111111?style=for-the-badge" alt="Bytes"/>
1083
+ </a>
1084
+ <br/>
1085
+ <strong>Bytes Newsletter</strong>
1086
+ <br/>
1087
+ <em>Issue #429</em>
1088
+ </td>
1089
+ <td align="center" width="200">
1090
+ <a href="https://app.daily.dev/posts/pompelmi">
1091
+ <img src="https://img.shields.io/badge/๐Ÿ“ฐ-daily.dev-CE3DF3?style=for-the-badge&logo=dailydotdev" alt="daily.dev"/>
1092
+ </a>
1093
+ <br/>
1094
+ <strong>daily.dev</strong>
1095
+ <br/>
1096
+ <em>Featured Article</em>
1097
+ </td>
1098
+ </tr>
1099
+ </table>
1088
1100
 
1089
- pompelmi has been featured in leading developer publications and is trusted by teams worldwide for secure file upload handling.
1101
+ ### ๐ŸŽ–๏ธ Mentioned In Awesome Lists
1090
1102
 
1091
1103
  <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">
1104
+ <a href="https://github.com/sorrycc/awesome-javascript"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome JavaScript"/></a>
1105
+ <a href="https://github.com/dzharii/awesome-typescript"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome TypeScript"/></a>
1106
+ <a href="https://github.com/sbilly/awesome-security"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome Security"/></a>
1107
+ <a href="https://github.com/sindresorhus/awesome-nodejs"><img src="https://awesome.re/mentioned-badge.svg" alt="Awesome Node.js"/></a>
1095
1108
  </p>
1096
1109
 
1097
1110
  <!-- MENTIONS:START -->
1111
+ <!-- MENTIONS:END -->
1098
1112
 
1099
- ## ๐ŸŒŸ Featured In
1113
+ ### ๐Ÿ’ฌ What Developers Say
1100
1114
 
1101
- *Last updated: January 24, 2026*
1115
+ > "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
1116
+ > โ€” Developer using pompelmi in production
1102
1117
 
1103
- *No mentions found yet. Run `npm run mentions:find` to discover mentions.*
1118
+ > "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
1119
+ > โ€” Security Engineer at a healthcare startup
1104
1120
 
1105
- <!-- MENTIONS:END -->
1121
+ > "The YARA integration is seamless. We went from prototype to production in less than a week."
1122
+ > โ€” DevSecOps Engineer
1123
+
1124
+ _Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
1106
1125
 
1107
1126
  ### ๐Ÿค Community & Support
1108
1127
 
@@ -1113,6 +1132,7 @@ pompelmi has been featured in leading developer publications and is trusted by t
1113
1132
  - ๐Ÿ› **[Issue Tracker](https://github.com/pompelmi/pompelmi/issues)** โ€” Report bugs, request features
1114
1133
  - ๐Ÿ”’ **[Security Policy](https://github.com/pompelmi/pompelmi/security)** โ€” Report security vulnerabilities privately
1115
1134
  - ๐Ÿ’ผ **Commercial Support** โ€” For enterprise support and consulting, contact the maintainers
1135
+ - ๐Ÿ’– **[Sponsor pompelmi](https://github.com/sponsors/pompelmi)** โ€” Support ongoing development via GitHub Sponsors
1116
1136
 
1117
1137
  **Supported Frameworks:**
1118
1138
  - โœ… Express
@@ -1126,28 +1146,48 @@ pompelmi has been featured in leading developer publications and is trusted by t
1126
1146
 
1127
1147
  ---
1128
1148
 
1129
- ## ๐Ÿ“Š Star History
1149
+ ## ๐ŸŽ–๏ธ Contributors
1150
+
1151
+ Thanks to all the amazing contributors who have helped make pompelmi better!
1130
1152
 
1131
1153
  <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" />
1154
+ <a href="https://github.com/pompelmi/pompelmi/graphs/contributors">
1155
+ <img src="https://contrib.rocks/image?repo=pompelmi/pompelmi" alt="Contributors" />
1134
1156
  </a>
1135
1157
  </p>
1136
1158
 
1159
+ <p align="center">
1160
+ <em>Want to contribute? Check out our <a href="./CONTRIBUTING.md">Contributing Guide</a>!</em>
1161
+ </p>
1162
+
1137
1163
  ---
1138
1164
 
1139
- ## ๐ŸŽ–๏ธ Contributors
1165
+ ## ๐Ÿ’– Sponsors
1140
1166
 
1141
- Thanks to all the amazing contributors who have helped make pompelmi better!
1167
+ Pompelmi is free and open-source. If it saves you time or helps protect your users, consider supporting its development!
1142
1168
 
1143
1169
  <p align="center">
1144
- <a href="https://github.com/pompelmi/pompelmi/graphs/contributors">
1145
- <img src="https://contrib.rocks/image?repo=pompelmi/pompelmi" alt="Contributors" />
1170
+ <a href="https://github.com/sponsors/pompelmi">
1171
+ <img src="https://img.shields.io/badge/Sponsor-pompelmi-EA4AAA?style=for-the-badge&logo=githubsponsors&logoColor=white" alt="Sponsor pompelmi on GitHub" />
1146
1172
  </a>
1147
1173
  </p>
1148
1174
 
1175
+ Your sponsorship helps fund:
1176
+ - ๐Ÿงฌ New detection engine integrations
1177
+ - ๐Ÿงช Expanded test coverage and CI infrastructure
1178
+ - ๐Ÿ“š Documentation and examples
1179
+ - ๐Ÿ”’ Security audits and CVE response
1180
+
1181
+ Thank you to all current and future sponsors for keeping this project alive!
1182
+
1183
+ ---
1184
+
1185
+ ## โญ Star History
1186
+
1149
1187
  <p align="center">
1150
- <em>Want to contribute? Check out our <a href="./CONTRIBUTING.md">Contributing Guide</a>!</em>
1188
+ <a href="https://star-history.com/#pompelmi/pompelmi&Date">
1189
+ <img src="https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date" alt="Star History Chart" width="600" />
1190
+ </a>
1151
1191
  </p>
1152
1192
 
1153
1193
  ---
@@ -1205,25 +1245,9 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
1205
1245
  - [Examples](./examples/) โ€” Real-world integration examples
1206
1246
  - [Security Guide](./SECURITY.md) โ€” Security best practices and disclosure policy
1207
1247
 
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
1248
  ### ๐Ÿ› ๏ธ Tools & Integrations
1215
1249
 
1216
1250
  - [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
1251
 
1228
1252
  ---
1229
1253
 
@@ -1237,19 +1261,6 @@ pompelmi stands on the shoulders of giants. Special thanks to:
1237
1261
 
1238
1262
  ---
1239
1263
 
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
1264
  <p align="right"><a href="#pompelmi">โ†‘ Back to top</a></p>
1254
1265
 
1255
1266
  ## ๐Ÿ“œ 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 {