From 11b20967fae66b784a527d92c39cd29f6dbe6b10 Mon Sep 17 00:00:00 2001 From: Mircea Nistor Date: Tue, 20 Apr 2021 16:34:51 +0200 Subject: [PATCH] feat: add `assertionMethod` by default to didDocument (#124) closes #117 fixes #115 --- src/__tests__/networks.integration.test.ts | 6 ++++ src/__tests__/resolver.test.ts | 42 ++++++++++++++++++++++ src/resolver.ts | 9 ++--- 3 files changed, 53 insertions(+), 4 deletions(-) diff --git a/src/__tests__/networks.integration.test.ts b/src/__tests__/networks.integration.test.ts index 154008cd..13e86b9e 100644 --- a/src/__tests__/networks.integration.test.ts +++ b/src/__tests__/networks.integration.test.ts @@ -34,6 +34,7 @@ describe('ethrResolver (alt-chains)', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -62,6 +63,7 @@ describe('ethrResolver (alt-chains)', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -90,6 +92,7 @@ describe('ethrResolver (alt-chains)', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -116,6 +119,7 @@ describe('ethrResolver (alt-chains)', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -142,6 +146,7 @@ describe('ethrResolver (alt-chains)', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -175,6 +180,7 @@ describe('ethrResolver (alt-chains)', () => { }, ], authentication: [`${did}#controller`, `${did}#controllerKey`], + assertionMethod: [`${did}#controller`, `${did}#controllerKey`], }, }) }) diff --git a/src/__tests__/resolver.test.ts b/src/__tests__/resolver.test.ts index 54b60f3b..d98ff37b 100644 --- a/src/__tests__/resolver.test.ts +++ b/src/__tests__/resolver.test.ts @@ -66,6 +66,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -98,6 +99,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${pubdid}#controller`, `${pubdid}#controllerKey`], + assertionMethod: [`${pubdid}#controller`, `${pubdid}#controllerKey`], }, }) }) @@ -127,6 +129,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -151,6 +154,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${pubdid}#controller`], + assertionMethod: [`${pubdid}#controller`], }) expect(didDocument?.verificationMethod?.length).toBe(1) expect(didDocument?.authentication?.length).toBe(1) @@ -190,6 +194,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`, `${did}#delegate-1`], }, }) }) @@ -234,6 +239,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-2`], + assertionMethod: [`${did}#controller`, `${did}#delegate-1`, `${did}#delegate-2`], }, }) }) @@ -271,6 +277,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`, `${did}#delegate-1`], }, }) }) @@ -304,6 +311,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -342,6 +350,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`], }, }) }) @@ -386,6 +395,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`, `${did}#delegate-5`], }) }) @@ -434,6 +444,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`, `${did}#delegate-5`, `${did}#delegate-6`], }) }) @@ -488,6 +499,13 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [ + `${did}#controller`, + `${did}#delegate-4`, + `${did}#delegate-5`, + `${did}#delegate-6`, + `${did}#delegate-7`, + ], }) }) @@ -522,6 +540,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${keyAgrDid}#controller`], + assertionMethod: [`${keyAgrDid}#controller`, `${keyAgrDid}#delegate-1`], }) }) }) @@ -578,6 +597,13 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [ + `${did}#controller`, + `${did}#delegate-4`, + `${did}#delegate-5`, + `${did}#delegate-6`, + `${did}#delegate-7`, + ], service: [ { id: `${did}#service-1`, @@ -635,6 +661,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`, `${did}#delegate-6`, `${did}#delegate-7`], service: [ { id: `${did}#service-1`, @@ -680,6 +707,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`, `${did}#delegate-7`], service: [ { id: `${did}#service-1`, @@ -719,6 +747,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`], service: [ { id: `${did}#service-1`, @@ -759,6 +788,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`], }) }) }) @@ -810,6 +840,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`], service: [ { id: `${did}#service-4`, @@ -870,6 +901,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`], service: [ { id: `${did}#service-4`, @@ -936,6 +968,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-1`], + assertionMethod: [`${did}#controller`, `${did}#delegate-1`], }) }) @@ -981,6 +1014,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`, `${did}#delegate-1`], }, }) }) @@ -1008,6 +1042,7 @@ describe('ethrResolver', () => { id: did, verificationMethod: [], authentication: [], + assertionMethod: [], }, }) }) @@ -1039,6 +1074,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${virginDID}#controller`], + assertionMethod: [`${virginDID}#controller`], }, }) }) @@ -1076,6 +1112,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${modifiedDid}#controller`], + assertionMethod: [`${modifiedDid}#controller`, `${modifiedDid}#delegate-1`], }, }) }) @@ -1111,6 +1148,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-4`], + assertionMethod: [`${did}#controller`, `${did}#delegate-4`], }, }) }) @@ -1140,6 +1178,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -1169,6 +1208,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`], + assertionMethod: [`${did}#controller`], }, }) }) @@ -1199,6 +1239,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${deactivatedDid}#controller`], + assertionMethod: [`${deactivatedDid}#controller`], }, }) }) @@ -1239,6 +1280,7 @@ describe('ethrResolver', () => { }, ], authentication: [`${did}#controller`, `${did}#delegate-2`], + assertionMethod: [`${did}#controller`, `${did}#delegate-1`, `${did}#delegate-2`], }, }) }) diff --git a/src/resolver.ts b/src/resolver.ts index e64c60bf..0c25e7e9 100644 --- a/src/resolver.ts +++ b/src/resolver.ts @@ -127,6 +127,7 @@ export class EthrDidResolver { id: did, verificationMethod: [], authentication: [], + assertionMethod: [], } let controller = address @@ -272,14 +273,15 @@ export class EthrDidResolver { authentication.push(`${did}#controllerKey`) } - const doc: DIDDocument = { + const didDocument: DIDDocument = { ...baseDIDDocument, verificationMethod: publicKeys.concat(Object.values(pks)), authentication: authentication.concat(Object.values(auth)), } if (Object.values(services).length > 0) { - doc.service = Object.values(services) + didDocument.service = Object.values(services) } + didDocument.assertionMethod = [...(didDocument.verificationMethod?.map((pk) => pk.id) || [])] return deactivated ? { @@ -288,7 +290,7 @@ export class EthrDidResolver { versionId, nextVersionId, } - : { didDocument: doc, deactivated, versionId, nextVersionId } + : { didDocument, deactivated, versionId, nextVersionId } } async resolve( @@ -312,7 +314,6 @@ export class EthrDidResolver { const id = fullId[2] const networkId = !fullId[1] ? 'mainnet' : fullId[1].slice(0, -1) let blockTag: string | number = options.blockTag || 'latest' - // let versionAtMost: string | number = -1 if (typeof parsed.query === 'string') { const qParams = qs.decode(parsed.query) blockTag = typeof qParams['versionId'] === 'string' ? qParams['versionId'] : blockTag