verification-layer 0.24.2 → 0.24.4
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 +5 -5
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/scan-code.d.ts +12 -0
- package/dist/scan-code.d.ts.map +1 -0
- package/dist/scan-code.js +34 -0
- package/dist/scan-code.js.map +1 -0
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# vlayer - HIPAA Compliance on Every Commit
|
|
2
2
|
|
|
3
|
-
**Automated security scanning for healthcare applications.**
|
|
3
|
+
**Automated security scanning for healthcare applications.** 140+ detection rules that catch PHI exposures, missing encryption, and access control gaps before they reach production. HIPAA 2026 ready - 15/15 requirements covered.
|
|
4
4
|
|
|
5
5
|
[](https://github.com/Francosimon53/verification-layer/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/verification-layer)
|
|
@@ -36,7 +36,7 @@ npx vlayer scan ./src --fix
|
|
|
36
36
|
vlayer is a CLI tool and platform that scans your codebase for HIPAA compliance issues. Built for healthcare startups and developers building applications that handle Protected Health Information (PHI).
|
|
37
37
|
|
|
38
38
|
**🎯 Key Features:**
|
|
39
|
-
- **
|
|
39
|
+
- **140+ detection rules** across 5 HIPAA categories (PHI exposure, encryption, access control, audit logging, data retention)
|
|
40
40
|
- **HIPAA 2026 NPRM ready** - Covers all 15 new cybersecurity requirements
|
|
41
41
|
- **10 training modules** with 45+ questions and SHA-256 verifiable certificates
|
|
42
42
|
- **5 HIPAA templates** - IRP, BAA, NPP, Security Officer role, Physical Safeguards
|
|
@@ -62,7 +62,7 @@ vlayer is a CLI tool and platform that scans your codebase for HIPAA compliance
|
|
|
62
62
|
|
|
63
63
|
| Plan | Price | Features |
|
|
64
64
|
|------|-------|----------|
|
|
65
|
-
| **Open Source** | **$0/forever** | Full scanner, CLI,
|
|
65
|
+
| **Open Source** | **$0/forever** | Full scanner, CLI, 140+ rules, compliance scoring, training module, community support |
|
|
66
66
|
| **Pro** | **$49/month** ($490/year) | Everything in OSS + GitHub App with PR comments, pre-commit hooks, historical scan dashboard, HIPAA document templates, team tracking (10 users), PDF audit reports, email support (48h SLA). **14-day free trial** |
|
|
67
67
|
| **Enterprise** | **Custom** | Everything in Pro + custom detection rules, self-hosted deployment, SSO/RBAC integration, dedicated compliance consultant, custom training modules, audit preparation support, priority support (4h SLA). Contact: [sales@vlayer.app](mailto:sales@vlayer.app) |
|
|
68
68
|
|
|
@@ -100,7 +100,7 @@ The new HIPAA Security Rule (NPRM 2026) adds 15 cybersecurity requirements. vlay
|
|
|
100
100
|
|
|
101
101
|
## 📊 Detection Categories
|
|
102
102
|
|
|
103
|
-
vlayer scans for **
|
|
103
|
+
vlayer scans for **140+ security patterns** across 5 HIPAA compliance categories:
|
|
104
104
|
|
|
105
105
|
| Category | Rules | What it detects |
|
|
106
106
|
|----------|-------|-----------------|
|
|
@@ -117,7 +117,7 @@ vlayer scans for **163+ security patterns** across 12 HIPAA compliance categorie
|
|
|
117
117
|
| **Session Management** | 8 | Weak session configs, missing timeouts, insecure cookies |
|
|
118
118
|
| **Third-Party Risk** | 6 | Unsafe vendor integrations, missing BAAs, unvetted third-party code |
|
|
119
119
|
|
|
120
|
-
**Total:
|
|
120
|
+
**Total: 140+ rules**
|
|
121
121
|
|
|
122
122
|
---
|
|
123
123
|
|
package/dist/index.d.ts
CHANGED
|
@@ -8,4 +8,6 @@ export { calculateComplianceScore, formatScore, getScoreColor, getScoreSummary }
|
|
|
8
8
|
export type { Finding, ScanResult, ScanOptions, Report, ReportOptions, Scanner, Severity, ComplianceCategory, Confidence, VlayerConfig, AcknowledgedFinding, ContextLine, CompiledCustomRule, CustomRuleFix, ComplianceScore, GroupedFinding, Occurrence, } from './types.js';
|
|
9
9
|
export type { LoadRulesResult, RuleLoadError, CustomRuleDefinition, RulesFile } from './rules/index.js';
|
|
10
10
|
export type { Baseline, BaselineEntry } from './baseline.js';
|
|
11
|
+
export { scanCode } from './scan-code.js';
|
|
12
|
+
export type { CodeInput, ScanCodeOptions } from './scan-code.js';
|
|
11
13
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9G,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxG,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAC9G,YAAY,EACV,OAAO,EACP,UAAU,EACV,WAAW,EACX,MAAM,EACN,aAAa,EACb,OAAO,EACP,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,mBAAmB,EACnB,WAAW,EACX,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,EACd,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,eAAe,EAAE,aAAa,EAAE,oBAAoB,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACxG,YAAY,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -5,4 +5,5 @@ export { loadBaseline, saveBaseline, applyBaseline, generateFindingHash } from '
|
|
|
5
5
|
export { checkInlineSuppression, applyInlineSuppressions } from './suppression.js';
|
|
6
6
|
export { checkAcknowledgment, applyAcknowledgments } from './acknowledgments.js';
|
|
7
7
|
export { calculateComplianceScore, formatScore, getScoreColor, getScoreSummary } from './compliance-score.js';
|
|
8
|
+
export { scanCode } from './scan-code.js';
|
|
8
9
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC3F,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAC;AAC/F,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACnF,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EAAE,wBAAwB,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAsB9G,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { ScanResult, ScanOptions } from './types.js';
|
|
2
|
+
export interface CodeInput {
|
|
3
|
+
filename: string;
|
|
4
|
+
content: string;
|
|
5
|
+
}
|
|
6
|
+
export interface ScanCodeOptions {
|
|
7
|
+
files: CodeInput[];
|
|
8
|
+
categories?: ScanOptions['categories'];
|
|
9
|
+
minConfidence?: ScanOptions['minConfidence'];
|
|
10
|
+
}
|
|
11
|
+
export declare function scanCode(options: ScanCodeOptions): Promise<ScanResult>;
|
|
12
|
+
//# sourceMappingURL=scan-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-code.d.ts","sourceRoot":"","sources":["../src/scan-code.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE1D,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,UAAU,CAAC,EAAE,WAAW,CAAC,YAAY,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,WAAW,CAAC,eAAe,CAAC,CAAC;CAC9C;AAED,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,UAAU,CAAC,CA+B5E"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
import * as os from 'os';
|
|
4
|
+
import { scan } from './scan.js';
|
|
5
|
+
export async function scanCode(options) {
|
|
6
|
+
// Create temp directory
|
|
7
|
+
const tmpDir = await fs.mkdtemp(path.join(os.tmpdir(), 'vlayer-api-'));
|
|
8
|
+
try {
|
|
9
|
+
// Write files to temp directory preserving structure
|
|
10
|
+
for (const file of options.files) {
|
|
11
|
+
const filePath = path.join(tmpDir, file.filename);
|
|
12
|
+
const dir = path.dirname(filePath);
|
|
13
|
+
await fs.mkdir(dir, { recursive: true });
|
|
14
|
+
await fs.writeFile(filePath, file.content, 'utf-8');
|
|
15
|
+
}
|
|
16
|
+
// Run scan on temp directory
|
|
17
|
+
const result = await scan({
|
|
18
|
+
path: tmpDir,
|
|
19
|
+
categories: options.categories,
|
|
20
|
+
minConfidence: options.minConfidence,
|
|
21
|
+
});
|
|
22
|
+
// Clean file paths — remove temp dir prefix
|
|
23
|
+
result.findings = result.findings.map(f => ({
|
|
24
|
+
...f,
|
|
25
|
+
file: f.file.replace(tmpDir + path.sep, ''),
|
|
26
|
+
}));
|
|
27
|
+
return result;
|
|
28
|
+
}
|
|
29
|
+
finally {
|
|
30
|
+
// Always clean up temp files
|
|
31
|
+
await fs.rm(tmpDir, { recursive: true, force: true });
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=scan-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan-code.js","sourceRoot":"","sources":["../src/scan-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,OAAwB;IACrD,wBAAwB;IACxB,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;IAEvE,IAAI,CAAC;QACH,qDAAqD;QACrD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACtD,CAAC;QAED,6BAA6B;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC;YACxB,IAAI,EAAE,MAAM;YACZ,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,aAAa,EAAE,OAAO,CAAC,aAAa;SACrC,CAAC,CAAC;QAEH,4CAA4C;QAC5C,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC1C,GAAG,CAAC;YACJ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;SAC5C,CAAC,CAAC,CAAC;QAEJ,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,6BAA6B;QAC7B,MAAM,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACxD,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "verification-layer",
|
|
3
|
-
"version": "0.24.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "0.24.4",
|
|
4
|
+
"description": "Open-source HIPAA compliance scanner for healthcare code. 140+ rules, 5 HIPAA categories. CLI + CI/CD + VS Code.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
7
|
"bin": {
|
|
@@ -49,7 +49,9 @@
|
|
|
49
49
|
"hipaa-compliance",
|
|
50
50
|
"baseline",
|
|
51
51
|
"suppression",
|
|
52
|
-
"github-action"
|
|
52
|
+
"github-action",
|
|
53
|
+
"devsecops",
|
|
54
|
+
"healthtech"
|
|
53
55
|
],
|
|
54
56
|
"author": "Simon Franco",
|
|
55
57
|
"license": "MIT",
|