Fork of github.com/did-method-plc/did-method-plc
1import { P256Keypair, parseDidKey, Secp256k1Keypair } from '@atproto/crypto' 2import * as document from '../src/document' 3import * as t from '../src/types' 4 5describe('document', () => { 6 it('formats a valid DID document', async () => { 7 const atprotoKey = await Secp256k1Keypair.create() 8 const otherKey = await P256Keypair.create() 9 const rotate1 = await Secp256k1Keypair.create() 10 const rotate2 = await P256Keypair.create() 11 const alsoKnownAs = ['at://alice.test', 'https://bob.test'] 12 const atpPds = 'https://example.com' 13 const otherService = 'https://other.com' 14 const data: t.DocumentData = { 15 did: 'did:example:alice', 16 verificationMethods: { 17 atproto: atprotoKey.did(), 18 other: otherKey.did(), 19 }, 20 rotationKeys: [rotate1.did(), rotate2.did()], 21 alsoKnownAs, 22 services: { 23 atproto_pds: { 24 type: 'AtprotoPersonalDataServer', 25 endpoint: atpPds, 26 }, 27 other: { 28 type: 'SomeService', 29 endpoint: otherService, 30 }, 31 }, 32 } 33 const doc = await document.formatDidDoc(data) 34 // only expected keys 35 expect(Object.keys(doc).sort()).toEqual( 36 ['@context', 'id', 'alsoKnownAs', 'verificationMethod', 'service'].sort(), 37 ) 38 expect(doc['@context']).toEqual([ 39 'https://www.w3.org/ns/did/v1', 40 'https://w3id.org/security/multikey/v1', 41 'https://w3id.org/security/suites/secp256k1-2019/v1', 42 'https://w3id.org/security/suites/ecdsa-2019/v1', 43 ]) 44 expect(doc.id).toEqual(data.did) 45 expect(doc.alsoKnownAs).toEqual(alsoKnownAs) 46 47 expect(doc.verificationMethod.length).toBe(2) 48 49 expect(doc.verificationMethod[0].id).toEqual(data.did + '#atproto') 50 expect(doc.verificationMethod[0].type).toEqual('Multikey') 51 expect(doc.verificationMethod[0].controller).toEqual(data.did) 52 parseDidKey(atprotoKey.did()) 53 const atprotoKeyMultibase = atprotoKey.did().replace(/^(did:key:)/, '') 54 expect(doc.verificationMethod[0].publicKeyMultibase).toEqual( 55 atprotoKeyMultibase, 56 ) 57 58 expect(doc.verificationMethod[1].id).toEqual(data.did + '#other') 59 expect(doc.verificationMethod[1].type).toEqual('Multikey') 60 expect(doc.verificationMethod[1].controller).toEqual(data.did) 61 parseDidKey(otherKey.did()) 62 const otherKeyMultibase = otherKey.did().replace(/^(did:key:)/, '') 63 expect(doc.verificationMethod[1].publicKeyMultibase).toEqual( 64 otherKeyMultibase, 65 ) 66 67 expect(doc.service.length).toBe(2) 68 expect(doc.service[0].id).toEqual('#atproto_pds') 69 expect(doc.service[0].type).toEqual('AtprotoPersonalDataServer') 70 expect(doc.service[0].serviceEndpoint).toEqual(atpPds) 71 expect(doc.service[1].id).toEqual('#other') 72 expect(doc.service[1].type).toEqual('SomeService') 73 expect(doc.service[1].serviceEndpoint).toEqual(otherService) 74 }) 75})