Skip to content

Commit

Permalink
feat: add native resolver for did:key
Browse files Browse the repository at this point in the history
fixes #352
  • Loading branch information
mirceanis committed Apr 16, 2021
1 parent 9e1af61 commit 18fa983
Show file tree
Hide file tree
Showing 9 changed files with 691 additions and 21 deletions.
2 changes: 2 additions & 0 deletions __tests__/localAgent.test.ts
Expand Up @@ -35,6 +35,7 @@ import {
import { Resolver } from 'did-resolver'
import { getResolver as ethrDidResolver } from 'ethr-did-resolver'
import { getResolver as webDidResolver } from 'web-did-resolver'
import { getDidKeyResolver } from '../packages/did-provider-key'
import fs from 'fs'

jest.setTimeout(30000)
Expand Down Expand Up @@ -125,6 +126,7 @@ const setup = async (options?: IAgentOptions): Promise<boolean> => {
resolver: new Resolver({
...ethrDidResolver({ infuraProjectId }),
...webDidResolver(),
...getDidKeyResolver(),
}),
}),
new DataStore(dbConnection),
Expand Down
11 changes: 4 additions & 7 deletions __tests__/localMemoryStoreAgent.test.ts
Expand Up @@ -23,16 +23,12 @@ import {
ISelectiveDisclosure,
SdrMessageHandler,
} from '../packages/selective-disclosure/src'
import { KeyManagementSystem, SecretBox } from '../packages/kms-local/src'
import {
Entities,
IDataStoreORM,
DataStore,
DataStoreORM,
} from '../packages/data-store/src'
import { KeyManagementSystem } from '../packages/kms-local/src'
import { Entities, IDataStoreORM, DataStore, DataStoreORM } from '../packages/data-store/src'
import { Resolver } from 'did-resolver'
import { getResolver as ethrDidResolver } from 'ethr-did-resolver'
import { getResolver as webDidResolver } from 'web-did-resolver'
import { getDidKeyResolver } from '../packages/did-provider-key'
import fs from 'fs'

jest.setTimeout(30000)
Expand Down Expand Up @@ -123,6 +119,7 @@ const setup = async (options?: IAgentOptions): Promise<boolean> => {
resolver: new Resolver({
...ethrDidResolver({ infuraProjectId }),
...webDidResolver(),
...getDidKeyResolver(),
}),
}),
new DataStore(dbConnection),
Expand Down
2 changes: 2 additions & 0 deletions __tests__/restAgent.test.ts
Expand Up @@ -54,6 +54,7 @@ import documentationExamples from './shared/documentationExamples'
import keyManager from './shared/keyManager'
import didManager from './shared/didManager'
import messageHandler from './shared/messageHandler'
import { getUniversalResolver } from '../packages/did-resolver/src/universal-resolver'

const databaseFile = 'rest-database.sqlite'
const infuraProjectId = '5ffc47f65c4042ce847ef66a3fa70d4c'
Expand Down Expand Up @@ -132,6 +133,7 @@ const setup = async (options?: IAgentOptions): Promise<boolean> => {
resolver: new Resolver({
...ethrDidResolver({ infuraProjectId }),
...webDidResolver(),
key: getUniversalResolver(), // resolve using remote resolver
}),
}),
new DataStore(dbConnection),
Expand Down
9 changes: 8 additions & 1 deletion __tests__/shared/resolveDid.ts
Expand Up @@ -23,6 +23,13 @@ export default (testContext: {
expect(didDoc?.id).toEqual(didUrl)
})

it('should resolve did:key', async () => {
const didUrl = 'did:key:z6Mkk7yqnGF3YwTrLpqrW6PGsKci7dNqh1CjnvMbzrMerSeL'
const result = await agent.resolveDid({ didUrl })
const didDoc = result.didDocument
expect(didDoc?.id).toEqual(didUrl)
})

it('should return an error for unsupported did methods', async () => {
expect.assertions(1)
await expect(agent.resolveDid({ didUrl: 'did:foo:bar' })).resolves.toEqual({
Expand All @@ -46,7 +53,7 @@ export default (testContext: {
didResolutionMetadata: { error: 'invalidDid' },
})
//@ts-ignore
await expect(agent.resolveDid({ didUrl: "garbage" })).resolves.toEqual({
await expect(agent.resolveDid({ didUrl: 'garbage' })).resolves.toEqual({
didDocument: null,
didDocumentMetadata: {},
didResolutionMetadata: { error: 'invalidDid' },
Expand Down
5 changes: 4 additions & 1 deletion packages/cli/default/default.yml
Expand Up @@ -152,7 +152,7 @@ didResolver:
web:
$ref: /web-did-resolver
key:
$ref: /universal-resolver
$ref: /did-key-resolver
elem:
$ref: /universal-resolver
io:
Expand Down Expand Up @@ -188,6 +188,9 @@ universal-resolver:
$args:
- url: https://dev.uniresolver.io/1.0/identifiers/

did-key-resolver:
$require: '@veramo/did-provider-key?t=function&p=/key#getDidKeyResolver'

# Key Manager
keyManager:
$require: '@veramo/key-manager#KeyManager'
Expand Down
1 change: 1 addition & 0 deletions packages/did-provider-key/package.json
Expand Up @@ -9,6 +9,7 @@
"extract-api": "yarn veramo dev extract-api"
},
"dependencies": {
"@transmute/did-key.js": "^0.2.1-unstable.35",
"@veramo/core": "^1.0.1",
"@veramo/did-manager": "^1.0.1",
"debug": "^4.1.1",
Expand Down
1 change: 1 addition & 0 deletions packages/did-provider-key/src/index.ts
Expand Up @@ -5,3 +5,4 @@
* @packageDocumentation
*/
export { KeyDIDProvider } from './key-did-provider'
export { getDidKeyResolver } from './resolver'
25 changes: 25 additions & 0 deletions packages/did-provider-key/src/resolver.ts
@@ -0,0 +1,25 @@
import { resolver } from '@transmute/did-key.js'
import { DIDDocument } from '@veramo/core'
import { DIDResolutionOptions, DIDResolutionResult, DIDResolver, ParsedDID, Resolvable } from 'did-resolver'

const resolve: DIDResolver = async (
didUrl: string,
_parsed: ParsedDID,
_resolver: Resolvable,
options: DIDResolutionOptions,
): Promise<DIDResolutionResult> => {
try {
const didResolution = (await resolver.resolve(didUrl, options)) as DIDResolutionResult
return didResolution
} catch (err) {
return {
didDocumentMetadata: {},
didResolutionMetadata: { error: 'invalidDid', message: err.toString() },
didDocument: null,
}
}
}

export function getDidKeyResolver() {
return { key: resolve }
}

0 comments on commit 18fa983

Please sign in to comment.