diff --git a/__tests__/localAgent.test.ts b/__tests__/localAgent.test.ts index 0fc039002..803937b20 100644 --- a/__tests__/localAgent.test.ts +++ b/__tests__/localAgent.test.ts @@ -153,10 +153,10 @@ const setup = async (options?: IAgentOptions): Promise => { new CredentialIssuer(), new SelectiveDisclosure(), new DIDDiscovery({ - providers: { - 'alias': new AliasDiscoveryProvider(), - 'profile': new ProfileDiscoveryProvider(), - } + providers: [ + new AliasDiscoveryProvider(), + new ProfileDiscoveryProvider(), + ] }), ], }) diff --git a/__tests__/restAgent.test.ts b/__tests__/restAgent.test.ts index 7c2a84c55..d6581e128 100644 --- a/__tests__/restAgent.test.ts +++ b/__tests__/restAgent.test.ts @@ -160,10 +160,10 @@ const setup = async (options?: IAgentOptions): Promise => { new CredentialIssuer(), new SelectiveDisclosure(), new DIDDiscovery({ - providers: { - 'alias': new AliasDiscoveryProvider(), - 'profile': new ProfileDiscoveryProvider(), - } + providers: [ + new AliasDiscoveryProvider(), + new ProfileDiscoveryProvider(), + ] }), ], }) diff --git a/packages/data-store/src/did-discovery-provider.ts b/packages/data-store/src/did-discovery-provider.ts index 4de757e46..633b169c1 100644 --- a/packages/data-store/src/did-discovery-provider.ts +++ b/packages/data-store/src/did-discovery-provider.ts @@ -1,12 +1,15 @@ import { IAgentContext } from '@veramo/core' import { IDataStoreORM } from './data-store-orm' -import { AbstractDidDiscoveryProvider, IDIDDiscoverMatch, IDIDDiscoveryDiscoverDidArgs } from '@veramo/did-discovery' +import { AbstractDidDiscoveryProvider, IDIDDiscoverMatch, IDIDDiscoveryProviderResult, IDIDDiscoveryDiscoverDidArgs } from '@veramo/did-discovery' export class ProfileDiscoveryProvider implements AbstractDidDiscoveryProvider { + + readonly name = 'profile' + async discoverDid( args: IDIDDiscoveryDiscoverDidArgs, context: IAgentContext, - ): Promise> { + ): Promise { const matches: IDIDDiscoverMatch[] = [] const credentials = await context.agent.dataStoreORMGetVerifiableCredentialsByClaims({ @@ -26,6 +29,9 @@ export class ProfileDiscoveryProvider implements AbstractDidDiscoveryProvider { }) }) - return matches + return { + provider: this.name, + matches + } } } \ No newline at end of file diff --git a/packages/did-discovery/plugin.schema.json b/packages/did-discovery/plugin.schema.json index c2000ed7e..11101f5bc 100644 --- a/packages/did-discovery/plugin.schema.json +++ b/packages/did-discovery/plugin.schema.json @@ -6,74 +6,88 @@ "type": "object", "properties": { "query": { - "type": "string" + "type": "string", + "description": "Search string" }, "options": { - "type": "object" + "type": "object", + "description": "Provider specific options" } }, "required": [ "query" - ] + ], + "description": "Contains the parameters of a DID Discovery Request" }, "IDIDDiscoveryDiscoverDidResult": { "type": "object", "properties": { "query": { - "type": "string" + "type": "string", + "description": "Search string" }, "options": { - "type": "object" + "type": "object", + "description": "Provider specific options" }, "results": { "type": "array", "items": { "$ref": "#/components/schemas/IDIDDiscoveryProviderResult" - } + }, + "description": "List of discovery results from different providers" }, "errors": { "type": "object", "additionalProperties": { "type": "string" - } + }, + "description": "A record of encountered errors" } }, "required": [ "results" - ] + ], + "description": "DID Discovery results" }, "IDIDDiscoveryProviderResult": { "type": "object", "properties": { "provider": { - "type": "string" + "type": "string", + "description": "Provider name" }, "matches": { "type": "array", "items": { "$ref": "#/components/schemas/IDIDDiscoverMatch" - } + }, + "description": "List of discovery matches" } }, "required": [ "provider", "matches" - ] + ], + "description": "Discovery results from one provider" }, "IDIDDiscoverMatch": { "type": "object", "properties": { "did": { - "type": "string" + "type": "string", + "description": "DID" }, "metaData": { - "type": "object" + "type": "object", + "description": "Provider specific related metadata about the match" } }, "required": [ "did", "metaData" - ] + ], + "description": "A single discovery match" } }, "methods": { diff --git a/packages/did-discovery/src/abstract-did-discovery-provider.ts b/packages/did-discovery/src/abstract-did-discovery-provider.ts index 5503c8e32..76c82844d 100644 --- a/packages/did-discovery/src/abstract-did-discovery-provider.ts +++ b/packages/did-discovery/src/abstract-did-discovery-provider.ts @@ -1,7 +1,7 @@ import { IAgentContext } from '@veramo/core'; import { IDIDDiscoveryDiscoverDidArgs, - IDIDDiscoverMatch + IDIDDiscoveryProviderResult } from './types' /** @@ -9,9 +9,10 @@ import { * @public */ export abstract class AbstractDidDiscoveryProvider { + abstract name: string abstract discoverDid( args: IDIDDiscoveryDiscoverDidArgs, context: IAgentContext, - ): Promise> + ): Promise } diff --git a/packages/did-discovery/src/action-handler.ts b/packages/did-discovery/src/action-handler.ts index f17be31ca..d3ccdb53f 100644 --- a/packages/did-discovery/src/action-handler.ts +++ b/packages/did-discovery/src/action-handler.ts @@ -21,10 +21,10 @@ const debug = Debug('veramo:did-discovery') export class DIDDiscovery implements IAgentPlugin { readonly methods: IDIDDiscovery readonly schema = schema.IDIDDiscovery - readonly providers: Record + readonly providers: Array constructor(options: { - providers: Record + providers: Array }) { this.providers = options.providers this.methods = { @@ -47,14 +47,14 @@ export class DIDDiscovery implements IAgentPlugin { const results: IDIDDiscoveryProviderResult[] = [] const errors: Record = {} - for (const provider of Object.keys(this.providers)) { + for (const provider of this.providers) { try { - const matches = await this.providers[provider].discoverDid(args, context) - if (matches.length > 0) { - results.push({ provider, matches }) + const providerResult = await provider.discoverDid(args, context) + if (providerResult.matches.length > 0) { + results.push(providerResult) } } catch (e) { - errors[provider] = e.message + errors[provider.name] = e.message debug(`Error ${provider}: ${e.message}`) } } diff --git a/packages/did-manager/src/did-discovery-provider.ts b/packages/did-manager/src/did-discovery-provider.ts index e11c38a62..d903eff7b 100644 --- a/packages/did-manager/src/did-discovery-provider.ts +++ b/packages/did-manager/src/did-discovery-provider.ts @@ -1,11 +1,13 @@ import { IAgentContext, IDIDManager } from '@veramo/core'; -import { AbstractDidDiscoveryProvider, IDIDDiscoverMatch, IDIDDiscoveryDiscoverDidArgs } from '@veramo/did-discovery' +import { AbstractDidDiscoveryProvider, IDIDDiscoverMatch, IDIDDiscoveryProviderResult, IDIDDiscoveryDiscoverDidArgs } from '@veramo/did-discovery' export class AliasDiscoveryProvider implements AbstractDidDiscoveryProvider { + readonly name = 'alias' + async discoverDid( args: IDIDDiscoveryDiscoverDidArgs, context: IAgentContext, - ): Promise> { + ): Promise { const matches = [] try { const identifier = await context.agent.didManagerGetByAlias({alias: args.query}) @@ -17,6 +19,10 @@ export class AliasDiscoveryProvider implements AbstractDidDiscoveryProvider { } matches.push(match) } catch (e) {} - return matches + + return { + provider: this.name, + matches + } } } \ No newline at end of file