@enbox/dids 0.0.7 → 0.0.9

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 (30) hide show
  1. package/LICENSE +3 -2
  2. package/dist/browser.mjs +1 -1
  3. package/dist/browser.mjs.map +3 -3
  4. package/dist/esm/methods/did-web.js +201 -1
  5. package/dist/esm/methods/did-web.js.map +1 -1
  6. package/dist/esm/resolver/resolver-cache-level.js +9 -0
  7. package/dist/esm/resolver/resolver-cache-level.js.map +1 -1
  8. package/dist/esm/resolver/resolver-cache-memory.js +8 -0
  9. package/dist/esm/resolver/resolver-cache-memory.js.map +1 -1
  10. package/dist/esm/resolver/resolver-cache-noop.js +3 -0
  11. package/dist/esm/resolver/resolver-cache-noop.js.map +1 -1
  12. package/dist/esm/resolver/universal-resolver.js +18 -0
  13. package/dist/esm/resolver/universal-resolver.js.map +1 -1
  14. package/dist/types/methods/did-web.d.ts +167 -2
  15. package/dist/types/methods/did-web.d.ts.map +1 -1
  16. package/dist/types/resolver/resolver-cache-level.d.ts +7 -0
  17. package/dist/types/resolver/resolver-cache-level.d.ts.map +1 -1
  18. package/dist/types/resolver/resolver-cache-memory.d.ts +4 -0
  19. package/dist/types/resolver/resolver-cache-memory.d.ts.map +1 -1
  20. package/dist/types/resolver/resolver-cache-noop.d.ts.map +1 -1
  21. package/dist/types/resolver/universal-resolver.d.ts +10 -0
  22. package/dist/types/resolver/universal-resolver.d.ts.map +1 -1
  23. package/dist/utils.js +1 -1
  24. package/dist/utils.js.map +3 -3
  25. package/package.json +3 -3
  26. package/src/methods/did-web.ts +314 -2
  27. package/src/resolver/resolver-cache-level.ts +10 -0
  28. package/src/resolver/resolver-cache-memory.ts +7 -0
  29. package/src/resolver/resolver-cache-noop.ts +3 -0
  30. package/src/resolver/universal-resolver.ts +16 -0
@@ -7,9 +7,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
7
7
  step((generator = generator.apply(thisArg, _arguments || [])).next());
8
8
  });
9
9
  };
10
+ import { LocalKeyManager } from '@enbox/crypto';
11
+ import { BearerDid } from '../bearer-did.js';
10
12
  import { Did } from '../did.js';
11
13
  import { DidMethod } from './did-method.js';
12
14
  import { EMPTY_DID_RESOLUTION_RESULT } from '../types/did-resolution.js';
15
+ import { extractDidFragment } from '../utils.js';
16
+ import { DidError, DidErrorCode } from '../did-error.js';
13
17
  /** Default fetch timeout for DID document retrieval (30 seconds). */
14
18
  const FETCH_TIMEOUT_MS = 30000;
15
19
  /**
@@ -70,7 +74,12 @@ function isPrivateHostname(hostname) {
70
74
  * The `DidWeb` class provides an implementation of the `did:web` DID method.
71
75
  *
72
76
  * Features:
77
+ * - DID Creation: Create new `did:web` DIDs with local key generation.
78
+ * - DID Key Management: Instantiate a DID object from an existing verification method key set or
79
+ * a key in a Key Management System (KMS). If supported by the KMS, a DID's
80
+ * key can be exported to a portable DID format.
73
81
  * - DID Resolution: Resolve a `did:web` to its corresponding DID Document.
82
+ * - Signature Operations: Sign and verify messages using keys associated with a DID.
74
83
  *
75
84
  * @remarks
76
85
  * The `did:web` method uses a web domain's existing reputation and aims to integrate decentralized
@@ -78,15 +87,206 @@ function isPrivateHostname(hostname) {
78
87
  * security models and domain ownership to provide accessible, interoperable digital identity
79
88
  * management.
80
89
  *
90
+ * Unlike self-certifying methods, `did:web` creation generates keys and a DID document locally
91
+ * but does NOT publish them. The caller is responsible for registering the DID document with
92
+ * the hosting server.
93
+ *
81
94
  * @see {@link https://w3c-ccg.github.io/did-method-web/ | DID Web Specification}
82
95
  *
83
96
  * @example
84
97
  * ```ts
98
+ * // DID Creation
99
+ * const did = await DidWeb.create({
100
+ * options: { domain: 'enbox.id', path: 'users:alice' }
101
+ * });
102
+ *
85
103
  * // DID Resolution
86
- * const resolutionResult = await DidWeb.resolve({ did: did.uri });
104
+ * const resolutionResult = await DidWeb.resolve('did:web:enbox.id:users:alice');
105
+ *
106
+ * // Signature Operations
107
+ * const signer = await did.getSigner();
108
+ * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });
109
+ * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });
110
+ *
111
+ * // Import / Export
112
+ * const portableDid = await did.export();
113
+ * const imported = await DidWeb.import({ portableDid });
87
114
  * ```
88
115
  */
