From fb22e632ef6dcce6a7dfec9a229c7be4d6d5c894 Mon Sep 17 00:00:00 2001 From: nickreynolds Date: Mon, 5 Dec 2022 21:13:26 -0500 Subject: [PATCH] feat(did-comm): add trust ping protocol (#1080) * feat(did-comm): add trust ping protocol * chore: cleanup * chore: more test * chore: cleanup * chore: refactor test slightly * chore: stash test scratch work * fix: update jsonld resolution * chore: cleanup and fixing tests * chore: cleanup * chore: cleanup * chore: cleanup * chore: remove jsonld resolution * chore: update README * chore: PR feedback * chore: update default agent config Co-authored-by: Nick Reynolds --- __tests__/shared/didCommPacking.ts | 3 +- packages/cli/default/default.yml | 1 + packages/did-comm/README.md | 19 +- .../src/__tests__/message-handler.test.ts | 225 +++++++++++ .../trust-ping-message-handler.test.ts | 319 +++++++++++++++ packages/did-comm/src/index.ts | 1 + packages/did-comm/src/protocols/index.ts | 1 + .../protocols/trust-ping-message-handler.ts | 82 ++++ .../src/abstract-message-handler.ts | 3 + yarn.lock | 364 +++++++++--------- 10 files changed, 841 insertions(+), 177 deletions(-) create mode 100644 packages/did-comm/src/__tests__/message-handler.test.ts create mode 100644 packages/did-comm/src/__tests__/trust-ping-message-handler.test.ts create mode 100644 packages/did-comm/src/protocols/index.ts create mode 100644 packages/did-comm/src/protocols/trust-ping-message-handler.ts diff --git a/__tests__/shared/didCommPacking.ts b/__tests__/shared/didCommPacking.ts index 1aa2dea4f..5c6421930 100644 --- a/__tests__/shared/didCommPacking.ts +++ b/__tests__/shared/didCommPacking.ts @@ -57,7 +57,7 @@ export default (testContext: { afterAll(testContext.tearDown) it('should pack and unpack a plaintext message', async () => { - expect.assertions(1) + expect.assertions(2) const message = { type: 'test', to: receiver.did, @@ -68,6 +68,7 @@ export default (testContext: { packing: 'none', message, }) + expect(JSON.parse(packedMessage.message).typ).toEqual('application/didcomm-plain+json') const unpackedMessage = await agent.unpackDIDCommMessage(packedMessage) expect(unpackedMessage).toEqual({ message: { diff --git a/packages/cli/default/default.yml b/packages/cli/default/default.yml index 9034c8d04..25a61792d 100644 --- a/packages/cli/default/default.yml +++ b/packages/cli/default/default.yml @@ -151,6 +151,7 @@ messageHandler: $args: - messageHandlers: - $require: '@veramo/did-comm#DIDCommMessageHandler' + - $require: '@veramo/did-comm#TrustPingMessageHandler' - $require: '@veramo/did-jwt#JwtMessageHandler' - $require: '@veramo/credential-w3c#W3cMessageHandler' - $require: '@veramo/selective-disclosure#SdrMessageHandler' diff --git a/packages/did-comm/README.md b/packages/did-comm/README.md index 8295d12a4..ca992a5aa 100644 --- a/packages/did-comm/README.md +++ b/packages/did-comm/README.md @@ -1,3 +1,20 @@ # Veramo DIDComm -Veramo messaging plugin implementing DIDComm v2. +Veramo messaging plugin implementing DIDComm v2, as specified by the [DIDComm v2 Spec](https://identity.foundation/didcomm-messaging/spec/) as well as certain "DIDComm Protocols" + +## Spec Compliance + +### [Message Formats](https://identity.foundation/didcomm-messaging/spec/#message-formats) + +Message Envelopes: + +| Envelope | Veramo 'packing' | IANA type (`typ`) | packDIDCommMessage | unpackDIDCommMessage | notes | +| -------- | ---------------- | ----------------- | ------------------ | -------------------- | | +| plaintext | 'none' | `application/didcomm-plain+json` | [X] | [X] | | +| signed(plaintext) | 'jws' | `application/didcomm-signed+json` | [X] | [X] | | +| anoncrypt(plaintext) | 'anoncrypt' | `application/didcomm-encrypted+json` | [X] | [X] | | +| authcrypt(plaintext) | 'authcrypt' | `application/didcomm-encrypted+json` | [X] | [X] | | +| anoncrypt(sign(plaintext)) | 'anoncrypt+jws' | `application/didcomm-encrypted+json` | [ ] | [ ] | | +| authcrypt(sign(plaintext)) | 'authcrypt+jws' | `application/didcomm-encrypted+json` | [ ] | [ ] | SHOULD NOT be emitted, but MAY be accepted | +| anoncryptauthcrypt((sign(plaintext))) | '' | `application/didcomm-encrypted+json` | [ ] | [ ] | | + diff --git a/packages/did-comm/src/__tests__/message-handler.test.ts b/packages/did-comm/src/__tests__/message-handler.test.ts new file mode 100644 index 000000000..d148d3e01 --- /dev/null +++ b/packages/did-comm/src/__tests__/message-handler.test.ts @@ -0,0 +1,225 @@ +import { DIDComm } from "../didcomm" +import { + createAgent, + IDIDManager, + IEventListener, + IIdentifier, + IKeyManager, + IMessageHandler, + IResolver, + TAgent, +} from '../../../core/src' +import { DIDManager, MemoryDIDStore } from '../../../did-manager/src' +import { KeyManager, MemoryKeyStore, MemoryPrivateKeyStore } from '../../../key-manager/src' +import { KeyManagementSystem } from '../../../kms-local/src' +import { DIDResolverPlugin } from '../../../did-resolver/src' +import { Resolver } from 'did-resolver' +import { DIDCommHttpTransport } from "../transports/transports" +import { IDIDComm } from "../types/IDIDComm" +import { MessageHandler } from "../../../message-handler/src" +import { FakeDidProvider, FakeDidResolver } from "../../../test-utils/src" +import { MessagingRouter, RequestWithAgentRouter } from '../../../remote-server/src' +import { Entities, IDataStore, migrations } from '../../../data-store/src' +import express from 'express' +import { Server } from 'http' +import { DIDCommMessageHandler } from "../message-handler" +import { DataStore, DataStoreORM } from "../../../data-store/src" +import { DataSource } from 'typeorm' +import { v4 } from "uuid" + + +const DIDCommEventSniffer: IEventListener = { + eventTypes: ['DIDCommV2Message-sent', 'DIDCommV2Message-received'], + onEvent: jest.fn(), +} + +const databaseFile = `./tmp/local-database2-${Math.random().toPrecision(5)}.sqlite` + + +describe('did-comm-message-handler', () => { + let sender: IIdentifier + let recipient: IIdentifier + let agent: TAgent + let didCommEndpointServer: Server + let listeningPort = Math.round(Math.random() * 32000 + 2048) + let dbConnection: DataSource + + beforeAll(async () => { + dbConnection = new DataSource({ + name: 'test', + type: 'sqlite', + database: databaseFile, + synchronize: false, + migrations: migrations, + migrationsRun: true, + logging: false, + entities: Entities, + }) + agent = createAgent({ + plugins: [ + new KeyManager({ + store: new MemoryKeyStore(), + kms: { + // @ts-ignore + local: new KeyManagementSystem(new MemoryPrivateKeyStore()), + }, + }), + new DIDManager({ + providers: { + 'did:fake': new FakeDidProvider(), + // 'did:web': new WebDIDProvider({ defaultKms: 'local' }) + }, + store: new MemoryDIDStore(), + defaultProvider: 'did:fake', + }), + new DIDResolverPlugin({ + resolver: new Resolver({ + ...new FakeDidResolver(() => agent).getDidFakeResolver(), + }) + }), + // @ts-ignore + new DIDComm([new DIDCommHttpTransport()]), + new MessageHandler({ + messageHandlers: [ + // @ts-ignore + new DIDCommMessageHandler(), + ] + }), + new DataStore(dbConnection), + new DataStoreORM(dbConnection), + DIDCommEventSniffer + ], + }) + + sender = await agent.didManagerImport({ + did: 'did:fake:z6MkgbqNU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + keys: [ + { + type: 'Ed25519', + kid: 'didcomm-senderKey-1', + publicKeyHex: '1fe9b397c196ab33549041b29cf93be29b9f2bdd27322f05844112fad97ff92a', + privateKeyHex: + 'b57103882f7c66512dc96777cbafbeb2d48eca1e7a867f5a17a84e9a6740f7dc1fe9b397c196ab33549041b29cf93be29b9f2bdd27322f05844112fad97ff92a', + kms: 'local', + }, + ], + services: [ + { + id: 'msg1', + type: 'DIDCommMessaging', + serviceEndpoint: `http://localhost:${listeningPort}/messaging`, + }, + ], + provider: 'did:fake', + alias: 'sender', + }) + + recipient = await agent.didManagerImport({ + did: 'did:fake:z6MkrPhffVLBZpxH7xvKNyD4sRVZeZsNTWJkLdHdgWbfgNu3', + keys: [ + { + type: 'Ed25519', + kid: 'didcomm-receiverKey-1', + publicKeyHex: 'b162e405b6485eff8a57932429b192ec4de13c06813e9028a7cdadf0e2703636', + privateKeyHex: + '19ed9b6949cfd0f9a57e30f0927839a985fa699491886ebcdda6a954d869732ab162e405b6485eff8a57932429b192ec4de13c06813e9028a7cdadf0e2703636', + kms: 'local', + }, + ], + services: [ + { + id: 'msg2', + type: 'DIDCommMessaging', + serviceEndpoint: `http://localhost:${listeningPort}/messaging`, + }, + ], + provider: 'did:fake', + alias: 'receiver', + }) + // console.log("sender: ", sender) + // console.log("recipient: ", recipient) + + const requestWithAgent = RequestWithAgentRouter({ agent }) + + await new Promise((resolve) => { + //setup a server to receive HTTP messages and forward them to this agent to be processed as DIDComm messages + const app = express() + // app.use(requestWithAgent) + app.use( + '/messaging', + requestWithAgent, + MessagingRouter({ + metaData: { type: 'DIDComm', value: 'integration test' }, + }), + ) + didCommEndpointServer = app.listen(listeningPort, () => { + resolve(true) + }) + }) + }) + + afterAll(async () => { + try { + await new Promise((resolve, reject) => didCommEndpointServer?.close(resolve)) + } catch (e) { + //nop + } + }) + + const expectMessageReceived = (id: string, packing: string) => { + // recipient sends response + // expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + // { + // data: `${id}`, + // type: 'DIDCommV2Message-sent' + // }, + // expect.anything(), + // ) + + // original sender receives response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { + hello: 'world' + }, + from: sender.did, + id: `${id}`, + to: recipient.did, + type: 'fake' + }, + metaData: { packing }, + }, + type: 'DIDCommV2Message-received' + }, + expect.anything(), + ) + } + + const getRegularMessage = () => { + return { id: v4(), type: 'fake', to: recipient.did, from: sender.did, body: { hello: 'world' }} + } + + it('should pack and unpack message with none packing', async () => { + const anyMessage = getRegularMessage() + const packedMessage = await agent.packDIDCommMessage({ message: anyMessage, packing: 'none'}) + const unpackedMessage = await agent.unpackDIDCommMessage(packedMessage) + expect(unpackedMessage.message).toEqual({...anyMessage, typ: 'application/didcomm-plain+json'}) + }) + + it('should pack and unpack message with authcrypt packing', async () => { + const anyMessage = getRegularMessage() + const packedMessage = await agent.packDIDCommMessage({ message: anyMessage, packing: 'authcrypt'}) + const unpackedMessage = await agent.unpackDIDCommMessage(packedMessage) + expect(unpackedMessage.message).toEqual(anyMessage) + }) + + it('should handle packed (with authcrypt) message directly', async () => { + const anyMessage = getRegularMessage() + const packedMessage = await agent.packDIDCommMessage({ message: anyMessage, packing: 'authcrypt'}) + const id = anyMessage.id + await agent.handleMessage({raw: packedMessage.message}) + expectMessageReceived(id, 'authcrypt') + }) +}) diff --git a/packages/did-comm/src/__tests__/trust-ping-message-handler.test.ts b/packages/did-comm/src/__tests__/trust-ping-message-handler.test.ts new file mode 100644 index 000000000..c35c6b02f --- /dev/null +++ b/packages/did-comm/src/__tests__/trust-ping-message-handler.test.ts @@ -0,0 +1,319 @@ +import { DIDComm } from '../didcomm' +import { + createAgent, + IDIDManager, + IEventListener, + IIdentifier, + IKeyManager, + IMessageHandler, + IResolver, + TAgent, +} from '../../../core/src' +import { DIDManager, MemoryDIDStore } from '../../../did-manager/src' +import { KeyManager, MemoryKeyStore, MemoryPrivateKeyStore } from '../../../key-manager/src' +import { KeyManagementSystem } from '../../../kms-local/src' +import { DIDResolverPlugin } from '../../../did-resolver/src' +import { Resolver } from 'did-resolver' +import { DIDCommHttpTransport } from '../transports/transports' +import { IDIDComm } from '../types/IDIDComm' +import { MessageHandler } from '../../../message-handler/src' +import { createTrustPingMessage, TrustPingMessageHandler } from '../protocols/trust-ping-message-handler' +import { FakeDidProvider, FakeDidResolver } from '../../../test-utils/src' +import { MessagingRouter, RequestWithAgentRouter } from '../../../remote-server/src' +import { Entities, IDataStore, MetaData, migrations } from '../../../data-store/src' +import express from 'express' +import { Server } from 'http' +import { DIDCommMessageHandler } from '../message-handler' +import { DataStore, DataStoreORM } from '../../../data-store/src' +import { DataSource } from 'typeorm' + + +const DIDCommEventSniffer: IEventListener = { + eventTypes: ['DIDCommV2Message-sent', 'DIDCommV2Message-received'], + onEvent: jest.fn(), +} + +const databaseFile = `./tmp/local-database2-${Math.random().toPrecision(5)}.sqlite` + + +describe('trust-ping-message-handler', () => { + let sender: IIdentifier + let recipient: IIdentifier + let agent: TAgent + let didCommEndpointServer: Server + let listeningPort = Math.round(Math.random() * 32000 + 2048) + let dbConnection: DataSource + + beforeAll(async () => { + dbConnection = new DataSource({ + name: 'test', + type: 'sqlite', + database: databaseFile, + synchronize: false, + migrations: migrations, + migrationsRun: true, + logging: false, + entities: Entities, + }) + agent = createAgent({ + plugins: [ + new KeyManager({ + store: new MemoryKeyStore(), + kms: { + // @ts-ignore + local: new KeyManagementSystem(new MemoryPrivateKeyStore()), + }, + }), + new DIDManager({ + providers: { + 'did:fake': new FakeDidProvider(), + // 'did:web': new WebDIDProvider({ defaultKms: 'local' }) + }, + store: new MemoryDIDStore(), + defaultProvider: 'did:fake', + }), + new DIDResolverPlugin({ + resolver: new Resolver({ + ...new FakeDidResolver(() => agent).getDidFakeResolver(), + }) + }), + // @ts-ignore + new DIDComm([new DIDCommHttpTransport()]), + new MessageHandler({ + messageHandlers: [ + // @ts-ignore + new DIDCommMessageHandler(), + // @ts-ignore + new TrustPingMessageHandler() + ] + }), + new DataStore(dbConnection), + new DataStoreORM(dbConnection), + DIDCommEventSniffer + ], + }) + + sender = await agent.didManagerImport({ + did: 'did:fake:z6MkgbqNU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + keys: [ + { + type: 'Ed25519', + kid: 'didcomm-senderKey-1', + publicKeyHex: '1fe9b397c196ab33549041b29cf93be29b9f2bdd27322f05844112fad97ff92a', + privateKeyHex: + 'b57103882f7c66512dc96777cbafbeb2d48eca1e7a867f5a17a84e9a6740f7dc1fe9b397c196ab33549041b29cf93be29b9f2bdd27322f05844112fad97ff92a', + kms: 'local', + }, + ], + services: [ + { + id: 'msg1', + type: 'DIDCommMessaging', + serviceEndpoint: `http://localhost:${listeningPort}/messaging`, + }, + ], + provider: 'did:fake', + alias: 'sender', + }) + + recipient = await agent.didManagerImport({ + did: 'did:fake:z6MkrPhffVLBZpxH7xvKNyD4sRVZeZsNTWJkLdHdgWbfgNu3', + keys: [ + { + type: 'Ed25519', + kid: 'didcomm-receiverKey-1', + publicKeyHex: 'b162e405b6485eff8a57932429b192ec4de13c06813e9028a7cdadf0e2703636', + privateKeyHex: + '19ed9b6949cfd0f9a57e30f0927839a985fa699491886ebcdda6a954d869732ab162e405b6485eff8a57932429b192ec4de13c06813e9028a7cdadf0e2703636', + kms: 'local', + }, + ], + services: [ + { + id: 'msg2', + type: 'DIDCommMessaging', + serviceEndpoint: `http://localhost:${listeningPort}/messaging`, + }, + ], + provider: 'did:fake', + alias: 'receiver', + }) + // console.log('sender: ', sender) + // console.log('recipient: ', recipient) + + const requestWithAgent = RequestWithAgentRouter({ agent }) + + await new Promise((resolve) => { + //setup a server to receive HTTP messages and forward them to this agent to be processed as DIDComm messages + const app = express() + // app.use(requestWithAgent) + app.use( + '/messaging', + requestWithAgent, + MessagingRouter({ + metaData: { type: 'DIDComm', value: 'integration test' }, + }), + ) + didCommEndpointServer = app.listen(listeningPort, () => { + resolve(true) + }) + }) + }) + + afterAll(async () => { + try { + await new Promise((resolve, reject) => didCommEndpointServer?.close(resolve)) + } catch (e) { + //nop + } + }) + + const expectResponse = (tpid: string) => { + // recipient sends response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: `${tpid}-response`, + type: 'DIDCommV2Message-sent' + }, + expect.anything(), + ) + + // original sender receives response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: {}, + from: recipient.did, + id: `${tpid}-response`, + thid: tpid, + to: sender.did, + type: 'https://didcomm.org/trust-ping/2.0/ping-response', + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received' + }, + expect.anything(), + ) + } + + const expectPing = (tpid: string, packing: string) => { + // recipient sends response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: `${tpid}`, + type: 'DIDCommV2Message-sent' + }, + expect.anything(), + ) + + // original sender receives response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { + responseRequested: true + }, + from: sender.did, + id: `${tpid}`, + to: recipient.did, + type: 'https://didcomm.org/trust-ping/2.0/ping', + + }, + metaData: { packing }, + }, + type: 'DIDCommV2Message-received' + }, + expect.anything(), + ) + } + + // this test should cover message handler directly without any DIDCommMessageHandler 'pre-processing' + it('should handle trust ping message directly', async () => { + const trustPingMessage = createTrustPingMessage(sender.did, recipient.did) + const tpid = trustPingMessage.id + let metaData: MetaData[] = [] + await (new TrustPingMessageHandler()).handle({ ...trustPingMessage, isValid: () => true, addMetaData: (meta) => { + metaData.push(meta) + }, getLastMetaData: () => { + return { 'type': 'fake', value: 'fake'} + }}, { agent }) + expectResponse(tpid) + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledTimes(2) + }) + + it('should pack and unpack trust ping message with none packing', async () => { + const trustPingMessage = createTrustPingMessage(sender.did, recipient.did) + const packedMessage = await agent.packDIDCommMessage({ message: trustPingMessage, packing: 'none'}) + const unpackedMessage = await agent.unpackDIDCommMessage(packedMessage) + expect(unpackedMessage.message.id).toEqual(trustPingMessage.id) + }) + + it('should pack and unpack trust ping message with authcrypt packing', async () => { + const trustPingMessage = createTrustPingMessage(sender.did, recipient.did) + const packedMessage = await agent.packDIDCommMessage({ message: trustPingMessage, packing: 'authcrypt'}) + const unpackedMessage = await agent.unpackDIDCommMessage(packedMessage) + expect(unpackedMessage.message.id).toEqual(trustPingMessage.id) + }) + + it('should handle packed (with authcrypt) trust ping message directly', async () => { + const trustPingMessage = createTrustPingMessage(sender.did, recipient.did) + const packedMessage = await agent.packDIDCommMessage({ message: trustPingMessage, packing: 'authcrypt'}) + const tpid = trustPingMessage.id + await agent.handleMessage({raw: packedMessage.message}) + + expectResponse(tpid) + }) + + + it('should handle none-packed trust ping message sent via didcomm', async () => { + const trustPingMessage = createTrustPingMessage(sender.did, recipient.did) + const packedMessage = await agent.packDIDCommMessage({ packing: 'none', message: trustPingMessage}) + const tpid = trustPingMessage.id + await agent.sendDIDCommMessage({ messageId: trustPingMessage.id, packedMessage, recipientDidUrl: recipient.did }) + + // recipient sends response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: `${tpid}`, + type: 'DIDCommV2Message-sent' + }, + expect.anything(), + ) + + // original sender receives response + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { + responseRequested: true + }, + from: sender.did, + id: `${tpid}`, + to: recipient.did, + type: 'https://didcomm.org/trust-ping/2.0/ping', + typ: 'application/didcomm-plain+json' + }, + metaData: { packing: 'none' }, + }, + type: 'DIDCommV2Message-received' + }, + expect.anything(), + ) + }) + + + it('should handle authcrypt-packed trust ping message sent via didcomm', async () => { + const trustPingMessage = createTrustPingMessage(sender.did, recipient.did) + const tpid = trustPingMessage.id + const packedMessage = await agent.packDIDCommMessage({ packing: 'authcrypt', message: trustPingMessage}) + await agent.sendDIDCommMessage({ messageId: trustPingMessage.id, packedMessage, recipientDidUrl: recipient.did }) + + expectPing(tpid, 'authcrypt') + expectResponse(tpid) + }) + +}) diff --git a/packages/did-comm/src/index.ts b/packages/did-comm/src/index.ts index a5ce79c92..3c510a22e 100644 --- a/packages/did-comm/src/index.ts +++ b/packages/did-comm/src/index.ts @@ -16,6 +16,7 @@ export * from './types/message-types' export * from './types/utility-types' export * from './types/IDIDComm' export { DIDCommMessageHandler } from './message-handler' +export * from './protocols' export * from './transports/transports' /** * @beta This API may change without a BREAKING CHANGE notice. diff --git a/packages/did-comm/src/protocols/index.ts b/packages/did-comm/src/protocols/index.ts new file mode 100644 index 000000000..8e2b99659 --- /dev/null +++ b/packages/did-comm/src/protocols/index.ts @@ -0,0 +1 @@ +export { TrustPingMessageHandler } from "./trust-ping-message-handler" \ No newline at end of file diff --git a/packages/did-comm/src/protocols/trust-ping-message-handler.ts b/packages/did-comm/src/protocols/trust-ping-message-handler.ts new file mode 100644 index 000000000..f5e53ab35 --- /dev/null +++ b/packages/did-comm/src/protocols/trust-ping-message-handler.ts @@ -0,0 +1,82 @@ +import { IAgentContext, IDIDManager, IKeyManager } from '@veramo/core' +import { AbstractMessageHandler, Message } from '@veramo/message-handler' +import Debug from 'debug' +import { v4 } from 'uuid' +import { IDIDComm } from '../types/IDIDComm' +import { IDIDCommMessage } from '../types/message-types' + +const debug = Debug('veramo:did-comm:trust-ping-message-handler') + +type IContext = IAgentContext + +const TRUST_PING_MESSAGE_TYPE = 'https://didcomm.org/trust-ping/2.0/ping' +const TRUST_PING_RESPONSE_MESSAGE_TYPE = 'https://didcomm.org/trust-ping/2.0/ping-response' + +export function createTrustPingMessage(senderDidUrl: string, recipientDidUrl: string): IDIDCommMessage { + return { + type: TRUST_PING_MESSAGE_TYPE, + from: senderDidUrl, + to: recipientDidUrl, + id: v4(), + body: { + responseRequested: true + } + } +} + +export function createTrustPingResponse(senderDidUrl: string, recipientDidUrl: string, pingId: string): IDIDCommMessage { + return { + type: TRUST_PING_RESPONSE_MESSAGE_TYPE, + from: senderDidUrl, + to: recipientDidUrl, + id: `${pingId}-response`, + thid: pingId, + body: {} + } +} + +/** + * A plugin for the {@link @veramo/message-handler#MessageHandler} that handles Trust Ping messages. + * @beta This API may change without a BREAKING CHANGE notice. + */ +export class TrustPingMessageHandler extends AbstractMessageHandler { + constructor() { + super() + } + + /** + * Handles a Trust Ping Message + * https://identity.foundation/didcomm-messaging/spec/#trust-ping-protocol-10 + */ + public async handle(message: Message, context: IContext): Promise { + if (message.type === TRUST_PING_MESSAGE_TYPE) { + debug('TrustPing Message Received') + try { + const { from, to, id } = message + if (!from) { + throw new Error("invalid_argument: Trust Ping Message received without `from` set") + } + if (!to) { + throw new Error("invalid_argument: Trust Ping Message received without `to` set") + } + const response = createTrustPingResponse(to!, from!, id) + const packedResponse = await context.agent.packDIDCommMessage({ message: response, packing: 'authcrypt'}) + const sent = await context.agent.sendDIDCommMessage({ + messageId: response.id, + packedMessage: packedResponse, + recipientDidUrl: from!, + }) + message.addMetaData({ type: 'TrustPingResponseSent', value: sent }) + } catch (ex) { + debug(ex) + } + return message + } else if (message.type === TRUST_PING_RESPONSE_MESSAGE_TYPE) { + debug('TrustPingResponse Message Received') + message.addMetaData({ type: 'TrustPingResponseReceived', value: 'true'}) + return message + } + + return super.handle(message, context) + } +} diff --git a/packages/message-handler/src/abstract-message-handler.ts b/packages/message-handler/src/abstract-message-handler.ts index 2e7be5990..44f5707aa 100644 --- a/packages/message-handler/src/abstract-message-handler.ts +++ b/packages/message-handler/src/abstract-message-handler.ts @@ -1,6 +1,8 @@ import { IAgentContext } from '@veramo/core' import { Message } from './message' +import Debug from 'debug' +const debug = Debug('veramo:message-handler') export const unsupportedMessageTypeError = new Error('Unsupported message type') /** @@ -19,6 +21,7 @@ export abstract class AbstractMessageHandler { if (this.nextMessageHandler) { return this.nextMessageHandler.handle(message, context) } + debug("can't handle message: ", message) return Promise.reject(unsupportedMessageTypeError) } } diff --git a/yarn.lock b/yarn.lock index e05b78fb7..f60b19126 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2972,9 +2972,9 @@ integrity sha512-KYRCASVTv6aeUi1tsF8/vpyR7zpfs3FUzy2Jqm+MU+LmUKhQ0y2FpfwqkCcxSg2ua4GALJd8k2R76WxwZGbQpA== "@noble/hashes@~1.1.1": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.3.tgz#360afc77610e0a61f3417e497dcf36862e4f8111" - integrity sha512-CE0FCR57H2acVI5UOzIGSSIYxZ6v/HOhDR0Ro9VLyhnzLwx0o8W1mmgaqlEUx4049qJDlIBRztv5k+MM8vbO3A== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.1.4.tgz#2611ebf5764c1bf754da7c7794de4fb30512336d" + integrity sha512-+PYsVPrTSqtVjatKt2A/Proukn2Yrz61OBThOCKErc5w2/r1Fh37vbDv0Eah7pyNltrmacjwTvdw3JoR+WE4TA== "@noble/secp256k1@1.6.3", "@noble/secp256k1@~1.6.0": version "1.6.3" @@ -3609,9 +3609,9 @@ integrity sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw== "@semantic-release/github@^8.0.0": - version "8.0.6" - resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.6.tgz#5235386d65a5d7d650dc10a6ebce908d213234f7" - integrity sha512-ZxgaxYCeqt9ylm2x3OPqUoUqBw1p60LhxzdX6BqJlIBThupGma98lttsAbK64T6L6AlNa2G5T66BbiG8y0PIHQ== + version "8.0.7" + resolved "https://registry.yarnpkg.com/@semantic-release/github/-/github-8.0.7.tgz#643aee7a5cdd2acd3ae643bb90ad4ac796901de6" + integrity sha512-VtgicRIKGvmTHwm//iqTh/5NGQwsncOMR5vQK9pMT92Aem7dv37JFKKRuulUsAnUOIlO4G8wH3gPiBAA0iW0ww== dependencies: "@octokit/rest" "^19.0.0" "@semantic-release/error" "^3.0.0" @@ -3619,7 +3619,7 @@ bottleneck "^2.18.1" debug "^4.0.0" dir-glob "^3.0.0" - fs-extra "^10.0.0" + fs-extra "^11.0.0" globby "^11.0.0" http-proxy-agent "^5.0.0" https-proxy-agent "^5.0.0" @@ -3688,9 +3688,9 @@ integrity sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA== "@sinonjs/commons@^1.7.0": - version "1.8.5" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.5.tgz#e280c94c95f206dcfd5aca00a43f2156b758c764" - integrity sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA== + version "1.8.6" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.8.6.tgz#80c516a4dc264c2a69115e7578d62581ff455ed9" + integrity sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ== dependencies: type-detect "4.0.8" @@ -4049,10 +4049,10 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@transmute/credentials-context@^0.7.0-unstable.67", "@transmute/credentials-context@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/credentials-context/-/credentials-context-0.7.0-unstable.70.tgz#30c8a8050b5c99825f4691e665b5746066ee5f79" - integrity sha512-+pvqn60dLlvh9SccOFXov9agliGgp26qmrHeK+nRhLBchEfvqQv46FTtRPusxym3ccUTCQuH6++S3SFccGqZiw== +"@transmute/credentials-context@^0.7.0-unstable.67", "@transmute/credentials-context@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/credentials-context/-/credentials-context-0.7.0-unstable.71.tgz#bb86dc5dabf945deb8adfb412755f10be0054beb" + integrity sha512-YC+8X89kCCNtYlnAY0GLfkUNlSV0SiZnbgxF6xF2GInVoyT1FLKmGw5yIuVGir94ZTph2SfjN2/jPdEElsI26A== "@transmute/did-context@^0.6.1-unstable.25", "@transmute/did-context@^0.6.1-unstable.36": version "0.6.1-unstable.37" @@ -4112,30 +4112,30 @@ "@transmute/ld-key-pair" "^0.6.1-unstable.37" "@transmute/x25519-key-pair" "^0.6.1-unstable.37" -"@transmute/ed25519-key-pair@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.7.0-unstable.70.tgz#294161e5872659cc454650d4403d36e080dc92b1" - integrity sha512-ofXGVf8FfJGybT9x1v9XulBDKcuyECNubNqBrwBlF58BlmaQTGBTAf9/PuHnIN2VXL7QaHBudkPIfuN+pIPGOA== +"@transmute/ed25519-key-pair@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/ed25519-key-pair/-/ed25519-key-pair-0.7.0-unstable.71.tgz#862fecfa970edcdc35758c75c6eec2274b5c091c" + integrity sha512-jNQCPZhBnvh0OcdMDD8XpNeOdhdxcOJ8lXpezlFVgrGe1DgM4+dDoCSNQE0ZoF0XkZv9u8M70u1UCsntk4krmw== dependencies: "@stablelib/ed25519" "^1.0.1" - "@transmute/ld-key-pair" "^0.7.0-unstable.70" - "@transmute/x25519-key-pair" "^0.7.0-unstable.70" + "@transmute/ld-key-pair" "^0.7.0-unstable.71" + "@transmute/x25519-key-pair" "^0.7.0-unstable.71" "@transmute/ed25519-signature-2018@^0.7.0-unstable.67": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/ed25519-signature-2018/-/ed25519-signature-2018-0.7.0-unstable.70.tgz#1fd5f1a9b8d9c83c32a0ea39313b67d908ee31a1" - integrity sha512-/MniA8XXxe7kR7l+lp6gVjfiQ9oZHXMYuHYB+eU/9zCQXdKsZpCG8itL4syPV92xfVR70HvR8XFgpLqqETTNFg== + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/ed25519-signature-2018/-/ed25519-signature-2018-0.7.0-unstable.71.tgz#d103668555dbcd1acec6711f9fe6305e0310fdcb" + integrity sha512-+eLV7t65S/uA6bMQK6Y6D8OlhMm3uuzYSC7kzpxrMzwImLqmkA7T3CxPus5eSi8GoFMdveryEqF0aLKzr4hkPg== dependencies: - "@transmute/credentials-context" "^0.7.0-unstable.70" + "@transmute/credentials-context" "^0.7.0-unstable.71" "@transmute/ed25519-key-pair" "0.7.0-unstable.2" - "@transmute/jose-ld" "^0.7.0-unstable.70" - "@transmute/security-context" "^0.7.0-unstable.70" + "@transmute/jose-ld" "^0.7.0-unstable.71" + "@transmute/security-context" "^0.7.0-unstable.71" jsonld "^5.2.0" -"@transmute/jose-ld@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/jose-ld/-/jose-ld-0.7.0-unstable.70.tgz#1f3ae442d2014f29170310c1035032cc06496f9d" - integrity sha512-PCxwMzsuFl39kiKM6+TlUCdIGjcXV6Zqi5iNA+g4Et4/LhjXVQCC4eD6DRPHJnLfGW2LxnMOUPfGg4KV1hZzOg== +"@transmute/jose-ld@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/jose-ld/-/jose-ld-0.7.0-unstable.71.tgz#e792c494ed2bb34944e39b8f157a067e10c57671" + integrity sha512-ff90WojWbspjxC8u3jGX134z8Cg3L+8q/xWbpGLz7Y1aDBz3C8Popx9MAwgLLfegS+iTbIcee/iXU4JCqUgboA== dependencies: "@peculiar/webcrypto" "^1.1.6" "@stablelib/aes-kw" "^1.0.0" @@ -4145,15 +4145,15 @@ web-streams-polyfill "^3.0.3" "@transmute/json-web-signature@^0.7.0-unstable.67": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/json-web-signature/-/json-web-signature-0.7.0-unstable.70.tgz#42b13d58fd00a145db934ace9527b013e8b27dc4" - integrity sha512-xIYKZWbhodcujNywrQA8I+vfB0pYhYr2rvA3au3q/QXQl8A3y+Zi+99Li+hfYb9GhSp12HpZzeI3Ua9U853e0Q== - dependencies: - "@transmute/ed25519-key-pair" "^0.7.0-unstable.70" - "@transmute/jose-ld" "^0.7.0-unstable.70" - "@transmute/secp256k1-key-pair" "^0.7.0-unstable.70" - "@transmute/security-context" "^0.7.0-unstable.70" - "@transmute/web-crypto-key-pair" "^0.7.0-unstable.70" + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/json-web-signature/-/json-web-signature-0.7.0-unstable.71.tgz#3de048f3bfc2fdb6e3becd1e965d67ad763c09ba" + integrity sha512-JKV6Da8zV1TxbhrnQmbLSZR4Eof4+oW+d1tDsvPdMNtUuGNlYTOj4m8vl5YrV+vFC19CFrSIsMBhjZElxjWVBQ== + dependencies: + "@transmute/ed25519-key-pair" "^0.7.0-unstable.71" + "@transmute/jose-ld" "^0.7.0-unstable.71" + "@transmute/secp256k1-key-pair" "^0.7.0-unstable.71" + "@transmute/security-context" "^0.7.0-unstable.71" + "@transmute/web-crypto-key-pair" "^0.7.0-unstable.71" jsonld "^5.2.0" "@transmute/ld-key-pair@^0.6.1-unstable.36", "@transmute/ld-key-pair@^0.6.1-unstable.37": @@ -4161,18 +4161,18 @@ resolved "https://registry.yarnpkg.com/@transmute/ld-key-pair/-/ld-key-pair-0.6.1-unstable.37.tgz#ffe8af071b4ea991a49c795724b93999f4e6c8af" integrity sha512-DcTpEruAQBfOd2laZkg3uCQ+67Y7dw2hsvo42NAQ5tItCIx5AClP7zccri7T2JUcfDUFaE32z/BLTMEKYt3XZQ== -"@transmute/ld-key-pair@^0.7.0-unstable.2", "@transmute/ld-key-pair@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/ld-key-pair/-/ld-key-pair-0.7.0-unstable.70.tgz#e48e2b1c0e37ee45b015e84738429ddca0a8010f" - integrity sha512-pe8z0S2REfLhtd2QXFzfinjl0y4yCFxz3J7cjZxUy5lrciPsaYxwboZreUz6BtqrDAiuyuehDB6w7jLvPyvseg== +"@transmute/ld-key-pair@^0.7.0-unstable.2", "@transmute/ld-key-pair@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/ld-key-pair/-/ld-key-pair-0.7.0-unstable.71.tgz#f2ebaa57e397ec3d62269facc3f51f34db0fd641" + integrity sha512-2DjaoA1kRTW4sIOe6CkXiMiXLFnQ9A8djoLKtpWTgLVaCzEinnaTr4AK2+K9KuRNj4VLt6WbYFUvGeLQlbxTNg== -"@transmute/secp256k1-key-pair@^0.7.0-unstable.2", "@transmute/secp256k1-key-pair@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/secp256k1-key-pair/-/secp256k1-key-pair-0.7.0-unstable.70.tgz#4f0aa0c2f6a5744ec723069dff31503ee1a6c8d0" - integrity sha512-Awd7Nwz8wzjCjkAV+c9I4uMbmswxsD1mDl0H9+wvuyziNpWFSAxpJiRHX1bSHPXT8VDPGWzt7i6V5cM2GAQLAw== +"@transmute/secp256k1-key-pair@^0.7.0-unstable.2", "@transmute/secp256k1-key-pair@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/secp256k1-key-pair/-/secp256k1-key-pair-0.7.0-unstable.71.tgz#dacdb7bf81202d36c5a23e63fff6de5323a20100" + integrity sha512-Yj5PN+XeTGOuvBNckYivfUHUnscBLd7577D4WSG/DUzDUn08jXQnz8u/XKM595OnYIfG4yq9NnApbb+EMsw4GA== dependencies: "@bitauth/libauth" "^1.18.1" - "@transmute/ld-key-pair" "^0.7.0-unstable.70" + "@transmute/ld-key-pair" "^0.7.0-unstable.71" secp256k1 "^4.0.2" "@transmute/security-context@^0.6.1-unstable.36": @@ -4180,18 +4180,18 @@ resolved "https://registry.yarnpkg.com/@transmute/security-context/-/security-context-0.6.1-unstable.37.tgz#532b9238efd80dbaaa3e7dd663107cd925afadcc" integrity sha512-GtLmG65qlORrz/2S4I74DT+vA4+qXsFxrMr0cNOXjUqZBd/AW1PTrFnryLF9907BfoiD58HC9qb1WVGWjSlBYw== -"@transmute/security-context@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/security-context/-/security-context-0.7.0-unstable.70.tgz#d57aa0d6f2dd45986eaf07a31e27e5a027248c05" - integrity sha512-9I1687MlnrN0iy85UXD13AiFW09H9d5fKHxSTRIh0Nf79h9V023er7Qegb5pSvlZzi7q1f1JdgiAYyYiv55Ufg== +"@transmute/security-context@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/security-context/-/security-context-0.7.0-unstable.71.tgz#a9d227c13952f20ab62a9e4c67a9a44644401a88" + integrity sha512-YGPsu3+YOsSV2dZ2Rz92sEQYmLuL5ciHykNqnWBmWrsYB0APfrUffPhK02Jq6qPeVNf+YHCG0CXqXwuAb0N0ig== -"@transmute/web-crypto-key-pair@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/web-crypto-key-pair/-/web-crypto-key-pair-0.7.0-unstable.70.tgz#f822068600a4c352c7de89f8ccc63291cf153f29" - integrity sha512-iWEI64hLnCKT4QHIDWmo8ad5qsoYFnM08pcjPFMO7INSYokEVE2IMWaOkFWDwDvzwLIPoo14EtT/ellcpPvAmg== +"@transmute/web-crypto-key-pair@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/web-crypto-key-pair/-/web-crypto-key-pair-0.7.0-unstable.71.tgz#68a22bd269dfd6ae164b5747c89c46a3cd6745bb" + integrity sha512-J1YMZXgw0fvGSioBquwuY9NqAnY4/81jxMvMr8/b6+TgBWggfsPi1dFfSHbdmWDro/kZIwF/iClzMNagpQ7SQA== dependencies: "@peculiar/webcrypto" "^1.1.6" - "@transmute/ld-key-pair" "^0.7.0-unstable.70" + "@transmute/ld-key-pair" "^0.7.0-unstable.71" big-integer "^1.6.48" "@transmute/x25519-key-pair@^0.6.1-unstable.37": @@ -4202,13 +4202,13 @@ "@stablelib/x25519" "^1.0.0" "@transmute/ld-key-pair" "^0.6.1-unstable.37" -"@transmute/x25519-key-pair@^0.7.0-unstable.1", "@transmute/x25519-key-pair@^0.7.0-unstable.2", "@transmute/x25519-key-pair@^0.7.0-unstable.70": - version "0.7.0-unstable.70" - resolved "https://registry.yarnpkg.com/@transmute/x25519-key-pair/-/x25519-key-pair-0.7.0-unstable.70.tgz#4a6efe78700ab7157f370ac4377d2820c8259f58" - integrity sha512-bzRQ+UJdY/++rPTzXUgnYhNBhJrLMdOg1/qJk/rk5ZVFIEeBDh2XAvHUkFltl+PsVQnBj6ae0g57HqEVDHgXEA== +"@transmute/x25519-key-pair@^0.7.0-unstable.1", "@transmute/x25519-key-pair@^0.7.0-unstable.2", "@transmute/x25519-key-pair@^0.7.0-unstable.71": + version "0.7.0-unstable.71" + resolved "https://registry.yarnpkg.com/@transmute/x25519-key-pair/-/x25519-key-pair-0.7.0-unstable.71.tgz#d890de4e05d3518cb19d05a3bf088a95665a60b9" + integrity sha512-pmYojJzInwMfzZDLqAIVnPcem2gj2ieCEZ3cq1NZWsEJ0wGh0/8K4gx1n0+bOgEC1LyLD43aue3Ai9BRhNrpgw== dependencies: "@stablelib/x25519" "^1.0.0" - "@transmute/ld-key-pair" "^0.7.0-unstable.70" + "@transmute/ld-key-pair" "^0.7.0-unstable.71" "@trufflesuite/bigint-buffer@1.1.10": version "1.1.10" @@ -4290,9 +4290,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.4", "@types/babel__traverse@^7.0.6": - version "7.18.2" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.2.tgz#235bf339d17185bdec25e024ca19cce257cc7309" - integrity sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg== + version "7.18.3" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.18.3.tgz#dfc508a85781e5698d5b33443416b6268c4b3e8d" + integrity sha512-1kbcJ40lLB7MHsj39U4Sh1uTd2E7rLEa79kmDpI6cy+XiXsteB3POdQomoq4FxszMrO3ZYchkhYJw7A2862b3w== dependencies: "@babel/types" "^7.3.0" @@ -4510,9 +4510,9 @@ jest-environment-node ">=24 <=27" "@types/jest@*": - version "29.2.3" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.3.tgz#f5fd88e43e5a9e4221ca361e23790d48fcf0a211" - integrity sha512-6XwoEbmatfyoCjWRX7z0fKMmgYKe9+/HrviJ5k0X/tjJWHGAezZOfYaxqQKuzG/TvQyr+ktjm4jgbk0s4/oF2w== + version "29.2.4" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.2.4.tgz#9c155c4b81c9570dbd183eb8604aa0ae80ba5a5b" + integrity sha512-PipFB04k2qTRPePduVLTRiPzQfvMeLwUN3Z21hsAKaB/W9IIzgB2pizCL466ftJlcyZqnHoC9ZHpxLGl3fS86A== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -4602,16 +4602,21 @@ dependencies: node-fetch "*" -"@types/node@*", "@types/node@18.11.9": - version "18.11.9" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" - integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== +"@types/node@*": + version "18.11.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.11.tgz#1d455ac0211549a8409d3cdb371cd55cc971e8dc" + integrity sha512-KJ021B1nlQUBLopzZmPBVuGU9un7WJd/W4ya7Ih02B4Uwky5Nja0yGYav2EfYIk0RR2Q9oVhf60S2XR1BCWJ2g== "@types/node@12.20.24": version "12.20.24" resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.24.tgz#c37ac69cb2948afb4cef95f424fa0037971a9a5c" integrity sha512-yxDeaQIAJlMav7fH5AQqPH1u8YIuhYJXYBzxaQ4PifsU0GDO38MSdmEDeRlIxrKbC6NbEaaEHDanWb+y30U8SQ== +"@types/node@18.11.9": + version "18.11.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.11.9.tgz#02d013de7058cea16d36168ef2fc653464cfbad4" + integrity sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg== + "@types/normalize-package-data@^2.4.0": version "2.4.1" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301" @@ -4690,9 +4695,9 @@ "@types/react" "*" "@types/react@*", "@types/react@^18.0.21": - version "18.0.25" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.25.tgz#8b1dcd7e56fe7315535a4af25435e0bb55c8ae44" - integrity sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g== + version "18.0.26" + resolved "https://registry.yarnpkg.com/@types/react/-/react-18.0.26.tgz#8ad59fc01fef8eaf5c74f4ea392621749f0b7917" + integrity sha512-hCR3PJQsAIXyxhTNSiDFY//LhnMZWpNNr5etoCqx/iUfGc5gXWtQR2Phl908jVR6uPXacojQWTg4qRpkxTuGug== dependencies: "@types/prop-types" "*" "@types/scheduler" "*" @@ -4812,9 +4817,9 @@ "@types/yargs-parser" "*" "@types/yargs@^17.0.8": - version "17.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.14.tgz#0943473052c24bd8cf2d1de25f1a710259327237" - integrity sha512-9Pj7abXoW1RSTcZaL2Hk6G2XyLMlp5ECdVC/Zf2p/KBjC3srijLGgRAXOBjtFrJoIrvxdTKyKDA14bEcbxBaWw== + version "17.0.15" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.15.tgz#5b62c89fb049e2fc8378394a2861a593055f0866" + integrity sha512-ZHc4W2dnEQPfhn06TBEdWaiUHEZAocYaiVMfwOipY5jcJt/251wVrKCBWBetGZWO5CF8tdb7L3DmdxVlZ2BOIg== dependencies: "@types/yargs-parser" "*" @@ -4826,13 +4831,13 @@ "@types/node" "*" "@typescript-eslint/eslint-plugin@^5.5.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.44.0.tgz#105788f299050c917eb85c4d9fd04b089e3740de" - integrity sha512-j5ULd7FmmekcyWeArx+i8x7sdRHzAtXTkmDPthE4amxZOWKFK7bomoJ4r7PJ8K7PoMzD16U8MmuZFAonr1ERvw== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.45.1.tgz#ee5b51405f6c9ee7e60e4006d68c69450d3b4536" + integrity sha512-cOizjPlKEh0bXdFrBLTrI/J6B/QMlhwE9auOov53tgB+qMukH6/h8YAK/qw+QJGct/PTbdh2lytGyipxCcEtAw== dependencies: - "@typescript-eslint/scope-manager" "5.44.0" - "@typescript-eslint/type-utils" "5.44.0" - "@typescript-eslint/utils" "5.44.0" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/type-utils" "5.45.1" + "@typescript-eslint/utils" "5.45.1" debug "^4.3.4" ignore "^5.2.0" natural-compare-lite "^1.4.0" @@ -4841,78 +4846,78 @@ tsutils "^3.21.0" "@typescript-eslint/experimental-utils@^5.0.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.44.0.tgz#51ee9699532270ce3c95e2dee4313d18c24fad56" - integrity sha512-j8GLemAySe8oUCgILdUaT66pemdWSYcwUYG2Pb71O119hCdvkU+4q8sUTbnDg8NhlZEzSWG2N1v4IxT1kEZrGg== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.45.1.tgz#a2b13d5a655902441589aa135fa17b4d938f9c5e" + integrity sha512-WlXwY9dbmc0Lzu6xQOZ3yN8u/ws/1R8zPC16O217LMZJCbV2hJezqkWMUB+jMwguOJW+cukCDe92vcwwf8zwjQ== dependencies: - "@typescript-eslint/utils" "5.44.0" + "@typescript-eslint/utils" "5.45.1" "@typescript-eslint/parser@^5.5.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.44.0.tgz#99e2c710a2252191e7a79113264f438338b846ad" - integrity sha512-H7LCqbZnKqkkgQHaKLGC6KUjt3pjJDx8ETDqmwncyb6PuoigYajyAwBGz08VU/l86dZWZgI4zm5k2VaKqayYyA== + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.45.1.tgz#6440ec283fa1373a12652d4e2fef4cb6e7b7e8c6" + integrity sha512-JQ3Ep8bEOXu16q0ztsatp/iQfDCtvap7sp/DKo7DWltUquj5AfCOpX2zSzJ8YkAVnrQNqQ5R62PBz2UtrfmCkA== dependencies: - "@typescript-eslint/scope-manager" "5.44.0" - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" debug "^4.3.4" -"@typescript-eslint/scope-manager@5.44.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.44.0.tgz#988c3f34b45b3474eb9ff0674c18309dedfc3e04" - integrity sha512-2pKml57KusI0LAhgLKae9kwWeITZ7IsZs77YxyNyIVOwQ1kToyXRaJLl+uDEXzMN5hnobKUOo2gKntK9H1YL8g== +"@typescript-eslint/scope-manager@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.45.1.tgz#5b87d025eec7035d879b99c260f03be5c247883c" + integrity sha512-D6fCileR6Iai7E35Eb4Kp+k0iW7F1wxXYrOhX/3dywsOJpJAQ20Fwgcf+P/TDtvQ7zcsWsrJaglaQWDhOMsspQ== dependencies: - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/visitor-keys" "5.44.0" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" -"@typescript-eslint/type-utils@5.44.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.44.0.tgz#bc5a6e8a0269850714a870c9268c038150dfb3c7" - integrity sha512-A1u0Yo5wZxkXPQ7/noGkRhV4J9opcymcr31XQtOzcc5nO/IHN2E2TPMECKWYpM3e6olWEM63fq/BaL1wEYnt/w== +"@typescript-eslint/type-utils@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.45.1.tgz#cb7d300c3c95802cea9f87c7f8be363cf8f8538c" + integrity sha512-aosxFa+0CoYgYEl3aptLe1svP910DJq68nwEJzyQcrtRhC4BN0tJAvZGAe+D0tzjJmFXe+h4leSsiZhwBa2vrA== dependencies: - "@typescript-eslint/typescript-estree" "5.44.0" - "@typescript-eslint/utils" "5.44.0" + "@typescript-eslint/typescript-estree" "5.45.1" + "@typescript-eslint/utils" "5.45.1" debug "^4.3.4" tsutils "^3.21.0" -"@typescript-eslint/types@5.44.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.44.0.tgz#f3f0b89aaff78f097a2927fe5688c07e786a0241" - integrity sha512-Tp+zDnHmGk4qKR1l+Y1rBvpjpm5tGXX339eAlRBDg+kgZkz9Bw+pqi4dyseOZMsGuSH69fYfPJCBKBrbPCxYFQ== +"@typescript-eslint/types@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.45.1.tgz#8e1883041cee23f1bb7e1343b0139f97f6a17c14" + integrity sha512-HEW3U0E5dLjUT+nk7b4lLbOherS1U4ap+b9pfu2oGsW3oPu7genRaY9dDv3nMczC1rbnRY2W/D7SN05wYoGImg== -"@typescript-eslint/typescript-estree@5.44.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.44.0.tgz#0461b386203e8d383bb1268b1ed1da9bc905b045" - integrity sha512-M6Jr+RM7M5zeRj2maSfsZK2660HKAJawv4Ud0xT+yauyvgrsHu276VtXlKDFnEmhG+nVEd0fYZNXGoAgxwDWJw== +"@typescript-eslint/typescript-estree@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.45.1.tgz#b3dc37f0c4f0fe73e09917fc735e6f96eabf9ba4" + integrity sha512-76NZpmpCzWVrrb0XmYEpbwOz/FENBi+5W7ipVXAsG3OoFrQKJMiaqsBMbvGRyLtPotGqUfcY7Ur8j0dksDJDng== dependencies: - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/visitor-keys" "5.44.0" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/visitor-keys" "5.45.1" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" semver "^7.3.7" tsutils "^3.21.0" -"@typescript-eslint/utils@5.44.0", "@typescript-eslint/utils@^5.13.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.44.0.tgz#d733da4d79d6c30f1a68b531cdda1e0c1f00d52d" - integrity sha512-fMzA8LLQ189gaBjS0MZszw5HBdZgVwxVFShCO3QN+ws3GlPkcy9YuS3U4wkT6su0w+Byjq3mS3uamy9HE4Yfjw== +"@typescript-eslint/utils@5.45.1", "@typescript-eslint/utils@^5.13.0": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.45.1.tgz#39610c98bde82c4792f2a858b29b7d0053448be2" + integrity sha512-rlbC5VZz68+yjAzQBc4I7KDYVzWG2X/OrqoZrMahYq3u8FFtmQYc+9rovo/7wlJH5kugJ+jQXV5pJMnofGmPRw== dependencies: "@types/json-schema" "^7.0.9" "@types/semver" "^7.3.12" - "@typescript-eslint/scope-manager" "5.44.0" - "@typescript-eslint/types" "5.44.0" - "@typescript-eslint/typescript-estree" "5.44.0" + "@typescript-eslint/scope-manager" "5.45.1" + "@typescript-eslint/types" "5.45.1" + "@typescript-eslint/typescript-estree" "5.45.1" eslint-scope "^5.1.1" eslint-utils "^3.0.0" semver "^7.3.7" -"@typescript-eslint/visitor-keys@5.44.0": - version "5.44.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.44.0.tgz#10740dc28902bb903d12ee3a005cc3a70207d433" - integrity sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ== +"@typescript-eslint/visitor-keys@5.45.1": + version "5.45.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.45.1.tgz#204428430ad6a830d24c5ac87c71366a1cfe1948" + integrity sha512-cy9ln+6rmthYWjH9fmx+5FU/JDpjQb586++x2FZlveq7GdGuLLW9a2Jcst2TGekH82bXpfmRNSwP9tyEs6RjvQ== dependencies: - "@typescript-eslint/types" "5.44.0" + "@typescript-eslint/types" "5.45.1" eslint-visitor-keys "^3.3.0" "@ungap/structured-clone@^1.0.0": @@ -5847,9 +5852,9 @@ big.js@^5.2.2: integrity sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ== bignumber.js@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.0.tgz#8d340146107fe3a6cb8d40699643c302e8773b62" - integrity sha512-4LwHK4nfDOraBCtst+wOWIHbu1vhvAPJK8g8nROd4iuc3PSEjWif/qwbkh8jwCJz6yDBvtU4KPynETgrfh7y3A== + version "9.1.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.1.1.tgz#c4df7dc496bd849d4c9464344c1aa74228b4dac6" + integrity sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig== bin-links@^3.0.0, bin-links@^3.0.3: version "3.0.3" @@ -6247,9 +6252,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001400, caniuse-lite@^1.0.30001426: - version "1.0.30001434" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001434.tgz#ec1ec1cfb0a93a34a0600d37903853030520a4e5" - integrity sha512-aOBHrLmTQw//WFa2rcF1If9fa3ypkC1wzqqiKHgfdrXTWcU8C4gKVZT77eQAPWN1APys3+uQ0Df07rKauXGEYA== + version "1.0.30001436" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001436.tgz#22d7cbdbbbb60cdc4ca1030ccd6dea9f5de4848b" + integrity sha512-ZmWkKsnC2ifEPoWUvSAIGyOYwT+keAaaWPHiQ9DfMqS1t6tfuyFYoWR78TeZtznkEQ64+vGXH9cZrElwR2Mrxg== canonicalize@1.0.1: version "1.0.1" @@ -7100,9 +7105,9 @@ css-what@^6.0.1: integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== cssdb@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.1.0.tgz#574f97235a83eb753a29f0b1f2cbacac0d628bb8" - integrity sha512-Sd99PrFgx28ez4GHu8yoQIufc/70h9oYowDf4EjeIKi8mac9whxRjhM3IaMr6EllP6KKKWtJrMfN6C7T9tIWvQ== + version "7.2.0" + resolved "https://registry.yarnpkg.com/cssdb/-/cssdb-7.2.0.tgz#f44bd4abc430f0ff7f4c64b8a1fb857a753f77a8" + integrity sha512-JYlIsE7eKHSi0UNuCyo96YuIDFqvhGgHw4Ck6lsN+DP0Tp8M64UTDT2trGbkMDqnCoEjks7CkS0XcjU0rkvBdg== cssesc@^3.0.0: version "3.0.0" @@ -7288,14 +7293,14 @@ decamelize@^1.1.0: integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== decimal.js@^10.2.1, decimal.js@^10.3.1: - version "10.4.2" - resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.2.tgz#0341651d1d997d86065a2ce3a441fbd0d8e8b98e" - integrity sha512-ic1yEvwT6GuvaYwBLLY6/aFFgjZdySKTE8en/fkU3QICTmRtgtSlFn0u0BXN06InZwtfCelR7j8LRiDI/02iGA== + version "10.4.3" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.4.3.tgz#1044092884d245d1b7f65725fa4ad4c6f781cc23" + integrity sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA== decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== dedent@^0.7.0: version "0.7.0" @@ -7470,9 +7475,9 @@ did-jwt-vc@^3.1.0: did-resolver "^4.0.0" did-jwt@^6.3.0, did-jwt@^6.6.0, did-jwt@^6.9.0: - version "6.10.0" - resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-6.10.0.tgz#74c3d91ae46f08e479a7c77186d3e087971a4b30" - integrity sha512-qdWWh9TweX633lSb01KZQOmNJfHW7ETe4DsVB/wJvkAqQ54sbj2p+1LYp14OaGMLhkIbdjdwCbhMAD6iFamZmQ== + version "6.10.1" + resolved "https://registry.yarnpkg.com/did-jwt/-/did-jwt-6.10.1.tgz#40966b86b18759b771186d9274fc211af2f64d7c" + integrity sha512-YJOvkuPKKX364ooAFNxZPcz/KBLRwLhRABQVQlVEqOjygsCkplNFB3UL97UqZ7Y3cAG6Jh5jKoAC4xFSm+h0qw== dependencies: "@stablelib/ed25519" "^1.0.2" "@stablelib/random" "^1.0.1" @@ -8096,9 +8101,9 @@ eslint-webpack-plugin@^3.1.1: schema-utils "^4.0.0" eslint@^8.3.0: - version "8.28.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.28.0.tgz#81a680732634677cc890134bcdd9fdfea8e63d6e" - integrity sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ== + version "8.29.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.29.0.tgz#d74a88a20fb44d59c51851625bc4ee8d0ec43f87" + integrity sha512-isQ4EEiyUjZFbEKvEGJKKGBwXtvXX+zJbkVKCgTuB9t/+jUBcy8avhkEwWJecI15BkRkOYmvIM5ynbhRjEkoeg== dependencies: "@eslint/eslintrc" "^1.3.3" "@humanwhocodes/config-array" "^0.11.6" @@ -8518,9 +8523,9 @@ fastest-levenshtein@^1.0.12: integrity sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg== fastq@^1.6.0: - version "1.13.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.13.0.tgz#616760f88a7526bdfc596b7cab8c18938c36b98c" - integrity sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw== + version "1.14.0" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.14.0.tgz#107f69d7295b11e0fccc264e1fc6389f623731ce" + integrity sha512-eR2D+V9/ExcbF9ls441yIuN6TI2ED1Y2ZcA5BmMtJsOkWOFRJQ0Jt0g1UwqXJJVAb+V+umH5Dfr8oh4EVP7VVg== dependencies: reusify "^1.0.4" @@ -8827,6 +8832,15 @@ fs-extra@^10.0.0: jsonfile "^6.0.1" universalify "^2.0.0" +fs-extra@^11.0.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.0.tgz#5784b102104433bb0e090f48bfc4a30742c357ed" + integrity sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + fs-extra@^9.0.0, fs-extra@^9.0.1, fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -11446,17 +11460,17 @@ ky@^0.25.1: resolved "https://registry.yarnpkg.com/ky/-/ky-0.25.1.tgz#0df0bd872a9cc57e31acd5dbc1443547c881bfbc" integrity sha512-PjpCEWlIU7VpiMVrTwssahkYXX1by6NCT0fhTUX34F3DTinARlgMpriuroolugFPcMgpPWrOW4mTb984Qm1RXA== -language-subtag-registry@~0.3.2: +language-subtag-registry@^0.3.20: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" integrity sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w== language-tags@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.5.tgz#d321dbc4da30ba8bf3024e040fa5c14661f9193a" - integrity sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ== + version "1.0.6" + resolved "https://registry.yarnpkg.com/language-tags/-/language-tags-1.0.6.tgz#c087cc42cd92eb71f0925e9e271d4f8be5a93430" + integrity sha512-HNkaCgM8wZgE/BZACeotAAgpL9FUjEnhgF0FVQMIgH//zqTPreLYMb3rWYkYAqPoF75Jwuycp1da7uz66cfFQg== dependencies: - language-subtag-registry "~0.3.2" + language-subtag-registry "^0.3.20" lazy-cache@^0.2.3: version "0.2.7" @@ -12137,9 +12151,9 @@ min-indent@^1.0.0: integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== mini-css-extract-plugin@^2.4.5: - version "2.7.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.0.tgz#d7d9ba0c5b596d155e36e2b174082fc7f010dd64" - integrity sha512-auqtVo8KhTScMsba7MbijqZTfibbXiBNlPAQbsVt7enQfcDYLdgG57eGxMqwVU3mfeWANY4F1wUg+rMF+ycZgw== + version "2.7.1" + resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.1.tgz#ec924df783cff32ce6183fceb653028f70128643" + integrity sha512-viOoaUFy+Z2w43VsGPbtfwFrr0tKwDctK9dUofG5MBViYhD1noGFUzzDIVw0KPwCGUP+c7zqLxm+acuQs7zLzw== dependencies: schema-utils "^4.0.0" @@ -12161,9 +12175,9 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: brace-expansion "^1.1.7" minimatch@^5.0.1, minimatch@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.0.tgz#1717b464f4971b144f6aabe8f2d0b8e4511e09c7" - integrity sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg== + version "5.1.1" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.1.tgz#6c9dffcf9927ff2a31e74b5af11adf8b9604b022" + integrity sha512-362NP+zlprccbEt/SkxKfRMHnNY85V74mVnpUpNyr3F35covl09Kec7/sEFLt3RA4oXmewtoaanoIf67SE5Y5g== dependencies: brace-expansion "^2.0.1" @@ -13645,9 +13659,9 @@ postcss-custom-media@^8.0.2: postcss-value-parser "^4.2.0" postcss-custom-properties@^12.1.10: - version "12.1.10" - resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.10.tgz#624517179fd4cf50078a7a60f628d5782e7d4903" - integrity sha512-U3BHdgrYhCrwTVcByFHs9EOBoqcKq4Lf3kXwbTi4hhq0qWhl/pDWq2THbv/ICX/Fl9KqeHBb8OVrTf2OaYF07A== + version "12.1.11" + resolved "https://registry.yarnpkg.com/postcss-custom-properties/-/postcss-custom-properties-12.1.11.tgz#d14bb9b3989ac4d40aaa0e110b43be67ac7845cf" + integrity sha512-0IDJYhgU8xDv1KY6+VgUwuQkVtmYzRwu+dMjnmdMafXYv86SWqfxkc7qdDvWS38vsjaEtv8e0vGOUQrAiMBLpQ== dependencies: postcss-value-parser "^4.2.0" @@ -15081,9 +15095,9 @@ rxjs@^6.6.0: tslib "^1.9.0" rxjs@^7.2.0, rxjs@^7.5.4, rxjs@^7.5.5: - version "7.5.7" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.5.7.tgz#2ec0d57fdc89ece220d2e702730ae8f1e49def39" - integrity sha512-z9MzKh/UcOqB3i20H6rtrlaE/CgjLOvheWK/9ILrbhROGTweAi1BaFsTT9FbwZi5Trr1qNRs+MXkhmR06awzQA== + version "7.6.0" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.6.0.tgz#361da5362b6ddaa691a2de0b4f2d32028f1eb5a2" + integrity sha512-DDa7d8TFNUalGC9VqXvQ1euWNN7sc63TrUCuM9J998+ViviahMIjKSOU7rfcgFOF+FCD71BhDRv4hrFz+ImDLQ== dependencies: tslib "^2.1.0" @@ -16170,9 +16184,9 @@ terser-webpack-plugin@^5.1.3, terser-webpack-plugin@^5.2.5: terser "^5.14.1" terser@^5.0.0, terser@^5.10.0, terser@^5.14.1: - version "5.16.0" - resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.0.tgz#29362c6f5506e71545c73b069ccd199bb28f7f54" - integrity sha512-KjTV81QKStSfwbNiwlBXfcgMcOloyuRdb62/iLFPGBcVNF4EXjhdYBhYHmbJpiBrVxZhDvltE11j+LBQUxEEJg== + version "5.16.1" + resolved "https://registry.yarnpkg.com/terser/-/terser-5.16.1.tgz#5af3bc3d0f24241c7fb2024199d5c461a1075880" + integrity sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw== dependencies: "@jridgewell/source-map" "^0.3.2" acorn "^8.5.0" @@ -16500,9 +16514,9 @@ typedarray@^0.0.6: integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== typeorm@^0.3.10: - version "0.3.10" - resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.10.tgz#aa2857fd4b078c912ca693b7eee01b6535704458" - integrity sha512-VMKiM84EpJQ+Mz9xDIPqnfplWhyUy1d8ccaKdMY9obifxJOTFnv8GYVyPsGwG8Lk7Nb8MlttHyHWENGAhBA3WA== + version "0.3.11" + resolved "https://registry.yarnpkg.com/typeorm/-/typeorm-0.3.11.tgz#09b6ab0b0574bf33c1faf7344bab6c363cf28921" + integrity sha512-pzdOyWbVuz/z8Ww6gqvBW4nylsM0KLdUCDExr2gR20/x1khGSVxQkjNV/3YqliG90jrWzrknYbYscpk8yxFJVg== dependencies: "@sqltools/formatter" "^1.2.2" app-root-path "^3.0.0"