@npm-safe/core-dsh 1.0.5 → 1.0.6
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/LICENSE +204 -204
- package/README.md +40 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +76 -12
- package/dist/index.js.map +1 -1
- package/dist/registry/client.d.ts +7 -0
- package/dist/registry/client.d.ts.map +1 -1
- package/dist/registry/client.js +81 -4
- package/dist/registry/client.js.map +1 -1
- package/dist/scanner/ci-scan.d.ts +2 -0
- package/dist/scanner/ci-scan.d.ts.map +1 -1
- package/dist/scanner/ci-scan.js.map +1 -1
- package/dist/scanner/package-content.d.ts +101 -0
- package/dist/scanner/package-content.d.ts.map +1 -0
- package/dist/scanner/package-content.js +432 -0
- package/dist/scanner/package-content.js.map +1 -0
- package/dist/scanner/static-rules.d.ts +2 -2
- package/dist/scanner/static-rules.d.ts.map +1 -1
- package/dist/scanner/static-rules.js +11 -1
- package/dist/scanner/static-rules.js.map +1 -1
- package/dist/scanner/types.d.ts +23 -0
- package/dist/scanner/types.d.ts.map +1 -1
- package/dist/store/cache-manager.d.ts.map +1 -1
- package/dist/store/cache-manager.js +47 -25
- package/dist/store/cache-manager.js.map +1 -1
- package/dist/store/database.js +6 -6
- package/dist/store/schema.js +75 -75
- package/package.json +17 -2
package/dist/scanner/types.d.ts
CHANGED
|
@@ -62,6 +62,8 @@ export interface ScanFinding {
|
|
|
62
62
|
readonly codeSnippet?: string;
|
|
63
63
|
/** Optional 1-based line number where the issue was detected. */
|
|
64
64
|
readonly lineNumber?: number;
|
|
65
|
+
/** Optional archive-relative path of the file that triggered the finding. */
|
|
66
|
+
readonly filePath?: string;
|
|
65
67
|
/** Optional remediation guidance. */
|
|
66
68
|
readonly recommendation?: string;
|
|
67
69
|
/** Category classifying the nature of this finding. */
|
|
@@ -92,6 +94,25 @@ export interface ScanRule {
|
|
|
92
94
|
*/
|
|
93
95
|
match(readme: string, packageJson?: Record<string, unknown>): ScanFinding[];
|
|
94
96
|
}
|
|
97
|
+
/** Summary of an opt-in deep scan over the published package tarball. */
|
|
98
|
+
export interface ContentScanSummary {
|
|
99
|
+
/** Whether the archive was fully inspected or only partially/unsuccessfully scanned. */
|
|
100
|
+
readonly status: 'complete' | 'partial' | 'failed';
|
|
101
|
+
/** Compressed tarball size in bytes, when a download completed. */
|
|
102
|
+
readonly archiveBytes: number;
|
|
103
|
+
/** Sum of declared regular-file sizes encountered in the archive. */
|
|
104
|
+
readonly unpackedBytes: number;
|
|
105
|
+
/** Number of regular files whose contents were examined. */
|
|
106
|
+
readonly filesScanned: number;
|
|
107
|
+
/** Number of files skipped due to type or configured byte limits. */
|
|
108
|
+
readonly filesSkipped: number;
|
|
109
|
+
/** Whether an npm integrity or shasum value was present and matched. */
|
|
110
|
+
readonly integrityVerified: boolean;
|
|
111
|
+
/** Whether configured safety limits prevented a complete scan. */
|
|
112
|
+
readonly truncated: boolean;
|
|
113
|
+
/** Human-readable reason for a partial or failed scan. */
|
|
114
|
+
readonly reason?: string;
|
|
115
|
+
}
|
|
95
116
|
/**
|
|
96
117
|
* Report produced by a static (non-LLM) scan of a package.
|
|
97
118
|
*/
|
|
@@ -106,6 +127,8 @@ export interface StaticScanReport {
|
|
|
106
127
|
readonly score: number;
|
|
107
128
|
/** Findings produced by the static scan. */
|
|
108
129
|
readonly findings: readonly ScanFinding[];
|
|
130
|
+
/** Tarball content-scan details when deep scanning was requested. */
|
|
131
|
+
readonly contentScan?: ContentScanSummary;
|
|
109
132
|
/** ISO 8601 timestamp of when the scan ran. */
|
|
110
133
|
readonly scannedAt: string;
|
|
111
134
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/scanner/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../src/store/cache-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,KAAK,EAAE,eAAe,EAAqB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,
|
|
1
|
+
{"version":3,"file":"cache-manager.d.ts","sourceRoot":"","sources":["../../src/store/cache-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -120,15 +120,15 @@ export class CacheManager {
|
|
|
120
120
|
// interpolating it into the SQL string is safe.
|
|
121
121
|
const ttlSeconds = this.cacheTtlMs / 1000;
|
|
122
122
|
this.db
|
|
123
|
-
.prepare(`INSERT INTO packages (name, latest_version, description, homepage, repository, registry_data, cached_at, ttl_until)
|
|
124
|
-
VALUES (?, ?, ?, ?, ?, ?, datetime('now'), strftime('%Y-%m-%d %H:%M:%f', 'now', '+${ttlSeconds} seconds'))
|
|
125
|
-
ON CONFLICT(name) DO UPDATE SET
|
|
126
|
-
latest_version = excluded.latest_version,
|
|
127
|
-
description = excluded.description,
|
|
128
|
-
homepage = excluded.homepage,
|
|
129
|
-
repository = excluded.repository,
|
|
130
|
-
registry_data = excluded.registry_data,
|
|
131
|
-
cached_at = datetime('now'),
|
|
123
|
+
.prepare(`INSERT INTO packages (name, latest_version, description, homepage, repository, registry_data, cached_at, ttl_until)
|
|
124
|
+
VALUES (?, ?, ?, ?, ?, ?, datetime('now'), strftime('%Y-%m-%d %H:%M:%f', 'now', '+${ttlSeconds} seconds'))
|
|
125
|
+
ON CONFLICT(name) DO UPDATE SET
|
|
126
|
+
latest_version = excluded.latest_version,
|
|
127
|
+
description = excluded.description,
|
|
128
|
+
homepage = excluded.homepage,
|
|
129
|
+
repository = excluded.repository,
|
|
130
|
+
registry_data = excluded.registry_data,
|
|
131
|
+
cached_at = datetime('now'),
|
|
132
132
|
ttl_until = strftime('%Y-%m-%d %H:%M:%f', 'now', '+${ttlSeconds} seconds')`)
|
|
133
133
|
.run(meta.name, latest, description, homepage, repository, registryData);
|
|
134
134
|
}
|
|
@@ -158,12 +158,32 @@ export class CacheManager {
|
|
|
158
158
|
catch {
|
|
159
159
|
findings = [];
|
|
160
160
|
}
|
|
161
|
+
let contentScan;
|
|
162
|
+
if (row.summary) {
|
|
163
|
+
try {
|
|
164
|
+
const parsed = JSON.parse(row.summary);
|
|
165
|
+
if (parsed &&
|
|
166
|
+
(parsed.status === "complete" || parsed.status === "partial" || parsed.status === "failed") &&
|
|
167
|
+
typeof parsed.archiveBytes === "number" &&
|
|
168
|
+
typeof parsed.unpackedBytes === "number" &&
|
|
169
|
+
typeof parsed.filesScanned === "number" &&
|
|
170
|
+
typeof parsed.filesSkipped === "number" &&
|
|
171
|
+
typeof parsed.integrityVerified === "boolean" &&
|
|
172
|
+
typeof parsed.truncated === "boolean") {
|
|
173
|
+
contentScan = parsed;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
contentScan = undefined;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
161
180
|
return {
|
|
162
181
|
packageName: row.package_name,
|
|
163
182
|
version: row.version,
|
|
164
183
|
overallLevel: scoreToLevel(row.overall_score),
|
|
165
184
|
score: row.overall_score,
|
|
166
185
|
findings,
|
|
186
|
+
contentScan,
|
|
167
187
|
scannedAt: row.scanned_at,
|
|
168
188
|
};
|
|
169
189
|
}
|
|
@@ -177,14 +197,16 @@ export class CacheManager {
|
|
|
177
197
|
*/
|
|
178
198
|
async setSecurityReport(report) {
|
|
179
199
|
const findingsJson = JSON.stringify(report.findings);
|
|
200
|
+
const summary = report.contentScan ? JSON.stringify(report.contentScan) : "";
|
|
180
201
|
this.db
|
|
181
|
-
.prepare(`INSERT INTO security_reports (package_name, version, scan_type, overall_score, findings_json, summary, scanned_at)
|
|
182
|
-
VALUES (?, ?, 'static', ?, ?,
|
|
183
|
-
ON CONFLICT(package_name, version, scan_type) DO UPDATE SET
|
|
184
|
-
overall_score = excluded.overall_score,
|
|
185
|
-
findings_json = excluded.findings_json,
|
|
202
|
+
.prepare(`INSERT INTO security_reports (package_name, version, scan_type, overall_score, findings_json, summary, scanned_at)
|
|
203
|
+
VALUES (?, ?, 'static', ?, ?, ?, ?)
|
|
204
|
+
ON CONFLICT(package_name, version, scan_type) DO UPDATE SET
|
|
205
|
+
overall_score = excluded.overall_score,
|
|
206
|
+
findings_json = excluded.findings_json,
|
|
207
|
+
summary = excluded.summary,
|
|
186
208
|
scanned_at = excluded.scanned_at`)
|
|
187
|
-
.run(report.packageName, report.version, report.score, findingsJson, report.scannedAt);
|
|
209
|
+
.run(report.packageName, report.version, report.score, findingsJson, summary, report.scannedAt);
|
|
188
210
|
}
|
|
189
211
|
async getLlmScanReport(pkg, version) {
|
|
190
212
|
const row = this.db
|
|
@@ -230,12 +252,12 @@ export class CacheManager {
|
|
|
230
252
|
suspiciousScore: report.suspiciousScore,
|
|
231
253
|
});
|
|
232
254
|
this.db
|
|
233
|
-
.prepare(`INSERT INTO security_reports (package_name, version, scan_type, overall_score, findings_json, summary, scanned_at)
|
|
234
|
-
VALUES (?, ?, 'llm', ?, ?, ?, ?)
|
|
235
|
-
ON CONFLICT(package_name, version, scan_type) DO UPDATE SET
|
|
236
|
-
overall_score = excluded.overall_score,
|
|
237
|
-
findings_json = excluded.findings_json,
|
|
238
|
-
summary = excluded.summary,
|
|
255
|
+
.prepare(`INSERT INTO security_reports (package_name, version, scan_type, overall_score, findings_json, summary, scanned_at)
|
|
256
|
+
VALUES (?, ?, 'llm', ?, ?, ?, ?)
|
|
257
|
+
ON CONFLICT(package_name, version, scan_type) DO UPDATE SET
|
|
258
|
+
overall_score = excluded.overall_score,
|
|
259
|
+
findings_json = excluded.findings_json,
|
|
260
|
+
summary = excluded.summary,
|
|
239
261
|
scanned_at = excluded.scanned_at`)
|
|
240
262
|
.run(packageName, version, report.suspiciousScore ?? 0, JSON.stringify(report.findings ?? []), summary, report.scannedAt ?? new Date().toISOString());
|
|
241
263
|
}
|
|
@@ -319,12 +341,12 @@ export class CacheManager {
|
|
|
319
341
|
*/
|
|
320
342
|
async addHistoryEntry(entry) {
|
|
321
343
|
this.db
|
|
322
|
-
.prepare(`INSERT INTO check_history (package_name, level, score, timestamp)
|
|
344
|
+
.prepare(`INSERT INTO check_history (package_name, level, score, timestamp)
|
|
323
345
|
VALUES (?, ?, ?, ?)`)
|
|
324
346
|
.run(entry.packageName, entry.level, entry.score, entry.timestamp);
|
|
325
347
|
this.db
|
|
326
|
-
.prepare(`DELETE FROM check_history WHERE id NOT IN (
|
|
327
|
-
SELECT id FROM check_history ORDER BY timestamp DESC, id DESC LIMIT ${MAX_CHECK_HISTORY}
|
|
348
|
+
.prepare(`DELETE FROM check_history WHERE id NOT IN (
|
|
349
|
+
SELECT id FROM check_history ORDER BY timestamp DESC, id DESC LIMIT ${MAX_CHECK_HISTORY}
|
|
328
350
|
)`)
|
|
329
351
|
.run();
|
|
330
352
|
}
|
|
@@ -334,7 +356,7 @@ export class CacheManager {
|
|
|
334
356
|
async getHistory(limit) {
|
|
335
357
|
const capped = Math.max(1, Math.min(limit ?? MAX_CHECK_HISTORY, MAX_CHECK_HISTORY));
|
|
336
358
|
const rows = this.db
|
|
337
|
-
.prepare(`SELECT package_name, level, score, timestamp FROM check_history
|
|
359
|
+
.prepare(`SELECT package_name, level, score, timestamp FROM check_history
|
|
338
360
|
ORDER BY timestamp DESC, id DESC LIMIT ${capped}`)
|
|
339
361
|
.all();
|
|
340
362
|
return rows.map((r) => ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../src/store/cache-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EACL,aAAa,
|
|
1
|
+
{"version":3,"file":"cache-manager.js","sourceRoot":"","sources":["../../src/store/cache-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/store/database.js
CHANGED
|
@@ -106,12 +106,12 @@ export class DatabaseManager {
|
|
|
106
106
|
runMigrations() {
|
|
107
107
|
const db = this.db;
|
|
108
108
|
try {
|
|
109
|
-
db.exec(`
|
|
110
|
-
CREATE TABLE IF NOT EXISTS _migrations (
|
|
111
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
112
|
-
name TEXT NOT NULL UNIQUE,
|
|
113
|
-
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
114
|
-
);
|
|
109
|
+
db.exec(`
|
|
110
|
+
CREATE TABLE IF NOT EXISTS _migrations (
|
|
111
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
112
|
+
name TEXT NOT NULL UNIQUE,
|
|
113
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
114
|
+
);
|
|
115
115
|
`);
|
|
116
116
|
}
|
|
117
117
|
catch (err) {
|
package/dist/store/schema.js
CHANGED
|
@@ -18,71 +18,71 @@
|
|
|
18
18
|
* 6. translations - cached translation results
|
|
19
19
|
* 7. _migrations - migration tracking (internal)
|
|
20
20
|
*/
|
|
21
|
-
export const SCHEMA_SQL = `
|
|
22
|
-
-- 1. packages table - cached npm package metadata
|
|
23
|
-
CREATE TABLE IF NOT EXISTS packages (
|
|
24
|
-
name TEXT PRIMARY KEY,
|
|
25
|
-
latest_version TEXT NOT NULL,
|
|
26
|
-
description TEXT DEFAULT '',
|
|
27
|
-
homepage TEXT DEFAULT '',
|
|
28
|
-
repository TEXT DEFAULT '',
|
|
29
|
-
registry_data TEXT DEFAULT '{}', -- JSON blob of raw registry response
|
|
30
|
-
cached_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
31
|
-
ttl_until TEXT NOT NULL -- cache expiry timestamp
|
|
32
|
-
);
|
|
33
|
-
|
|
34
|
-
-- 2. package_versions table - version info
|
|
35
|
-
CREATE TABLE IF NOT EXISTS package_versions (
|
|
36
|
-
package_name TEXT NOT NULL REFERENCES packages(name) ON DELETE CASCADE,
|
|
37
|
-
version TEXT NOT NULL,
|
|
38
|
-
publish_time TEXT,
|
|
39
|
-
has_readme INTEGER NOT NULL DEFAULT 0,
|
|
40
|
-
integrity TEXT,
|
|
41
|
-
PRIMARY KEY (package_name, version)
|
|
42
|
-
);
|
|
43
|
-
|
|
44
|
-
-- 3. security_reports table - scan results
|
|
45
|
-
CREATE TABLE IF NOT EXISTS security_reports (
|
|
46
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
47
|
-
package_name TEXT NOT NULL REFERENCES packages(name) ON DELETE CASCADE,
|
|
48
|
-
version TEXT NOT NULL,
|
|
49
|
-
scan_type TEXT NOT NULL CHECK(scan_type IN ('static', 'llm')),
|
|
50
|
-
overall_score INTEGER NOT NULL CHECK(overall_score >= 0 AND overall_score <= 100),
|
|
51
|
-
findings_json TEXT DEFAULT '[]', -- JSON array of ScanFinding objects
|
|
52
|
-
summary TEXT DEFAULT '',
|
|
53
|
-
scanned_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
54
|
-
UNIQUE(package_name, version, scan_type)
|
|
55
|
-
);
|
|
56
|
-
|
|
57
|
-
-- 4. watchlist table - user-tracked packages
|
|
58
|
-
CREATE TABLE IF NOT EXISTS watchlist (
|
|
59
|
-
package_name TEXT PRIMARY KEY REFERENCES packages(name) ON DELETE CASCADE,
|
|
60
|
-
added_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
61
|
-
);
|
|
62
|
-
|
|
63
|
-
-- 5. settings table - key-value configuration
|
|
64
|
-
CREATE TABLE IF NOT EXISTS settings (
|
|
65
|
-
key TEXT PRIMARY KEY,
|
|
66
|
-
value TEXT NOT NULL
|
|
67
|
-
);
|
|
68
|
-
|
|
69
|
-
-- 6. translations table - cached translations
|
|
70
|
-
CREATE TABLE IF NOT EXISTS translations (
|
|
71
|
-
source_hash TEXT PRIMARY KEY,
|
|
72
|
-
source_text TEXT NOT NULL,
|
|
73
|
-
target_lang TEXT NOT NULL,
|
|
74
|
-
translated_text TEXT NOT NULL,
|
|
75
|
-
provider TEXT NOT NULL,
|
|
76
|
-
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
77
|
-
);
|
|
78
|
-
CREATE INDEX IF NOT EXISTS idx_translations_lang ON translations(target_lang);
|
|
79
|
-
|
|
80
|
-
-- 7. _migrations table - migration tracking
|
|
81
|
-
CREATE TABLE IF NOT EXISTS _migrations (
|
|
82
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
83
|
-
name TEXT NOT NULL UNIQUE,
|
|
84
|
-
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
85
|
-
);
|
|
21
|
+
export const SCHEMA_SQL = `
|
|
22
|
+
-- 1. packages table - cached npm package metadata
|
|
23
|
+
CREATE TABLE IF NOT EXISTS packages (
|
|
24
|
+
name TEXT PRIMARY KEY,
|
|
25
|
+
latest_version TEXT NOT NULL,
|
|
26
|
+
description TEXT DEFAULT '',
|
|
27
|
+
homepage TEXT DEFAULT '',
|
|
28
|
+
repository TEXT DEFAULT '',
|
|
29
|
+
registry_data TEXT DEFAULT '{}', -- JSON blob of raw registry response
|
|
30
|
+
cached_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
31
|
+
ttl_until TEXT NOT NULL -- cache expiry timestamp
|
|
32
|
+
);
|
|
33
|
+
|
|
34
|
+
-- 2. package_versions table - version info
|
|
35
|
+
CREATE TABLE IF NOT EXISTS package_versions (
|
|
36
|
+
package_name TEXT NOT NULL REFERENCES packages(name) ON DELETE CASCADE,
|
|
37
|
+
version TEXT NOT NULL,
|
|
38
|
+
publish_time TEXT,
|
|
39
|
+
has_readme INTEGER NOT NULL DEFAULT 0,
|
|
40
|
+
integrity TEXT,
|
|
41
|
+
PRIMARY KEY (package_name, version)
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
-- 3. security_reports table - scan results
|
|
45
|
+
CREATE TABLE IF NOT EXISTS security_reports (
|
|
46
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
47
|
+
package_name TEXT NOT NULL REFERENCES packages(name) ON DELETE CASCADE,
|
|
48
|
+
version TEXT NOT NULL,
|
|
49
|
+
scan_type TEXT NOT NULL CHECK(scan_type IN ('static', 'llm')),
|
|
50
|
+
overall_score INTEGER NOT NULL CHECK(overall_score >= 0 AND overall_score <= 100),
|
|
51
|
+
findings_json TEXT DEFAULT '[]', -- JSON array of ScanFinding objects
|
|
52
|
+
summary TEXT DEFAULT '',
|
|
53
|
+
scanned_at TEXT NOT NULL DEFAULT (datetime('now')),
|
|
54
|
+
UNIQUE(package_name, version, scan_type)
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
-- 4. watchlist table - user-tracked packages
|
|
58
|
+
CREATE TABLE IF NOT EXISTS watchlist (
|
|
59
|
+
package_name TEXT PRIMARY KEY REFERENCES packages(name) ON DELETE CASCADE,
|
|
60
|
+
added_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
-- 5. settings table - key-value configuration
|
|
64
|
+
CREATE TABLE IF NOT EXISTS settings (
|
|
65
|
+
key TEXT PRIMARY KEY,
|
|
66
|
+
value TEXT NOT NULL
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
-- 6. translations table - cached translations
|
|
70
|
+
CREATE TABLE IF NOT EXISTS translations (
|
|
71
|
+
source_hash TEXT PRIMARY KEY,
|
|
72
|
+
source_text TEXT NOT NULL,
|
|
73
|
+
target_lang TEXT NOT NULL,
|
|
74
|
+
translated_text TEXT NOT NULL,
|
|
75
|
+
provider TEXT NOT NULL,
|
|
76
|
+
created_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
77
|
+
);
|
|
78
|
+
CREATE INDEX IF NOT EXISTS idx_translations_lang ON translations(target_lang);
|
|
79
|
+
|
|
80
|
+
-- 7. _migrations table - migration tracking
|
|
81
|
+
CREATE TABLE IF NOT EXISTS _migrations (
|
|
82
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
83
|
+
name TEXT NOT NULL UNIQUE,
|
|
84
|
+
applied_at TEXT NOT NULL DEFAULT (datetime('now'))
|
|
85
|
+
);
|
|
86
86
|
`;
|
|
87
87
|
/**
|
|
88
88
|
* Returns ordered list of migration file names to apply.
|
|
@@ -103,16 +103,16 @@ export function getMigrationList() {
|
|
|
103
103
|
* history straight from the shared database.
|
|
104
104
|
*/
|
|
105
105
|
export function getCheckHistoryMigration() {
|
|
106
|
-
return `
|
|
107
|
-
-- 8. check_history table - persistent check history
|
|
108
|
-
CREATE TABLE IF NOT EXISTS check_history (
|
|
109
|
-
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
110
|
-
package_name TEXT NOT NULL,
|
|
111
|
-
level TEXT NOT NULL,
|
|
112
|
-
score INTEGER NOT NULL CHECK(score >= 0 AND score <= 100),
|
|
113
|
-
timestamp TEXT NOT NULL
|
|
114
|
-
);
|
|
115
|
-
CREATE INDEX IF NOT EXISTS idx_check_history_timestamp ON check_history(timestamp DESC);
|
|
106
|
+
return `
|
|
107
|
+
-- 8. check_history table - persistent check history
|
|
108
|
+
CREATE TABLE IF NOT EXISTS check_history (
|
|
109
|
+
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
110
|
+
package_name TEXT NOT NULL,
|
|
111
|
+
level TEXT NOT NULL,
|
|
112
|
+
score INTEGER NOT NULL CHECK(score >= 0 AND score <= 100),
|
|
113
|
+
timestamp TEXT NOT NULL
|
|
114
|
+
);
|
|
115
|
+
CREATE INDEX IF NOT EXISTS idx_check_history_timestamp ON check_history(timestamp DESC);
|
|
116
116
|
`;
|
|
117
117
|
}
|
|
118
118
|
/**
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@npm-safe/core-dsh",
|
|
3
|
-
"version": "1.0.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.6",
|
|
4
|
+
"description": "Local-first npm supply-chain security engine with metadata and deep tarball scanning",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -15,6 +15,21 @@
|
|
|
15
15
|
"files": [
|
|
16
16
|
"dist"
|
|
17
17
|
],
|
|
18
|
+
"keywords": [
|
|
19
|
+
"npm-security",
|
|
20
|
+
"supply-chain-security",
|
|
21
|
+
"dependency-security",
|
|
22
|
+
"malware-detection",
|
|
23
|
+
"static-analysis",
|
|
24
|
+
"security-scanner"
|
|
25
|
+
],
|
|
26
|
+
"engines": {
|
|
27
|
+
"node": ">=22.19"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public",
|
|
31
|
+
"provenance": true
|
|
32
|
+
},
|
|
18
33
|
"dependencies": {
|
|
19
34
|
"better-sqlite3": "^12.11.1",
|
|
20
35
|
"undici": "^8.10.0"
|