89
116
  export class DidWeb extends DidMethod {
117
+ /**
118
+ * Creates a new DID using the `did:web` method formed from a newly generated key.
119
+ *
120
+ * @remarks
121
+ * The DID URI is formed from the given `domain` and optional `path`, prefixed with `did:web:`.
122
+ * Keys are generated locally and a DID document is constructed, but the document is NOT
123
+ * published to any server. Registration with a `did:web` hosting server is the caller's
124
+ * responsibility.
125
+ *
126
+ * Notes:
127
+ * - If no `options.algorithm` or `options.verificationMethods` are given, a new Ed25519 key is
128
+ * generated by default.
129
+ * - The `algorithm` and `verificationMethods` options are mutually exclusive.
130
+ * - The `domain` option is required.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * // DID Creation
135
+ * const did = await DidWeb.create({
136
+ * options: { domain: 'enbox.id', path: 'users:alice' }
137
+ * });
138
+ * // did.uri === 'did:web:enbox.id:users:alice'
139
+ *
140
+ * // DID Creation with a KMS
141
+ * const keyManager = new LocalKeyManager();
142
+ * const did = await DidWeb.create({
143
+ * keyManager,
144
+ * options: { domain: 'enbox.id', path: 'users:alice' }
145
+ * });
146
+ * ```
147
+ *
148
+ * @param params - The parameters for the create operation.
149
+ * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate
150
+ * keys and sign data.
151
+ * @param params.options - Parameters that specify the domain, path, algorithm, verification
152
+ * methods, and services for the new DID.
153
+ * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.
154
+ */
155
+ static create(_a) {
156
+ return __awaiter(this, arguments, void 0, function* ({ keyManager = new LocalKeyManager(), options, }) {
157
+ var _b, _c, _d, _e, _f, _g, _h, _j;
158
+ // Validate required options.
159
+ if (!options.domain) {
160
+ throw new DidError(DidErrorCode.InvalidDid, `The 'domain' option is required for did:web creation`);
161
+ }
162
+ // Validate that `algorithm` and `verificationMethods` are not both given.
163
+ if (options.algorithm && options.verificationMethods) {
164
+ throw new Error(`The 'algorithm' and 'verificationMethods' options are mutually exclusive`);
165
+ }
166
+ // Build the DID URI from the domain and optional path.
167
+ const identifier = options.path
168
+ ? `${options.domain}:${options.path}`
169
+ : options.domain;
170
+ const didUri = `did:${DidWeb.methodName}:${identifier}`;
171
+ // Validate the constructed DID URI.
172
+ const parsedDid = Did.parse(didUri);
173
+ if (!parsedDid) {
174
+ throw new DidError(DidErrorCode.InvalidDid, `The constructed DID URI is invalid: ${didUri}`);
175
+ }
176
+ // Determine verification methods to create.
177
+ const verificationMethodsToAdd = (_b = options.verificationMethods) !== null && _b !== void 0 ? _b : [{
178
+ algorithm: ((_c = options.algorithm) !== null && _c !== void 0 ? _c : 'Ed25519'),
179
+ purposes: ['authentication', 'assertionMethod', 'capabilityDelegation', 'capabilityInvocation'],
180
+ }];
181
+ // Begin constructing the DID Document.
182
+ const document = {
183
+ '@context': ['https://www.w3.org/ns/did/v1'],
184
+ id: didUri,
185
+ };
186
+ // Generate key material for each verification method and add to the document.
187
+ for (let i = 0; i < verificationMethodsToAdd.length; i++) {
188
+ const vmOptions = verificationMethodsToAdd[i];
189
+ // Generate a random key.
190
+ const keyUri = yield keyManager.generateKey({ algorithm: vmOptions.algorithm });
191
+ const publicKey = yield keyManager.getPublicKey({ keyUri });
192
+ // Use the given ID or default to `key-N`.
193
+ const fragment = (_e = (_d = vmOptions.id) === null || _d === void 0 ? void 0 : _d.split('#').pop()) !== null && _e !== void 0 ? _e : `key-${i}`;
194
+ const methodId = `${didUri}#${fragment}`;
195
+ // Initialize the `verificationMethod` array if needed.
196
+ (_f = document.verificationMethod) !== null && _f !== void 0 ? _f : (document.verificationMethod = []);
197
+ // Add the verification method to the DID document.
198
+ document.verificationMethod.push({
199
+ id: methodId,
200
+ type: 'JsonWebKey',
201
+ controller: (_g = vmOptions.controller) !== null && _g !== void 0 ? _g : didUri,
202
+ publicKeyJwk: publicKey,
203
+ });
204
+ // Add the verification method to the specified purpose properties.
205
+ for (const purpose of (_h = vmOptions.purposes) !== null && _h !== void 0 ? _h : []) {
206
+ (_j = document[purpose]) !== null && _j !== void 0 ? _j : (document[purpose] = []);
207
+ document[purpose].push(methodId);
208
+ }
209
+ }
210
+ // Add services, if any.
211
+ if (options.services) {
212
+ document.service = options.services.map(service => (Object.assign(Object.assign({}, service), { id: `${didUri}#${service.id.split('#').pop()}` })));
213
+ }
214
+ // Create the BearerDid object. Metadata indicates unpublished state.
215
+ const did = new BearerDid({
216
+ uri: didUri,
217
+ document,
218
+ metadata: { published: false },
219
+ keyManager,
220
+ });
221
+ return did;
222
+ });
223
+ }
224
+ /**
225
+ * Given the W3C DID Document of a `did:web` DID, return the verification method that will be
226
+ * used for signing messages and credentials. If given, the `methodId` parameter is used to
227
+ * select the verification method. If not given, the first verification method referenced in
228
+ * `assertionMethod` is used, falling back to the first verification method in the document.
229
+ *
230
+ * @param params - The parameters for the `getSigningMethod` operation.
231
+ * @param params.didDocument - DID Document to get the verification method from.
232
+ * @param params.methodId - ID of the verification method to use for signing.
233
+ * @returns Verification method to use for signing.
234
+ */
235
+ static getSigningMethod(_a) {
236
+ return __awaiter(this, arguments, void 0, function* ({ didDocument, methodId }) {
237
+ var _b, _c, _d, _e;
238
+ // Verify the DID method is supported.
239
+ const parsedDid = Did.parse(didDocument.id);
240
+ if (parsedDid && parsedDid.method !== this.methodName) {
241
+ throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported: ${parsedDid.method}`);
242
+ }
243
+ // Attempt to find a verification method that matches the given method ID, or if not given,
244
+ // find the first verification method intended for signing claims.
245
+ const targetFragment = (_b = extractDidFragment(methodId)) !== null && _b !== void 0 ? _b : extractDidFragment((_c = didDocument.assertionMethod) === null || _c === void 0 ? void 0 : _c[0]);
246
+ const verificationMethod = targetFragment
247
+ ? (_d = didDocument.verificationMethod) === null || _d === void 0 ? void 0 : _d.find(vm => extractDidFragment(vm.id) === targetFragment)
248
+ : (_e = didDocument.verificationMethod) === null || _e === void 0 ? void 0 : _e[0];
249
+ if (!(verificationMethod && verificationMethod.publicKeyJwk)) {
250
+ throw new DidError(DidErrorCode.InternalError, 'A verification method intended for signing could not be determined from the DID Document');
251
+ }
252
+ return verificationMethod;
253
+ });
254
+ }
255
+ /**
256
+ * Instantiates a {@link BearerDid} object for the DID Web method from a given
257
+ * {@link PortableDid}.
258
+ *
259
+ * This method allows for the creation of a `BearerDid` object using a previously created DID's
260
+ * key material, DID document, and metadata.
261
+ *
262
+ * @example
263
+ * ```ts
264
+ * // Export an existing BearerDid to PortableDid format.
265
+ * const portableDid = await did.export();
266
+ * // Reconstruct a BearerDid object from the PortableDid.
267
+ * const did = await DidWeb.import({ portableDid });
268
+ * ```
269
+ *
270
+ * @param params - The parameters for the import operation.
271
+ * @param params.portableDid - The PortableDid object to import.
272
+ * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to
273
+ * generate keys and sign data. If not given, a new
274
+ * {@link LocalKeyManager} instance will be created and used.
275
+ * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the
276
+ * provided keys.
277
+ */
278
+ static import(_a) {
279
+ return __awaiter(this, arguments, void 0, function* ({ portableDid, keyManager = new LocalKeyManager() }) {
280
+ // Verify the DID method is supported.
281
+ const parsedDid = Did.parse(portableDid.uri);
282
+ if ((parsedDid === null || parsedDid === void 0 ? void 0 : parsedDid.method) !== DidWeb.methodName) {
283
+ throw new DidError(DidErrorCode.MethodNotSupported, `Method not supported`);
284
+ }
285
+ // Use the given PortableDid to construct the BearerDid object.
286
+ const did = yield BearerDid.import({ portableDid, keyManager });
287
+ return did;
288
+ });
289
+ }
90
290
  /**
91
291
  * Resolves a `did:web` identifier to a DID Document.
92
292
  *
@@ -1 +1 @@
1
- {"version":3,"file":"did-web.js","sourceRoot":"","sources":["../../../src/methods/did-web.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"did-web.js","sourceRoot":"","sources":["../../../src/methods/did-web.ts"],"names":[],"mappings":";;;;;;;;;AASA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAYhD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,4BAA4B,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAEzD,qEAAqE;AACrE,MAAM,gBAAgB,GAAG,KAAM,CAAC;AAEhC;;;;GAIG;AACH,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,CAAC,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IAEjC,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,KAAK,YAAY,EAAE,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IAE7D,qBAAqB;IACrB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACjC,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;YAChE,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,MAAM,CAAC;YACtB,IAAI,CAAC,KAAK,EAAE,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,aAAa;YAC5C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,gBAAgB;YACtE,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,iBAAiB;YAC9D,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,cAAc;YAC9C,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,iBAAiB;YAC9D,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,OAAO,IAAI,CAAC;YAAC,CAAC,CAAC,YAAY;QAC5C,CAAC;IACH,CAAC;IAED,qDAAqD;IACrD,IAAI,EAAE,GAAG,CAAC,CAAC;IACX,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAAC,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IACrE,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QACjE,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;QACtE,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YAAC,OAAO,IAAI,CAAC;QAAC,CAAC;IAClE,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AA6DD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,MAAM,OAAO,MAAO,SAAQ,SAAS;IAOnC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;IACI,MAAM,CAAO,MAAM;6DAAkD,EAC1E,UAAU,GAAG,IAAI,eAAe,EAAE,EAClC,OAAO,GAIR;;YACC,6BAA6B;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;gBACpB,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,sDAAsD,CAAC,CAAC;YACtG,CAAC;YAED,0EAA0E;YAC1E,IAAI,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,mBAAmB,EAAE,CAAC;gBACrD,MAAM,IAAI,KAAK,CAAC,0EAA0E,CAAC,CAAC;YAC9F,CAAC;YAED,uDAAuD;YACvD,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI;gBAC7B,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,EAAE;gBACrC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACnB,MAAM,MAAM,GAAG,OAAO,MAAM,CAAC,UAAU,IAAI,UAAU,EAAE,CAAC;YAExD,oCAAoC;YACpC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,uCAAuC,MAAM,EAAE,CAAC,CAAC;YAC/F,CAAC;YAED,4CAA4C;YAC5C,MAAM,wBAAwB,GAC5B,MAAA,OAAO,CAAC,mBAAmB,mCAAI,CAAC;oBAC9B,SAAS,EAAG,CAAC,MAAA,OAAO,CAAC,SAAS,mCAAI,SAAS,CAAmD;oBAC9F,QAAQ,EAAI,CAAC,gBAAgB,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,sBAAsB,CAAC;iBAClG,CAAC,CAAC;YAEL,uCAAuC;YACvC,MAAM,QAAQ,GAAgB;gBAC5B,UAAU,EAAG,CAAC,8BAA8B,CAAC;gBAC7C,EAAE,EAAW,MAAM;aACpB,CAAC;YAEF,8EAA8E;YAC9E,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,wBAAwB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACzD,MAAM,SAAS,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC;gBAE9C,yBAAyB;gBACzB,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC,CAAC;gBAChF,MAAM,SAAS,GAAG,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;gBAE5D,0CAA0C;gBAC1C,MAAM,QAAQ,GAAG,MAAA,MAAA,SAAS,CAAC,EAAE,0CAAE,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,mCAAI,OAAO,CAAC,EAAE,CAAC;gBAC9D,MAAM,QAAQ,GAAG,GAAG,MAAM,IAAI,QAAQ,EAAE,CAAC;gBAEzC,uDAAuD;gBACvD,MAAA,QAAQ,CAAC,kBAAkB,oCAA3B,QAAQ,CAAC,kBAAkB,GAAK,EAAE,EAAC;gBAEnC,mDAAmD;gBACnD,QAAQ,CAAC,kBAAkB,CAAC,IAAI,CAAC;oBAC/B,EAAE,EAAa,QAAQ;oBACvB,IAAI,EAAW,YAAY;oBAC3B,UAAU,EAAK,MAAA,SAAS,CAAC,UAAU,mCAAI,MAAM;oBAC7C,YAAY,EAAG,SAAS;iBACzB,CAAC,CAAC;gBAEH,mEAAmE;gBACnE,KAAK,MAAM,OAAO,IAAI,MAAA,SAAS,CAAC,QAAQ,mCAAI,EAAE,EAAE,CAAC;oBAC/C,MAAA,QAAQ,CAAC,OAAO,qCAAhB,QAAQ,CAAC,OAAO,IAAM,EAAE,EAAC;oBACzB,QAAQ,CAAC,OAAO,CAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACpC,CAAC;YACH,CAAC;YAED,wBAAwB;YACxB,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;gBACrB,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,iCAC9C,OAAO,KACV,EAAE,EAAE,GAAG,MAAM,IAAI,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,IAC9C,CAAC,CAAC;YACN,CAAC;YAED,qEAAqE;YACrE,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;gBACxB,GAAG,EAAQ,MAAM;gBACjB,QAAQ;gBACR,QAAQ,EAAG,EAAE,SAAS,EAAE,KAAK,EAAE;gBAC/B,UAAU;aACX,CAAC,CAAC;YAEH,OAAO,GAAG,CAAC;QACb,CAAC;KAAA;IAED;;;;;;;;;;OAUG;IACI,MAAM,CAAO,gBAAgB;6DAAC,EAAE,WAAW,EAAE,QAAQ,EAG3D;;YACC,sCAAsC;YACtC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;YAC5C,IAAI,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;gBACtD,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,kBAAkB,EAAE,yBAAyB,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC;YACnG,CAAC;YAED,2FAA2F;YAC3F,kEAAkE;YAClE,MAAM,cAAc,GAAG,MAAA,kBAAkB,CAAC,QAAQ,CAAC,mCAC9C,kBAAkB,CAAC,MAAA,WAAW,CAAC,eAAe,0CAAG,CAAC,CAAC,CAAC,CAAC;YAE1D,MAAM,kBAAkB,GAAG,cAAc;gBACvC,CAAC,CAAC,MAAA,WAAW,CAAC,kBAAkB,0CAAE,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,cAAc,CAAC;gBAC1F,CAAC,CAAC,MAAA,WAAW,CAAC,kBAAkB,0CAAG,CAAC,CAAC,CAAC;YAExC,IAAI,CAAC,CAAC,kBAAkB,IAAI,kBAAkB,CAAC,YAAY,CAAC,EAAE,CAAC;gBAC7D,MAAM,IAAI,QAAQ,CAChB,YAAY,CAAC,aAAa,EAC1B,0FAA0F,CAC3F,CAAC;YACJ,CAAC;YAED,OAAO,kBAAkB,CAAC;QAC5B,CAAC;KAAA;IAED;;;;;;;;;;;;;;;;;;;;;;OAsBG;IACI,MAAM,CAAO,MAAM;6DAAC,EAAE,WAAW,EAAE,UAAU,GAAG,IAAI,eAAe,EAAE,EAG3E;YACC,sCAAsC;YACtC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC7C,IAAI,CAAA,SAAS,aAAT,SAAS,uBAAT,SAAS,CAAE,MAAM,MAAK,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC5C,MAAM,IAAI,QAAQ,CAAC,YAAY,CAAC,kBAAkB,EAAE,sBAAsB,CAAC,CAAC;YAC9E,CAAC;YAED,+DAA+D;YAC/D,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;YAEhE,OAAO,GAAG,CAAC;QACb,CAAC;KAAA;IAED;;;;;;OAMG;IACI,MAAM,CAAO,OAAO,CAAC,MAAc,EAAE,QAA+B;;YACzE,gCAAgC;YAChC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAEpC,yCAAyC;YACzC,IAAI,CAAC,SAAS,EAAE,CAAC;gBACf,uCACK,2BAA2B,KAC9B,qBAAqB,EAAE,EAAE,KAAK,EAAE,YAAY,EAAE,IAC9C;YACJ,CAAC;YAED,mDAAmD;YACnD,IAAI,SAAS,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;gBAC3C,uCACK,2BAA2B,KAC9B,qBAAqB,EAAE,EAAE,KAAK,EAAE,oBAAoB,EAAE,IACtD;YACJ,CAAC;YAED,8FAA8F;YAC9F,iCAAiC;YACjC,IAAI,OAAO,GAAG,WAAW,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;YAE3D,yEAAyE;YACzE,OAAO,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAEtC,8FAA8F;YAC9F,MAAM,cAAc,GAAG,SAAS,CAAC,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;gBACjD,GAAG,OAAO,WAAW,CAAC,CAAC;gBACvB,GAAG,OAAO,uBAAuB,CAAC;YAEpC,IAAI,CAAC;gBACH,6EAA6E;gBAC7E,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,CAAC;gBAC1C,IAAI,iBAAiB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC1C,uCACK,2BAA2B,KAC9B,qBAAqB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAC5C;gBACJ,CAAC;gBAED,0DAA0D;gBAC1D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,cAAc,EAAE;oBAC3C,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,gBAAgB,CAAC;iBAC9C,CAAC,CAAC;gBAEH,2DAA2D;gBAC3D,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBAAA,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;gBAAA,CAAC;gBAEvE,0BAA0B;gBAC1B,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAiB,CAAC;gBAEzD,uCACK,2BAA2B,KAC9B,WAAW,IACX;YAEJ,CAAC;YAAC,WAAM,CAAC;gBACP,+DAA+D;gBAC/D,uCACK,2BAA2B,KAC9B,qBAAqB,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,IAC5C;YACJ,CAAC;QACH,CAAC;KAAA;;AA7RD;;GAEG;AACW,iBAAU,GAAG,KAAK,CAAC"}
@@ -29,6 +29,15 @@ export class DidResolverCacheLevel {
29
29
  this.cache = db !== null && db !== void 0 ? db : new Level(location);
30
30
  this.ttl = ms(ttl);
31
31
  }
32
+ /**
33
+ * Opens the underlying LevelDB store.
34
+ * Calling `open()` on an already-open store is a safe no-op.
35
+ *
36
+ * @returns A promise that resolves when the store is ready for use.
37
+ */
38
+ open() {
39
+ return this.cache.open();
40
+ }
32
41
  /**
33
42
  * Retrieves a DID resolution result from the cache.
34
43
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resolver-cache-level.js","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-level.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AAuDpB;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,qBAAqB;IAOhC,YAAY,EACV,EAAE,EACF,QAAQ,GAAG,wBAAwB,EACnC,GAAG,GAAG,KAAK,KACoB,EAAE;QACjC,IAAI,CAAC,KAAK,GAAG,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,KAAK,CAAiB,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED;;;;;;;OAOG;IACG,GAAG,CAAC,GAAW;;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,yBAAyB,GAA8B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAE7E,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,yBAAyB,CAAC,SAAS,EAAE,CAAC;oBACtD,oEAAoE;oBACpE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAE/C,OAAO;gBACT,CAAC;qBAAM,CAAC;oBACN,OAAO,yBAAyB,CAAC,KAAK,CAAC;gBACzC,CAAC;YAEH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,uCAAuC;gBACvC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAW,EAAE,KAA0B;QACzC,MAAM,yBAAyB,GAA8B,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QACzG,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAEtD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
1
+ {"version":3,"file":"resolver-cache-level.js","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-level.ts"],"names":[],"mappings":";;;;;;;;;AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,OAAO,CAAC;AAC9B,OAAO,EAAE,MAAM,IAAI,CAAC;AAuDpB;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,qBAAqB;IAOhC,YAAY,EACV,EAAE,EACF,QAAQ,GAAG,wBAAwB,EACnC,GAAG,GAAG,KAAK,KACoB,EAAE;QACjC,IAAI,CAAC,KAAK,GAAG,EAAE,aAAF,EAAE,cAAF,EAAE,GAAI,IAAI,KAAK,CAAiB,QAAQ,CAAC,CAAC;QACvD,IAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,CAAC;IAED;;;;;OAKG;IACH,IAAI;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED;;;;;;;OAOG;IACG,GAAG,CAAC,GAAW;;YACnB,IAAI,CAAC;gBACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;gBACtC,MAAM,yBAAyB,GAA8B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAE7E,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,yBAAyB,CAAC,SAAS,EAAE,CAAC;oBACtD,oEAAoE;oBACpE,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;oBAE/C,OAAO;gBACT,CAAC;qBAAM,CAAC;oBACN,OAAO,yBAAyB,CAAC,KAAK,CAAC;gBACzC,CAAC;YAEH,CAAC;YAAC,OAAO,KAAU,EAAE,CAAC;gBACpB,uCAAuC;gBACvC,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACnB,OAAO;gBACT,CAAC;gBAED,MAAM,KAAK,CAAC;YACd,CAAC;QACH,CAAC;KAAA;IAED;;;;;;OAMG;IACH,GAAG,CAAC,GAAW,EAAE,KAA0B;QACzC,MAAM,yBAAyB,GAA8B,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;QACzG,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QAEtD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;IAClC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,GAAW;QAChB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;IAED;;;;OAIG;IACH,KAAK;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;IAC5B,CAAC;CACF"}
@@ -13,6 +13,14 @@ export class DidResolverCacheMemory {
13
13
  constructor({ ttl = '15m' } = {}) {
14
14
  this.cache = new TtlCache({ ttl: ms(ttl) });
15
15
  }
16
+ /**
17
+ * This method is a no-op since in-memory stores are always ready.
18
+ */
19
+ open() {
20
+ return __awaiter(this, void 0, void 0, function* () {
21
+ // No-op since there is no underlying store to open.
22
+ });
23
+ }
16
24
  /**
17
25
  * Retrieves a DID resolution result from the cache.
18
26
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resolver-cache-memory.js","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-memory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAoBzC,MAAM,OAAO,sBAAsB;IAGjC,YAAY,EAAE,GAAG,GAAG,KAAK,KAAmC,EAAE;QAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;;;;;;OAOG;IACU,GAAG,CAAC,MAAc;;YAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;KAAA;IAED;;;;;;OAMG;IACU,GAAG,CAAC,MAAc,EAAE,gBAAqC;;YACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC3C,CAAC;KAAA;IAED;;;;;OAKG;IACU,MAAM,CAAC,MAAc;;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;KAAA;IAED;;;;OAIG;IACU,KAAK;;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KAAA;IAED;;;;;OAKG;IACU,KAAK;;YAChB,qDAAqD;QACvD,CAAC;KAAA;CACF"}
1
+ {"version":3,"file":"resolver-cache-memory.js","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-memory.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAoBzC,MAAM,OAAO,sBAAsB;IAGjC,YAAY,EAAE,GAAG,GAAG,KAAK,KAAmC,EAAE;QAC5D,IAAI,CAAC,KAAK,GAAG,IAAI,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED;;OAEG;IACU,IAAI;;YACf,oDAAoD;QACtD,CAAC;KAAA;IAED;;;;;;;OAOG;IACU,GAAG,CAAC,MAAc;;YAC7B,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACrD,CAAC;YAED,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAChC,CAAC;KAAA;IAED;;;;;;OAMG;IACU,GAAG,CAAC,MAAc,EAAE,gBAAqC;;YACpE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;QAC3C,CAAC;KAAA;IAED;;;;;OAKG;IACU,MAAM,CAAC,MAAc;;YAChC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;KAAA;IAED;;;;OAIG;IACU,KAAK;;YAChB,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;KAAA;IAED;;;;;OAKG;IACU,KAAK;;YAChB,qDAAqD;QACvD,CAAC;KAAA;CACF"}
@@ -5,6 +5,9 @@
5
5
  * potential for this library to be used in as many JS runtimes as possible.
6
6
  */
7
7
  export const DidResolverCacheNoop = {
8
+ open() {
9
+ return Promise.resolve();
10
+ },
8
11
  get(_key) {
9
12
  return Promise.resolve(undefined);
10
13
  },
@@ -1 +1 @@
1
- {"version":3,"file":"resolver-cache-noop.js","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-noop.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAqB;IACpD,GAAG,CAAC,IAAY;QACd,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,GAAG,CAAC,IAAY,EAAE,MAA2B;QAC3C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,IAAY;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC"}
1
+ {"version":3,"file":"resolver-cache-noop.js","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-noop.ts"],"names":[],"mappings":"AAGA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAqB;IACpD,IAAI;QACF,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,GAAG,CAAC,IAAY;QACd,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACpC,CAAC;IACD,GAAG,CAAC,IAAY,EAAE,MAA2B;QAC3C,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,MAAM,CAAC,IAAY;QACjB,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;IACD,KAAK;QACH,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC3B,CAAC;CACF,CAAC"}
@@ -54,6 +54,24 @@ export class UniversalResolver {
54
54
  this.didResolvers.set(resolver.methodName, resolver);
55
55
  }
56
56
  }
57
+ /**
58
+ * Opens the resolver's cache, acquiring any resources needed.
59
+ * Must be called before resolving DIDs if using a cache that requires initialization (e.g., LevelDB).
60
+ */
61
+ open() {
62
+ return __awaiter(this, void 0, void 0, function* () {
63
+ yield this.cache.open();
64
+ });
65
+ }
66
+ /**
67
+ * Closes the resolver's cache, releasing any resources held.
68
+ * Should be called during application shutdown.
69
+ */
70
+ close() {
71
+ return __awaiter(this, void 0, void 0, function* () {
72
+ yield this.cache.close();
73
+ });
74
+ }
57
75
  /**
58
76
  * Resolves a DID to a DID Resolution Result.
59
77
  *
@@ -1 +1 @@
1
- {"version":3,"file":"universal-resolver.js","sourceRoot":"","sources":["../../../src/resolver/universal-resolver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"universal-resolver.js","sourceRoot":"","sources":["../../../src/resolver/universal-resolver.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,73 @@
1
- import type { DidResolutionOptions, DidResolutionResult } from '../types/did-core.js';
1
+ import type { InferKeyGeneratorAlgorithm, KeyIdentifier, KeyImporterExporter, KeyManager, KmsExportKeyParams, KmsImportKeyParams } from '@enbox/crypto';
2
+ import { LocalKeyManager } from '@enbox/crypto';
3
+ import type { PortableDid } from '../types/portable-did.js';
4
+ import type { DidCreateOptions } from './did-method.js';
5
+ import type { DidDocument, DidResolutionOptions, DidResolutionResult, DidService, DidVerificationMethod } from '../types/did-core.js';
6
+ import { BearerDid } from '../bearer-did.js';
2
7
  import { DidMethod } from './did-method.js';
8
+ /**
9
+ * Defines the set of options available when creating a new Decentralized Identifier (DID) with the
10
+ * 'did:web' method.
11
+ *
12
+ * Unlike self-certifying DID methods (e.g., `did:jwk`, `did:dht`), `did:web` requires external
13
+ * information — a domain and an optional path — to form the DID URI. The `create()` method
14
+ * generates keys locally and constructs a DID document, but does NOT publish it. Registration
15
+ * with a `did:web` hosting server is the caller's responsibility.
16
+ *
17
+ * @example
18
+ * ```ts
19
+ * // Create a did:web DID for enbox.id/users/alice
20
+ * const did = await DidWeb.create({
21
+ * options: {
22
+ * domain: 'enbox.id',
23
+ * path: 'users:alice',
24
+ * }
25
+ * });
26
+ * // did.uri === 'did:web:enbox.id:users:alice'
27
+ * ```
28
+ */
29
+ export interface DidWebCreateOptions<TKms> extends DidCreateOptions<TKms> {
30
+ /**
31
+ * The domain (and optional port) that will host the DID document.
32
+ *
33
+ * Ports are percent-encoded per the did:web spec (e.g., `localhost%3A3000`).
34
+ * This value forms the first segment of the method-specific identifier.
35
+ *
36
+ * @example 'enbox.id'
37
+ * @example 'localhost%3A3000'
38
+ */
39
+ domain: string;
40
+ /**
41
+ * Optional colon-separated path segments appended after the domain.
42
+ *
43
+ * When present the DID document is served at `https://<domain>/<path>/did.json`.
44
+ * When absent the DID document is served at `https://<domain>/.well-known/did.json`.
45
+ *
46
+ * @example 'users:alice' // → did:web:enbox.id:users:alice
47
+ * @example 'orgs:acme' // → did:web:enbox.id:orgs:acme
48
+ */
49
+ path?: string;
50
+ /**
51
+ * Optionally specify the algorithm to be used for key generation of the primary
52
+ * verification method. Defaults to Ed25519. Mutually exclusive with
53
+ * `verificationMethods`.
54
+ */
55
+ algorithm?: TKms extends KeyManager ? InferKeyGeneratorAlgorithm<TKms> : InferKeyGeneratorAlgorithm<LocalKeyManager>;
56
+ /**
57
+ * Optional services to include in the DID document (e.g., DWN endpoints).
58
+ */
59
+ services?: DidService[];
60
+ }
3
61
  /**
4
62
  * The `DidWeb` class provides an implementation of the `did:web` DID method.
5
63
  *
6
64
  * Features:
65
+ * - DID Creation: Create new `did:web` DIDs with local key generation.
66
+ * - DID Key Management: Instantiate a DID object from an existing verification method key set or
67
+ * a key in a Key Management System (KMS). If supported by the KMS, a DID's
68
+ * key can be exported to a portable DID format.
7
69
  * - DID Resolution: Resolve a `did:web` to its corresponding DID Document.
70
+ * - Signature Operations: Sign and verify messages using keys associated with a DID.
8
71
  *
9
72
  * @remarks
10
73
  * The `did:web` method uses a web domain's existing reputation and aims to integrate decentralized
@@ -12,12 +75,30 @@ import { DidMethod } from './did-method.js';
12
75
  * security models and domain ownership to provide accessible, interoperable digital identity
13
76
  * management.
14
77
  *
78
+ * Unlike self-certifying methods, `did:web` creation generates keys and a DID document locally
79
+ * but does NOT publish them. The caller is responsible for registering the DID document with
80
+ * the hosting server.
81
+ *
15
82
  * @see {@link https://w3c-ccg.github.io/did-method-web/ | DID Web Specification}
16
83
  *
17
84
  * @example
18
85
  * ```ts
86
+ * // DID Creation
87
+ * const did = await DidWeb.create({
88
+ * options: { domain: 'enbox.id', path: 'users:alice' }
89
+ * });
90
+ *
19
91
  * // DID Resolution
20
- * const resolutionResult = await DidWeb.resolve({ did: did.uri });
92
+ * const resolutionResult = await DidWeb.resolve('did:web:enbox.id:users:alice');
93
+ *
94
+ * // Signature Operations
95
+ * const signer = await did.getSigner();
96
+ * const signature = await signer.sign({ data: new TextEncoder().encode('Message') });
97
+ * const isValid = await signer.verify({ data: new TextEncoder().encode('Message'), signature });
98
+ *
99
+ * // Import / Export
100
+ * const portableDid = await did.export();
101
+ * const imported = await DidWeb.import({ portableDid });
21
102
  * ```
22
103
  */
23
104
  export declare class DidWeb extends DidMethod {
@@ -25,6 +106,90 @@ export declare class DidWeb extends DidMethod {
25
106
  * Name of the DID method, as defined in the DID Web specification.
26
107
  */
27
108
  static methodName: string;
109
+ /**
110
+ * Creates a new DID using the `did:web` method formed from a newly generated key.
111
+ *
112
+ * @remarks
113
+ * The DID URI is formed from the given `domain` and optional `path`, prefixed with `did:web:`.
114
+ * Keys are generated locally and a DID document is constructed, but the document is NOT
115
+ * published to any server. Registration with a `did:web` hosting server is the caller's
116
+ * responsibility.
117
+ *
118
+ * Notes:
119
+ * - If no `options.algorithm` or `options.verificationMethods` are given, a new Ed25519 key is
120
+ * generated by default.
121
+ * - The `algorithm` and `verificationMethods` options are mutually exclusive.
122
+ * - The `domain` option is required.
123
+ *
124
+ * @example
125
+ * ```ts
126
+ * // DID Creation
127
+ * const did = await DidWeb.create({
128
+ * options: { domain: 'enbox.id', path: 'users:alice' }
129
+ * });
130
+ * // did.uri === 'did:web:enbox.id:users:alice'
131
+ *
132
+ * // DID Creation with a KMS
133
+ * const keyManager = new LocalKeyManager();
134
+ * const did = await DidWeb.create({
135
+ * keyManager,
136
+ * options: { domain: 'enbox.id', path: 'users:alice' }
137
+ * });
138
+ * ```
139
+ *
140
+ * @param params - The parameters for the create operation.
141
+ * @param params.keyManager - Optionally specify a Key Management System (KMS) used to generate
142
+ * keys and sign data.
143
+ * @param params.options - Parameters that specify the domain, path, algorithm, verification
144
+ * methods, and services for the new DID.
145
+ * @returns A Promise resolving to a {@link BearerDid} object representing the new DID.
146
+ */
147
+ static create<TKms extends KeyManager | undefined = undefined>({ keyManager, options, }: {
148
+ keyManager?: TKms;
149
+ options: DidWebCreateOptions<TKms>;
150
+ }): Promise<BearerDid>;
151
+ /**
152
+ * Given the W3C DID Document of a `did:web` DID, return the verification method that will be
153
+ * used for signing messages and credentials. If given, the `methodId` parameter is used to
154
+ * select the verification method. If not given, the first verification method referenced in
155
+ * `assertionMethod` is used, falling back to the first verification method in the document.
156
+ *
157
+ * @param params - The parameters for the `getSigningMethod` operation.
158
+ * @param params.didDocument - DID Document to get the verification method from.
159
+ * @param params.methodId - ID of the verification method to use for signing.
160
+ * @returns Verification method to use for signing.
161
+ */
162
+ static getSigningMethod({ didDocument, methodId }: {
163
+ didDocument: DidDocument;
164
+ methodId?: string;
165
+ }): Promise<DidVerificationMethod>;
166
+ /**
167
+ * Instantiates a {@link BearerDid} object for the DID Web method from a given
168
+ * {@link PortableDid}.
169
+ *
170
+ * This method allows for the creation of a `BearerDid` object using a previously created DID's
171
+ * key material, DID document, and metadata.
172
+ *
173
+ * @example
174
+ * ```ts
175
+ * // Export an existing BearerDid to PortableDid format.
176
+ * const portableDid = await did.export();
177
+ * // Reconstruct a BearerDid object from the PortableDid.
178
+ * const did = await DidWeb.import({ portableDid });
179
+ * ```
180
+ *
181
+ * @param params - The parameters for the import operation.
182
+ * @param params.portableDid - The PortableDid object to import.
183
+ * @param params.keyManager - Optionally specify an external Key Management System (KMS) used to
184
+ * generate keys and sign data. If not given, a new
185
+ * {@link LocalKeyManager} instance will be created and used.
186
+ * @returns A Promise resolving to a `BearerDid` object representing the DID formed from the
187
+ * provided keys.
188
+ */
189
+ static import({ portableDid, keyManager }: {
190
+ keyManager?: KeyManager & KeyImporterExporter<KmsImportKeyParams, KeyIdentifier, KmsExportKeyParams>;
191
+ portableDid: PortableDid;
192
+ }): Promise<BearerDid>;
28
193
  /**
29
194
  * Resolves a `did:web` identifier to a DID Document.
30
195
  *
@@ -1 +1 @@
1
- {"version":3,"file":"did-web.d.ts","sourceRoot":"","sources":["../../../src/methods/did-web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAe,oBAAoB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAGnG,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA2C5C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,MAAO,SAAQ,SAAS;IAEnC;;OAEG;IACH,OAAc,UAAU,SAAS;IAEjC;;;;;;OAMG;WACiB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAkE3G"}
1
+ {"version":3,"file":"did-web.d.ts","sourceRoot":"","sources":["../../../src/methods/did-web.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,0BAA0B,EAC1B,aAAa,EACb,mBAAmB,EACnB,UAAU,EACV,kBAAkB,EAClB,kBAAkB,EACnB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAEhD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,gBAAgB,EAA+B,MAAM,iBAAiB,CAAC;AACrF,OAAO,KAAK,EACV,WAAW,EACX,oBAAoB,EACpB,mBAAmB,EACnB,UAAU,EACV,qBAAqB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA6C5C;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,WAAW,mBAAmB,CAAC,IAAI,CAAE,SAAQ,gBAAgB,CAAC,IAAI,CAAC;IACvE;;;;;;;;OAQG;IACH,MAAM,EAAE,MAAM,CAAC;IAEf;;;;;;;;OAQG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IAEd;;;;OAIG;IACH,SAAS,CAAC,EAAE,IAAI,SAAS,UAAU,GAC/B,0BAA0B,CAAC,IAAI,CAAC,GAChC,0BAA0B,CAAC,eAAe,CAAC,CAAC;IAEhD;;OAEG;IACH,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA0CG;AACH,qBAAa,MAAO,SAAQ,SAAS;IAEnC;;OAEG;IACH,OAAc,UAAU,SAAS;IAEjC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCG;WACiB,MAAM,CAAC,IAAI,SAAS,UAAU,GAAG,SAAS,GAAG,SAAS,EAAE,EAC1E,UAAkC,EAClC,OAAO,GACR,EAAE;QACD,UAAU,CAAC,EAAE,IAAI,CAAC;QAClB,OAAO,EAAE,mBAAmB,CAAC,IAAI,CAAC,CAAC;KACpC,GAAG,OAAO,CAAC,SAAS,CAAC;IAqFtB;;;;;;;;;;OAUG;WACiB,gBAAgB,CAAC,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;QAC9D,WAAW,EAAE,WAAW,CAAC;QACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IA0BlC;;;;;;;;;;;;;;;;;;;;;;OAsBG;WACiB,MAAM,CAAC,EAAE,WAAW,EAAE,UAAkC,EAAE,EAAE;QAC9E,UAAU,CAAC,EAAE,UAAU,GAAG,mBAAmB,CAAC,kBAAkB,EAAE,aAAa,EAAE,kBAAkB,CAAC,CAAC;QACrG,WAAW,EAAE,WAAW,CAAC;KAC1B,GAAG,OAAO,CAAC,SAAS,CAAC;IAatB;;;;;;OAMG;WACiB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;CAkE3G"}
@@ -46,6 +46,13 @@ export declare class DidResolverCacheLevel implements DidResolverCache {
46
46
  /** The time-to-live for cache entries in milliseconds. */
47
47
  protected ttl: number;
48
48
  constructor({ db, location, ttl }?: DidResolverCacheLevelParams);
49
+ /**
50
+ * Opens the underlying LevelDB store.
51
+ * Calling `open()` on an already-open store is a safe no-op.
52
+ *
53
+ * @returns A promise that resolves when the store is ready for use.
54
+ */
55
+ open(): Promise<void>;
49
56
  /**
50
57
  * Retrieves a DID resolution result from the cache.
51
58
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resolver-cache-level.d.ts","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-level.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;OAGG;IACH,EAAE,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAyBF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,qDAAqD;IACrD,SAAS,CAAC,KAAK,8DAAC;IAEhB,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;gBAEV,EACV,EAAE,EACF,QAAmC,EACnC,GAAW,EACZ,GAAE,2BAAgC;IAKnC;;;;;;;OAOG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAwB3D;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
1
+ {"version":3,"file":"resolver-cache-level.d.ts","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-level.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,MAAM,2BAA2B,GAAG;IACxC;;;OAGG;IACH,EAAE,CAAC,EAAE,aAAa,CAAC,MAAM,GAAG,MAAM,GAAG,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjE;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAElB;;;;OAIG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAyBF;;;;;;;;;;;;;;GAcG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,qDAAqD;IACrD,SAAS,CAAC,KAAK,8DAAC;IAEhB,0DAA0D;IAC1D,SAAS,CAAC,GAAG,EAAE,MAAM,CAAC;gBAEV,EACV,EAAE,EACF,QAAmC,EACnC,GAAW,EACZ,GAAE,2BAAgC;IAKnC;;;;;OAKG;IACH,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB;;;;;;;OAOG;IACG,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAwB3D;;;;;;OAMG;IACH,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D;;;;;OAKG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB;;;;OAIG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGvB"}
@@ -17,6 +17,10 @@ export type DidResolverCacheMemoryParams = {
17
17
  export declare class DidResolverCacheMemory implements DidResolverCache {
18
18
  private cache;
19
19
  constructor({ ttl }?: DidResolverCacheMemoryParams);
20
+ /**
21
+ * This method is a no-op since in-memory stores are always ready.
22
+ */
23
+ open(): Promise<void>;
20
24
  /**
21
25
  * Retrieves a DID resolution result from the cache.
22
26
  *
@@ -1 +1 @@
1
- {"version":3,"file":"resolver-cache-memory.d.ts","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,KAAK,CAAwC;gBAEzC,EAAE,GAAW,EAAE,GAAE,4BAAiC;IAI9D;;;;;;;OAOG;IACU,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAQrE;;;;;;OAMG;IACU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItF;;;;;OAKG;IACU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;;OAKG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
1
+ {"version":3,"file":"resolver-cache-memory.d.ts","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-memory.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,4BAA4B,GAAG;IACzC;;;;;OAKG;IACH,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,KAAK,CAAwC;gBAEzC,EAAE,GAAW,EAAE,GAAE,4BAAiC;IAI9D;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIlC;;;;;;;OAOG;IACU,GAAG,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAQrE;;;;;;OAMG;IACU,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC;IAItF;;;;;OAKG;IACU,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIlD;;;;OAIG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;;;OAKG;IACU,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAGpC"}
@@ -1 +1 @@
1
- {"version":3,"file":"resolver-cache-noop.d.ts","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-noop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAgBlC,CAAC"}
1
+ {"version":3,"file":"resolver-cache-noop.d.ts","sourceRoot":"","sources":["../../../src/resolver/resolver-cache-noop.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,gBAmBlC,CAAC"}
@@ -69,6 +69,16 @@ export declare class UniversalResolver implements DidResolver, DidUrlDereference
69
69
  * @param params - The parameters for constructing the `DidResolver`.
70
70
  */
71
71
  constructor({ cache, didResolvers }: UniversalResolverParams);
72
+ /**
73
+ * Opens the resolver's cache, acquiring any resources needed.
74
+ * Must be called before resolving DIDs if using a cache that requires initialization (e.g., LevelDB).
75
+ */
76
+ open(): Promise<void>;
77
+ /**
78
+ * Closes the resolver's cache, releasing any resources held.
79
+ * Should be called during application shutdown.
80
+ */
81
+ close(): Promise<void>;
72
82
  /**
73
83
  * Resolves a DID to a DID Resolution Result.
74
84
  *