このライブラリは、JavaScriptアプリケーションが分散型識別子(DID)からDIDドキュメントを解決するための単純な共通インターフェイスとして意図されています。
これは、W3C資格情報コミュニティグループから提案された分散型識別子仕様をサポートすることを目的としています。
ライブラリは特定のDIDメソッドを実装していませんが、DIDメソッド実装者がアプリケーションを追加できるNPMパッケージをリリースできるようにします。
Resolver
オブジェクトを構成しますこれで、インスタンス化中にリゾルバーを事前に設定する必要があります。 Resolver
コンストラクターは、リゾルバー関数にマッピングされたメソッドのレジストリを期待しています。例えば:
{
ethr : resolve ,
web : resolve
}
各メソッドリゾルバーは、これらのキー/値ペアのいずれかを含むオブジェクトを返すgetResolver
という関数を公開する必要があります。次に、それらを1つのオブジェクトに平らにして、 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' )
解決済みのドキュメントは高価になる可能性があります。ほとんどの場合、DIDドキュメントをキャッシュするのが最善です。キャッシングは、 cache
パラメーターを使用して特別に有効にする必要があります
組み込みのキャッシュはマップを使用しますが、自動TTLがないため、エントリは期限切れになりません。これは、ほとんどのWeb、モバイル、サーバーレスのコンテキストで問題ありません。長期にわたるプロセスを実行する場合は、既存の構成可能なキャッシングシステムを使用することができます。
組み込みのキャッシュは、コンストラクターに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メソッドには、それぞれのブロックチェーンまたはその他の分散型ストレージメカニズムで識別子を調べるための独自の方法があります。
誤解を回避するには、メソッドの実装者は、メソッド名を解像度にマッピングするオブジェクトを返すgetResolver()
関数をエクスポートする必要がありますresolve(did: string, parsed: ParsedDID, didResolver: DIDResolver, options: DIDResolutionOptions)
関数。 Eg { ethr: resolve }
。
Resolve関数は、did文字列と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 )