pompelmi 0.29.0 → 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 +171 -169
- package/dist/pompelmi.cjs +2 -2
- package/dist/pompelmi.cjs.map +1 -1
- package/dist/pompelmi.esm.js +2 -2
- package/dist/pompelmi.esm.js.map +1 -1
- package/dist/types/utils/threat-intelligence.d.ts +12 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -34,11 +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.
|
|
38
|
-
<a href="https://
|
|
39
|
-
<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>
|
|
40
|
-
<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>
|
|
41
|
-
<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>
|
|
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>
|
|
42
39
|
<br/>
|
|
43
40
|
<a href="https://github.com/sorrycc/awesome-javascript"><img alt="Mentioned in Awesome JavaScript" src="https://awesome.re/mentioned-badge.svg"></a>
|
|
44
41
|
<a href="https://github.com/dzharii/awesome-typescript"><img alt="Mentioned in Awesome TypeScript" src="https://awesome.re/mentioned-badge-flat.svg"></a>
|
|
@@ -58,13 +55,11 @@
|
|
|
58
55
|
</p>
|
|
59
56
|
|
|
60
57
|
<p align="center">
|
|
61
|
-
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>
|
|
62
59
|
</p>
|
|
63
60
|
|
|
64
61
|
---
|
|
65
62
|
|
|
66
|
-
---
|
|
67
|
-
|
|
68
63
|
<!-- Badges Section -->
|
|
69
64
|
<p align="center">
|
|
70
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>
|
|
@@ -108,7 +103,7 @@
|
|
|
108
103
|
|
|
109
104
|
## 🎬 Demo
|
|
110
105
|
|
|
111
|
-
|
|
106
|
+

