From a7cf5cd23f39321ecb7c35589723a5d23114d460 Mon Sep 17 00:00:00 2001 From: Niels Klomp Date: Mon, 31 Jul 2023 01:34:34 +0200 Subject: [PATCH] chore: update deps and VC API readme --- packages/express-support/src/functions.ts | 42 +- packages/oid4vci-issuer-rest-api/package.json | 8 +- packages/oid4vci-issuer-store/package.json | 2 +- packages/oid4vci-issuer/package.json | 2 +- packages/presentation-exchange/package.json | 2 +- packages/siopv2-oid4vp-op-auth/package.json | 2 +- packages/siopv2-oid4vp-rp-auth/package.json | 2 +- .../siopv2-oid4vp-rp-rest-api/package.json | 2 +- packages/uni-resolver-registrar-api/README.md | 112 +++-- .../uni-resolver-registrar-api/package.json | 10 +- .../src/api-functions.ts | 396 +++++++++--------- packages/vc-handler-ld-local/package.json | 12 +- packages/w3c-vc-api/README.md | 202 +++++++-- packages/w3c-vc-api/__tests__/agent.ts | 1 + packages/w3c-vc-api/package.json | 4 +- packages/w3c-vc-api/src/types.ts | 4 +- pnpm-lock.yaml | 192 ++++----- 17 files changed, 572 insertions(+), 423 deletions(-) diff --git a/packages/express-support/src/functions.ts b/packages/express-support/src/functions.ts index 62fd2af5c..5eb95bce0 100644 --- a/packages/express-support/src/functions.ts +++ b/packages/express-support/src/functions.ts @@ -1,31 +1,31 @@ -import express, {NextFunction} from 'express' +import express, { NextFunction } from 'express' import process from 'process' export function env(key?: string, prefix?: string): string | undefined { - if (!key) { - return - } - return process.env[`${prefix ? prefix.trim() : ''}${key}`] + if (!key) { + return + } + return process.env[`${prefix ? prefix.trim() : ''}${key}`] } export function sendErrorResponse(response: express.Response, statusCode: number, message: string | object, error?: Error) { - console.log(message) - if (error) { - console.log(error) - } - response.statusCode = statusCode - if (typeof message === 'string' && !message.startsWith('{')) { - message = {error: message} - } - if (typeof message === 'string' && message.startsWith('{')) { - return response.status(statusCode).end(message) - } - return response.status(statusCode).json(message) + console.log(message) + if (error) { + console.log(error) + } + response.statusCode = statusCode + if (typeof message === 'string' && !message.startsWith('{')) { + message = { error: message } + } + if (typeof message === 'string' && message.startsWith('{')) { + return response.status(statusCode).end(message) + } + return response.status(statusCode).json(message) } export const jsonErrorHandler = (err: any, req: express.Request, res: express.Response, next: NextFunction) => { - if (res.headersSent) { - return next(err) - } - return sendErrorResponse(res, 500, err.message, err) + if (res.headersSent) { + return next(err) + } + return sendErrorResponse(res, 500, err.message, err) } diff --git a/packages/oid4vci-issuer-rest-api/package.json b/packages/oid4vci-issuer-rest-api/package.json index 8da134967..f879d2e10 100644 --- a/packages/oid4vci-issuer-rest-api/package.json +++ b/packages/oid4vci-issuer-rest-api/package.json @@ -35,10 +35,10 @@ "@sphereon/did-uni-client": "^0.6.0", "@sphereon/pex": "^2.0.1", "@sphereon/pex-models": "^2.0.2", - "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.key-manager": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.key-utils": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.kms-local": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.13.0", + "@sphereon/ssi-sdk-ext.key-manager": "0.13.0", + "@sphereon/ssi-sdk-ext.key-utils": "0.13.0", + "@sphereon/ssi-sdk-ext.kms-local": "0.13.0", "@sphereon/ssi-sdk.data-store": "workspace:*", "@sphereon/ssi-sdk.vc-handler-ld-local": "workspace:*", "@types/body-parser": "^1.19.2", diff --git a/packages/oid4vci-issuer-store/package.json b/packages/oid4vci-issuer-store/package.json index 062291e55..93fb5516f 100644 --- a/packages/oid4vci-issuer-store/package.json +++ b/packages/oid4vci-issuer-store/package.json @@ -15,7 +15,7 @@ }, "dependencies": { "@sphereon/oid4vci-common": "0.6.0", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", "@sphereon/ssi-sdk.kv-store-temp": "workspace:*", "@types/uuid": "^9.0.1", "@veramo/core": "4.2.0", diff --git a/packages/oid4vci-issuer/package.json b/packages/oid4vci-issuer/package.json index 79aefd75e..1c703f45e 100644 --- a/packages/oid4vci-issuer/package.json +++ b/packages/oid4vci-issuer/package.json @@ -16,7 +16,7 @@ "dependencies": { "@sphereon/oid4vci-common": "0.6.0", "@sphereon/oid4vci-issuer": "0.6.0", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", "@sphereon/ssi-sdk.core": "workspace:*", "@sphereon/ssi-sdk.kv-store-temp": "workspace:*", "@sphereon/ssi-sdk.oid4vci-issuer-store": "workspace:*", diff --git a/packages/presentation-exchange/package.json b/packages/presentation-exchange/package.json index d182f72c1..b0398961c 100644 --- a/packages/presentation-exchange/package.json +++ b/packages/presentation-exchange/package.json @@ -16,7 +16,7 @@ "dependencies": { "@sphereon/pex": "2.0.1", "@sphereon/pex-models": "^2.0.2", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", "@sphereon/ssi-sdk.kv-store-temp": "workspace:*", "@sphereon/ssi-types": "workspace:*", "@veramo/core": "4.2.0" diff --git a/packages/siopv2-oid4vp-op-auth/package.json b/packages/siopv2-oid4vp-op-auth/package.json index 1b2031ef0..fca8f8fad 100644 --- a/packages/siopv2-oid4vp-op-auth/package.json +++ b/packages/siopv2-oid4vp-op-auth/package.json @@ -17,7 +17,7 @@ "@sphereon/did-auth-siop": "0.3.2-unstable.6", "@sphereon/pex": "2.0.1", "@sphereon/pex-models": "2.0.2", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", "@sphereon/ssi-sdk.core": "workspace:*", "@sphereon/ssi-sdk.presentation-exchange": "workspace:*", "@sphereon/ssi-types": "workspace:*", diff --git a/packages/siopv2-oid4vp-rp-auth/package.json b/packages/siopv2-oid4vp-rp-auth/package.json index b11a8563c..42c31c1e5 100644 --- a/packages/siopv2-oid4vp-rp-auth/package.json +++ b/packages/siopv2-oid4vp-rp-auth/package.json @@ -16,7 +16,7 @@ "dependencies": { "@sphereon/did-auth-siop": "0.3.2-unstable.6", "@sphereon/pex": "2.0.1", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", "@sphereon/ssi-sdk.core": "workspace:*", "@sphereon/ssi-sdk.kv-store-temp": "workspace:*", "@sphereon/ssi-sdk.presentation-exchange": "workspace:*", diff --git a/packages/siopv2-oid4vp-rp-rest-api/package.json b/packages/siopv2-oid4vp-rp-rest-api/package.json index de8d73e8d..1a1788551 100644 --- a/packages/siopv2-oid4vp-rp-rest-api/package.json +++ b/packages/siopv2-oid4vp-rp-rest-api/package.json @@ -34,7 +34,7 @@ "@sphereon/did-uni-client": "^0.6.0", "@sphereon/pex": "^2.0.1", "@sphereon/pex-models": "^2.0.2", - "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.13.0", "@sphereon/ssi-sdk.data-store": "workspace:*", "@sphereon/ssi-sdk.vc-handler-ld-local": "workspace:*", "@types/body-parser": "^1.19.2", diff --git a/packages/uni-resolver-registrar-api/README.md b/packages/uni-resolver-registrar-api/README.md index 985191f05..47194a70d 100644 --- a/packages/uni-resolver-registrar-api/README.md +++ b/packages/uni-resolver-registrar-api/README.md @@ -11,6 +11,7 @@ **Warning: This package is in early development. Breaking changes without notice will happen at this point!** --- + This module provides a DIF Universal Resolver and Universal Registrar API, to allow DIDs managed by the agent to be resolved using standardized APIs, as well as to create and manage new DIDs using the registrar APIs. @@ -71,12 +72,8 @@ curl -X GET\ } } ], - "authentication": [ - "did:web:ddip.sphereon.com#JWK2020-RSA" - ], - "assertionMethod": [ - "did:web:ddip.sphereon.com#JWK2020-RSA" - ], + "authentication": ["did:web:ddip.sphereon.com#JWK2020-RSA"], + "assertionMethod": ["did:web:ddip.sphereon.com#JWK2020-RSA"], "service": [] } } @@ -162,44 +159,43 @@ Note: You can have multiple instances of the UniResolverApiServer, as long as yo for each instance and that the same express is being used. ```typescript - // agent is a configured SSI-SDK/Veramo agent (see below for an example) // Let's first build express to listen on port 5000 const expressBuilder = ExpressBuilder.fromServerOpts({ - port: 5000, - hostname: '0.0.0.0', + port: 5000, + hostname: '0.0.0.0', }).withPassportAuth(false) -const expressArgs = expressBuilder.build({startListening: true}) +const expressArgs = expressBuilder.build({ startListening: true }) // Now create the Universal Resolver API, with DID resolution and persistence enabled and authentication disabled new UniResolverApiServer({ - opts: { - enableFeatures: ['did-persist', 'did-resolve'], - endpointOpts: { - basePath: '/1.0', // Let's make sure the eventual path becomes /1.0/idenfitiers/ - globalAuth: { - authentication: { - enabled: false - }, - }, + opts: { + enableFeatures: ['did-persist', 'did-resolve'], + endpointOpts: { + basePath: '/1.0', // Let's make sure the eventual path becomes /1.0/idenfitiers/ + globalAuth: { + authentication: { + enabled: false, }, + }, }, - expressArgs, - agent, + }, + expressArgs, + agent, }) // At this point you can execute the example above, as the Uniresolver is now listening on port 5000 ``` - ## DID Web Service -This service hosts agent managed did:web DIDs at the appropriate locations as a did.json file. Meaning that whenever you hit + +This service hosts agent managed did:web DIDs at the appropriate locations as a did.json file. Meaning that whenever you hit https://agent/.well-known/did.json or http://agent/example/path/test/did.json for instance, the agent will lookup the appropriate DID managed by the agent. If no DID is found for the URL, it will return the below response, with an HTTP code 404 ```json { - "error": "Not found" + "error": "Not found" } ``` @@ -246,46 +242,46 @@ these DID methods. ```typescript export const resolver = new Resolver({ - ...getDidWebResolver(), - ...getDidKeyResolver(), - ...getDidJwkResolver(), - ...getDidIonResolver(), + ...getDidWebResolver(), + ...getDidKeyResolver(), + ...getDidJwkResolver(), + ...getDidIonResolver(), }) export const didProviders = { - [`did:web`]: new WebDIDProvider({ - defaultKms: 'local', - }), - [`did:key`]: new KeyDIDProvider({ - defaultKms: 'local', - }), - [`did:ion`]: new IonDIDProvider({ - defaultKms: 'local', - }), - [`did:jwk`]: new JwkDIDProvider({ - defaultKms: 'local', - }), + [`did:web`]: new WebDIDProvider({ + defaultKms: 'local', + }), + [`did:key`]: new KeyDIDProvider({ + defaultKms: 'local', + }), + [`did:ion`]: new IonDIDProvider({ + defaultKms: 'local', + }), + [`did:jwk`]: new JwkDIDProvider({ + defaultKms: 'local', + }), } const agent = createAgent({ - plugins: [ - new DataStore(dbConnection), - new DataStoreORM(dbConnection), - new KeyManager({ - store: new KeyStore(dbConnection), - kms: { - local: new KeyManagementSystem(privateKeyStore), - }, - }), - new DIDManager({ - store: new DIDStore(dbConnection), - defaultProvider: 'did:jwk', - providers: didProviders, - }), - new DIDResolverPlugin({ - resolver, - }), - ], + plugins: [ + new DataStore(dbConnection), + new DataStoreORM(dbConnection), + new KeyManager({ + store: new KeyStore(dbConnection), + kms: { + local: new KeyManagementSystem(privateKeyStore), + }, + }), + new DIDManager({ + store: new DIDStore(dbConnection), + defaultProvider: 'did:jwk', + providers: didProviders, + }), + new DIDResolverPlugin({ + resolver, + }), + ], }) ``` diff --git a/packages/uni-resolver-registrar-api/package.json b/packages/uni-resolver-registrar-api/package.json index cb1bb11cc..0ab035ccb 100644 --- a/packages/uni-resolver-registrar-api/package.json +++ b/packages/uni-resolver-registrar-api/package.json @@ -14,9 +14,9 @@ "@sphereon/ssi-sdk.express-support": "workspace:*", "@sphereon/ssi-sdk.core": "workspace:*", "@sphereon/ssi-types": "workspace:*", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.key-utils": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.key-manager": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", + "@sphereon/ssi-sdk-ext.key-utils": "0.13.0", + "@sphereon/ssi-sdk-ext.key-manager": "0.13.0", "casbin": "^5.26.1", "@veramo/core": "4.2.0", "body-parser": "^1.19.0", @@ -34,8 +34,8 @@ "passport": "^0.6.0", "passport-azure-ad": "^4.3.5", "morgan": "^1.10.0", - "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.13.0", + "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.13.0", "@sphereon/ssi-sdk.data-store": "workspace:*", "@sphereon/ssi-sdk.vc-handler-ld-local": "workspace:*", "@types/morgan": "^1.9.4", diff --git a/packages/uni-resolver-registrar-api/src/api-functions.ts b/packages/uni-resolver-registrar-api/src/api-functions.ts index 187211310..991e3b289 100644 --- a/packages/uni-resolver-registrar-api/src/api-functions.ts +++ b/packages/uni-resolver-registrar-api/src/api-functions.ts @@ -1,192 +1,196 @@ -import {DIDResolutionResult} from '@sphereon/did-uni-client' -import {getAgentDIDMethods, toDidDocument, toDidResolutionResult} from '@sphereon/ssi-sdk-ext.did-utils' -import {JwkKeyUse} from '@sphereon/ssi-sdk-ext.key-utils' -import {checkAuth, ISingleEndpointOpts, sendErrorResponse} from '@sphereon/ssi-sdk.express-support' -import {parseDid} from '@sphereon/ssi-types' -import {IIdentifier} from '@veramo/core' -import {Request, Response, Router} from 'express' -import {v4} from 'uuid' +import { DIDResolutionResult } from '@sphereon/did-uni-client' +import { getAgentDIDMethods, toDidDocument, toDidResolutionResult } from '@sphereon/ssi-sdk-ext.did-utils' +import { JwkKeyUse } from '@sphereon/ssi-sdk-ext.key-utils' +import { checkAuth, ISingleEndpointOpts, sendErrorResponse } from '@sphereon/ssi-sdk.express-support' +import { parseDid } from '@sphereon/ssi-types' +import { IIdentifier } from '@veramo/core' +import { Request, Response, Router } from 'express' +import { v4 } from 'uuid' import { - CreateState, - DidRegistrationCreateRequest, - DidStateValue, - ICreateDidEndpointOpts, - IGlobalDidWebEndpointOpts, - IRequiredContext, + CreateState, + DidRegistrationCreateRequest, + DidStateValue, + ICreateDidEndpointOpts, + IGlobalDidWebEndpointOpts, + IRequiredContext, } from './types' export function createDidEndpoint(router: Router, context: IRequiredContext, opts?: ICreateDidEndpointOpts) { - if (opts?.enabled === false) { - console.log(`create DID endpoint is disabled`) - return - } - const path = opts?.path ?? '/identifiers' + if (opts?.enabled === false) { + console.log(`create DID endpoint is disabled`) + return + } + const path = opts?.path ?? '/identifiers' - router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => { - try { - const createRequest: DidRegistrationCreateRequest = request.body - if (!createRequest) { - return sendErrorResponse(response, 400, 'No DID create request present') - } - const did = createRequest.did - const didMethod = (request.query.method as string) ?? (did ? parseDid(did).method : opts?.defaultMethod) - const allDidMethods = await getAgentDIDMethods(context) - if (!didMethod) { - return sendErrorResponse(response, 400, 'No DID method supplied or deductible') - } else if (did && parseDid(did).method != didMethod) { - return sendErrorResponse(response, 400, 'DID method did not match method param') - } else if (!allDidMethods.includes(didMethod)) { - return sendErrorResponse(response, 400, 'DID method not supported') - } - const provider = `did:${didMethod}` - const jobId = createRequest.jobId ?? `urn:uuid:${v4()}` - let alias: string | undefined = undefined - if (didMethod === 'web') { - if (!did) { - return sendErrorResponse(response, 400, 'Please provide a value for "did" in the request body when creating a DID web') - } - alias = parseDid(did).id - if (!alias) { - return sendErrorResponse(response, 400, 'Could not determine alias from did:web DID value: ' + did) - } - } + router.post(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => { + try { + const createRequest: DidRegistrationCreateRequest = request.body + if (!createRequest) { + return sendErrorResponse(response, 400, 'No DID create request present') + } + const did = createRequest.did + const didMethod = (request.query.method as string) ?? (did ? parseDid(did).method : opts?.defaultMethod) + const allDidMethods = await getAgentDIDMethods(context) + if (!didMethod) { + return sendErrorResponse(response, 400, 'No DID method supplied or deductible') + } else if (did && parseDid(did).method != didMethod) { + return sendErrorResponse(response, 400, 'DID method did not match method param') + } else if (!allDidMethods.includes(didMethod)) { + return sendErrorResponse(response, 400, 'DID method not supported') + } + const provider = `did:${didMethod}` + const jobId = createRequest.jobId ?? `urn:uuid:${v4()}` + let alias: string | undefined = undefined + if (didMethod === 'web') { + if (!did) { + return sendErrorResponse(response, 400, 'Please provide a value for "did" in the request body when creating a DID web') + } + alias = parseDid(did).id + if (!alias) { + return sendErrorResponse(response, 400, 'Could not determine alias from did:web DID value: ' + did) + } + } - let identifier: IIdentifier | undefined - let state: DidStateValue | undefined - if (opts?.noErrorOnExistingDid && did) { - try { - identifier = await context.agent.didManagerGet({did}) - state = 'exists' - } catch (e) { - // Okay, since we will create a new one - } - } - if (identifier === undefined) { - if (createRequest.options.storeSecrets === false) { - return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently') - /*const memoryKMS = new SphereonKeyManager({ + let identifier: IIdentifier | undefined + let state: DidStateValue | undefined + if (opts?.noErrorOnExistingDid && did) { + try { + identifier = await context.agent.didManagerGet({ did }) + state = 'exists' + } catch (e) { + // Okay, since we will create a new one + } + } + if (identifier === undefined) { + if (createRequest.options.storeSecrets === false) { + return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently') + /*const memoryKMS = new SphereonKeyManager({ store: new MemoryKeyStore(), kms: {'mem': new KeyManagementSystem(new MemoryPrivateKeyStore())} }) identifier = await memoryKMS..didManagerCreate({provider, alias, kms: opts?.kms})*/ - } else if (createRequest.options.storeSecrets || opts?.storeSecrets) { - identifier = await context.agent.didManagerCreate({provider, alias, kms: opts?.kms}) - state = 'finished' - } else { - return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently') - } - } - if (!identifier || !state) { - return sendErrorResponse(response, 400, 'An identifier and did state should be present at this point') - } - - const didDocument = toDidDocument(identifier, {did, use: [JwkKeyUse.Signature, JwkKeyUse.Encryption]}) - const createState: CreateState = { - jobId, - didState: { - did: identifier.did, - state, - didDocument, - }, - } - response.statusCode = 200 - return response.send(createState) - } catch (e) { - return sendErrorResponse(response, 500, e.message as string, e) + } else if (createRequest.options.storeSecrets || opts?.storeSecrets) { + identifier = await context.agent.didManagerCreate({ provider, alias, kms: opts?.kms }) + state = 'finished' + } else { + return sendErrorResponse(response, 400, 'Only storeSecrets mode is supported currently') } - }) + } + if (!identifier || !state) { + return sendErrorResponse(response, 400, 'An identifier and did state should be present at this point') + } + + const didDocument = toDidDocument(identifier, { did, use: [JwkKeyUse.Signature, JwkKeyUse.Encryption] }) + const createState: CreateState = { + jobId, + didState: { + did: identifier.did, + state, + didDocument, + }, + } + response.statusCode = 200 + return response.send(createState) + } catch (e) { + return sendErrorResponse(response, 500, e.message as string, e) + } + }) } export function getDidMethodsEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) { - if (opts?.enabled === false) { - console.log(`Get DID methods endpoint is disabled`) - return + if (opts?.enabled === false) { + console.log(`Get DID methods endpoint is disabled`) + return + } + const path = opts?.path ?? '/methods' + router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => { + try { + const methods = await getAgentDIDMethods(context) // these are already without the 'did:' prefix + response.statusCode = 200 + return response.send(methods) + } catch (e) { + return sendErrorResponse(response, 500, e.message as string, e) } - const path = opts?.path ?? '/methods' - router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => { - try { - const methods = await getAgentDIDMethods(context) // these are already without the 'did:' prefix - response.statusCode = 200 - return response.send(methods) - } catch (e) { - return sendErrorResponse(response, 500, e.message as string, e) - } - }) + }) } async function agentDidToResolutionResult(context: IRequiredContext, did: string) { - try { - const identifier = await context.agent.didManagerGet({did}) - console.log(JSON.stringify(identifier, null, 2)) - return toDidResolutionResult(identifier, { - did, - supportedMethods: await getAgentDIDMethods(context), - }) - } catch (error) { - console.log(JSON.stringify(error.message)) - return { - didDocument: null, - didResolutionMetadata: { - error: 'notFound', - }, - didDocumentMetadata: {}, - } + try { + const identifier = await context.agent.didManagerGet({ did }) + console.log(JSON.stringify(identifier, null, 2)) + return toDidResolutionResult(identifier, { + did, + supportedMethods: await getAgentDIDMethods(context), + }) + } catch (error) { + console.log(JSON.stringify(error.message)) + return { + didDocument: null, + didResolutionMetadata: { + error: 'notFound', + }, + didDocumentMetadata: {}, } + } } -export function resolveDidEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts & { +export function resolveDidEndpoint( + router: Router, + context: IRequiredContext, + opts?: ISingleEndpointOpts & { mode?: 'local' | 'hybrid' | 'global' -}) { - if (opts?.enabled === false) { - console.log(`Resolve DID endpoint is disabled`) - return - } - const path = opts?.path ?? '/identifiers/:identifier' - router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => { - try { - const did = request.params.identifier - if (!did) { - return sendErrorResponse(response, 400, 'no identifier provided') - } - const mode = request.query.mode?.toString().toLowerCase() ?? opts?.mode?.toLowerCase() ?? 'hybrid' - let resolutionResult: DIDResolutionResult | undefined - if (mode === 'local' || mode === 'hybrid') { - resolutionResult = await agentDidToResolutionResult(context, did) - } - if (mode !== 'local' && !resolutionResult?.didDocument) { - resolutionResult = await context.agent.resolveDid({didUrl: did}) - } + } +) { + if (opts?.enabled === false) { + console.log(`Resolve DID endpoint is disabled`) + return + } + const path = opts?.path ?? '/identifiers/:identifier' + router.get(path, checkAuth(opts?.endpoint), async (request: Request, response: Response) => { + try { + const did = request.params.identifier + if (!did) { + return sendErrorResponse(response, 400, 'no identifier provided') + } + const mode = request.query.mode?.toString().toLowerCase() ?? opts?.mode?.toLowerCase() ?? 'hybrid' + let resolutionResult: DIDResolutionResult | undefined + if (mode === 'local' || mode === 'hybrid') { + resolutionResult = await agentDidToResolutionResult(context, did) + } + if (mode !== 'local' && !resolutionResult?.didDocument) { + resolutionResult = await context.agent.resolveDid({ didUrl: did }) + } - response.statusCode = 200 - return response.send(resolutionResult) - } catch (e) { - return sendErrorResponse(response, 500, e.message as string, e) - } - }) + response.statusCode = 200 + return response.send(resolutionResult) + } catch (e) { + return sendErrorResponse(response, 500, e.message as string, e) + } + }) } export function deactivateDidEndpoint(router: Router, context: IRequiredContext, opts?: ISingleEndpointOpts) { - if (opts?.enabled === false) { - console.log(`Deactivate DID endpoint is disabled`) - return - } - router.delete(opts?.path ?? '/identifiers/:identifier', checkAuth(opts?.endpoint), async (request: Request, response: Response) => { - try { - const did = request.params.identifier - if (!did) { - return sendErrorResponse(response, 400, 'no DID provided') - } + if (opts?.enabled === false) { + console.log(`Deactivate DID endpoint is disabled`) + return + } + router.delete(opts?.path ?? '/identifiers/:identifier', checkAuth(opts?.endpoint), async (request: Request, response: Response) => { + try { + const did = request.params.identifier + if (!did) { + return sendErrorResponse(response, 400, 'no DID provided') + } - const result = await context.agent.didManagerDelete({did}) - if (!result) { - return sendErrorResponse(response, 404, `id ${did} not found`) - } - response.statusCode = 200 - return response.send() - } catch (e) { - return sendErrorResponse(response, 500, e.message as string, e) - } - }) + const result = await context.agent.didManagerDelete({ did }) + if (!result) { + return sendErrorResponse(response, 404, `id ${did} not found`) + } + response.statusCode = 200 + return response.send() + } catch (e) { + return sendErrorResponse(response, 500, e.message as string, e) + } + }) } /** @@ -205,39 +209,39 @@ export function deactivateDidEndpoint(router: Router, context: IRequiredContext, * @param opts */ export function didWebDomainEndpoint(router: Router, context: IRequiredContext, opts?: IGlobalDidWebEndpointOpts) { - if (opts?.enabled === false) { - console.log(`DID Web domain resolution endpoint is disabled`) - return - } - router.get(opts?.path ?? ':path(*)/did.json', checkAuth(opts?.endpoint), async (request: Request, response: Response) => { - try { - const path = request.params.path - if (!path || path.length === 0) { - return sendErrorResponse(response, 404, 'Not found') - } - let did: string - did = `did:web:${opts?.hostname ?? request.hostname}` - if (path !== '.well-known') { - if (opts?.disableSubPaths) { - return sendErrorResponse(response, 404, 'Not found') - } - const suffix = path.replace(/\//g, ':').replace(/%2F/g, ':') - if (!suffix.startsWith(':')) { - did += ':' - } - did += suffix - } else if (opts?.disableWellKnown) { - return sendErrorResponse(response, 404, 'Not found') - } - - const resolutionResult = await agentDidToResolutionResult(context, did) - if (!resolutionResult || !resolutionResult.didDocument || resolutionResult?.didResolutionMetadata?.error === 'notFound') { - return sendErrorResponse(response, 404, 'Not found') - } - response.statusCode = 200 - return response.send(resolutionResult.didDocument) - } catch (e) { - return sendErrorResponse(response, 500, e.message as string, e) + if (opts?.enabled === false) { + console.log(`DID Web domain resolution endpoint is disabled`) + return + } + router.get(opts?.path ?? ':path(*)/did.json', checkAuth(opts?.endpoint), async (request: Request, response: Response) => { + try { + const path = request.params.path + if (!path || path.length === 0) { + return sendErrorResponse(response, 404, 'Not found') + } + let did: string + did = `did:web:${opts?.hostname ?? request.hostname}` + if (path !== '.well-known') { + if (opts?.disableSubPaths) { + return sendErrorResponse(response, 404, 'Not found') } - }) + const suffix = path.replace(/\//g, ':').replace(/%2F/g, ':') + if (!suffix.startsWith(':')) { + did += ':' + } + did += suffix + } else if (opts?.disableWellKnown) { + return sendErrorResponse(response, 404, 'Not found') + } + + const resolutionResult = await agentDidToResolutionResult(context, did) + if (!resolutionResult || !resolutionResult.didDocument || resolutionResult?.didResolutionMetadata?.error === 'notFound') { + return sendErrorResponse(response, 404, 'Not found') + } + response.statusCode = 200 + return response.send(resolutionResult.didDocument) + } catch (e) { + return sendErrorResponse(response, 500, e.message as string, e) + } + }) } diff --git a/packages/vc-handler-ld-local/package.json b/packages/vc-handler-ld-local/package.json index 999f4b69a..2a1bf1dc9 100644 --- a/packages/vc-handler-ld-local/package.json +++ b/packages/vc-handler-ld-local/package.json @@ -25,8 +25,8 @@ "@mattrglobal/jsonld-signatures-bbs": "^1.1.1", "@sphereon/ed25519-signature-2018": "0.7.0-unstable.6", "@sphereon/isomorphic-webcrypto": "^2.4.0-unstable.4", - "@sphereon/ssi-sdk-ext.key-utils": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.did-utils": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.key-utils": "0.13.0", + "@sphereon/ssi-sdk-ext.did-utils": "0.13.0", "@sphereon/ssi-sdk.core": "workspace:*", "@sphereon/ssi-types": "workspace:*", "@transmute/ed25519-key-pair": "0.7.0-unstable.80", @@ -51,10 +51,10 @@ }, "devDependencies": { "@sphereon/did-uni-client": "^0.6.0", - "@sphereon/ssi-sdk-ext.did-provider-key": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.did-provider-lto": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.key-manager": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.kms-local": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-provider-key": "0.13.0", + "@sphereon/ssi-sdk-ext.did-provider-lto": "0.13.0", + "@sphereon/ssi-sdk-ext.key-manager": "0.13.0", + "@sphereon/ssi-sdk-ext.kms-local": "0.13.0", "@sphereon/ssi-sdk.agent-config": "workspace:*", "@transmute/lds-ecdsa-secp256k1-recovery2020": "^0.0.7", "@types/nock": "^11.1.0", diff --git a/packages/w3c-vc-api/README.md b/packages/w3c-vc-api/README.md index 636f0c122..739a9d247 100644 --- a/packages/w3c-vc-api/README.md +++ b/packages/w3c-vc-api/README.md @@ -2,51 +2,199 @@


