Perpustakaan ini dimaksudkan sebagai antarmuka umum sederhana untuk aplikasi JavaScript untuk menyelesaikan dokumen DO dari pengidentifikasi terdesentralisasi (DIDS).
Ini dimaksudkan untuk mendukung spesifikasi pengidentifikasi desentralisasi yang diusulkan dari kelompok komunitas kredensial W3C.
Perpustakaan tidak mengimplementasikan metode DIM spesifik apa pun, tetapi memungkinkan Metode Implemor untuk melepaskan paket NPM yang dapat ditambahkan oleh aplikasi.
Resolver
Anda sekarang diharuskan untuk mengkonfigurasikan resolver selama instantiasi. Konstruktor Resolver
mengharapkan registri metode yang dipetakan ke fungsi resolver. Misalnya:
{
ethr : resolve ,
web : resolve
}
Setiap resolver metode harus mengekspos fungsi yang disebut getResolver
yang akan mengembalikan objek yang berisi salah satu pasangan kunci/nilai ini. Kemudian Anda dapat meratakannya menjadi satu objek untuk masuk ke konstruktor 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 )
Penyelidikan metode yang dibuat sebelum versi 3.0.0
dari perpustakaan ini dapat digunakan sebagai penyokong warisan.
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 menyajikan fungsi resolve()
sederhana yang mengembalikan janji ES6 yang mengembalikan dokumen DID.
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' )
Menyelesaikan dokumen apakah bisa mahal. Dalam kebanyakan kasus yang terbaik untuk cache melakukan dokumen. Caching harus diaktifkan secara khusus menggunakan parameter cache
Cache bawaan menggunakan peta, tetapi tidak memiliki TTL otomatis, jadi entri tidak kedaluwarsa. Ini baik -baik saja di sebagian besar konteks web, seluler dan tanpa server. Jika Anda menjalankan proses jangka panjang, Anda mungkin ingin menggunakan sistem caching yang dapat dikonfigurasi yang ada.
Cache bawaan dapat diaktifkan dengan memberikan nilai true
kepada konstruktor:
const resolver = new DIDResolver ( {
ethr ,
web
} , {
cache : true
} )
Berikut adalah contoh menggunakan js-cache
yang belum diuji.
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
} )
Setiap metode DID akan memiliki metode sendiri untuk mencari pengidentifikasi pada blockchain masing -masing atau mekanisme penyimpanan terdesentralisasi lainnya.
Untuk menghindari kesalahan konfigurasi, pelaksana metode harus mengekspor fungsi getResolver()
yang mengembalikan objek pemetaan nama metode ke resolve(did: string, parsed: ParsedDID, didResolver: DIDResolver, options: DIDResolutionOptions)
fungsi. misalnya { ethr: resolve }
.
Fungsi tekad harus menerima string Did, dan objek tipe 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 }
}
Hasil MyMethod getResolver()
kemudian dapat diteruskan ke konstruktor DidResolver. Perhatikan bahwa itu harus diratakan jika digunakan dengan metode lain juga.
import { DIDResolver } from 'did-resolver'
import MyMethod from 'mymethod-did-resolver'
const myResolver = MyMethod . getResolver ( )
const resolver = new DIDResolver ( myResolver )