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.
Files changed (128) hide show
  1. package/README.md +2 -2
  2. package/dist/src/adapters/oauth-id-jag/import-v1.d.ts +74 -0
  3. package/dist/src/adapters/oauth-id-jag/import-v1.d.ts.map +1 -0
  4. package/dist/src/adapters/oauth-id-jag/import-v1.js +243 -0
  5. package/dist/src/adapters/oauth-id-jag/import-v1.js.map +1 -0
  6. package/dist/src/core/action-ref.d.ts +21 -0
  7. package/dist/src/core/action-ref.d.ts.map +1 -1
  8. package/dist/src/core/action-ref.js +47 -7
  9. package/dist/src/core/action-ref.js.map +1 -1
  10. package/dist/src/core/canonical-jcs.js +2 -2
  11. package/dist/src/core/canonical-jcs.js.map +1 -1
  12. package/dist/src/index.d.ts +3 -0
  13. package/dist/src/index.d.ts.map +1 -1
  14. package/dist/src/index.js +6 -0
  15. package/dist/src/index.js.map +1 -1
  16. package/dist/src/profiles/a2a/identity-v1.d.ts +44 -0
  17. package/dist/src/profiles/a2a/identity-v1.d.ts.map +1 -0
  18. package/dist/src/profiles/a2a/identity-v1.js +208 -0
  19. package/dist/src/profiles/a2a/identity-v1.js.map +1 -0
  20. package/dist/src/profiles/a2a/index.d.ts +2 -0
  21. package/dist/src/profiles/a2a/index.d.ts.map +1 -0
  22. package/dist/src/profiles/a2a/index.js +4 -0
  23. package/dist/src/profiles/a2a/index.js.map +1 -0
  24. package/dist/src/profiles/mcp/authorization-v1.d.ts +88 -0
  25. package/dist/src/profiles/mcp/authorization-v1.d.ts.map +1 -0
  26. package/dist/src/profiles/mcp/authorization-v1.js +215 -0
  27. package/dist/src/profiles/mcp/authorization-v1.js.map +1 -0
  28. package/dist/src/profiles/mcp/index.d.ts +2 -0
  29. package/dist/src/profiles/mcp/index.d.ts.map +1 -0
  30. package/dist/src/profiles/mcp/index.js +4 -0
  31. package/dist/src/profiles/mcp/index.js.map +1 -0
  32. package/dist/src/v2/action-reference/index.d.ts +2 -0
  33. package/dist/src/v2/action-reference/index.d.ts.map +1 -0
  34. package/dist/src/v2/action-reference/index.js +4 -0
  35. package/dist/src/v2/action-reference/index.js.map +1 -0
  36. package/dist/src/v2/action-reference/v2.d.ts +23 -0
  37. package/dist/src/v2/action-reference/v2.d.ts.map +1 -0
  38. package/dist/src/v2/action-reference/v2.js +57 -0
  39. package/dist/src/v2/action-reference/v2.js.map +1 -0
  40. package/dist/src/v2/authority-delegation/budget.d.ts +20 -0
  41. package/dist/src/v2/authority-delegation/budget.d.ts.map +1 -0
  42. package/dist/src/v2/authority-delegation/budget.js +141 -0
  43. package/dist/src/v2/authority-delegation/budget.js.map +1 -0
  44. package/dist/src/v2/authority-delegation/canonical.d.ts +12 -0
  45. package/dist/src/v2/authority-delegation/canonical.d.ts.map +1 -0
  46. package/dist/src/v2/authority-delegation/canonical.js +33 -0
  47. package/dist/src/v2/authority-delegation/canonical.js.map +1 -0
  48. package/dist/src/v2/authority-delegation/compare.d.ts +4 -0
  49. package/dist/src/v2/authority-delegation/compare.d.ts.map +1 -0
  50. package/dist/src/v2/authority-delegation/compare.js +67 -0
  51. package/dist/src/v2/authority-delegation/compare.js.map +1 -0
  52. package/dist/src/v2/authority-delegation/index.d.ts +10 -0
  53. package/dist/src/v2/authority-delegation/index.d.ts.map +1 -0
  54. package/dist/src/v2/authority-delegation/index.js +12 -0
  55. package/dist/src/v2/authority-delegation/index.js.map +1 -0
  56. package/dist/src/v2/authority-delegation/issue.d.ts +10 -0
  57. package/dist/src/v2/authority-delegation/issue.d.ts.map +1 -0
  58. package/dist/src/v2/authority-delegation/issue.js +52 -0
  59. package/dist/src/v2/authority-delegation/issue.js.map +1 -0
  60. package/dist/src/v2/authority-delegation/parse.d.ts +4 -0
  61. package/dist/src/v2/authority-delegation/parse.d.ts.map +1 -0
  62. package/dist/src/v2/authority-delegation/parse.js +96 -0
  63. package/dist/src/v2/authority-delegation/parse.js.map +1 -0
  64. package/dist/src/v2/authority-delegation/schema.d.ts +7 -0
  65. package/dist/src/v2/authority-delegation/schema.d.ts.map +1 -0
  66. package/dist/src/v2/authority-delegation/schema.js +177 -0
  67. package/dist/src/v2/authority-delegation/schema.js.map +1 -0
  68. package/dist/src/v2/authority-delegation/scope.d.ts +6 -0
  69. package/dist/src/v2/authority-delegation/scope.d.ts.map +1 -0
  70. package/dist/src/v2/authority-delegation/scope.js +50 -0
  71. package/dist/src/v2/authority-delegation/scope.js.map +1 -0
  72. package/dist/src/v2/authority-delegation/types.d.ts +98 -0
  73. package/dist/src/v2/authority-delegation/types.d.ts.map +1 -0
  74. package/dist/src/v2/authority-delegation/types.js +10 -0
  75. package/dist/src/v2/authority-delegation/types.js.map +1 -0
  76. package/dist/src/v2/authority-delegation/verify.d.ts +5 -0
  77. package/dist/src/v2/authority-delegation/verify.d.ts.map +1 -0
  78. package/dist/src/v2/authority-delegation/verify.js +124 -0
  79. package/dist/src/v2/authority-delegation/verify.js.map +1 -0
  80. package/dist/src/v2/identity-binding/did-aps.d.ts +12 -0
  81. package/dist/src/v2/identity-binding/did-aps.d.ts.map +1 -0
  82. package/dist/src/v2/identity-binding/did-aps.js +53 -0
  83. package/dist/src/v2/identity-binding/did-aps.js.map +1 -0
  84. package/dist/src/v2/identity-binding/index.d.ts +6 -0
  85. package/dist/src/v2/identity-binding/index.d.ts.map +1 -0
  86. package/dist/src/v2/identity-binding/index.js +8 -0
  87. package/dist/src/v2/identity-binding/index.js.map +1 -0
  88. package/dist/src/v2/identity-binding/passport.d.ts +18 -0
  89. package/dist/src/v2/identity-binding/passport.d.ts.map +1 -0
  90. package/dist/src/v2/identity-binding/passport.js +144 -0
  91. package/dist/src/v2/identity-binding/passport.js.map +1 -0
  92. package/dist/src/v2/identity-binding/principal-binding.d.ts +20 -0
  93. package/dist/src/v2/identity-binding/principal-binding.d.ts.map +1 -0
  94. package/dist/src/v2/identity-binding/principal-binding.js +128 -0
  95. package/dist/src/v2/identity-binding/principal-binding.js.map +1 -0
  96. package/dist/src/v2/identity-binding/revocation.d.ts +12 -0
  97. package/dist/src/v2/identity-binding/revocation.d.ts.map +1 -0
  98. package/dist/src/v2/identity-binding/revocation.js +97 -0
  99. package/dist/src/v2/identity-binding/revocation.js.map +1 -0
  100. package/dist/src/v2/identity-binding/types.d.ts +72 -0
  101. package/dist/src/v2/identity-binding/types.d.ts.map +1 -0
  102. package/dist/src/v2/identity-binding/types.js +4 -0
  103. package/dist/src/v2/identity-binding/types.js.map +1 -0
  104. package/dist/src/v2/identity-binding/validation.d.ts +9 -0
  105. package/dist/src/v2/identity-binding/validation.d.ts.map +1 -0
  106. package/dist/src/v2/identity-binding/validation.js +104 -0
  107. package/dist/src/v2/identity-binding/validation.js.map +1 -0
  108. package/dist/src/v2/receipt-core/decision-ref.d.ts +23 -0
  109. package/dist/src/v2/receipt-core/decision-ref.d.ts.map +1 -0
  110. package/dist/src/v2/receipt-core/decision-ref.js +87 -0
  111. package/dist/src/v2/receipt-core/decision-ref.js.map +1 -0
  112. package/dist/src/v2/receipt-core/jcs.d.ts +15 -0
  113. package/dist/src/v2/receipt-core/jcs.d.ts.map +1 -0
  114. package/dist/src/v2/receipt-core/jcs.js +198 -0
  115. package/dist/src/v2/receipt-core/jcs.js.map +1 -0
  116. package/dist/src/v2/receipt-core/receipt.d.ts +22 -0
  117. package/dist/src/v2/receipt-core/receipt.d.ts.map +1 -0
  118. package/dist/src/v2/receipt-core/receipt.js +132 -0
  119. package/dist/src/v2/receipt-core/receipt.js.map +1 -0
  120. package/dist/src/v2/receipt-core/supporting-record.d.ts +55 -0
  121. package/dist/src/v2/receipt-core/supporting-record.d.ts.map +1 -0
  122. package/dist/src/v2/receipt-core/supporting-record.js +243 -0
  123. package/dist/src/v2/receipt-core/supporting-record.js.map +1 -0
  124. package/dist/src/v2/receipt-core/types.d.ts +95 -0
  125. package/dist/src/v2/receipt-core/types.d.ts.map +1 -0
  126. package/dist/src/v2/receipt-core/types.js +4 -0
  127. package/dist/src/v2/receipt-core/types.js.map +1 -0
  128. 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,026`, 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.
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-01`
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;AAuCH;;;;;;;;;;;;;;;;;;;;;GAqBG;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"}
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 Unicode code point.
44
- * Operates on a copy; never mutates the caller's array. The single-string
45
- * form (the current ActionIntent type) is NFC-normalized; null/undefined and
46
- * any non-conforming shape (non-string elements) pass through unchanged so
47
- * the strict-JCS null-preservation contract and legacy behavior for
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
- return scope.map((s) => s.normalize('NFC')).sort(compareCodePoints);
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;;;;;;;;GAQG;AACH,SAAS,yBAAyB,CAAC,KAAc;IAC/C,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC;QACtE,OAAQ,KAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACnF,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAuB;IACtD,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACvD,OAAO,gBAAgB,CAAC;QACtB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI;QAC9B,aAAa,EAAE,yBAAyB,CAAC,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC;QACrE,SAAS,EAAE,kBAAkB,CAAC,EAAE,CAAC;KAClC,CAAC,CAAA;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,CAAS,EAAE,CAAS;IAClD,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAClF,CAAC"}
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 by Unicode code point, preserve null values
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 Unicode code point', { zebra: 1, alpha: 2, middle: 3 }, '{"alpha":2,"middle":3,"zebra":1}', '{"alpha":2,"middle":3,"zebra":1}');
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":"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"}
1
+ {"version":3,"file":"canonical-jcs.js","sourceRoot":"","sources":["../../../src/core/canonical-jcs.ts"],"names":[],"mappings":"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"}
@@ -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