agent-passport-system 4.1.1 → 4.3.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/README.md +2 -2
- package/dist/src/adapters/oauth-id-jag/import-v1.d.ts +74 -0
- package/dist/src/adapters/oauth-id-jag/import-v1.d.ts.map +1 -0
- package/dist/src/adapters/oauth-id-jag/import-v1.js +243 -0
- package/dist/src/adapters/oauth-id-jag/import-v1.js.map +1 -0
- package/dist/src/core/action-ref.d.ts +21 -0
- package/dist/src/core/action-ref.d.ts.map +1 -1
- package/dist/src/core/action-ref.js +47 -7
- package/dist/src/core/action-ref.js.map +1 -1
- package/dist/src/core/canonical-jcs.js +2 -2
- package/dist/src/core/canonical-jcs.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +6 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/profiles/a2a/identity-v1.d.ts +44 -0
- package/dist/src/profiles/a2a/identity-v1.d.ts.map +1 -0
- package/dist/src/profiles/a2a/identity-v1.js +208 -0
- package/dist/src/profiles/a2a/identity-v1.js.map +1 -0
- package/dist/src/profiles/a2a/index.d.ts +2 -0
- package/dist/src/profiles/a2a/index.d.ts.map +1 -0
- package/dist/src/profiles/a2a/index.js +4 -0
- package/dist/src/profiles/a2a/index.js.map +1 -0
- package/dist/src/profiles/mcp/authorization-v1.d.ts +88 -0
- package/dist/src/profiles/mcp/authorization-v1.d.ts.map +1 -0
- package/dist/src/profiles/mcp/authorization-v1.js +215 -0
- package/dist/src/profiles/mcp/authorization-v1.js.map +1 -0
- package/dist/src/profiles/mcp/index.d.ts +2 -0
- package/dist/src/profiles/mcp/index.d.ts.map +1 -0
- package/dist/src/profiles/mcp/index.js +4 -0
- package/dist/src/profiles/mcp/index.js.map +1 -0
- package/dist/src/v2/action-reference/index.d.ts +2 -0
- package/dist/src/v2/action-reference/index.d.ts.map +1 -0
- package/dist/src/v2/action-reference/index.js +4 -0
- package/dist/src/v2/action-reference/index.js.map +1 -0
- package/dist/src/v2/action-reference/v2.d.ts +23 -0
- package/dist/src/v2/action-reference/v2.d.ts.map +1 -0
- package/dist/src/v2/action-reference/v2.js +57 -0
- package/dist/src/v2/action-reference/v2.js.map +1 -0
- package/dist/src/v2/authority-delegation/budget.d.ts +20 -0
- package/dist/src/v2/authority-delegation/budget.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/budget.js +141 -0
- package/dist/src/v2/authority-delegation/budget.js.map +1 -0
- package/dist/src/v2/authority-delegation/canonical.d.ts +12 -0
- package/dist/src/v2/authority-delegation/canonical.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/canonical.js +33 -0
- package/dist/src/v2/authority-delegation/canonical.js.map +1 -0
- package/dist/src/v2/authority-delegation/compare.d.ts +4 -0
- package/dist/src/v2/authority-delegation/compare.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/compare.js +67 -0
- package/dist/src/v2/authority-delegation/compare.js.map +1 -0
- package/dist/src/v2/authority-delegation/index.d.ts +10 -0
- package/dist/src/v2/authority-delegation/index.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/index.js +12 -0
- package/dist/src/v2/authority-delegation/index.js.map +1 -0
- package/dist/src/v2/authority-delegation/issue.d.ts +10 -0
- package/dist/src/v2/authority-delegation/issue.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/issue.js +52 -0
- package/dist/src/v2/authority-delegation/issue.js.map +1 -0
- package/dist/src/v2/authority-delegation/parse.d.ts +4 -0
- package/dist/src/v2/authority-delegation/parse.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/parse.js +96 -0
- package/dist/src/v2/authority-delegation/parse.js.map +1 -0
- package/dist/src/v2/authority-delegation/schema.d.ts +7 -0
- package/dist/src/v2/authority-delegation/schema.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/schema.js +177 -0
- package/dist/src/v2/authority-delegation/schema.js.map +1 -0
- package/dist/src/v2/authority-delegation/scope.d.ts +6 -0
- package/dist/src/v2/authority-delegation/scope.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/scope.js +50 -0
- package/dist/src/v2/authority-delegation/scope.js.map +1 -0
- package/dist/src/v2/authority-delegation/types.d.ts +98 -0
- package/dist/src/v2/authority-delegation/types.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/types.js +10 -0
- package/dist/src/v2/authority-delegation/types.js.map +1 -0
- package/dist/src/v2/authority-delegation/verify.d.ts +5 -0
- package/dist/src/v2/authority-delegation/verify.d.ts.map +1 -0
- package/dist/src/v2/authority-delegation/verify.js +124 -0
- package/dist/src/v2/authority-delegation/verify.js.map +1 -0
- package/dist/src/v2/identity-binding/did-aps.d.ts +12 -0
- package/dist/src/v2/identity-binding/did-aps.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/did-aps.js +53 -0
- package/dist/src/v2/identity-binding/did-aps.js.map +1 -0
- package/dist/src/v2/identity-binding/index.d.ts +6 -0
- package/dist/src/v2/identity-binding/index.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/index.js +8 -0
- package/dist/src/v2/identity-binding/index.js.map +1 -0
- package/dist/src/v2/identity-binding/passport.d.ts +18 -0
- package/dist/src/v2/identity-binding/passport.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/passport.js +144 -0
- package/dist/src/v2/identity-binding/passport.js.map +1 -0
- package/dist/src/v2/identity-binding/principal-binding.d.ts +20 -0
- package/dist/src/v2/identity-binding/principal-binding.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/principal-binding.js +128 -0
- package/dist/src/v2/identity-binding/principal-binding.js.map +1 -0
- package/dist/src/v2/identity-binding/revocation.d.ts +12 -0
- package/dist/src/v2/identity-binding/revocation.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/revocation.js +97 -0
- package/dist/src/v2/identity-binding/revocation.js.map +1 -0
- package/dist/src/v2/identity-binding/types.d.ts +72 -0
- package/dist/src/v2/identity-binding/types.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/types.js +4 -0
- package/dist/src/v2/identity-binding/types.js.map +1 -0
- package/dist/src/v2/identity-binding/validation.d.ts +9 -0
- package/dist/src/v2/identity-binding/validation.d.ts.map +1 -0
- package/dist/src/v2/identity-binding/validation.js +104 -0
- package/dist/src/v2/identity-binding/validation.js.map +1 -0
- package/dist/src/v2/receipt-core/decision-ref.d.ts +23 -0
- package/dist/src/v2/receipt-core/decision-ref.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/decision-ref.js +87 -0
- package/dist/src/v2/receipt-core/decision-ref.js.map +1 -0
- package/dist/src/v2/receipt-core/jcs.d.ts +15 -0
- package/dist/src/v2/receipt-core/jcs.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/jcs.js +198 -0
- package/dist/src/v2/receipt-core/jcs.js.map +1 -0
- package/dist/src/v2/receipt-core/receipt.d.ts +22 -0
- package/dist/src/v2/receipt-core/receipt.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/receipt.js +132 -0
- package/dist/src/v2/receipt-core/receipt.js.map +1 -0
- package/dist/src/v2/receipt-core/supporting-record.d.ts +55 -0
- package/dist/src/v2/receipt-core/supporting-record.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/supporting-record.js +243 -0
- package/dist/src/v2/receipt-core/supporting-record.js.map +1 -0
- package/dist/src/v2/receipt-core/types.d.ts +95 -0
- package/dist/src/v2/receipt-core/types.d.ts.map +1 -0
- package/dist/src/v2/receipt-core/types.js +4 -0
- package/dist/src/v2/receipt-core/types.js.map +1 -0
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -251,7 +251,7 @@ The composition contract specifies how a verifier MUST cross-check per-request s
|
|
|
251
251
|
|
|
252
252
|
4,326 tests. 8 protocol layers. Framework adapters for CrewAI, LangChain, ADK, A2A, MCP, OpenShell, IBAC, Gonka. Gateway evaluation under 2ms. Zero heavy dependencies. Apache-2.0.
|
|
253
253
|
|
|
254
|
-
The test count is one number derived from the suite, not three guesses. The badge above, this section, and the `package.json` description all carry the same `4,
|
|
254
|
+
The test count is one number derived from the suite, not three guesses. The badge above, this section, and the `package.json` description all carry the same `4,326`, which is the `tests` total reported by `npm test`. When the suite grows, re-run `npm test`, read the `tests` line, and update all three to match.
|
|
255
255
|
|
|
256
256
|
## Papers
|
|
257
257
|
|
|
@@ -263,7 +263,7 @@ The test count is one number derived from the suite, not three guesses. The badg
|
|
|
263
263
|
- [Governance in the Medium](https://doi.org/10.5281/zenodo.19582550)
|
|
264
264
|
- [Cognitive Attestation](https://doi.org/10.5281/zenodo.19646276)
|
|
265
265
|
- [The Evidence-Safety Gap](https://doi.org/10.5281/zenodo.19914628)
|
|
266
|
-
- IETF Internet-Draft: `draft-pidlisnyi-aps-
|
|
266
|
+
- IETF Internet-Draft: `draft-pidlisnyi-aps-03`
|
|
267
267
|
|
|
268
268
|
## Security and conformance
|
|
269
269
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { HistoricalKeyResolver } from '../../v2/identity-binding/types.js';
|
|
2
|
+
import type { IdJagClaims } from './types.js';
|
|
3
|
+
export type IdJagActorBindingV1 = {
|
|
4
|
+
method: 'cnf.jkt';
|
|
5
|
+
agent_id: string;
|
|
6
|
+
verification_method: string;
|
|
7
|
+
jwk_thumbprint: string;
|
|
8
|
+
} | {
|
|
9
|
+
method: 'dual_signature';
|
|
10
|
+
agent_id: string;
|
|
11
|
+
verification_method: string;
|
|
12
|
+
signature: string;
|
|
13
|
+
};
|
|
14
|
+
export interface IdJagImportV1 {
|
|
15
|
+
profile: 'aps-id-jag-import-v1';
|
|
16
|
+
draft: string;
|
|
17
|
+
grant_ref: string;
|
|
18
|
+
grant_decision_ref: string;
|
|
19
|
+
delegation_chain_root: string;
|
|
20
|
+
issuer: string;
|
|
21
|
+
subject: string;
|
|
22
|
+
client_id: string;
|
|
23
|
+
audience: string[];
|
|
24
|
+
agent_id: string;
|
|
25
|
+
actor_binding: IdJagActorBindingV1;
|
|
26
|
+
verified_by: string;
|
|
27
|
+
verification_method: string;
|
|
28
|
+
grant_key_id: string;
|
|
29
|
+
verified_at: string;
|
|
30
|
+
issued_at: string;
|
|
31
|
+
signature: string;
|
|
32
|
+
}
|
|
33
|
+
export interface VerifiedCompactIdJagGrantV1 {
|
|
34
|
+
compact_jws: string;
|
|
35
|
+
claims: IdJagClaims & {
|
|
36
|
+
cnf?: {
|
|
37
|
+
jkt?: string;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
verification: {
|
|
41
|
+
status: 'verified';
|
|
42
|
+
verified_by: string;
|
|
43
|
+
verification_method: string;
|
|
44
|
+
grant_key_id: string;
|
|
45
|
+
verified_at: string;
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
export interface IdJagImportVerificationV1 {
|
|
49
|
+
state: 'valid' | 'invalid' | 'indeterminate';
|
|
50
|
+
code: string;
|
|
51
|
+
grant_bytes: 'matched' | 'mismatch';
|
|
52
|
+
importer_signature: 'verified' | 'rejected' | 'unresolved';
|
|
53
|
+
actor_binding: 'verified' | 'rejected' | 'unresolved';
|
|
54
|
+
}
|
|
55
|
+
export declare function computeIdJagGrantRefV1(compactJws: string): string;
|
|
56
|
+
export declare function createIdJagActorBindingSignatureV1(grantRef: string, agentId: string, verificationMethod: string, agentPrivateKeyHex: string): string;
|
|
57
|
+
export declare function createIdJagImportV1(input: {
|
|
58
|
+
grant: VerifiedCompactIdJagGrantV1;
|
|
59
|
+
delegation_chain_root: string;
|
|
60
|
+
agent_binding: IdJagActorBindingV1;
|
|
61
|
+
importer_private_key_hex: string;
|
|
62
|
+
issued_at: string;
|
|
63
|
+
resolve_agent_key?: HistoricalKeyResolver;
|
|
64
|
+
resolve_agent_jwk_thumbprint?: (agentId: string, verificationMethod: string, at: string) => string | undefined | Promise<string | undefined>;
|
|
65
|
+
}): Promise<IdJagImportV1>;
|
|
66
|
+
export declare function verifyIdJagImportV1(candidate: unknown, source: {
|
|
67
|
+
compact_jws: string;
|
|
68
|
+
claims: VerifiedCompactIdJagGrantV1['claims'];
|
|
69
|
+
}, options: {
|
|
70
|
+
resolve_importer_key: HistoricalKeyResolver;
|
|
71
|
+
resolve_agent_key?: HistoricalKeyResolver;
|
|
72
|
+
resolve_agent_jwk_thumbprint?: (agentId: string, verificationMethod: string, at: string) => string | undefined | Promise<string | undefined>;
|
|
73
|
+
}): Promise<IdJagImportVerificationV1>;
|
|
74
|
+
//# sourceMappingURL=import-v1.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-v1.d.ts","sourceRoot":"","sources":["../../../../src/adapters/oauth-id-jag/import-v1.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
// Copyright (c) 2026 Tymofii Pidlisnyi
|
|
2
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
3
|
+
import { createHash } from 'node:crypto';
|
|
4
|
+
import { canonicalizeJCS } from '../../core/canonical-jcs.js';
|
|
5
|
+
import { sign, verify } from '../../crypto/keys.js';
|
|
6
|
+
import { assertExactKeys, assertHex, assertIJson, assertPlainRecord, assertSortedUnique, assertUtcMilliseconds, sortedUnique, } from '../../v2/identity-binding/validation.js';
|
|
7
|
+
import { IDJAG_DRAFT } from './types.js';
|
|
8
|
+
const GRANT_DOMAIN = 'APS-IDJAG-GRANT-V1\0';
|
|
9
|
+
const ACTOR_BINDING_DOMAIN = 'APS-IDJAG-ACTOR-BINDING-V1\0';
|
|
10
|
+
const DECISION_DOMAIN = 'APS-IDJAG-GRANT-DECISION-V1\0';
|
|
11
|
+
const IMPORT_SIGNATURE_DOMAIN = 'APS-IDJAG-IMPORT-SIG-V1\0';
|
|
12
|
+
export function computeIdJagGrantRefV1(compactJws) {
|
|
13
|
+
validateCompactJws(compactJws);
|
|
14
|
+
return digest(GRANT_DOMAIN + compactJws);
|
|
15
|
+
}
|
|
16
|
+
export function createIdJagActorBindingSignatureV1(grantRef, agentId, verificationMethod, agentPrivateKeyHex) {
|
|
17
|
+
assertHex(grantRef, 64, 'grant_ref');
|
|
18
|
+
const body = { agent_id: agentId, grant_ref: grantRef, verification_method: verificationMethod };
|
|
19
|
+
return sign(ACTOR_BINDING_DOMAIN + canonicalizeJCS(body), agentPrivateKeyHex);
|
|
20
|
+
}
|
|
21
|
+
export async function createIdJagImportV1(input) {
|
|
22
|
+
validateVerifiedGrant(input.grant);
|
|
23
|
+
assertHex(input.delegation_chain_root, 64, 'delegation_chain_root');
|
|
24
|
+
assertUtcMilliseconds(input.issued_at, 'issued_at');
|
|
25
|
+
const grantRef = computeIdJagGrantRefV1(input.grant.compact_jws);
|
|
26
|
+
await verifyActorBindingOrThrow(input.grant, grantRef, input.agent_binding, input.resolve_agent_key, input.resolve_agent_jwk_thumbprint);
|
|
27
|
+
const audiences = normalizeAudience(input.grant.claims.aud, input.grant.claims.resource);
|
|
28
|
+
const decisionInput = grantDecisionInput(grantRef, input.grant, input.agent_binding, input.delegation_chain_root, audiences);
|
|
29
|
+
const grantDecisionRef = digest(DECISION_DOMAIN + canonicalizeJCS(decisionInput));
|
|
30
|
+
const unsigned = {
|
|
31
|
+
profile: 'aps-id-jag-import-v1',
|
|
32
|
+
draft: IDJAG_DRAFT,
|
|
33
|
+
grant_ref: grantRef,
|
|
34
|
+
grant_decision_ref: grantDecisionRef,
|
|
35
|
+
delegation_chain_root: input.delegation_chain_root,
|
|
36
|
+
issuer: input.grant.claims.iss,
|
|
37
|
+
subject: input.grant.claims.sub,
|
|
38
|
+
client_id: input.grant.claims.client_id,
|
|
39
|
+
audience: audiences,
|
|
40
|
+
agent_id: input.agent_binding.agent_id,
|
|
41
|
+
actor_binding: input.agent_binding,
|
|
42
|
+
verified_by: input.grant.verification.verified_by,
|
|
43
|
+
verification_method: input.grant.verification.verification_method,
|
|
44
|
+
grant_key_id: input.grant.verification.grant_key_id,
|
|
45
|
+
verified_at: input.grant.verification.verified_at,
|
|
46
|
+
issued_at: input.issued_at,
|
|
47
|
+
};
|
|
48
|
+
validateImportUnsigned(unsigned);
|
|
49
|
+
return {
|
|
50
|
+
...unsigned,
|
|
51
|
+
signature: sign(IMPORT_SIGNATURE_DOMAIN + canonicalizeJCS(unsigned), input.importer_private_key_hex),
|
|
52
|
+
};
|
|
53
|
+
}
|
|
54
|
+
export async function verifyIdJagImportV1(candidate, source, options) {
|
|
55
|
+
let record;
|
|
56
|
+
try {
|
|
57
|
+
record = validateImport(candidate);
|
|
58
|
+
validateClaimsMatchCompactJws(source.compact_jws, source.claims);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return outcome('invalid', 'IDJAG_IMPORT_MALFORMED', 'mismatch', 'rejected', 'rejected');
|
|
62
|
+
}
|
|
63
|
+
const grantRef = computeIdJagGrantRefV1(source.compact_jws);
|
|
64
|
+
if (grantRef !== record.grant_ref || !claimsMatchRecord(source.claims, record)) {
|
|
65
|
+
return outcome('invalid', 'IDJAG_GRANT_BYTES_MISMATCH', 'mismatch', 'rejected', 'rejected');
|
|
66
|
+
}
|
|
67
|
+
const syntheticGrant = {
|
|
68
|
+
compact_jws: source.compact_jws,
|
|
69
|
+
claims: source.claims,
|
|
70
|
+
verification: {
|
|
71
|
+
status: 'verified',
|
|
72
|
+
verified_by: record.verified_by,
|
|
73
|
+
verification_method: record.verification_method,
|
|
74
|
+
grant_key_id: record.grant_key_id,
|
|
75
|
+
verified_at: record.verified_at,
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
const decisionRef = digest(DECISION_DOMAIN + canonicalizeJCS(grantDecisionInput(grantRef, syntheticGrant, record.actor_binding, record.delegation_chain_root, record.audience)));
|
|
79
|
+
if (decisionRef !== record.grant_decision_ref) {
|
|
80
|
+
return outcome('invalid', 'IDJAG_GRANT_DECISION_MISMATCH', 'matched', 'rejected', 'rejected');
|
|
81
|
+
}
|
|
82
|
+
const importerResolution = await options.resolve_importer_key({
|
|
83
|
+
controller: record.verified_by,
|
|
84
|
+
verification_method: record.verification_method,
|
|
85
|
+
at: record.issued_at,
|
|
86
|
+
});
|
|
87
|
+
if (importerResolution.state !== 'resolved' || !importerResolution.public_key_hex) {
|
|
88
|
+
const unresolved = importerResolution.state === 'unreachable';
|
|
89
|
+
return outcome(unresolved ? 'indeterminate' : 'invalid', `IDJAG_IMPORTER_KEY_${importerResolution.state.toUpperCase()}`, 'matched', unresolved ? 'unresolved' : 'rejected', 'unresolved');
|
|
90
|
+
}
|
|
91
|
+
const unsigned = omit(record, ['signature']);
|
|
92
|
+
if (!verify(IMPORT_SIGNATURE_DOMAIN + canonicalizeJCS(unsigned), record.signature, importerResolution.public_key_hex))
|
|
93
|
+
return outcome('invalid', 'IDJAG_IMPORTER_SIGNATURE_INVALID', 'matched', 'rejected', 'unresolved');
|
|
94
|
+
try {
|
|
95
|
+
await verifyActorBindingOrThrow(syntheticGrant, grantRef, record.actor_binding, options.resolve_agent_key, options.resolve_agent_jwk_thumbprint);
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const unresolved = error instanceof Error && error.message.includes('unresolved');
|
|
99
|
+
return outcome(unresolved ? 'indeterminate' : 'invalid', unresolved ? 'IDJAG_ACTOR_BINDING_UNRESOLVED' : 'IDJAG_ACTOR_BINDING_INVALID', 'matched', 'verified', unresolved ? 'unresolved' : 'rejected');
|
|
100
|
+
}
|
|
101
|
+
return outcome('valid', 'OK', 'matched', 'verified', 'verified');
|
|
102
|
+
}
|
|
103
|
+
function validateVerifiedGrant(grant) {
|
|
104
|
+
validateClaimsMatchCompactJws(grant.compact_jws, grant.claims);
|
|
105
|
+
if (grant.verification.status !== 'verified')
|
|
106
|
+
throw new Error('grant not verified');
|
|
107
|
+
if (!grant.verification.verified_by || !grant.verification.verification_method || !grant.verification.grant_key_id) {
|
|
108
|
+
throw new Error('grant verification metadata incomplete');
|
|
109
|
+
}
|
|
110
|
+
if (!grant.verification.verification_method.startsWith(`${grant.verification.verified_by}#`)) {
|
|
111
|
+
throw new Error('grant verifier key/controller mismatch');
|
|
112
|
+
}
|
|
113
|
+
assertUtcMilliseconds(grant.verification.verified_at, 'verified_at');
|
|
114
|
+
}
|
|
115
|
+
function validateClaimsMatchCompactJws(compactJws, claims) {
|
|
116
|
+
validateCompactJws(compactJws);
|
|
117
|
+
assertIJson(claims);
|
|
118
|
+
const payload = JSON.parse(Buffer.from(compactJws.split('.')[1], 'base64url').toString('utf8'));
|
|
119
|
+
assertIJson(payload);
|
|
120
|
+
if (canonicalizeJCS(payload) !== canonicalizeJCS(claims))
|
|
121
|
+
throw new Error('decoded claims do not match compact JWS');
|
|
122
|
+
}
|
|
123
|
+
async function verifyActorBindingOrThrow(grant, grantRef, binding, resolveAgentKey, resolveThumbprint) {
|
|
124
|
+
validateActorBinding(binding);
|
|
125
|
+
if (binding.method === 'cnf.jkt') {
|
|
126
|
+
if (grant.claims.cnf?.jkt !== binding.jwk_thumbprint)
|
|
127
|
+
throw new Error('cnf.jkt mismatch');
|
|
128
|
+
if (!resolveThumbprint)
|
|
129
|
+
throw new Error('actor binding unresolved');
|
|
130
|
+
const resolved = await resolveThumbprint(binding.agent_id, binding.verification_method, grant.verification.verified_at);
|
|
131
|
+
if (!resolved)
|
|
132
|
+
throw new Error('actor binding unresolved');
|
|
133
|
+
if (resolved !== binding.jwk_thumbprint)
|
|
134
|
+
throw new Error('agent key thumbprint mismatch');
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (!resolveAgentKey)
|
|
138
|
+
throw new Error('actor binding unresolved');
|
|
139
|
+
const resolution = await resolveAgentKey({
|
|
140
|
+
controller: binding.agent_id,
|
|
141
|
+
verification_method: binding.verification_method,
|
|
142
|
+
at: grant.verification.verified_at,
|
|
143
|
+
});
|
|
144
|
+
if (resolution.state !== 'resolved' || !resolution.public_key_hex)
|
|
145
|
+
throw new Error('actor binding unresolved');
|
|
146
|
+
const body = {
|
|
147
|
+
agent_id: binding.agent_id,
|
|
148
|
+
grant_ref: grantRef,
|
|
149
|
+
verification_method: binding.verification_method,
|
|
150
|
+
};
|
|
151
|
+
if (!verify(ACTOR_BINDING_DOMAIN + canonicalizeJCS(body), binding.signature, resolution.public_key_hex))
|
|
152
|
+
throw new Error('actor signature invalid');
|
|
153
|
+
}
|
|
154
|
+
function validateActorBinding(binding) {
|
|
155
|
+
assertPlainRecord(binding, 'actor binding');
|
|
156
|
+
if (!/^did:[a-z0-9]+:.+$/.test(binding.agent_id))
|
|
157
|
+
throw new Error('actor agent_id');
|
|
158
|
+
if (!binding.verification_method.startsWith(`${binding.agent_id}#`))
|
|
159
|
+
throw new Error('actor verification_method');
|
|
160
|
+
if (binding.method === 'cnf.jkt') {
|
|
161
|
+
assertExactKeys(binding, ['method', 'agent_id', 'verification_method', 'jwk_thumbprint'], [], 'actor binding');
|
|
162
|
+
if (!/^[A-Za-z0-9_-]{43}$/.test(binding.jwk_thumbprint))
|
|
163
|
+
throw new Error('actor jwk thumbprint');
|
|
164
|
+
}
|
|
165
|
+
else if (binding.method === 'dual_signature') {
|
|
166
|
+
assertExactKeys(binding, ['method', 'agent_id', 'verification_method', 'signature'], [], 'actor binding');
|
|
167
|
+
assertHex(binding.signature, 128, 'actor signature');
|
|
168
|
+
}
|
|
169
|
+
else
|
|
170
|
+
throw new Error('actor binding method');
|
|
171
|
+
}
|
|
172
|
+
function grantDecisionInput(grantRef, grant, binding, chainRoot, audience) {
|
|
173
|
+
return {
|
|
174
|
+
profile: 'aps-id-jag-grant-decision-v1',
|
|
175
|
+
grant_ref: grantRef,
|
|
176
|
+
delegation_chain_root: chainRoot,
|
|
177
|
+
audience,
|
|
178
|
+
actor_binding: binding,
|
|
179
|
+
verified_by: grant.verification.verified_by,
|
|
180
|
+
verification_method: grant.verification.verification_method,
|
|
181
|
+
grant_key_id: grant.verification.grant_key_id,
|
|
182
|
+
verified_at: grant.verification.verified_at,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
function validateImport(value) {
|
|
186
|
+
assertPlainRecord(value, 'ID-JAG import');
|
|
187
|
+
assertExactKeys(value, [
|
|
188
|
+
'profile', 'draft', 'grant_ref', 'grant_decision_ref', 'delegation_chain_root',
|
|
189
|
+
'issuer', 'subject', 'client_id', 'audience', 'agent_id', 'actor_binding',
|
|
190
|
+
'verified_by', 'verification_method', 'grant_key_id', 'verified_at', 'issued_at', 'signature',
|
|
191
|
+
], [], 'ID-JAG import');
|
|
192
|
+
validateImportUnsigned(omit(value, ['signature']));
|
|
193
|
+
assertHex(String(value.signature), 128, 'signature');
|
|
194
|
+
return value;
|
|
195
|
+
}
|
|
196
|
+
function validateImportUnsigned(value) {
|
|
197
|
+
assertIJson(value);
|
|
198
|
+
if (value.profile !== 'aps-id-jag-import-v1' || value.draft !== IDJAG_DRAFT)
|
|
199
|
+
throw new Error('ID-JAG profile');
|
|
200
|
+
assertHex(value.grant_ref, 64, 'grant_ref');
|
|
201
|
+
assertHex(value.grant_decision_ref, 64, 'grant_decision_ref');
|
|
202
|
+
assertHex(value.delegation_chain_root, 64, 'delegation_chain_root');
|
|
203
|
+
if (!value.issuer || !value.subject || !value.client_id || !value.grant_key_id)
|
|
204
|
+
throw new Error('ID-JAG identifiers');
|
|
205
|
+
if (!Array.isArray(value.audience) || value.audience.length === 0)
|
|
206
|
+
throw new Error('audience');
|
|
207
|
+
assertSortedUnique(value.audience, 'audience');
|
|
208
|
+
validateActorBinding(value.actor_binding);
|
|
209
|
+
if (value.agent_id !== value.actor_binding.agent_id)
|
|
210
|
+
throw new Error('agent_id mismatch');
|
|
211
|
+
if (!value.verification_method.startsWith(`${value.verified_by}#`))
|
|
212
|
+
throw new Error('importer verification method');
|
|
213
|
+
assertUtcMilliseconds(value.verified_at, 'verified_at');
|
|
214
|
+
assertUtcMilliseconds(value.issued_at, 'issued_at');
|
|
215
|
+
}
|
|
216
|
+
function normalizeAudience(aud, resource) {
|
|
217
|
+
return sortedUnique([aud, ...(resource === undefined ? [] : [resource])], 'audience');
|
|
218
|
+
}
|
|
219
|
+
function claimsMatchRecord(claims, record) {
|
|
220
|
+
return claims.iss === record.issuer && claims.sub === record.subject &&
|
|
221
|
+
claims.client_id === record.client_id &&
|
|
222
|
+
canonicalizeJCS(normalizeAudience(claims.aud, claims.resource)) === canonicalizeJCS(record.audience);
|
|
223
|
+
}
|
|
224
|
+
function validateCompactJws(value) {
|
|
225
|
+
if (typeof value !== 'string' || value.length > 131072 ||
|
|
226
|
+
!/^[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+$/.test(value)) {
|
|
227
|
+
throw new Error('invalid compact JWS');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
function digest(value) {
|
|
231
|
+
return createHash('sha256').update(value, 'utf8').digest('hex');
|
|
232
|
+
}
|
|
233
|
+
function omit(value, keys) {
|
|
234
|
+
const result = {};
|
|
235
|
+
for (const [key, entry] of Object.entries(value))
|
|
236
|
+
if (!keys.includes(key))
|
|
237
|
+
result[key] = entry;
|
|
238
|
+
return result;
|
|
239
|
+
}
|
|
240
|
+
function outcome(state, code, grant, importer, actor) {
|
|
241
|
+
return { state, code, grant_bytes: grant, importer_signature: importer, actor_binding: actor };
|
|
242
|
+
}
|
|
243
|
+
//# sourceMappingURL=import-v1.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-v1.js","sourceRoot":"","sources":["../../../../src/adapters/oauth-id-jag/import-v1.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,21 @@ export type ActionRefIntent = Omit<Pick<ActionIntent, 'agentId' | 'action' | 'cr
|
|
|
11
11
|
scopeRequired: ActionIntent['action']['scopeRequired'] | readonly string[];
|
|
12
12
|
};
|
|
13
13
|
};
|
|
14
|
+
/** Raised when scopeRequired carries two elements that are equal after NFC
|
|
15
|
+
* normalization. draft-pidlisnyi-aps-03 §4.1 defines scope_required as a
|
|
16
|
+
* duplicate-free array, so a duplicated array has no canonical form and is
|
|
17
|
+
* rejected rather than deduplicated: an equality key must not map distinct
|
|
18
|
+
* inputs onto one value silently. Subclasses the built-in Error so any
|
|
19
|
+
* existing handler that catches Error (or `catch (e)`) still catches it and
|
|
20
|
+
* fails closed. */
|
|
21
|
+
export declare class DuplicateScopeRequiredError extends Error {
|
|
22
|
+
readonly code = "ERR_DUPLICATE_SCOPE_REQUIRED";
|
|
23
|
+
/** Stable machine-readable category, shared across the APS SDKs. */
|
|
24
|
+
readonly category = "invalid_scope_required";
|
|
25
|
+
/** Specific failure within the category. */
|
|
26
|
+
readonly reason = "duplicate_scope_required";
|
|
27
|
+
constructor(message: string);
|
|
28
|
+
}
|
|
14
29
|
/**
|
|
15
30
|
* Compute the content-addressed request identity for an ActionIntent.
|
|
16
31
|
*
|
|
@@ -22,6 +37,12 @@ export type ActionRefIntent = Omit<Pick<ActionIntent, 'agentId' | 'action' | 'cr
|
|
|
22
37
|
* array, the array is sorted by Unicode code point. No case folding; scopes
|
|
23
38
|
* that differ only in case stay distinct.
|
|
24
39
|
*
|
|
40
|
+
* Throws DuplicateScopeRequiredError when an array scopeRequired holds two
|
|
41
|
+
* elements equal after NFC normalization. The throw happens inside
|
|
42
|
+
* canonicalization, before the digest is computed, so a duplicated array can
|
|
43
|
+
* never present as an identity mismatch downstream: there is no action_ref to
|
|
44
|
+
* compare in the first place.
|
|
45
|
+
*
|
|
25
46
|
* Canonicalization follows RFC 8785 JCS strictly, per draft-pidlisnyi-aps-01
|
|
26
47
|
* §4.1: null/undefined-valued keys are preserved (not stripped) so that two
|
|
27
48
|
* APS engines independently hashing the same request produce the same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-ref.d.ts","sourceRoot":"","sources":["../../../src/core/action-ref.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC,EAAE,QAAQ,CAAC,GAAG;IACvE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,GAAG;QACtD,aAAa,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;KAC3E,CAAA;CACF,CAAA;
|
|
1
|
+
{"version":3,"file":"action-ref.d.ts","sourceRoot":"","sources":["../../../src/core/action-ref.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEtD;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GACzB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,CAAC,EAAE,QAAQ,CAAC,GAAG;IACvE,MAAM,EAAE,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,eAAe,CAAC,GAAG;QACtD,aAAa,EAAE,YAAY,CAAC,QAAQ,CAAC,CAAC,eAAe,CAAC,GAAG,SAAS,MAAM,EAAE,CAAA;KAC3E,CAAA;CACF,CAAA;AAEH;;;;;;oBAMoB;AACpB,qBAAa,2BAA4B,SAAQ,KAAK;IACpD,QAAQ,CAAC,IAAI,kCAAiC;IAC9C,oEAAoE;IACpE,QAAQ,CAAC,QAAQ,4BAA2B;IAC5C,4CAA4C;IAC5C,QAAQ,CAAC,MAAM,8BAA6B;IAC5C,YAAY,OAAO,EAAE,MAAM,EAG1B;CACF;AAyDD;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,eAAe,GAAG,MAAM,CAQhE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,OAAO,CAE7D"}
|
|
@@ -18,6 +18,24 @@
|
|
|
18
18
|
// ══════════════════════════════════════════════════════════════════
|
|
19
19
|
import { normalizeTimestamp } from './canonical.js';
|
|
20
20
|
import { canonicalHashJCS } from './canonical-jcs.js';
|
|
21
|
+
/** Raised when scopeRequired carries two elements that are equal after NFC
|
|
22
|
+
* normalization. draft-pidlisnyi-aps-03 §4.1 defines scope_required as a
|
|
23
|
+
* duplicate-free array, so a duplicated array has no canonical form and is
|
|
24
|
+
* rejected rather than deduplicated: an equality key must not map distinct
|
|
25
|
+
* inputs onto one value silently. Subclasses the built-in Error so any
|
|
26
|
+
* existing handler that catches Error (or `catch (e)`) still catches it and
|
|
27
|
+
* fails closed. */
|
|
28
|
+
export class DuplicateScopeRequiredError extends Error {
|
|
29
|
+
code = 'ERR_DUPLICATE_SCOPE_REQUIRED';
|
|
30
|
+
/** Stable machine-readable category, shared across the APS SDKs. */
|
|
31
|
+
category = 'invalid_scope_required';
|
|
32
|
+
/** Specific failure within the category. */
|
|
33
|
+
reason = 'duplicate_scope_required';
|
|
34
|
+
constructor(message) {
|
|
35
|
+
super(message);
|
|
36
|
+
this.name = 'DuplicateScopeRequiredError';
|
|
37
|
+
}
|
|
38
|
+
}
|
|
21
39
|
/**
|
|
22
40
|
* Compare two strings by Unicode code point, per §4.1's sort requirement.
|
|
23
41
|
* The JS default sort compares UTF-16 code units, which orders astral-plane
|
|
@@ -40,18 +58,34 @@ function compareCodePoints(a, b) {
|
|
|
40
58
|
}
|
|
41
59
|
/**
|
|
42
60
|
* Canonicalize scopeRequired per draft-pidlisnyi-aps-03 §4.1 before hashing:
|
|
43
|
-
* NFC-normalize each scope string, then sort the array by
|
|
44
|
-
* Operates on a copy; never mutates the caller's array.
|
|
45
|
-
* form (the current ActionIntent type) is NFC-normalized;
|
|
46
|
-
* any non-conforming shape (non-string elements) pass
|
|
47
|
-
* the strict-JCS null-preservation contract and legacy
|
|
48
|
-
* out-of-spec input both hold.
|
|
61
|
+
* NFC-normalize each scope string, reject duplicates, then sort the array by
|
|
62
|
+
* Unicode code point. Operates on a copy; never mutates the caller's array.
|
|
63
|
+
* The single-string form (the current ActionIntent type) is NFC-normalized;
|
|
64
|
+
* null/undefined and any non-conforming shape (non-string elements) pass
|
|
65
|
+
* through unchanged so the strict-JCS null-preservation contract and legacy
|
|
66
|
+
* behavior for out-of-spec input both hold.
|
|
67
|
+
*
|
|
68
|
+
* §4.1 defines scope_required as a duplicate-free array. Duplicates are
|
|
69
|
+
* detected AFTER normalization, so two spellings that collide only under NFC
|
|
70
|
+
* (U+00E9 and "e" + U+0301) reject as well. Rejection rather than dedupe:
|
|
71
|
+
* silently collapsing ["a","a"] to ["a"] would map two distinct inputs onto
|
|
72
|
+
* one identity with no error, and would change the identity previously
|
|
73
|
+
* computed for the duplicated input. Valid arrays are byte-unchanged.
|
|
49
74
|
*/
|
|
50
75
|
function canonicalizeScopeRequired(scope) {
|
|
51
76
|
if (typeof scope === 'string')
|
|
52
77
|
return scope.normalize('NFC');
|
|
53
78
|
if (Array.isArray(scope) && scope.every((s) => typeof s === 'string')) {
|
|
54
|
-
|
|
79
|
+
const normalized = scope.map((s) => s.normalize('NFC'));
|
|
80
|
+
const seen = new Set();
|
|
81
|
+
for (const s of normalized) {
|
|
82
|
+
if (seen.has(s)) {
|
|
83
|
+
throw new DuplicateScopeRequiredError('computeActionRef: scope_required contains duplicate elements after NFC ' +
|
|
84
|
+
`normalization (duplicate_scope_required): ${JSON.stringify(s)}`);
|
|
85
|
+
}
|
|
86
|
+
seen.add(s);
|
|
87
|
+
}
|
|
88
|
+
return normalized.sort(compareCodePoints);
|
|
55
89
|
}
|
|
56
90
|
return scope;
|
|
57
91
|
}
|
|
@@ -66,6 +100,12 @@ function canonicalizeScopeRequired(scope) {
|
|
|
66
100
|
* array, the array is sorted by Unicode code point. No case folding; scopes
|
|
67
101
|
* that differ only in case stay distinct.
|
|
68
102
|
*
|
|
103
|
+
* Throws DuplicateScopeRequiredError when an array scopeRequired holds two
|
|
104
|
+
* elements equal after NFC normalization. The throw happens inside
|
|
105
|
+
* canonicalization, before the digest is computed, so a duplicated array can
|
|
106
|
+
* never present as an identity mismatch downstream: there is no action_ref to
|
|
107
|
+
* compare in the first place.
|
|
108
|
+
*
|
|
69
109
|
* Canonicalization follows RFC 8785 JCS strictly, per draft-pidlisnyi-aps-01
|
|
70
110
|
* §4.1: null/undefined-valued keys are preserved (not stripped) so that two
|
|
71
111
|
* APS engines independently hashing the same request produce the same
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action-ref.js","sourceRoot":"","sources":["../../../src/core/action-ref.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC,qEAAqE;AACrE,kDAAkD;AAClD,qEAAqE;AACrE,4CAA4C;AAC5C,qGAAqG;AACrG,8EAA8E;AAC9E,EAAE;AACF,mEAAmE;AACnE,yEAAyE;AACzE,2EAA2E;AAC3E,oCAAoC;AACpC,EAAE;AACF,yEAAyE;AACzE,wEAAwE;AACxE,+BAA+B;AAC/B,qEAAqE;AAErE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AAiBrD;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,CAAS,EAAE,CAAS;IAC7C,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,IAAI,CAAC,GAAG,CAAC,CAAA;IACT,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAW,CAAA;QACrC,MAAM,EAAE,GAAG,CAAC,CAAC,WAAW,CAAC,CAAC,CAAW,CAAA;QACrC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAA;QAC7B,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;QACxB,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;IAC1B,CAAC;IACD,OAAO,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAA;AACxC,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"action-ref.js","sourceRoot":"","sources":["../../../src/core/action-ref.ts"],"names":[],"mappings":"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"}
|
|
@@ -77,7 +77,7 @@ export function canonicalizeJCS(value) {
|
|
|
77
77
|
if (Array.isArray(value)) {
|
|
78
78
|
return '[' + value.map(item => canonicalizeJCS(item)).join(',') + ']';
|
|
79
79
|
}
|
|
80
|
-
// Object: sort keys
|
|
80
|
+
// Object: sort keys as UTF-16 code unit arrays per RFC 8785 3.2.3, preserve null values
|
|
81
81
|
const obj = value;
|
|
82
82
|
const keys = Object.keys(obj).sort();
|
|
83
83
|
const pairs = [];
|
|
@@ -141,7 +141,7 @@ export function getTestVectors() {
|
|
|
141
141
|
// V2: Object with null — variants diverge
|
|
142
142
|
addVector('cv-002', 'Null value — JCS preserves, legacy strips', { agentId: 'agent-001', metadata: null, scope: 'read' }, '{"agentId":"agent-001","metadata":null,"scope":"read"}', '{"agentId":"agent-001","scope":"read"}');
|
|
143
143
|
// V3: Key ordering
|
|
144
|
-
addVector('cv-003', 'Keys sorted by
|
|
144
|
+
addVector('cv-003', 'Keys sorted by UTF-16 code units', { zebra: 1, alpha: 2, middle: 3 }, '{"alpha":2,"middle":3,"zebra":1}', '{"alpha":2,"middle":3,"zebra":1}');
|
|
145
145
|
// V4: Nested objects with null
|
|
146
146
|
addVector('cv-004', 'Nested object with null at depth', { outer: { inner: null, value: 42 }, top: 'ok' }, '{"outer":{"inner":null,"value":42},"top":"ok"}', '{"outer":{"value":42},"top":"ok"}');
|
|
147
147
|
// V5: Arrays with null elements
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canonical-jcs.js","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,sCAAsC;AACtC,qEAAqE;AACrE,kEAAkE;AAClE,qEAAqE;AACrE,qEAAqE;AACrE,wEAAwE;AACxE,EAAE;AACF,wBAAwB;AACxB,mDAAmD;AACnD,uDAAuD;AACvD,EAAE;AACF,gEAAgE;AAChE,6DAA6D;AAC7D,qEAAqE;AAErE;;6EAE6E;AAC7E,MAAM,OAAO,wBAAyB,SAAQ,KAAK;IACxC,IAAI,CAAQ;IACrB,oEAAoE;IAC3D,QAAQ,GAAG,iBAAiB,CAAA;IACrC,mEAAmE;IAC1D,MAAM,CAAQ;IACvB,YAAY,IAAY,EAAE,OAAe,EAAE,MAAM,GAAG,gBAAgB;QAClE,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,0BAA0B,CAAA;QACtC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;IACtB,CAAC;CACF;AAED;;;;kFAIkF;AAClF,SAAS,qBAAqB,CAAC,CAAS;IACtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,MAAM,CAAC,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAA;QACzB,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;YACvD,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;gBAAC,CAAC,EAAE,CAAC;gBAAC,SAAQ;YAAC,CAAC,CAAC,aAAa;YACrE,MAAM,IAAI,wBAAwB,CAAC,wBAAwB,EAAE,kJAAkJ,CAAC,CAAA;QAClN,CAAC;QACD,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,IAAI,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,wBAAwB,CAAC,wBAAwB,EAAE,iJAAiJ,CAAC,CAAA;QACjN,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;qEAKqE;AACrE,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAA;IAExD,QAAQ,OAAO,KAAK,EAAE,CAAC;QACrB,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;QACjC,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAA;YAC7E,sEAAsE;YACtE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC9B,CAAC;QACD,KAAK,QAAQ;YACX,qBAAqB,CAAC,KAAK,CAAC,CAAA;YAC5B,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;QAC9B,KAAK,QAAQ,EAAE,CAAC;YACd,IAAI,KAAK,YAAY,IAAI;gBAAE,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;YACvD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAA;YACvE,CAAC;YACD,
|
|
1
|
+
{"version":3,"file":"canonical-jcs.js","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -270,4 +270,7 @@ export type { RevocationObservation, SignedRevocationObservation, RevocationStat
|
|
|
270
270
|
export { createEvidenceBundle, verifyEvidenceBundle, computeMemberDigest, proveMemberInclusion, verifyMemberInclusion, computeClaimBoundaryReport, } from './core/evidence-bundle.js';
|
|
271
271
|
export type { CreateEvidenceBundleOptions, ClaimBoundaryReportOptions } from './core/evidence-bundle.js';
|
|
272
272
|
export type { EvidenceBundle, EvidenceBundleManifest, EvidenceBundleManifestMember, EvidenceBundleMember, EvidenceBundleMemberType, EvidenceBundleVerification, EvidenceBundleMemberVerification, ClaimState, ClaimAxis, ClaimAxisReport, ClaimBoundaryReport, } from './types/evidence-bundle.js';
|
|
273
|
+
export * from './profiles/mcp/index.js';
|
|
274
|
+
export * from './profiles/a2a/index.js';
|
|
275
|
+
export type { HistoricalKeyResolver, HistoricalKeyResolutionRequest, HistoricalKeyResolutionResult, } from './v2/identity-binding/types.js';
|
|
273
276
|
//# sourceMappingURL=index.d.ts.map
|