a2a-did 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +180 -0
- package/dist/a2a/constants.d.ts +10 -0
- package/dist/a2a/constants.d.ts.map +1 -0
- package/dist/a2a/constants.js +10 -0
- package/dist/a2a/constants.js.map +1 -0
- package/dist/a2a/index.d.ts +23 -0
- package/dist/a2a/index.d.ts.map +1 -0
- package/dist/a2a/index.js +27 -0
- package/dist/a2a/index.js.map +1 -0
- package/dist/a2a/resolution.d.ts +20 -0
- package/dist/a2a/resolution.d.ts.map +1 -0
- package/dist/a2a/resolution.js +55 -0
- package/dist/a2a/resolution.js.map +1 -0
- package/dist/a2a/signing.d.ts +24 -0
- package/dist/a2a/signing.d.ts.map +1 -0
- package/dist/a2a/signing.js +31 -0
- package/dist/a2a/signing.js.map +1 -0
- package/dist/a2a/utils.d.ts +29 -0
- package/dist/a2a/utils.d.ts.map +1 -0
- package/dist/a2a/utils.js +70 -0
- package/dist/a2a/utils.js.map +1 -0
- package/dist/a2a/verification.d.ts +42 -0
- package/dist/a2a/verification.d.ts.map +1 -0
- package/dist/a2a/verification.js +156 -0
- package/dist/a2a/verification.js.map +1 -0
- package/dist/agent.d.ts +99 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +149 -0
- package/dist/agent.js.map +1 -0
- package/dist/did/config-types.d.ts +37 -0
- package/dist/did/config-types.d.ts.map +1 -0
- package/dist/did/config-types.js +6 -0
- package/dist/did/config-types.js.map +1 -0
- package/dist/did/document.d.ts +20 -0
- package/dist/did/document.d.ts.map +1 -0
- package/dist/did/document.js +21 -0
- package/dist/did/document.js.map +1 -0
- package/dist/did/factory.d.ts +31 -0
- package/dist/did/factory.d.ts.map +1 -0
- package/dist/did/factory.js +46 -0
- package/dist/did/factory.js.map +1 -0
- package/dist/did/handlers/ethr-handler.d.ts +62 -0
- package/dist/did/handlers/ethr-handler.d.ts.map +1 -0
- package/dist/did/handlers/ethr-handler.js +184 -0
- package/dist/did/handlers/ethr-handler.js.map +1 -0
- package/dist/did/handlers/web-handler.d.ts +73 -0
- package/dist/did/handlers/web-handler.d.ts.map +1 -0
- package/dist/did/handlers/web-handler.js +170 -0
- package/dist/did/handlers/web-handler.js.map +1 -0
- package/dist/did/index.d.ts +10 -0
- package/dist/did/index.d.ts.map +1 -0
- package/dist/did/index.js +15 -0
- package/dist/did/index.js.map +1 -0
- package/dist/did/resolver.d.ts +85 -0
- package/dist/did/resolver.d.ts.map +1 -0
- package/dist/did/resolver.js +120 -0
- package/dist/did/resolver.js.map +1 -0
- package/dist/did/resolvers/ethr.d.ts +74 -0
- package/dist/did/resolvers/ethr.d.ts.map +1 -0
- package/dist/did/resolvers/ethr.js +67 -0
- package/dist/did/resolvers/ethr.js.map +1 -0
- package/dist/did/resolvers/index.d.ts +8 -0
- package/dist/did/resolvers/index.d.ts.map +1 -0
- package/dist/did/resolvers/index.js +8 -0
- package/dist/did/resolvers/index.js.map +1 -0
- package/dist/did/resolvers/web.d.ts +13 -0
- package/dist/did/resolvers/web.d.ts.map +1 -0
- package/dist/did/resolvers/web.js +97 -0
- package/dist/did/resolvers/web.js.map +1 -0
- package/dist/did/service-loader.d.ts +15 -0
- package/dist/did/service-loader.d.ts.map +1 -0
- package/dist/did/service-loader.js +20 -0
- package/dist/did/service-loader.js.map +1 -0
- package/dist/did/service.d.ts +99 -0
- package/dist/did/service.d.ts.map +1 -0
- package/dist/did/service.js +75 -0
- package/dist/did/service.js.map +1 -0
- package/dist/did/signing.d.ts +19 -0
- package/dist/did/signing.d.ts.map +1 -0
- package/dist/did/signing.js +37 -0
- package/dist/did/signing.js.map +1 -0
- package/dist/did/types.d.ts +134 -0
- package/dist/did/types.d.ts.map +1 -0
- package/dist/did/types.js +2 -0
- package/dist/did/types.js.map +1 -0
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +17 -0
- package/dist/index.js.map +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +70 -0
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DID Resolver
|
|
3
|
+
* Combines modular resolvers for different DID methods
|
|
4
|
+
* @module did/resolver
|
|
5
|
+
*/
|
|
6
|
+
import { Resolver } from 'did-resolver';
|
|
7
|
+
import { createWebResolver } from './resolvers/web.js';
|
|
8
|
+
import { createEthrResolver } from './resolvers/ethr.js';
|
|
9
|
+
// Singleton resolver instance (lazy initialized)
|
|
10
|
+
let defaultResolver = null;
|
|
11
|
+
let defaultConfig = null;
|
|
12
|
+
/**
|
|
13
|
+
* Create a new DID resolver with specified configuration
|
|
14
|
+
* @param config - Resolver configuration
|
|
15
|
+
* @returns Configured Resolver instance
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* // did:web only (no external dependencies)
|
|
19
|
+
* const resolver = createResolver({ web: true });
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* // did:web + did:ethr
|
|
23
|
+
* const resolver = createResolver({
|
|
24
|
+
* web: true,
|
|
25
|
+
* ethr: {
|
|
26
|
+
* networks: [{
|
|
27
|
+
* name: 'sepolia',
|
|
28
|
+
* rpcUrl: 'https://sepolia.infura.io/v3/YOUR_KEY',
|
|
29
|
+
* }]
|
|
30
|
+
* }
|
|
31
|
+
* });
|
|
32
|
+
*/
|
|
33
|
+
export function createResolver(config = {}) {
|
|
34
|
+
const resolvers = {};
|
|
35
|
+
// did:web (enabled by default)
|
|
36
|
+
if (config.web !== false) {
|
|
37
|
+
Object.assign(resolvers, createWebResolver());
|
|
38
|
+
}
|
|
39
|
+
// did:ethr (requires explicit configuration)
|
|
40
|
+
if (config.ethr) {
|
|
41
|
+
Object.assign(resolvers, createEthrResolver(config.ethr));
|
|
42
|
+
}
|
|
43
|
+
// Future DID methods can be added here following the same pattern
|
|
44
|
+
return new Resolver(resolvers);
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Configure the default resolver
|
|
48
|
+
* Call this at application startup to set up DID resolution
|
|
49
|
+
*
|
|
50
|
+
* IMPORTANT: If you use did:ethr, you MUST call this function before resolving did:ethr DIDs.
|
|
51
|
+
* Otherwise, did:ethr resolution will fail.
|
|
52
|
+
*
|
|
53
|
+
* @param config - Resolver configuration
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* // In your app initialization (required for did:ethr)
|
|
57
|
+
* configureResolver({
|
|
58
|
+
* web: true,
|
|
59
|
+
* ethr: {
|
|
60
|
+
* networks: [{ name: 'sepolia', rpcUrl: process.env.SEPOLIA_RPC_URL }]
|
|
61
|
+
* }
|
|
62
|
+
* });
|
|
63
|
+
*/
|
|
64
|
+
export function configureResolver(config) {
|
|
65
|
+
defaultConfig = config;
|
|
66
|
+
defaultResolver = createResolver(config);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get the default resolver instance
|
|
70
|
+
* If not configured, creates a did:web-only resolver
|
|
71
|
+
* @returns The default Resolver instance
|
|
72
|
+
*/
|
|
73
|
+
export function getResolver() {
|
|
74
|
+
if (!defaultResolver) {
|
|
75
|
+
// Default: did:web only (no external dependencies)
|
|
76
|
+
defaultResolver = createResolver({ web: true });
|
|
77
|
+
defaultConfig = { web: true };
|
|
78
|
+
}
|
|
79
|
+
return defaultResolver;
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Get the current resolver configuration
|
|
83
|
+
* @returns Current configuration or null if using defaults
|
|
84
|
+
*/
|
|
85
|
+
export function getResolverConfig() {
|
|
86
|
+
return defaultConfig;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Check if a specific DID method is enabled
|
|
90
|
+
* @param method - DID method to check (e.g., 'web', 'ethr')
|
|
91
|
+
* @returns true if the method is enabled in the current configuration
|
|
92
|
+
*/
|
|
93
|
+
export function isMethodEnabled(method) {
|
|
94
|
+
const config = defaultConfig ?? { web: true };
|
|
95
|
+
switch (method) {
|
|
96
|
+
case 'web':
|
|
97
|
+
return config.web !== false;
|
|
98
|
+
case 'ethr':
|
|
99
|
+
return !!config.ethr;
|
|
100
|
+
default:
|
|
101
|
+
return false;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolve a DID to its document
|
|
106
|
+
* @param did - The DID to resolve
|
|
107
|
+
* @returns The DID Document if found, null otherwise
|
|
108
|
+
*/
|
|
109
|
+
export async function resolveDID(did) {
|
|
110
|
+
const resolver = getResolver();
|
|
111
|
+
const result = await resolver.resolve(did);
|
|
112
|
+
if (result.didResolutionMetadata.error) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return result.didDocument;
|
|
116
|
+
}
|
|
117
|
+
// Re-export resolver types and utilities
|
|
118
|
+
export { createWebResolver } from './resolvers/web.js';
|
|
119
|
+
export { createEthrResolver, createSepoliaResolver, KNOWN_NETWORKS, } from './resolvers/ethr.js';
|
|
120
|
+
//# sourceMappingURL=resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/did/resolver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,QAAQ,EAAoB,MAAM,cAAc,CAAC;AAC1D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,kBAAkB,EAA2B,MAAM,qBAAqB,CAAC;AAkBlF,iDAAiD;AACjD,IAAI,eAAe,GAAoB,IAAI,CAAC;AAC5C,IAAI,aAAa,GAA0B,IAAI,CAAC;AAEhD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,UAAU,cAAc,CAAC,SAAyB,EAAE;IACxD,MAAM,SAAS,GAAgC,EAAE,CAAC;IAElD,+BAA+B;IAC/B,IAAI,MAAM,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;QACzB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,iBAAiB,EAAE,CAAC,CAAC;IAChD,CAAC;IAED,6CAA6C;IAC7C,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,kEAAkE;IAElE,OAAO,IAAI,QAAQ,CAAC,SAAS,CAAC,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB;IACtD,aAAa,GAAG,MAAM,CAAC;IACvB,eAAe,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,WAAW;IACzB,IAAI,CAAC,eAAe,EAAE,CAAC;QACrB,mDAAmD;QACnD,eAAe,GAAG,cAAc,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;QAChD,aAAa,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAChC,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB;IAC/B,OAAO,aAAa,CAAC;AACvB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,MAAsB;IACpD,MAAM,MAAM,GAAG,aAAa,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;IAC9C,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,OAAO,MAAM,CAAC,GAAG,KAAK,KAAK,CAAC;QAC9B,KAAK,MAAM;YACT,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACvB;YACE,OAAO,KAAK,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IAC1C,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,qBAAqB,CAAC,KAAK,EAAE,CAAC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,OAAO,MAAM,CAAC,WAAqC,CAAC;AACtD,CAAC;AAED,yCAAyC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,GAIf,MAAM,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* did:ethr Resolver
|
|
3
|
+
* Resolves did:ethr DIDs from Ethereum chains via RPC
|
|
4
|
+
* @module did/resolvers/ethr
|
|
5
|
+
*/
|
|
6
|
+
import { type DIDResolver } from 'did-resolver';
|
|
7
|
+
/**
|
|
8
|
+
* Known Ethereum networks with their default configurations
|
|
9
|
+
*/
|
|
10
|
+
export declare const KNOWN_NETWORKS: {
|
|
11
|
+
readonly mainnet: {
|
|
12
|
+
readonly chainId: 1;
|
|
13
|
+
readonly registry: "0xdca7ef03e98e0dc2b855be647c39abe984fcf21b";
|
|
14
|
+
};
|
|
15
|
+
readonly sepolia: {
|
|
16
|
+
readonly chainId: 11155111;
|
|
17
|
+
readonly registry: "0x03d5003bf0e79c5f5223588f347eba39afbc3818";
|
|
18
|
+
};
|
|
19
|
+
readonly goerli: {
|
|
20
|
+
readonly chainId: 5;
|
|
21
|
+
readonly registry: "0xdca7ef03e98e0dc2b855be647c39abe984fcf21b";
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
export type KnownNetwork = keyof typeof KNOWN_NETWORKS;
|
|
25
|
+
/**
|
|
26
|
+
* Configuration for a single Ethereum network
|
|
27
|
+
*/
|
|
28
|
+
export interface EthrNetworkConfig {
|
|
29
|
+
/** Network name (e.g., 'mainnet', 'sepolia') */
|
|
30
|
+
name: string;
|
|
31
|
+
/** RPC URL for the network */
|
|
32
|
+
rpcUrl: string;
|
|
33
|
+
/** Chain ID (optional if using known network) */
|
|
34
|
+
chainId?: number;
|
|
35
|
+
/** EthereumDIDRegistry contract address (optional if using known network) */
|
|
36
|
+
registry?: string;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Configuration for did:ethr resolver
|
|
40
|
+
*/
|
|
41
|
+
export interface EthrResolverConfig {
|
|
42
|
+
/** Network configurations */
|
|
43
|
+
networks: EthrNetworkConfig[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Create did:ethr resolver with explicit configuration
|
|
47
|
+
* @param config - Network configuration(s)
|
|
48
|
+
* @returns DID resolver methods for did:ethr
|
|
49
|
+
*
|
|
50
|
+
* @example
|
|
51
|
+
* // Single network
|
|
52
|
+
* createEthrResolver({
|
|
53
|
+
* networks: [{
|
|
54
|
+
* name: 'sepolia',
|
|
55
|
+
* rpcUrl: 'https://sepolia.infura.io/v3/YOUR_KEY',
|
|
56
|
+
* }]
|
|
57
|
+
* });
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* // Multiple networks
|
|
61
|
+
* createEthrResolver({
|
|
62
|
+
* networks: [
|
|
63
|
+
* { name: 'mainnet', rpcUrl: 'https://mainnet.infura.io/v3/KEY' },
|
|
64
|
+
* { name: 'sepolia', rpcUrl: 'https://sepolia.infura.io/v3/KEY' },
|
|
65
|
+
* ]
|
|
66
|
+
* });
|
|
67
|
+
*/
|
|
68
|
+
export declare function createEthrResolver(config: EthrResolverConfig): Record<string, DIDResolver>;
|
|
69
|
+
/**
|
|
70
|
+
* Convenience function to create resolver for Sepolia testnet
|
|
71
|
+
* @param rpcUrl - Sepolia RPC URL
|
|
72
|
+
*/
|
|
73
|
+
export declare function createSepoliaResolver(rpcUrl: string): Record<string, DIDResolver>;
|
|
74
|
+
//# sourceMappingURL=ethr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethr.d.ts","sourceRoot":"","sources":["../../../src/did/resolvers/ethr.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD;;GAEG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;CAajB,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,MAAM,OAAO,cAAc,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,8BAA8B;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,6BAA6B;IAC7B,QAAQ,EAAE,iBAAiB,EAAE,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAc1F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAOjF"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { getResolver as getEthrResolver } from 'ethr-did-resolver';
|
|
2
|
+
/**
|
|
3
|
+
* Known Ethereum networks with their default configurations
|
|
4
|
+
*/
|
|
5
|
+
export const KNOWN_NETWORKS = {
|
|
6
|
+
mainnet: {
|
|
7
|
+
chainId: 1,
|
|
8
|
+
registry: '0xdca7ef03e98e0dc2b855be647c39abe984fcf21b',
|
|
9
|
+
},
|
|
10
|
+
sepolia: {
|
|
11
|
+
chainId: 11155111,
|
|
12
|
+
registry: '0x03d5003bf0e79c5f5223588f347eba39afbc3818',
|
|
13
|
+
},
|
|
14
|
+
goerli: {
|
|
15
|
+
chainId: 5,
|
|
16
|
+
registry: '0xdca7ef03e98e0dc2b855be647c39abe984fcf21b',
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
/**
|
|
20
|
+
* Create did:ethr resolver with explicit configuration
|
|
21
|
+
* @param config - Network configuration(s)
|
|
22
|
+
* @returns DID resolver methods for did:ethr
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* // Single network
|
|
26
|
+
* createEthrResolver({
|
|
27
|
+
* networks: [{
|
|
28
|
+
* name: 'sepolia',
|
|
29
|
+
* rpcUrl: 'https://sepolia.infura.io/v3/YOUR_KEY',
|
|
30
|
+
* }]
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* // Multiple networks
|
|
35
|
+
* createEthrResolver({
|
|
36
|
+
* networks: [
|
|
37
|
+
* { name: 'mainnet', rpcUrl: 'https://mainnet.infura.io/v3/KEY' },
|
|
38
|
+
* { name: 'sepolia', rpcUrl: 'https://sepolia.infura.io/v3/KEY' },
|
|
39
|
+
* ]
|
|
40
|
+
* });
|
|
41
|
+
*/
|
|
42
|
+
export function createEthrResolver(config) {
|
|
43
|
+
const networks = config.networks.map((network) => {
|
|
44
|
+
// Use known network defaults if available
|
|
45
|
+
const known = KNOWN_NETWORKS[network.name];
|
|
46
|
+
return {
|
|
47
|
+
name: network.name,
|
|
48
|
+
rpcUrl: network.rpcUrl,
|
|
49
|
+
chainId: network.chainId ?? known?.chainId,
|
|
50
|
+
registry: network.registry ?? known?.registry,
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
return getEthrResolver({ networks });
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Convenience function to create resolver for Sepolia testnet
|
|
57
|
+
* @param rpcUrl - Sepolia RPC URL
|
|
58
|
+
*/
|
|
59
|
+
export function createSepoliaResolver(rpcUrl) {
|
|
60
|
+
return createEthrResolver({
|
|
61
|
+
networks: [{
|
|
62
|
+
name: 'sepolia',
|
|
63
|
+
rpcUrl,
|
|
64
|
+
}],
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=ethr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ethr.js","sourceRoot":"","sources":["../../../src/did/resolvers/ethr.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,IAAI,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEnE;;GAEG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG;IAC5B,OAAO,EAAE;QACP,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,4CAA4C;KACvD;IACD,OAAO,EAAE;QACP,OAAO,EAAE,QAAQ;QACjB,QAAQ,EAAE,4CAA4C;KACvD;IACD,MAAM,EAAE;QACN,OAAO,EAAE,CAAC;QACV,QAAQ,EAAE,4CAA4C;KACvD;CACO,CAAC;AA0BX;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAA0B;IAC3D,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE;QAC/C,0CAA0C;QAC1C,MAAM,KAAK,GAAG,cAAc,CAAC,OAAO,CAAC,IAAoB,CAAC,CAAC;QAE3D,OAAO;YACL,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,KAAK,EAAE,OAAO;YAC1C,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK,EAAE,QAAQ;SAC9C,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,OAAO,eAAe,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;AACvC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAc;IAClD,OAAO,kBAAkB,CAAC;QACxB,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,SAAS;gBACf,MAAM;aACP,CAAC;KACH,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DID Resolvers
|
|
3
|
+
* Modular resolvers for different DID methods
|
|
4
|
+
* @module did/resolvers
|
|
5
|
+
*/
|
|
6
|
+
export { createWebResolver } from './web.js';
|
|
7
|
+
export { createEthrResolver, createSepoliaResolver, KNOWN_NETWORKS, type EthrNetworkConfig, type EthrResolverConfig, type KnownNetwork, } from './ethr.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/did/resolvers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,EACd,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,YAAY,GAClB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* DID Resolvers
|
|
3
|
+
* Modular resolvers for different DID methods
|
|
4
|
+
* @module did/resolvers
|
|
5
|
+
*/
|
|
6
|
+
export { createWebResolver } from './web.js';
|
|
7
|
+
export { createEthrResolver, createSepoliaResolver, KNOWN_NETWORKS, } from './ethr.js';
|
|
8
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/did/resolvers/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EACL,kBAAkB,EAClB,qBAAqB,EACrB,cAAc,GAIf,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* did:web Resolver
|
|
3
|
+
* Supports HTTP for localhost, HTTPS for production domains
|
|
4
|
+
* @module did/resolvers/web
|
|
5
|
+
*/
|
|
6
|
+
import { type DIDResolver } from 'did-resolver';
|
|
7
|
+
/**
|
|
8
|
+
* Create did:web resolver
|
|
9
|
+
* - localhost: Uses HTTP
|
|
10
|
+
* - Production domains: Uses HTTPS via web-did-resolver
|
|
11
|
+
*/
|
|
12
|
+
export declare function createWebResolver(): Record<string, DIDResolver>;
|
|
13
|
+
//# sourceMappingURL=web.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../src/did/resolvers/web.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAY,KAAK,WAAW,EAA4C,MAAM,cAAc,CAAC;AAIpG;;;;GAIG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAyC/D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { getResolver as getWebResolver } from 'web-did-resolver';
|
|
2
|
+
/**
|
|
3
|
+
* Create did:web resolver
|
|
4
|
+
* - localhost: Uses HTTP
|
|
5
|
+
* - Production domains: Uses HTTPS via web-did-resolver
|
|
6
|
+
*/
|
|
7
|
+
export function createWebResolver() {
|
|
8
|
+
const webResolver = getWebResolver();
|
|
9
|
+
async function resolve(did, parsed) {
|
|
10
|
+
// Decode domain from DID (e.g., localhost%3A3001 → localhost:3001)
|
|
11
|
+
const domainPart = parsed.id.split(':')[0];
|
|
12
|
+
if (!domainPart) {
|
|
13
|
+
return {
|
|
14
|
+
didDocument: null,
|
|
15
|
+
didDocumentMetadata: {},
|
|
16
|
+
didResolutionMetadata: {
|
|
17
|
+
error: 'invalidDid',
|
|
18
|
+
message: 'Invalid DID format',
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
const domain = decodeURIComponent(domainPart);
|
|
23
|
+
// For localhost, use HTTP and custom resolution
|
|
24
|
+
if (domain.startsWith('localhost')) {
|
|
25
|
+
return resolveLocalhost(did, parsed);
|
|
26
|
+
}
|
|
27
|
+
// For production domains, delegate to web-did-resolver (uses HTTPS)
|
|
28
|
+
const webResolverFn = webResolver.web;
|
|
29
|
+
if (!webResolverFn) {
|
|
30
|
+
return {
|
|
31
|
+
didDocument: null,
|
|
32
|
+
didDocumentMetadata: {},
|
|
33
|
+
didResolutionMetadata: {
|
|
34
|
+
error: 'internalError',
|
|
35
|
+
message: 'Web resolver not available',
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return webResolverFn(did, parsed, {}, {});
|
|
40
|
+
}
|
|
41
|
+
return { web: resolve };
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Resolve localhost did:web DIDs using HTTP
|
|
45
|
+
*/
|
|
46
|
+
async function resolveLocalhost(did, parsed) {
|
|
47
|
+
// Build path: did:web:localhost%3A3001:agents:agent-a → localhost:3001/agents/agent-a/did.json
|
|
48
|
+
const pathSegments = parsed.id.split(':').map(decodeURIComponent);
|
|
49
|
+
const domain = pathSegments[0];
|
|
50
|
+
const path = pathSegments.length > 1
|
|
51
|
+
? `${pathSegments.slice(1).join('/')}/did.json`
|
|
52
|
+
: '.well-known/did.json';
|
|
53
|
+
const url = `http://${domain}/${path}`;
|
|
54
|
+
try {
|
|
55
|
+
const response = await fetch(url);
|
|
56
|
+
if (!response.ok) {
|
|
57
|
+
return {
|
|
58
|
+
didDocument: null,
|
|
59
|
+
didDocumentMetadata: {},
|
|
60
|
+
didResolutionMetadata: {
|
|
61
|
+
error: 'notFound',
|
|
62
|
+
message: `HTTP ${response.status}: ${response.statusText}`,
|
|
63
|
+
},
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
const didDocument = await response.json();
|
|
67
|
+
// Verify document ID matches requested DID
|
|
68
|
+
if (didDocument.id !== did) {
|
|
69
|
+
return {
|
|
70
|
+
didDocument: didDocument,
|
|
71
|
+
didDocumentMetadata: {},
|
|
72
|
+
didResolutionMetadata: {
|
|
73
|
+
error: 'notFound',
|
|
74
|
+
message: 'DID document id does not match requested did',
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
didDocument: didDocument,
|
|
80
|
+
didDocumentMetadata: {},
|
|
81
|
+
didResolutionMetadata: {
|
|
82
|
+
contentType: didDocument['@context'] ? 'application/did+ld+json' : 'application/did+json',
|
|
83
|
+
},
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (error) {
|
|
87
|
+
return {
|
|
88
|
+
didDocument: null,
|
|
89
|
+
didDocumentMetadata: {},
|
|
90
|
+
didResolutionMetadata: {
|
|
91
|
+
error: 'notFound',
|
|
92
|
+
message: `Failed to fetch DID document: ${error}`,
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=web.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../../src/did/resolvers/web.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent DID Service Loader
|
|
3
|
+
* Dynamically loads and registers DID method handlers
|
|
4
|
+
* @module did/service-loader
|
|
5
|
+
*/
|
|
6
|
+
import type { AgentDIDService } from './service.js';
|
|
7
|
+
/**
|
|
8
|
+
* Register DID method handlers to an AgentDIDService instance
|
|
9
|
+
* Uses dynamic imports for lazy loading
|
|
10
|
+
*
|
|
11
|
+
* @param service - The AgentDIDService instance
|
|
12
|
+
* @param methods - Array of DID methods to register ('web', 'ethr')
|
|
13
|
+
*/
|
|
14
|
+
export declare function registerDIDHandlers(service: AgentDIDService, methods: Array<'web' | 'ethr'>): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=service-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-loader.d.ts","sourceRoot":"","sources":["../../src/did/service-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,eAAe,EACxB,OAAO,EAAE,KAAK,CAAC,KAAK,GAAG,MAAM,CAAC,GAC7B,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register DID method handlers to an AgentDIDService instance
|
|
3
|
+
* Uses dynamic imports for lazy loading
|
|
4
|
+
*
|
|
5
|
+
* @param service - The AgentDIDService instance
|
|
6
|
+
* @param methods - Array of DID methods to register ('web', 'ethr')
|
|
7
|
+
*/
|
|
8
|
+
export async function registerDIDHandlers(service, methods) {
|
|
9
|
+
for (const method of methods) {
|
|
10
|
+
if (method === 'web') {
|
|
11
|
+
const { DIDWebMethodHandler } = await import('./handlers/web-handler.js');
|
|
12
|
+
service.registerMethod('web', new DIDWebMethodHandler());
|
|
13
|
+
}
|
|
14
|
+
else if (method === 'ethr') {
|
|
15
|
+
const { DIDEthrMethodHandler } = await import('./handlers/ethr-handler.js');
|
|
16
|
+
service.registerMethod('ethr', new DIDEthrMethodHandler());
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=service-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-loader.js","sourceRoot":"","sources":["../../src/did/service-loader.ts"],"names":[],"mappings":"AAOA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAwB,EACxB,OAA8B;IAE9B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;YACrB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;YAC1E,OAAO,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,mBAAmB,EAAE,CAAC,CAAC;QAC3D,CAAC;aAAM,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;YAC7B,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;YAC5E,OAAO,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,oBAAoB,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent DID Service
|
|
3
|
+
* Orchestrates DID operations for AI Agents through pluggable method handlers
|
|
4
|
+
*/
|
|
5
|
+
import type { DIDIdentity, ServiceEndpoint } from './types.js';
|
|
6
|
+
import type { DIDConfig } from './config-types.js';
|
|
7
|
+
/**
|
|
8
|
+
* DID Method Handler Interface
|
|
9
|
+
* Each DID method (ethr, web, etc.) implements this interface
|
|
10
|
+
*/
|
|
11
|
+
export interface DIDMethodHandler {
|
|
12
|
+
/**
|
|
13
|
+
* Create a new DID identity
|
|
14
|
+
*/
|
|
15
|
+
createIdentity(options: {
|
|
16
|
+
agentId: string;
|
|
17
|
+
config: DIDConfig;
|
|
18
|
+
services?: ServiceEndpoint[];
|
|
19
|
+
}): Promise<DIDIdentity>;
|
|
20
|
+
/**
|
|
21
|
+
* Register a service endpoint for the DID
|
|
22
|
+
* @param serviceEndpoint - Already uploaded URI (e.g., ipfs://...)
|
|
23
|
+
*/
|
|
24
|
+
registerServiceEndpoint(options: {
|
|
25
|
+
did: string;
|
|
26
|
+
privateKey: string;
|
|
27
|
+
serviceEndpoint: string;
|
|
28
|
+
config: DIDConfig;
|
|
29
|
+
}): Promise<string[]>;
|
|
30
|
+
/**
|
|
31
|
+
* Extract wallet address from DID
|
|
32
|
+
* @param did - DID string (e.g., "did:ethr:sepolia:0x...")
|
|
33
|
+
* @returns Wallet address or undefined if not applicable
|
|
34
|
+
*/
|
|
35
|
+
extractWalletAddress(did: string): string | undefined;
|
|
36
|
+
/**
|
|
37
|
+
* Get default key ID for DID
|
|
38
|
+
* @param did - DID string
|
|
39
|
+
* @returns Key identifier (e.g., "did:ethr:...#controller")
|
|
40
|
+
*/
|
|
41
|
+
getKeyId(did: string): string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Agent DID Service
|
|
45
|
+
* Provides a unified interface for DID operations across different methods for AI Agents
|
|
46
|
+
* Handlers must be explicitly registered using registerMethod()
|
|
47
|
+
*/
|
|
48
|
+
export declare class AgentDIDService {
|
|
49
|
+
private methods;
|
|
50
|
+
constructor();
|
|
51
|
+
/**
|
|
52
|
+
* Register a custom DID method handler
|
|
53
|
+
* Can be used to add new methods or override built-in ones
|
|
54
|
+
* @param name - DID method name (e.g., 'ethr', 'web', 'ion')
|
|
55
|
+
* @param handler - Method-specific implementation
|
|
56
|
+
*/
|
|
57
|
+
registerMethod(name: string, handler: DIDMethodHandler): void;
|
|
58
|
+
/**
|
|
59
|
+
* Create a DID identity
|
|
60
|
+
* @throws {Error} If DID method is not supported
|
|
61
|
+
*/
|
|
62
|
+
createIdentity(options: {
|
|
63
|
+
method: string;
|
|
64
|
+
agentId: string;
|
|
65
|
+
config: DIDConfig;
|
|
66
|
+
services?: ServiceEndpoint[];
|
|
67
|
+
}): Promise<DIDIdentity>;
|
|
68
|
+
/**
|
|
69
|
+
* Register a service endpoint for a DID
|
|
70
|
+
* @param serviceEndpoint - Already uploaded URI (e.g., ipfs://...)
|
|
71
|
+
* @throws {Error} If DID method is not supported
|
|
72
|
+
*/
|
|
73
|
+
registerServiceEndpoint(options: {
|
|
74
|
+
method: string;
|
|
75
|
+
did: string;
|
|
76
|
+
privateKey: string;
|
|
77
|
+
serviceEndpoint: string;
|
|
78
|
+
config: DIDConfig;
|
|
79
|
+
}): Promise<string[]>;
|
|
80
|
+
/**
|
|
81
|
+
* Extract wallet address from DID
|
|
82
|
+
* Delegates to the appropriate handler based on DID method
|
|
83
|
+
* @param did - DID string
|
|
84
|
+
* @param method - DID method name
|
|
85
|
+
* @returns Wallet address or undefined
|
|
86
|
+
* @throws {Error} If DID method is not supported
|
|
87
|
+
*/
|
|
88
|
+
extractWalletAddress(did: string, method: string): string | undefined;
|
|
89
|
+
/**
|
|
90
|
+
* Get default key ID for a DID
|
|
91
|
+
* Delegates to the appropriate handler based on DID method
|
|
92
|
+
* @param did - DID string
|
|
93
|
+
* @param method - DID method name
|
|
94
|
+
* @returns Key identifier
|
|
95
|
+
* @throws {Error} If DID method is not supported
|
|
96
|
+
*/
|
|
97
|
+
getKeyId(did: string, method: string): string;
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/did/service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE;QACtB,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,SAAS,CAAC;QAClB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;KAC9B,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAEzB;;;OAGG;IACH,uBAAuB,CAAC,OAAO,EAAE;QAC/B,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,SAAS,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEtB;;;;OAIG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IAEtD;;;;OAIG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;CAC/B;AAED;;;;GAIG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,OAAO,CAAgC;;IAO/C;;;;;OAKG;IACH,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,GAAG,IAAI;IAI7D;;;OAGG;IACG,cAAc,CAAC,OAAO,EAAE;QAC5B,MAAM,EAAE,MAAM,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,MAAM,EAAE,SAAS,CAAC;QAClB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;KAC9B,GAAG,OAAO,CAAC,WAAW,CAAC;IAQxB;;;;OAIG;IACG,uBAAuB,CAAC,OAAO,EAAE;QACrC,MAAM,EAAE,MAAM,CAAC;QACf,GAAG,EAAE,MAAM,CAAC;QACZ,UAAU,EAAE,MAAM,CAAC;QACnB,eAAe,EAAE,MAAM,CAAC;QACxB,MAAM,EAAE,SAAS,CAAC;KACnB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAQrB;;;;;;;OAOG;IACH,oBAAoB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAQrE;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM;CAO9C"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent DID Service
|
|
3
|
+
* Provides a unified interface for DID operations across different methods for AI Agents
|
|
4
|
+
* Handlers must be explicitly registered using registerMethod()
|
|
5
|
+
*/
|
|
6
|
+
export class AgentDIDService {
|
|
7
|
+
methods;
|
|
8
|
+
constructor() {
|
|
9
|
+
// Empty initialization - handlers must be registered explicitly
|
|
10
|
+
this.methods = new Map();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Register a custom DID method handler
|
|
14
|
+
* Can be used to add new methods or override built-in ones
|
|
15
|
+
* @param name - DID method name (e.g., 'ethr', 'web', 'ion')
|
|
16
|
+
* @param handler - Method-specific implementation
|
|
17
|
+
*/
|
|
18
|
+
registerMethod(name, handler) {
|
|
19
|
+
this.methods.set(name.toLowerCase(), handler);
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create a DID identity
|
|
23
|
+
* @throws {Error} If DID method is not supported
|
|
24
|
+
*/
|
|
25
|
+
async createIdentity(options) {
|
|
26
|
+
const handler = this.methods.get(options.method.toLowerCase());
|
|
27
|
+
if (!handler) {
|
|
28
|
+
throw new Error(`Unsupported DID method: ${options.method}`);
|
|
29
|
+
}
|
|
30
|
+
return handler.createIdentity(options);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Register a service endpoint for a DID
|
|
34
|
+
* @param serviceEndpoint - Already uploaded URI (e.g., ipfs://...)
|
|
35
|
+
* @throws {Error} If DID method is not supported
|
|
36
|
+
*/
|
|
37
|
+
async registerServiceEndpoint(options) {
|
|
38
|
+
const handler = this.methods.get(options.method.toLowerCase());
|
|
39
|
+
if (!handler) {
|
|
40
|
+
throw new Error(`Unsupported DID method: ${options.method}`);
|
|
41
|
+
}
|
|
42
|
+
return handler.registerServiceEndpoint(options);
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Extract wallet address from DID
|
|
46
|
+
* Delegates to the appropriate handler based on DID method
|
|
47
|
+
* @param did - DID string
|
|
48
|
+
* @param method - DID method name
|
|
49
|
+
* @returns Wallet address or undefined
|
|
50
|
+
* @throws {Error} If DID method is not supported
|
|
51
|
+
*/
|
|
52
|
+
extractWalletAddress(did, method) {
|
|
53
|
+
const handler = this.methods.get(method.toLowerCase());
|
|
54
|
+
if (!handler) {
|
|
55
|
+
throw new Error(`Unsupported DID method: ${method}`);
|
|
56
|
+
}
|
|
57
|
+
return handler.extractWalletAddress(did);
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get default key ID for a DID
|
|
61
|
+
* Delegates to the appropriate handler based on DID method
|
|
62
|
+
* @param did - DID string
|
|
63
|
+
* @param method - DID method name
|
|
64
|
+
* @returns Key identifier
|
|
65
|
+
* @throws {Error} If DID method is not supported
|
|
66
|
+
*/
|
|
67
|
+
getKeyId(did, method) {
|
|
68
|
+
const handler = this.methods.get(method.toLowerCase());
|
|
69
|
+
if (!handler) {
|
|
70
|
+
throw new Error(`Unsupported DID method: ${method}`);
|
|
71
|
+
}
|
|
72
|
+
return handler.getKeyId(did);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/did/service.ts"],"names":[],"mappings":"AA+CA;;;;GAIG;AACH,MAAM,OAAO,eAAe;IAClB,OAAO,CAAgC;IAE/C;QACE,gEAAgE;QAChE,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;OAKG;IACH,cAAc,CAAC,IAAY,EAAE,OAAyB;QACpD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,cAAc,CAAC,OAKpB;QACC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,uBAAuB,CAAC,OAM7B;QACC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;QAC/D,CAAC;QACD,OAAO,OAAO,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;IAClD,CAAC;IAED;;;;;;;OAOG;IACH,oBAAoB,CAAC,GAAW,EAAE,MAAc;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC3C,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,GAAW,EAAE,MAAc;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;CACF"}
|