pompelmi 0.19.0 → 0.20.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 +301 -63
- package/dist/pompelmi.cjs +474 -7
- package/dist/pompelmi.cjs.map +1 -1
- package/dist/pompelmi.esm.js +447 -8
- package/dist/pompelmi.esm.js.map +1 -1
- package/dist/types/engines/dynamic-taint.d.ts +102 -0
- package/dist/types/engines/hybrid-orchestrator.d.ts +65 -0
- package/dist/types/engines/hybrid-taint-integration.d.ts +129 -0
- package/dist/types/engines/taint-policies.d.ts +84 -0
- package/dist/types/hipaa-compliance.d.ts +110 -0
- package/dist/types/presets.d.ts +15 -3
- package/dist/types/types/decompilation.d.ts +96 -0
- package/dist/types/types/taint-tracking.d.ts +495 -0
- package/dist/types/types.d.ts +2 -1
- package/package.json +11 -9
package/README.md
CHANGED
|
@@ -12,6 +12,10 @@
|
|
|
12
12
|
<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>
|
|
13
13
|
<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>
|
|
14
14
|
<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>
|
|
15
|
+
<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>
|
|
16
|
+
<br/>
|
|
17
|
+
<a href="https://github.com/sorrycc/awesome-javascript"><img alt="Mentioned in Awesome JavaScript" src="https://awesome.re/mentioned-badge.svg"></a>
|
|
18
|
+
<a href="https://github.com/dzharii/awesome-typescript"><img alt="Mentioned in Awesome TypeScript" src="https://awesome.re/mentioned-badge-flat.svg"></a>
|
|
15
19
|
<br/>
|
|
16
20
|
|
|
17
21
|
</p>
|
|
@@ -25,85 +29,135 @@
|
|
|
25
29
|
<strong>Fast file‑upload malware scanning for Node.js</strong> — optional <strong>YARA</strong> integration, ZIP deep‑inspection, and drop‑in adapters for <em>Express</em>, <em>Koa</em>, and <em>Next.js</em>. Private by design. Typed. Tiny.
|
|
26
30
|
</p>
|
|
27
31
|
|
|
32
|
+
**Keywords:** file upload security · malware detection · YARA · Node.js middleware · Express · Koa · Next.js · ZIP bomb protection
|
|
33
|
+
|
|
28
34
|
|
|
29
35
|
|
|
30
36
|
<p align="center">
|
|
31
|
-
<a href="https://www.npmjs.com/package/pompelmi"><img alt="npm version" src="https://img.shields.io/npm/v/pompelmi?label=
|
|
32
|
-
<a href="https://www.npmjs.com/package/pompelmi"><img alt="npm downloads" src="https://img.shields.io/npm/dm/pompelmi?label=downloads&color=6E9F18"></a>
|
|
37
|
+
<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>
|
|
38
|
+
<a href="https://www.npmjs.com/package/pompelmi"><img alt="npm downloads" src="https://img.shields.io/npm/dm/pompelmi?label=downloads&color=6E9F18&logo=npm"></a>
|
|
39
|
+
<a href="https://www.npmjs.com/package/pompelmi"><img alt="npm weekly downloads" src="https://img.shields.io/npm/dw/pompelmi?label=weekly&color=blue&logo=npm"></a>
|
|
40
|
+
<a href="https://www.npmjs.com/package/pompelmi"><img alt="npm total downloads" src="https://img.shields.io/npm/dt/pompelmi?label=total%20downloads&color=success&logo=npm"></a>
|
|
41
|
+
<img alt="npm bundle size" src="https://img.shields.io/bundlephobia/minzip/pompelmi?label=size&color=success">
|
|
42
|
+
<a href="https://snyk.io/test/github/pompelmi/pompelmi"><img alt="Known Vulnerabilities" src="https://snyk.io/test/github/pompelmi/pompelmi/badge.svg"></a>
|
|
43
|
+
</p>
|
|
44
|
+
|
|
45
|
+
<p align="center">
|
|
33
46
|
<img alt="node" src="https://img.shields.io/badge/node-%3E%3D18-339933?logo=node.js&logoColor=white">
|
|
34
47
|
<img alt="types" src="https://img.shields.io/badge/types-TypeScript-3178C6?logo=typescript&logoColor=white">
|
|
35
|
-
<
|
|
48
|
+
<img alt="ESM" src="https://img.shields.io/badge/ESM%2FCJS-compatible-yellow">
|
|
49
|
+
<a href="https://github.com/pompelmi/pompelmi/blob/main/LICENSE"><img alt="license" src="https://img.shields.io/npm/l/pompelmi?color=blue"></a>
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<p align="center">
|
|
53
|
+
<a href="https://github.com/pompelmi/pompelmi/actions/workflows/ci-release-publish.yml"><img alt="CI Status" src="https://img.shields.io/github/actions/workflow/status/pompelmi/pompelmi/ci-release-publish.yml?branch=main&label=CI&logo=github"></a>
|
|
54
|
+
<a href="https://codecov.io/gh/pompelmi/pompelmi"><img alt="codecov" src="https://codecov.io/gh/pompelmi/pompelmi/branch/main/graph/badge.svg?flag=core"/></a>
|
|
36
55
|
<a href="https://securityscorecards.dev/viewer/?uri=github.com/pompelmi/pompelmi"><img alt="OpenSSF Scorecard" src="https://api.securityscorecards.dev/projects/github.com/pompelmi/pompelmi/badge"/></a>
|
|
37
|
-
|
|
56
|
+
<a href="https://bestpractices.coreinfrastructure.org/projects/9999"><img alt="OpenSSF Best Practices" src="https://img.shields.io/badge/OpenSSF-Best%20Practices-green?logo=openbadges"></a>
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
<p align="center">
|
|
38
60
|
<a href="https://github.com/pompelmi/pompelmi/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/pompelmi/pompelmi?style=social"></a>
|
|
39
|
-
<a href="https://github.com/pompelmi/pompelmi/
|
|
40
|
-
<a href="https://github.com/pompelmi/pompelmi/
|
|
61
|
+
<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>
|
|
62
|
+
<a href="https://github.com/pompelmi/pompelmi/watchers"><img alt="GitHub watchers" src="https://img.shields.io/github/watchers/pompelmi/pompelmi?style=social"></a>
|
|
63
|
+
<a href="https://github.com/pompelmi/pompelmi/issues"><img alt="open issues" src="https://img.shields.io/github/issues/pompelmi/pompelmi?color=orange"></a>
|
|
41
64
|
<img alt="PRs welcome" src="https://img.shields.io/badge/PRs-welcome-brightgreen.svg">
|
|
65
|
+
<a href="https://github.com/pompelmi/pompelmi/commits/main"><img alt="last commit" src="https://img.shields.io/github/last-commit/pompelmi/pompelmi?color=blue"></a>
|
|
66
|
+
<a href="https://github.com/pompelmi/pompelmi/graphs/contributors"><img alt="contributors" src="https://img.shields.io/github/contributors/pompelmi/pompelmi?color=purple"></a>
|
|
42
67
|
</p>
|
|
43
68
|
|
|
44
|
-
<p align="center"
|
|
45
|
-
|
|
46
|
-
<
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
<a href="#production-checklist">Production checklist</a> ·
|
|
55
|
-
<a href="#yara-getting-started">YARA</a> ·
|
|
56
|
-
<a href="#quick-test-no-eicar">Quick test</a> ·
|
|
57
|
-
<a href="#security-notes">Security</a> ·
|
|
58
|
-
<a href="#faq">FAQ</a>
|
|
69
|
+
<p align="center">
|
|
70
|
+
<strong>
|
|
71
|
+
<a href="https://pompelmi.github.io/pompelmi/">📚 Documentation</a> •
|
|
72
|
+
<a href="#installation">💾 Install</a> •
|
|
73
|
+
<a href="#quick-start">⚡ Quick Start</a> •
|
|
74
|
+
<a href="#adapters">🧩 Adapters</a> •
|
|
75
|
+
<a href="#yara-getting-started">🧬 YARA</a> •
|
|
76
|
+
<a href="#github-action">🤖 CI/CD</a> •
|
|
77
|
+
<a href="#faq">❓ FAQ</a>
|
|
78
|
+
</strong>
|
|
59
79
|
</p>
|
|
60
80
|
|
|
81
|
+
<p align="center"><em>Coverage badge reflects core library (<code>src/**</code>); adapters are measured separately.</em></p>
|
|
82
|
+
|
|
61
83
|
<!-- HERO END -->
|
|
62
84
|
|
|
63
85
|
---
|
|
64
86
|
|
|
65
|
-
<
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
87
|
+
<div align="center">
|
|
88
|
+
|
|
89
|
+
### 🎯 Why Choose pompelmi?
|
|
90
|
+
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
| 🔒 Privacy First | ⚡ Lightning Fast | 🎨 Developer Friendly |
|
|
94
|
+
| --- | --- | --- |
|
|
95
|
+
| All scanning happens in-process. No cloud calls, no data leaks. Your files never leave your infrastructure. | In-process scanning with zero network latency. Configurable concurrency for high-throughput scenarios. | TypeScript-first, zero-config defaults, drop-in middleware. Get started in under 5 minutes. |
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## Table of Contents
|
|
100
|
+
|
|
101
|
+
- [Overview](#overview)
|
|
102
|
+
- [Highlights](#highlights)
|
|
103
|
+
- [Why pompelmi](#why-pompelmi)
|
|
104
|
+
- [How it compares](#how-it-compares)
|
|
105
|
+
- [What Developers Say](#what-developers-say)
|
|
106
|
+
- [What Makes pompelmi Special](#what-makes-pompelmi-special)
|
|
107
|
+
- [Use Cases](#use-cases)
|
|
108
|
+
- [Installation](#installation)
|
|
109
|
+
- [Quick Start](#quick-start)
|
|
110
|
+
- [Minimal Node usage](#minimal-node-usage)
|
|
111
|
+
- [Express](#express)
|
|
112
|
+
- [Koa](#koa)
|
|
113
|
+
- [Next.js (App Router)](#nextjs-app-router)
|
|
114
|
+
- [Configuration](#configuration)
|
|
115
|
+
- [Security Notes](#security-notes)
|
|
116
|
+
- [Testing & Development](#testing--development)
|
|
79
117
|
- [FAQ](#faq)
|
|
80
|
-
|
|
118
|
+
- [Contributing](#contributing)
|
|
119
|
+
- [License](#license)
|
|
120
|
+
|
|
121
|
+
---
|
|
81
122
|
|
|
82
123
|
## 🚀 Overview
|
|
83
124
|
|
|
84
125
|
**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.
|
|
85
126
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
127
|
+
### 🎯 Key Features
|
|
128
|
+
|
|
129
|
+
**🔒 Private by design** — no outbound calls; bytes never leave your process
|
|
130
|
+
|
|
131
|
+
**🧩 Composable scanners** — mix heuristics + signatures; set `stopOn` and timeouts
|
|
132
|
+
|
|
133
|
+
**📦 ZIP hardening** — traversal/bomb guards, polyglot & macro hints
|
|
134
|
+
|
|
135
|
+
**🔌 Drop-in adapters** — Express, Koa, Fastify, Next.js
|
|
136
|
+
|
|
137
|
+
**📘 Typed & tiny** — modern TS, minimal surface, tree-shakeable
|
|
138
|
+
|
|
139
|
+
**⚡ Zero dependencies** — core library has minimal deps, fast installation
|
|
91
140
|
|
|
92
141
|
## ✨ Highlights
|
|
93
142
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
143
|
+
**🛡️ Block risky uploads early** — classify uploads as _clean_, _suspicious_, or _malicious_ and stop them at the edge.
|
|
144
|
+
|
|
145
|
+
**✅ Real guards** — extension allow‑list, server‑side MIME sniff (magic bytes), per‑file size caps, and **deep ZIP** traversal with anti‑bomb limits.
|
|
146
|
+
|
|
147
|
+
**🔍 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.
|
|
148
|
+
|
|
149
|
+
**⚙️ Compose scanning** — run multiple scanners in parallel or sequentially with timeouts and short‑circuiting via `composeScanners()`.
|
|
150
|
+
|
|
151
|
+
**☁️ Zero cloud** — scans run in‑process. Keep bytes private. Perfect for GDPR/HIPAA compliance.
|
|
152
|
+
|
|
153
|
+
**👨💻 DX first** — TypeScript types, ESM/CJS builds, tiny API, adapters for popular web frameworks.
|
|
100
154
|
|
|
101
|
-
> Keywords
|
|
155
|
+
> **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, Koa middleware, server-side validation, file integrity check, malware prevention, secure file upload
|
|
102
156
|
|
|
103
157
|
## 🧠 Why pompelmi?
|
|
104
158
|
|
|
105
159
|
- **On‑device, private scanning** – no outbound calls, no data sharing.
|
|
106
|
-
- **Blocks early** – runs
|
|
160
|
+
- **Blocks early** – runs _before_ you write to disk or persist anything.
|
|
107
161
|
- **Fits your stack** – drop‑in adapters for Express, Koa, Next.js (Fastify plugin in alpha).
|
|
108
162
|
- **Defense‑in‑depth** – ZIP traversal limits, ratio caps, server‑side MIME sniffing, size caps.
|
|
109
163
|
- **Pluggable detection** – bring your own engine (e.g., YARA) via a tiny `{ scan(bytes) }` contract.
|
|
@@ -130,17 +184,110 @@
|
|
|
130
184
|
|
|
131
185
|
---
|
|
132
186
|
|
|
187
|
+
## 💬 What Developers Say
|
|
188
|
+
|
|
189
|
+
> "pompelmi made it incredibly easy to add malware scanning to our Express API. The TypeScript support is fantastic!"
|
|
190
|
+
> — Developer using pompelmi in production
|
|
191
|
+
|
|
192
|
+
> "Finally, a file scanning solution that doesn't require sending our users' data to third parties. Perfect for GDPR compliance."
|
|
193
|
+
> — Security Engineer at a healthcare startup
|
|
194
|
+
|
|
195
|
+
> "The YARA integration is seamless. We went from prototype to production in less than a week."
|
|
196
|
+
> — DevSecOps Engineer
|
|
197
|
+
|
|
198
|
+
_Want to share your experience? [Open a discussion](https://github.com/pompelmi/pompelmi/discussions)!_
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 🌟 What Makes pompelmi Special?
|
|
203
|
+
|
|
204
|
+
### 🎯 Developer Experience
|
|
205
|
+
|
|
206
|
+
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.
|
|
207
|
+
|
|
208
|
+
### 🚀 Performance First
|
|
209
|
+
|
|
210
|
+
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.
|
|
211
|
+
|
|
212
|
+
### 🔐 Security Without Compromise
|
|
213
|
+
|
|
214
|
+
Multi-layered defense including MIME type verification (magic bytes), extension validation, size limits, ZIP bomb protection, and optional YARA integration. Each layer is configurable to match your threat model.
|
|
215
|
+
|
|
216
|
+
### 🌍 Privacy Guaranteed
|
|
217
|
+
|
|
218
|
+
Your data never leaves your infrastructure. No telemetry, no cloud dependencies, no third-party API calls. Perfect for regulated industries (healthcare, finance, government) and privacy-conscious applications.
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 💡 Use Cases
|
|
223
|
+
|
|
224
|
+
pompelmi is trusted across diverse industries and use cases:
|
|
225
|
+
|
|
226
|
+
### 🏥 Healthcare (HIPAA Compliance)
|
|
227
|
+
|
|
228
|
+
Scan patient document uploads without sending PHI to third-party services. Keep medical records and imaging files secure on your infrastructure.
|
|
229
|
+
|
|
230
|
+
### 🏦 Financial Services (PCI DSS)
|
|
231
|
+
|
|
232
|
+
Validate customer document uploads (ID verification, tax forms) without exposing sensitive financial data to external APIs.
|
|
233
|
+
|
|
234
|
+
### 🎓 Education Platforms
|
|
235
|
+
|
|
236
|
+
Protect learning management systems from malicious file uploads while maintaining student privacy.
|
|
237
|
+
|
|
238
|
+
### 📱 SaaS Applications
|
|
239
|
+
|
|
240
|
+
Add secure file upload capabilities to your multi-tenant platform with per-tenant policy customization.
|
|
241
|
+
|
|
242
|
+
### 🏢 Enterprise Document Management
|
|
243
|
+
|
|
244
|
+
Scan files at ingestion time for corporate file sharing platforms, wikis, and collaboration tools.
|
|
245
|
+
|
|
246
|
+
### 🎨 Media & Creative Platforms
|
|
247
|
+
|
|
248
|
+
Validate user-generated content uploads (images, videos, documents) before processing and storage.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
133
252
|
## 🔧 Installation
|
|
134
253
|
|
|
254
|
+
<table>
|
|
255
|
+
<tr>
|
|
256
|
+
<td><b>npm</b></td>
|
|
257
|
+
<td><code>npm install pompelmi</code></td>
|
|
258
|
+
</tr>
|
|
259
|
+
<tr>
|
|
260
|
+
<td><b>pnpm</b></td>
|
|
261
|
+
<td><code>pnpm add pompelmi</code></td>
|
|
262
|
+
</tr>
|
|
263
|
+
<tr>
|
|
264
|
+
<td><b>yarn</b></td>
|
|
265
|
+
<td><code>yarn add pompelmi</code></td>
|
|
266
|
+
</tr>
|
|
267
|
+
<tr>
|
|
268
|
+
<td><b>bun</b></td>
|
|
269
|
+
<td><code>bun add pompelmi</code></td>
|
|
270
|
+
</tr>
|
|
271
|
+
</table>
|
|
272
|
+
|
|
273
|
+
### 📦 Optional Framework Adapters
|
|
274
|
+
|
|
135
275
|
```bash
|
|
136
|
-
#
|
|
137
|
-
npm i pompelmi
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
276
|
+
# Express
|
|
277
|
+
npm i @pompelmi/express-middleware
|
|
278
|
+
|
|
279
|
+
# Koa
|
|
280
|
+
npm i @pompelmi/koa-middleware
|
|
281
|
+
|
|
282
|
+
# Next.js
|
|
283
|
+
npm i @pompelmi/next-upload
|
|
284
|
+
|
|
285
|
+
# Fastify (alpha)
|
|
286
|
+
npm i @pompelmi/fastify-plugin
|
|
142
287
|
```
|
|
143
288
|
|
|
289
|
+
> **Note:** Core library works standalone. Install adapters only if using specific frameworks.
|
|
290
|
+
|
|
144
291
|
> Optional dev deps used in the examples:
|
|
145
292
|
>
|
|
146
293
|
> ```bash
|
|
@@ -296,16 +443,27 @@ jobs:
|
|
|
296
443
|
|
|
297
444
|
Use the adapter that matches your web framework. All adapters share the same policy options and scanning contract.
|
|
298
445
|
|
|
446
|
+
<p align="center">
|
|
447
|
+
<img src="https://img.shields.io/badge/Express-✓-000000?style=flat-square&logo=express" alt="Express">
|
|
448
|
+
<img src="https://img.shields.io/badge/Koa-✓-33333D?style=flat-square&logo=koa" alt="Koa">
|
|
449
|
+
<img src="https://img.shields.io/badge/Next.js-✓-000000?style=flat-square&logo=next.js" alt="Next.js">
|
|
450
|
+
<img src="https://img.shields.io/badge/Fastify-alpha-000000?style=flat-square&logo=fastify" alt="Fastify">
|
|
451
|
+
<img src="https://img.shields.io/badge/NestJS-planned-E0234E?style=flat-square&logo=nestjs" alt="NestJS">
|
|
452
|
+
<img src="https://img.shields.io/badge/Remix-planned-000000?style=flat-square&logo=remix" alt="Remix">
|
|
453
|
+
<img src="https://img.shields.io/badge/hapi-planned-F26D00?style=flat-square" alt="hapi">
|
|
454
|
+
<img src="https://img.shields.io/badge/SvelteKit-planned-FF3E00?style=flat-square&logo=svelte" alt="SvelteKit">
|
|
455
|
+
</p>
|
|
456
|
+
|
|
299
457
|
| Framework | Package | Status |
|
|
300
458
|
| --- | --- | --- |
|
|
301
|
-
| Express | `@pompelmi/express-middleware` | alpha |
|
|
302
|
-
| Koa | `@pompelmi/koa-middleware` | alpha |
|
|
303
|
-
| Next.js (App Router) | `@pompelmi/next-upload` | alpha |
|
|
304
|
-
| Fastify | `@pompelmi/fastify-plugin` | alpha |
|
|
305
|
-
| NestJS | nestjs
|
|
306
|
-
| Remix | remix
|
|
307
|
-
| hapi | hapi plugin
|
|
308
|
-
| SvelteKit | sveltekit
|
|
459
|
+
| Express | `@pompelmi/express-middleware` | ✅ alpha |
|
|
460
|
+
| Koa | `@pompelmi/koa-middleware` | ✅ alpha |
|
|
461
|
+
| Next.js (App Router) | `@pompelmi/next-upload` | ✅ alpha |
|
|
462
|
+
| Fastify | `@pompelmi/fastify-plugin` | 🚧 alpha |
|
|
463
|
+
| NestJS | nestjs | 📋 planned |
|
|
464
|
+
| Remix | remix | 📋 planned |
|
|
465
|
+
| hapi | hapi plugin | 📋 planned |
|
|
466
|
+
| SvelteKit | sveltekit | 📋 planned |
|
|
309
467
|
|
|
310
468
|
---
|
|
311
469
|
|
|
@@ -646,6 +804,25 @@ You should see an HTTP **422 Unprocessable Entity** (blocked by policy). Clean f
|
|
|
646
804
|
|
|
647
805
|
---
|
|
648
806
|
|
|
807
|
+
## 🏆 Community & Recognition
|
|
808
|
+
|
|
809
|
+
pompelmi has been featured in leading developer publications and is trusted by teams worldwide for secure file upload handling.
|
|
810
|
+
|
|
811
|
+
<p align="center">
|
|
812
|
+
<img src="https://img.shields.io/badge/Featured%20in-Detection%20Engineering%20Weekly-0A84FF?style=for-the-badge&logo=substack" alt="Detection Engineering">
|
|
813
|
+
<img src="https://img.shields.io/badge/Featured%20in-Node%20Weekly-FF6600?style=for-the-badge&logo=node.js" alt="Node Weekly">
|
|
814
|
+
<img src="https://img.shields.io/badge/Featured%20in-Bytes-111111?style=for-the-badge" alt="Bytes">
|
|
815
|
+
</p>
|
|
816
|
+
|
|
817
|
+
### 🤝 Join the Community
|
|
818
|
+
|
|
819
|
+
- 💬 [GitHub Discussions](https://github.com/pompelmi/pompelmi/discussions) — Ask questions, share ideas
|
|
820
|
+
- 🐛 [Issue Tracker](https://github.com/pompelmi/pompelmi/issues) — Report bugs, request features
|
|
821
|
+
- 📖 [Documentation](https://pompelmi.github.io/pompelmi/) — Comprehensive guides and API reference
|
|
822
|
+
- 🔒 [Security](https://github.com/pompelmi/pompelmi/security) — Report security vulnerabilities privately
|
|
823
|
+
|
|
824
|
+
---
|
|
825
|
+
|
|
649
826
|
## 💬 FAQ
|
|
650
827
|
|
|
651
828
|
**Do I need YARA?**
|
|
@@ -687,6 +864,67 @@ pnpm -r build
|
|
|
687
864
|
pnpm -r lint
|
|
688
865
|
```
|
|
689
866
|
|
|
867
|
+
See [CONTRIBUTING.md](./CONTRIBUTING.md) for detailed guidelines.
|
|
868
|
+
|
|
869
|
+
### 🎖️ Contributors
|
|
870
|
+
|
|
871
|
+
Thanks to all the amazing contributors who have helped make pompelmi better!
|
|
872
|
+
|
|
873
|
+
<!-- Add contributor images here in the future -->
|
|
874
|
+
|
|
875
|
+
---
|
|
876
|
+
|
|
877
|
+
## 🎓 Learning Resources
|
|
878
|
+
|
|
879
|
+
### 📚 Documentation
|
|
880
|
+
|
|
881
|
+
- [Official Docs](https://pompelmi.github.io/pompelmi/) — Complete API reference and guides
|
|
882
|
+
- [Examples](./examples/) — Real-world integration examples
|
|
883
|
+
- [Security Guide](./SECURITY.md) — Security best practices and disclosure policy
|
|
884
|
+
|
|
885
|
+
### 🎥 Tutorials & Articles
|
|
886
|
+
|
|
887
|
+
- **File Upload Security in Node.js** — Best practices guide (coming soon)
|
|
888
|
+
- **Integrating YARA with pompelmi** — Advanced detection setup (coming soon)
|
|
889
|
+
- **Zero-Trust File Uploads** — Architecture patterns (coming soon)
|
|
890
|
+
|
|
891
|
+
### 🛠️ Tools & Integrations
|
|
892
|
+
|
|
893
|
+
- [GitHub Action](https://github.com/pompelmi/pompelmi/tree/main/.github/actions/pompelmi-scan) — CI/CD scanning
|
|
894
|
+
- [Docker Images](https://hub.docker.com/r/pompelmi/pompelmi) — Containerized scanning (coming soon)
|
|
895
|
+
- [Cloud Functions](https://github.com/pompelmi/cloud-functions) — Serverless examples (coming soon)
|
|
896
|
+
|
|
897
|
+
---
|
|
898
|
+
|
|
899
|
+
## 📊 Project Stats
|
|
900
|
+
|
|
901
|
+
<p align="center">
|
|
902
|
+
<img src="https://repobeats.axiom.co/api/embed/YOUR_EMBED_ID.svg" alt="Repobeats analytics" />
|
|
903
|
+
</p>
|
|
904
|
+
|
|
905
|
+
---
|
|
906
|
+
|
|
907
|
+
## 🙏 Acknowledgments
|
|
908
|
+
|
|
909
|
+
pompelmi stands on the shoulders of giants. Special thanks to:
|
|
910
|
+
|
|
911
|
+
- The YARA project for powerful pattern matching
|
|
912
|
+
- The Node.js community for excellent tooling
|
|
913
|
+
- All our contributors and users
|
|
914
|
+
|
|
915
|
+
---
|
|
916
|
+
|
|
917
|
+
## 📞 Support
|
|
918
|
+
|
|
919
|
+
Need help? We're here for you!
|
|
920
|
+
|
|
921
|
+
- 📖 [Documentation](https://pompelmi.github.io/pompelmi/)
|
|
922
|
+
- 💬 [GitHub Discussions](https://github.com/pompelmi/pompelmi/discussions)
|
|
923
|
+
- 🐛 [Issue Tracker](https://github.com/pompelmi/pompelmi/issues)
|
|
924
|
+
- 🔒 [Security](https://github.com/pompelmi/pompelmi/security) (for vulnerabilities)
|
|
925
|
+
|
|
926
|
+
For commercial support and consulting, contact the maintainers.
|
|
927
|
+
|
|
690
928
|
---
|
|
691
929
|
|
|
692
930
|
<p align="right"><a href="#pompelmi">↑ Back to top</a></p>
|