|
|
112
107
|
|
|
113
108
|
**Want to try it now?** Check out our [live examples](./examples/) or install and run locally:
|
|
114
109
|
|
|
@@ -122,8 +117,8 @@ npm i pompelmi @pompelmi/express-middleware
|
|
|
122
117
|
|
|
123
118
|
**pompelmi** provides enterprise-grade file scanning for Node.js applications:
|
|
124
119
|
|
|
125
|
-
- **🔒 Privacy-First Architecture** — All scanning happens in-process. No cloud calls, no data leaks
|
|
126
|
-
- **⚡ Lightning Fast** — In-process scanning with zero network latency
|
|
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.
|
|
127
122
|
- **🧩 Composable Scanners** — Mix heuristics + signatures; set `stopOn` and timeouts. Bring your own YARA rules.
|
|
128
123
|
- **📦 Deep ZIP Inspection** — Traversal/bomb guards, polyglot & macro hints, nested archive scanning with configurable depth limits.
|
|
129
124
|
- **🔌 Framework Adapters** — Drop-in middleware for Express, Koa, Fastify, Next.js, Nuxt/Nitro, and **NestJS** with first-class TypeScript support.
|
|
@@ -135,28 +130,75 @@ npm i pompelmi @pompelmi/express-middleware
|
|
|
135
130
|
|
|
136
131
|
---
|
|
137
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
|
+
|
|
138
186
|
## Table of Contents
|
|
139
187
|
|
|
140
|
-
- [
|
|
141
|
-
- [
|
|
188
|
+
- [Features](#features)
|
|
189
|
+
- [Quick Start](#quick-start)
|
|
142
190
|
- [Why pompelmi](#why-pompelmi)
|
|
143
|
-
- [How it compares](#how-it-compares)
|
|
144
|
-
- [What Developers Say](#what-developers-say)
|
|
145
|
-
- [What Makes pompelmi Special](#what-makes-pompelmi-special)
|
|
146
191
|
- [Use Cases](#use-cases)
|
|
147
192
|
- [Installation](#installation)
|
|
148
|
-
- [
|
|
149
|
-
|
|
150
|
-
- [Express](#express)
|
|
151
|
-
- [Koa](#koa)
|
|
152
|
-
- [Next.js (App Router)](#nextjs-app-router)
|
|
193
|
+
- [Getting Started](#getting-started)
|
|
194
|
+
- [Code Examples](#code-examples)
|
|
153
195
|
- [Adapters](#adapters)
|
|
154
196
|
- [GitHub Action](#github-action)
|
|
155
197
|
- [Configuration](#configuration)
|
|
156
198
|
- [YARA Getting Started](#yara-getting-started)
|
|
157
199
|
- [Security Notes](#security-notes)
|
|
158
|
-
|
|
159
|
-
- [
|
|
200
|
+
- [Production Checklist](#production-checklist)
|
|
201
|
+
- [Community & Recognition](#community--recognition)
|
|
160
202
|
- [FAQ](#faq)
|
|
161
203
|
- [Contributing](#contributing)
|
|
162
204
|
- [License](#license)
|
|
@@ -182,55 +224,11 @@ pompelmi documentation is available in multiple languages to help developers wor
|
|
|
182
224
|
|
|
183
225
|
---
|
|
184
226
|
|
|
185
|
-
##
|
|
186
|
-
|
|
187
|
-
**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.
|
|
188
|
-
|
|
189
|
-
### 🎯 Key Features
|
|
190
|
-
|
|
191
|
-
**🔒 Private by design** — no outbound calls; bytes never leave your process
|
|
192
|
-
|
|
193
|
-
**🧩 Composable scanners** — mix heuristics + signatures; set `stopOn` and timeouts
|
|
194
|
-
|
|
195
|
-
**📦 ZIP hardening** — traversal/bomb guards, polyglot & macro hints
|
|
196
|
-
|
|
197
|
-
**🔌 Drop-in adapters** — Express, Koa, Fastify, Next.js, Nuxt/Nitro, **NestJS**
|
|
198
|
-
|
|
199
|
-
**🌊 Stream-based scanning** — memory-efficient processing with configurable buffer limits
|
|
200
|
-
|
|
201
|
-
**⚙️ CLI for CI/CD** — standalone command-line tool for scanning files and directories
|
|
202
|
-
|
|
203
|
-
**🔍 Polyglot detection** — advanced magic bytes analysis and embedded script detection
|
|
204
|
-
|
|
205
|
-
**📘 Typed & tiny** — modern TS, minimal surface, tree-shakeable
|
|
206
|
-
|
|
207
|
-
**⚡ Zero dependencies** — core library has minimal deps, fast installation
|
|
208
|
-
|
|
209
|
-
## ✨ Highlights
|
|
210
|
-
|
|
211
|
-
**🛡️ Block risky uploads early** — classify uploads as _clean_, _suspicious_, or _malicious_ and stop them at the edge.
|
|
212
|
-
|
|
213
|
-
**✅ Real guards** — extension allow‑list, server‑side MIME sniff (magic bytes), per‑file size caps, and **deep ZIP** traversal with anti‑bomb limits.
|
|
214
|
-
|
|
215
|
-
**🔍 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.
|
|
216
|
-
|
|
217
|
-
**🔬 Polyglot & embedded script detection** — advanced magic bytes analysis detects mixed-format files and embedded scripts with **30+ file signatures**.
|
|
218
|
-
|
|
219
|
-
**🌊 Memory-efficient streaming** — scan large files without loading them entirely into memory with automatic stream routing.
|
|
220
|
-
|
|
221
|
-
**⚙️ Compose scanning** — run multiple scanners in parallel or sequentially with timeouts and short‑circuiting via `composeScanners()`.
|
|
222
|
-
|
|
223
|
-
**🏗️ Framework integrations** — native modules for **NestJS**, Express, Koa, Next.js, Nuxt/Nitro, and Fastify with first-class TypeScript support.
|
|
224
|
-
|
|
225
|
-
**🔧 Production-ready CLI** — standalone tool for CI/CD pipelines with watch mode, multiple output formats (JSON, table, minimal).
|
|
226
|
-
|
|
227
|
-
**☁️ Zero cloud** — scans run in‑process. Keep bytes private. Perfect for GDPR/HIPAA compliance.
|
|
228
|
-
|
|
229
|
-
**👨💻 DX first** — TypeScript types, ESM/CJS builds, tiny API, adapters for popular web frameworks.
|
|
227
|
+
## 🧠 Why pompelmi?
|
|
230
228
|
|
|
231
|
-
|
|
229
|
+
pompelmi delivers **Privacy-First** malware detection with **Zero Cloud Dependencies** — keeping your data secure and your latency zero.
|
|
232
230
|
|
|
233
|
-
|
|
231
|
+
### Why Choose Pompelmi?
|
|
234
232
|
|
|
235
233
|
- **On‑device, private scanning** – no outbound calls, no data sharing.
|
|
236
234
|
- **Blocks early** – runs _before_ you write to disk or persist anything.
|
|
@@ -244,45 +242,25 @@ pompelmi documentation is available in multiple languages to help developers wor
|
|
|
244
242
|
- Apps that need predictable, low‑latency decisions inline.
|
|
245
243
|
- Developers who want simple, typed building blocks instead of a daemon.
|
|
246
244
|
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
| Capability | pompelmi | ClamAV / node‑clam | Cloud AV APIs |
|
|
250
|
-
| --- | --- | --- | --- |
|
|
251
|
-
| Runs fully in‑process | ✅ | ❌ (separate daemon) | ❌ (network calls) |
|
|
252
|
-
| Bytes stay private | ✅ | ✅ | ❌ |
|
|
253
|
-
| Deep ZIP limits & MIME sniff | ✅ | ✅ (archive scan) | ❓ varies |
|
|
254
|
-
| YARA integration | ✅ optional | ❌* | ❓ varies |
|
|
255
|
-
| Framework adapters | ✅ Express/Koa/Next.js | ❌ | ❌ |
|
|
256
|
-
| Works in CI on artifacts | ✅ | ✅ | ❓ varies |
|
|
257
|
-
| Licensing | MIT | GPL (engine) | Proprietary |
|
|
258
|
-
|
|
259
|
-
\* You can run YARA alongside ClamAV, but it’s not built‑in.
|
|
260
|
-
|
|
261
|
-
---
|
|
262
|
-
## 💬 What Developers Say
|
|
263
|
-
|
|
264
|
-
> "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
|
|
265
|
-
> — Developer using pompelmi in production
|
|
266
|
-
|
|
267
|
-
> "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
|
|
268
|
-
> — Security Engineer at a healthcare startup
|
|
269
|
-
|
|
270
|
-
> "The YARA integration is seamless. We went from prototype to production in less than a week."
|
|
271
|
-
> — DevSecOps Engineer
|
|
272
|
-
|
|
273
|
-
_Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
|
|
274
|
-
|
|
275
|
-
---
|
|
245
|
+
### Comparison Table
|
|
276
246
|
|
|
277
|
-
|
|
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 |
|
|
278
256
|
|
|
279
257
|
### 🎯 Developer Experience
|
|
280
258
|
|
|
281
|
-
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.
|
|
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.
|
|
282
260
|
|
|
283
261
|
### 🚀 Performance First
|
|
284
262
|
|
|
285
|
-
Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead.
|
|
263
|
+
Optimized for high-throughput scenarios with configurable concurrency, streaming support, and minimal memory overhead. Scans run in-process with no IPC overhead.
|
|
286
264
|
|
|
287
265
|
### 🔐 Security Without Compromise
|
|
288
266
|
|
|
@@ -320,8 +298,6 @@ Validate user-generated content uploads (images, videos, documents) before proce
|
|
|
320
298
|
|
|
321
299
|
---
|
|
322
300
|
|
|
323
|
-
---
|
|
324
|
-
|
|
325
301
|
## 📦 Installation
|
|
326
302
|
|
|
327
303
|
**pompelmi** is a privacy-first Node.js library for local file scanning.
|
|
@@ -719,18 +695,7 @@ Use the adapter that matches your web framework. All adapters share the same pol
|
|
|
719
695
|
|
|
720
696
|
See the [📘 Code Examples](#-code-examples) section above for integration examples.
|
|
721
697
|
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
| Framework | Package | Status |
|
|
725
|
-
| --- | --- | --- |
|
|
726
|
-
| Express | `@pompelmi/express-middleware` | ✅ alpha |
|
|
727
|
-
| Koa | `@pompelmi/koa-middleware` | ✅ alpha |
|
|
728
|
-
| Next.js (App Router) | `@pompelmi/next-upload` | ✅ alpha |
|
|
729
|
-
| Fastify | `@pompelmi/fastify-plugin` | 🚧 alpha |
|
|
730
|
-
| NestJS | nestjs | 📋 planned |
|
|
731
|
-
| Remix | remix | 📋 planned |
|
|
732
|
-
| hapi | hapi plugin | 📋 planned |
|
|
733
|
-
| SvelteKit | sveltekit | 📋 planned |
|
|
698
|
+
👉 **[View adapter documentation →](https://pompelmi.github.io/pompelmi/)** | **[Browse all examples →](./examples/)**
|
|
734
699
|
|
|
735
700
|
---
|
|
736
701
|
|
|
@@ -1057,39 +1022,105 @@ You should see an HTTP **422 Unprocessable Entity** (blocked by policy). Clean f
|
|
|
1057
1022
|
|
|
1058
1023
|
---
|
|
1059
1024
|
|
|
1060
|
-
## Releases &
|
|
1025
|
+
## Releases & Security
|
|
1061
1026
|
|
|
1062
1027
|
- **Changelog / releases:** see [GitHub Releases](https://github.com/pompelmi/pompelmi/releases).
|
|
1063
1028
|
- **Security disclosures:** please use [GitHub Security Advisories](https://github.com/pompelmi/pompelmi/security/advisories). We’ll coordinate a fix before public disclosure.
|
|
1064
1029
|
- **Production users:** open a [Discussion](https://github.com/pompelmi/pompelmi/discussions) to share requirements or request adapters.
|
|
1065
1030
|
|
|
1066
|
-
|
|
1031
|
+
---
|
|
1067
1032
|
|
|
1068
|
-
|
|
1033
|
+
## 🏆 Community & Recognition
|
|
1069
1034
|
|
|
1070
|
-
|
|
1035
|
+
pompelmi has been featured in **leading security and developer publications** and is trusted by teams worldwide for secure file upload handling.
|
|
1071
1036
|
|
|
1072
|
-
|
|
1037
|
+
### 🌟 Featured In High-Authority Publications
|
|
1073
1038
|
|
|
1074
|
-
|
|
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>
|
|
1075
1099
|
|
|
1076
|
-
|
|
1100
|
+
### 🎖️ Mentioned In Awesome Lists
|
|
1077
1101
|
|
|
1078
1102
|
<p align="center">
|
|
1079
|
-
<
|
|
1080
|
-
<
|
|
1081
|
-
<
|
|
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>
|
|
1082
1107
|
</p>
|
|
1083
1108
|
|
|
1084
1109
|
<!-- MENTIONS:START -->
|
|
1110
|
+
<!-- MENTIONS:END -->
|
|
1085
1111
|
|
|
1086
|
-
|
|
1112
|
+
### 💬 What Developers Say
|
|
1087
1113
|
|
|
1088
|
-
|
|
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
|
|
1089
1116
|
|
|
1090
|
-
|
|
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
|
|
1091
1119
|
|
|
1092
|
-
|
|
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)!_
|
|
1093
1124
|
|
|
1094
1125
|
### 🤝 Community & Support
|
|
1095
1126
|
|
|
@@ -1113,16 +1144,6 @@ pompelmi has been featured in leading developer publications and is trusted by t
|
|
|
1113
1144
|
|
|
1114
1145
|
---
|
|
1115
1146
|
|
|
1116
|
-
## 📊 Star History
|
|
1117
|
-
|
|
1118
|
-
<p align="center">
|
|
1119
|
-
<a href="https://star-history.com/#pompelmi/pompelmi&Date">
|
|
1120
|
-
<img src="https://api.star-history.com/svg?repos=pompelmi/pompelmi&type=Date" alt="Star History Chart" />
|
|
1121
|
-
</a>
|
|
1122
|
-
</p>
|
|
1123
|
-
|
|
1124
|
-
---
|
|
1125
|
-
|
|
1126
1147
|
## 🎖️ Contributors
|
|
1127
1148
|
|
|
1128
1149
|
Thanks to all the amazing contributors who have helped make pompelmi better!
|
|
@@ -1139,6 +1160,16 @@ Thanks to all the amazing contributors who have helped make pompelmi better!
|
|
|
1139
1160
|
|
|
1140
1161
|
---
|
|
1141
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
|
+
|
|
1142
1173
|
## 💬 FAQ
|
|
1143
1174
|
|
|
1144
1175
|
**Do I need YARA?**
|
|
@@ -1192,25 +1223,9 @@ See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
|
|
|
1192
1223
|
- [Examples](./examples/) — Real-world integration examples
|
|
1193
1224
|
- [Security Guide](./SECURITY.md) — Security best practices and disclosure policy
|
|
1194
1225
|
|
|
1195
|
-
### 🎥 Tutorials & Articles
|
|
1196
|
-
|
|
1197
|
-
- **File Upload Security in Node.js** — Best practices guide (coming soon)
|
|
1198
|
-
- **Integrating YARA with pompelmi** — Advanced detection setup (coming soon)
|
|
1199
|
-
- **Zero-Trust File Uploads** — Architecture patterns (coming soon)
|
|
1200
|
-
|
|
1201
1226
|
### 🛠️ Tools & Integrations
|
|
1202
1227
|
|
|
1203
1228
|
- [GitHub Action](https://github.com/pompelmi/pompelmi/tree/main/.github/actions/pompelmi-scan) — CI/CD scanning
|
|
1204
|
-
- [Docker Images](https://hub.docker.com/r/pompelmi/pompelmi) — Containerized scanning (coming soon)
|
|
1205
|
-
- [Cloud Functions](https://github.com/pompelmi/cloud-functions) — Serverless examples (coming soon)
|
|
1206
|
-
|
|
1207
|
-
---
|
|
1208
|
-
|
|
1209
|
-
## 📊 Project Stats
|
|
1210
|
-
|
|
1211
|
-
<p align="center">
|
|
1212
|
-
<img src="https://repobeats.axiom.co/api/embed/YOUR_EMBED_ID.svg" alt="Repobeats analytics" />
|
|
1213
|
-
</p>
|
|
1214
1229
|
|
|
1215
1230
|
---
|
|
1216
1231
|
|
|
@@ -1224,19 +1239,6 @@ pompelmi stands on the shoulders of giants. Special thanks to:
|
|
|
1224
1239
|
|
|
1225
1240
|
---
|
|
1226
1241
|
|
|
1227
|
-
## 📞 Support
|
|
1228
|
-
|
|
1229
|
-
Need help? We're here for you!
|
|
1230
|
-
|
|
1231
|
-
- 📖 [Documentation](https://pompelmi.github.io/pompelmi/)
|
|
1232
|
-
- 💬 [GitHub Discussions](https://github.com/pompelmi/pompelmi/discussions)
|
|
1233
|
-
- 🐛 [Issue Tracker](https://github.com/pompelmi/pompelmi/issues)
|
|
1234
|
-
- 🔒 [Security](https://github.com/pompelmi/pompelmi/security) (for vulnerabilities)
|
|
1235
|
-
|
|
1236
|
-
For commercial support and consulting, contact the maintainers.
|
|
1237
|
-
|
|
1238
|
-
---
|
|
1239
|
-
|
|
1240
1242
|
<p align="right"><a href="#pompelmi">↑ Back to top</a></p>
|
|
1241
1243
|
|
|
1242
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 {
|