From 6209bc5ef6064ad78c988ac30fc4ca3f22d5ea3a Mon Sep 17 00:00:00 2001 From: Danny Browning Date: Fri, 6 Oct 2023 20:06:46 -0600 Subject: [PATCH] feat: Use threads for jws verification Exposes necessary functionality to use threads for jws verification. --- .github/workflows/build-docs.yml | 2 +- .github/workflows/build-test.yml | 4 +- .github/workflows/deploy-docs.yml | 2 +- packages/cacao/package.json | 2 +- packages/codecs/package.json | 4 +- packages/did-session/src/index.ts | 2 +- packages/did-session/src/sessionStore.ts | 2 +- packages/dids/src/did.ts | 303 ++++++++++++++--------- packages/siwx/package.json | 4 +- pnpm-lock.yaml | 279 ++++++++++++++++----- 10 files changed, 410 insertions(+), 194 deletions(-) diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 7934fa9a..e2c871c8 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -20,7 +20,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 20 cache: 'pnpm' - name: Install dependencies and build diff --git a/.github/workflows/build-test.yml b/.github/workflows/build-test.yml index 0d5e3541..ff043fe9 100644 --- a/.github/workflows/build-test.yml +++ b/.github/workflows/build-test.yml @@ -9,7 +9,7 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - node: ['16.x', '18.x', '20.x'] + node: ['20.x'] os: [ubuntu-latest, macOS-latest] steps: @@ -24,7 +24,7 @@ jobs: - name: Use Node ${{ matrix.node }} uses: actions/setup-node@v3 with: - node-version: ${{ matrix.node-version }} + node-version: ${{ matrix.node }} cache: 'pnpm' - name: Install dependencies and build diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index adbaa8b4..4fe3bdb7 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -20,7 +20,7 @@ jobs: - name: Setup node uses: actions/setup-node@v3 with: - node-version: 18 + node-version: 20 cache: 'pnpm' - name: Install dependencies and build diff --git a/packages/cacao/package.json b/packages/cacao/package.json index 721ad838..37a4ce66 100644 --- a/packages/cacao/package.json +++ b/packages/cacao/package.json @@ -52,7 +52,7 @@ }, "devDependencies": { "@types/luxon": "^3.3.0", - "@types/node": "^20.2.3", + "@types/node": "^20.8.0", "luxon": "^3.3.0" } } diff --git a/packages/codecs/package.json b/packages/codecs/package.json index fe129acb..d0d15074 100644 --- a/packages/codecs/package.json +++ b/packages/codecs/package.json @@ -13,7 +13,7 @@ "dist" ], "engines": { - "node": ">=14.14" + "node": ">=20.8" }, "sideEffects": false, "scripts": { @@ -45,7 +45,7 @@ }, "homepage": "https://github.com/ceramicnetwork/js-did#readme", "dependencies": { - "codeco": "^1.1.0", + "codeco": "^1.2.0", "multiformats": "^11.0.1", "uint8arrays": "^4.0.3" }, diff --git a/packages/did-session/src/index.ts b/packages/did-session/src/index.ts index b48d1a63..2f212ea2 100644 --- a/packages/did-session/src/index.ts +++ b/packages/did-session/src/index.ts @@ -287,7 +287,7 @@ export class DIDSession { */ static async hasSessionFor(account: AccountId, resources: Array): Promise { const store = await SessionStore.create() - const { cacao } = (await store.get(account)) || {} as { cacao: Cacao } + const { cacao } = (await store.get(account)) || ({} as { cacao: Cacao }) return cacao && cacaoContainsResources(cacao, resources) } diff --git a/packages/did-session/src/sessionStore.ts b/packages/did-session/src/sessionStore.ts index d71253a5..5aff5f6e 100644 --- a/packages/did-session/src/sessionStore.ts +++ b/packages/did-session/src/sessionStore.ts @@ -15,7 +15,7 @@ export class SessionStore { static async create(): Promise { if (typeof globalThis.indexedDB === 'undefined') { - throw new Error('SessionStore is only supported in the browser') + throw new Error('SessionStore is only supported in the browser') } const request = indexedDB.open('did-session', 1) request.onupgradeneeded = (event: IDBVersionChangeEvent) => { diff --git a/packages/dids/src/did.ts b/packages/dids/src/did.ts index 9939377b..1568dd06 100644 --- a/packages/dids/src/did.ts +++ b/packages/dids/src/did.ts @@ -5,7 +5,7 @@ import { RPCClient } from 'rpc-utils' import { CID } from 'multiformats/cid' import { CacaoBlock, Cacao, Verifiers } from '@didtools/cacao' import { getEIP191Verifier } from '@didtools/pkh-ethereum' -import type { DagJWS } from '@didtools/codecs' +import type { DagJWS, GeneralJWS } from '@didtools/codecs' import type { DIDProvider, DIDProviderClient } from './types.js' import { fromDagJWS, @@ -19,7 +19,7 @@ import { } from './utils.js' // Eth Verifier default for CACAO -const verifiers = { ...getEIP191Verifier() } +export const verifiers = { ...getEIP191Verifier() } export type AuthenticateOptions = { provider?: DIDProvider @@ -256,6 +256,25 @@ export class DID { return this._id } + /** + * Request a JWS from this did's client + * @param options + * @param payload + */ + async requestJWS>( + options: CreateJWSOptions, + payload: T + ): Promise { + if (this._client == null) throw new Error('No provider available') + if (this._id == null) throw new Error('DID is not authenticated') + const { jws } = await this._client.request('did_createJWS', { + did: this._id, + ...options, + payload, + }) + return jws + } + /** * Create a JWS encoded signature over the given payload. * Will be signed by the currently authenticated DID. @@ -267,29 +286,12 @@ export class DID { payload: T, options: CreateJWSOptions = {} ): Promise { - if (this._client == null) throw new Error('No provider available') - if (this._id == null) throw new Error('DID is not authenticated') - if (this._capability) { - const exp = this._capability.p.exp - if (exp && Date.parse(exp) < Date.now()) { - throw new Error('Capability is expired, cannot create a valid signature') - } - const cacaoBlock = await CacaoBlock.fromCacao(this._capability) - const capCID = CID.asCID(cacaoBlock.cid) - if (!capCID) { - throw new Error( - `Capability CID of the JWS cannot be set to the capability payload cid as they are incompatible` - ) - } - options.protected = options.protected || {} - options.protected.cap = `ipfs://${capCID?.toString()}` - } - const { jws } = await this._client.request('did_createJWS', { - did: this._id, - ...options, - payload, + return createJWSUsing({ + capability: this._capability, + payload: payload, + options: options, + request: this.requestJWS.bind(this), }) - return jws } /** @@ -303,24 +305,12 @@ export class DID { payload: Record, options: CreateJWSOptions = {} ): Promise { - const { cid, linkedBlock } = await encodePayload(payload) - const payloadCid = encodeBase64Url(cid.bytes) - Object.assign(options, { linkedBlock: encodeBase64(linkedBlock) }) - const jws = await this.createJWS(payloadCid, options) - - const compatibleCID = CID.asCID(cid) - if (!compatibleCID) { - throw new Error( - 'CID of the JWS cannot be set to the encoded payload cid as they are incompatible' - ) - } - jws.link = compatibleCID - - if (this._capability) { - const cacaoBlock = await CacaoBlock.fromCacao(this._capability) - return { jws, linkedBlock, cacaoBlock: cacaoBlock.bytes } - } - return { jws, linkedBlock } + return createDagJWSUsing({ + capability: this._capability, + payload: payload, + options: options, + request: this.requestJWS.bind(this), + }) } /** @@ -332,82 +322,11 @@ export class DID { * @returns Information about the signed JWS */ async verifyJWS(jws: string | DagJWS, options: VerifyJWSOptions = {}): Promise { - options = Object.assign({ verifiers }, options) - if (typeof jws !== 'string') jws = fromDagJWS(jws) - const kid = base64urlToJSON(jws.split('.')[0]).kid as string - if (!kid) throw new Error('No "kid" found in jws') - const didResolutionResult = await this.resolve(kid) - const timecheckEnabled = !options.disableTimecheck - if (timecheckEnabled) { - const nextUpdate = didResolutionResult.didDocumentMetadata?.nextUpdate - if (nextUpdate) { - // This version of the DID document has been revoked. Check if the JWS - // was signed before the revocation happened. - const phaseOutMS = options.revocationPhaseOutSecs - ? options.revocationPhaseOutSecs * 1000 - : 0 - const revocationTime = new Date(nextUpdate).valueOf() + phaseOutMS - const isEarlier = options.atTime && options.atTime.getTime() < revocationTime - const isLater = !isEarlier - if (isLater) { - // Do not allow using a key _after_ it is being revoked - throw new Error(`invalid_jws: signature authored with a revoked DID version: ${kid}`) - } - } - // Key used before `updated` date - const updated = didResolutionResult.didDocumentMetadata?.updated - if (updated && options.atTime && options.atTime.getTime() < new Date(updated).valueOf()) { - throw new Error(`invalid_jws: signature authored before creation of DID version: ${kid}`) - } - } - - const signerDid = didResolutionResult.didDocument?.id - if ( - options.issuer && - options.issuer === options.capability?.p.iss && - signerDid === options.capability.p.aud - ) { - if (!options.verifiers) throw new Error('Registered verifiers needed for CACAO') - await Cacao.verify(options.capability, { - disableExpirationCheck: options.disableTimecheck, - atTime: options.atTime ? options.atTime : undefined, - revocationPhaseOutSecs: options.revocationPhaseOutSecs, - verifiers: options.verifiers ?? {}, - }) - } else if (options.issuer && options.issuer !== signerDid) { - const issuerUrl = didWithTime(options.issuer, options.atTime) - const issuerResolution = await this.resolve(issuerUrl) - const controllerProperty = issuerResolution.didDocument?.controller - const controllers = extractControllers(controllerProperty) - - if ( - options.capability?.s && - options.capability.p.aud === signerDid && - controllers.includes(options.capability.p.iss) - ) { - await Cacao.verify(options.capability, { - atTime: options.atTime ? options.atTime : undefined, - revocationPhaseOutSecs: options.revocationPhaseOutSecs, - verifiers: options.verifiers ?? {}, - }) - } else { - const signerIsController = signerDid ? controllers.includes(signerDid) : false - if (!signerIsController) { - throw new Error(`invalid_jws: not a valid verificationMethod for issuer: ${kid}`) - } - } - } - - const publicKeys = didResolutionResult.didDocument?.verificationMethod || [] - // verifyJWS will throw an error if the signature is invalid - verifyJWS(jws, publicKeys) - let payload - try { - payload = base64urlToJSON(jws.split('.')[1]) - } catch (e) { - // If an error is thrown it means that the payload is a CID. - } - return { kid, payload, didResolutionResult } + return verifyJWSUsing({ + resolve: this.resolve.bind(this), + jws: jws, + options: options, + }) } /** @@ -485,3 +404,151 @@ export class DID { return result } } + +export type VerifyJWSParameters = { + resolve: (url: string) => Promise + jws: string | DagJWS + options?: VerifyJWSOptions +} + +export async function verifyJWSUsing(params: VerifyJWSParameters): Promise { + let jws = params.jws + let options = params.options + options = Object.assign({ verifiers }, options) + if (typeof jws !== 'string') jws = fromDagJWS(jws) + const kid = base64urlToJSON(jws.split('.')[0]).kid as string + if (!kid) throw new Error('No "kid" found in jws') + const didResolutionResult = await params.resolve(kid) + const timecheckEnabled = !options.disableTimecheck + if (timecheckEnabled) { + const nextUpdate = didResolutionResult.didDocumentMetadata?.nextUpdate + if (nextUpdate) { + // This version of the DID document has been revoked. Check if the JWS + // was signed before the revocation happened. + const phaseOutMS = options.revocationPhaseOutSecs ? options.revocationPhaseOutSecs * 1000 : 0 + const revocationTime = new Date(nextUpdate).valueOf() + phaseOutMS + const isEarlier = options.atTime && options.atTime.getTime() < revocationTime + const isLater = !isEarlier + if (isLater) { + // Do not allow using a key _after_ it is being revoked + throw new Error(`invalid_jws: signature authored with a revoked DID version: ${kid}`) + } + } + // Key used before `updated` date + const updated = didResolutionResult.didDocumentMetadata?.updated + if (updated && options.atTime && options.atTime.getTime() < new Date(updated).valueOf()) { + throw new Error(`invalid_jws: signature authored before creation of DID version: ${kid}`) + } + } + + const signerDid = didResolutionResult.didDocument?.id + if ( + options.issuer && + options.issuer === options.capability?.p.iss && + signerDid === options.capability.p.aud + ) { + if (!options.verifiers) throw new Error('Registered verifiers needed for CACAO') + await Cacao.verify(options.capability, { + disableExpirationCheck: options.disableTimecheck, + atTime: options.atTime ? options.atTime : undefined, + revocationPhaseOutSecs: options.revocationPhaseOutSecs, + verifiers: options.verifiers ?? {}, + }) + } else if (options.issuer && options.issuer !== signerDid) { + const issuerUrl = didWithTime(options.issuer, options.atTime) + const issuerResolution = await params.resolve(issuerUrl) + const controllerProperty = issuerResolution.didDocument?.controller + const controllers = extractControllers(controllerProperty) + + if ( + options.capability?.s && + options.capability.p.aud === signerDid && + controllers.includes(options.capability.p.iss) + ) { + await Cacao.verify(options.capability, { + atTime: options.atTime ? options.atTime : undefined, + revocationPhaseOutSecs: options.revocationPhaseOutSecs, + verifiers: options.verifiers ?? {}, + }) + } else { + const signerIsController = signerDid ? controllers.includes(signerDid) : false + if (!signerIsController) { + throw new Error(`invalid_jws: not a valid verificationMethod for issuer: ${kid}`) + } + } + } + + const publicKeys = didResolutionResult.didDocument?.verificationMethod || [] + // verifyJWS will throw an error if the signature is invalid + verifyJWS(jws, publicKeys) + let payload + try { + payload = base64urlToJSON(jws.split('.')[1]) + } catch (e) { + // If an error is thrown it means that the payload is a CID. + } + return { kid, payload, didResolutionResult } +} + +export type CreateDagJWSUsingParameters = { + capability?: Cacao + payload: Record + options: CreateJWSOptions + request: (options: CreateJWSOptions, payload: string) => Promise +} + +export async function createDagJWSUsing( + params: CreateDagJWSUsingParameters +): Promise { + const { cid, linkedBlock } = await encodePayload(params.payload) + const payloadCid = encodeBase64Url(cid.bytes) + Object.assign(params.options, { linkedBlock: encodeBase64(linkedBlock) }) + const jws = await createJWSUsing({ + capability: params.capability, + payload: payloadCid, + options: params.options, + request: params.request, + }) + + const compatibleCID = CID.asCID(cid) + if (!compatibleCID) { + throw new Error( + 'CID of the JWS cannot be set to the encoded payload cid as they are incompatible' + ) + } + jws.link = compatibleCID + + if (params.capability) { + const cacaoBlock = await CacaoBlock.fromCacao(params.capability) + return { jws, linkedBlock, cacaoBlock: cacaoBlock.bytes } + } + return { jws, linkedBlock } +} + +export type CreateJWSUsingParameters> = { + capability?: Cacao + payload: T + options: CreateJWSOptions + request: (options: CreateJWSOptions, payload: T) => Promise +} + +export async function createJWSUsing>( + params: CreateJWSUsingParameters +): Promise { + if (params.capability) { + const exp = params.capability.p.exp + if (exp && Date.parse(exp) < Date.now()) { + throw new Error('Capability is expired, cannot create a valid signature') + } + const cacaoBlock = await CacaoBlock.fromCacao(params.capability) + const capCID = CID.asCID(cacaoBlock.cid) + if (!capCID) { + throw new Error( + `Capability CID of the JWS cannot be set to the capability payload cid as they are incompatible` + ) + } + params.options.protected = params.options.protected || {} + params.options.protected.cap = `ipfs://${capCID?.toString()}` + } + return await params.request(params.options, params.payload) +} diff --git a/packages/siwx/package.json b/packages/siwx/package.json index 81c3e1d2..4c708c2d 100644 --- a/packages/siwx/package.json +++ b/packages/siwx/package.json @@ -50,10 +50,10 @@ }, "homepage": "https://github.com/ceramicnetwork/js-did#readme", "dependencies": { - "codeco": "^1.1.0" + "codeco": "^1.2.0" }, "devDependencies": { - "@types/node": "^20.2.3", + "@types/node": "^20.8.0", "ts-essentials": "^9.3.2", "tsm": "^2.3.0", "uvu": "^0.5.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ba25ab8..6845f748 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,4 +1,4 @@ -lockfileVersion: '6.1' +lockfileVersion: '6.0' settings: autoInstallPeers: true @@ -91,8 +91,8 @@ importers: specifier: ^3.3.0 version: 3.3.0 '@types/node': - specifier: ^20.2.3 - version: 20.2.3 + specifier: ^20.8.0 + version: 20.8.0 luxon: specifier: ^3.3.0 version: 3.3.0 @@ -100,8 +100,8 @@ importers: packages/codecs: dependencies: codeco: - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.2.0 + version: 1.2.0 multiformats: specifier: ^11.0.1 version: 11.0.2 @@ -199,7 +199,7 @@ importers: version: 1.0.2 codeco: specifier: ^1.1.0 - version: 1.1.0 + version: 1.2.0 dag-jose-utils: specifier: ^3.0.0 version: 3.0.0 @@ -226,6 +226,28 @@ importers: specifier: ^5.5.2 version: 5.5.2 + packages/dids-threads: + dependencies: + did-jwt: + specifier: ^7.4.0 + version: 7.4.0 + did-resolver: + specifier: ^4.1.0 + version: 4.1.0 + dids: + specifier: file:../dids + version: file:packages/dids + threads-esm: + specifier: ^2.0.0 + version: 2.0.0 + devDependencies: + key-did-provider-ed25519: + specifier: workspace:^3.0.1 + version: link:../key-did-provider-ed25519 + key-did-resolver: + specifier: workspace:^3.0.0 + version: link:../key-did-resolver + packages/integration: devDependencies: '@didtools/cacao': @@ -509,12 +531,12 @@ importers: packages/siwx: dependencies: codeco: - specifier: ^1.1.0 - version: 1.1.0 + specifier: ^1.2.0 + version: 1.2.0 devDependencies: '@types/node': - specifier: ^20.2.3 - version: 20.2.3 + specifier: ^20.8.0 + version: 20.8.0 ts-essentials: specifier: ^9.3.2 version: 9.3.2(typescript@5.0.4) @@ -2218,7 +2240,7 @@ packages: resolution: {integrity: sha512-wgzDpenoxxOObGYDMeEwLJ1htz0FfX8e5sJZTC6Qn9HC4EF9QZ6kGtayB3BRUNlXpQTkJPdSJAhe09/T9EOK5g==} dependencies: '@ceramicnetwork/streamid': 2.14.0 - codeco: 1.1.0 + codeco: 1.2.0 multiformats: 11.0.2 uint8arrays: 4.0.3 dev: false @@ -4412,7 +4434,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 chalk: 4.1.2 jest-message-util: 29.5.0 jest-util: 29.5.0 @@ -4433,14 +4455,14 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.5.0 - jest-config: 29.5.0(@types/node@20.2.3) + jest-config: 29.5.0(@types/node@20.8.4) jest-haste-map: 29.5.0 jest-message-util: 29.5.0 jest-regex-util: 29.4.3 @@ -4474,7 +4496,7 @@ packages: dependencies: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 jest-mock: 29.5.0 /@jest/expect-utils@29.5.0: @@ -4498,7 +4520,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@sinonjs/fake-timers': 10.1.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 jest-message-util: 29.5.0 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -4529,7 +4551,7 @@ packages: '@jest/transform': 29.5.0 '@jest/types': 29.5.0 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.2.3 + '@types/node': 20.8.4 chalk: 4.1.2 collect-v8-coverage: 1.0.1 exit: 0.1.2 @@ -4614,7 +4636,7 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.2.3 + '@types/node': 20.8.4 '@types/yargs': 16.0.5 chalk: 4.1.2 dev: true @@ -4626,7 +4648,7 @@ packages: '@jest/schemas': 29.4.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.2.3 + '@types/node': 20.8.4 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -5583,6 +5605,10 @@ packages: murmurhash3js-revisited: 3.0.0 dev: false + /@noble/ciphers@0.3.0: + resolution: {integrity: sha512-ldbrnOjmNRwFdXcTM6uXDcxpMIFrbzAWNnpBPp4oTJTFF0XByGD6vf45WrehZGXRQTRVV+Zm8YP+EgEf+e4cWA==} + dev: false + /@noble/curves@1.0.0: resolution: {integrity: sha512-2upgEu0iLiDVDZkNLeFV2+ht0BAVgQnEmCk6JsOch9Rp8xfkMCbvbAZlA2pBHQc73dbl+vFOXfqkf4uemdn0bw==} dependencies: @@ -5965,6 +5991,10 @@ packages: /@scure/base@1.1.1: resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} + dev: false + /@scure/bip39@1.1.0: resolution: {integrity: sha512-pwrPOS16VeTKg98dYXQyIjJEcWfz7/1YJIwxUEPFfQPtc86Ym/1sVgQ2RLoD43AazMk2l/unK4ITySSpW2+82w==} dependencies: @@ -6761,38 +6791,38 @@ packages: /@types/bn.js@4.11.6: resolution: {integrity: sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/bn.js@5.1.1: resolution: {integrity: sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/bonjour@3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/bs58check@2.1.0: resolution: {integrity: sha512-OxsysnJQh82vy9DRbOcw9m2j/WiyqZLn0YBhKxdQ+aCwoHj+tWzyCgpwAkr79IfDXZKxc6h7k89T9pwS78CqTQ==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 /@types/cacheable-request@6.0.3: resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} dependencies: '@types/http-cache-semantics': 4.0.1 '@types/keyv': 3.1.4 - '@types/node': 20.2.3 + '@types/node': 20.8.4 '@types/responselike': 1.0.0 dev: true @@ -6800,25 +6830,25 @@ packages: resolution: {integrity: sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==} dependencies: '@types/express-serve-static-core': 4.17.35 - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/create-hash@1.2.2: resolution: {integrity: sha512-Fg8/kfMJObbETFU/Tn+Y0jieYewryLrbKwLCEIwPyklZZVY2qB+64KFjhplGSw+cseZosfFXctXO+PyIYD8iZQ==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: true /@types/dns-packet@5.2.4: resolution: {integrity: sha512-OAruArypdNxR/tzbmrtoyEuXeNTLaZCpO19BXaNC10T5ACIbvjmvhmV2RDEy2eLc3w8IjK7SY3cvUCcAW+sfoQ==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/eslint-scope@3.7.4: @@ -6839,7 +6869,7 @@ packages: /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -6857,7 +6887,7 @@ packages: /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 /@types/hast@2.3.4: resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} @@ -6879,7 +6909,7 @@ packages: /@types/http-proxy@1.17.11: resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/is-ci@3.0.0: @@ -6911,7 +6941,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -6922,7 +6952,7 @@ packages: /@types/keyv@3.1.4: resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 /@types/long@4.0.2: resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} @@ -6958,7 +6988,7 @@ packages: resolution: {integrity: sha512-A2PmB8MRcNVEkw6wzGT5rtBHqyHOVjiRMkJH+zpJKXipSi+GGkHg6JjNFApDiYK9WefJqkVG0taln1VMl4TGfw==} dependencies: '@types/dns-packet': 5.2.4 - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/node@10.12.18: @@ -6980,8 +7010,14 @@ packages: /@types/node@18.16.18: resolution: {integrity: sha512-/aNaQZD0+iSBAGnvvN2Cx92HqE5sZCPZtx2TsK+4nvV23fFe09jVDvpArXr2j9DnYlzuU9WuoykDDc6wqvpNcw==} - /@types/node@20.2.3: - resolution: {integrity: sha512-pg9d0yC4rVNWQzX8U7xb4olIOFuuVL9za3bzMT2pu2SU0SNEi66i2qrvhE2qt0HvkhuCaWJu7pLNOt/Pj8BIrw==} + /@types/node@20.8.0: + resolution: {integrity: sha512-LzcWltT83s1bthcvjBmiBvGJiiUe84NWRHkw+ZV6Fr41z2FbIzvc815dk2nQ3RAKMuN2fkenM/z3Xv2QzEpYxQ==} + dev: true + + /@types/node@20.8.4: + resolution: {integrity: sha512-ZVPnqU58giiCjSxjVUESDtdPk4QR5WQhhINbc9UBrKLU68MX5BF6kbQzTrkwbolyr0X8ChBpXfavr5mZFKZQ5A==} + dependencies: + undici-types: 5.25.3 /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -7039,7 +7075,7 @@ packages: /@types/responselike@1.0.0: resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 /@types/retry@0.12.0: resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -7052,7 +7088,7 @@ packages: /@types/sax@1.2.4: resolution: {integrity: sha512-pSAff4IAxJjfAXUG6tFkO7dsSbTmf8CtUpfhhZ5VhkRpC4628tJhh3+V6H1E+/Gs9piSzYKT5yzHO5M4GG9jkw==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/scheduler@0.16.3: @@ -7070,7 +7106,7 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/serve-index@1.9.1: @@ -7083,13 +7119,13 @@ packages: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/stack-utils@2.0.1: @@ -7106,13 +7142,13 @@ packages: /@types/varint@6.0.1: resolution: {integrity: sha512-fQdOiZpDMBvaEdl12P1x7xlTPRAtd7qUUtVaWgkCy8DC//wCv19nqFFtrnR3y/ac6VFY0UUvYuQqfKzZTSE26w==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: true /@types/ws@8.5.5: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 dev: false /@types/yargs-parser@21.0.0: @@ -8356,7 +8392,6 @@ packages: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} dependencies: balanced-match: 1.0.2 - dev: true /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} @@ -8858,8 +8893,8 @@ packages: engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} dev: true - /codeco@1.1.0: - resolution: {integrity: sha512-tvXEzO5nJMc7zDOATeytDprWSzSGQ+m39pzkebF+5Wdjp28AsIMsnLbbasB/NRxC/99qzPKWt84HRaQJPBwG2Q==} + /codeco@1.2.0: + resolution: {integrity: sha512-SHTBW7QsiDtHGqEyhX10gZesmWlWV00gXteFyU2xLqyZmy658/+HlPyXG5EvY05+csQNWjBIfGg2mZrklR1RtQ==} dev: false /collapse-white-space@1.0.6: @@ -9740,6 +9775,32 @@ packages: multiformats: 11.0.2 uint8arrays: 4.0.3 + /did-jwt@7.4.0: + resolution: {integrity: sha512-mFuX8POUs04E9jUk5n/xh3J6qtcTGj5SY+COpuCE5CVk7Y7hiT3IvvxzecSbAIWftVnj56t/aMrNmi/B8fzqnA==} + dependencies: + '@noble/ciphers': 0.3.0 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/base': 1.1.3 + canonicalize: 2.0.0 + did-resolver: 4.1.0 + multiformats: 12.1.2 + uint8arrays: 4.0.3 + dev: false + + /did-jwt@7.4.2: + resolution: {integrity: sha512-bdMVrUKD8wBiYihrxm5Bso33vYuw5DHxxN6y+IFSpHQpYQF16nuW6T8+FCrVkS5gDYE6jFZmnkqjJwycT4K7AA==} + dependencies: + '@noble/ciphers': 0.3.0 + '@noble/curves': 1.1.0 + '@noble/hashes': 1.3.1 + '@scure/base': 1.1.3 + canonicalize: 2.0.0 + did-resolver: 4.1.0 + multiformats: 12.1.2 + uint8arrays: 4.0.3 + dev: false + /did-resolver@4.1.0: resolution: {integrity: sha512-S6fWHvCXkZg2IhS4RcVHxwuyVejPR7c+a4Go0xbQ9ps5kILa8viiYQgrM4gfTyeTjJ0ekgJH9gk/BawTpmkbZA==} @@ -9751,7 +9812,7 @@ packages: '@didtools/pkh-ethereum': 0.3.0 '@stablelib/random': 1.0.2 dag-jose-utils: 3.0.0 - did-jwt: 7.2.0 + did-jwt: 7.4.2 did-resolver: 4.1.0 multiformats: 11.0.2 rpc-utils: 0.6.2 @@ -10694,7 +10755,7 @@ packages: resolution: {integrity: sha512-EzV94NYKoO09GLXGjXj9JIlXijVck4ONSr5wiCWDvhsvj5jxSrzTmRU/9C1DyB6uToszLs8aifA6NQ7lEQdvFw==} engines: {node: '>= 0.8'} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 require-like: 0.1.2 dev: false @@ -11387,6 +11448,16 @@ packages: once: 1.4.0 path-is-absolute: 1.0.1 + /glob@9.3.5: + resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + fs.realpath: 1.0.0 + minimatch: 8.0.4 + minipass: 4.2.8 + path-scurry: 1.10.1 + dev: false + /global-dirs@3.0.1: resolution: {integrity: sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA==} engines: {node: '>=10'} @@ -13228,7 +13299,7 @@ packages: '@jest/expect': 29.5.0 '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -13265,7 +13336,7 @@ packages: exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 29.5.0(@types/node@20.2.3) + jest-config: 29.5.0(@types/node@20.8.4) jest-util: 29.5.0 jest-validate: 29.5.0 prompts: 2.4.2 @@ -13276,7 +13347,7 @@ packages: - ts-node dev: true - /jest-config@29.5.0(@types/node@20.2.3): + /jest-config@29.5.0(@types/node@20.8.4): resolution: {integrity: sha512-kvDUKBnNJPNBmFFOhDbm59iu1Fii1Q6SxyhXfvylq3UTHbg6o7j/g8k2dZyXWLvfdKB1vAPxNZnMgtKJcmu3kA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -13291,7 +13362,7 @@ packages: '@babel/core': 7.22.5 '@jest/test-sequencer': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 babel-jest: 29.5.0(@babel/core@7.22.5) chalk: 4.1.2 ci-info: 3.8.0 @@ -13355,7 +13426,7 @@ packages: '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 '@types/jsdom': 20.0.1 - '@types/node': 20.2.3 + '@types/node': 20.8.4 jest-mock: 29.5.0 jest-util: 29.5.0 jsdom: 20.0.3 @@ -13372,7 +13443,7 @@ packages: '@jest/environment': 29.5.0 '@jest/fake-timers': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 jest-mock: 29.5.0 jest-util: 29.5.0 @@ -13386,7 +13457,7 @@ packages: dependencies: '@jest/types': 29.5.0 '@types/graceful-fs': 4.1.6 - '@types/node': 20.2.3 + '@types/node': 20.8.4 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -13434,7 +13505,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 jest-util: 29.5.0 /jest-pnp-resolver@1.2.3(jest-resolve@29.5.0): @@ -13487,7 +13558,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -13518,7 +13589,7 @@ packages: '@jest/test-result': 29.5.0 '@jest/transform': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.1 @@ -13572,7 +13643,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -13596,7 +13667,7 @@ packages: dependencies: '@jest/test-result': 29.5.0 '@jest/types': 29.5.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -13608,7 +13679,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -13616,7 +13687,7 @@ packages: resolution: {integrity: sha512-NcrQnevGoSp4b5kg+akIpthoAFHxPBcb5P6mYPY0fUNT+sSvmtu6jlkEle3anczUKIKEbMxFimk9oTP/tpIPgA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.2.3 + '@types/node': 20.8.4 jest-util: 29.5.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -14281,6 +14352,11 @@ packages: resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} engines: {node: '>=8'} + /lru-cache@10.0.1: + resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} + engines: {node: 14 || >=16.14} + dev: false + /lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} dependencies: @@ -14570,6 +14646,13 @@ packages: dependencies: brace-expansion: 1.1.11 + /minimatch@8.0.4: + resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: false + /minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -14645,6 +14728,11 @@ packages: yallist: 4.0.0 dev: false + /minipass@4.2.8: + resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} + engines: {node: '>=8'} + dev: false + /minipass@5.0.0: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} @@ -14705,6 +14793,12 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: false + /msg-facade@1.0.0: + resolution: {integrity: sha512-JC7t4Kirb31XNl4Auc5sL0/tOYPBoEf3SKW7HOcfEpr4+XIMwBl6uRmU2Bfb2kBO8SWej06BA1q31DwIlJ38tQ==} + dependencies: + swiss-ak: 1.23.0 + dev: false + /multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true @@ -14717,6 +14811,11 @@ packages: resolution: {integrity: sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} + /multiformats@12.1.2: + resolution: {integrity: sha512-6mRIsrZXyw5xNPO31IGBMmxgDXBSgCGDsBAtazkZ02ip4hMwZNrQvfxXZtytRoBSWuzSq5f9VmMnXj76fIz5FQ==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dev: false + /multiformats@9.9.0: resolution: {integrity: sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg==} @@ -15416,6 +15515,14 @@ packages: /path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + /path-scurry@1.10.1: + resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + lru-cache: 10.0.1 + minipass: 5.0.0 + dev: false + /path-to-regexp@0.1.7: resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} dev: false @@ -16167,7 +16274,7 @@ packages: '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 '@types/long': 4.0.2 - '@types/node': 20.2.3 + '@types/node': 20.8.4 long: 4.0.0 dev: false @@ -16186,7 +16293,7 @@ packages: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.2.3 + '@types/node': 20.8.4 long: 5.2.3 dev: false @@ -17862,6 +17969,21 @@ packages: stable: 0.1.8 dev: false + /swiss-ak@1.23.0: + resolution: {integrity: sha512-8tRXmy7b1mLrTAmqZR6tAQ1d0WXHA3WY/1MzzfWK9neAVNmpJGYrrLTR6TVT2C6GIy9KkeXnKGvPCPCVz1X+yg==} + dependencies: + swiss-docs: 0.2.0 + dev: false + + /swiss-docs@0.2.0: + resolution: {integrity: sha512-F+M7WaQBxsiAQkthW5/oct6LXnyqNIwzEK5Wge3KjjtlrjWcNIBY667Q+chx5FWICVr6Jhin/a4YyNXAFYeglA==} + hasBin: true + dependencies: + glob: 9.3.5 + minimist: 1.2.8 + swiss-ak: 1.23.0 + dev: false + /symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} dev: true @@ -17952,6 +18074,12 @@ packages: /text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + /threads-esm@2.0.0: + resolution: {integrity: sha512-WDMK+aVK7ONw3731o9zhlRY/Vo7c5F/t9dS2uo14FLksMwrqBMVCF/FoWIRtUsf5Ee1IHTJUuWFZigpYvQPzew==} + dependencies: + msg-facade: 1.0.0 + dev: false + /through@2.3.8: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} @@ -18399,6 +18527,9 @@ packages: which-boxed-primitive: 1.0.2 dev: true + /undici-types@5.25.3: + resolution: {integrity: sha512-Ga1jfYwRn7+cP9v8auvEXN1rX3sWqlayd4HP7OKk4mZWylEmu3KzXDUGrQUN6Ol7qo1gPvB2e5gX6udnyEPgdA==} + /undici@5.22.1: resolution: {integrity: sha512-Ji2IJhFXZY0x/0tVBXeQwgPlLWw13GVzpsWPQ3rV50IFMMof2I55PZZxtm4P6iNq+L5znYN9nSTAq0ZyE6lSJw==} engines: {node: '>=14.0'} @@ -19379,3 +19510,21 @@ packages: /zwitch@1.0.5: resolution: {integrity: sha512-V50KMwwzqJV0NpZIZFwfOD5/lyny3WlSzRiXgA0G7VUnRlqttta1L6UQIHzd6EuBY/cHGfwTIck7w1yH6Q5zUw==} dev: false + + file:packages/dids: + resolution: {directory: packages/dids, type: directory} + name: dids + engines: {node: '>=14.14'} + dependencies: + '@didtools/cacao': link:packages/cacao + '@didtools/codecs': link:packages/codecs + '@didtools/pkh-ethereum': link:packages/pkh-ethereum + '@stablelib/random': 1.0.2 + codeco: 1.2.0 + dag-jose-utils: 3.0.0 + did-jwt: 7.4.2 + did-resolver: 4.1.0 + multiformats: 11.0.2 + rpc-utils: 0.6.2 + uint8arrays: 4.0.3 + dev: false