이 라이브러리는 JavaScript 응용 프로그램이 분산 된 식별자 (DID)의 DID 문서를 해결하기위한 간단한 공통 인터페이스로 고안되었습니다.
이는 W3C Credentials Community Group의 제안 된 분산 식별자 사양을 지원하기위한 것입니다.
라이브러리는 특정 DID 메소드를 구현하지 않지만 DID Method 구현기가 응용 프로그램이 추가 할 수있는 NPM 패키지를 릴리스 할 수 있도록 허용합니다.
Resolver
객체를 구성하십시오 이제 인스턴스화 중에 리졸버를 미리 구성해야합니다. Resolver
생성자는 Resolver 기능에 매핑 된 방법의 레지스트리를 기대합니다. 예를 들어:
{
ethr : resolve ,
web : resolve
}
각 방법 리졸버는 getResolver
라는 함수를 노출시켜 이러한 키/값 쌍 중 하나를 포함하는 객체를 반환합니다. 그런 다음 하나의 객체로 평평하게하여 Resolver
생성자로 전달할 수 있습니다.
import { Resolver } from 'did-resolver'
import ethr from 'ethr-did-resolver'
import web from 'web-did-resolver'
import sov from 'sov-did-resolver'
//returns an object of { methodName: resolveFunction}
ethrResolver = ethr . getResolver ( )
webResolver = web . getResolver ( )
//If you are using multiple methods you need to flatten them into one object
const resolver = new Resolver ( {
... ethrResolver ,
... webResolver ,
} )
//If you are using one method you can simply pass the result of getResolver( into the constructor
const resolver = new Resolver ( ethrResolver )
이 라이브러리의 버전 3.0.0
이전에 생성 된 메소드 레볼버는 레거시 레졸버로 사용할 수 있습니다.
import { Resolver } from 'did-resolver'
import web from 'web-did-resolver'
import sov from 'sov-did-resolver'
//returns an object of { methodName: resolveFunction}
webResolver = web . getResolver ( )
sovResolver = sov . getResolver ( )
//If you are using multiple methods you need to flatten them into one object
const resolver = new Resolver ( { } , {
legacyResolvers : {
... webResolver ,
... sovResolver ,
}
} )
//If you are using one method you can simply pass the result of getResolver( into the constructor
const resolver = new Resolver ( ethrResolver )
Resolver는 Did 문서를 반환하는 ES6 약속을 반환하는 간단한 resolve()
함수를 제시합니다.
resolver . resolve ( 'did:ethr:0xF3beAC30C498D9E26865F34fCAa57dBB935b0D74/some/path#fragment=123' ) . then ( doc => console . log )
// You can also use ES7 async/await syntax
const doc = await resolver . resolve ( 'did:ethr:0xF3beAC30C498D9E26865F34fCAa57dBB935b0D74/some/path#fragment=123' )
해결 된 문서를 해결하는 데 비용이 많이들 수 있습니다. 대부분의 경우 문서를 작성하는 것이 가장 좋습니다. 캐시는 cache
매개 변수를 사용하여 특별히 활성화해야합니다.
내장 된 캐시에는 맵을 사용하지만 자동 TTL이 없으므로 항목이 만료되지 않습니다. 이것은 대부분의 웹, 모바일 및 서버리스 컨텍스트에서 괜찮습니다. 장기 실행 프로세스를 실행하는 경우 기존 구성 가능한 캐싱 시스템을 사용할 수 있습니다.
내장 캐시는 생성자에게 true
값을 전달하여 활성화 할 수 있습니다.
const resolver = new DIDResolver ( {
ethr ,
web
} , {
cache : true
} )
다음은 테스트되지 않은 js-cache
사용하는 예입니다.
var cache = require ( 'js-cache' )
const customCache : DIDCache = ( parsed , resolve ) => {
// DID spec requires to not cache if no-cache param is set
if ( parsed . params && parsed . params [ 'no-cache' ] === 'true' ) return await resolve ( )
const cached = cache . get ( parsed . didUrl )
if ( cached !== undefined ) return cached
const doc = await resolve ( )
cache . set ( parsed , doc , 60000 )
return doc
}
const resolver = new DIDResolver ( {
ethr ,
web
} , {
cache : customCache
} )
각각의 DID 방법에는 해당 블록 체인 또는 기타 분산 저장 메커니즘에서 식별자를 찾는 자체 방법이 있습니다.
오해를 피하기 위해 Method 구현자는 getResolver()
함수를 내보내는 객체 이름을 resolve(did: string, parsed: ParsedDID, didResolver: DIDResolver, options: DIDResolutionOptions)
에 반환합니다. 예를 들어 { ethr: resolve }
.
Resolve 함수는 Did String과 ParsedDid 유형의 객체를 수락해야합니다.
export function getResolver ( ) {
async function resolve (
did : string ,
parsed : ParsedDID ,
didResolver : Resolver ,
options : DIDResolutionOptions
) : Promise < DIDDocument > {
console . log ( parsed )
// {method: 'mymethod', id: 'abcdefg', did: 'did:mymethod:abcdefg/some/path#fragment=123', path: '/some/path', fragment: 'fragment=123'}
const didDoc = ... // lookup doc
// If you need to lookup another did as part of resolving this did document, the primary DIDResolver object is passed in as well
const parentDID = await didResolver . resolve ( ... )
// Return the DIDResolutionResult object
return {
didResolutionMetadata : { contentType : 'application/did+ld+json' } ,
didDocument : didDoc
didDocumentMetadata : { ... }
}
}
return { myMethod : resolve }
}
MyMethod getResolver()
결과는 Didresolver 생성자로 전달 될 수 있습니다. 다른 방법과 함께 사용하면 평평하게해야합니다.
import { DIDResolver } from 'did-resolver'
import MyMethod from 'mymethod-did-resolver'
const myResolver = MyMethod . getResolver ( )
const resolver = new DIDResolver ( myResolver )