From bf946756a3d0b55939fae2982acaaf958658b378 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Thu, 15 Dec 2022 13:28:08 -0500 Subject: [PATCH 01/12] Add did-method-web to bedrock-did-io. --- lib/config.js | 3 ++- lib/index.js | 5 ++++- package.json | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/lib/config.js b/lib/config.js index 254fffb..a45b7f5 100644 --- a/lib/config.js +++ b/lib/config.js @@ -18,7 +18,8 @@ cfg.methods = { v1: { // modes: live, test, dev mode: 'test', - } + }, + web: {} }; cfg.methodOverrides = { diff --git a/lib/index.js b/lib/index.js index 6e1b0fc..a3477d6 100644 --- a/lib/index.js +++ b/lib/index.js @@ -6,6 +6,7 @@ import * as Bls12381Multikey from '@digitalbazaar/bls12-381-multikey'; import * as didMethodKey from '@digitalbazaar/did-method-key'; import * as didVeresOne from 'did-veres-one'; import * as EcdsaMultikey from '@digitalbazaar/ecdsa-multikey'; +import * as didMethodWeb from '@digitalbazaar/did-method-web'; import {CachedResolver} from '@digitalbazaar/did-io'; import { Ed25519VerificationKey2020 @@ -44,7 +45,7 @@ bedrock.events.on('bedrock.init', () => { bedrock.events.on('bedrock.start', () => { const {config: {'did-io': cfg}} = bedrock; - const didKeyDriver = didMethodKey.driver(); + const didKeyDriver = didMethodKey.driver(cfg.methods.key); const {keyTypes} = cfg.methods.key; for(const keyType in keyTypes) { const handler = SUPPORTED_KEY_TYPES.get(keyType); @@ -59,6 +60,8 @@ bedrock.events.on('bedrock.start', () => { } // support did:key didIo.use(didKeyDriver); + // support did:web + didIo.use(didMethodWeb.driver(cfg.methods.web)); // support did:v1 const v1Driver = didVeresOne.driver(cfg.methods.v1); if(cfg.methodOverrides.v1.disableFetch) { diff --git a/package.json b/package.json index 431f0ca..d141f84 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "@digitalbazaar/did-method-key": "^5.0.0", "@digitalbazaar/ecdsa-multikey": "^1.1.1", "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", + "@digitalbazaar/did-method-web": "github:digitalbazaar/did-method-web#convert-key-to-web", "@digitalbazaar/lru-memoize": "^3.0.0", "did-veres-one": "^16.0.0" }, From cc804008e965483b08ed04372785a8a53beae7b7 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Tue, 23 Jan 2024 15:56:03 +0000 Subject: [PATCH 02/12] Use initial release of @digitalbazaar/did-method-web. --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d141f84..d06cfba 100644 --- a/package.json +++ b/package.json @@ -32,7 +32,7 @@ "@digitalbazaar/did-method-key": "^5.0.0", "@digitalbazaar/ecdsa-multikey": "^1.1.1", "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", - "@digitalbazaar/did-method-web": "github:digitalbazaar/did-method-web#convert-key-to-web", + "@digitalbazaar/did-method-web": "^1.0.0", "@digitalbazaar/lru-memoize": "^3.0.0", "did-veres-one": "^16.0.0" }, From a69cdba48fb3f8cb25ef2b0b07855f6d8753003a Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Tue, 23 Jan 2024 17:44:27 +0000 Subject: [PATCH 03/12] Add minor release CHANGELOG entry for did method web. --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54ebdac..acb8333 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # bedrock-did-io ChangeLog +## 10.3.0 - + +### Added +- Add `@digitalbazaar/did-method-web` to supported did methods. + ## 10.2.0 - 2024-01-16 ### Added From 9188736ad0378a838554a9f4ea87ddab785567e5 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Tue, 23 Jan 2024 18:07:25 +0000 Subject: [PATCH 04/12] Lint file alphabetize imports. --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index a3477d6..8dfc148 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,9 +4,9 @@ import * as bedrock from '@bedrock/core'; import * as Bls12381Multikey from '@digitalbazaar/bls12-381-multikey'; import * as didMethodKey from '@digitalbazaar/did-method-key'; +import * as didMethodWeb from '@digitalbazaar/did-method-web'; import * as didVeresOne from 'did-veres-one'; import * as EcdsaMultikey from '@digitalbazaar/ecdsa-multikey'; -import * as didMethodWeb from '@digitalbazaar/did-method-web'; import {CachedResolver} from '@digitalbazaar/did-io'; import { Ed25519VerificationKey2020 From 101c82fa11ef1fbcc687515588cb72719f2a5ba3 Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Wed, 24 Jan 2024 16:11:15 +0000 Subject: [PATCH 05/12] Alphabetize deps. --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d06cfba..04731dc 100644 --- a/package.json +++ b/package.json @@ -30,9 +30,9 @@ "@digitalbazaar/bls12-381-multikey": "^1.1.1", "@digitalbazaar/did-io": "^2.0.0", "@digitalbazaar/did-method-key": "^5.0.0", + "@digitalbazaar/did-method-web": "^1.0.0", "@digitalbazaar/ecdsa-multikey": "^1.1.1", "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", - "@digitalbazaar/did-method-web": "^1.0.0", "@digitalbazaar/lru-memoize": "^3.0.0", "did-veres-one": "^16.0.0" }, @@ -52,4 +52,4 @@ "engines": { "node": ">=16" } -} +} \ No newline at end of file From 392d6c6aff732d560b20132fba09292dee46011c Mon Sep 17 00:00:00 2001 From: Andrew Jones Date: Wed, 24 Jan 2024 16:12:15 +0000 Subject: [PATCH 06/12] Remove cfg.methods.key from didKeyDriver init. --- lib/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/index.js b/lib/index.js index 8dfc148..6a88494 100644 --- a/lib/index.js +++ b/lib/index.js @@ -45,7 +45,7 @@ bedrock.events.on('bedrock.init', () => { bedrock.events.on('bedrock.start', () => { const {config: {'did-io': cfg}} = bedrock; - const didKeyDriver = didMethodKey.driver(cfg.methods.key); + const didKeyDriver = didMethodKey.driver(); const {keyTypes} = cfg.methods.key; for(const keyType in keyTypes) { const handler = SUPPORTED_KEY_TYPES.get(keyType); From b63968a44b8cf610607d5883766108e274695316 Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Sun, 14 Apr 2024 17:54:24 -0400 Subject: [PATCH 07/12] Expect `node>=18`. --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 04731dc..0e07094 100644 --- a/package.json +++ b/package.json @@ -50,6 +50,6 @@ "jsdoc-to-markdown": "^8.0.0" }, "engines": { - "node": ">=16" + "node": ">=18" } -} \ No newline at end of file +} From eb9c498ee628f2887ae7fb4518edac9bbc0ae94c Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Sun, 14 Apr 2024 17:57:38 -0400 Subject: [PATCH 08/12] Update dependencies. --- package.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0e07094..0d123ad 100644 --- a/package.json +++ b/package.json @@ -27,13 +27,13 @@ }, "homepage": "https://github.com/digitalbazaar/bedrock-did-io", "dependencies": { - "@digitalbazaar/bls12-381-multikey": "^1.1.1", + "@digitalbazaar/bls12-381-multikey": "^1.3.0", "@digitalbazaar/did-io": "^2.0.0", - "@digitalbazaar/did-method-key": "^5.0.0", + "@digitalbazaar/did-method-key": "^5.2.0", "@digitalbazaar/did-method-web": "^1.0.0", - "@digitalbazaar/ecdsa-multikey": "^1.1.1", + "@digitalbazaar/ecdsa-multikey": "^1.7.0", "@digitalbazaar/ed25519-verification-key-2020": "^4.1.0", - "@digitalbazaar/lru-memoize": "^3.0.0", + "@digitalbazaar/lru-memoize": "^3.0.2", "did-veres-one": "^16.0.0" }, "peerDependencies": { @@ -46,7 +46,7 @@ "eslint": "^8.37.0", "eslint-config-digitalbazaar": "^5.0.1", "eslint-plugin-jsdoc": "^48.0.2", - "eslint-plugin-unicorn": "^50.0.1", + "eslint-plugin-unicorn": "^52.0.0", "jsdoc-to-markdown": "^8.0.0" }, "engines": { From 262be46a164f61a03996393109bb305cc53edfcf Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Sun, 14 Apr 2024 18:52:01 -0400 Subject: [PATCH 09/12] Enable configuration of `did:web` driver via bedrock config. --- CHANGELOG.md | 2 +- lib/config.js | 20 +++++++++++++++++++- lib/index.js | 24 +++++++++++++++++++----- 3 files changed, 39 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index acb8333..c112980 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # bedrock-did-io ChangeLog -## 10.3.0 - +## 10.3.0 - 2024-mm-dd ### Added - Add `@digitalbazaar/did-method-web` to supported did methods. diff --git a/lib/config.js b/lib/config.js index a45b7f5..7562416 100644 --- a/lib/config.js +++ b/lib/config.js @@ -19,7 +19,25 @@ cfg.methods = { // modes: live, test, dev mode: 'test', }, - web: {} + web: { + // supported key types + keyTypes: { + Bls12381G2: {}, + Ed25519: {}, + 'P-256': {}, + 'P-384': {} + }, + // driver-specific options + driver: { + // params for fetching DID documents + fetchOptions: { + // max size for DID doc responses (in bytes, ~16 KiB) + size: 16384, + // timeout in ms for fetching a DID doc + timeout: 5000 + } + } + } }; cfg.methodOverrides = { diff --git a/lib/index.js b/lib/index.js index 6a88494..ecb015f 100644 --- a/lib/index.js +++ b/lib/index.js @@ -45,12 +45,13 @@ bedrock.events.on('bedrock.init', () => { bedrock.events.on('bedrock.start', () => { const {config: {'did-io': cfg}} = bedrock; + + // support did:key const didKeyDriver = didMethodKey.driver(); - const {keyTypes} = cfg.methods.key; - for(const keyType in keyTypes) { + for(const keyType in cfg.methods.key.keyTypes) { const handler = SUPPORTED_KEY_TYPES.get(keyType); if(!handler) { - throw new Error(`Unsupported "keyType", "${keyType}".`); + throw new Error(`Unsupported did:key "keyType", "${keyType}".`); } const multibaseMultikeyHeader = SUPPORTED_BASE58_MULTIKEY_HEADERS.get(keyType); @@ -58,10 +59,23 @@ bedrock.events.on('bedrock.start', () => { multibaseMultikeyHeader, fromMultibase: handler.from }); } - // support did:key didIo.use(didKeyDriver); + // support did:web - didIo.use(didMethodWeb.driver(cfg.methods.web)); + const didWebDriver = didMethodWeb.driver(cfg.methods.web.driver); + for(const keyType in cfg.methods.web.keyTypes) { + const handler = SUPPORTED_KEY_TYPES.get(keyType); + if(!handler) { + throw new Error(`Unsupported did:web "keyType", "${keyType}".`); + } + const multibaseMultikeyHeader = + SUPPORTED_BASE58_MULTIKEY_HEADERS.get(keyType); + didWebDriver.use({ + multibaseMultikeyHeader, fromMultibase: handler.from + }); + } + didIo.use(didWebDriver); + // support did:v1 const v1Driver = didVeresOne.driver(cfg.methods.v1); if(cfg.methodOverrides.v1.disableFetch) { From 61d717923d0f9e51d8f7dc9a4db8d7742176e174 Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Sun, 14 Apr 2024 18:52:54 -0400 Subject: [PATCH 10/12] List `allowList` config option for `did:web`. --- lib/config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/lib/config.js b/lib/config.js index 7562416..d6527f1 100644 --- a/lib/config.js +++ b/lib/config.js @@ -29,6 +29,8 @@ cfg.methods = { }, // driver-specific options driver: { + // no allow list by default + allowList: [], // params for fetching DID documents fetchOptions: { // max size for DID doc responses (in bytes, ~16 KiB) From e3597b33f31a27a0e08d77b8fcb8af91bb3103ba Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Sun, 14 Apr 2024 19:03:47 -0400 Subject: [PATCH 11/12] Require `@bedrock/https-agent` peer dependency. --- CHANGELOG.md | 2 ++ lib/index.js | 7 ++++++- package.json | 3 ++- test/package.json | 1 + 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c112980..e1d3299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,8 @@ ### Added - Add `@digitalbazaar/did-method-web` to supported did methods. +- Use `@bedrock/https-agent@4` peer dependency to provide https-agent when + fetching `did:web` documents. ## 10.2.0 - 2024-01-16 diff --git a/lib/index.js b/lib/index.js index ecb015f..7833c5a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -11,6 +11,7 @@ import {CachedResolver} from '@digitalbazaar/did-io'; import { Ed25519VerificationKey2020 } from '@digitalbazaar/ed25519-verification-key-2020'; +import {httpsAgent} from '@bedrock/https-agent'; import {LruCache} from '@digitalbazaar/lru-memoize'; import './config.js'; @@ -62,7 +63,11 @@ bedrock.events.on('bedrock.start', () => { didIo.use(didKeyDriver); // support did:web - const didWebDriver = didMethodWeb.driver(cfg.methods.web.driver); + const didWebDriver = didMethodWeb.driver({ + ...cfg.methods.web.driver, + // always use bedrock agent + agent: httpsAgent + }); for(const keyType in cfg.methods.web.keyTypes) { const handler = SUPPORTED_KEY_TYPES.get(keyType); if(!handler) { diff --git a/package.json b/package.json index 0d123ad..ebfe42b 100644 --- a/package.json +++ b/package.json @@ -37,7 +37,8 @@ "did-veres-one": "^16.0.0" }, "peerDependencies": { - "@bedrock/core": "^6.0.0" + "@bedrock/core": "^6.0.0", + "@bedrock/https-agent": "^4.0.0" }, "directories": { "lib": "./lib" diff --git a/test/package.json b/test/package.json index cf24cb1..a04c3bc 100644 --- a/test/package.json +++ b/test/package.json @@ -12,6 +12,7 @@ "dependencies": { "@bedrock/core": "^6.0.0", "@bedrock/did-io": "file:..", + "@bedrock/https-agent": "^4.0.0", "@bedrock/test": "^8.0.0", "c8": "^7.11.0", "cross-env": "^7.0.3" From d02630aac6c466b814e1ce8f493cfe04b4fb77e4 Mon Sep 17 00:00:00 2001 From: Dave Longley Date: Sun, 14 Apr 2024 19:06:10 -0400 Subject: [PATCH 12/12] Try to fix codecov upload. --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 1b71871..568598c 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -61,7 +61,8 @@ jobs: cd test npm run coverage-ci - name: Upload coverage to Codecov - uses: codecov/codecov-action@v3 + uses: codecov/codecov-action@v4 with: file: ./test/coverage/lcov.info fail_ci_if_error: true + token: ${{ secrets.CODECOV_TOKEN }}