Sphereon -
SIOPv2 and OpenID4VP Relying Party REST endpoints +
W3C VC API

--- -**Warning: This package still is in very early development. Breaking changes without notice will happen at this point!** +**Warning: This package is in early development. Breaking changes without notice will happen at this point!** --- -An authentication plugin using the [Self Issued OpenID Provider v2 (SIOP)](https://github.com/Sphereon-Opensource/did-auth-siop) authentication library for having Relying Parties conforming to -the [Self Issued OpenID Provider v2 (SIOPv2)](https://openid.net/specs/openid-connect-self-issued-v2-1_0.html) -and [OpenID Connect for Verifiable Presentations (OIDC4VP)](https://openid.net/specs/openid-connect-4-verifiable-presentations-1_0.html) -as specified in the OpenID Connect working group. +This module provides a W3C Verifiable Credential API, to allow issuance and verification of VCs and VPs. -## Self Issued OpenID Provider v2 (SIOPv2) +# VC API -For more information about [Self Issued OpenID Provider v2 (SIOP)](https://github.com/Sphereon-Opensource/did-auth-siop#introduction), see the documentation in the readme. +For more information about the W3C VC API visit +the [W3C VC API Github](https://w3c-ccg.github.io/vc-api/). +This module allows you to issue, persist, retrieve and verify Verifiable Credentials (other endpoints are not supported yet) -## Requirements +There are 3 modes of resolution, controlled by a query parameter, when calling the resolution endpoint. You can also set +a default mode when no query parameter is being used. + +The modes are: + +- **local**: Only DIDs managed by the agent can be resolved. DID:web and it's keys are translated to DID documents +- **global**: Resolves DIDs by using the supported resolvers of the agent, allowing external DID resolution +- **hybrid** (default): Tries to resolve locally first. If not found it will fallback to the global mode + +### Issuance example + +The below example resolves the provided did:web DID using external resolution by looking up the domain from the provided +host at https://ddip.sphereon.com. + +```shell +curl -X POST\ +-H "Accept: application/json"\ +"https://agent/credentials/issue" +-d '' +``` +Body: +```json +{ + "verifiableCredential": { + "@context": [ + "https://www.w3.org/2018/credentials/v1" + ], + "id": "https://example.com/8790171", + "type": [ + "VerifiableCredential", + "GS1CompanyPrefixLicenseCredential" + ], + "issuer": "did:web:example.com", + "issuanceDate": "2023-06-22T00:00:00.000Z", + "validUntil": "2024-06-22T00:00:00.000Z", + "credentialSubject": { + "id": "did:web:subject.example.com", + "example": "value" + }, + "proof": { + "type": "JsonWebSignature2020", + "created": "2023-06-29T22:20:27.000Z", + "proofPurpose": "assertionMethod", + "verificationMethod": "did:web:example.com#key-1", + "jws": "ey......." + } + } +} +``` + +```json +{ + +} +``` -For this plugin a DID resolver is also required. A DID resolver can be added to the agent as plugin as seen in the example below. -## Available functions +## Configure API -## Usage +You can configure and build the API in multiple ways. This module also exposes functions for every endpoint, so you are +able to create your own Express router and then use functions to enable certain endpoints in your solution. The more +easy route is to use the `VcApiServer` class. This class has configuration support, allowing to enable/disable +certain features, like for instance whether VCs can be created, persisted, and/or verified. -### Adding the plugin to an agent: +Note: You can have multiple instances of the VcApiServer, as long as you make sure that the basePaths differs +for each instance and that the same express is being used. ```typescript -import { IDidAuthSiopOpAuthenticator } from '@sphereon/ssi-sdk-did-auth-siop-authenticator' -import { Resolver } from 'did-resolver' -import { getDidKeyResolver } from '@veramo/did-provider-key' -import { DIDResolverPlugin } from '@veramo/did-resolver' -import { getUniResolver } from '@sphereon/did-uni-client' +// agent is a configured SSI-SDK/Veramo agent (see below for an example) + +// Let's first build express to listen on port 5000 +const expressBuilder = ExpressBuilder.fromServerOpts({ + port: 5000, + hostname: '0.0.0.0', +}).withPassportAuth(false) +const expressArgs = expressBuilder.build({ startListening: true }) + +// Now create the VC PI, with VC issuance, persistence and verification enabled and authentication disabled +new VcApiServer({ + opts: { + endpointOpts: { + globalAuth: { + authentication: { + enabled: false, + }, + }, + }, + issueCredentialOpts: { + enableFeatures: ['vc-issue', 'vc-persist', 'vc-verify'], + proofFormat: 'lds', // Issue JSON-LD VCs, can also be changed to `jwt` + fetchRemoteContexts: true, // Whether to allow fetching remote contexts, mainly used when verifying VCs + keyRef: '89a4661e446b46401325a38d3b20582d1dd277eb448a3181012a671b7ae15837', // The key to use when signing VCs + }, + }, + expressArgs, + agent, +}) +// At this point you can execute the example above, as the VC API is now listening on port 5000 +``` + +## Requirements + +For this plugin a DID resolver is also required. A DID resolver can be added to the agent as plugin as seen in the +example below. You can find resolvers in the Veramo project and our +[SSI-SDK-crypto-extensions](https://github.com/Sphereon-Opensource/SSI-SDK-crypto-extensions.git) + +### Agent setup -const agent = createAgent({ +```typescript +export const resolver = new Resolver({ + ...getDidWebResolver(), + ...getDidKeyResolver(), + ...getDidJwkResolver(), + ...getDidIonResolver(), +}) + +export const didProviders = { + [`did:web`]: new WebDIDProvider({ + defaultKms: 'local', + }), + [`did:key`]: new KeyDIDProvider({ + defaultKms: 'local', + }), + [`did:ion`]: new IonDIDProvider({ + defaultKms: 'local', + }), + [`did:jwk`]: new JwkDIDProvider({ + defaultKms: 'local', + }), +} + +const agent = createAgent< + IDIDManager & + IKeyManager & + IDataStore & + IDataStoreORM & + IResolver & + IPresentationExchange & + ICredentialVerifier & + ICredentialHandlerLDLocal & + ICredentialPlugin +>({ plugins: [ - new DidAuthSiopOpAuthenticator(), + new DataStore(dbConnection), + new DataStoreORM(dbConnection), + new KeyManager({ + store: new KeyStore(dbConnection), + kms: { + local: new KeyManagementSystem(privateKeyStore), + }, + }), + new DIDManager({ + store: new DIDStore(dbConnection), + defaultProvider: `${DID_PREFIX}:${SupportedDidMethodEnum.DID_JWK}`, + providers: didProviders, + }), new DIDResolverPlugin({ - resolver: new Resolver({ - ...getDidKeyResolver(), - ...getUniResolver('web'), - ...getUniResolver('jwk'), - }), + resolver, + }), + new PresentationExchange(), + new CredentialPlugin(), + new CredentialHandlerLDLocal({ + contextMaps: [LdDefaultContexts], + suites: [ + new SphereonEd25519Signature2018(), + new SphereonEd25519Signature2020(), + new SphereonBbsBlsSignature2020(), + new SphereonJsonWebSignature2020(), + new SphereonEcdsaSecp256k1RecoverySignature2020(), + ], + bindingOverrides: new Map([ + ['createVerifiableCredentialLD', MethodNames.createVerifiableCredentialLDLocal], + ['createVerifiablePresentationLD', MethodNames.createVerifiablePresentationLDLocal], + ]), + keyStore: privateKeyStore, }), ], }) @@ -55,11 +203,11 @@ const agent = createAgent({ ## Installation ```shell -yarn add @sphereon/ssi-sdk-siopv2-openid4vp-rp +pnpm add @sphereon/ssi-sdk.w3c-vc-api ``` ## Build ```shell -yarn build +pnpm build ``` diff --git a/packages/w3c-vc-api/__tests__/agent.ts b/packages/w3c-vc-api/__tests__/agent.ts index 2352f0600..521deaaca 100644 --- a/packages/w3c-vc-api/__tests__/agent.ts +++ b/packages/w3c-vc-api/__tests__/agent.ts @@ -252,6 +252,7 @@ agent }, }, issueCredentialOpts: { + enableFeatures: ['vc-issue', 'vc-persist', 'vc-verify'], proofFormat: 'lds', fetchRemoteContexts: true, persistIssuedCredentials: true, diff --git a/packages/w3c-vc-api/package.json b/packages/w3c-vc-api/package.json index a9a778640..c175afe8f 100644 --- a/packages/w3c-vc-api/package.json +++ b/packages/w3c-vc-api/package.json @@ -35,8 +35,8 @@ "passport": "^0.6.0", "passport-azure-ad": "^4.3.5", "morgan": "^1.10.0", - "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.12.2-next.12", - "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.12.2-next.12", + "@sphereon/ssi-sdk-ext.did-provider-jwk": "0.13.0", + "@sphereon/ssi-sdk-ext.did-resolver-jwk": "0.13.0", "@sphereon/ssi-sdk.data-store": "workspace:*", "@sphereon/ssi-sdk.vc-handler-ld-local": "workspace:*", "@types/morgan": "^1.9.4", diff --git a/packages/w3c-vc-api/src/types.ts b/packages/w3c-vc-api/src/types.ts index 858c3a850..41f60e8a5 100644 --- a/packages/w3c-vc-api/src/types.ts +++ b/packages/w3c-vc-api/src/types.ts @@ -22,11 +22,11 @@ export type IRequiredPlugins = IDataStore & IResolver export type IRequiredContext = IAgentContext -interface IVCAPISecurityOpts {} +// interface IVCAPISecurityOpts {} export interface IVCAPIOpts { endpointOpts?: IVCAPIEndpointOpts - securityOpts?: IVCAPISecurityOpts + // securityOpts?: IVCAPISecurityOpts issueCredentialOpts?: IVCAPIIssueOpts } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d32fbc6a6..59852758e 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -522,8 +522,8 @@ importers: specifier: 0.6.0 version: 0.6.0 '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.core': specifier: workspace:* version: link:../ssi-sdk-core @@ -641,17 +641,17 @@ importers: specifier: ^2.0.2 version: 2.0.2 '@sphereon/ssi-sdk-ext.did-provider-jwk': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.key-manager': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.key-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.kms-local': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.data-store': specifier: workspace:* version: link:../data-store @@ -768,8 +768,8 @@ importers: specifier: 0.6.0 version: 0.6.0 '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.kv-store-temp': specifier: workspace:* version: link:../kv-store @@ -817,8 +817,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.kv-store-temp': specifier: workspace:* version: link:../kv-store @@ -940,8 +940,8 @@ importers: specifier: 2.0.2 version: 2.0.2 '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.core': specifier: workspace:* version: link:../ssi-sdk-core @@ -1010,8 +1010,8 @@ importers: specifier: 2.0.1 version: 2.0.1 '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.core': specifier: workspace:* version: link:../ssi-sdk-core @@ -1132,8 +1132,8 @@ importers: specifier: ^2.0.2 version: 2.0.2 '@sphereon/ssi-sdk-ext.did-provider-jwk': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.data-store': specifier: workspace:* version: link:../data-store @@ -1288,14 +1288,14 @@ importers: packages/uni-resolver-registrar-api: dependencies: '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.key-manager': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.key-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.core': specifier: workspace:* version: link:../ssi-sdk-core @@ -1340,11 +1340,11 @@ importers: specifier: ^0.6.0 version: 0.6.0 '@sphereon/ssi-sdk-ext.did-provider-jwk': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.did-resolver-jwk': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12 + specifier: 0.13.0 + version: 0.13.0 '@sphereon/ssi-sdk.data-store': specifier: workspace:* version: link:../data-store @@ -1475,11 +1475,11 @@ importers: specifier: ^2.4.0-unstable.4 version: 2.4.0-unstable.4(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.did-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.key-utils': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.core': specifier: workspace:* version: link:../ssi-sdk-core @@ -1551,17 +1551,17 @@ importers: specifier: ^0.6.0 version: 0.6.0 '@sphereon/ssi-sdk-ext.did-provider-key': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.did-provider-lto': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(typescript@4.9.5) + specifier: 0.13.0 + version: 0.13.0(typescript@4.9.5) '@sphereon/ssi-sdk-ext.key-manager': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.kms-local': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk.agent-config': specifier: workspace:* version: link:../agent-config @@ -1696,11 +1696,11 @@ importers: specifier: ^0.6.0 version: 0.6.0 '@sphereon/ssi-sdk-ext.did-provider-jwk': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + specifier: 0.13.0 + version: 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-sdk-ext.did-resolver-jwk': - specifier: 0.12.2-next.12 - version: 0.12.2-next.12 + specifier: 0.13.0 + version: 0.13.0 '@sphereon/ssi-sdk.data-store': specifier: workspace:* version: link:../data-store @@ -3987,7 +3987,7 @@ packages: '@expo/json-file': 8.2.37 debug: 4.3.4 expo-modules-autolinking: 1.5.0 - fs-extra: 9.0.0 + fs-extra: 9.1.0 resolve-from: 5.0.0 semver: 7.5.3 xml2js: 0.6.0 @@ -4630,7 +4630,7 @@ packages: resolution: {integrity: sha512-yUCDCcRNNbI9UUsUB6FYEmDHpo5Tn/f0q5D7vhDP4i6Or8kBj82y7+e31hwfLvK2ykOYlDVs2MxAluH/+QUBOQ==} engines: {node: ^14.15.0 || >=16.0.0} dependencies: - chalk: 4.1.0 + chalk: 4.1.2 execa: 5.0.0 strong-log-transformer: 2.1.0 dev: true @@ -5422,7 +5422,7 @@ packages: '@octokit/request-error': 3.0.3 '@octokit/types': 9.3.2 is-plain-object: 5.0.0 - node-fetch: 2.6.7 + node-fetch: 2.6.12 universal-user-agent: 6.0.0 transitivePeerDependencies: - encoding @@ -5973,7 +5973,7 @@ packages: /@sphereon/did-uni-client@0.4.0: resolution: {integrity: sha512-PJr0xi46iEMtQ7vJW6rAoc2T+gPT8P7q0FjVcOVI3l8so4XJ+iY+wkeF2osEFGmjVS/Q76uhcDCBXTXxPDFdcQ==} dependencies: - cross-fetch: 3.1.5 + cross-fetch: 3.1.8 did-resolver: 3.2.2 transitivePeerDependencies: - encoding @@ -6141,12 +6141,12 @@ packages: react-native: 0.72.3(@babel/core@7.22.9)(@babel/preset-env@7.22.2)(react@18.2.0) dev: true - /@sphereon/ssi-sdk-ext.did-provider-jwk@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-C/3axjtUUayTKodJ2XArQ4OyhBSrFjDsFiHLofTEJBxg6OEXj0iRS9rYQ+L91olRuT6CUXQUJks3ZDfdCtYOeQ==} + /@sphereon/ssi-sdk-ext.did-provider-jwk@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-zqK+UdBKzwzLcVpUBpk+3TZNbV7DVRGwcj3iWtGRuv47ExRxEKcl8q9KVini1pn8sLtd1+FQMf3gUsEk3zmzew==} dependencies: '@ethersproject/random': 5.7.0 - '@sphereon/ssi-sdk-ext.did-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) - '@sphereon/ssi-sdk-ext.key-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.did-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.key-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@sphereon/ssi-types': link:packages/ssi-types '@stablelib/ed25519': 1.0.3 '@veramo/core': 4.2.0(patch_hash=c5oempznsz4br5w3tcuk2i2mau) @@ -6164,11 +6164,11 @@ packages: - supports-color dev: true - /@sphereon/ssi-sdk-ext.did-provider-key@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-ujd0h2hHD8vwrMRsls21nGS7P7triun94pQ3pRj5HWjvsEpd7SlyivHQKTGmz+suxiQYxS/vfxivRCjrcBe3dg==} + /@sphereon/ssi-sdk-ext.did-provider-key@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-Uw0phuOR0smdfuR/deEZPl2qemDYMvcQnuQEy4Pu6IAQrb3efgTU1gsqaYi1qQjTL2dGRBeYLhoRZJxes5L/tA==} dependencies: - '@sphereon/ssi-sdk-ext.did-resolver-key': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) - '@sphereon/ssi-sdk-ext.key-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.did-resolver-key': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.key-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@transmute/did-key-bls12381': 0.3.0-unstable.10 '@veramo/core': 4.2.0(patch_hash=c5oempznsz4br5w3tcuk2i2mau) '@veramo/did-manager': 4.2.0 @@ -6186,8 +6186,8 @@ packages: - supports-color dev: true - /@sphereon/ssi-sdk-ext.did-provider-lto@0.12.2-next.12(typescript@4.9.5): - resolution: {integrity: sha512-Ej9MPukwCMVRgrht7rnv3G/tzH7ETnH3RCKMfG69ERdnBuf6CWsL4LkyTJOYsE+20xlFDPZ+8CJv2FvozAa+xA==} + /@sphereon/ssi-sdk-ext.did-provider-lto@0.13.0(typescript@4.9.5): + resolution: {integrity: sha512-AcCCRCJvt9HI3iVz6EAYJt+CRvpYmnFL5+0GOLDwlPIg+OxzZPgWHAAupzOcTO8tpDYGShvBXNlnu6Kf/SEhCw==} dependencies: '@lto-network/lto-crypto': 1.1.1 '@lto-network/lto-transactions': 1.2.12(debug@4.3.4)(typescript@4.9.5) @@ -6204,8 +6204,8 @@ packages: - typescript dev: true - /@sphereon/ssi-sdk-ext.did-resolver-jwk@0.12.2-next.12: - resolution: {integrity: sha512-Rwy6DTWnUedzEowRpBrF0kZ644rNTbqSRHbdeInCBS7T5ZaIMvApAu+q/dkOoZ1TIxSKvYcAIRV7kZa41xczyg==} + /@sphereon/ssi-sdk-ext.did-resolver-jwk@0.13.0: + resolution: {integrity: sha512-Vtv+mN/6Q0/KqNwXNpZ+IffTpaNJClJ0+UwaNxlN/PCM0hS5iEg1Q1TmSvhjBcb9RPbCVkb+y12nv5//l+0t6A==} dependencies: '@sphereon/ssi-types': link:packages/ssi-types base64url: 3.0.1 @@ -6216,10 +6216,10 @@ packages: - supports-color dev: true - /@sphereon/ssi-sdk-ext.did-resolver-key@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-vjvw2zZiF+R6VAozq7L3IYWcNtKljgyg82VlgZMbXk0otxo0CVu9pZhY6gNAKkq169zcPzobAstQA1tfVlTm8A==} + /@sphereon/ssi-sdk-ext.did-resolver-key@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-Dh1NYEbforZhB4/SpeR5TWfKvHWLgAPnrTehYXIPnTTGtc+Sj50n1JEUx8ttFsGPclbPXMH2yY2rXGbEfHTOEQ==} dependencies: - '@sphereon/ssi-sdk-ext.key-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.key-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@stablelib/ed25519': 1.0.3 bigint-mod-arith: 3.3.1 did-resolver: 4.1.0 @@ -6238,11 +6238,11 @@ packages: - supports-color dev: true - /@sphereon/ssi-sdk-ext.did-utils@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-j4e4Cu0YiqKMKwBhcGPJYgU8Q6cNFdM58w4w0uDO9cDS++XClJCu7ykOJA4WNtH8CSpd8HWp/2+9LmmZZvGGTA==} + /@sphereon/ssi-sdk-ext.did-utils@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-3Oa2x+DMmAYReL3OgQelgqs/zQJVF1QlBngitKPOBk7RwkYNQSs5QLyZ0PCXNc2HqHLKEH97Zbx54jE/1Dcl5w==} dependencies: '@sphereon/did-uni-client': 0.6.0 - '@sphereon/ssi-sdk-ext.key-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.key-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@veramo/core': 4.2.0(patch_hash=c5oempznsz4br5w3tcuk2i2mau) '@veramo/utils': 4.2.0 did-jwt: 6.11.6(patch_hash=afqywxnnjnsy6hwgax66dyyiey) @@ -6257,11 +6257,11 @@ packages: - react-native-securerandom - supports-color - /@sphereon/ssi-sdk-ext.key-manager@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-Jzs54EXUUydRoghchmna+DfsxvIbTV/fspBmTX83ZcOo/7zke0VFE0fyuvQw69EGMMtRyIAjZ1DL0CmBG2gDVg==} + /@sphereon/ssi-sdk-ext.key-manager@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-DbEJS9CgCAEMGu6K/Qk20oGxxtavvLNDq8rd2JN0CVrPnUhRV5WZxckNhO6jz3U7DRWh+m/PfcXp6njDFvywhw==} dependencies: '@mattrglobal/bbs-signatures': 1.1.0 - '@sphereon/ssi-sdk-ext.kms-local': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.kms-local': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@veramo/core': 4.2.0(patch_hash=c5oempznsz4br5w3tcuk2i2mau) '@veramo/key-manager': 4.2.0 transitivePeerDependencies: @@ -6272,8 +6272,8 @@ packages: - react-native-securerandom - supports-color - /@sphereon/ssi-sdk-ext.key-utils@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-8uo1J6nsr+J/L5QbU9SHOGNTOrl3KBQGFK0P40jPyptAvclC2St0NXjC9HNV98BDjhp+ji/hXqubDRO6AJe0Kg==} + /@sphereon/ssi-sdk-ext.key-utils@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-+xxsz0U33WhRUmTNyBjMfFLlQBY9qH0tYNz5DascUIxNE3pty4Wmd3bSfkBvK+ifet2E5hLtcR1Yz1fXF9vgdg==} dependencies: '@ethersproject/random': 5.7.0 '@sphereon/isomorphic-webcrypto': 2.4.0-unstable.4(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) @@ -6297,13 +6297,13 @@ packages: - react-native-securerandom - supports-color - /@sphereon/ssi-sdk-ext.kms-local@0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): - resolution: {integrity: sha512-RcCg4nG53O3rTpKfi0HEzAkmOBRqwLg7dlMmZSa7tfsk6TLM+I7iIBsvG8cH47qa7zkjY3mCnYDOMBUM12LkVA==} + /@sphereon/ssi-sdk-ext.kms-local@0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1): + resolution: {integrity: sha512-iR0nEb+KJyb9ehqkMsz1NTWytw7ZFY1c0xGwC5a40J1VmXXYeV057fGboNr8eUEG/Hu8LHeq8LBhlNxe9LNJxg==} dependencies: '@mattrglobal/bbs-signatures': 1.1.0 '@sphereon/isomorphic-webcrypto': 2.4.0-unstable.4(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) - '@sphereon/ssi-sdk-ext.did-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) - '@sphereon/ssi-sdk-ext.key-utils': 0.12.2-next.12(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.did-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) + '@sphereon/ssi-sdk-ext.key-utils': 0.13.0(expo-crypto@12.4.1)(expo@49.0.6)(msrcrypto@1.5.8)(react-native-securerandom@1.0.1) '@trust/keyto': 2.0.0-alpha1 '@veramo/core': 4.2.0(patch_hash=c5oempznsz4br5w3tcuk2i2mau) '@veramo/key-manager': 4.2.0 @@ -9000,7 +9000,7 @@ packages: promise-inflight: 1.0.1 rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.1.11 + tar: 6.1.15 unique-filename: 2.0.1 transitivePeerDependencies: - bluebird @@ -9020,7 +9020,7 @@ packages: minipass-pipeline: 1.2.4 p-map: 4.0.0 ssri: 10.0.4 - tar: 6.1.11 + tar: 6.1.15 unique-filename: 3.0.0 dev: true @@ -9786,7 +9786,6 @@ packages: node-fetch: 2.6.12 transitivePeerDependencies: - encoding - dev: false /cross-fetch@4.0.0: resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} @@ -10057,7 +10056,7 @@ packages: engines: {node: '>=10'} dependencies: globby: 11.1.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 is-glob: 4.0.3 is-path-cwd: 2.2.0 is-path-inside: 3.0.3 @@ -11313,7 +11312,7 @@ packages: /fbjs@3.0.5: resolution: {integrity: sha512-ztsSx77JBtkuMrEypfhgc3cI0+0h+svqeie7xHbh1k/IKdcydnvadp/mUaGgjAOXQmQSxsqgaRhS3q9fy+1kxg==} dependencies: - cross-fetch: 3.1.5 + cross-fetch: 3.1.8 fbjs-css-vars: 1.0.2 loose-envify: 1.4.0 object-assign: 4.1.1 @@ -11416,7 +11415,7 @@ packages: resolution: {integrity: sha512-dOKT7jvF3hGzlW60Gc3ONox/0rRZ/tz7WCil0bqA1In/3I8f1BctpXahRnEKDySZqci7u+dqq93sZST9fOJpFw==} engines: {node: '>=16.0.0'} dependencies: - json5: 2.2.0 + json5: 2.2.3 path-exists: 4.0.0 /find-cache-dir@2.1.0: @@ -11576,7 +11575,7 @@ packages: resolution: {integrity: sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==} engines: {node: '>=14.14'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 dev: true @@ -11612,7 +11611,7 @@ packages: engines: {node: '>=10'} dependencies: at-least-node: 1.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 jsonfile: 6.1.0 universalify: 2.0.0 @@ -11902,7 +11901,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.0.5 + minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 dev: true @@ -11991,6 +11990,7 @@ packages: /graceful-fs@4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} + dev: true /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -14059,7 +14059,7 @@ packages: dependencies: universalify: 2.0.0 optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 /jsonld-checker@0.1.8: resolution: {integrity: sha512-jclmnPRrm5SEpaIV6IiSTJxplRAqIWHduQLsUfrYpZM41Ng48m1RN2/aUyHze/ynfO0D2UhlJBt8SdObsH5GBw==} @@ -14462,7 +14462,7 @@ packages: resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==} engines: {node: '>=4'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 4.0.0 pify: 3.0.0 strip-bom: 3.0.0 @@ -14472,7 +14472,7 @@ packages: resolution: {integrity: sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==} engines: {node: '>=8'} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 parse-json: 5.2.0 strip-bom: 4.0.0 type-fest: 0.6.0 @@ -15515,7 +15515,7 @@ packages: array-differ: 3.0.0 array-union: 2.1.0 arrify: 2.0.1 - minimatch: 3.0.5 + minimatch: 3.1.2 dev: true /mute-stream@0.0.8: @@ -15757,13 +15757,13 @@ packages: env-paths: 2.2.1 exponential-backoff: 3.1.1 glob: 7.2.3 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-fetch-happen: 11.1.1 nopt: 6.0.0 npmlog: 6.0.2 rimraf: 3.0.2 semver: 7.5.4 - tar: 6.1.11 + tar: 6.1.15 which: 2.0.2 transitivePeerDependencies: - supports-color @@ -16630,7 +16630,7 @@ packages: read-package-json-fast: 2.0.3 rimraf: 3.0.2 ssri: 9.0.1 - tar: 6.1.11 + tar: 6.1.15 transitivePeerDependencies: - bluebird - supports-color @@ -16658,7 +16658,7 @@ packages: read-package-json-fast: 3.0.2 sigstore: 1.8.0 ssri: 10.0.4 - tar: 6.1.11 + tar: 6.1.15 transitivePeerDependencies: - bluebird - supports-color @@ -19851,7 +19851,7 @@ packages: /write-file-atomic@2.4.3: resolution: {integrity: sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==} dependencies: - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 imurmurhash: 0.1.4 signal-exit: 3.0.7 @@ -19893,7 +19893,7 @@ packages: engines: {node: '>=6'} dependencies: detect-indent: 5.0.0 - graceful-fs: 4.2.10 + graceful-fs: 4.2.11 make-dir: 2.1.0 pify: 4.0.1 sort-keys: 2.0.0