@ai-dossier/core 1.0.1 → 1.0.3
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 +232 -0
- package/dist/formatter/formatter.d.ts.map +1 -1
- package/dist/formatter/formatter.js +2 -0
- package/dist/formatter/formatter.js.map +1 -1
- package/dist/index.d.ts +5 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -1
- package/dist/index.js.map +1 -1
- package/dist/linter/rules/external-references-declared.d.ts +3 -0
- package/dist/linter/rules/external-references-declared.d.ts.map +1 -0
- package/dist/linter/rules/external-references-declared.js +48 -0
- package/dist/linter/rules/external-references-declared.js.map +1 -0
- package/dist/linter/rules/index.d.ts +2 -1
- package/dist/linter/rules/index.d.ts.map +1 -1
- package/dist/linter/rules/index.js +4 -1
- package/dist/linter/rules/index.js.map +1 -1
- package/dist/linter/rules/risk-level-consistency.d.ts.map +1 -1
- package/dist/linter/rules/risk-level-consistency.js +12 -2
- package/dist/linter/rules/risk-level-consistency.js.map +1 -1
- package/dist/linter/rules/tools-check-command.d.ts.map +1 -1
- package/dist/linter/rules/tools-check-command.js.map +1 -1
- package/dist/parser.d.ts +20 -4
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +64 -32
- package/dist/parser.js.map +1 -1
- package/dist/risk-assessment.d.ts +29 -0
- package/dist/risk-assessment.d.ts.map +1 -0
- package/dist/risk-assessment.js +83 -0
- package/dist/risk-assessment.js.map +1 -0
- package/dist/schema/dossier-schema.json +47 -0
- package/dist/signature.d.ts +4 -4
- package/dist/signature.d.ts.map +1 -1
- package/dist/signature.js +9 -8
- package/dist/signature.js.map +1 -1
- package/dist/signers/ed25519.d.ts +2 -2
- package/dist/signers/ed25519.d.ts.map +1 -1
- package/dist/signers/ed25519.js +4 -3
- package/dist/signers/ed25519.js.map +1 -1
- package/dist/signers/index.d.ts +9 -2
- package/dist/signers/index.d.ts.map +1 -1
- package/dist/signers/index.js.map +1 -1
- package/dist/signers/kms.d.ts +2 -2
- package/dist/signers/kms.d.ts.map +1 -1
- package/dist/signers/kms.js +4 -4
- package/dist/signers/kms.js.map +1 -1
- package/dist/types.d.ts +44 -15
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/url-scanner.d.ts +8 -0
- package/dist/utils/url-scanner.d.ts.map +1 -0
- package/dist/utils/url-scanner.js +73 -0
- package/dist/utils/url-scanner.js.map +1 -0
- package/package.json +9 -4
package/dist/parser.js
CHANGED
|
@@ -1,35 +1,71 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/**
|
|
3
|
-
* Dossier parser - extracts frontmatter and body from dossier files
|
|
3
|
+
* Dossier parser - extracts frontmatter and body from dossier files.
|
|
4
|
+
*
|
|
5
|
+
* Supports two frontmatter formats:
|
|
6
|
+
* 1. ---dossier\n{JSON or YAML}\n--- (dossier-specific delimiter)
|
|
7
|
+
* 2. ---\n{YAML}\n--- (standard markdown frontmatter)
|
|
4
8
|
*/
|
|
9
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
10
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
11
|
+
};
|
|
5
12
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.VALID_RISK_LEVELS = exports.VALID_STATUSES = exports.RECOMMENDED_FIELDS = exports.REQUIRED_FIELDS = void 0;
|
|
6
14
|
exports.parseDossierContent = parseDossierContent;
|
|
7
15
|
exports.parseDossierFile = parseDossierFile;
|
|
8
16
|
exports.validateFrontmatter = validateFrontmatter;
|
|
17
|
+
const gray_matter_1 = __importDefault(require("gray-matter"));
|
|
9
18
|
const errors_1 = require("./utils/errors");
|
|
10
19
|
const fs_1 = require("./utils/fs");
|
|
20
|
+
/** Required fields for a valid dossier frontmatter. */
|
|
21
|
+
exports.REQUIRED_FIELDS = ['dossier_schema_version', 'title', 'version'];
|
|
22
|
+
/** Recommended (but optional) fields. */
|
|
23
|
+
exports.RECOMMENDED_FIELDS = ['objective', 'risk_level', 'status'];
|
|
24
|
+
/** Valid values for the status field (Title Case, matching DossierStatus type and schema). */
|
|
25
|
+
exports.VALID_STATUSES = ['Draft', 'Stable', 'Deprecated', 'Experimental'];
|
|
26
|
+
/** Valid values for the risk_level field. */
|
|
27
|
+
exports.VALID_RISK_LEVELS = ['low', 'medium', 'high', 'critical'];
|
|
11
28
|
/**
|
|
12
|
-
* Parse dossier content into frontmatter and body
|
|
13
|
-
*
|
|
29
|
+
* Parse dossier content into frontmatter and body.
|
|
30
|
+
*
|
|
31
|
+
* Accepts both `---dossier` (JSON/YAML) and standard `---` (YAML) frontmatter.
|
|
14
32
|
*/
|
|
15
33
|
function parseDossierContent(content) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
if (!match) {
|
|
19
|
-
throw new Error('Invalid dossier format. Expected:\n---dossier\n{...}\n---\n[body]');
|
|
34
|
+
if (!content || typeof content !== 'string') {
|
|
35
|
+
throw new Error('Invalid dossier format. Content must be a non-empty string.');
|
|
20
36
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
37
|
+
// Normalize dossier-specific delimiters to standard --- for gray-matter
|
|
38
|
+
let normalized = content;
|
|
39
|
+
if (content.startsWith('---dossier')) {
|
|
40
|
+
// Strip "---dossier" and any trailing text on the same line, keep the newline
|
|
41
|
+
const firstNewline = content.indexOf('\n');
|
|
42
|
+
normalized = `---\n${firstNewline >= 0 ? content.slice(firstNewline + 1) : ''}`;
|
|
43
|
+
}
|
|
44
|
+
else if (content.startsWith('---json')) {
|
|
45
|
+
const firstNewline = content.indexOf('\n');
|
|
46
|
+
normalized = `---\n${firstNewline >= 0 ? content.slice(firstNewline + 1) : ''}`;
|
|
47
|
+
}
|
|
48
|
+
else if (!content.startsWith('---')) {
|
|
49
|
+
throw new Error('Invalid dossier format. Expected:\n---dossier\n{...}\n---\n[body]\nor standard YAML frontmatter (---)');
|
|
50
|
+
}
|
|
51
|
+
let parsed;
|
|
24
52
|
try {
|
|
25
|
-
|
|
53
|
+
parsed = (0, gray_matter_1.default)(normalized);
|
|
26
54
|
}
|
|
27
55
|
catch (err) {
|
|
28
|
-
throw new Error(`Failed to parse frontmatter
|
|
56
|
+
throw new Error(`Failed to parse frontmatter: ${(0, errors_1.getErrorMessage)(err)}`);
|
|
57
|
+
}
|
|
58
|
+
// Verify we actually got frontmatter data
|
|
59
|
+
if (!parsed.data || Object.keys(parsed.data).length === 0) {
|
|
60
|
+
// Check if there was frontmatter content at all
|
|
61
|
+
const hasDelimiters = /^---\s*\r?\n[\s\S]*?\r?\n---/.test(normalized);
|
|
62
|
+
if (!hasDelimiters) {
|
|
63
|
+
throw new Error('Invalid dossier format. Expected:\n---dossier\n{...}\n---\n[body]\nor standard YAML frontmatter (---)');
|
|
64
|
+
}
|
|
29
65
|
}
|
|
30
66
|
return {
|
|
31
|
-
frontmatter,
|
|
32
|
-
body,
|
|
67
|
+
frontmatter: parsed.data,
|
|
68
|
+
body: parsed.content,
|
|
33
69
|
raw: content,
|
|
34
70
|
};
|
|
35
71
|
}
|
|
@@ -41,33 +77,29 @@ function parseDossierFile(filePath) {
|
|
|
41
77
|
return parseDossierContent(content);
|
|
42
78
|
}
|
|
43
79
|
/**
|
|
44
|
-
* Validate required frontmatter fields
|
|
80
|
+
* Validate required frontmatter fields.
|
|
81
|
+
*
|
|
82
|
+
* Checks for required fields (dossier_schema_version, title, version),
|
|
83
|
+
* and validates enum values for status and risk_level.
|
|
45
84
|
*/
|
|
46
85
|
function validateFrontmatter(frontmatter) {
|
|
47
86
|
const errors = [];
|
|
48
|
-
const
|
|
49
|
-
'version',
|
|
50
|
-
'protocol_version',
|
|
51
|
-
'title',
|
|
52
|
-
'objective',
|
|
53
|
-
'risk_level',
|
|
54
|
-
'risk_factors',
|
|
55
|
-
'destructive_operations',
|
|
56
|
-
];
|
|
57
|
-
for (const field of required) {
|
|
87
|
+
for (const field of exports.REQUIRED_FIELDS) {
|
|
58
88
|
if (!(field in frontmatter)) {
|
|
59
89
|
errors.push(`Missing required field: ${field}`);
|
|
60
90
|
}
|
|
61
91
|
}
|
|
62
92
|
// Validate risk_level enum
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
errors.push(`Invalid risk_level: ${frontmatter.risk_level}. Must be one of: ${
|
|
93
|
+
if (frontmatter.risk_level &&
|
|
94
|
+
!exports.VALID_RISK_LEVELS.includes(frontmatter.risk_level.toLowerCase())) {
|
|
95
|
+
errors.push(`Invalid risk_level: ${frontmatter.risk_level}. Must be one of: ${exports.VALID_RISK_LEVELS.join(', ')}`);
|
|
66
96
|
}
|
|
67
|
-
// Validate status enum
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
97
|
+
// Validate status enum (case-insensitive)
|
|
98
|
+
if (frontmatter.status) {
|
|
99
|
+
const statusLower = String(frontmatter.status).toLowerCase();
|
|
100
|
+
if (!exports.VALID_STATUSES.some((s) => s.toLowerCase() === statusLower)) {
|
|
101
|
+
errors.push(`Invalid status: ${frontmatter.status}. Must be one of: ${exports.VALID_STATUSES.join(', ')}`);
|
|
102
|
+
}
|
|
71
103
|
}
|
|
72
104
|
return errors;
|
|
73
105
|
}
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":";AAAA;;;;;;GAMG;;;;;;AAwBH,kDA2CC;AAKD,4CAGC;AAQD,kDAgCC;AAjHD,8DAAiC;AAEjC,2CAAiD;AACjD,mCAA8C;AAE9C,uDAAuD;AAC1C,QAAA,eAAe,GAAG,CAAC,wBAAwB,EAAE,OAAO,EAAE,SAAS,CAAU,CAAC;AAEvF,yCAAyC;AAC5B,QAAA,kBAAkB,GAAG,CAAC,WAAW,EAAE,YAAY,EAAE,QAAQ,CAAU,CAAC;AAEjF,8FAA8F;AACjF,QAAA,cAAc,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,cAAc,CAAU,CAAC;AAEzF,6CAA6C;AAChC,QAAA,iBAAiB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAU,CAAC;AAEhF;;;;GAIG;AACH,SAAgB,mBAAmB,CAAC,OAAe;IACjD,IAAI,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC5C,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;IACjF,CAAC;IAED,wEAAwE;IACxE,IAAI,UAAU,GAAG,OAAO,CAAC;IACzB,IAAI,OAAO,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACrC,8EAA8E;QAC9E,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,UAAU,GAAG,QAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF,CAAC;SAAM,IAAI,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,UAAU,GAAG,QAAQ,YAAY,IAAI,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;IAClF,CAAC;SAAM,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;IACJ,CAAC;IAED,IAAI,MAAqC,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,IAAA,qBAAM,EAAC,UAAU,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,gCAAgC,IAAA,wBAAe,EAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC;IAED,0CAA0C;IAC1C,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1D,gDAAgD;QAChD,MAAM,aAAa,GAAG,8BAA8B,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACtE,IAAI,CAAC,aAAa,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CACb,uGAAuG,CACxG,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,WAAW,EAAE,MAAM,CAAC,IAA0B;QAC9C,IAAI,EAAE,MAAM,CAAC,OAAO;QACpB,GAAG,EAAE,OAAO;KACb,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,OAAO,GAAG,IAAA,qBAAgB,EAAC,QAAQ,EAAE,gCAAgC,CAAW,CAAC;IACvF,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;AACtC,CAAC;AAED;;;;;GAKG;AACH,SAAgB,mBAAmB,CAAC,WAA+B;IACjE,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,KAAK,IAAI,uBAAe,EAAE,CAAC;QACpC,IAAI,CAAC,CAAC,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC,2BAA2B,KAAK,EAAE,CAAC,CAAC;QAClD,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,IACE,WAAW,CAAC,UAAU;QACtB,CAAC,yBAAiB,CAAC,QAAQ,CACzB,WAAW,CAAC,UAAU,CAAC,WAAW,EAAwC,CAC3E,EACD,CAAC;QACD,MAAM,CAAC,IAAI,CACT,uBAAuB,WAAW,CAAC,UAAU,qBAAqB,yBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACjG,CAAC;IACJ,CAAC;IAED,0CAA0C;IAC1C,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7D,IAAI,CAAC,sBAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,WAAW,CAAC,EAAE,CAAC;YACjE,MAAM,CAAC,IAAI,CACT,mBAAmB,WAAW,CAAC,MAAM,qBAAqB,sBAAc,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACtF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verification risk assessment for dossiers.
|
|
3
|
+
*
|
|
4
|
+
* Evaluates checksum, signature, and declared risk level
|
|
5
|
+
* to produce a recommendation (ALLOW or BLOCK).
|
|
6
|
+
*/
|
|
7
|
+
import type { DossierFrontmatter } from './types';
|
|
8
|
+
export interface ChecksumStatus {
|
|
9
|
+
passed: boolean;
|
|
10
|
+
}
|
|
11
|
+
export interface SignatureStatus {
|
|
12
|
+
present: boolean;
|
|
13
|
+
verified: boolean;
|
|
14
|
+
trusted: boolean;
|
|
15
|
+
}
|
|
16
|
+
export type VerificationRiskLevel = 'low' | 'medium' | 'high' | 'critical';
|
|
17
|
+
export interface VerificationRiskResult {
|
|
18
|
+
level: VerificationRiskLevel;
|
|
19
|
+
issues: string[];
|
|
20
|
+
recommendation: 'ALLOW' | 'BLOCK';
|
|
21
|
+
}
|
|
22
|
+
export declare function assessVerificationRisk(declaredRiskLevel: string | undefined, checksumResult: ChecksumStatus, signatureResult: SignatureStatus): VerificationRiskResult;
|
|
23
|
+
export interface ContentRiskResult {
|
|
24
|
+
level: VerificationRiskLevel;
|
|
25
|
+
issues: string[];
|
|
26
|
+
undeclaredUrls: string[];
|
|
27
|
+
}
|
|
28
|
+
export declare function assessContentRisk(frontmatter: DossierFrontmatter, body: string): ContentRiskResult;
|
|
29
|
+
//# sourceMappingURL=risk-assessment.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-assessment.d.ts","sourceRoot":"","sources":["../src/risk-assessment.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAGlD,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3E,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,OAAO,GAAG,OAAO,CAAC;CACnC;AAED,wBAAgB,sBAAsB,CACpC,iBAAiB,EAAE,MAAM,GAAG,SAAS,EACrC,cAAc,EAAE,cAAc,EAC9B,eAAe,EAAE,eAAe,GAC/B,sBAAsB,CA2CxB;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,qBAAqB,CAAC;IAC7B,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,wBAAgB,iBAAiB,CAC/B,WAAW,EAAE,kBAAkB,EAC/B,IAAI,EAAE,MAAM,GACX,iBAAiB,CAuCnB"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Verification risk assessment for dossiers.
|
|
4
|
+
*
|
|
5
|
+
* Evaluates checksum, signature, and declared risk level
|
|
6
|
+
* to produce a recommendation (ALLOW or BLOCK).
|
|
7
|
+
*/
|
|
8
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
9
|
+
exports.assessVerificationRisk = assessVerificationRisk;
|
|
10
|
+
exports.assessContentRisk = assessContentRisk;
|
|
11
|
+
const url_scanner_1 = require("./utils/url-scanner");
|
|
12
|
+
function assessVerificationRisk(declaredRiskLevel, checksumResult, signatureResult) {
|
|
13
|
+
const issues = [];
|
|
14
|
+
let riskLevel = 'low';
|
|
15
|
+
let shouldBlock = false;
|
|
16
|
+
// Checksum failure is critical
|
|
17
|
+
if (!checksumResult.passed) {
|
|
18
|
+
issues.push('Checksum verification FAILED - content has been tampered with');
|
|
19
|
+
riskLevel = 'critical';
|
|
20
|
+
shouldBlock = true;
|
|
21
|
+
}
|
|
22
|
+
// Signature issues
|
|
23
|
+
if (signatureResult.present && !signatureResult.verified) {
|
|
24
|
+
issues.push('Signature verification FAILED or could not be verified');
|
|
25
|
+
if (riskLevel !== 'critical')
|
|
26
|
+
riskLevel = 'high';
|
|
27
|
+
shouldBlock = true;
|
|
28
|
+
}
|
|
29
|
+
// Valid signature but not trusted - BLOCK execution
|
|
30
|
+
if (signatureResult.present && signatureResult.verified && !signatureResult.trusted) {
|
|
31
|
+
issues.push('Signature is valid but signer is not in your trusted keys list');
|
|
32
|
+
issues.push('Add the public key to ~/.dossier/trusted-keys.txt to trust this signer');
|
|
33
|
+
if (riskLevel === 'low')
|
|
34
|
+
riskLevel = 'medium';
|
|
35
|
+
shouldBlock = true;
|
|
36
|
+
}
|
|
37
|
+
// No signature on high-risk dossier
|
|
38
|
+
if (!signatureResult.present && declaredRiskLevel === 'high') {
|
|
39
|
+
issues.push('High-risk dossier without signature');
|
|
40
|
+
if (riskLevel === 'low')
|
|
41
|
+
riskLevel = 'medium';
|
|
42
|
+
}
|
|
43
|
+
if (!signatureResult.present && declaredRiskLevel === 'critical') {
|
|
44
|
+
issues.push('Critical-risk dossier without signature');
|
|
45
|
+
if (riskLevel !== 'critical')
|
|
46
|
+
riskLevel = 'high';
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
level: riskLevel,
|
|
50
|
+
issues,
|
|
51
|
+
recommendation: shouldBlock ? 'BLOCK' : 'ALLOW',
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
function assessContentRisk(frontmatter, body) {
|
|
55
|
+
const issues = [];
|
|
56
|
+
let level = 'low';
|
|
57
|
+
const bodyUrls = (0, url_scanner_1.scanBodyForUrls)(body);
|
|
58
|
+
if (bodyUrls.length === 0) {
|
|
59
|
+
return { level, issues, undeclaredUrls: [] };
|
|
60
|
+
}
|
|
61
|
+
const declaredUrls = (0, url_scanner_1.collectDeclaredUrls)(frontmatter);
|
|
62
|
+
const undeclaredUrls = (0, url_scanner_1.findUndeclaredUrls)(bodyUrls, declaredUrls);
|
|
63
|
+
if (undeclaredUrls.length > 0) {
|
|
64
|
+
issues.push(`Body contains ${undeclaredUrls.length} undeclared external URL(s): ${undeclaredUrls.join(', ')}`);
|
|
65
|
+
if (level === 'low')
|
|
66
|
+
level = 'medium';
|
|
67
|
+
}
|
|
68
|
+
if (Array.isArray(frontmatter.external_references)) {
|
|
69
|
+
for (const ref of frontmatter.external_references) {
|
|
70
|
+
if (ref.type === 'script' && ref.trust_level === 'unknown') {
|
|
71
|
+
issues.push(`External script with unknown trust level: ${ref.url} — requires user approval`);
|
|
72
|
+
level = 'high';
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (bodyUrls.length > 0 &&
|
|
77
|
+
Array.isArray(frontmatter.risk_factors) &&
|
|
78
|
+
!frontmatter.risk_factors.includes('network_access')) {
|
|
79
|
+
issues.push('Body contains external URLs but risk_factors does not include "network_access"');
|
|
80
|
+
}
|
|
81
|
+
return { level, issues, undeclaredUrls };
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=risk-assessment.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"risk-assessment.js","sourceRoot":"","sources":["../src/risk-assessment.ts"],"names":[],"mappings":"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"}
|
|
@@ -168,6 +168,53 @@
|
|
|
168
168
|
"minLength": 10
|
|
169
169
|
}
|
|
170
170
|
},
|
|
171
|
+
"content_scope": {
|
|
172
|
+
"type": "string",
|
|
173
|
+
"description": "Whether the dossier body is self-contained or references external URLs",
|
|
174
|
+
"enum": ["self-contained", "references-external"]
|
|
175
|
+
},
|
|
176
|
+
"external_references": {
|
|
177
|
+
"type": "array",
|
|
178
|
+
"description": "Manifest of all external resources referenced in the dossier body",
|
|
179
|
+
"items": {
|
|
180
|
+
"type": "object",
|
|
181
|
+
"required": ["url", "description", "type", "trust_level", "required"],
|
|
182
|
+
"properties": {
|
|
183
|
+
"url": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"description": "URL or URL prefix of the external resource",
|
|
186
|
+
"format": "uri"
|
|
187
|
+
},
|
|
188
|
+
"description": {
|
|
189
|
+
"type": "string",
|
|
190
|
+
"description": "What this external resource is used for"
|
|
191
|
+
},
|
|
192
|
+
"type": {
|
|
193
|
+
"type": "string",
|
|
194
|
+
"description": "Type of external resource",
|
|
195
|
+
"enum": [
|
|
196
|
+
"download",
|
|
197
|
+
"api",
|
|
198
|
+
"documentation",
|
|
199
|
+
"script",
|
|
200
|
+
"config",
|
|
201
|
+
"image",
|
|
202
|
+
"dossier",
|
|
203
|
+
"other"
|
|
204
|
+
]
|
|
205
|
+
},
|
|
206
|
+
"trust_level": {
|
|
207
|
+
"type": "string",
|
|
208
|
+
"description": "Trust level of the external resource",
|
|
209
|
+
"enum": ["trusted", "user-verified", "unknown"]
|
|
210
|
+
},
|
|
211
|
+
"required": {
|
|
212
|
+
"type": "boolean",
|
|
213
|
+
"description": "Whether this external resource is required for execution"
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
},
|
|
171
218
|
"checksum": {
|
|
172
219
|
"type": "object",
|
|
173
220
|
"description": "Content integrity hash (REQUIRED for security - verifies dossier hasn't been tampered with)",
|
package/dist/signature.d.ts
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This module provides signature verification for dossiers,
|
|
5
5
|
* supporting multiple signature schemes (Ed25519 and AWS KMS).
|
|
6
6
|
*/
|
|
7
|
-
import type { SignatureResult } from './signers';
|
|
7
|
+
import type { SignatureResult, VerifyResult } from './signers';
|
|
8
8
|
/**
|
|
9
9
|
* Load trusted keys from file
|
|
10
10
|
* Default location: ~/.dossier/trusted-keys.txt
|
|
@@ -17,11 +17,11 @@ export declare function loadTrustedKeys(filePath?: string): Map<string, string>;
|
|
|
17
17
|
* @param signature - Base64-encoded signature
|
|
18
18
|
* @param publicKey - PEM-format Ed25519 public key
|
|
19
19
|
*/
|
|
20
|
-
export declare function verifyWithEd25519(content: string, signature: string, publicKey: string):
|
|
20
|
+
export declare function verifyWithEd25519(content: string, signature: string, publicKey: string): VerifyResult;
|
|
21
21
|
/**
|
|
22
22
|
* Verify signature using AWS KMS (ECDSA-SHA-256)
|
|
23
23
|
*/
|
|
24
|
-
export declare function verifyWithKms(content: string, signature: string, keyId: string, region?: string): Promise<
|
|
24
|
+
export declare function verifyWithKms(content: string, signature: string, keyId: string, region?: string): Promise<VerifyResult>;
|
|
25
25
|
/**
|
|
26
26
|
* Verify signature using the registry pattern
|
|
27
27
|
* This is a convenience function that encapsulates registry lookup
|
|
@@ -29,5 +29,5 @@ export declare function verifyWithKms(content: string, signature: string, keyId:
|
|
|
29
29
|
* @param signature - Signature result object containing algorithm and signature data
|
|
30
30
|
* @returns Promise<boolean> - true if signature is valid, false otherwise
|
|
31
31
|
*/
|
|
32
|
-
export declare function verifySignature(content: string, signature: SignatureResult): Promise<
|
|
32
|
+
export declare function verifySignature(content: string, signature: SignatureResult): Promise<VerifyResult>;
|
|
33
33
|
//# sourceMappingURL=signature.d.ts.map
|
package/dist/signature.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"signature.d.ts","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAK/D;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CA+BtE;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,GAChB,YAAY,CAkBd;AAED;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,MAAM,SAAc,GACnB,OAAO,CAAC,YAAY,CAAC,CAsBvB;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,eAAe,GACzB,OAAO,CAAC,YAAY,CAAC,CAIvB"}
|
package/dist/signature.js
CHANGED
|
@@ -45,8 +45,8 @@ function loadTrustedKeys(filePath) {
|
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
|
-
catch (
|
|
49
|
-
|
|
48
|
+
catch (err) {
|
|
49
|
+
console.error(`Warning: failed to parse trusted keys: ${err.message}`);
|
|
50
50
|
}
|
|
51
51
|
return keys;
|
|
52
52
|
}
|
|
@@ -67,10 +67,11 @@ function verifyWithEd25519(content, signature, publicKey) {
|
|
|
67
67
|
type: 'spki',
|
|
68
68
|
});
|
|
69
69
|
// Verify Ed25519 signature (algorithm is null for Ed25519)
|
|
70
|
-
|
|
70
|
+
const valid = (0, node_crypto_1.verify)(null, contentBuffer, publicKeyObject, signatureBuffer);
|
|
71
|
+
return { valid };
|
|
71
72
|
}
|
|
72
|
-
catch (
|
|
73
|
-
return false;
|
|
73
|
+
catch (err) {
|
|
74
|
+
return { valid: false, error: err.message };
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
/**
|
|
@@ -90,10 +91,10 @@ async function verifyWithKms(content, signature, keyId, region = 'us-east-1') {
|
|
|
90
91
|
});
|
|
91
92
|
try {
|
|
92
93
|
const response = await client.send(command);
|
|
93
|
-
return response.SignatureValid === true;
|
|
94
|
+
return { valid: response.SignatureValid === true };
|
|
94
95
|
}
|
|
95
|
-
catch (
|
|
96
|
-
return false;
|
|
96
|
+
catch (err) {
|
|
97
|
+
return { valid: false, error: err.message };
|
|
97
98
|
}
|
|
98
99
|
}
|
|
99
100
|
/**
|
package/dist/signature.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAgBH,0CA+BC;AAQD,
|
|
1
|
+
{"version":3,"file":"signature.js","sourceRoot":"","sources":["../src/signature.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Ed25519 Signer and Verifier using Node.js crypto
|
|
3
3
|
*/
|
|
4
|
-
import type { SignatureResult, Signer, Verifier } from './index';
|
|
4
|
+
import type { SignatureResult, Signer, Verifier, VerifyResult } from './index';
|
|
5
5
|
export declare class Ed25519Signer implements Signer {
|
|
6
6
|
readonly algorithm = "ed25519";
|
|
7
7
|
private privateKey;
|
|
@@ -12,6 +12,6 @@ export declare class Ed25519Signer implements Signer {
|
|
|
12
12
|
}
|
|
13
13
|
export declare class Ed25519Verifier implements Verifier {
|
|
14
14
|
supports(algorithm: string): boolean;
|
|
15
|
-
verify(content: string, signature: SignatureResult): Promise<
|
|
15
|
+
verify(content: string, signature: SignatureResult): Promise<VerifyResult>;
|
|
16
16
|
}
|
|
17
17
|
//# sourceMappingURL=ed25519.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../src/signers/ed25519.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"ed25519.d.ts","sourceRoot":"","sources":["../../src/signers/ed25519.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E,qBAAa,aAAc,YAAW,MAAM;IAC1C,QAAQ,CAAC,SAAS,aAAa;IAC/B,OAAO,CAAC,UAAU,CAAY;IAC9B,OAAO,CAAC,YAAY,CAAS;gBAEjB,cAAc,EAAE,MAAM;IAiB5B,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAY/C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAGtC;AAED,qBAAa,eAAgB,YAAW,QAAQ;IAC9C,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;CAmBjF"}
|
package/dist/signers/ed25519.js
CHANGED
|
@@ -55,10 +55,11 @@ class Ed25519Verifier {
|
|
|
55
55
|
type: 'spki',
|
|
56
56
|
});
|
|
57
57
|
// Verify Ed25519 signature
|
|
58
|
-
|
|
58
|
+
const valid = (0, node_crypto_1.verify)(null, contentBuffer, publicKeyObject, signatureBuffer);
|
|
59
|
+
return { valid };
|
|
59
60
|
}
|
|
60
|
-
catch (
|
|
61
|
-
return false;
|
|
61
|
+
catch (err) {
|
|
62
|
+
return { valid: false, error: err.message };
|
|
62
63
|
}
|
|
63
64
|
}
|
|
64
65
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/signers/ed25519.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,6CAA8E;AAC9E,qCAAuC;AAGvC,MAAa,aAAa;IACf,SAAS,GAAG,SAAS,CAAC;IACvB,UAAU,CAAY;IACtB,YAAY,CAAS;IAE7B,YAAY,cAAsB;QAChC,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAA,sBAAY,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAA,8BAAgB,EAAC;YACjC,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAA,6BAAe,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK;SACd,CAAW,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,IAAA,kBAAI,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEnE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,YAAY;YAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AArCD,sCAqCC;AAED,MAAa,eAAe;IAC1B,QAAQ,CAAC,SAAiB;QACxB,OAAO,SAAS,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAA0B;QACtD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEnD,oCAAoC;YACpC,MAAM,eAAe,GAAG,IAAA,6BAAe,EAAC;gBACtC,GAAG,EAAE,SAAS,CAAC,UAAU;gBACzB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,2BAA2B;YAC3B,
|
|
1
|
+
{"version":3,"file":"ed25519.js","sourceRoot":"","sources":["../../src/signers/ed25519.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAGH,6CAA8E;AAC9E,qCAAuC;AAGvC,MAAa,aAAa;IACf,SAAS,GAAG,SAAS,CAAC;IACvB,UAAU,CAAY;IACtB,YAAY,CAAS;IAE7B,YAAY,cAAsB;QAChC,iCAAiC;QACjC,MAAM,aAAa,GAAG,IAAA,sBAAY,EAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QAC3D,IAAI,CAAC,UAAU,GAAG,IAAA,8BAAgB,EAAC;YACjC,GAAG,EAAE,aAAa;YAClB,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,OAAO;SACd,CAAC,CAAC;QAEH,qBAAqB;QACrB,MAAM,SAAS,GAAG,IAAA,6BAAe,EAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QACnD,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,MAAM,CAAC;YACnC,IAAI,EAAE,MAAM;YACZ,MAAM,EAAE,KAAK;SACd,CAAW,CAAC;IACf,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACnD,MAAM,eAAe,GAAG,IAAA,kBAAI,EAAC,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAEnE,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS,EAAE,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC7C,UAAU,EAAE,IAAI,CAAC,YAAY;YAC7B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;CACF;AArCD,sCAqCC;AAED,MAAa,eAAe;IAC1B,QAAQ,CAAC,SAAiB;QACxB,OAAO,SAAS,KAAK,SAAS,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAA0B;QACtD,IAAI,CAAC;YACH,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YACnE,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;YAEnD,oCAAoC;YACpC,MAAM,eAAe,GAAG,IAAA,6BAAe,EAAC;gBACtC,GAAG,EAAE,SAAS,CAAC,UAAU;gBACzB,MAAM,EAAE,KAAK;gBACb,IAAI,EAAE,MAAM;aACb,CAAC,CAAC;YAEH,2BAA2B;YAC3B,MAAM,KAAK,GAAG,IAAA,oBAAM,EAAC,IAAI,EAAE,aAAa,EAAE,eAAe,EAAE,eAAe,CAAC,CAAC;YAC5E,OAAO,EAAE,KAAK,EAAE,CAAC;QACnB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAG,GAAa,CAAC,OAAO,EAAE,CAAC;QACzD,CAAC;IACH,CAAC;CACF;AAxBD,0CAwBC"}
|
package/dist/signers/index.d.ts
CHANGED
|
@@ -23,11 +23,18 @@ export interface Signer {
|
|
|
23
23
|
*/
|
|
24
24
|
readonly algorithm: string;
|
|
25
25
|
}
|
|
26
|
+
export interface VerifyResult {
|
|
27
|
+
valid: boolean;
|
|
28
|
+
error?: string;
|
|
29
|
+
}
|
|
26
30
|
export interface Verifier {
|
|
27
31
|
/**
|
|
28
|
-
* Verify a signature
|
|
32
|
+
* Verify a signature.
|
|
33
|
+
* Returns { valid: true } for valid signatures,
|
|
34
|
+
* { valid: false } for cryptographically invalid signatures,
|
|
35
|
+
* { valid: false, error: '...' } when verification could not complete (e.g., network error).
|
|
29
36
|
*/
|
|
30
|
-
verify(content: string, signature: SignatureResult): Promise<
|
|
37
|
+
verify(content: string, signature: SignatureResult): Promise<VerifyResult>;
|
|
31
38
|
/**
|
|
32
39
|
* Check if this verifier supports the given algorithm
|
|
33
40
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhD;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,QAAQ;IACvB
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,MAAM;IACrB;;OAEG;IACH,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IAEhD;;OAEG;IACH,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,QAAQ;IACvB;;;;;OAKG;IACH,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAE3E;;OAEG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAGD,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AAG/C,OAAO,EACL,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/signers/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAgDH,yBAAyB;AACzB,qCAA2D;AAAlD,wGAAA,aAAa,OAAA;AAAE,0GAAA,eAAe,OAAA;AACvC,6BAA+C;AAAtC,gGAAA,SAAS,OAAA;AAAE,kGAAA,WAAW,OAAA;AAE/B,kBAAkB;AAClB,uCAGoB;AAFlB,+GAAA,mBAAmB,OAAA;AACnB,4GAAA,gBAAgB,OAAA"}
|
package/dist/signers/kms.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* AWS KMS Signer and Verifier
|
|
3
3
|
*/
|
|
4
|
-
import type { SignatureResult, Signer, Verifier } from './index';
|
|
4
|
+
import type { SignatureResult, Signer, Verifier, VerifyResult } from './index';
|
|
5
5
|
export declare class KmsSigner implements Signer {
|
|
6
6
|
private keyId;
|
|
7
7
|
readonly algorithm = "ECDSA-SHA-256";
|
|
@@ -13,7 +13,7 @@ export declare class KmsSigner implements Signer {
|
|
|
13
13
|
export declare class KmsVerifier implements Verifier {
|
|
14
14
|
private clients;
|
|
15
15
|
supports(algorithm: string): boolean;
|
|
16
|
-
verify(content: string, signature: SignatureResult): Promise<
|
|
16
|
+
verify(content: string, signature: SignatureResult): Promise<VerifyResult>;
|
|
17
17
|
private getClient;
|
|
18
18
|
private extractRegionFromArn;
|
|
19
19
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kms.d.ts","sourceRoot":"","sources":["../../src/signers/kms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"kms.d.ts","sourceRoot":"","sources":["../../src/signers/kms.ts"],"names":[],"mappings":"AAAA;;GAEG;AAUH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE/E,qBAAa,SAAU,YAAW,MAAM;IAKpC,OAAO,CAAC,KAAK;IAJf,QAAQ,CAAC,SAAS,mBAAmB;IACrC,OAAO,CAAC,MAAM,CAAY;gBAGhB,KAAK,EAAE,MAAM,EACrB,MAAM,GAAE,MAAoB;IAKxB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAyC/C,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;CAYtC;AAED,qBAAa,WAAY,YAAW,QAAQ;IAC1C,OAAO,CAAC,OAAO,CAAqC;IAEpD,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI9B,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;IA6BhF,OAAO,CAAC,SAAS;IAUjB,OAAO,CAAC,oBAAoB;CAK7B"}
|
package/dist/signers/kms.js
CHANGED
|
@@ -66,7 +66,7 @@ class KmsVerifier {
|
|
|
66
66
|
}
|
|
67
67
|
async verify(content, signature) {
|
|
68
68
|
if (!signature.key_id) {
|
|
69
|
-
return false;
|
|
69
|
+
return { valid: false };
|
|
70
70
|
}
|
|
71
71
|
try {
|
|
72
72
|
// Extract region from key ARN if available, otherwise use default
|
|
@@ -83,10 +83,10 @@ class KmsVerifier {
|
|
|
83
83
|
SigningAlgorithm: client_kms_1.SigningAlgorithmSpec.ECDSA_SHA_256,
|
|
84
84
|
});
|
|
85
85
|
const response = await client.send(command);
|
|
86
|
-
return response.SignatureValid === true;
|
|
86
|
+
return { valid: response.SignatureValid === true };
|
|
87
87
|
}
|
|
88
|
-
catch (
|
|
89
|
-
return false;
|
|
88
|
+
catch (err) {
|
|
89
|
+
return { valid: false, error: err.message };
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
getClient(region) {
|
package/dist/signers/kms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kms.js","sourceRoot":"","sources":["../../src/signers/kms.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,oDAM6B;AAC7B,4CAA6C;AAG7C,MAAa,SAAS;IAKV;IAJD,SAAS,GAAG,eAAe,CAAC;IAC7B,MAAM,CAAY;IAE1B,YACU,KAAa,EACrB,SAAiB,WAAW;QADpB,UAAK,GAAL,KAAK,CAAQ;QAGrB,IAAI,CAAC,MAAM,GAAG,IAAI,sBAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe;QACxB,qCAAqC;QACrC,MAAM,IAAI,GAAG,IAAA,mBAAU,EAAC,OAAO,CAAC,CAAC;QAEjC,2BAA2B;QAC3B,MAAM,WAAW,GAAG,IAAI,wBAAW,CAAC;YAClC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,QAAQ;YACrB,gBAAgB,EAAE,iCAAoB,CAAC,aAAa;SACrD,CAAC,CAAC;QAEH,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACzD,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAC/D,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAEzE,0BAA0B;QAC1B,MAAM,aAAa,GAAG,IAAI,gCAAmB,CAAC;YAC5C,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC7D,IAAI,CAAC,cAAc,CAAC,SAAS,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC;QAElD,OAAO;YACL,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,SAAS;YACT,UAAU,EAAE,SAAS;YACrB,MAAM,EAAE,MAAM;YACd,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY;QAChB,MAAM,OAAO,GAAG,IAAI,gCAAmB,CAAC;YACtC,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;CACF;AAhED,8BAgEC;AAED,MAAa,WAAW;IACd,OAAO,GAA2B,IAAI,GAAG,EAAE,CAAC;IAEpD,QAAQ,CAAC,SAAiB;QACxB,OAAO,SAAS,KAAK,eAAe,CAAC;IACvC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,SAA0B;QACtD,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;YACtB,OAAO,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"kms.js","sourceRoot":"","sources":["../../src/signers/kms.ts"],"names":[],"mappings":"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"}
|