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 }} diff --git a/CHANGELOG.md b/CHANGELOG.md index 54ebdac..e1d3299 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # bedrock-did-io ChangeLog +## 10.3.0 - 2024-mm-dd + +### 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 ### Added diff --git a/lib/config.js b/lib/config.js index 254fffb..d6527f1 100644 --- a/lib/config.js +++ b/lib/config.js @@ -18,6 +18,27 @@ cfg.methods = { v1: { // modes: live, test, dev mode: 'test', + }, + web: { + // supported key types + keyTypes: { + Bls12381G2: {}, + Ed25519: {}, + 'P-256': {}, + 'P-384': {} + }, + // 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) + size: 16384, + // timeout in ms for fetching a DID doc + timeout: 5000 + } + } } }; diff --git a/lib/index.js b/lib/index.js index 6e1b0fc..7833c5a 100644 --- a/lib/index.js +++ b/lib/index.js @@ -4,12 +4,14 @@ 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 {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'; @@ -44,12 +46,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); @@ -57,8 +60,27 @@ bedrock.events.on('bedrock.start', () => { multibaseMultikeyHeader, fromMultibase: handler.from }); } - // support did:key didIo.use(didKeyDriver); + + // support did:web + 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) { + 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) { diff --git a/package.json b/package.json index 431f0ca..ebfe42b 100644 --- a/package.json +++ b/package.json @@ -27,16 +27,18 @@ }, "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/ecdsa-multikey": "^1.1.1", + "@digitalbazaar/did-method-key": "^5.2.0", + "@digitalbazaar/did-method-web": "^1.0.0", + "@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": { - "@bedrock/core": "^6.0.0" + "@bedrock/core": "^6.0.0", + "@bedrock/https-agent": "^4.0.0" }, "directories": { "lib": "./lib" @@ -45,10 +47,10 @@ "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": { - "node": ">=16" + "node": ">=18" } } 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"