ไลบรารีนี้มีวัตถุประสงค์เพื่อเป็นอินเทอร์เฟซทั่วไปอย่างง่ายสำหรับแอปพลิเคชัน JavaScript เพื่อแก้ไขเอกสาร DID DID จากตัวระบุการกระจายอำนาจ (DIDS)
สิ่งนี้มีวัตถุประสงค์เพื่อสนับสนุนข้อมูลจำเพาะตัวระบุการกระจายอำนาจที่เสนอจากกลุ่มชุมชนข้อมูลรับรอง W3C
ไลบรารีไม่ได้ใช้วิธีการใด ๆ ที่เฉพาะเจาะจง แต่อนุญาตให้ใช้วิธีการ DI DID เพื่อปล่อยแพ็คเกจ 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 )
ตัวแก้ไขนำเสนอฟังก์ชั่น resolve()
ที่ส่งคืนสัญญา ES6 ที่ส่งคืนเอกสาร 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' )
การแก้ไขเอกสารอาจมีราคาแพง ในกรณีส่วนใหญ่ที่ดีที่สุดที่แคชทำเอกสาร การแคชจะต้องเปิดใช้งานโดยเฉพาะโดยใช้พารามิเตอร์ 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
} )
วิธีการแต่ละวิธีจะมีวิธีการของตัวเองในการค้นหาตัวระบุในบล็อกเชนที่เกี่ยวข้องหรือกลไกการจัดเก็บข้อมูลการกระจายอำนาจอื่น ๆ
เพื่อหลีกเลี่ยงการกำหนดค่าผิดพลาดผู้ใช้วิธีการควรส่งออกฟังก์ชั่น getResolver()
ซึ่งส่งคืนการแมปวัตถุชื่อวิธีการไปยัง resolve(did: string, parsed: ParsedDID, didResolver: DIDResolver, options: DIDResolutionOptions)
ฟังก์ชั่น เช่น { ethr: 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 )