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})