Skip to content

Commit

Permalink
fix: constructor takes an array of providers
Browse files Browse the repository at this point in the history
  • Loading branch information
simonas-notcat committed Jul 2, 2021
1 parent 8dd1ceb commit 768aa33
Show file tree
Hide file tree
Showing 7 changed files with 64 additions and 37 deletions.
8 changes: 4 additions & 4 deletions __tests__/localAgent.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -153,10 +153,10 @@ const setup = async (options?: IAgentOptions): Promise<boolean> => {
new CredentialIssuer(),
new SelectiveDisclosure(),
new DIDDiscovery({
providers: {
'alias': new AliasDiscoveryProvider(),
'profile': new ProfileDiscoveryProvider(),
}
providers: [
new AliasDiscoveryProvider(),
new ProfileDiscoveryProvider(),
]
}),
],
})
Expand Down
8 changes: 4 additions & 4 deletions __tests__/restAgent.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -160,10 +160,10 @@ const setup = async (options?: IAgentOptions): Promise<boolean> => {
new CredentialIssuer(),
new SelectiveDisclosure(),
new DIDDiscovery({
providers: {
'alias': new AliasDiscoveryProvider(),
'profile': new ProfileDiscoveryProvider(),
}
providers: [
new AliasDiscoveryProvider(),
new ProfileDiscoveryProvider(),
]
}),
],
})
Expand Down
12 changes: 9 additions & 3 deletions packages/data-store/src/did-discovery-provider.ts
Original file line number Diff line number Diff line change
@@ -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<IDataStoreORM>,
): Promise<Array<IDIDDiscoverMatch>> {
): Promise<IDIDDiscoveryProviderResult> {
const matches: IDIDDiscoverMatch[] = []

const credentials = await context.agent.dataStoreORMGetVerifiableCredentialsByClaims({
Expand All @@ -26,6 +29,9 @@ export class ProfileDiscoveryProvider implements AbstractDidDiscoveryProvider {
})
})

return matches
return {
provider: this.name,
matches
}
}
}
42 changes: 28 additions & 14 deletions packages/did-discovery/plugin.schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -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": {
Expand Down
5 changes: 3 additions & 2 deletions packages/did-discovery/src/abstract-did-discovery-provider.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,18 @@
import { IAgentContext } from '@veramo/core';
import {
IDIDDiscoveryDiscoverDidArgs,
IDIDDiscoverMatch
IDIDDiscoveryProviderResult
} from './types'

/**
* An abstract class for the {@link @veramo/did-discovery#DIDDiscovery} providers
* @public
*/
export abstract class AbstractDidDiscoveryProvider {
abstract name: string
abstract discoverDid(
args: IDIDDiscoveryDiscoverDidArgs,
context: IAgentContext<any>,
): Promise<Array<IDIDDiscoverMatch>>
): Promise<IDIDDiscoveryProviderResult>

}
14 changes: 7 additions & 7 deletions packages/did-discovery/src/action-handler.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<string, AbstractDidDiscoveryProvider>
readonly providers: Array<AbstractDidDiscoveryProvider>

constructor(options: {
providers: Record<string, AbstractDidDiscoveryProvider>
providers: Array<AbstractDidDiscoveryProvider>
}) {
this.providers = options.providers
this.methods = {
Expand All @@ -47,14 +47,14 @@ export class DIDDiscovery implements IAgentPlugin {
const results: IDIDDiscoveryProviderResult[] = []
const errors: Record<string, string> = {}

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}`)
}
}
Expand Down
12 changes: 9 additions & 3 deletions packages/did-manager/src/did-discovery-provider.ts
Original file line number Diff line number Diff line change
@@ -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<IDIDManager>,
): Promise<Array<IDIDDiscoverMatch>> {
): Promise<IDIDDiscoveryProviderResult> {
const matches = []
try {
const identifier = await context.agent.didManagerGetByAlias({alias: args.query})
Expand All @@ -17,6 +19,10 @@ export class AliasDiscoveryProvider implements AbstractDidDiscoveryProvider {
}
matches.push(match)
} catch (e) {}
return matches

return {
provider: this.name,
matches
}
}
}

0 comments on commit 768aa33

Please sign in to comment.