@clawbureau/clawverify-core 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +40 -0
- package/dist/crypto.d.ts +27 -0
- package/dist/crypto.d.ts.map +1 -0
- package/dist/crypto.js +124 -0
- package/dist/crypto.js.map +1 -0
- package/dist/index.d.ts +27 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/jcs.d.ts +13 -0
- package/dist/jcs.d.ts.map +1 -0
- package/dist/jcs.js +43 -0
- package/dist/jcs.js.map +1 -0
- package/dist/model-identity.d.ts +46 -0
- package/dist/model-identity.d.ts.map +1 -0
- package/dist/model-identity.js +233 -0
- package/dist/model-identity.js.map +1 -0
- package/dist/schema-registry.d.ts +99 -0
- package/dist/schema-registry.d.ts.map +1 -0
- package/dist/schema-registry.js +259 -0
- package/dist/schema-registry.js.map +1 -0
- package/dist/schema-validation.d.ts +35 -0
- package/dist/schema-validation.d.ts.map +1 -0
- package/dist/schema-validation.js +156 -0
- package/dist/schema-validation.js.map +1 -0
- package/dist/schema-validators.generated.d.ts +158 -0
- package/dist/schema-validators.generated.d.ts.map +1 -0
- package/dist/schema-validators.generated.js +19186 -0
- package/dist/schema-validators.generated.js.map +1 -0
- package/dist/types.d.ts +910 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +33 -0
- package/dist/types.js.map +1 -0
- package/dist/verify-audit-result-attestation.d.ts +32 -0
- package/dist/verify-audit-result-attestation.d.ts.map +1 -0
- package/dist/verify-audit-result-attestation.js +396 -0
- package/dist/verify-audit-result-attestation.js.map +1 -0
- package/dist/verify-derivation-attestation.d.ts +30 -0
- package/dist/verify-derivation-attestation.d.ts.map +1 -0
- package/dist/verify-derivation-attestation.js +371 -0
- package/dist/verify-derivation-attestation.js.map +1 -0
- package/dist/verify-execution-attestation.d.ts +32 -0
- package/dist/verify-execution-attestation.d.ts.map +1 -0
- package/dist/verify-execution-attestation.js +578 -0
- package/dist/verify-execution-attestation.js.map +1 -0
- package/dist/verify-export-bundle.d.ts +14 -0
- package/dist/verify-export-bundle.d.ts.map +1 -0
- package/dist/verify-export-bundle.js +307 -0
- package/dist/verify-export-bundle.js.map +1 -0
- package/dist/verify-log-inclusion-proof.d.ts +16 -0
- package/dist/verify-log-inclusion-proof.d.ts.map +1 -0
- package/dist/verify-log-inclusion-proof.js +216 -0
- package/dist/verify-log-inclusion-proof.js.map +1 -0
- package/dist/verify-proof-bundle.d.ts +48 -0
- package/dist/verify-proof-bundle.d.ts.map +1 -0
- package/dist/verify-proof-bundle.js +1708 -0
- package/dist/verify-proof-bundle.js.map +1 -0
- package/dist/verify-receipt.d.ts +30 -0
- package/dist/verify-receipt.d.ts.map +1 -0
- package/dist/verify-receipt.js +408 -0
- package/dist/verify-receipt.js.map +1 -0
- package/dist/verify-web-receipt.d.ts +21 -0
- package/dist/verify-web-receipt.d.ts.map +1 -0
- package/dist/verify-web-receipt.js +341 -0
- package/dist/verify-web-receipt.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Registry
|
|
3
|
+
* Fail-closed validation: reject any unknown version/type/algorithm
|
|
4
|
+
* CVF-US-009: Schema registry allowlist for deterministic validation
|
|
5
|
+
*/
|
|
6
|
+
import { type EnvelopeVersion, type EnvelopeType, type Algorithm, type HashAlgorithm } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Schema allowlist entry - defines an allowed schema ID with its version
|
|
9
|
+
*/
|
|
10
|
+
export interface SchemaAllowlistEntry {
|
|
11
|
+
/** Schema identifier (e.g., 'artifact_signature') */
|
|
12
|
+
schema_id: string;
|
|
13
|
+
/** Current active version */
|
|
14
|
+
version: string;
|
|
15
|
+
/** All supported versions for this schema */
|
|
16
|
+
supported_versions: string[];
|
|
17
|
+
/** Schema status */
|
|
18
|
+
status: 'active' | 'deprecated';
|
|
19
|
+
/** When this schema was added to the allowlist */
|
|
20
|
+
added_at: string;
|
|
21
|
+
/** Optional deprecation date for deprecated schemas */
|
|
22
|
+
deprecated_at?: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Allowlisted schema IDs and their versions
|
|
26
|
+
* This is the authoritative list - any schema not in this list is rejected
|
|
27
|
+
*/
|
|
28
|
+
export declare const SCHEMA_ALLOWLIST: readonly SchemaAllowlistEntry[];
|
|
29
|
+
/**
|
|
30
|
+
* Check if a schema ID is in the allowlist
|
|
31
|
+
* @param schemaId - The schema ID to check
|
|
32
|
+
* @returns true if the schema ID is allowlisted, false otherwise
|
|
33
|
+
*/
|
|
34
|
+
export declare function isAllowlistedSchemaId(schemaId: unknown): schemaId is string;
|
|
35
|
+
/**
|
|
36
|
+
* Check if a schema ID + version combination is allowlisted
|
|
37
|
+
* @param schemaId - The schema ID to check
|
|
38
|
+
* @param version - The version to check
|
|
39
|
+
* @returns true if the combination is allowlisted, false otherwise
|
|
40
|
+
*/
|
|
41
|
+
export declare function isAllowlistedSchemaVersion(schemaId: string, version: string): boolean;
|
|
42
|
+
/**
|
|
43
|
+
* Get the allowlist entry for a schema ID
|
|
44
|
+
* @param schemaId - The schema ID to look up
|
|
45
|
+
* @returns The allowlist entry or undefined if not found
|
|
46
|
+
*/
|
|
47
|
+
export declare function getSchemaAllowlistEntry(schemaId: string): SchemaAllowlistEntry | undefined;
|
|
48
|
+
/**
|
|
49
|
+
* Get all allowlisted schema IDs
|
|
50
|
+
* @returns Array of all allowlisted schema IDs
|
|
51
|
+
*/
|
|
52
|
+
export declare function getAllowlistedSchemaIds(): string[];
|
|
53
|
+
/**
|
|
54
|
+
* Validate schema ID and version against the allowlist
|
|
55
|
+
* Returns detailed error information for fail-closed behavior
|
|
56
|
+
*/
|
|
57
|
+
export interface SchemaValidationResult {
|
|
58
|
+
valid: boolean;
|
|
59
|
+
schema_id?: string;
|
|
60
|
+
version?: string;
|
|
61
|
+
error_code?: 'UNKNOWN_SCHEMA_ID' | 'UNKNOWN_SCHEMA_VERSION' | 'DEPRECATED_SCHEMA';
|
|
62
|
+
error_message?: string;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Validate a schema ID and version against the allowlist
|
|
66
|
+
* @param schemaId - The schema ID to validate
|
|
67
|
+
* @param version - The version to validate (optional, defaults to checking if ID exists)
|
|
68
|
+
* @returns Validation result with error details if invalid
|
|
69
|
+
*/
|
|
70
|
+
export declare function validateSchemaAllowlist(schemaId: string, version?: string): SchemaValidationResult;
|
|
71
|
+
/**
|
|
72
|
+
* Check if an envelope version is allowlisted
|
|
73
|
+
*/
|
|
74
|
+
export declare function isAllowedVersion(version: unknown): version is EnvelopeVersion;
|
|
75
|
+
/**
|
|
76
|
+
* Check if an envelope type is allowlisted
|
|
77
|
+
*/
|
|
78
|
+
export declare function isAllowedType(type: unknown): type is EnvelopeType;
|
|
79
|
+
/**
|
|
80
|
+
* Check if a signature algorithm is allowlisted
|
|
81
|
+
*/
|
|
82
|
+
export declare function isAllowedAlgorithm(algorithm: unknown): algorithm is Algorithm;
|
|
83
|
+
/**
|
|
84
|
+
* Check if a hash algorithm is allowlisted
|
|
85
|
+
*/
|
|
86
|
+
export declare function isAllowedHashAlgorithm(hashAlgorithm: unknown): hashAlgorithm is HashAlgorithm;
|
|
87
|
+
/**
|
|
88
|
+
* Validate DID format (did:key:... or did:web:...)
|
|
89
|
+
*/
|
|
90
|
+
export declare function isValidDidFormat(did: unknown): did is string;
|
|
91
|
+
/**
|
|
92
|
+
* Validate ISO 8601 date format
|
|
93
|
+
*/
|
|
94
|
+
export declare function isValidIsoDate(date: unknown): date is string;
|
|
95
|
+
/**
|
|
96
|
+
* Validate base64url string format
|
|
97
|
+
*/
|
|
98
|
+
export declare function isValidBase64Url(str: unknown): str is string;
|
|
99
|
+
//# sourceMappingURL=schema-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-registry.d.ts","sourceRoot":"","sources":["../src/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAKL,KAAK,eAAe,EACpB,KAAK,YAAY,EACjB,KAAK,SAAS,EACd,KAAK,aAAa,EACnB,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,qDAAqD;IACrD,SAAS,EAAE,MAAM,CAAC;IAClB,6BAA6B;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,oBAAoB;IACpB,MAAM,EAAE,QAAQ,GAAG,YAAY,CAAC;IAChC,kDAAkD;IAClD,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,SAAS,oBAAoB,EA0GlD,CAAC;AASX;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,OAAO,GAAG,QAAQ,IAAI,MAAM,CAG3E;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAIT;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,GACf,oBAAoB,GAAG,SAAS,CAElC;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAElD;AAED;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,mBAAmB,GAAG,wBAAwB,GAAG,mBAAmB,CAAC;IAClF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,MAAM,GACf,sBAAsB,CA0CxB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,IAAI,eAAe,CAK7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,YAAY,CAKjE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,SAAS,IAAI,SAAS,CAK7E;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,OAAO,GACrB,aAAa,IAAI,aAAa,CAKhC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAI5D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,MAAM,CAI5D;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,IAAI,MAAM,CAI5D"}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Schema Registry
|
|
3
|
+
* Fail-closed validation: reject any unknown version/type/algorithm
|
|
4
|
+
* CVF-US-009: Schema registry allowlist for deterministic validation
|
|
5
|
+
*/
|
|
6
|
+
import { ENVELOPE_VERSIONS, ENVELOPE_TYPES, ALGORITHMS, HASH_ALGORITHMS, } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Allowlisted schema IDs and their versions
|
|
9
|
+
* This is the authoritative list - any schema not in this list is rejected
|
|
10
|
+
*/
|
|
11
|
+
export const SCHEMA_ALLOWLIST = [
|
|
12
|
+
{
|
|
13
|
+
schema_id: 'artifact_signature',
|
|
14
|
+
version: '1',
|
|
15
|
+
supported_versions: ['1'],
|
|
16
|
+
status: 'active',
|
|
17
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
schema_id: 'message_signature',
|
|
21
|
+
version: '1',
|
|
22
|
+
supported_versions: ['1'],
|
|
23
|
+
status: 'active',
|
|
24
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
schema_id: 'gateway_receipt',
|
|
28
|
+
version: '1',
|
|
29
|
+
supported_versions: ['1'],
|
|
30
|
+
status: 'active',
|
|
31
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
schema_id: 'web_receipt',
|
|
35
|
+
version: '1',
|
|
36
|
+
supported_versions: ['1'],
|
|
37
|
+
status: 'active',
|
|
38
|
+
added_at: '2026-02-11T00:00:00Z',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
schema_id: 'proof_bundle',
|
|
42
|
+
version: '1',
|
|
43
|
+
supported_versions: ['1'],
|
|
44
|
+
status: 'active',
|
|
45
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
schema_id: 'event_chain',
|
|
49
|
+
version: '1',
|
|
50
|
+
supported_versions: ['1'],
|
|
51
|
+
status: 'active',
|
|
52
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
schema_id: 'owner_attestation',
|
|
56
|
+
version: '1',
|
|
57
|
+
supported_versions: ['1'],
|
|
58
|
+
status: 'active',
|
|
59
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
60
|
+
},
|
|
61
|
+
{
|
|
62
|
+
schema_id: 'commit_proof',
|
|
63
|
+
version: '1',
|
|
64
|
+
supported_versions: ['1'],
|
|
65
|
+
status: 'active',
|
|
66
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
schema_id: 'execution_attestation',
|
|
70
|
+
version: '1',
|
|
71
|
+
supported_versions: ['1'],
|
|
72
|
+
status: 'active',
|
|
73
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
74
|
+
},
|
|
75
|
+
{
|
|
76
|
+
schema_id: 'prompt_pack',
|
|
77
|
+
version: '1',
|
|
78
|
+
supported_versions: ['1'],
|
|
79
|
+
status: 'active',
|
|
80
|
+
added_at: '2026-02-09T00:00:00Z',
|
|
81
|
+
},
|
|
82
|
+
{
|
|
83
|
+
schema_id: 'system_prompt_report',
|
|
84
|
+
version: '1',
|
|
85
|
+
supported_versions: ['1'],
|
|
86
|
+
status: 'active',
|
|
87
|
+
added_at: '2026-02-09T00:00:00Z',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
schema_id: 'derivation_attestation',
|
|
91
|
+
version: '1',
|
|
92
|
+
supported_versions: ['1'],
|
|
93
|
+
status: 'active',
|
|
94
|
+
added_at: '2026-02-11T00:00:00Z',
|
|
95
|
+
},
|
|
96
|
+
{
|
|
97
|
+
schema_id: 'audit_result_attestation',
|
|
98
|
+
version: '1',
|
|
99
|
+
supported_versions: ['1'],
|
|
100
|
+
status: 'active',
|
|
101
|
+
added_at: '2026-02-11T00:00:00Z',
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
schema_id: 'export_bundle',
|
|
105
|
+
version: '1',
|
|
106
|
+
supported_versions: ['1'],
|
|
107
|
+
status: 'active',
|
|
108
|
+
added_at: '2026-02-11T00:00:00Z',
|
|
109
|
+
},
|
|
110
|
+
{
|
|
111
|
+
schema_id: 'scoped_token',
|
|
112
|
+
version: '1',
|
|
113
|
+
supported_versions: ['1'],
|
|
114
|
+
status: 'active',
|
|
115
|
+
added_at: '2026-01-01T00:00:00Z',
|
|
116
|
+
},
|
|
117
|
+
];
|
|
118
|
+
/**
|
|
119
|
+
* Map of schema_id to allowlist entry for O(1) lookup
|
|
120
|
+
*/
|
|
121
|
+
const SCHEMA_ALLOWLIST_MAP = new Map(SCHEMA_ALLOWLIST.map((entry) => [entry.schema_id, entry]));
|
|
122
|
+
/**
|
|
123
|
+
* Check if a schema ID is in the allowlist
|
|
124
|
+
* @param schemaId - The schema ID to check
|
|
125
|
+
* @returns true if the schema ID is allowlisted, false otherwise
|
|
126
|
+
*/
|
|
127
|
+
export function isAllowlistedSchemaId(schemaId) {
|
|
128
|
+
if (typeof schemaId !== 'string')
|
|
129
|
+
return false;
|
|
130
|
+
return SCHEMA_ALLOWLIST_MAP.has(schemaId);
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Check if a schema ID + version combination is allowlisted
|
|
134
|
+
* @param schemaId - The schema ID to check
|
|
135
|
+
* @param version - The version to check
|
|
136
|
+
* @returns true if the combination is allowlisted, false otherwise
|
|
137
|
+
*/
|
|
138
|
+
export function isAllowlistedSchemaVersion(schemaId, version) {
|
|
139
|
+
const entry = SCHEMA_ALLOWLIST_MAP.get(schemaId);
|
|
140
|
+
if (!entry)
|
|
141
|
+
return false;
|
|
142
|
+
return entry.supported_versions.includes(version);
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Get the allowlist entry for a schema ID
|
|
146
|
+
* @param schemaId - The schema ID to look up
|
|
147
|
+
* @returns The allowlist entry or undefined if not found
|
|
148
|
+
*/
|
|
149
|
+
export function getSchemaAllowlistEntry(schemaId) {
|
|
150
|
+
return SCHEMA_ALLOWLIST_MAP.get(schemaId);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Get all allowlisted schema IDs
|
|
154
|
+
* @returns Array of all allowlisted schema IDs
|
|
155
|
+
*/
|
|
156
|
+
export function getAllowlistedSchemaIds() {
|
|
157
|
+
return Array.from(SCHEMA_ALLOWLIST_MAP.keys());
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Validate a schema ID and version against the allowlist
|
|
161
|
+
* @param schemaId - The schema ID to validate
|
|
162
|
+
* @param version - The version to validate (optional, defaults to checking if ID exists)
|
|
163
|
+
* @returns Validation result with error details if invalid
|
|
164
|
+
*/
|
|
165
|
+
export function validateSchemaAllowlist(schemaId, version) {
|
|
166
|
+
// Check if schema ID is allowlisted
|
|
167
|
+
if (!isAllowlistedSchemaId(schemaId)) {
|
|
168
|
+
return {
|
|
169
|
+
valid: false,
|
|
170
|
+
schema_id: schemaId,
|
|
171
|
+
error_code: 'UNKNOWN_SCHEMA_ID',
|
|
172
|
+
error_message: `Schema ID '${schemaId}' is not in the allowlist. Allowlisted schemas: ${getAllowlistedSchemaIds().join(', ')}`,
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
const entry = getSchemaAllowlistEntry(schemaId);
|
|
176
|
+
// Check if version is provided and valid
|
|
177
|
+
if (version !== undefined) {
|
|
178
|
+
if (!entry.supported_versions.includes(version)) {
|
|
179
|
+
return {
|
|
180
|
+
valid: false,
|
|
181
|
+
schema_id: schemaId,
|
|
182
|
+
version: version,
|
|
183
|
+
error_code: 'UNKNOWN_SCHEMA_VERSION',
|
|
184
|
+
error_message: `Version '${version}' is not supported for schema '${schemaId}'. Supported versions: ${entry.supported_versions.join(', ')}`,
|
|
185
|
+
};
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
// Check if schema is deprecated (warning, but still valid)
|
|
189
|
+
if (entry.status === 'deprecated') {
|
|
190
|
+
return {
|
|
191
|
+
valid: true,
|
|
192
|
+
schema_id: schemaId,
|
|
193
|
+
version: version ?? entry.version,
|
|
194
|
+
error_code: 'DEPRECATED_SCHEMA',
|
|
195
|
+
error_message: `Schema '${schemaId}' is deprecated as of ${entry.deprecated_at}`,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
return {
|
|
199
|
+
valid: true,
|
|
200
|
+
schema_id: schemaId,
|
|
201
|
+
version: version ?? entry.version,
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Check if an envelope version is allowlisted
|
|
206
|
+
*/
|
|
207
|
+
export function isAllowedVersion(version) {
|
|
208
|
+
return (typeof version === 'string' &&
|
|
209
|
+
ENVELOPE_VERSIONS.includes(version));
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Check if an envelope type is allowlisted
|
|
213
|
+
*/
|
|
214
|
+
export function isAllowedType(type) {
|
|
215
|
+
return (typeof type === 'string' &&
|
|
216
|
+
ENVELOPE_TYPES.includes(type));
|
|
217
|
+
}
|
|
218
|
+
/**
|
|
219
|
+
* Check if a signature algorithm is allowlisted
|
|
220
|
+
*/
|
|
221
|
+
export function isAllowedAlgorithm(algorithm) {
|
|
222
|
+
return (typeof algorithm === 'string' &&
|
|
223
|
+
ALGORITHMS.includes(algorithm));
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Check if a hash algorithm is allowlisted
|
|
227
|
+
*/
|
|
228
|
+
export function isAllowedHashAlgorithm(hashAlgorithm) {
|
|
229
|
+
return (typeof hashAlgorithm === 'string' &&
|
|
230
|
+
HASH_ALGORITHMS.includes(hashAlgorithm));
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Validate DID format (did:key:... or did:web:...)
|
|
234
|
+
*/
|
|
235
|
+
export function isValidDidFormat(did) {
|
|
236
|
+
if (typeof did !== 'string')
|
|
237
|
+
return false;
|
|
238
|
+
// Basic DID format validation
|
|
239
|
+
return /^did:(key|web):[a-zA-Z0-9._%-]+$/.test(did);
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Validate ISO 8601 date format
|
|
243
|
+
*/
|
|
244
|
+
export function isValidIsoDate(date) {
|
|
245
|
+
if (typeof date !== 'string')
|
|
246
|
+
return false;
|
|
247
|
+
const parsed = Date.parse(date);
|
|
248
|
+
return !isNaN(parsed);
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Validate base64url string format
|
|
252
|
+
*/
|
|
253
|
+
export function isValidBase64Url(str) {
|
|
254
|
+
if (typeof str !== 'string')
|
|
255
|
+
return false;
|
|
256
|
+
// Base64url uses A-Z, a-z, 0-9, -, _
|
|
257
|
+
return /^[A-Za-z0-9_-]+$/.test(str);
|
|
258
|
+
}
|
|
259
|
+
//# sourceMappingURL=schema-registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-registry.js","sourceRoot":"","sources":["../src/schema-registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,UAAU,EACV,eAAe,GAKhB,MAAM,YAAY,CAAC;AAoBpB;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoC;IAC/D;QACE,SAAS,EAAE,oBAAoB;QAC/B,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,mBAAmB;QAC9B,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,iBAAiB;QAC5B,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,mBAAmB;QAC9B,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,uBAAuB;QAClC,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,aAAa;QACxB,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,sBAAsB;QACjC,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,wBAAwB;QACnC,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,0BAA0B;QACrC,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,eAAe;QAC1B,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;IACD;QACE,SAAS,EAAE,cAAc;QACzB,OAAO,EAAE,GAAG;QACZ,kBAAkB,EAAE,CAAC,GAAG,CAAC;QACzB,MAAM,EAAE,QAAQ;QAChB,QAAQ,EAAE,sBAAsB;KACjC;CACO,CAAC;AAEX;;GAEG;AACH,MAAM,oBAAoB,GAAsC,IAAI,GAAG,CACrE,gBAAgB,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAC1D,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAiB;IACrD,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC/C,OAAO,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,QAAgB,EAChB,OAAe;IAEf,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACjD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB;IAEhB,OAAO,oBAAoB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;AAC5C,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB;IACrC,OAAO,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAC,CAAC;AACjD,CAAC;AAcD;;;;;GAKG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAgB,EAChB,OAAgB;IAEhB,oCAAoC;IACpC,IAAI,CAAC,qBAAqB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACrC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,mBAAmB;YAC/B,aAAa,EAAE,cAAc,QAAQ,mDAAmD,uBAAuB,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SAC/H,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,uBAAuB,CAAC,QAAQ,CAAE,CAAC;IAEjD,yCAAyC;IACzC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,IAAI,CAAC,KAAK,CAAC,kBAAkB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAChD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,SAAS,EAAE,QAAQ;gBACnB,OAAO,EAAE,OAAO;gBAChB,UAAU,EAAE,wBAAwB;gBACpC,aAAa,EAAE,YAAY,OAAO,kCAAkC,QAAQ,0BAA0B,KAAK,CAAC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;aAC5I,CAAC;QACJ,CAAC;IACH,CAAC;IAED,2DAA2D;IAC3D,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QAClC,OAAO;YACL,KAAK,EAAE,IAAI;YACX,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;YACjC,UAAU,EAAE,mBAAmB;YAC/B,aAAa,EAAE,WAAW,QAAQ,yBAAyB,KAAK,CAAC,aAAa,EAAE;SACjF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,KAAK,EAAE,IAAI;QACX,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,OAAO,IAAI,KAAK,CAAC,OAAO;KAClC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,OAAO,CACL,OAAO,OAAO,KAAK,QAAQ;QAC1B,iBAAuC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC3D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,CACL,OAAO,IAAI,KAAK,QAAQ;QACvB,cAAoC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACrD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAAkB;IACnD,OAAO,CACL,OAAO,SAAS,KAAK,QAAQ;QAC5B,UAAgC,CAAC,QAAQ,CAAC,SAAS,CAAC,CACtD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,aAAsB;IAEtB,OAAO,CACL,OAAO,aAAa,KAAK,QAAQ;QAChC,eAAqC,CAAC,QAAQ,CAAC,aAAa,CAAC,CAC/D,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,8BAA8B;IAC9B,OAAO,kCAAkC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAa;IAC1C,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAChC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,GAAY;IAC3C,IAAI,OAAO,GAAG,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC;IAC1C,qCAAqC;IACrC,OAAO,kBAAkB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict JSON Schema validation (Ajv) — Workers-safe
|
|
3
|
+
* CVF-US-024
|
|
4
|
+
*
|
|
5
|
+
* Cloudflare Workers disallow runtime code generation (new Function/eval).
|
|
6
|
+
* Ajv normally compiles schemas using generated functions, so we use Ajv
|
|
7
|
+
* "standalone" output generated ahead-of-time:
|
|
8
|
+
* services/clawverify/src/schema-validators.generated.ts
|
|
9
|
+
*/
|
|
10
|
+
import type { ErrorObject } from 'ajv';
|
|
11
|
+
export interface SchemaValidationFailure {
|
|
12
|
+
valid: false;
|
|
13
|
+
message: string;
|
|
14
|
+
field?: string;
|
|
15
|
+
/** Raw Ajv errors (for debugging). */
|
|
16
|
+
errors?: ErrorObject[] | null;
|
|
17
|
+
}
|
|
18
|
+
export type SchemaValidationResult = {
|
|
19
|
+
valid: true;
|
|
20
|
+
} | SchemaValidationFailure;
|
|
21
|
+
export declare function getSchemaValidationInitError(): string | null;
|
|
22
|
+
export declare function isSchemaValidationReady(): boolean;
|
|
23
|
+
export declare function validateProofBundleEnvelopeV1(envelope: unknown): SchemaValidationResult;
|
|
24
|
+
export declare function validateGatewayReceiptEnvelopeV1(envelope: unknown): SchemaValidationResult;
|
|
25
|
+
export declare function validateWebReceiptEnvelopeV1(envelope: unknown): SchemaValidationResult;
|
|
26
|
+
export declare function validateExecutionAttestationEnvelopeV1(envelope: unknown): SchemaValidationResult;
|
|
27
|
+
export declare function validateDerivationAttestationEnvelopeV1(envelope: unknown): SchemaValidationResult;
|
|
28
|
+
export declare function validateAuditResultAttestationEnvelopeV1(envelope: unknown): SchemaValidationResult;
|
|
29
|
+
export declare function validateLogInclusionProofV1(value: unknown): SchemaValidationResult;
|
|
30
|
+
export declare function validateExportBundleV1(value: unknown): SchemaValidationResult;
|
|
31
|
+
export declare function validateModelIdentityV1(value: unknown): SchemaValidationResult;
|
|
32
|
+
export declare function validateUrmV1(urm: unknown): SchemaValidationResult;
|
|
33
|
+
export declare function validatePromptPackV1(value: unknown): SchemaValidationResult;
|
|
34
|
+
export declare function validateSystemPromptReportV1(value: unknown): SchemaValidationResult;
|
|
35
|
+
//# sourceMappingURL=schema-validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validation.d.ts","sourceRoot":"","sources":["../src/schema-validation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AAgBvC,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,MAAM,CAAC,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;CAC/B;AAED,MAAM,MAAM,sBAAsB,GAC9B;IAAE,KAAK,EAAE,IAAI,CAAA;CAAE,GACf,uBAAuB,CAAC;AAyC5B,wBAAgB,4BAA4B,IAAI,MAAM,GAAG,IAAI,CAG5D;AAED,wBAAgB,uBAAuB,IAAI,OAAO,CAEjD;AAkHD,wBAAgB,6BAA6B,CAC3C,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAMxB;AAED,wBAAgB,gCAAgC,CAC9C,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAMxB;AAED,wBAAgB,4BAA4B,CAC1C,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAMxB;AAED,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAMxB;AAED,wBAAgB,uCAAuC,CACrD,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAMxB;AAED,wBAAgB,wCAAwC,CACtD,QAAQ,EAAE,OAAO,GAChB,sBAAsB,CAMxB;AAED,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAElF;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAE7E;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAE9E;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,sBAAsB,CAElE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAE3E;AAED,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CAEnF"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Strict JSON Schema validation (Ajv) — Workers-safe
|
|
3
|
+
* CVF-US-024
|
|
4
|
+
*
|
|
5
|
+
* Cloudflare Workers disallow runtime code generation (new Function/eval).
|
|
6
|
+
* Ajv normally compiles schemas using generated functions, so we use Ajv
|
|
7
|
+
* "standalone" output generated ahead-of-time:
|
|
8
|
+
* services/clawverify/src/schema-validators.generated.ts
|
|
9
|
+
*/
|
|
10
|
+
import { validateGatewayReceiptEnvelopeV1 as validateGatewayReceiptEnvelopeV1Generated, validateProofBundleEnvelopeV1 as validateProofBundleEnvelopeV1Generated, validateWebReceiptEnvelopeV1 as validateWebReceiptEnvelopeV1Generated, validateExecutionAttestationEnvelopeV1 as validateExecutionAttestationEnvelopeV1Generated, validateDerivationAttestationEnvelopeV1 as validateDerivationAttestationEnvelopeV1Generated, validateAuditResultAttestationEnvelopeV1 as validateAuditResultAttestationEnvelopeV1Generated, validateLogInclusionProofV1 as validateLogInclusionProofV1Generated, validateExportBundleV1 as validateExportBundleV1Generated, validateModelIdentityV1 as validateModelIdentityV1Generated, validateUrmV1 as validateUrmV1Generated, validatePromptPackV1 as validatePromptPackV1Generated, validateSystemPromptReportV1 as validateSystemPromptReportV1Generated, } from './schema-validators.generated.js';
|
|
11
|
+
const validateProofBundleEnvelopeV1Fn = validateProofBundleEnvelopeV1Generated;
|
|
12
|
+
const validateGatewayReceiptEnvelopeV1Fn = validateGatewayReceiptEnvelopeV1Generated;
|
|
13
|
+
const validateWebReceiptEnvelopeV1Fn = validateWebReceiptEnvelopeV1Generated;
|
|
14
|
+
const validateExecutionAttestationEnvelopeV1Fn = validateExecutionAttestationEnvelopeV1Generated;
|
|
15
|
+
const validateDerivationAttestationEnvelopeV1Fn = validateDerivationAttestationEnvelopeV1Generated;
|
|
16
|
+
const validateAuditResultAttestationEnvelopeV1Fn = validateAuditResultAttestationEnvelopeV1Generated;
|
|
17
|
+
const validateLogInclusionProofV1Fn = validateLogInclusionProofV1Generated;
|
|
18
|
+
const validateExportBundleV1Fn = validateExportBundleV1Generated;
|
|
19
|
+
const validateModelIdentityV1Fn = validateModelIdentityV1Generated;
|
|
20
|
+
const validateUrmV1Fn = validateUrmV1Generated;
|
|
21
|
+
const validatePromptPackV1Fn = validatePromptPackV1Generated;
|
|
22
|
+
const validateSystemPromptReportV1Fn = validateSystemPromptReportV1Generated;
|
|
23
|
+
export function getSchemaValidationInitError() {
|
|
24
|
+
// Standalone validators are generated at build/commit time.
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
export function isSchemaValidationReady() {
|
|
28
|
+
return true;
|
|
29
|
+
}
|
|
30
|
+
const IDENTIFIER_RE = /^[A-Za-z_$][A-Za-z0-9_$]*$/;
|
|
31
|
+
function decodeJsonPointerSegment(seg) {
|
|
32
|
+
// RFC 6901: ~1 -> '/', ~0 -> '~'
|
|
33
|
+
return seg.replace(/~1/g, '/').replace(/~0/g, '~');
|
|
34
|
+
}
|
|
35
|
+
function appendInstancePathSegment(base, seg) {
|
|
36
|
+
// Ajv uses JSON Pointer in instancePath; for arrays the segment is the index.
|
|
37
|
+
if (/^\d+$/.test(seg)) {
|
|
38
|
+
return `${base}[${seg}]`;
|
|
39
|
+
}
|
|
40
|
+
if (IDENTIFIER_RE.test(seg)) {
|
|
41
|
+
return base.length === 0 ? seg : `${base}.${seg}`;
|
|
42
|
+
}
|
|
43
|
+
const q = JSON.stringify(seg);
|
|
44
|
+
return base.length === 0 ? `[${q}]` : `${base}[${q}]`;
|
|
45
|
+
}
|
|
46
|
+
function appendPropertySegment(base, prop) {
|
|
47
|
+
// missingProperty/additionalProperty are object property names (not array indices).
|
|
48
|
+
if (IDENTIFIER_RE.test(prop)) {
|
|
49
|
+
return base.length === 0 ? prop : `${base}.${prop}`;
|
|
50
|
+
}
|
|
51
|
+
const q = JSON.stringify(prop);
|
|
52
|
+
return base.length === 0 ? `[${q}]` : `${base}[${q}]`;
|
|
53
|
+
}
|
|
54
|
+
function instancePathToField(instancePath) {
|
|
55
|
+
if (!instancePath)
|
|
56
|
+
return '';
|
|
57
|
+
const parts = instancePath
|
|
58
|
+
.split('/')
|
|
59
|
+
.filter(Boolean)
|
|
60
|
+
.map(decodeJsonPointerSegment);
|
|
61
|
+
let out = '';
|
|
62
|
+
for (const part of parts) {
|
|
63
|
+
out = appendInstancePathSegment(out, part);
|
|
64
|
+
}
|
|
65
|
+
return out;
|
|
66
|
+
}
|
|
67
|
+
function additionalPropertyFromParams(params) {
|
|
68
|
+
if (!params || typeof params !== 'object')
|
|
69
|
+
return undefined;
|
|
70
|
+
const p = params;
|
|
71
|
+
const ap = p.additionalProperty;
|
|
72
|
+
return typeof ap === 'string' ? ap : undefined;
|
|
73
|
+
}
|
|
74
|
+
function missingPropertyFromParams(params) {
|
|
75
|
+
if (!params || typeof params !== 'object')
|
|
76
|
+
return undefined;
|
|
77
|
+
const p = params;
|
|
78
|
+
const mp = p.missingProperty;
|
|
79
|
+
return typeof mp === 'string' ? mp : undefined;
|
|
80
|
+
}
|
|
81
|
+
function fieldFromAjvError(err) {
|
|
82
|
+
const base = instancePathToField(err.instancePath);
|
|
83
|
+
if (err.keyword === 'additionalProperties') {
|
|
84
|
+
const ap = additionalPropertyFromParams(err.params);
|
|
85
|
+
if (ap)
|
|
86
|
+
return appendPropertySegment(base, ap);
|
|
87
|
+
}
|
|
88
|
+
if (err.keyword === 'required') {
|
|
89
|
+
const mp = missingPropertyFromParams(err.params);
|
|
90
|
+
if (mp)
|
|
91
|
+
return appendPropertySegment(base, mp);
|
|
92
|
+
}
|
|
93
|
+
return base.length > 0 ? base : undefined;
|
|
94
|
+
}
|
|
95
|
+
function messageFromAjvError(err) {
|
|
96
|
+
const keyword = err.keyword ? `[${err.keyword}] ` : '';
|
|
97
|
+
const msg = err.message ?? 'schema validation error';
|
|
98
|
+
if (err.keyword === 'additionalProperties') {
|
|
99
|
+
const ap = additionalPropertyFromParams(err.params);
|
|
100
|
+
if (ap)
|
|
101
|
+
return `${keyword}${msg}: ${ap}`;
|
|
102
|
+
}
|
|
103
|
+
return `${keyword}${msg}`;
|
|
104
|
+
}
|
|
105
|
+
function validateWith(fn, value, label) {
|
|
106
|
+
const ok = fn(value);
|
|
107
|
+
if (ok)
|
|
108
|
+
return { valid: true };
|
|
109
|
+
const errors = fn.errors ?? null;
|
|
110
|
+
const first = errors && errors.length > 0 ? errors[0] : null;
|
|
111
|
+
return {
|
|
112
|
+
valid: false,
|
|
113
|
+
message: first
|
|
114
|
+
? `${label}: ${messageFromAjvError(first)}`
|
|
115
|
+
: `${label}: schema validation failed`,
|
|
116
|
+
field: first ? fieldFromAjvError(first) : undefined,
|
|
117
|
+
errors,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
export function validateProofBundleEnvelopeV1(envelope) {
|
|
121
|
+
return validateWith(validateProofBundleEnvelopeV1Fn, envelope, 'proof_bundle_envelope.v1');
|
|
122
|
+
}
|
|
123
|
+
export function validateGatewayReceiptEnvelopeV1(envelope) {
|
|
124
|
+
return validateWith(validateGatewayReceiptEnvelopeV1Fn, envelope, 'gateway_receipt_envelope.v1');
|
|
125
|
+
}
|
|
126
|
+
export function validateWebReceiptEnvelopeV1(envelope) {
|
|
127
|
+
return validateWith(validateWebReceiptEnvelopeV1Fn, envelope, 'web_receipt_envelope.v1');
|
|
128
|
+
}
|
|
129
|
+
export function validateExecutionAttestationEnvelopeV1(envelope) {
|
|
130
|
+
return validateWith(validateExecutionAttestationEnvelopeV1Fn, envelope, 'execution_attestation_envelope.v1');
|
|
131
|
+
}
|
|
132
|
+
export function validateDerivationAttestationEnvelopeV1(envelope) {
|
|
133
|
+
return validateWith(validateDerivationAttestationEnvelopeV1Fn, envelope, 'derivation_attestation_envelope.v1');
|
|
134
|
+
}
|
|
135
|
+
export function validateAuditResultAttestationEnvelopeV1(envelope) {
|
|
136
|
+
return validateWith(validateAuditResultAttestationEnvelopeV1Fn, envelope, 'audit_result_attestation_envelope.v1');
|
|
137
|
+
}
|
|
138
|
+
export function validateLogInclusionProofV1(value) {
|
|
139
|
+
return validateWith(validateLogInclusionProofV1Fn, value, 'log_inclusion_proof.v1');
|
|
140
|
+
}
|
|
141
|
+
export function validateExportBundleV1(value) {
|
|
142
|
+
return validateWith(validateExportBundleV1Fn, value, 'export_bundle.v1');
|
|
143
|
+
}
|
|
144
|
+
export function validateModelIdentityV1(value) {
|
|
145
|
+
return validateWith(validateModelIdentityV1Fn, value, 'model_identity.v1');
|
|
146
|
+
}
|
|
147
|
+
export function validateUrmV1(urm) {
|
|
148
|
+
return validateWith(validateUrmV1Fn, urm, 'urm.v1');
|
|
149
|
+
}
|
|
150
|
+
export function validatePromptPackV1(value) {
|
|
151
|
+
return validateWith(validatePromptPackV1Fn, value, 'prompt_pack.v1');
|
|
152
|
+
}
|
|
153
|
+
export function validateSystemPromptReportV1(value) {
|
|
154
|
+
return validateWith(validateSystemPromptReportV1Fn, value, 'system_prompt_report.v1');
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=schema-validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-validation.js","sourceRoot":"","sources":["../src/schema-validation.ts"],"names":[],"mappings":"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"}
|