@peac/adapter-did 0.12.6 → 0.12.7

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@peac/adapter-did",
3
- "version": "0.12.6",
3
+ "version": "0.12.7",
4
4
  "description": "DID document resolution for PEAC receipt verification (did:key, did:web)",
5
5
  "main": "dist/index.cjs",
6
6
  "types": "dist/index.d.ts",
@@ -28,8 +28,8 @@
28
28
  "access": "public"
29
29
  },
30
30
  "dependencies": {
31
- "@peac/kernel": "0.12.6",
32
- "@peac/schema": "0.12.6"
31
+ "@peac/kernel": "0.12.7",
32
+ "@peac/schema": "0.12.7"
33
33
  },
34
34
  "devDependencies": {
35
35
  "@types/node": "^22.19.11",
package/dist/did-key.js DELETED
@@ -1,97 +0,0 @@
1
- "use strict";
2
- /**
3
- * did:key resolver (Ed25519, zero network I/O).
4
- *
5
- * Implements the did:key method spec (W3C CCG v0.9).
6
- * Parses the multicodec-encoded Ed25519 public key directly from
7
- * the DID string. No network requests, no ambient discovery.
8
- *
9
- * Only Ed25519 keys (multicodec 0xed01) are supported.
10
- * Non-Ed25519 did:key DIDs produce an error without revealing
11
- * the actual key type (no oracle).
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.DidKeyResolver = void 0;
15
- const multicodec_js_1 = require("./multicodec.js");
16
- const errors_js_1 = require("./errors.js");
17
- // ---------------------------------------------------------------------------
18
- // did:key Resolver
19
- // ---------------------------------------------------------------------------
20
- /**
21
- * Resolver for the did:key method.
22
- *
23
- * did:key encodes the public key directly in the DID string.
24
- * Resolution is pure computation with zero network I/O.
25
- *
26
- * @example
27
- * ```typescript
28
- * const resolver = new DidKeyResolver();
29
- * const result = await resolver.resolve('did:key:z6MkhaXgBZDvotDkL...');
30
- * const key = extractVerificationKey(result.didDocument!);
31
- * ```
32
- */
33
- class DidKeyResolver {
34
- methods = ['key'];
35
- async resolve(did) {
36
- // Validate DID format
37
- if (!did.startsWith('did:key:')) {
38
- return {
39
- didDocument: null,
40
- didResolutionMetadata: { error: 'invalidDid' },
41
- didDocumentMetadata: {},
42
- };
43
- }
44
- const multibaseValue = did.slice('did:key:'.length);
45
- if (!multibaseValue) {
46
- return {
47
- didDocument: null,
48
- didResolutionMetadata: { error: 'invalidDid' },
49
- didDocumentMetadata: {},
50
- };
51
- }
52
- // Extract Ed25519 public key (validates multicodec prefix)
53
- let publicKeyBytes;
54
- try {
55
- publicKeyBytes = (0, multicodec_js_1.extractEd25519FromMultibase)(multibaseValue);
56
- }
57
- catch (e) {
58
- if (e instanceof errors_js_1.DIDError) {
59
- return {
60
- didDocument: null,
61
- didResolutionMetadata: { error: e.code },
62
- didDocumentMetadata: {},
63
- };
64
- }
65
- return {
66
- didDocument: null,
67
- didResolutionMetadata: { error: 'invalidDid' },
68
- didDocumentMetadata: {},
69
- };
70
- }
71
- // Build DID Document with the extracted key
72
- const keyId = `${did}#${multibaseValue}`;
73
- const verificationMethod = {
74
- id: keyId,
75
- type: 'Ed25519VerificationKey2020',
76
- controller: did,
77
- publicKeyMultibase: multibaseValue,
78
- };
79
- const document = {
80
- '@context': [
81
- 'https://www.w3.org/ns/did/v1',
82
- 'https://w3id.org/security/suites/ed25519-2020/v1',
83
- ],
84
- id: did,
85
- verificationMethod: [verificationMethod],
86
- authentication: [keyId],
87
- assertionMethod: [keyId],
88
- };
89
- return {
90
- didDocument: document,
91
- didResolutionMetadata: { contentType: 'application/did+json' },
92
- didDocumentMetadata: {},
93
- };
94
- }
95
- }
96
- exports.DidKeyResolver = DidKeyResolver;
97
- //# sourceMappingURL=did-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"did-key.js","sourceRoot":"","sources":["../src/did-key.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;GAUG;;;AAKH,mDAA8D;AAC9D,2CAAuC;AAEvC,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAa,cAAc;IAChB,OAAO,GAAG,CAAC,KAAK,CAAU,CAAC;IAEpC,KAAK,CAAC,OAAO,CAAC,GAAW;QACvB,sBAAsB;QACtB,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAChC,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,qBAAqB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC9C,mBAAmB,EAAE,EAAE;aACxB,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAAG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACpD,IAAI,CAAC,cAAc,EAAE,CAAC;YACpB,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,qBAAqB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC9C,mBAAmB,EAAE,EAAE;aACxB,CAAC;QACJ,CAAC;QAED,2DAA2D;QAC3D,IAAI,cAA0B,CAAC;QAC/B,IAAI,CAAC;YACH,cAAc,GAAG,IAAA,2CAA2B,EAAC,cAAc,CAAC,CAAC;QAC/D,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,oBAAQ,EAAE,CAAC;gBAC1B,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,qBAAqB,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,IAAI,EAAE;oBACxC,mBAAmB,EAAE,EAAE;iBACxB,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,qBAAqB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;gBAC9C,mBAAmB,EAAE,EAAE;aACxB,CAAC;QACJ,CAAC;QAED,4CAA4C;QAC5C,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,cAAc,EAAE,CAAC;QAEzC,MAAM,kBAAkB,GAAuB;YAC7C,EAAE,EAAE,KAAK;YACT,IAAI,EAAE,4BAA4B;YAClC,UAAU,EAAE,GAAG;YACf,kBAAkB,EAAE,cAAc;SACnC,CAAC;QAEF,MAAM,QAAQ,GAAgB;YAC5B,UAAU,EAAE;gBACV,8BAA8B;gBAC9B,kDAAkD;aACnD;YACD,EAAE,EAAE,GAAG;YACP,kBAAkB,EAAE,CAAC,kBAAkB,CAAC;YACxC,cAAc,EAAE,CAAC,KAAK,CAAC;YACvB,eAAe,EAAE,CAAC,KAAK,CAAC;SACzB,CAAC;QAEF,OAAO;YACL,WAAW,EAAE,QAAQ;YACrB,qBAAqB,EAAE,EAAE,WAAW,EAAE,sBAAsB,EAAE;YAC9D,mBAAmB,EAAE,EAAE;SACxB,CAAC;IACJ,CAAC;CACF;AApED,wCAoEC"}
package/dist/errors.js DELETED
@@ -1,21 +0,0 @@
1
- "use strict";
2
- /**
3
- * DID adapter error types.
4
- *
5
- * Uses error codes registered in specs/kernel/errors.json (PR3 #571).
6
- */
7
- Object.defineProperty(exports, "__esModule", { value: true });
8
- exports.DIDError = void 0;
9
- /**
10
- * Error thrown by DID adapter operations.
11
- */
12
- class DIDError extends Error {
13
- code;
14
- constructor(code, message) {
15
- super(message);
16
- this.name = 'DIDError';
17
- this.code = code;
18
- }
19
- }
20
- exports.DIDError = DIDError;
21
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":";AAAA;;;;GAIG;;;AAWH;;GAEG;AACH,MAAa,QAAS,SAAQ,KAAK;IACxB,IAAI,CAAe;IAE5B,YAAY,IAAkB,EAAE,OAAe;QAC7C,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AARD,4BAQC"}
@@ -1,131 +0,0 @@
1
- "use strict";
2
- /**
3
- * Verification key extraction from DID Documents.
4
- *
5
- * Implements DD-202 (DID Verification Method Selection Policy):
6
- * 1. Prefer methods referenced in authentication/assertionMethod
7
- * 2. If multiple eligible Ed25519 methods remain, require caller keyId
8
- * or fail with E_DID_KEY_AMBIGUOUS
9
- * 3. Only Ed25519 keys extracted; other types silently skipped
10
- * 4. Iterates ALL methods regardless of match (no early-return oracle)
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- exports.extractVerificationKey = extractVerificationKey;
14
- const multicodec_js_1 = require("./multicodec.js");
15
- const errors_js_1 = require("./errors.js");
16
- // ---------------------------------------------------------------------------
17
- // Implementation
18
- // ---------------------------------------------------------------------------
19
- /**
20
- * Extract an Ed25519 public key from a DID Document.
21
- *
22
- * Selection policy (DD-202):
23
- * 1. Collect all verification methods from the document
24
- * 2. Filter by keyId if provided
25
- * 3. Filter by relationship references (authentication/assertionMethod)
26
- * 4. Try to extract Ed25519 key from each eligible method
27
- * 5. If exactly one Ed25519 key found: return it
28
- * 6. If zero found: return null
29
- * 7. If multiple found without keyId: throw E_DID_KEY_AMBIGUOUS
30
- *
31
- * All methods are iterated regardless of match to prevent key-type oracle.
32
- *
33
- * @param document - The resolved DID Document
34
- * @param options - Key selection options
35
- * @returns 32-byte Ed25519 public key, or null if no suitable key found
36
- * @throws DIDError with E_DID_KEY_AMBIGUOUS if multiple eligible keys
37
- */
38
- function extractVerificationKey(document, options) {
39
- const methods = document.verificationMethod ?? [];
40
- const relationship = options?.relationship ?? 'authentication';
41
- const keyId = options?.keyId;
42
- // Get relationship-referenced method IDs
43
- const relationshipRefs = getRelationshipRefs(document, relationship);
44
- // Collect all eligible Ed25519 keys (iterate ALL methods, no early return)
45
- const candidates = [];
46
- for (const method of methods) {
47
- // Filter by keyId if specified
48
- if (keyId && method.id !== keyId) {
49
- continue;
50
- }
51
- // Prefer relationship-referenced methods if refs exist
52
- if (relationshipRefs.length > 0 && !relationshipRefs.includes(method.id)) {
53
- continue;
54
- }
55
- // Try to extract Ed25519 key (silently skip non-Ed25519)
56
- const key = tryExtractEd25519(method);
57
- if (key) {
58
- candidates.push(key);
59
- }
60
- }
61
- // If no relationship-referenced methods found, fall back to all methods
62
- if (candidates.length === 0 && relationshipRefs.length > 0) {
63
- for (const method of methods) {
64
- if (keyId && method.id !== keyId)
65
- continue;
66
- const key = tryExtractEd25519(method);
67
- if (key)
68
- candidates.push(key);
69
- }
70
- }
71
- if (candidates.length === 0) {
72
- return null;
73
- }
74
- if (candidates.length === 1) {
75
- return candidates[0];
76
- }
77
- // Multiple Ed25519 keys without explicit keyId selection
78
- throw new errors_js_1.DIDError('E_DID_KEY_AMBIGUOUS', `Found ${candidates.length} eligible Ed25519 keys. Provide keyId to select.`);
79
- }
80
- // ---------------------------------------------------------------------------
81
- // Helpers
82
- // ---------------------------------------------------------------------------
83
- /**
84
- * Get verification method IDs referenced by a relationship.
85
- */
86
- function getRelationshipRefs(document, relationship) {
87
- const refs = document[relationship];
88
- if (!refs)
89
- return [];
90
- return refs
91
- .map((ref) => (typeof ref === 'string' ? ref : ref.id))
92
- .filter((id) => typeof id === 'string');
93
- }
94
- /**
95
- * Try to extract an Ed25519 key from a verification method.
96
- * Returns null for non-Ed25519 methods (no oracle).
97
- */
98
- function tryExtractEd25519(method) {
99
- // Try publicKeyMultibase (Multikey / Ed25519VerificationKey2020)
100
- if (method.publicKeyMultibase) {
101
- try {
102
- return (0, multicodec_js_1.extractEd25519FromMultibase)(method.publicKeyMultibase);
103
- }
104
- catch {
105
- return null;
106
- }
107
- }
108
- // Try publicKeyJwk (JsonWebKey2020, OKP/Ed25519)
109
- if (method.publicKeyJwk) {
110
- const jwk = method.publicKeyJwk;
111
- if (jwk.kty === 'OKP' && jwk.crv === 'Ed25519' && typeof jwk.x === 'string') {
112
- try {
113
- // JWK x value is base64url-encoded raw key
114
- const padded = jwk.x + '='.repeat((4 - (jwk.x.length % 4)) % 4);
115
- const binary = atob(padded.replace(/-/g, '+').replace(/_/g, '/'));
116
- const bytes = new Uint8Array(binary.length);
117
- for (let i = 0; i < binary.length; i++) {
118
- bytes[i] = binary.charCodeAt(i);
119
- }
120
- if (bytes.length === 32)
121
- return bytes;
122
- }
123
- catch {
124
- return null;
125
- }
126
- }
127
- return null;
128
- }
129
- return null;
130
- }
131
- //# sourceMappingURL=extract-key.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"extract-key.js","sourceRoot":"","sources":["../src/extract-key.ts"],"names":[],"mappings":"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"}
package/dist/index.js DELETED
@@ -1,29 +0,0 @@
1
- "use strict";
2
- /**
3
- * @peac/adapter-did
4
- *
5
- * DID document resolution for PEAC receipt verification.
6
- * Interoperability adapter layer for W3C DID Core v1.0.
7
- *
8
- * Supported DID methods:
9
- * - did:key (Ed25519, zero network I/O)
10
- * - did:web (HTTPS, SSRF-hardened; added in PR7)
11
- *
12
- * @packageDocumentation
13
- */
14
- Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.DIDError = exports.extractEd25519FromMultibase = exports.extractVerificationKey = exports.DidKeyResolver = exports.createCompositeResolver = void 0;
16
- var resolver_js_1 = require("./resolver.js");
17
- Object.defineProperty(exports, "createCompositeResolver", { enumerable: true, get: function () { return resolver_js_1.createCompositeResolver; } });
18
- // did:key resolver
19
- var did_key_js_1 = require("./did-key.js");
20
- Object.defineProperty(exports, "DidKeyResolver", { enumerable: true, get: function () { return did_key_js_1.DidKeyResolver; } });
21
- var extract_key_js_1 = require("./extract-key.js");
22
- Object.defineProperty(exports, "extractVerificationKey", { enumerable: true, get: function () { return extract_key_js_1.extractVerificationKey; } });
23
- // Multicodec utilities
24
- var multicodec_js_1 = require("./multicodec.js");
25
- Object.defineProperty(exports, "extractEd25519FromMultibase", { enumerable: true, get: function () { return multicodec_js_1.extractEd25519FromMultibase; } });
26
- // Errors
27
- var errors_js_1 = require("./errors.js");
28
- Object.defineProperty(exports, "DIDError", { enumerable: true, get: function () { return errors_js_1.DIDError; } });
29
- //# sourceMappingURL=index.js.map
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AAcH,6CAAwD;AAA/C,sHAAA,uBAAuB,OAAA;AAEhC,mBAAmB;AACnB,2CAA8C;AAArC,4GAAA,cAAc,OAAA;AAIvB,mDAA0D;AAAjD,wHAAA,sBAAsB,OAAA;AAE/B,uBAAuB;AACvB,iDAA8D;AAArD,4HAAA,2BAA2B,OAAA;AAEpC,SAAS;AACT,yCAAuC;AAA9B,qGAAA,QAAQ,OAAA"}
@@ -1,121 +0,0 @@
1
- "use strict";
2
- /**
3
- * Ed25519 multicodec prefix parsing.
4
- *
5
- * Supports both multibase forms allowed by the did:key spec (CCG v0.9):
6
- * - 'z' prefix: base58btc encoding
7
- * - 'u' prefix: base64url encoding
8
- *
9
- * The Ed25519 multicodec prefix is 0xed01 as a varint (2 bytes).
10
- * After stripping the 2-byte prefix, the remaining 32 bytes are
11
- * the raw Ed25519 public key.
12
- */
13
- Object.defineProperty(exports, "__esModule", { value: true });
14
- exports.extractEd25519FromMultibase = extractEd25519FromMultibase;
15
- const errors_js_1 = require("./errors.js");
16
- // ---------------------------------------------------------------------------
17
- // Constants
18
- // ---------------------------------------------------------------------------
19
- /** Ed25519 multicodec prefix as varint: [0xed, 0x01] */
20
- const ED25519_MULTICODEC_PREFIX = new Uint8Array([0xed, 0x01]);
21
- /** Expected Ed25519 public key length in bytes */
22
- const ED25519_KEY_LENGTH = 32;
23
- /** Total expected length: 2 byte prefix + 32 byte key */
24
- const ED25519_MULTICODEC_LENGTH = ED25519_MULTICODEC_PREFIX.length + ED25519_KEY_LENGTH;
25
- // ---------------------------------------------------------------------------
26
- // Base58btc decoder (minimal, for 'z' prefix multibase)
27
- // ---------------------------------------------------------------------------
28
- const BASE58_ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz';
29
- const BASE58_MAP = new Map();
30
- for (let i = 0; i < BASE58_ALPHABET.length; i++) {
31
- BASE58_MAP.set(BASE58_ALPHABET[i], i);
32
- }
33
- function base58btcDecode(input) {
34
- if (input.length === 0)
35
- return new Uint8Array(0);
36
- // Count leading '1's (zero bytes)
37
- let zeros = 0;
38
- while (zeros < input.length && input[zeros] === '1') {
39
- zeros++;
40
- }
41
- // Decode
42
- const size = Math.ceil(input.length * 733 / 1000) + 1;
43
- const b256 = new Uint8Array(size);
44
- let length = 0;
45
- for (let i = zeros; i < input.length; i++) {
46
- const value = BASE58_MAP.get(input[i]);
47
- if (value === undefined) {
48
- throw new errors_js_1.DIDError('E_DID_DOCUMENT_INVALID', `Invalid base58btc character: ${input[i]}`);
49
- }
50
- let carry = value;
51
- for (let j = 0; j < length || carry > 0; j++) {
52
- carry += 58 * (b256[j] || 0);
53
- b256[j] = carry % 256;
54
- carry = Math.floor(carry / 256);
55
- if (j >= length)
56
- length = j + 1;
57
- }
58
- }
59
- // Build result with leading zeros
60
- const result = new Uint8Array(zeros + length);
61
- for (let i = 0; i < length; i++) {
62
- result[zeros + length - 1 - i] = b256[i];
63
- }
64
- return result;
65
- }
66
- // ---------------------------------------------------------------------------
67
- // Base64url decoder (for 'u' prefix multibase)
68
- // ---------------------------------------------------------------------------
69
- function base64urlDecode(input) {
70
- // Pad to multiple of 4
71
- const padded = input + '='.repeat((4 - (input.length % 4)) % 4);
72
- const binary = atob(padded.replace(/-/g, '+').replace(/_/g, '/'));
73
- const bytes = new Uint8Array(binary.length);
74
- for (let i = 0; i < binary.length; i++) {
75
- bytes[i] = binary.charCodeAt(i);
76
- }
77
- return bytes;
78
- }
79
- // ---------------------------------------------------------------------------
80
- // Public API
81
- // ---------------------------------------------------------------------------
82
- /**
83
- * Extract an Ed25519 public key from a multibase-encoded multicodec value.
84
- *
85
- * Supports both multibase prefixes:
86
- * - 'z': base58btc (e.g., did:key:z6Mk...)
87
- * - 'u': base64url
88
- *
89
- * @param multibaseValue - The multibase-encoded value (including prefix character)
90
- * @returns 32-byte Ed25519 public key
91
- * @throws DIDError if not Ed25519 or malformed
92
- */
93
- function extractEd25519FromMultibase(multibaseValue) {
94
- if (multibaseValue.length < 2) {
95
- throw new errors_js_1.DIDError('E_DID_DOCUMENT_INVALID', 'Multibase value too short');
96
- }
97
- const prefix = multibaseValue[0];
98
- const encoded = multibaseValue.slice(1);
99
- let decoded;
100
- if (prefix === 'z') {
101
- decoded = base58btcDecode(encoded);
102
- }
103
- else if (prefix === 'u') {
104
- decoded = base64urlDecode(encoded);
105
- }
106
- else {
107
- throw new errors_js_1.DIDError('E_DID_DOCUMENT_INVALID', `Unsupported multibase prefix: '${prefix}'. Expected 'z' (base58btc) or 'u' (base64url).`);
108
- }
109
- // Check total length
110
- if (decoded.length !== ED25519_MULTICODEC_LENGTH) {
111
- throw new errors_js_1.DIDError('E_DID_KEY_NOT_FOUND', `Expected ${ED25519_MULTICODEC_LENGTH} bytes (2 prefix + 32 key), got ${decoded.length}`);
112
- }
113
- // Verify Ed25519 multicodec prefix (0xed, 0x01)
114
- if (decoded[0] !== ED25519_MULTICODEC_PREFIX[0] || decoded[1] !== ED25519_MULTICODEC_PREFIX[1]) {
115
- // Non-Ed25519 key type: do NOT throw an oracle-revealing error about
116
- // what type it is. Just say Ed25519 not found.
117
- throw new errors_js_1.DIDError('E_DID_KEY_NOT_FOUND', 'Multicodec prefix does not indicate Ed25519');
118
- }
119
- return decoded.slice(2);
120
- }
121
- //# sourceMappingURL=multicodec.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"multicodec.js","sourceRoot":"","sources":["../src/multicodec.ts"],"names":[],"mappings":"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"}
package/dist/resolver.js DELETED
@@ -1,58 +0,0 @@
1
- "use strict";
2
- /**
3
- * DID Resolver interface and composite resolver.
4
- *
5
- * Pluggable resolver architecture: callers instantiate and configure
6
- * resolvers explicitly (DD-52: no ambient key discovery).
7
- */
8
- Object.defineProperty(exports, "__esModule", { value: true });
9
- exports.createCompositeResolver = createCompositeResolver;
10
- // ---------------------------------------------------------------------------
11
- // Composite Resolver
12
- // ---------------------------------------------------------------------------
13
- /**
14
- * Create a composite resolver that delegates to method-specific resolvers.
15
- *
16
- * Tries resolvers in order by method match. The first resolver whose
17
- * `methods` array includes the DID's method handles the resolution.
18
- *
19
- * @param resolvers - Array of method-specific resolvers
20
- * @returns A composite resolver that delegates by method
21
- */
22
- function createCompositeResolver(resolvers) {
23
- return {
24
- methods: resolvers.flatMap((r) => [...r.methods]),
25
- async resolve(did) {
26
- const method = extractMethod(did);
27
- if (!method) {
28
- return {
29
- didDocument: null,
30
- didResolutionMetadata: { error: 'invalidDid' },
31
- didDocumentMetadata: {},
32
- };
33
- }
34
- for (const resolver of resolvers) {
35
- if (resolver.methods.includes(method)) {
36
- return resolver.resolve(did);
37
- }
38
- }
39
- return {
40
- didDocument: null,
41
- didResolutionMetadata: { error: 'methodNotSupported' },
42
- didDocumentMetadata: {},
43
- };
44
- },
45
- };
46
- }
47
- /**
48
- * Extract the method from a DID string (e.g., "key" from "did:key:z6Mk...").
49
- */
50
- function extractMethod(did) {
51
- if (!did.startsWith('did:'))
52
- return null;
53
- const parts = did.split(':');
54
- if (parts.length < 3)
55
- return null;
56
- return parts[1];
57
- }
58
- //# sourceMappingURL=resolver.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../src/resolver.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;AAkCH,0DA2BC;AAxCD,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;;GAQG;AACH,SAAgB,uBAAuB,CAAC,SAAwB;IAC9D,OAAO;QACL,OAAO,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC;QAEjD,KAAK,CAAC,OAAO,CAAC,GAAW;YACvB,MAAM,MAAM,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;YAClC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;oBACL,WAAW,EAAE,IAAI;oBACjB,qBAAqB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE;oBAC9C,mBAAmB,EAAE,EAAE;iBACxB,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBACjC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;oBACtC,OAAO,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,OAAO;gBACL,WAAW,EAAE,IAAI;gBACjB,qBAAqB,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE;gBACtD,mBAAmB,EAAE,EAAE;aACxB,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,GAAW;IAChC,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACzC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IAClC,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
package/dist/types.js DELETED
@@ -1,13 +0,0 @@
1
- "use strict";
2
- /**
3
- * W3C DID Core v1.0 types for PEAC adapter-did.
4
- *
5
- * These types model the subset of W3C DID Core v1.0 (Recommendation 2022)
6
- * needed for Ed25519 key extraction. This is an interoperability adapter
7
- * layer, not a normative W3C dependency. did:key and did:web are CCG
8
- * drafts with no formal W3C Recommendation standing.
9
- *
10
- * @see https://www.w3.org/TR/did-core/
11
- */
12
- Object.defineProperty(exports, "__esModule", { value: true });
13
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG"}