diff --git a/.github/workflows/build-and-test-on-pr.yml b/.github/workflows/build-and-test-on-pr.yml index 78538ce9e..f97663ef9 100644 --- a/.github/workflows/build-and-test-on-pr.yml +++ b/.github/workflows/build-and-test-on-pr.yml @@ -12,7 +12,7 @@ jobs: version: 8 - run: pnpm add -g pnpm - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -53,7 +53,7 @@ jobs: restore-keys: ${{ runner.os }}-build-${{ github.sha }} fail-on-cache-miss: true - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -105,7 +105,7 @@ jobs: restore-keys: ${{ runner.os }}-build-${{ github.sha }} fail-on-cache-miss: true - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -130,7 +130,7 @@ jobs: restore-keys: ${{ runner.os }}-build-${{ github.sha }} fail-on-cache-miss: true - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/.github/workflows/build-test-publish-on-push.yml b/.github/workflows/build-test-publish-on-push.yml index 674f8189f..38b8e2697 100644 --- a/.github/workflows/build-test-publish-on-push.yml +++ b/.github/workflows/build-test-publish-on-push.yml @@ -20,7 +20,7 @@ jobs: version: 8 - run: pnpm add -g pnpm - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -61,7 +61,7 @@ jobs: restore-keys: ${{ runner.os }}-build-${{ github.sha }} fail-on-cache-miss: true - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -114,7 +114,7 @@ jobs: restore-keys: ${{ runner.os }}-build-${{ github.sha }} fail-on-cache-miss: true - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -139,7 +139,7 @@ jobs: restore-keys: ${{ runner.os }}-build-${{ github.sha }} fail-on-cache-miss: true - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' @@ -170,7 +170,7 @@ jobs: version: 8 - run: pnpm add -g pnpm - name: 'Setup Node.js with pnpm cache' - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: 20 cache: 'pnpm' diff --git a/AWESOME.md b/AWESOME.md index bebc0046c..68088722e 100644 --- a/AWESOME.md +++ b/AWESOME.md @@ -6,10 +6,13 @@ Please help us improve the contents or format of this list by creating a pull re ## Projects * [Sphereon SSI SDK](https://github.com/Sphereon-Opensource/ssi-sdk) - * [VC Manager plugin](https://github.com/blockchain-lab-um/veramo-vc-manager) - * [SSI using Metamask snap](https://blockchain-lab-um.github.io/ssi-snap-docs/) + * [Data Manager plugin](https://github.com/blockchain-lab-um/masca/tree/develop/packages/datamanager) + * [SSI using Metamask snap (Masca)](https://masca.io/) + * [SSI using Metamask snap (Identify)](https://github.com/tuum-tech/identify/tree/main/packages/snap) + * [OID4VC issuer and verifier](https://github.com/blockchain-lab-um/oid4vc-monorepo) * [Plugin for did:cheqd](https://github.com/cheqd/did-provider-cheqd) * [Spherity VC revocation plugin based on ethereum](https://github.com/spherity/ethr-revocation-registry-veramo-plugin) + * [BBS+ issuer](https://github.com/pcibraro/veramo-bls-issuer/tree/main) * [RN app with credential signing](https://github.com/symfoni/identity-wallet) * [ID Pocket digital identity wallet](https://rktechworks.com/idpocket) * add your own project here! diff --git a/__tests__/fixtures/cred3.json b/__tests__/fixtures/cred3.json index aabf7bd6e..9df759448 100644 --- a/__tests__/fixtures/cred3.json +++ b/__tests__/fixtures/cred3.json @@ -103,7 +103,7 @@ "name": "Verifiable Event Attendance", "chainId": 1, "version": "1", - "verifyingContract": "0x00000000000000000000000000000000000000000000" + "verifyingContract": "0x0000000000000000000000000000000000000000" }, "primaryType": "VerifiableCredential" }, diff --git a/__tests__/localAgent.test.ts b/__tests__/localAgent.test.ts index f82816b99..25875099a 100644 --- a/__tests__/localAgent.test.ts +++ b/__tests__/localAgent.test.ts @@ -7,9 +7,7 @@ * This suite also runs a ganache local blockchain to run through some examples of DIDComm using did:ethr identifiers. */ -import { - createAgent, -} from '../packages/core/src' +import { createAgent } from '../packages/core/src' import { IAgentOptions, ICredentialPlugin, @@ -91,8 +89,9 @@ import didCommWithEthrDidFlow from './shared/didCommWithEthrDidFlow' import utils from './shared/utils' import web3 from './shared/web3' import credentialStatus from './shared/credentialStatus' -import ethrDidFlowSigned from "./shared/ethrDidFlowSigned"; +import ethrDidFlowSigned from './shared/ethrDidFlowSigned' import didCommWithPeerDidFlow from './shared/didCommWithPeerDidFlow.js' +import credentialPluginTests from './shared/credentialPluginTests.js' jest.setTimeout(120000) @@ -117,8 +116,7 @@ let dbConnection: Promise let databaseFile: string const setup = async (options?: IAgentOptions): Promise => { - databaseFile = - options?.context?.databaseFile || ':memory:' + databaseFile = options?.context?.databaseFile || ':memory:' dbConnection = new DataSource({ name: options?.context?.['dbName'] || 'test', type: 'sqlite', @@ -181,6 +179,11 @@ const setup = async (options?: IAgentOptions): Promise => { chainId: 5, rpcUrl: 'https://goerli.infura.io/v3/' + infuraProjectId, }, + { + name: 'sepolia', + chainId: 11155111, + rpcUrl: 'https://sepolia.infura.io/v3/' + infuraProjectId, + }, { chainId: 421613, name: 'arbitrum:goerli', @@ -202,7 +205,7 @@ const setup = async (options?: IAgentOptions): Promise => { defaultKms: 'local', }), 'did:peer': new PeerDIDProvider({ - defaultKms: 'local' + defaultKms: 'local', }), 'did:pkh': new PkhDIDProvider({ defaultKms: 'local', @@ -220,7 +223,7 @@ const setup = async (options?: IAgentOptions): Promise => { { name: 'ganache', chainId: 1337, - provider, + provider: provider as any, registry, }, ], @@ -242,7 +245,7 @@ const setup = async (options?: IAgentOptions): Promise => { new SdrMessageHandler(), ], }), - new DIDComm([new DIDCommHttpTransport()]), + new DIDComm({ transports: [new DIDCommHttpTransport()]}), new CredentialPlugin(), new CredentialIssuerEIP712(), new CredentialIssuerLD({ @@ -303,4 +306,5 @@ describe('Local integration tests', () => { didCommWithPeerDidFlow(testContext) credentialStatus(testContext) ethrDidFlowSigned(testContext) + credentialPluginTests(testContext) }) diff --git a/__tests__/localJsonStoreAgent.test.ts b/__tests__/localJsonStoreAgent.test.ts index b4589549a..805448f71 100644 --- a/__tests__/localJsonStoreAgent.test.ts +++ b/__tests__/localJsonStoreAgent.test.ts @@ -16,9 +16,7 @@ import { IResolver, TAgent, } from '../packages/core-types/src' -import { - createAgent -} from '../packages/core/src' +import { createAgent } from '../packages/core/src' import { MessageHandler } from '../packages/message-handler/src' import { KeyManager } from '../packages/key-manager/src' import { DIDManager } from '../packages/did-manager/src' @@ -53,6 +51,7 @@ import { PrivateKeyStoreJson, } from '../packages/data-store-json/src' import { FakeDidProvider, FakeDidResolver } from '../packages/test-utils/src' +import { PeerDIDProvider, getResolver as getDidPeerResolver } from '../packages/did-provider-peer/src' import { Resolver } from 'did-resolver' import { getResolver as ethrDidResolver } from 'ethr-did-resolver' @@ -77,6 +76,7 @@ import messageHandler from './shared/messageHandler' import utils from './shared/utils' import { JsonFileStore } from './utils/json-file-store' import credentialStatus from './shared/credentialStatus' +import credentialPluginTests from './shared/credentialPluginTests' import dbInitOptions from "./shared/dbInitOptions"; jest.setTimeout(120000) @@ -149,6 +149,11 @@ const setup = async (options?: IAgentOptions): Promise => { name: 'goerli', rpcUrl: 'https://goerli.infura.io/v3/' + infuraProjectId, }, + { + name: 'sepolia', + chainId: 11155111, + rpcUrl: 'https://sepolia.infura.io/v3/' + infuraProjectId, + }, { chainId: 421613, name: 'arbitrum:goerli', @@ -163,6 +168,9 @@ const setup = async (options?: IAgentOptions): Promise => { 'did:key': new KeyDIDProvider({ defaultKms: 'local', }), + 'did:peer': new PeerDIDProvider({ + defaultKms: 'local', + }), 'did:pkh': new PkhDIDProvider({ defaultKms: 'local', }), @@ -177,6 +185,7 @@ const setup = async (options?: IAgentOptions): Promise => { ...ethrDidResolver({ infuraProjectId }), ...webDidResolver(), ...getDidKeyResolver(), + ...getDidPeerResolver(), ...getDidPkhResolver(), ...getDidJwkResolver(), ...new FakeDidResolver(() => agent).getDidFakeResolver(), @@ -239,5 +248,6 @@ describe('Local json-data-store integration tests', () => { didCommPacking(testContext) utils(testContext) credentialStatus(testContext) + credentialPluginTests(testContext) dbInitOptions(testContext) }) diff --git a/__tests__/localMemoryStoreAgent.test.ts b/__tests__/localMemoryStoreAgent.test.ts index e22eb4d37..ffbd37911 100644 --- a/__tests__/localMemoryStoreAgent.test.ts +++ b/__tests__/localMemoryStoreAgent.test.ts @@ -49,6 +49,7 @@ import { KeyManagementSystem } from '../packages/kms-local/src' import { Web3KeyManagementSystem } from '../packages/kms-web3/src' import { DataStore, DataStoreORM, Entities, migrations } from '../packages/data-store/src' import { FakeDidProvider, FakeDidResolver } from '../packages/test-utils/src' +import { PeerDIDProvider, getResolver as getDidPeerResolver } from "../packages/did-provider-peer/src"; import { getResolver as ethrDidResolver } from 'ethr-did-resolver' import { getResolver as webDidResolver } from 'web-did-resolver' @@ -71,6 +72,7 @@ import messageHandler from './shared/messageHandler.js' import utils from './shared/utils.js' import credentialStatus from './shared/credentialStatus.js' import credentialInterop from './shared/credentialInterop.js' +import credentialPluginTests from "./shared/credentialPluginTests.js"; jest.setTimeout(120000) @@ -145,6 +147,11 @@ const setup = async (options?: IAgentOptions): Promise => { name: 'goerli', rpcUrl: 'https://goerli.infura.io/v3/' + infuraProjectId, }, + { + name: 'sepolia', + chainId: 11155111, + rpcUrl: 'https://sepolia.infura.io/v3/' + infuraProjectId, + }, { chainId: 421613, name: 'arbitrum:goerli', @@ -159,6 +166,9 @@ const setup = async (options?: IAgentOptions): Promise => { 'did:key': new KeyDIDProvider({ defaultKms: 'local', }), + 'did:peer': new PeerDIDProvider({ + defaultKms: 'local' + }), 'did:pkh': new PkhDIDProvider({ defaultKms: 'local', }), @@ -172,6 +182,7 @@ const setup = async (options?: IAgentOptions): Promise => { ...ethrDidResolver({ infuraProjectId }), ...webDidResolver(), ...getDidKeyResolver(), + ...getDidPeerResolver(), ...getDidPkhResolver(), ...getDidJwkResolver(), ...new FakeDidResolver(() => agent).getDidFakeResolver(), @@ -234,4 +245,5 @@ describe('Local in-memory integration tests', () => { utils(testContext) credentialStatus(testContext) credentialInterop(testContext) + credentialPluginTests(testContext) }) diff --git a/__tests__/restAgent.test.ts b/__tests__/restAgent.test.ts index d326f6201..b4485a0df 100644 --- a/__tests__/restAgent.test.ts +++ b/__tests__/restAgent.test.ts @@ -47,6 +47,7 @@ import { WebDIDProvider } from '../packages/did-provider-web/src' import { getDidKeyResolver, KeyDIDProvider } from '../packages/did-provider-key/src' import { getDidPkhResolver, PkhDIDProvider } from '../packages/did-provider-pkh/src' import { getDidJwkResolver, JwkDIDProvider } from '../packages/did-provider-jwk/src' +import { getResolver as getDidPeerResolver, PeerDIDProvider } from "../packages/did-provider-peer/src"; import { DIDComm, DIDCommHttpTransport, DIDCommMessageHandler, IDIDComm } from '../packages/did-comm/src' import { ISelectiveDisclosure, @@ -98,6 +99,7 @@ import messageHandler from './shared/messageHandler' import didDiscovery from './shared/didDiscovery' import utils from './shared/utils' import credentialStatus from './shared/credentialStatus' +import credentialPluginTests from "./shared/credentialPluginTests"; jest.setTimeout(120000) @@ -175,6 +177,11 @@ const setup = async (options?: IAgentOptions): Promise => { name: 'goerli', rpcUrl: 'https://goerli.infura.io/v3/' + infuraProjectId, }, + { + name: 'sepolia', + chainId: 11155111, + rpcUrl: 'https://sepolia.infura.io/v3/' + infuraProjectId, + }, { chainId: 421613, name: 'arbitrum:goerli', @@ -189,6 +196,9 @@ const setup = async (options?: IAgentOptions): Promise => { 'did:key': new KeyDIDProvider({ defaultKms: 'local', }), + 'did:peer': new PeerDIDProvider({ + defaultKms: 'local' + }), 'did:pkh': new PkhDIDProvider({ defaultKms: 'local', }), @@ -204,6 +214,7 @@ const setup = async (options?: IAgentOptions): Promise => { ...webDidResolver(), // key: getUniversalResolver(), // resolve using remote resolver... when uniresolver becomes more stable, ...getDidKeyResolver(), + ...getDidPeerResolver(), ...getDidPkhResolver(), ...getDidJwkResolver(), ...new FakeDidResolver(() => serverAgent as TAgent).getDidFakeResolver(), @@ -219,7 +230,7 @@ const setup = async (options?: IAgentOptions): Promise => { new SdrMessageHandler(), ], }), - new DIDComm([new DIDCommHttpTransport()]), + new DIDComm({ transports: [new DIDCommHttpTransport()]}), // intentionally use the deprecated name to test compatibility new CredentialIssuer(), new CredentialIssuerEIP712(), @@ -298,4 +309,5 @@ describe('REST integration tests', () => { didDiscovery(testContext) utils(testContext) credentialStatus(testContext) + credentialPluginTests(testContext) }) diff --git a/__tests__/shared/credentialPluginTests.ts b/__tests__/shared/credentialPluginTests.ts new file mode 100644 index 000000000..1eae9f8ca --- /dev/null +++ b/__tests__/shared/credentialPluginTests.ts @@ -0,0 +1,88 @@ +// noinspection ES6PreferShortImport + +import { IAgentOptions, ICredentialPlugin, MinimalImportableKey, TAgent } from '../../packages/core-types/src' + +type ConfiguredAgent = TAgent +export default (testContext: { + getAgent: (options?: IAgentOptions) => ConfiguredAgent + setup: (options?: IAgentOptions) => Promise + tearDown: () => Promise +}) => { + describe('credential plugin options', () => { + let agent: ConfiguredAgent + + beforeAll(async () => { + await testContext.setup() + agent = testContext.getAgent() + return true + }) + afterAll(testContext.tearDown) + + it('should list signing options for did:key with Ed25519 key', async () => { + const iid = await agent.didManagerCreate({ + provider: 'did:key', + kms: 'local', + options: { + keyType: 'Ed25519', + }, + }) + + const options = await agent.listUsableProofFormats(iid) + expect(options).toEqual(['jwt', 'lds']) + }) + + it('should list signing options for did:key with Secp256k1 key', async () => { + const iid = await agent.didManagerCreate({ + provider: 'did:key', + kms: 'local', + options: { + keyType: 'Secp256k1', + }, + }) + + const options = await agent.listUsableProofFormats(iid) + expect(options).toEqual(['jwt', 'lds', 'EthereumEip712Signature2021']) + }) + + it('should list signing options for did:key with X25519 key', async () => { + const iid = await agent.didManagerCreate({ + provider: 'did:key', + kms: 'local', + options: { + keyType: 'X25519', + }, + }) + + const options = await agent.listUsableProofFormats(iid) + expect(options).toEqual([]) + }) + + it('should list signing options for did:ethr with web3 backed keys', async () => { + const account = `0x71CB05EE1b1F506fF321Da3dac38f25c0c9ce6E1` + const did = `did:ethr:${account}` + const controllerKeyId = `ethers-${account}` + const iid = await agent.didManagerImport({ + did, + provider: 'did:ethr', + controllerKeyId, + keys: [ + { + kid: controllerKeyId, + type: 'Secp256k1', + kms: 'web3', + privateKeyHex: '', + publicKeyHex: '', + meta: { + account, + provider: 'ethers', + algorithms: ['eth_signMessage', 'eth_signTypedData'], + }, + } as MinimalImportableKey, + ], + }) + + const options = await agent.listUsableProofFormats(iid) + expect(options).toEqual(['EthereumEip712Signature2021']) + }) + }) +} diff --git a/__tests__/shared/didManager.ts b/__tests__/shared/didManager.ts index 407a1813d..e1dfd428f 100644 --- a/__tests__/shared/didManager.ts +++ b/__tests__/shared/didManager.ts @@ -37,7 +37,7 @@ export default (testContext: { identifier = await agent.didManagerCreate({ // this expects the `did:ethr` provider to matchPrefix and use the `arbitrum:goerli` network specifier provider: 'did:pkh', - options: { chainId: "1"} + options: { chainId: '1' }, }) expect(identifier.provider).toEqual('did:pkh') //expect(identifier.did).toMatch(/^did:pkh:eip155:*$/) @@ -58,7 +58,18 @@ export default (testContext: { expect(identifier.controllerKeyId).toEqual(identifier.keys[0].kid) }) - it('should create identifier using chainId 3', async () => { + it('should create identifier using did:ethr:sepolia provider', async () => { + identifier = await agent.didManagerCreate({ + provider: 'did:ethr:sepolia', + }) + expect(identifier.provider).toEqual('did:ethr:sepolia') + expect(identifier.did).toMatch(/^did:ethr:sepolia:0x.*$/) + expect(identifier.keys.length).toEqual(1) + expect(identifier.services.length).toEqual(0) + expect(identifier.controllerKeyId).toEqual(identifier.keys[0].kid) + }) + + it('should translate identifier using chainId 421613 to arbitrum', async () => { identifier = await agent.didManagerCreate({ provider: 'did:ethr', options: { @@ -81,7 +92,7 @@ export default (testContext: { provider: 'did:jwk', options: { keyType, - } + }, }) expect(identifier.provider).toEqual('did:jwk') expect(identifier.keys[0].type).toEqual(keyType) @@ -94,8 +105,9 @@ export default (testContext: { provider: 'did:jwk', options: { keyType, - privateKeyHex: 'f3157fbbb356a0d56a84a1a9752f81d0638cce4153168bd1b46f68a6e62b82b0f3157fbbb356a0d56a84a1a9752f81d0638cce4153168bd1b46f68a6e62b82b0', - } + privateKeyHex: + 'f3157fbbb356a0d56a84a1a9752f81d0638cce4153168bd1b46f68a6e62b82b0f3157fbbb356a0d56a84a1a9752f81d0638cce4153168bd1b46f68a6e62b82b0', + }, }) expect(identifier.provider).toEqual('did:jwk') expect(identifier.keys[0].type).toEqual(keyType) @@ -108,40 +120,46 @@ export default (testContext: { provider: 'did:jwk', options: { privateKeyHex: 'f3157fbbb356a0d56a84a1a9752f81d0638cce4153168bd1b46f68a6e62b82b0', - } + }, }) expect(identifier.provider).toEqual('did:jwk') expect(identifier.keys[0].type).toEqual(keyType) expect(identifier.controllerKeyId).toEqual(identifier.keys[0].kid) }) it('should throw error for invalid privateKEyHex', async () => { - await expect( agent.didManagerCreate({ - provider: 'did:jwk', - options: { - privateKeyHex: '1234', - } - })).rejects.toThrow() + await expect( + agent.didManagerCreate({ + provider: 'did:jwk', + options: { + privateKeyHex: '1234', + }, + }), + ).rejects.toThrow() expect(identifier.provider).toEqual('did:jwk') }) it('should throw error for invalid keyUse parameter', async () => { - await expect( agent.didManagerCreate({ - provider: 'did:jwk', - options: { - keyType: 'Secp256k1', - keyUse: 'signing', - } - })).rejects.toThrow('illegal_argument: Key use must be sig or enc') + await expect( + agent.didManagerCreate({ + provider: 'did:jwk', + options: { + keyType: 'Secp256k1', + keyUse: 'signing', + }, + }), + ).rejects.toThrow('illegal_argument: Key use must be sig or enc') expect(identifier.provider).toEqual('did:jwk') }) it('should throw error for invalid Ed25519 key use', async () => { - await expect( agent.didManagerCreate({ - provider: 'did:jwk', - alias: 'test1', - options: { - keyType: 'Ed25519', - keyUse: 'enc', - } - })).rejects.toThrow('illegal_argument: Ed25519 keys cannot be used for encryption') + await expect( + agent.didManagerCreate({ + provider: 'did:jwk', + alias: 'test1', + options: { + keyType: 'Ed25519', + keyUse: 'enc', + }, + }), + ).rejects.toThrow('illegal_argument: Ed25519 keys cannot be used for encryption') expect(identifier.provider).toEqual('did:jwk') }) @@ -154,7 +172,7 @@ export default (testContext: { options: { keyType, privateKeyHex: 'f3157fbbb356a0d56a84a1a9752f81d0638cce4153168bd1b46f68a6e62b82b1', - } + }, }) expect(identifier.provider).toEqual('did:key') expect(identifier.keys[0].type).toEqual(keyType) @@ -167,7 +185,7 @@ export default (testContext: { provider: 'did:web', alias: 'example.com', }), - ).rejects.toThrow('Identifier with alias: example.com, provider: did:web already exists') + ).rejects.toThrow(/Identifier with alias: example.com already exists/) }) it('should get identifier', async () => { @@ -187,38 +205,36 @@ export default (testContext: { it('should get or create identifier', async () => { const identifier3 = await agent.didManagerGetOrCreate({ - alias: 'alice', - provider: 'did:ethr:goerli', + alias: 'aliceDID11', + provider: 'did:ethr:mainnet', }) const identifier4 = await agent.didManagerGetOrCreate({ - alias: 'alice', - provider: 'did:ethr:goerli', + alias: 'aliceDID11', }) expect(identifier3).toEqual(identifier4) const identifierKey1 = await agent.didManagerGetOrCreate({ - alias: 'carol', + alias: 'caroline', provider: 'did:key', }) const identifierKey2 = await agent.didManagerGetOrCreate({ - alias: 'carol', - provider: 'did:key', + alias: 'caroline', }) expect(identifierKey1).toEqual(identifierKey2) const identifier5 = await agent.didManagerGetOrCreate({ - alias: 'alice', + alias: 'aliceDID11', provider: 'did:ethr', }) - expect(identifier5).not.toEqual(identifier4) + expect(identifier5).toEqual(identifier4) const identifier6 = await agent.didManagerGetByAlias({ - alias: 'alice', + alias: 'aliceDID11', provider: 'did:ethr', }) @@ -230,22 +246,22 @@ export default (testContext: { expect(allIdentifiers.length).toBeGreaterThanOrEqual(5) const aliceIdentifiers = await agent.didManagerFind({ - alias: 'alice', + alias: 'aliceDID11', }) - expect(aliceIdentifiers.length).toEqual(2) + expect(aliceIdentifiers.length).toEqual(1) - const goerliIdentifiers = await agent.didManagerFind({ - provider: 'did:ethr:goerli', + const ethrIdentifiers = await agent.didManagerFind({ + provider: 'did:ethr', }) - expect(goerliIdentifiers.length).toBeGreaterThanOrEqual(1) + expect(ethrIdentifiers.length).toBeGreaterThanOrEqual(1) // Default provider 'did:ethr:goerli' - await agent.didManagerCreate({ provider: 'did:ethr:goerli' }) + await agent.didManagerCreate({ provider: 'did:ethr' }) - const goerliIdentifiers2 = await agent.didManagerFind({ - provider: 'did:ethr:goerli', + const ethrIdentifiers2 = await agent.didManagerFind({ + provider: 'did:ethr', }) - expect(goerliIdentifiers2.length).toEqual(goerliIdentifiers.length + 1) + expect(ethrIdentifiers2.length).toEqual(ethrIdentifiers.length + 1) }) it('should delete identifier', async () => { @@ -436,5 +452,18 @@ export default (testContext: { expect(identifier2).toEqual({ ...identifier, alias: 'dave' }) }) + + it('should refuse to getOrCreate identifier with existing alias but different provider', async () => { + expect.assertions(1) + await agent.didManagerGetOrCreate({ alias: 'I am the same', provider: 'did:ethr' }) + await expect( + agent.didManagerGetOrCreate({ + alias: 'I am the same', + provider: 'did:key', + }), + ).rejects.toThrow( + /illegal_argument: Identifier with alias:.*already exists.*but was created with a different provider.*/, + ) + }) }) } diff --git a/__tests__/shared/documentationExamples.ts b/__tests__/shared/documentationExamples.ts index 8997bbc48..b42cacbb6 100644 --- a/__tests__/shared/documentationExamples.ts +++ b/__tests__/shared/documentationExamples.ts @@ -59,10 +59,7 @@ export default (testContext: { didUrl: 'did:ethr:0xb09b66026ba5909a7cfe99b76875431d2b8d5190', }) expect(doc.didDocument).toEqual({ - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/secp256k1recovery-2020/v2', - ], + '@context': expect.anything(), id: 'did:ethr:0xb09b66026ba5909a7cfe99b76875431d2b8d5190', verificationMethod: [ { diff --git a/__tests__/shared/keyManager.ts b/__tests__/shared/keyManager.ts index e82b13175..71e2e1d79 100644 --- a/__tests__/shared/keyManager.ts +++ b/__tests__/shared/keyManager.ts @@ -8,9 +8,9 @@ import { TAgent, TKeyType, } from '../../packages/core-types/src' -import { computeAddress, serialize } from '@ethersproject/transactions' import { mapIdentifierKeysToDoc } from '../../packages/utils/src' import { recoverTypedSignature, SignTypedDataVersion } from '@metamask/eth-sig-util' +import {computeAddress, Transaction} from "ethers"; type ConfiguredAgent = TAgent @@ -229,7 +229,7 @@ export default (testContext: { const rawTx = await agent.keyManagerSignEthTX({ kid: key.kid, transaction: { - to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3', + to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3', value: 300000, gasLimit: 43092000, gasPrice: 20000000000, @@ -250,7 +250,7 @@ export default (testContext: { const rawTx = await agent.keyManagerSignEthTX({ kid: key.kid, transaction: { - to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3', + to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3', from: keyAddress, value: 300000, gasLimit: 43092000, @@ -273,8 +273,8 @@ export default (testContext: { agent.keyManagerSignEthTX({ kid: key.kid, transaction: { - to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3', - from: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3', + to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3', + from: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3', value: 300000, gasLimit: 43092000, gasPrice: 20000000000, @@ -358,7 +358,7 @@ export default (testContext: { const rawTx = await agent.keyManagerSignEthTX({ kid: importedKey.kid, transaction: { - to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3', + to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3', value: 300000, gasLimit: 43092000, gasPrice: 20000000000, @@ -366,7 +366,7 @@ export default (testContext: { }, }) expect(rawTx).toEqual( - '0xf869018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e0801ba0f16e2206290181c3feaa04051dad19089105c24339dbdf0d80147b48a59fa152a0770e8751ec77ccc78e8b207023f168444f7cfb67055c55c70ef75234458a3d51', + '0x01f86b80018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e080c001a05a46cdfe2102e81e90f89d8896ddaf32aee5473bad994bc1767f0d2af9afa160a01c028daaf737d69f6933d2dfef5e739f459cfb9e8ce1d9ba9ea7bb0c6006518c', ) }) @@ -383,14 +383,39 @@ export default (testContext: { }) it('should sign EthTX using generic signer', async () => { - const txData = serialize({ - to: '0xce31a19193d4b23f4e9d6163d7247243bAF801c3', + const transaction = new Transaction() + transaction.to = '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3' + transaction.value = 300000 + transaction.gasLimit = 43092000 + transaction.gasPrice = 20000000000 + transaction.nonce = 1 + + const txData = transaction.unsignedSerialized + + const rawTx = await agent.keyManagerSign({ + algorithm: 'eth_signTransaction', + data: txData, + encoding: 'hex', + keyRef: importedKey.kid, + }) + + expect(rawTx).toEqual( + '0x01f86b80018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e080c001a05a46cdfe2102e81e90f89d8896ddaf32aee5473bad994bc1767f0d2af9afa160a01c028daaf737d69f6933d2dfef5e739f459cfb9e8ce1d9ba9ea7bb0c6006518c', + ) + }) + + it('should sign EthTX using generic signer and specific type', async () => { + const transaction = Transaction.from({ + to: '0xcE31a19193D4b23F4E9D6163d7247243BAF801C3', value: 300000, gasLimit: 43092000, gasPrice: 20000000000, nonce: 1, + type: 0, // enforce legacy serialization }) + const txData = transaction.unsignedSerialized + const rawTx = await agent.keyManagerSign({ algorithm: 'eth_signTransaction', data: txData, @@ -399,7 +424,7 @@ export default (testContext: { }) expect(rawTx).toEqual( - '0xf869018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e0801ba0f16e2206290181c3feaa04051dad19089105c24339dbdf0d80147b48a59fa152a0770e8751ec77ccc78e8b207023f168444f7cfb67055c55c70ef75234458a3d51', + '0xf869018504a817c800840291882094ce31a19193d4b23f4e9d6163d7247243baf801c3830493e0801ba0f16e2206290181c3feaa04051dad19089105c24339dbdf0d80147b48a59fa152a0770e8751ec77ccc78e8b207023f168444f7cfb67055c55c70ef75234458a3d51', ) }) }) diff --git a/__tests__/shared/utils.ts b/__tests__/shared/utils.ts index f5e7f7a16..fdf3c9c97 100644 --- a/__tests__/shared/utils.ts +++ b/__tests__/shared/utils.ts @@ -59,5 +59,28 @@ export default (testContext: { `eip155:1:${account}`, ) }) + + it('should verify JWT credential signed by did:peer (multibase + multicodec) (github #1248)', async () => { + // did:peer uses publicKeyMultibase + const issuer = await agent.didManagerCreate({ + provider: 'did:peer', + options: { + num_algo: 0 + } + }) + const payload = { + issuer: issuer.did, + credentialSubject: { + nothing: 'else matters', + }, + } + const credential = await agent.createVerifiableCredential({ + credential: payload, + proofFormat: 'jwt', + }) + + const verifyResult = await agent.verifyCredential({ credential }) + expect(verifyResult.verified).toBeTruthy() + }) }) } diff --git a/__tests__/shared/webDidFlow.ts b/__tests__/shared/webDidFlow.ts index 61e47cf87..560ada324 100644 --- a/__tests__/shared/webDidFlow.ts +++ b/__tests__/shared/webDidFlow.ts @@ -66,10 +66,8 @@ export default (testContext: { it('should create identifier with alias: alice', async () => { alice = await agent.didManagerGetOrCreate({ alias: 'alice', - provider: 'did:ethr:goerli', }) - expect(alice.provider).toEqual('did:ethr:goerli') expect(alice.alias).toEqual('alice') expect(alice.did).toBeDefined() }) @@ -77,10 +75,8 @@ export default (testContext: { it('should create identifier with alias: bob', async () => { bob = await agent.didManagerGetOrCreate({ alias: 'bob', - provider: 'did:ethr:goerli', }) - expect(bob.provider).toEqual('did:ethr:goerli') expect(bob.alias).toEqual('bob') expect(bob.did).toBeDefined() }) @@ -115,12 +111,10 @@ export default (testContext: { it('issuer - Alice, subject - Bob', async () => { const a = await agent.didManagerGetOrCreate({ alias: 'alice', - provider: 'did:ethr:goerli', }) const b = await agent.didManagerGetOrCreate({ alias: 'bob', - provider: 'did:ethr:goerli', }) const verifiableCredential = await agent.createVerifiableCredential({ diff --git a/__tests__/utils/ethers-provider.ts b/__tests__/utils/ethers-provider.ts index eaba6c6a9..7909cc28f 100644 --- a/__tests__/utils/ethers-provider.ts +++ b/__tests__/utils/ethers-provider.ts @@ -1,19 +1,16 @@ -import { Web3Provider, ExternalProvider } from '@ethersproject/providers' -import { Wallet } from '@ethersproject/wallet' +import { BrowserProvider, Eip1193Provider, Wallet } from 'ethers' -export function createEthersProvider(): Web3Provider { +export function createEthersProvider(): BrowserProvider { const privateKeyHex = '0x1da6847600b0ee25e9ad9a52abbd786dd2502fa4005dd5af9310b7cc7a3b25db' const wallet = new Wallet(privateKeyHex) const mockProvider = new MockWeb3Provider(wallet) - const provider = new Web3Provider(mockProvider) + const provider = new BrowserProvider(mockProvider) return provider } +class MockWeb3Provider implements Eip1193Provider { + constructor(private wallet: Wallet) {} -class MockWeb3Provider implements ExternalProvider { - constructor(private wallet: Wallet){ - - } async request(request: { method: string; params?: any[] }): Promise { switch(request.method) { @@ -21,11 +18,15 @@ class MockWeb3Provider implements ExternalProvider { // @ts-ignore return this.wallet.signMessage(request.params[1]) break - case 'eth_signTypedData_v4': + case 'eth_signTypedData_v4': // @ts-ignore const {domain, types, message} = JSON.parse(request.params[1]) delete(types.EIP712Domain) - return this.wallet._signTypedData(domain, types, message) + return this.wallet.signTypedData(domain, types, message) + case 'eth_accounts': + return [await this.wallet.getAddress()] + case 'eth_chainId': + return "1337" break default: throw Error(`not_available: method ${request.method}`) diff --git a/__tests__/utils/ganache-provider.ts b/__tests__/utils/ganache-provider.ts index 25fa83951..312a79574 100644 --- a/__tests__/utils/ganache-provider.ts +++ b/__tests__/utils/ganache-provider.ts @@ -1,69 +1,107 @@ -import { Web3Provider } from '@ethersproject/providers' -import { Contract, ContractFactory } from '@ethersproject/contracts' +import type { JsonRpcError, JsonRpcPayload, JsonRpcResult } from 'ethers' +import { assertArgument, Contract, ContractFactory, JsonRpcApiProvider, Network } from 'ethers' import { EthereumDIDRegistry } from 'ethr-did-resolver' +import type { EthereumProvider } from 'ganache' import ganache from 'ganache' +export type GanacheConfig = Parameters[0] + +/** + * A JsonRpcApiProvider that connects to a local ganache instance. + * + * Code mostly copied from ethersjs test tooling + * (https://github.com/ethers-io/ext-provider-ganache/blob/335566b563b0a48844e2427ff9e3cd809e37d2b8/src.ts/provider-ganache.ts#L30) + */ +export class GanacheProvider extends JsonRpcApiProvider { + readonly ganache: EthereumProvider + + constructor(providerOrOptions?: EthereumProvider | GanacheConfig) { + let provider: EthereumProvider + if (providerOrOptions == null || typeof (providerOrOptions).getOptions !== 'function') { + provider = ganache.provider(providerOrOptions) + } else { + provider = providerOrOptions + } + + const network = new Network('testnet', provider.getOptions().chain.chainId) + super(network, { + staticNetwork: network, + batchMaxCount: 1, + batchStallTime: 0, + cacheTimeout: -1, + }) + + this.ganache = provider + } + + async _send(payload: JsonRpcPayload | Array): Promise> { + assertArgument(!Array.isArray(payload), 'batch requests unsupported', 'UNSUPPORTED_OPERATION', { + operation: '_send', + info: { payload }, + }) + + const result = await this.ganache.request(payload) + return [{ id: payload.id, result }] + } +} + /** * Creates a Web3Provider that connects to a local ganache instance with a bunch of known keys and an ERC1056 contract. * * This provider can only be used in a single test suite, because of some concurrency issues with ganache. */ -export async function createGanacheProvider(): Promise<{ provider: Web3Provider; registry: string }> { - const provider = new Web3Provider( - ganache.provider({ - logging: { quiet: true }, - accounts: [ - { - secretKey: '0x278a5de700e29faae8e40e366ec5012b5ec63d36ec77e8a2417154cc1d25383f', - // address: '0xf3beac30c498d9e26865f34fcaa57dbb935b0d74', - // publicKey: '03fdd57adec3d438ea237fe46b33ee1e016eda6b585c3e27ea66686c2ea5358479' - balance: '0x1000000000000000000000', - }, - { - secretKey: '0x0000000000000000000000000000000000000000000000000000000000000001', - // address: '0x7e5f4552091a69125d5dfcb7b8c2659029395bdf', - // publicKey: '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' - balance: '0x1000000000000000000000', - }, - { - secretKey: '0x0000000000000000000000000000000000000000000000000000000000000002', - // address: '0x2b5ad5c4795c026514f8317c7a215e218dccd6cf', - // publicKey: '02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5' - balance: '0x1000000000000000000000', - }, - { - secretKey: '0x0000000000000000000000000000000000000000000000000000000000000003', - // address: '0x6813eb9362372eef6200f3b1dbc3f819671cba69', - // publicKey: '02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9' - balance: '0x1000000000000000000000', - }, - { - secretKey: '0x0000000000000000000000000000000000000000000000000000000000000004', - // address: '0x1eff47bc3a10a45d4b230b5d10e37751fe6aa718', - // publicKey: '02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13' - balance: '0x1000000000000000000000', - }, - { - secretKey: '0x0000000000000000000000000000000000000000000000000000000000000005', - // address: '0xe1ab8145f7e55dc933d51a18c793f901a3a0b276' - // publicKey: '022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4' - balance: '0x1000000000000000000000', - }, - { - secretKey: '0x0000000000000000000000000000000000000000000000000000000000000006', - balance: `0x1000000000000000000000`, - }, - ], - }) as any - ) +export async function createGanacheProvider(): Promise<{ provider: JsonRpcApiProvider; registry: string }> { + const provider = new GanacheProvider({ + logging: { quiet: true }, + accounts: [ + { + secretKey: '0x278a5de700e29faae8e40e366ec5012b5ec63d36ec77e8a2417154cc1d25383f', + // address: '0xf3beac30c498d9e26865f34fcaa57dbb935b0d74', + // publicKey: '03fdd57adec3d438ea237fe46b33ee1e016eda6b585c3e27ea66686c2ea5358479' + balance: '0x1000000000000000000000', + }, + { + secretKey: '0x0000000000000000000000000000000000000000000000000000000000000001', + // address: '0x7e5f4552091a69125d5dfcb7b8c2659029395bdf', + // publicKey: '0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798' + balance: '0x1000000000000000000000', + }, + { + secretKey: '0x0000000000000000000000000000000000000000000000000000000000000002', + // address: '0x2b5ad5c4795c026514f8317c7a215e218dccd6cf', + // publicKey: '02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5' + balance: '0x1000000000000000000000', + }, + { + secretKey: '0x0000000000000000000000000000000000000000000000000000000000000003', + // address: '0x6813eb9362372eef6200f3b1dbc3f819671cba69', + // publicKey: '02f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9' + balance: '0x1000000000000000000000', + }, + { + secretKey: '0x0000000000000000000000000000000000000000000000000000000000000004', + // address: '0x1eff47bc3a10a45d4b230b5d10e37751fe6aa718', + // publicKey: '02e493dbf1c10d80f3581e4904930b1404cc6c13900ee0758474fa94abe8c4cd13' + balance: '0x1000000000000000000000', + }, + { + secretKey: '0x0000000000000000000000000000000000000000000000000000000000000005', + // address: '0xe1ab8145f7e55dc933d51a18c793f901a3a0b276' + // publicKey: '022f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4' + balance: '0x1000000000000000000000', + }, + { + secretKey: '0x0000000000000000000000000000000000000000000000000000000000000006', + balance: `0x1000000000000000000000`, + }, + ], + }) await provider.ready - const factory = ContractFactory.fromSolidity(EthereumDIDRegistry).connect(provider.getSigner(0)) + const factory = ContractFactory.fromSolidity(EthereumDIDRegistry).connect(await provider.getSigner(0)) let registryContract: Contract = await factory.deploy() - registryContract = await registryContract.deployed() - - await registryContract.deployTransaction.wait() + registryContract = await registryContract.waitForDeployment() - const registry = registryContract.address + const registry = await registryContract.getAddress() return { provider, registry } } diff --git a/package.json b/package.json index 07358458d..28e1d5bed 100644 --- a/package.json +++ b/package.json @@ -27,14 +27,10 @@ "docs:pretty": "prettier --write docs/**/*.md" }, "devDependencies": { - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.2", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", "@jest/globals": "29.7.0", "@metamask/eth-sig-util": "7.0.0", "@microsoft/api-documenter": "7.23.0", - "@microsoft/api-extractor": "7.37.0", + "@microsoft/api-extractor": "7.38.0", "@microsoft/api-extractor-model": "7.28.0", "@microsoft/tsdoc": "0.14.2", "@noble/hashes": "1.3.1", @@ -43,15 +39,16 @@ "@types/express": "4.17.17", "@types/fs-extra": "11.0.1", "@types/jest": "29.5.3", - "@types/node": "20.6.2", + "@types/node": "20.8.2", "@types/uuid": "9.0.2", "caip": "1.1.0", "credential-status": "2.0.6", "cross-env": "7.0.3", - "did-jwt": "7.2.7", - "did-jwt-vc": "3.2.7", + "did-jwt": "7.4.2", + "did-jwt-vc": "3.2.11", "did-resolver": "4.1.0", - "ethr-did-resolver": "8.1.2", + "ethers": "6.9.0", + "ethr-did-resolver": "10.1.0", "express": "4.18.2", "ganache": "7.9.0", "jest": "29.7.0", diff --git a/packages/cli/default/client.yml b/packages/cli/default/client.yml index 6150612f9..ccb4ffba1 100644 --- a/packages/cli/default/client.yml +++ b/packages/cli/default/client.yml @@ -64,3 +64,4 @@ agent: - createSelectiveDisclosureRequest - getVerifiableCredentialsForSdr - validatePresentationAgainstSdr + diff --git a/packages/cli/package.json b/packages/cli/package.json index ed1f471bb..b5cc09b07 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -59,9 +59,11 @@ "@veramo/message-handler": "workspace:^", "@veramo/remote-client": "workspace:^", "@veramo/remote-server": "workspace:^", + "@veramo/kv-store": "workspace:^", "@veramo/selective-disclosure": "workspace:^", "@veramo/url-handler": "workspace:^", "@veramo/utils": "workspace:^", + "@veramo/mediation-manager": "workspace:^", "blessed": "^0.1.81", "commander": "^11.0.0", "console-table-printer": "^2.11.2", @@ -71,7 +73,7 @@ "debug": "^4.3.4", "did-resolver": "^4.1.0", "dotenv": "^16.3.1", - "ethr-did-resolver": "^8.1.2", + "ethr-did-resolver": "^10.1.0", "express": "^4.18.2", "express-handlebars": "^7.1.1", "fuzzy": "^0.1.3", diff --git a/packages/cli/src/createCommand.ts b/packages/cli/src/createCommand.ts index a3ca5e803..b32451e85 100644 --- a/packages/cli/src/createCommand.ts +++ b/packages/cli/src/createCommand.ts @@ -12,6 +12,7 @@ import { presentation } from './presentation.js' import { explore } from './explore/index.js' import { sdr } from './sdr.js' import { server } from './server.js' +import { mediate } from './mediate.js' const requireCjs = module.createRequire(import.meta.url) const { version } = requireCjs('../package.json') @@ -30,5 +31,6 @@ const veramo = new Command('veramo') .addCommand(presentation) .addCommand(sdr) .addCommand(server) + .addCommand(mediate) export { veramo } diff --git a/packages/cli/src/mediate.ts b/packages/cli/src/mediate.ts new file mode 100644 index 000000000..367e0cf9b --- /dev/null +++ b/packages/cli/src/mediate.ts @@ -0,0 +1,212 @@ +import { Command } from 'commander' +import inquirer from 'inquirer' + +import { getAgent } from './setup.js' +import { PreMediationRequestPolicy, RecipientDid, RequesterDid } from '@veramo/mediation-manager' + +type ConfiguredAgent = Awaited> + +const ALLOW = 'ALLOW' +const DENY = 'DENY' + +type Options = Partial<{ + granted: boolean + denied: boolean + allowFrom: boolean + denyFrom: boolean + interactive: boolean + fileJson: string +}> + +type UpdatePolicyParams = { + dids: string[] + agent: ConfiguredAgent + policy?: PreMediationRequestPolicy + remove?: boolean +} + +/** + * private functions + **/ + +const updatePolicies = async (options: UpdatePolicyParams): Promise => { + const { dids, agent, policy, remove = false } = options + if (remove) { + return dids.forEach( + async (requesterDid) => await agent.mediationManagerRemoveMediationPolicy({ requesterDid }), + ) + } + if (!policy) throw new Error('No policy provided') + return dids.forEach( + async (requesterDid) => await agent.mediationManagerSaveMediationPolicy({ requesterDid, policy }), + ) +} + +const promptForDids = async (action: string): Promise => { + const { dids } = await inquirer.prompt<{ dids: string }>({ + type: 'input', + name: 'dids', + message: `Enter the dids you want to ${action.toLowerCase()} separated by spaces:`, + }) + return dids.split(' ') +} + +/** + * handler function instantiates agent and directs user to README if no Mediation Manager plugin is configured + **/ + +type Action = (options: T, cmd: Command, agent: ConfiguredAgent) => Promise + +function handler(action: Action) { + return async (options: Options, cmd: Command) => { + const agent = await getAgent(cmd.optsWithGlobals().config) + /** + * NOTE: check if the mediation-manager plugin is configured + **/ + if ('isMediateDefaultGrantAll' in agent) return await action(options, cmd, agent) + console.log('[warning] it appears that the Mediation Manager plugin is not configured.') + console.log('[tip] refer to the README (packages/mediation-manager/README.md) for guidance. \n') + throw new Error('[error] Mediation Manager not configured!') + } +} + +/** + * cli action functions + **/ + +const policy = (policy: PreMediationRequestPolicy) => { + return async function ( + { fileJson, interactive }: Pick, + cmd: Command, + agent: ConfiguredAgent, + ): Promise { + try { + if (fileJson && interactive) throw new Error('Please specify only one input method') + + if (fileJson) { + const jsonData = await import(fileJson, { assert: { type: 'json' } }) + const dids = jsonData.default + await updatePolicies({ dids, agent, policy }) + } else if (interactive) { + const dids = await promptForDids(policy) + await updatePolicies({ dids, agent, policy }) + } else { + const dids = cmd.args + await updatePolicies({ dids, agent, policy }) + } + + console.log('Mediation policies updated') + } catch (e) { + console.error(e.message) + } + } +} +const readPolicies: Action> = async (options, cmd, agent) => { + let dids: string[] + if (options.interactive) dids = await promptForDids('read') + else if (options.fileJson) dids = (await import(options.fileJson, { assert: { type: 'json' } })).default + else dids = cmd.args + if (!dids || !dids.length) throw new Error('No dids provided') + const policies: Record = {} + for await (const requesterDid of dids) { + policies[requesterDid] = await agent.mediationManagerGetMediationPolicy({ requesterDid }) + } + console.log('POLICIES') + console.table(policies) +} + +const listPolicies: Action> = async (options, _cmd, agent) => { + try { + const res = await agent.mediationManagerListMediationPolicies() + console.log('POLICIES') + if (options.allowFrom) return console.table(Object.entries(res).filter(([, policy]) => policy === ALLOW)) + if (options.denyFrom) return console.table(Object.entries(res).filter(([, policy]) => policy === DENY)) + else console.table(res) + } catch (e) { + console.error(e.message) + } +} + +const listResponses: Action> = async (options, _cmd, agent) => { + try { + const { granted, denied } = options + const res = await agent.mediationManagerGetAllMediations() + console.log('MEDIATIONS') + if (granted) return console.table(Object.entries(res).filter(([, response]) => response === 'GRANTED')) + if (denied) return console.table(Object.entries(res).filter(([, response]) => response === 'DENIED')) + else console.table(res) + } catch (e) { + console.error(e.message) + } +} + +const removePolicies: Action> = async (options, cmd, agent) => { + try { + if (options.fileJson) { + const jsonData = await import(options.fileJson, { assert: { type: 'json' } }) + const dids = jsonData.default + await updatePolicies({ dids, remove: true, agent }) + } else if (options.interactive) { + const dids = await promptForDids('Remove') + await updatePolicies({ dids, remove: true, agent }) + } else { + const dids = cmd.args + await updatePolicies({ dids, remove: true, agent }) + } + console.log('Mediation policies removed') + } catch (e) { + console.error(e.message) + } +} + +const mediate = new Command('mediate').description('Mediate allow or deny policy on dids').addHelpText( + 'before', + ` + IMPORTANT! in order to use the commands below, you need to configure the Mediate Manager in your agent.yml', + see the README (packages/mediation-manager/README.md) for guidance. + `, +) + +mediate + .command('allow-from') + .description('add dids that should be allowed for mediation') + .option('-f, --file-json ', 'read dids from json file') + .option('-i, --interactive', 'interactively input dids') + .action(handler(policy(ALLOW))) + +mediate + .command('deny-from') + .description('deny dids that should be denied for mediation') + .option('-f, --file-json ', 'read dids from json file') + .option('-i, --interactive', 'interactively input dids') + .action(handler(policy(DENY))) + +mediate + .command('read') + .description('read mediation policy for a specific did (or list of dids)') + .option('-i, --interactive', 'interactively input dids') + .option('-f, --file-json ', 'read dids from json file') + .action(handler(readPolicies)) + +mediate + .command('list-policies') + .description('list mediation policies') + .option('-a, --allow-from', 'list allow policies') + .option('-d, --deny-from', 'list deny policies') + .action(handler(listPolicies)) + +mediate + .command('list-responses') + .description('list mediation responses') + .option('-a, --granted', 'list granted policies') + .option('-d, --denied', 'list denied policies') + .action(handler(listResponses)) + +mediate + .command('remove') + .description('remove mediation policies') + .option('-f, --file-json ', 'read dids from json file') + .option('-i, --interactive', 'interactively input dids') + .action(handler(removePolicies)) + +export { mediate } diff --git a/packages/cli/src/setup.ts b/packages/cli/src/setup.ts index 9a77378bc..82cae7d9a 100644 --- a/packages/cli/src/setup.ts +++ b/packages/cli/src/setup.ts @@ -9,6 +9,10 @@ import { IResolver, TAgent, } from '@veramo/core-types' +import { + IMediationManager, + +} from "@veramo/mediation-manager" import { ISelectiveDisclosure } from '@veramo/selective-disclosure' import { IDIDComm } from '@veramo/did-comm' import { IDIDDiscovery } from '@veramo/did-discovery' @@ -57,7 +61,8 @@ export type EnabledInterfaces = IDIDManager & IDIDComm & ICredentialPlugin & ISelectiveDisclosure & - IDIDDiscovery + IDIDDiscovery & + IMediationManager export type ConfiguredAgent = TAgent diff --git a/packages/core-types/package.json b/packages/core-types/package.json index 3004a5e89..488396585 100644 --- a/packages/core-types/package.json +++ b/packages/core-types/package.json @@ -35,7 +35,7 @@ "dependencies": { "credential-status": "^2.0.5", "debug": "^4.3.3", - "did-jwt-vc": "^3.2.5", + "did-jwt-vc": "^3.2.10", "did-resolver": "^4.1.0" }, "devDependencies": { diff --git a/packages/core-types/src/plugin.schema.json b/packages/core-types/src/plugin.schema.json index e8576f669..81b0be3dd 100644 --- a/packages/core-types/src/plugin.schema.json +++ b/packages/core-types/src/plugin.schema.json @@ -347,18 +347,35 @@ "description": "Represents an endpoint of a Service entry in a DID document." }, "DIDDocumentSection": { + "anyOf": [ + { + "$ref": "#/components/schemas/KeyCapabilitySection" + }, + { + "type": "string", + "const": "verificationMethod" + }, + { + "type": "string", + "const": "publicKey" + }, + { + "type": "string", + "const": "service" + } + ], + "description": "Refers to a section of a DID document. Either the list of verification methods or services or one of the verification relationships.\n\nSee {@link https://www.w3.org/TR/did-core/#verification-relationships | verification relationships }" + }, + "KeyCapabilitySection": { "type": "string", "enum": [ - "verificationMethod", - "publicKey", - "service", "authentication", "assertionMethod", "keyAgreement", "capabilityInvocation", "capabilityDelegation" ], - "description": "Refers to a section of a DID document. Either the list of verification methods or services or one of the verification relationships.\n\nSee {@link https://www.w3.org/TR/did-core/#verification-relationships | verification relationships }" + "description": "Represents the Verification Relationship between a DID subject and a Verification Method." }, "DIDDocComponent": { "anyOf": [ @@ -557,7 +574,7 @@ }, "TAlg": { "type": "string", - "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta.algorithms } property to see what is possible for a particular managed key." + "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta | IKey.meta.algorithms } property to see what is possible for a particular managed key." }, "ManagedKeyInfo": { "type": "object", @@ -1131,7 +1148,7 @@ }, "TAlg": { "type": "string", - "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta.algorithms } property to see what is possible for a particular managed key." + "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta | IKey.meta.algorithms } property to see what is possible for a particular managed key." }, "IDIDManagerAddServiceArgs": { "type": "object", @@ -2812,7 +2829,7 @@ }, "TAlg": { "type": "string", - "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta.algorithms } property to see what is possible for a particular managed key." + "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta | IKey.meta.algorithms } property to see what is possible for a particular managed key." }, "IService": { "type": "object", @@ -3412,7 +3429,8 @@ "issuer", "subject", "expirationDate", - "issuanceDate" + "issuanceDate", + "hash" ], "description": "The columns that can be searched for a {@link VerifiableCredential } \n\nSee {@link IDataStoreORM.dataStoreORMGetVerifiableCredentials } \nSee {@link IDataStoreORM.dataStoreORMGetVerifiableCredentialsCount }" }, @@ -4207,7 +4225,7 @@ "save": { "type": "boolean", "description": "If this parameter is true, the resulting VerifiablePresentation is sent to the\n {@link @veramo/core-types#IDataStore | storage plugin } to be saved.", - "deprecated": "Please call\n{@link @veramo/core-types#IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential()} to save\nthe credential after creating it." + "deprecated": "Please call\n{@link @veramo/core-types#IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential()} to\nsave the credential after creating it." }, "proofFormat": { "$ref": "#/components/schemas/ProofFormat", @@ -4421,7 +4439,7 @@ "save": { "type": "boolean", "description": "If this parameter is true, the resulting VerifiablePresentation is sent to the\n {@link @veramo/core-types#IDataStore | storage plugin } to be saved.

", - "deprecated": "Please call\n{@link @veramo/core-types#IDataStore.dataStoreSaveVerifiablePresentation | dataStoreSaveVerifiablePresentation()} to\nsave the credential after creating it." + "deprecated": "Please call\n{@link @veramo/core-types#IDataStore.dataStoreSaveVerifiablePresentation |} * dataStoreSaveVerifiablePresentation()} to save the credential after creating it." }, "challenge": { "type": "string", @@ -4567,6 +4585,167 @@ "proof" ], "description": "Represents a signed Verifiable Presentation (includes proof), using a JSON representation. See {@link https://www.w3.org/TR/vc-data-model/#presentations | VP data model }" + }, + "IIdentifier": { + "type": "object", + "properties": { + "did": { + "type": "string", + "description": "Decentralized identifier" + }, + "alias": { + "type": "string", + "description": "Optional. Identifier alias. Can be used to reference an object in an external system" + }, + "provider": { + "type": "string", + "description": "Identifier provider name" + }, + "controllerKeyId": { + "type": "string", + "description": "Controller key id" + }, + "keys": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IKey" + }, + "description": "Array of managed keys" + }, + "services": { + "type": "array", + "items": { + "$ref": "#/components/schemas/IService" + }, + "description": "Array of services" + } + }, + "required": [ + "did", + "provider", + "keys", + "services" + ], + "description": "Identifier interface" + }, + "IKey": { + "type": "object", + "properties": { + "kid": { + "type": "string", + "description": "Key ID" + }, + "kms": { + "type": "string", + "description": "Key Management System" + }, + "type": { + "$ref": "#/components/schemas/TKeyType", + "description": "Key type" + }, + "publicKeyHex": { + "type": "string", + "description": "Public key" + }, + "privateKeyHex": { + "type": "string", + "description": "Optional. Private key" + }, + "meta": { + "anyOf": [ + { + "$ref": "#/components/schemas/KeyMetadata" + }, + { + "type": "null" + } + ], + "description": "Optional. Key metadata. This should be used to determine which algorithms are supported." + } + }, + "required": [ + "kid", + "kms", + "type", + "publicKeyHex" + ], + "description": "Cryptographic key, usually managed by the current Veramo instance." + }, + "TKeyType": { + "type": "string", + "enum": [ + "Ed25519", + "Secp256k1", + "Secp256r1", + "X25519", + "Bls12381G1", + "Bls12381G2" + ], + "description": "Cryptographic key type." + }, + "KeyMetadata": { + "type": "object", + "properties": { + "algorithms": { + "type": "array", + "items": { + "$ref": "#/components/schemas/TAlg" + } + } + }, + "description": "This encapsulates data about a key.\n\nImplementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | AbstractKeyManagementSystem } should populate this object, for each key, with the algorithms that can be performed using it.\n\nThis can also be used to add various tags to the keys under management." + }, + "TAlg": { + "type": "string", + "description": "Known algorithms supported by some of the above key types defined by {@link TKeyType } .\n\nActual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems } can support more. One should check the {@link IKey.meta | IKey.meta.algorithms } property to see what is possible for a particular managed key." + }, + "IService": { + "type": "object", + "properties": { + "id": { + "type": "string", + "description": "ID" + }, + "type": { + "type": "string", + "description": "Service type" + }, + "serviceEndpoint": { + "anyOf": [ + { + "$ref": "#/components/schemas/IServiceEndpoint" + }, + { + "type": "array", + "items": { + "$ref": "#/components/schemas/IServiceEndpoint" + } + } + ], + "description": "Endpoint URL" + }, + "description": { + "type": "string", + "description": "Optional. Description" + } + }, + "required": [ + "id", + "type", + "serviceEndpoint" + ], + "description": "Identifier service" + }, + "IServiceEndpoint": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object" + } + ], + "description": "Represents a service endpoint URL or a map of URLs" } }, "methods": { @@ -4587,6 +4766,18 @@ "returnType": { "$ref": "#/components/schemas/VerifiablePresentation" } + }, + "listUsableProofFormats": { + "description": "Returns a list of supported proof formats.", + "arguments": { + "$ref": "#/components/schemas/IIdentifier" + }, + "returnType": { + "type": "array", + "items": { + "$ref": "#/components/schemas/ProofFormat" + } + } } } } diff --git a/packages/core-types/src/types/ICredentialIssuer.ts b/packages/core-types/src/types/ICredentialIssuer.ts index 296800726..9ce6d56e6 100644 --- a/packages/core-types/src/types/ICredentialIssuer.ts +++ b/packages/core-types/src/types/ICredentialIssuer.ts @@ -9,6 +9,7 @@ import { IResolver } from './IResolver.js' import { IDIDManager } from './IDIDManager.js' import { IDataStore } from './IDataStore.js' import { IKeyManager } from './IKeyManager.js' +import { IIdentifier, IKey } from "./IIdentifier.js"; /** * The type of encoding to be used for the Verifiable Credential or Presentation to be generated. @@ -42,8 +43,8 @@ export interface ICreateVerifiablePresentationArgs { * {@link @veramo/core-types#IDataStore | storage plugin} to be saved. *

* @deprecated Please call - * {@link @veramo/core-types#IDataStore.dataStoreSaveVerifiablePresentation | dataStoreSaveVerifiablePresentation()} to - * save the credential after creating it. + * {@link @veramo/core-types#IDataStore.dataStoreSaveVerifiablePresentation | + * dataStoreSaveVerifiablePresentation()} to save the credential after creating it. */ save?: boolean @@ -113,8 +114,8 @@ export interface ICreateVerifiableCredentialArgs { * {@link @veramo/core-types#IDataStore | storage plugin} to be saved. * * @deprecated Please call - * {@link @veramo/core-types#IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential()} to save - * the credential after creating it. + * {@link @veramo/core-types#IDataStore.dataStoreSaveVerifiableCredential | dataStoreSaveVerifiableCredential()} to + * save the credential after creating it. */ save?: boolean @@ -191,8 +192,8 @@ export interface ICredentialIssuer extends IPluginMethodMap { * @param args - Arguments necessary to create the Presentation. * @param context - This reserved param is automatically added and handled by the framework, *do not override* * - * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiableCredential} that was requested or rejects - * with an error if there was a problem with the input or while getting the key to sign + * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiableCredential} that was requested or + * rejects with an error if there was a problem with the input or while getting the key to sign * * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#credentials | Verifiable Credential data model} */ @@ -200,6 +201,24 @@ export interface ICredentialIssuer extends IPluginMethodMap { args: ICreateVerifiableCredentialArgs, context: IssuerAgentContext, ): Promise + + /** + * Returns a list of supported proof formats. + * @param identifier - The identifier that may be used to sign a credential or presentation + * @param context - This reserved param is automatically added and handled by the framework, *do not override* + * + * @beta This API may change without a BREAKING CHANGE notice. + */ + listUsableProofFormats(identifier: IIdentifier, context: IAgentContext<{}>): Promise> + + /** + * Checks if a key is suitable for signing JWT payloads. + * @param key - the key to check for compatibility + * @param context - This reserved param is automatically added and handled by the framework, *do not override* + * + * @internal + */ + matchKeyForJWT(key: IKey, context: IAgentContext): Promise } /** @@ -212,7 +231,7 @@ export interface ICredentialIssuer extends IPluginMethodMap { */ export type IssuerAgentContext = IAgentContext< IResolver & - Pick & - Pick & - Pick + Pick & + Pick & + Pick > diff --git a/packages/core-types/src/types/IDataStoreORM.ts b/packages/core-types/src/types/IDataStoreORM.ts index 5608e5640..cabc672a7 100644 --- a/packages/core-types/src/types/IDataStoreORM.ts +++ b/packages/core-types/src/types/IDataStoreORM.ts @@ -106,6 +106,7 @@ export type TCredentialColumns = | 'subject' | 'expirationDate' | 'issuanceDate' + | 'hash' /** * The columns that can be searched for the claims of a {@link VerifiableCredential} diff --git a/packages/core-types/src/types/IIdentifier.ts b/packages/core-types/src/types/IIdentifier.ts index e73606de4..eadf8ba39 100644 --- a/packages/core-types/src/types/IIdentifier.ts +++ b/packages/core-types/src/types/IIdentifier.ts @@ -57,8 +57,8 @@ export type TKeyType = 'Ed25519' | 'Secp256k1' | 'Secp256r1' | 'X25519' | 'Bls12 * Known algorithms supported by some of the above key types defined by {@link TKeyType}. * * Actual implementations of {@link @veramo/key-manager#AbstractKeyManagementSystem | Key Management Systems} can - * support more. One should check the {@link IKey.meta.algorithms} property to see what is possible - * for a particular managed key. + * support more. One should check the {@link IKey.meta | IKey.meta.algorithms} property to see what is possible for a + * particular managed key. * * @public */ diff --git a/packages/core-types/src/types/IResolver.ts b/packages/core-types/src/types/IResolver.ts index f273956b2..5be9c7daa 100644 --- a/packages/core-types/src/types/IResolver.ts +++ b/packages/core-types/src/types/IResolver.ts @@ -2,6 +2,7 @@ import { DIDDocument, DIDResolutionOptions, DIDResolutionResult, + KeyCapabilitySection, ServiceEndpoint, VerificationMethod, } from 'did-resolver' @@ -78,10 +79,7 @@ export interface IResolver extends IPluginMethodMap { * didUrl: 'did:ethr:0xb09b66026ba5909a7cfe99b76875431d2b8d5190' * }) * expect(doc.didDocument).toEqual({ - * '@context': [ - * 'https://www.w3.org/ns/did/v1', - * 'https://w3id.org/security/suites/secp256k1recovery-2020/v2', - * ], + * '@context': expect.anything(), * id: 'did:ethr:0xb09b66026ba5909a7cfe99b76875431d2b8d5190', * verificationMethod: [ * { @@ -142,11 +140,7 @@ export interface IResolver extends IPluginMethodMap { * @public */ export type DIDDocumentSection = + | KeyCapabilitySection | 'verificationMethod' | 'publicKey' //used for backward compatibility | 'service' - | 'authentication' - | 'assertionMethod' - | 'keyAgreement' - | 'capabilityInvocation' - | 'capabilityDelegation' diff --git a/packages/core/src/agent.ts b/packages/core/src/agent.ts index 5ed042471..199bdad6d 100644 --- a/packages/core/src/agent.ts +++ b/packages/core/src/agent.ts @@ -29,7 +29,7 @@ const filterUnauthorizedMethods = ( /** * Provides a common context for all plugin methods. * - * This is the main entry point into the API of the DID Agent Framework. + * This is the main entry point into the API of Veramo. * When plugins are installed, they extend the API of the agent and the methods * they provide can all use the common context so that plugins can build on top * of each other and create a richer experience. diff --git a/packages/credential-eip712/package.json b/packages/credential-eip712/package.json index 73ef76f55..edc94a5eb 100644 --- a/packages/credential-eip712/package.json +++ b/packages/credential-eip712/package.json @@ -18,7 +18,7 @@ } }, "dependencies": { - "@metamask/eth-sig-util": "^6.0.0", + "@metamask/eth-sig-util": "^7.0.0", "@veramo/core-types": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.3", diff --git a/packages/credential-eip712/src/agent/CredentialEIP712.ts b/packages/credential-eip712/src/agent/CredentialEIP712.ts index 39463faab..086be920b 100644 --- a/packages/credential-eip712/src/agent/CredentialEIP712.ts +++ b/packages/credential-eip712/src/agent/CredentialEIP712.ts @@ -2,6 +2,7 @@ import { CredentialPayload, IAgentPlugin, IIdentifier, + IKey, PresentationPayload, VerifiableCredential, VerifiablePresentation, @@ -10,6 +11,7 @@ import { extractIssuer, getChainIdForDidEthr, getEthereumAddress, + intersect, isDefined, MANDATORY_CREDENTIAL_CONTEXT, mapIdentifierKeysToDoc, @@ -17,7 +19,7 @@ import { removeDIDParameters, resolveDidOrThrow, } from '@veramo/utils' -import schema from "../plugin.schema.json" assert { type: 'json' } +import schema from '../plugin.schema.json' assert { type: 'json' } import { recoverTypedSignature, SignTypedDataVersion } from '@metamask/eth-sig-util' import { @@ -46,6 +48,7 @@ export class CredentialIssuerEIP712 implements IAgentPlugin { createVerifiablePresentationEIP712: this.createVerifiablePresentationEIP712.bind(this), verifyCredentialEIP712: this.verifyCredentialEIP712.bind(this), verifyPresentationEIP712: this.verifyPresentationEIP712.bind(this), + matchKeyForEIP712: this.matchKeyForEIP712.bind(this), } } @@ -146,7 +149,7 @@ export class CredentialIssuerEIP712 implements IAgentPlugin { const compat = { ...eip712Domain, - ...eip712 + ...eip712, } compat.types = compat.types || compat.messageSchema @@ -214,9 +217,10 @@ export class CredentialIssuerEIP712 implements IAgentPlugin { } if (args.presentation.verifiableCredential) { - const credentials = args.presentation.verifiableCredential.map((cred) => { + // EIP712 arrays must use a single data type, so we map all credentials to strings. + presentation.verifiableCredential = args.presentation.verifiableCredential.map((cred) => { // map JWT credentials to their canonical form - if(typeof cred === 'string') { + if (typeof cred === 'string') { return cred } else if (cred.proof.jwt) { return cred.proof.jwt @@ -224,7 +228,6 @@ export class CredentialIssuerEIP712 implements IAgentPlugin { return JSON.stringify(cred) } }) - presentation.verifiableCredential = credentials } const holder = removeDIDParameters(presentation.holder) @@ -303,7 +306,7 @@ export class CredentialIssuerEIP712 implements IAgentPlugin { const compat = { ...eip712Domain, - ...eip712 + ...eip712, } compat.types = compat.types || compat.messageSchema @@ -343,4 +346,16 @@ export class CredentialIssuerEIP712 implements IAgentPlugin { return false } + + /** + * Checks if a key is suitable for signing EIP712 payloads. + * This relies on the metadata set by the key management system to determine if this key can sign EIP712 payloads. + * + * @param k - the key to check + * + * @internal + */ + async matchKeyForEIP712(k: IKey): Promise { + return intersect(k.meta?.algorithms ?? [], ['eth_signTypedData', 'EthereumEip712Signature2021']).length > 0 + } } diff --git a/packages/credential-eip712/src/types/ICredentialEIP712.ts b/packages/credential-eip712/src/types/ICredentialEIP712.ts index 1a83d477b..9a5d4d5b4 100644 --- a/packages/credential-eip712/src/types/ICredentialEIP712.ts +++ b/packages/credential-eip712/src/types/ICredentialEIP712.ts @@ -2,6 +2,7 @@ import { CredentialPayload, IAgentContext, IDIDManager, + IKey, IKeyManager, IPluginMethodMap, IResolver, @@ -15,7 +16,8 @@ import { * that use EIP712 proof format. * * @remarks Please see {@link https://www.w3.org/TR/vc-data-model | W3C Verifiable Credentials data model} - * @remarks Please see {@link https://w3c-ccg.github.io/ethereum-eip712-signature-2021-spec/ | EthereumEip712Signature2021} + * @remarks Please see + * {@link https://w3c-ccg.github.io/ethereum-eip712-signature-2021-spec/ | EthereumEip712Signature2021} * * @beta This API may change without a BREAKING CHANGE notice. */ @@ -27,8 +29,8 @@ export interface ICredentialIssuerEIP712 extends IPluginMethodMap { * @param args - Arguments necessary to create the Credential. * @param context - This reserved param is automatically added and handled by the framework, *do not override* * - * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiableCredential} that was requested or rejects with an error - * if there was a problem with the input or while getting the key to sign + * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiableCredential} that was requested or + * rejects with an error if there was a problem with the input or while getting the key to sign * * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#credentials | Verifiable Credential data model} * @@ -60,10 +62,11 @@ export interface ICredentialIssuerEIP712 extends IPluginMethodMap { * @param args - Arguments necessary to create the Presentation. * @param context - This reserved param is automatically added and handled by the framework, *do not override* * - * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiablePresentation} that was requested or rejects with an error - * if there was a problem with the input or while getting the key to sign + * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiablePresentation} that was requested or + * rejects with an error if there was a problem with the input or while getting the key to sign * - * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#presentations | Verifiable Presentation data model } + * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#presentations | Verifiable Presentation data model + * } */ createVerifiablePresentationEIP712( args: ICreateVerifiablePresentationEIP712Args, @@ -81,6 +84,17 @@ export interface ICredentialIssuerEIP712 extends IPluginMethodMap { * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#presentations | Verifiable Credential data model} */ verifyPresentationEIP712(args: IVerifyPresentationEIP712Args, context: IRequiredContext): Promise + + /** + * Checks if a key is suitable for signing EIP712 payloads. + * This relies on the metadata set by the key management system to determine if this key can sign EIP712 payloads. + * + * @param key - the key to check + * @param context - This reserved param is automatically added and handled by the framework, *do not override* + * + * @internal + */ + matchKeyForEIP712(key: IKey, context: IRequiredContext): Promise } /** diff --git a/packages/credential-ld/src/action-handler.ts b/packages/credential-ld/src/action-handler.ts index ee1b55bba..f7b788576 100644 --- a/packages/credential-ld/src/action-handler.ts +++ b/packages/credential-ld/src/action-handler.ts @@ -16,6 +16,7 @@ import { LdContextLoader } from './ld-context-loader.js' import { _ExtendedIKey, extractIssuer, + intersect, isDefined, MANDATORY_CREDENTIAL_CONTEXT, mapIdentifierKeysToDoc, @@ -61,6 +62,7 @@ export class CredentialIssuerLD implements IAgentPlugin { createVerifiableCredentialLD: this.createVerifiableCredentialLD.bind(this), verifyCredentialLD: this.verifyCredentialLD.bind(this), verifyPresentationLD: this.verifyPresentationLD.bind(this), + matchKeyForLDSuite: this.matchKeyForLDSuite.bind(this), } } @@ -255,9 +257,32 @@ export class CredentialIssuerLD implements IAgentPlugin { signingKey = extendedKeys.find((k) => supportedTypes.includes(k.meta.verificationMethod.type)) } - if (!signingKey) throw Error(`key_not_found: No suitable signing key found for ${identifier.did}`) verificationMethodId = signingKey.meta.verificationMethod.id return { signingKey, verificationMethodId } } + + /** + * Returns true if the key is supported by any of the installed LD Signature suites + * @param k - the key to verify + * + * @internal + */ + async matchKeyForLDSuite(k: IKey): Promise { + // prefilter based on key algorithms + switch (k.type) { + case 'Ed25519': + if (!k.meta?.algorithms?.includes('EdDSA')) return false + break + case 'Secp256k1': + if (intersect(k.meta?.algorithms ?? [], ['ES256K-R', 'ES256K']).length == 0) return false + break + } + + // TODO: this should return a list of supported suites, not just a boolean + const suites = this.ldCredentialModule.ldSuiteLoader.getAllSignatureSuites() + return suites + .map((suite: VeramoLdSignature) => suite.getSupportedVeramoKeyType().includes(k.type)) + .some((supportsThisKey: boolean) => supportsThisKey) + } } diff --git a/packages/credential-ld/src/suites/EcdsaSecp256k1RecoverySignature2020.ts b/packages/credential-ld/src/suites/EcdsaSecp256k1RecoverySignature2020.ts index 7d9679df0..7a8e8b764 100644 --- a/packages/credential-ld/src/suites/EcdsaSecp256k1RecoverySignature2020.ts +++ b/packages/credential-ld/src/suites/EcdsaSecp256k1RecoverySignature2020.ts @@ -1,7 +1,7 @@ import { RequiredAgentMethods, VeramoLdSignature } from '../ld-suites.js' import { CredentialPayload, DIDDocument, IAgentContext, IKey, TKeyType } from '@veramo/core-types' import ldsEcdsa from '@veramo-community/lds-ecdsa-secp256k1-recovery2020' -import { asArray, bytesToBase64, concat, encodeJoseBlob, stringToUtf8Bytes } from '@veramo/utils' +import { asArray, bytesToBase64, concat, encodeJoseBlob, intersect, stringToUtf8Bytes } from '@veramo/utils' const { EcdsaSecp256k1RecoveryMethod2020, EcdsaSecp256k1RecoverySignature2020 } = ldsEcdsa @@ -72,14 +72,24 @@ export class VeramoEcdsaSecp256k1RecoverySignature2020 extends VeramoLdSignature preSigningCredModification(credential: CredentialPayload): void {} async preDidResolutionModification(didUrl: string, didDoc: DIDDocument): Promise { - // did:ethr - const idx = - didDoc['@context']?.indexOf( - 'https://identity.foundation/EcdsaSecp256k1RecoverySignature2020/lds-ecdsa-secp256k1-recovery2020-0.0.jsonld', - ) || -1 - if (Array.isArray(didDoc['@context']) && idx !== -1) { - didDoc['@context'][idx] = this.getContext() + const ctx = asArray(didDoc['@context']) + const legacyContext = + 'https://identity.foundation/EcdsaSecp256k1RecoverySignature2020/lds-ecdsa-secp256k1-recovery2020-0.0.jsonld' + const unstableContext = 'https://w3id.org/security/v3-unstable' + + // Old did:ethr resolvers would return a broken context link + const idx = ctx.indexOf(legacyContext) + if (idx !== -1) { + ctx[idx] = this.getContext() + } + + // this verification suite does not support both https://w3id.org/security/suites/secp256k1recovery-2020/v2 and + // https://w3id.org/security/v3-unstable as DID document @context, complaining that the `blockchainAccountId` is + // being redefined. + if (intersect(ctx, [unstableContext, this.getContext()]).length == 2) { + ctx.splice(ctx.indexOf(unstableContext), 1) } + didDoc['@context'] = ctx if (didUrl.toLowerCase().startsWith('did:ethr')) { //EcdsaSecp256k1RecoveryMethod2020 does not support older format blockchainAccountId @@ -94,6 +104,7 @@ export class VeramoEcdsaSecp256k1RecoverySignature2020 extends VeramoLdSignature } return didDoc } + getContext(): string { return 'https://w3id.org/security/suites/secp256k1recovery-2020/v2' } diff --git a/packages/credential-ld/src/suites/Ed25519Signature2020.ts b/packages/credential-ld/src/suites/Ed25519Signature2020.ts index 191687b72..40f1a8170 100644 --- a/packages/credential-ld/src/suites/Ed25519Signature2020.ts +++ b/packages/credential-ld/src/suites/Ed25519Signature2020.ts @@ -66,7 +66,7 @@ export class VeramoEd25519Signature2020 extends VeramoLdSignature { const verificationKey = new Ed25519VerificationKey2020({ id, controller, - publicKeyMultibase: bytesToMultibase(hexToBytes(key.publicKeyHex), 'Ed25519'), + publicKeyMultibase: bytesToMultibase(hexToBytes(key.publicKeyHex), 'base58btc', 'ed25519-pub'), // signer: () => signer, // type: this.getSupportedVerificationType(), }) @@ -139,7 +139,7 @@ export class VeramoEd25519Signature2020 extends VeramoLdSignature { // publicKeyMultibase is required by this suite if (!vm.publicKeyMultibase) { const publicKeyHex = extractPublicKeyHex(vm) - vm.publicKeyMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'Ed25519') + vm.publicKeyMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'base58btc', 'ed25519-pub') } } return vm diff --git a/packages/credential-ld/src/types.ts b/packages/credential-ld/src/types.ts index d8c91f46e..4e8ac2744 100644 --- a/packages/credential-ld/src/types.ts +++ b/packages/credential-ld/src/types.ts @@ -2,6 +2,7 @@ import { CredentialPayload, IAgentContext, IDIDManager, + IKey, IKeyManager, IPluginMethodMap, IResolver, @@ -27,10 +28,11 @@ export interface ICredentialIssuerLD extends IPluginMethodMap { * @param args - Arguments necessary to create the Presentation. * @param context - This reserved param is automatically added and handled by the framework, *do not override* * - * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiablePresentation} that was requested or rejects with an error - * if there was a problem with the input or while getting the key to sign + * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiablePresentation} that was requested or + * rejects with an error if there was a problem with the input or while getting the key to sign * - * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#presentations | Verifiable Presentation data model } + * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#presentations | Verifiable Presentation data model + * } * * @beta This API may change without a BREAKING CHANGE notice. */ @@ -46,8 +48,8 @@ export interface ICredentialIssuerLD extends IPluginMethodMap { * @param args - Arguments necessary to create the Presentation. * @param context - This reserved param is automatically added and handled by the framework, *do not override* * - * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiableCredential} that was requested or rejects with an error - * if there was a problem with the input or while getting the key to sign + * @returns - a promise that resolves to the {@link @veramo/core-types#VerifiableCredential} that was requested or + * rejects with an error if there was a problem with the input or while getting the key to sign * * @remarks Please see {@link https://www.w3.org/TR/vc-data-model/#credentials | Verifiable Credential data model} * @@ -85,6 +87,15 @@ export interface ICredentialIssuerLD extends IPluginMethodMap { * @beta This API may change without a BREAKING CHANGE notice. */ verifyPresentationLD(args: IVerifyPresentationLDArgs, context: IRequiredContext): Promise + + /** + * Returns true if the key is supported by any of the installed LD Signature suites + * @param key - the key to verify + * @param context - This reserved param is automatically added and handled by the framework, *do not override* + * + * @internal + */ + matchKeyForLDSuite(key: IKey, context: IAgentContext<{}>): Promise } /** diff --git a/packages/credential-status/package.json b/packages/credential-status/package.json index eeef9e15f..e4bf5dc48 100644 --- a/packages/credential-status/package.json +++ b/packages/credential-status/package.json @@ -13,7 +13,7 @@ "@veramo/core-types": "workspace:^", "@veramo/utils": "workspace:^", "credential-status": "^2.0.5", - "did-jwt": "^7.2.5", + "did-jwt": "^7.4.1", "did-resolver": "^4.1.0" }, "devDependencies": { diff --git a/packages/credential-w3c/package.json b/packages/credential-w3c/package.json index a463cab58..a69b103a6 100644 --- a/packages/credential-w3c/package.json +++ b/packages/credential-w3c/package.json @@ -18,8 +18,8 @@ "@veramo/utils": "workspace:^", "canonicalize": "^2.0.0", "debug": "^4.3.3", - "did-jwt": "^7.2.5", - "did-jwt-vc": "^3.2.5", + "did-jwt": "^7.4.1", + "did-jwt-vc": "^3.2.10", "did-resolver": "^4.1.0", "uuid": "^9.0.0" }, diff --git a/packages/credential-w3c/src/__tests__/message-handler.test.ts b/packages/credential-w3c/src/__tests__/message-handler.test.ts index 218221b72..d16e65ecb 100644 --- a/packages/credential-w3c/src/__tests__/message-handler.test.ts +++ b/packages/credential-w3c/src/__tests__/message-handler.test.ts @@ -1,9 +1,8 @@ -import { DIDResolutionResult, IAgentContext, ICredentialPlugin, IResolver } from '../../../core-types/src' +import { DIDResolutionResult, IAgentContext, ICredentialVerifier, IResolver } from '../../../core-types/src' import { Message } from '../../../message-handler/src' import { IContext, MessageTypes, W3cMessageHandler } from '../message-handler.js' import { jest } from '@jest/globals' -import { blake2b } from '@noble/hashes/blake2b' -import { bytesToHex } from '../../../utils/src' +import { computeEntryHash } from '../../../utils/src' describe('@veramo/credential-w3c', () => { const handler = new W3cMessageHandler() @@ -65,13 +64,11 @@ describe('@veramo/credential-w3c', () => { } } }, - createVerifiableCredential: jest.fn(), - createVerifiablePresentation: jest.fn(), verifyCredential: jest.fn(), verifyPresentation: jest.fn(), getDIDComponentById: jest.fn(), }, - } as IAgentContext + } as IAgentContext it('should reject unknown message type', async () => { expect.assertions(1) @@ -120,7 +117,7 @@ describe('@veramo/credential-w3c', () => { message.addMetaData({ type: 'JWT', value: 'ES256K-R' }) const handled = await handler.handle(message, context) expect(handled.isValid()).toEqual(true) - expect(handled.id).toEqual(bytesToHex(blake2b(vcJwtSecp256k1))) + expect(handled.id).toEqual(computeEntryHash(vcJwtSecp256k1)) expect(handled.raw).toEqual(vcJwtSecp256k1) expect(handled.type).toEqual(MessageTypes.vc) expect(handled.from).toEqual(vcPayloadSecp256k1.iss) @@ -137,7 +134,7 @@ describe('@veramo/credential-w3c', () => { const handled = await handler.handle(message, context) expect(handled.isValid()).toEqual(true) - expect(handled.id).toEqual(bytesToHex(blake2b(vpJwtSecp256k1))) + expect(handled.id).toEqual(computeEntryHash(vpJwtSecp256k1)) expect(handled.raw).toEqual(vpJwtSecp256k1) expect(handled.type).toEqual(MessageTypes.vp) expect(handled.from).toEqual(vpPayloadSecp256k1.iss) @@ -187,7 +184,7 @@ describe('@veramo/credential-w3c', () => { message.addMetaData({ type: 'JWT', value: 'Ed25519' }) const handled = await handler.handle(message, context) expect(handled.isValid()).toEqual(true) - expect(handled.id).toEqual(bytesToHex(blake2b(vcJwtEd25519))) + expect(handled.id).toEqual(computeEntryHash(vcJwtEd25519)) expect(handled.raw).toEqual(vcJwtEd25519) expect(handled.type).toEqual(MessageTypes.vc) expect(handled.from).toEqual(vcPayloadEd25519.iss) @@ -203,7 +200,7 @@ describe('@veramo/credential-w3c', () => { const handled = await handler.handle(message, context) expect(handled.isValid()).toEqual(true) - expect(handled.id).toEqual(bytesToHex(blake2b(vpJwtEd25519))) + expect(handled.id).toEqual(computeEntryHash(vpJwtEd25519)) expect(handled.raw).toEqual(vpJwtEd25519) expect(handled.type).toEqual(MessageTypes.vp) expect(handled.from).toEqual(vpPayloadEd25519.iss) @@ -235,7 +232,7 @@ describe('@veramo/credential-w3c', () => { const handled = await handler.handle(message, context) expect(handled.isValid()).toEqual(true) - expect(handled.id).toEqual(bytesToHex(blake2b(vpMultiAudJwt))) + expect(handled.id).toEqual(computeEntryHash(vpMultiAudJwt)) expect(handled.raw).toEqual(vpMultiAudJwt) expect(handled.type).toEqual(MessageTypes.vp) expect(handled.from).toEqual(vpMultiAudPayload.iss) @@ -274,7 +271,7 @@ describe('@veramo/credential-w3c', () => { const handled = await handler.handle(message, context) expect(handled.isValid()).toEqual(true) - expect(handled.id).toEqual(bytesToHex(blake2b(token))) + expect(handled.id).toEqual(computeEntryHash(token)) expect(handled.raw).toEqual(token) expect(handled.type).toEqual(MessageTypes.vc) expect(handled.from).toEqual('did:ethr:0x54d59e3ffd76917f62db702ac354b17f3842955e') diff --git a/packages/credential-w3c/src/action-handler.ts b/packages/credential-w3c/src/action-handler.ts index e89a96fc5..8866c5de5 100644 --- a/packages/credential-w3c/src/action-handler.ts +++ b/packages/credential-w3c/src/action-handler.ts @@ -12,6 +12,7 @@ import { IVerifyCredentialArgs, IVerifyPresentationArgs, IVerifyResult, + ProofFormat, VerifiableCredential, VerifiablePresentation, VerifierAgentContext, @@ -39,6 +40,7 @@ import { isDefined, MANDATORY_CREDENTIAL_CONTEXT, processEntryToArray, + intersect, } from '@veramo/utils' import Debug from 'debug' import { Resolvable } from 'did-resolver' @@ -79,6 +81,8 @@ export class CredentialPlugin implements IAgentPlugin { createVerifiableCredential: this.createVerifiableCredential.bind(this), verifyCredential: this.verifyCredential.bind(this), verifyPresentation: this.verifyPresentation.bind(this), + matchKeyForJWT: this.matchKeyForJWT.bind(this), + listUsableProofFormats: this.listUsableProofFormats.bind(this), } } @@ -343,6 +347,7 @@ export class CredentialPlugin implements IAgentPlugin { } verifiedCredential = credential } catch (e: any) { + debug('encountered error while verifying EIP712 credential: %o', e) const { message, errorCode } = e return { verified: false, @@ -477,13 +482,58 @@ export class CredentialPlugin implements IAgentPlugin { } } } + + /** + * Checks if a key is suitable for signing JWT payloads. + * @param key + * @param context + * + * @internal + */ + async matchKeyForJWT(key: IKey, context: IssuerAgentContext): Promise { + switch (key.type) { + case 'Ed25519': + case 'Secp256r1': + return true + case 'Secp256k1': + return intersect(key.meta?.algorithms ?? [], ['ES256K', 'ES256K-R']).length > 0 + default: + return false + } + return false + } + + async listUsableProofFormats(did: IIdentifier, context: IssuerAgentContext): Promise { + const signingOptions: ProofFormat[] = [] + const keys = did.keys + for (const key of keys) { + if (context.agent.availableMethods().includes('matchKeyForJWT')) { + if (await context.agent.matchKeyForJWT(key)) { + signingOptions.push('jwt') + } + } + if (context.agent.availableMethods().includes('matchKeyForLDSuite')) { + if (await context.agent.matchKeyForLDSuite(key)) { + signingOptions.push('lds') + } + } + if (context.agent.availableMethods().includes('matchKeyForEIP712')) { + if (await context.agent.matchKeyForEIP712(key)) { + signingOptions.push('EthereumEip712Signature2021') + } + } + } + return signingOptions + } } function pickSigningKey(identifier: IIdentifier, keyRef?: string): IKey { let key: IKey | undefined if (!keyRef) { - key = identifier.keys.find((k) => k.type === 'Secp256k1' || k.type === 'Ed25519' || k.type === 'Secp256r1') + key = identifier.keys.find( + (k) => k.type === 'Secp256k1' || k.type === 'Ed25519' || k.type === 'Secp256r1', + ) if (!key) throw Error('key_not_found: No signing key for ' + identifier.did) } else { key = identifier.keys.find((k) => k.kid === keyRef) diff --git a/packages/data-store-json/package.json b/packages/data-store-json/package.json index e43d92b84..15fdfdb69 100644 --- a/packages/data-store-json/package.json +++ b/packages/data-store-json/package.json @@ -16,7 +16,7 @@ "@veramo/key-manager": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.3", - "did-jwt-vc": "^3.2.5", + "did-jwt-vc": "^3.2.10", "uuid": "^9.0.0" }, "devDependencies": { diff --git a/packages/data-store-json/src/data-store-json.ts b/packages/data-store-json/src/data-store-json.ts index 6d69cba9d..0aa92ac46 100644 --- a/packages/data-store-json/src/data-store-json.ts +++ b/packages/data-store-json/src/data-store-json.ts @@ -86,7 +86,6 @@ export class DataStoreJson implements IAgentPlugin { dataStoreDeleteVerifiableCredential: this.dataStoreDeleteVerifiableCredential.bind(this), dataStoreSaveVerifiablePresentation: this.dataStoreSaveVerifiablePresentation.bind(this), dataStoreGetVerifiablePresentation: this.dataStoreGetVerifiablePresentation.bind(this), - //dataStoreDeleteVerifiablePresentation: this.dataStoreDeleteVerifiablePresentation.bind(this), // IDataStoreORM methods dataStoreORMGetIdentifiers: this.dataStoreORMGetIdentifiers.bind(this), @@ -295,13 +294,15 @@ export class DataStoreJson implements IAgentPlugin { expirationDate = new Date(vp.expirationDate) } - const credentials: VerifiableCredential[] = asArray(vp.verifiableCredential).map((cred: W3CVerifiableCredential) => { - if (typeof cred === 'string') { - return normalizeCredential(cred) - } else { - return cred - } - }) + const credentials: VerifiableCredential[] = asArray(vp.verifiableCredential).map( + (cred: W3CVerifiableCredential) => { + if (typeof cred === 'string') { + return normalizeCredential(cred) + } else { + return cred + } + }, + ) const presentation: PresentationTableEntry = { hash, @@ -599,7 +600,9 @@ function buildQuery>>( const colA = a[col] const colB = b[col] if (typeof colA?.getTime === 'function') { - result = direction * (colA.getTime() - colB.getTime() || 0) + const aTime = colA.getTime() + const bTime = typeof colB?.getTime === 'function' ? colB.getTime() : 0 + result = direction * (aTime - bTime || 0) } else if (typeof colA?.localeCompare === 'function') { result = direction * colA.localeCompare(colB) } else { @@ -615,7 +618,7 @@ function buildQuery>>( filteredCollection = filteredCollection.slice(input.skip) } if (input.take) { - const start = input.skip && input.skip - 1 || 0 + const start = (input.skip && input.skip - 1) || 0 const end = start + input.take filteredCollection = filteredCollection.slice(start, end) } diff --git a/packages/data-store-json/src/identifier/did-store.ts b/packages/data-store-json/src/identifier/did-store.ts index 1186e2a8d..f7d253a7f 100644 --- a/packages/data-store-json/src/identifier/did-store.ts +++ b/packages/data-store-json/src/identifier/did-store.ts @@ -50,8 +50,8 @@ export class DIDStoreJson extends AbstractDIDStore { if (did !== undefined && alias === undefined) { where = { did } - } else if (did === undefined && alias !== undefined && provider !== undefined) { - where = { alias, provider } + } else if (did === undefined && alias !== undefined) { + where = { alias } } else { throw Error('invalid_arguments: DidStoreJson.get requires did or (alias and provider)') } @@ -61,7 +61,7 @@ export class DIDStoreJson extends AbstractDIDStore { identifier = this.cacheTree.dids[where.did] } else { identifier = Object.values(this.cacheTree.dids).find( - (iid: IIdentifier) => iid.provider === where.provider && iid.alias === where.alias, + (iid: IIdentifier) => iid.alias === where.alias, ) } diff --git a/packages/data-store/package.json b/packages/data-store/package.json index 88fdfea72..70a0ac690 100644 --- a/packages/data-store/package.json +++ b/packages/data-store/package.json @@ -15,7 +15,7 @@ "@veramo/key-manager": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.3", - "did-jwt-vc": "^3.2.5", + "did-jwt-vc": "^3.2.10", "typeorm": "^0.3.17", "uuid": "^9.0.0" }, diff --git a/packages/data-store/src/__tests__/data-store-orm.test.ts b/packages/data-store/src/__tests__/data-store-orm.test.ts index 76aea2a75..27f895c10 100644 --- a/packages/data-store/src/__tests__/data-store-orm.test.ts +++ b/packages/data-store/src/__tests__/data-store-orm.test.ts @@ -261,7 +261,7 @@ describe('@veramo/data-store queries', () => { test('works with relations', async () => { const credentials = await makeAgent().dataStoreORMGetVerifiableCredentialsByClaims({}) - expect(credentials.length).toBe(3) + expect(credentials.length).toBe(1) expect(credentials[0].verifiableCredential.id).toBe('vc1') const count = await makeAgent().dataStoreORMGetVerifiableCredentialsByClaimsCount({}) expect(count).toBe(3) diff --git a/packages/data-store/src/__tests__/entities.test.ts b/packages/data-store/src/__tests__/entities.test.ts index 836bdd2b9..87982ded3 100644 --- a/packages/data-store/src/__tests__/entities.test.ts +++ b/packages/data-store/src/__tests__/entities.test.ts @@ -3,8 +3,7 @@ import { createPresentationEntity } from '../entities/presentation.js' import { Claim, Entities, Identifier, Message } from '../index.js' import { DataSource, In } from 'typeorm' import * as fs from 'fs' -import { bytesToHex } from '../../../utils/src' -import { blake2b } from '@noble/hashes/blake2b' +import { computeEntryHash } from '../../../utils/src' describe('DB entities test', () => { let connection: DataSource @@ -167,7 +166,7 @@ describe('DB entities test', () => { }) it('Message can have externally set id', async () => { - const customId = bytesToHex(blake2b('hash123')) + const customId = computeEntryHash('hash123') const message = new Message() message.type = 'custom' diff --git a/packages/data-store/src/data-store-orm.ts b/packages/data-store/src/data-store-orm.ts index 77ff45fc9..959b98704 100644 --- a/packages/data-store/src/data-store-orm.ts +++ b/packages/data-store/src/data-store-orm.ts @@ -84,7 +84,7 @@ export class DataStoreORM implements IAgentPlugin { private async identifiersQuery( args: FindArgs, - context: AuthorizedDIDContext, + context?: AuthorizedDIDContext, ): Promise> { const where = createWhereObject(args) let qb = (await getConnectedDb(this.dbConnection)) @@ -101,7 +101,7 @@ export class DataStoreORM implements IAgentPlugin { args: FindArgs, context: AuthorizedDIDContext, ): Promise { - const identifiers = await (await this.identifiersQuery(args, context)).getMany() + const identifiers = await (await this.identifiersQuery(args)).getMany() return identifiers.map((i) => { const identifier: PartialIdentifier = i as PartialIdentifier if (identifier.controllerKeyId === null) { @@ -202,10 +202,17 @@ export class DataStoreORM implements IAgentPlugin { context: AuthorizedDIDContext, ): Promise> { const claims = await (await this.claimsQuery(args, context)).getMany() - return claims.map((claim) => ({ - hash: claim.credential.hash, - verifiableCredential: claim.credential.raw, - })) + return claims + .map((claim) => ({ + hash: claim.credential.hash, + verifiableCredential: claim.credential.raw, + })) + .reduce((acc: UniqueVerifiableCredential[], current: UniqueVerifiableCredential) => { + if (!acc.some((item) => item.hash === current.hash)) { + acc.push(current) + } + return acc + }, []) } async dataStoreORMGetVerifiableCredentialsByClaimsCount( @@ -416,11 +423,11 @@ function decorateQB( if (input?.order) { for (const item of input.order) { - qb = qb.addSelect(qb.connection.driver.escape(tableName) + '.' + qb.connection.driver.escape(item.column), item.column) - qb = qb.orderBy( - qb.connection.driver.escape(item.column), - item.direction, + qb = qb.addSelect( + qb.connection.driver.escape(tableName) + '.' + qb.connection.driver.escape(item.column), + item.column, ) + qb = qb.orderBy(qb.connection.driver.escape(item.column), item.direction) } } return qb diff --git a/packages/data-store/src/identifier/did-store.ts b/packages/data-store/src/identifier/did-store.ts index f7636f72f..c9f845d57 100644 --- a/packages/data-store/src/identifier/did-store.ts +++ b/packages/data-store/src/identifier/did-store.ts @@ -39,11 +39,11 @@ export class DIDStore extends AbstractDIDStore { alias: string provider: string }): Promise { - let where = {} + let where: { did?: string; alias?: string; provider?: string } = {} if (did !== undefined && alias === undefined) { where = { did } - } else if (did === undefined && alias !== undefined && provider !== undefined) { - where = { alias, provider } + } else if (did === undefined && alias !== undefined) { + where = { alias } } else { throw Error('[veramo:data-store:identifier-store] Get requires did or (alias and provider)') } diff --git a/packages/data-store/src/index.ts b/packages/data-store/src/index.ts index 5f2ff16fa..3903e848d 100644 --- a/packages/data-store/src/index.ts +++ b/packages/data-store/src/index.ts @@ -43,6 +43,16 @@ export const Entities = [ PrivateKey, PreMigrationKey, ] + +/** + * Helper function to concatenate multiple arrays of TypeORM entities. + * + * This array CAN be used when creating a TypeORM connection. + * + * @public + */ +export const entitiesConcat = (...entityArrays: unknown[][]) => + entityArrays.reduce((acc, entityArray) => acc.concat(entityArray), []) export { KeyType, Key, @@ -56,7 +66,7 @@ export { PrivateKey, PreMigrationKey, } -export { migrations } from './migrations/index.js' +export { migrations, migrationConcat } from './migrations/index.js' // re-export the interfaces that were moved to core for backward compatibility export { IDataStore, IDataStoreORM } from '@veramo/core-types' diff --git a/packages/data-store/src/migrations/1.createDatabase.ts b/packages/data-store/src/migrations/1.createDatabase.ts index 68410fc91..230d9a34c 100644 --- a/packages/data-store/src/migrations/1.createDatabase.ts +++ b/packages/data-store/src/migrations/1.createDatabase.ts @@ -10,7 +10,6 @@ const debug = Debug('veramo:data-store:initial-migration') * @public */ export class CreateDatabase1447159020001 implements MigrationInterface { - name = 'CreateDatabase1447159020001' // Used in case this class gets minified, which would change the classname async up(queryRunner: QueryRunner): Promise { @@ -21,7 +20,7 @@ export class CreateDatabase1447159020001 implements MigrationInterface { // "CREATE UNIQUE INDEX \"IDX_6098cca69c838d91e55ef32fe1\" ON \"identifier\" (\"alias\", \"provider\")", await queryRunner.createTable( new Table({ - name: migrationGetTableName(queryRunner,'identifier'), + name: migrationGetTableName(queryRunner, 'identifier'), columns: [ { name: 'did', type: 'varchar', isPrimary: true }, { name: 'provider', type: 'varchar', isNullable: true }, @@ -44,7 +43,7 @@ export class CreateDatabase1447159020001 implements MigrationInterface { // "CREATE TABLE \"key\" (\"kid\" varchar PRIMARY KEY NOT NULL, \"kms\" varchar NOT NULL, \"type\" varchar NOT NULL, \"publicKeyHex\" varchar NOT NULL, \"privateKeyHex\" varchar NOT NULL, \"meta\" text, \"identifierDid\" varchar, CONSTRAINT \"FK_3f40a9459b53adf1729dbd3b787\" FOREIGN KEY (\"identifierDid\") REFERENCES \"identifier\" (\"did\") ON DELETE NO ACTION ON UPDATE NO ACTION)", await queryRunner.createTable( new Table({ - name: migrationGetTableName(queryRunner,'key'), + name: migrationGetTableName(queryRunner, 'key'), columns: [ { name: 'kid', type: 'varchar', isPrimary: true }, { name: 'kms', type: 'varchar' }, diff --git a/packages/data-store/src/migrations/index.ts b/packages/data-store/src/migrations/index.ts index 45bc0d4e8..1a76313ff 100644 --- a/packages/data-store/src/migrations/index.ts +++ b/packages/data-store/src/migrations/index.ts @@ -1,9 +1,9 @@ +import { MigrationInterface } from 'typeorm' import { CreateDatabase1447159020001 } from './1.createDatabase.js' import { SimplifyRelations1447159020002 } from './2.simplifyRelations.js' import { CreatePrivateKeyStorage1629293428674 } from './3.createPrivateKeyStorage.js' import { AllowNullIssuanceDateForPresentations1637237492913 } from './4.allowNullVPIssuanceDate.js' - /** * Allow others to use shared migration functions if they extend Veramo * @@ -18,10 +18,18 @@ export * from './migration-functions.js' * * @public */ - export const migrations = [ CreateDatabase1447159020001, SimplifyRelations1447159020002, CreatePrivateKeyStorage1629293428674, AllowNullIssuanceDateForPresentations1637237492913, ] + +/** + * The migrations helper that allows migrations from multiple sources to be combined into a single array. + * + * @public + */ +export function migrationConcat(...migrationArrays: MigrationInterface[][]) { + return migrationArrays.reduce((acc, migrationArray) => acc.concat(migrationArray), []) +} diff --git a/packages/did-comm/README.md b/packages/did-comm/README.md index ca992a5aa..dcb7b6e98 100644 --- a/packages/did-comm/README.md +++ b/packages/did-comm/README.md @@ -9,7 +9,7 @@ Veramo messaging plugin implementing DIDComm v2, as specified by the [DIDComm v2 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] | | diff --git a/packages/did-comm/package.json b/packages/did-comm/package.json index ee43ec99f..18fdfd196 100644 --- a/packages/did-comm/package.json +++ b/packages/did-comm/package.json @@ -18,7 +18,6 @@ } }, "dependencies": { - "@ethersproject/signing-key": "^5.7.0", "@noble/curves": "^1.1.0", "@stablelib/aes": "^1.0.1", "@stablelib/aes-kw": "^1.0.1", @@ -27,9 +26,11 @@ "@veramo/core-types": "workspace:^", "@veramo/message-handler": "workspace:^", "@veramo/utils": "workspace:^", + "@veramo/kv-store": "workspace:^", + "@veramo/mediation-manager": "workspace:^", "cross-fetch": "^4.0.0", "debug": "^4.3.3", - "did-jwt": "^7.2.5", + "did-jwt": "^7.4.1", "did-resolver": "^4.1.0", "isomorphic-webcrypto": "^2.3.8", "uuid": "^9.0.0" diff --git a/packages/did-comm/src/__tests__/coordinate-mediation-v3-message-handler.test.ts b/packages/did-comm/src/__tests__/coordinate-mediation-v3-message-handler.test.ts new file mode 100644 index 000000000..7a069affa --- /dev/null +++ b/packages/did-comm/src/__tests__/coordinate-mediation-v3-message-handler.test.ts @@ -0,0 +1,866 @@ +import { DIDComm } from '../didcomm.js' +import { + KeyValueStore, + KeyValueTypeORMStoreAdapter, + Entities as KVStoreEntities, + kvStoreMigrations, +} from '@veramo/kv-store' +import { + createAgent, + IDIDManager, + IEventListener, + IIdentifier, + IKeyManager, + IMessageHandler, + IResolver, + TAgent, +} from '../../../core/src' +import { + RequesterDid, + IMediationManager, + PreMediationRequestPolicy, + MediationResponse, +} from '../../../mediation-manager' +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.js' +import { IDIDComm } from '../types/IDIDComm.js' +import { MessageHandler } from '../../../message-handler/src' +import { + CoordinateMediationV3MediatorMessageHandler, + CoordinateMediationV3RecipientMessageHandler, + createV3MediateRequestMessage, + createV3MediateGrantMessage, + createV3RecipientUpdateMessage, + UpdateAction, + RecipientUpdateResult, + CoordinateMediation, + createV3RecipientQueryMessage, +} from '../protocols/coordinate-mediation-v3-message-handler.js' +import type { Update, UpdateResult } from '../protocols/coordinate-mediation-v3-message-handler.js' +import { FakeDidProvider, FakeDidResolver } from '../../../test-utils/src' +import { MessagingRouter, RequestWithAgentRouter } from '../../../remote-server/src' +import { + Entities as DataStoreEntities, + IDataStore, + migrations as dataStoreMigrations, +} from '../../../data-store/src' + +import express from 'express' +import { Server } from 'http' +import { DIDCommMessageHandler } from '../message-handler.js' +import { DataStore, DataStoreORM } from '../../../data-store/src' +import { MediationManagerPlugin } from '../../../mediation-manager/src' +import { DataSource } from 'typeorm' + +import { jest } from '@jest/globals' +import 'cross-fetch/polyfill' + +const DIDCommEventSniffer: IEventListener = { + eventTypes: ['DIDCommV2Message-sent', 'DIDCommV2Message-received'], + onEvent: jest.fn(() => Promise.resolve()), +} + +describe('coordinate-mediation-message-handler', () => { + let recipient: IIdentifier + let mediator: IIdentifier + let denyRecipient: IIdentifier + let agent: TAgent< + IResolver & IKeyManager & IDIDManager & IDIDComm & IMessageHandler & IDataStore & IMediationManager + > + let didCommEndpointServer: Server + let listeningPort = Math.round(Math.random() * 32000 + 2048) + let dbConnection: DataSource + let policyStore: KeyValueStore + let mediationStore: KeyValueStore + let recipientDidStore: KeyValueStore + + beforeAll(async () => { + dbConnection = new DataSource({ + name: 'test', + type: 'sqlite', + database: ':memory:', + synchronize: false, + migrations: dataStoreMigrations.concat(kvStoreMigrations), + migrationsRun: true, + logging: false, + entities: (KVStoreEntities as any).concat(DataStoreEntities), + }) + + policyStore = new KeyValueStore({ + namespace: 'mediation_policy', + store: new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'mediation_policy' }), + }) + + mediationStore = new KeyValueStore({ + namespace: 'mediation_response', + store: new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'mediation_response' }), + }) + + recipientDidStore = new KeyValueStore({ + namespace: 'recipient_did', + store: new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'recipient_did' }), + }) + + agent = createAgent({ + plugins: [ + new KeyManager({ + store: new MemoryKeyStore(), + kms: { + local: new KeyManagementSystem(new MemoryPrivateKeyStore()), + }, + }), + new DIDManager({ + providers: { + 'did:fake': new FakeDidProvider(), + }, + store: new MemoryDIDStore(), + defaultProvider: 'did:fake', + }), + new DIDResolverPlugin({ + resolver: new Resolver({ + ...new FakeDidResolver(() => agent).getDidFakeResolver(), + }), + }), + new MessageHandler({ + messageHandlers: [ + new DIDCommMessageHandler(), + new CoordinateMediationV3MediatorMessageHandler(), + new CoordinateMediationV3RecipientMessageHandler(), + ], + }), + new DataStore(dbConnection), + new DataStoreORM(dbConnection), + DIDCommEventSniffer, + new DIDComm({ transports: [new DIDCommHttpTransport()] }), + new MediationManagerPlugin(true, policyStore, mediationStore, recipientDidStore), + ], + }) + + denyRecipient = await agent.didManagerImport({ + did: 'did:fake:dENygbqNU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + 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: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', + }) + + mediator = 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', + }) + + 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( + '/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: any) { + // nop + } + + try { + await dbConnection?.destroy() + } catch (e: any) { + // nop + } + }) + + const expectMessageSent = (msgid: string) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: msgid, + type: 'DIDCommV2Message-sent', + }, + expect.anything(), + ) + } + + describe('mediator', () => { + describe('MEDIATE REQUEST', () => { + const expectRecieveMediationRequest = (id: string, from = recipient.did) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: {}, + from, + id, + to: mediator.did, + created_time: expect.anything(), + type: 'https://didcomm.org/coordinate-mediation/3.0/mediate-request', + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + const expectGrantRequest = (msgid: string) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { routing_did: [mediator.did] }, + from: mediator.did, + to: recipient.did, + id: expect.anything(), + thid: msgid, + created_time: expect.anything(), + type: CoordinateMediation.MEDIATE_GRANT, + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + const expectDenyRequest = (msgid: string, to = recipient.did) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + from: mediator.did, + id: expect.anything(), + thid: msgid, + to, + created_time: expect.anything(), + type: 'https://didcomm.org/coordinate-mediation/3.0/mediate-deny', + body: null, + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + it('should default to mediate grant all', async () => { + const isMediateDefaultGrantAll = await agent.isMediateDefaultGrantAll() + expect(isMediateDefaultGrantAll).toBeTruthy() + }) + + it('should correctly update the data store MediationPolicy for dids to deny', async () => { + const policy = 'DENY' + const requesterDid = denyRecipient.did + const insertedMediationPolicyDid = await agent.mediationManagerSaveMediationPolicy({ + requesterDid, + policy, + }) + expect(insertedMediationPolicyDid).toBe(denyRecipient.did) + const insertedPolicy = await agent.mediationManagerGetMediationPolicy({ requesterDid }) + expect(insertedPolicy).toBe('DENY') + }) + + it('should receive a mediate request', async () => { + const message = createV3MediateRequestMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectRecieveMediationRequest(message.id) + }) + + it('should save the mediation status to the db where request is GRANTED', async () => { + const message = createV3MediateRequestMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + const mediationSaveResult = await agent.mediationManagerSaveMediation({ + requesterDid: recipient.did, + status: 'GRANTED', + }) + expect(mediationSaveResult).toBe('GRANTED') + const readMediation = await agent.mediationManagerGetMediation({ requesterDid: recipient.did }) + expect(readMediation).toBe('GRANTED') + }) + + it('should record the mediation status to the db where request is DENIED', async () => { + const message = createV3MediateRequestMessage(denyRecipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + const mediation = await agent.mediationManagerGetMediation({ requesterDid: denyRecipient.did }) + expect(mediation).toBe('DENIED') + }) + + it('should respond correctly to a mediate request where GRANTED', async () => { + const message = createV3MediateRequestMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveMediationRequest(messageId) + expectMessageSent(messageId) + expectGrantRequest(messageId) + }) + + it('should respond correctly to a mediate request where DENIED', async () => { + const message = createV3MediateRequestMessage(denyRecipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveMediationRequest(messageId, denyRecipient.did) + expectMessageSent(messageId) + expectDenyRequest(messageId, denyRecipient.did) + }) + + it('should correctly update the data store MediationPolicy for dids to allow', async () => { + const policy = 'ALLOW' + const requesterDid = recipient.did + const insertedMediationPolicyDid = await agent.mediationManagerSaveMediationPolicy({ + requesterDid, + policy, + }) + + expect(insertedMediationPolicyDid).toBe(recipient.did) + + const savedPolicy = await agent.mediationManagerGetMediationPolicy({ requesterDid }) + + expect(savedPolicy).toBe('ALLOW') + }) + + it('should only allow mediation for dids with a MediationPolicy of ALLOW where isMediateDefaultGrantAll === false', async () => { + agent.isMediateDefaultGrantAll = jest.fn(() => Promise.resolve(false)) + + expect(await agent.isMediateDefaultGrantAll()).toBeFalsy() + + const message = createV3MediateRequestMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveMediationRequest(messageId) + expectMessageSent(messageId) + expectGrantRequest(messageId) + }) + + it('should deny mediation for dids with no MediationPolicy of ALLOW where isMediateDefaultGrantAll === false', async () => { + agent.isMediateDefaultGrantAll = jest.fn(() => Promise.resolve(false)) + + expect(await agent.isMediateDefaultGrantAll()).toBeFalsy() + + const policy = await agent.mediationManagerGetMediationPolicy({ requesterDid: denyRecipient.did }) + const didIsAllowed = policy === 'ALLOW' + + expect(didIsAllowed).toBeFalsy() + + const message = createV3MediateRequestMessage(denyRecipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message: message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveMediationRequest(messageId, denyRecipient.did) + expectMessageSent(messageId) + expectDenyRequest(messageId, denyRecipient.did) + }) + }) + }) + + const mockRecipientDids = { + mockRecipientDid_00: 'did:fake:testgbqNU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + mockRecipientDid_01: 'did:fake:test888NU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + mockRecipientDid_02: 'did:fake:testt88NU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + mockRecipientDid_03: 'did:fake:test889NU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + mockRecipientDid_04: 'did:fake:deny889NU4uF9NKSz5BqJQ4XKVHuQZYcUZP8pXGsJC8nTHwo', + } as const + + describe('RECIPIENT UPDATE', () => { + const expectRecieveUpdateRequest = (msgid: string, updates: Update[]) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { updates }, + return_route: 'all', + from: recipient.did, + id: msgid, + to: mediator.did, + created_time: expect.anything(), + type: 'https://didcomm.org/coordinate-mediation/3.0/recipient-update', + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + const expectRecipientUpdateReponse = (msgid: string, updates: UpdateResult[]) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { updates }, + from: mediator.did, + to: recipient.did, + id: expect.anything(), + thid: msgid, + created_time: expect.anything(), + type: CoordinateMediation.RECIPIENT_UPDATE_RESPONSE, + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + it('should receive an update request', async () => { + const { mockRecipientDid_00: recipient_did } = mockRecipientDids + const update = { recipient_did, action: UpdateAction.ADD } + const message = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectRecieveUpdateRequest(messageId, [update]) + }) + + it('should add a new recipient_did to the data store', async () => { + const { mockRecipientDid_00: recipient_did } = mockRecipientDids + const update = { recipient_did, action: UpdateAction.ADD } + const message = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + const result = await agent.mediationManagerGetRecipientDid({ recipientDid: recipient_did }) + + expect(result).toBe(recipient.did) + }) + + it('should remove an existing recipient_did from the data store', async () => { + const { mockRecipientDid_00: recipientDid } = mockRecipientDids + await agent.mediationManagerAddRecipientDid({ requesterDid: recipient.did, recipientDid }) + const existingRecipientDid = await agent.mediationManagerGetRecipientDid({ recipientDid }) + + /* ensure the recipient_did exists in the data store so that it can be removed */ + expect(existingRecipientDid).toBe(recipient.did) + + const update = { recipient_did: recipientDid, action: UpdateAction.REMOVE } + const message = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + const did = await agent.mediationManagerGetRecipientDid({ recipientDid }) + + expect(did).toBe(null) + }) + + it('should respond correctly to a recipient update request on add SUCCESS', async () => { + const updates = [ + { recipient_did: mockRecipientDids.mockRecipientDid_01, action: UpdateAction.ADD }, + { recipient_did: mockRecipientDids.mockRecipientDid_02, action: UpdateAction.ADD }, + ] + const message = createV3RecipientUpdateMessage(recipient.did, mediator.did, updates) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + const results = [ + { ...updates[0], result: RecipientUpdateResult.SUCCESS }, + { ...updates[1], result: RecipientUpdateResult.SUCCESS }, + ] + expectMessageSent(messageId) + expectRecieveUpdateRequest(messageId, updates) + expectMessageSent(messageId) + expectRecipientUpdateReponse(messageId, results) + }) + + it('should respond correctly to a recipient update request on remove NO_CHANGE', async () => { + /** + * NOTE: we are removing a non-existent recipient_did so should recieve "NO_CHANGE" + */ + const { mockRecipientDid_03: recipient_did } = mockRecipientDids + const update = { recipient_did, action: UpdateAction.REMOVE } + const message = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveUpdateRequest(messageId, [update]) + expectMessageSent(messageId) + expectRecipientUpdateReponse(messageId, [{ ...update, result: RecipientUpdateResult.NO_CHANGE }]) + }) + + it('should respond correctly to a recipient update request on remove SUCCESS', async () => { + await agent.mediationManagerAddRecipientDid({ + requesterDid: recipient.did, + recipientDid: mockRecipientDids.mockRecipientDid_01, + }) + + const { mockRecipientDid_01: recipient_did } = mockRecipientDids + const update = { recipient_did, action: UpdateAction.REMOVE } + const message = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveUpdateRequest(messageId, [update]) + expectMessageSent(messageId) + expectRecipientUpdateReponse(messageId, [{ ...update, result: RecipientUpdateResult.SUCCESS }]) + }) + }) + + describe('RECIPIENT QUERY', () => { + const expectRecieveRecipientQuery = (msgid: string) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: {}, + from: recipient.did, + id: msgid, + to: mediator.did, + created_time: expect.anything(), + type: CoordinateMediation.RECIPIENT_QUERY, + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + const expectRecipientQueryReponse = (msgid: string, dids: Omit[] = []) => { + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { dids }, + from: mediator.did, + to: recipient.did, + id: expect.anything(), + thid: msgid, + created_time: expect.anything(), + type: CoordinateMediation.RECIPIENT_QUERY_RESPONSE, + }, + metaData: { packing: 'authcrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + } + + it('should receive a query request', async () => { + const message = createV3RecipientQueryMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectRecieveRecipientQuery(messageId) + }) + + it('should respond correctly to a recipient query request on no recipient_dids', async () => { + await agent.mediationManagerRemoveRecipientDid({ recipientDid: mockRecipientDids.mockRecipientDid_00 }) + await agent.mediationManagerRemoveRecipientDid({ recipientDid: mockRecipientDids.mockRecipientDid_01 }) + await agent.mediationManagerRemoveRecipientDid({ recipientDid: mockRecipientDids.mockRecipientDid_02 }) + await agent.mediationManagerRemoveRecipientDid({ recipientDid: mockRecipientDids.mockRecipientDid_03 }) + + const message = createV3RecipientQueryMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + + expectMessageSent(messageId) + expectRecieveRecipientQuery(messageId) + expectMessageSent(messageId) + expectRecipientQueryReponse(messageId) + }) + + it('should respond correctly to a recipient query request on available recipient_dids', async () => { + /** + * NOTE: we need to insert a recipient_did into the data store to ensure a populated query + */ + const insertOperationOne = { + recipientDid: mockRecipientDids.mockRecipientDid_00, + requesterDid: recipient.did, + } + const insertOperationTwo = { + recipientDid: mockRecipientDids.mockRecipientDid_01, + requesterDid: recipient.did, + } + await agent.mediationManagerAddRecipientDid(insertOperationOne) + await agent.mediationManagerAddRecipientDid(insertOperationTwo) + + /** + * NOTE: we add a recipient did on another requester did to ensure that the query response + * only contains the inserted recipient_dids that it controls and not all recipient_dids + * that exist in the data store + **/ + const insertOperationThree = { + recipientDid: mockRecipientDids.mockRecipientDid_02, + requesterDid: denyRecipient.did, + } + await agent.mediationManagerAddRecipientDid(insertOperationThree) + const recipientDidOne = await agent.mediationManagerGetRecipientDid({ + recipientDid: insertOperationOne.recipientDid, + }) + const recipientDidTwo = await agent.mediationManagerGetRecipientDid({ + recipientDid: insertOperationTwo.recipientDid, + }) + const recipientDidThree = await agent.mediationManagerGetRecipientDid({ + recipientDid: insertOperationThree.recipientDid, + }) + expect(recipientDidOne).toBe(recipient.did) + expect(recipientDidTwo).toBe(recipient.did) + expect(recipientDidThree).toBe(denyRecipient.did) + + /** + * NOTE: now we query the recipient dids and expect the response to contain the inserted recipient_dids + */ + const message = createV3RecipientQueryMessage(recipient.did, mediator.did) + const messageId = message.id + const packedMessageContents = { packing: 'authcrypt', message } as const + const packedMessage = await agent.packDIDCommMessage(packedMessageContents) + const recipientDidUrl = mediator.did + const didCommMessageContents = { messageId, packedMessage, recipientDidUrl } + await agent.sendDIDCommMessage(didCommMessageContents) + const dids = [ + { recipient_did: mockRecipientDids.mockRecipientDid_00 }, + { recipient_did: mockRecipientDids.mockRecipientDid_01 }, + ] + + expectMessageSent(messageId) + expectRecieveRecipientQuery(messageId) + expectMessageSent(messageId) + expectRecipientQueryReponse(messageId, dids) + }) + }) + + describe('recipient', () => { + describe('MEDIATE REQUEST RESPONSE', () => { + it('should save new service on mediate grant', async () => { + const messageId = '858b8fcb-2e8e-44db-a3aa-eac10a63bfa2l' + const mediateRequestMessage = createV3MediateRequestMessage(recipient.did, mediator.did) + mediateRequestMessage.id = messageId + const packedMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: mediateRequestMessage, + }) + await agent.sendDIDCommMessage({ + messageId: mediateRequestMessage.id, + packedMessage, + recipientDidUrl: mediator.did, + }) + + const didDoc = (await agent.resolveDid({ didUrl: recipient.did })).didDocument + const service = didDoc?.service?.find((s) => s.id === `${recipient.did}#didcomm-mediator`) + expect(service?.serviceEndpoint).toEqual([{ uri: mediator.did }]) + }) + + it('should remove service on mediate deny', async () => { + const messageId = '858b8fcb-2e8e-44db-a3aa-eac10a63bfa2l' + const mediateRequestMessage = createV3MediateRequestMessage(recipient.did, mediator.did) + mediateRequestMessage.id = messageId + const packedMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: mediateRequestMessage, + }) + await agent.sendDIDCommMessage({ + messageId: mediateRequestMessage.id, + packedMessage, + recipientDidUrl: mediator.did, + }) + + const msgid = '158b8fcb-2e8e-44db-a3aa-eac10a63bfa2l' + const packedDenyMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: { + type: 'https://didcomm.org/coordinate-mediation/3.0/mediate-deny', + from: mediator.did, + to: recipient.did, + id: msgid, + thid: '', + body: {}, + }, + }) + await agent.sendDIDCommMessage({ + messageId: msgid, + packedMessage: packedDenyMessage, + recipientDidUrl: recipient.did, + }) + + const didDoc = (await agent.resolveDid({ didUrl: recipient.did })).didDocument + const service = didDoc?.service?.find((s) => s.id === `${recipient.did}#didcomm-mediator`) + expect(service).toBeUndefined() + }) + + it('should not save service if mediate request cannot be found', async () => { + const mediateGrantMessage = createV3MediateGrantMessage(recipient.did, mediator.did, '') + const packedMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: mediateGrantMessage, + }) + await agent.sendDIDCommMessage({ + messageId: mediateGrantMessage.id, + packedMessage, + recipientDidUrl: recipient.did, + }) + + const didDoc = (await agent.resolveDid({ didUrl: recipient.did })).didDocument + const service = didDoc?.service?.find((s) => s.id === `${recipient.did}#didcomm-mediator`) + expect(service).toBeUndefined() + }) + + it('should not save service if mediate grant message has bad routing_did', async () => { + const msgid = '158b8fcb-2e8e-44db-a3aa-eac10a63bfa2l' + const packedMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: { + type: 'https://didcomm.org/coordinate-mediation/3.0/mediate-grant', + from: mediator.did, + to: recipient.did, + id: msgid, + thid: '', + body: {}, + }, + }) + await agent.sendDIDCommMessage({ + messageId: msgid, + packedMessage, + recipientDidUrl: recipient.did, + }) + + const didDoc = (await agent.resolveDid({ didUrl: recipient.did })).didDocument + const service = didDoc?.service?.find((s) => s.id === `${recipient.did}#didcomm-mediator`) + expect(service).toBeUndefined() + }) + }) + }) +}) diff --git a/packages/did-comm/src/__tests__/message-handler.test.ts b/packages/did-comm/src/__tests__/message-handler.test.ts index 96a94f90a..36b5ed56a 100644 --- a/packages/did-comm/src/__tests__/message-handler.test.ts +++ b/packages/did-comm/src/__tests__/message-handler.test.ts @@ -77,8 +77,7 @@ describe('did-comm-message-handler', () => { ...new FakeDidResolver(() => agent).getDidFakeResolver(), }), }), - // @ts-ignore - new DIDComm([new DIDCommHttpTransport()]), + new DIDComm({ transports: [new DIDCommHttpTransport()]}), new MessageHandler({ messageHandlers: [ // @ts-ignore diff --git a/packages/did-comm/src/__tests__/messagepickup-message-handler.test.ts b/packages/did-comm/src/__tests__/messagepickup-message-handler.test.ts index cd129d561..16cdd94c0 100644 --- a/packages/did-comm/src/__tests__/messagepickup-message-handler.test.ts +++ b/packages/did-comm/src/__tests__/messagepickup-message-handler.test.ts @@ -100,8 +100,7 @@ describe('messagepickup-message-handler', () => { ...new FakeDidResolver(() => agent).getDidFakeResolver(), }), }), - // @ts-ignore - new DIDComm([new DIDCommHttpTransport()]), + new DIDComm({ transports: [new DIDCommHttpTransport()]}), new MessageHandler({ messageHandlers: [ // @ts-ignore @@ -334,6 +333,33 @@ describe('messagepickup-message-handler', () => { ) }) + it('should contain returnMessage', async () => { + + // Send StatusRequest + const statusRequestMessage: IDIDCommMessage = { + id: v4(), + type: STATUS_REQUEST_MESSAGE_TYPE, + to: mediator.did, + from: recipient.did, + return_route: 'all', + body: { + recipient_key: `${recipient.did}#${recipient.keys[0].kid}`, + }, + } + const packedMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: statusRequestMessage, + }) + const result = await agent.sendDIDCommMessage({ + messageId: statusRequestMessage.id, + packedMessage, + recipientDidUrl: mediator.did, + }) + + expect(result.transportId).toBeDefined() + expect(result.returnMessage).toBeDefined() + }) + it('should not respond to StatusRequest with no return_route', async () => { expect.assertions(1) const statusRequestMessage: IDIDCommMessage = { @@ -820,8 +846,7 @@ describe('messagepickup-message-handler', () => { ...new FakeDidResolver(() => agent).getDidFakeResolver(), }), }), - // @ts-ignore - new DIDComm([new DIDCommHttpTransport()]), + new DIDComm({ transports: [new DIDCommHttpTransport()]}), new MessageHandler({ messageHandlers: [ // @ts-ignore diff --git a/packages/did-comm/src/__tests__/routing-message-handler-v3-coordinate-mediation.test.ts b/packages/did-comm/src/__tests__/routing-message-handler-v3-coordinate-mediation.test.ts new file mode 100644 index 000000000..46af00baa --- /dev/null +++ b/packages/did-comm/src/__tests__/routing-message-handler-v3-coordinate-mediation.test.ts @@ -0,0 +1,459 @@ +import { DIDComm } from '../didcomm.js' +import { KeyValueStore } from '../../../kv-store/src' +import { + createAgent, + IDIDManager, + IEventListener, + IIdentifier, + IKeyManager, + IMessageHandler, + IResolver, + TAgent, +} from '../../../core/src' +import { + RequesterDid, + MediationResponse, + IMediationManager, + PreMediationRequestPolicy, +} from '../../../mediation-manager' +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.js' +import { IDIDComm } from '../types/IDIDComm.js' +import { MessageHandler } from '../../../message-handler/src' +import { + CoordinateMediationV3MediatorMessageHandler, + CoordinateMediationV3RecipientMessageHandler, + createV3MediateRequestMessage, + CoordinateMediation, + createV3RecipientUpdateMessage, + Update, + UpdateAction, +} from '../protocols/coordinate-mediation-v3-message-handler.js' +import { DIDCommMessageMediaType } from '../types/message-types.js' +import { + RoutingMessageHandler, + FORWARD_MESSAGE_TYPE, + QUEUE_MESSAGE_TYPE, +} from '../protocols/routing-message-handler.js' +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.js' +import { DataStore, DataStoreORM } from '../../../data-store/src' +import { DataSource } from 'typeorm' +import { v4 } from 'uuid' +import { MediationManagerPlugin } from '../../../mediation-manager/src' + +import { jest } from '@jest/globals' +import 'cross-fetch/polyfill' + +const DIDCommEventSniffer: IEventListener = { + eventTypes: ['DIDCommV2Message-sent', 'DIDCommV2Message-received', 'DIDCommV2Message-forwardMessageQueued'], + onEvent: jest.fn(() => Promise.resolve()), +} + +const policyStore = new KeyValueStore({ store: new Map() }) +const mediationStore = new KeyValueStore({ store: new Map() }) +const recipientDidStore = new KeyValueStore({ store: new Map() }) + +describe('routing-message-handler [V3 CoordinateMediation]', () => { + let recipient: IIdentifier + let mediator: IIdentifier + let agent: TAgent< + IResolver & IKeyManager & IDIDManager & IDIDComm & IMessageHandler & IDataStore & IMediationManager + > + let didCommEndpointServer: Server + let listeningPort = Math.round(Math.random() * 32000 + 2048) + let dbConnection: DataSource + + beforeAll(async () => { + dbConnection = new DataSource({ + name: 'test', + type: 'sqlite', + database: ':memory:', + 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(), + }), + }), + new DIDComm({ transports: [new DIDCommHttpTransport()] }), + new MessageHandler({ + messageHandlers: [ + new DIDCommMessageHandler(), + new CoordinateMediationV3MediatorMessageHandler(), + new CoordinateMediationV3RecipientMessageHandler(), + new RoutingMessageHandler(), + ], + }), + // @ts-ignore + new MediationManagerPlugin(true, policyStore, mediationStore, recipientDidStore), + new DataStore(dbConnection), + new DataStoreORM(dbConnection), + DIDCommEventSniffer, + ], + }) + + recipient = 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', + }) + + mediator = 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', + }) + + 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: any) { + //nop + } + try { + await dbConnection?.destroy() + } catch (e: any) { + // nop + } + }) + + it('should save forward message in queue for recipient', async () => { + expect.assertions(2) + + // 1. Request Mediation + const mediateRequestMessage = createV3MediateRequestMessage(recipient.did, mediator.did) + const mediateRequestMessageContents = { packing: 'authcrypt', message: mediateRequestMessage } as const + const packedMediateRequestMessage = await agent.packDIDCommMessage(mediateRequestMessageContents) + const recipientDidUrl = mediator.did + await agent.sendDIDCommMessage({ + messageId: mediateRequestMessage.id, + packedMessage: packedMediateRequestMessage, + recipientDidUrl, + }) + + // 2. Recipient Update + const update: Update = { recipient_did: recipient.did, action: UpdateAction.ADD } + const updateMessage = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const updateMessageContents = { packing: 'authcrypt', message: updateMessage } as const + const packedUpdateMessage = await agent.packDIDCommMessage(updateMessageContents) + await agent.sendDIDCommMessage({ + messageId: updateMessage.id, + packedMessage: packedUpdateMessage, + recipientDidUrl, + }) + + // 2. Forward message + const innerMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: { + type: 'test', + to: recipient.did, + from: mediator.did, + id: 'test', + body: { hello: 'world' }, + }, + }) + const msgId = v4() + const packedForwardMessage = await agent.packDIDCommMessage({ + packing: 'anoncrypt', + message: { + type: FORWARD_MESSAGE_TYPE, + to: mediator.did, + id: msgId, + body: { + next: recipient.did, + }, + attachments: [ + { media_type: DIDCommMessageMediaType.ENCRYPTED, data: { json: JSON.parse(innerMessage.message) } }, + ], + }, + }) + await agent.sendDIDCommMessage({ + messageId: msgId, + packedMessage: packedForwardMessage, + recipientDidUrl: mediator.did, + }) + + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + message: { + body: { next: recipient.did }, + id: msgId, + to: mediator.did, + type: FORWARD_MESSAGE_TYPE, + attachments: [ + { + media_type: DIDCommMessageMediaType.ENCRYPTED, + data: { json: JSON.parse(innerMessage.message) }, + }, + ], + }, + metaData: { packing: 'anoncrypt' }, + }, + type: 'DIDCommV2Message-received', + }, + expect.anything(), + ) + + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + id: expect.anything(), + to: `${recipient.did}#${recipient.keys[0].kid}`, + type: QUEUE_MESSAGE_TYPE, + raw: innerMessage.message, + createdAt: expect.anything(), + metaData: [{ type: 'didCommForwardMsgId', value: msgId }], + }, + type: 'DIDCommV2Message-forwardMessageQueued', + }, + expect.anything(), + ) + }) + + it('should save forward message in queue for recipient previously denied', async () => { + // set up agent to deny mediation + agent.isMediateDefaultGrantAll = jest.fn(() => Promise.resolve(false)) + + expect.assertions(1) + // 1. Request Mediation + const mediateRequestMessage = createV3MediateRequestMessage(recipient.did, mediator.did) + const mediateRequestMessageContents = { packing: 'authcrypt', message: mediateRequestMessage } as const + const packedMediateRequestMessage = await agent.packDIDCommMessage(mediateRequestMessageContents) + const recipientDidUrl = mediator.did + await agent.sendDIDCommMessage({ + messageId: mediateRequestMessage.id, + packedMessage: packedMediateRequestMessage, + recipientDidUrl, + }) + + // 2. Recipient Update + const update: Update = { recipient_did: recipient.did, action: UpdateAction.ADD } + const updateMessage = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const updateMessageContents = { packing: 'authcrypt', message: updateMessage } as const + const packedUpdateMessage = await agent.packDIDCommMessage(updateMessageContents) + await agent.sendDIDCommMessage({ + messageId: updateMessage.id, + packedMessage: packedUpdateMessage, + recipientDidUrl, + }) + + // 3. Forward message + const innerMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: { + type: 'test', + to: recipient.did, + from: mediator.did, + id: 'test', + body: { hello: 'world' }, + }, + }) + const msgId = v4() + const packedForwardMessage = await agent.packDIDCommMessage({ + packing: 'anoncrypt', + message: { + type: FORWARD_MESSAGE_TYPE, + to: mediator.did, + id: msgId, + body: { + next: recipient.did, + }, + attachments: [ + { media_type: DIDCommMessageMediaType.ENCRYPTED, data: { json: JSON.parse(innerMessage.message) } }, + ], + }, + }) + await agent.sendDIDCommMessage({ + messageId: msgId, + packedMessage: packedForwardMessage, + recipientDidUrl: mediator.did, + }) + + expect(DIDCommEventSniffer.onEvent).toHaveBeenCalledWith( + { + data: { + id: expect.anything(), + to: `${recipient.did}#${recipient.keys[0].kid}`, + type: QUEUE_MESSAGE_TYPE, + raw: innerMessage.message, + createdAt: expect.anything(), + metaData: [{ type: 'didCommForwardMsgId', value: msgId }], + }, + type: 'DIDCommV2Message-forwardMessageQueued', + }, + expect.anything(), + ) + }) + + it('should not save forward message in queue for recipient denied', async () => { + // set up agent to deny mediation + agent.isMediateDefaultGrantAll = jest.fn(() => Promise.resolve(false)) + + expect.assertions(1) + // 1. Request Mediation + const mediateRequestMessage = createV3MediateRequestMessage(recipient.did, mediator.did) + const mediateRequestMessageContents = { packing: 'authcrypt', message: mediateRequestMessage } as const + const packedMediateRequestMessage = await agent.packDIDCommMessage(mediateRequestMessageContents) + const recipientDidUrl = mediator.did + await agent.sendDIDCommMessage({ + messageId: mediateRequestMessage.id, + packedMessage: packedMediateRequestMessage, + recipientDidUrl, + }) + + // 2. Recipient Update + const update: Update = { recipient_did: recipient.did, action: UpdateAction.ADD } + const updateMessage = createV3RecipientUpdateMessage(recipient.did, mediator.did, [update]) + const updateMessageContents = { packing: 'authcrypt', message: updateMessage } as const + const packedUpdateMessage = await agent.packDIDCommMessage(updateMessageContents) + await agent.sendDIDCommMessage({ + messageId: updateMessage.id, + packedMessage: packedUpdateMessage, + recipientDidUrl, + }) + + // 3. Save deny message + await agent.dataStoreSaveMessage({ + message: { + type: CoordinateMediation.MEDIATE_DENY, + from: mediator.did, + to: recipient.did, + id: v4(), + createdAt: new Date().toISOString(), + data: {}, + }, + }) + + // 4. Forward message + const innerMessage = await agent.packDIDCommMessage({ + packing: 'authcrypt', + message: { + type: 'test', + to: recipient.did, + from: mediator.did, + id: 'test', + body: { hello: 'world' }, + }, + }) + const msgId = v4() + const packedForwardMessage = await agent.packDIDCommMessage({ + packing: 'anoncrypt', + message: { + type: FORWARD_MESSAGE_TYPE, + to: mediator.did, + id: msgId, + body: { + next: recipient.did, + }, + attachments: [ + { media_type: DIDCommMessageMediaType.ENCRYPTED, data: { json: JSON.parse(innerMessage.message) } }, + ], + }, + }) + await agent.sendDIDCommMessage({ + messageId: msgId, + packedMessage: packedForwardMessage, + recipientDidUrl: mediator.did, + }) + + expect(DIDCommEventSniffer.onEvent).not.toHaveBeenCalledWith( + { + data: { + id: expect.anything(), + to: `${recipient.did}#${recipient.keys[0].kid}`, + type: QUEUE_MESSAGE_TYPE, + raw: innerMessage, + createdAt: expect.anything(), + metaData: [{ type: 'didCommForwardMsgId', value: msgId }], + }, + type: 'DIDCommV2Message-forwardMessageQueued', + }, + expect.anything(), + ) + }) +}) diff --git a/packages/did-comm/src/__tests__/routing-message-handler.test.ts b/packages/did-comm/src/__tests__/routing-message-handler.test.ts index 7ad45e624..be08662f9 100644 --- a/packages/did-comm/src/__tests__/routing-message-handler.test.ts +++ b/packages/did-comm/src/__tests__/routing-message-handler.test.ts @@ -39,7 +39,6 @@ import { DIDCommMessageHandler } from '../message-handler.js' import { DataStore, DataStoreORM } from '../../../data-store/src' import { DataSource } from 'typeorm' import { v4 } from 'uuid' - import { jest } from '@jest/globals' import 'cross-fetch/polyfill' @@ -175,7 +174,7 @@ describe('routing-message-handler', () => { afterAll(async () => { try { - await new Promise((resolve, reject) => didCommEndpointServer?.close(resolve)) + await new Promise((resolve, _reject) => didCommEndpointServer?.close(resolve)) } catch (e: any) { //nop } 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 index ddbe65b75..03bd8e9b8 100644 --- a/packages/did-comm/src/__tests__/trust-ping-message-handler.test.ts +++ b/packages/did-comm/src/__tests__/trust-ping-message-handler.test.ts @@ -78,8 +78,7 @@ describe('trust-ping-message-handler', () => { ...new FakeDidResolver(() => agent).getDidFakeResolver(), }), }), - // @ts-ignore - new DIDComm([new DIDCommHttpTransport()]), + new DIDComm({ transports: [new DIDCommHttpTransport()]}), new MessageHandler({ messageHandlers: [ // @ts-ignore diff --git a/packages/did-comm/src/didcomm.ts b/packages/did-comm/src/didcomm.ts index f286bf347..bad2b67b4 100644 --- a/packages/did-comm/src/didcomm.ts +++ b/packages/did-comm/src/didcomm.ts @@ -80,13 +80,17 @@ import { } from '@veramo/utils' import Debug from 'debug' -import { IDIDComm } from './types/IDIDComm.js' +import { + IDIDComm, + IPackDIDCommMessageArgs, + ISendDIDCommMessageArgs, + ISendDIDCommMessageResponse, + IUnpackDIDCommMessageArgs, +} from './types/IDIDComm.js' import { DIDCommHttpTransport, IDIDCommTransport } from './transports/transports.js' import { DIDCommMessageMediaType, - DIDCommMessagePacking, IDIDCommMessage, - IDIDCommOptions, IPackedDIDCommMessage, IUnpackedDIDCommMessage, } from './types/message-types.js' @@ -119,41 +123,15 @@ export interface ISendMessageDIDCommAlpha1Args { headers?: Record } -// interface arguments - -/** - * The input to the {@link DIDComm.unpackDIDCommMessage} method. - * - * @beta This API may change without a BREAKING CHANGE notice. - */ -export type IUnpackDIDCommMessageArgs = IPackedDIDCommMessage - /** - * The input to the {@link DIDComm.packDIDCommMessage} method. - * When `packing` is `authcrypt` or `jws`, a `keyRef` MUST be provided. + * The config for the {@link DIDComm} DIDComm plugin. * * @beta This API may change without a BREAKING CHANGE notice. */ -export interface IPackDIDCommMessageArgs { - message: IDIDCommMessage - packing: DIDCommMessagePacking - keyRef?: string - options?: IDIDCommOptions +export interface DIDCommConfig { + transports?: T[] } -/** - * The input to the {@link DIDComm.sendDIDCommMessage} method. - * The provided `messageId` will be used in the emitted - * event to allow event/message correlation. - * - * @beta This API may change without a BREAKING CHANGE notice. - */ -export interface ISendDIDCommMessageArgs { - packedMessage: IPackedDIDCommMessage - messageId: string - returnTransportId?: string - recipientDidUrl: string -} /** * DID Comm plugin for {@link @veramo/core#Agent} @@ -177,7 +155,7 @@ export class DIDComm implements IAgentPlugin { * @param transports - A list of {@link IDIDCommTransport} objects. Defaults to * {@link @veramo/did-comm#DIDCommHttpTransport | DIDCommHttpTransport} */ - constructor(transports: IDIDCommTransport[] = [new DIDCommHttpTransport()]) { + constructor({ transports = [new DIDCommHttpTransport()] }: DIDCommConfig = {}) { this.transports = transports this.methods = { sendMessageDIDCommAlpha1: this.sendMessageDIDCommAlpha1.bind(this), @@ -422,7 +400,8 @@ export class DIDComm implements IAgentPlugin { recipient.publicKeyBytes, senderECDH, { kid: recipient.kid }, - )} else if (options?.alg?.endsWith('+A256KW')) { + ) + } else if (options?.alg?.endsWith('+A256KW')) { // FIXME: the didcomm spec actually links to ECDH-1PU(v4) return xc20pAuthEncrypterEcdh1PuV3x25519WithA256KW(recipient.publicKeyBytes, senderECDH, { kid: recipient.kid, @@ -715,8 +694,8 @@ export class DIDComm implements IAgentPlugin { /** {@inheritdoc IDIDComm.sendDIDCommMessage} */ async sendDIDCommMessage( args: ISendDIDCommMessageArgs, - context: IAgentContext, - ): Promise { + context: IAgentContext, + ): Promise { const { packedMessage, returnTransportId, recipientDidUrl, messageId } = args if (returnTransportId) { @@ -839,11 +818,12 @@ export class DIDComm implements IAgentPlugin { if (response.returnMessage) { // Handle return message - await context.agent.handleMessage({ + const returnMessage = await context.agent.handleMessage({ raw: response.returnMessage, }) + return { transportId: transport.id, returnMessage } } - return transport.id + return { transportId: transport.id } } /** {@inheritdoc IDIDComm.sendMessageDIDCommAlpha1} */ diff --git a/packages/did-comm/src/index.ts b/packages/did-comm/src/index.ts index 3ffca0e71..5cf8fc6b0 100644 --- a/packages/did-comm/src/index.ts +++ b/packages/did-comm/src/index.ts @@ -6,12 +6,7 @@ * @packageDocumentation */ -export { - DIDComm, - ISendMessageDIDCommAlpha1Args, - IPackDIDCommMessageArgs, - IUnpackDIDCommMessageArgs, -} from './didcomm.js' +export * from './didcomm.js' export * from './types/message-types.js' export * from './types/utility-types.js' export * from './types/IDIDComm.js' diff --git a/packages/did-comm/src/plugin.schema.json b/packages/did-comm/src/plugin.schema.json index c74f08601..7af1fa346 100644 --- a/packages/did-comm/src/plugin.schema.json +++ b/packages/did-comm/src/plugin.schema.json @@ -43,7 +43,7 @@ "message", "packing" ], - "description": "The input to the {@link DIDComm.packDIDCommMessage } method. When `packing` is `authcrypt` or `jws`, a `keyRef` MUST be provided." + "description": "The input to the {@link IDIDComm.packDIDCommMessage } method. When `packing` is `authcrypt` or `jws`, a `keyRef` MUST be provided." }, "IDIDCommMessage": { "type": "object", @@ -222,61 +222,22 @@ "messageId", "recipientDidUrl" ], - "description": "The input to the {@link DIDComm.sendDIDCommMessage } method. The provided `messageId` will be used in the emitted event to allow event/message correlation." + "description": "The input to the {@link IDIDComm.sendDIDCommMessage } method. The provided `messageId` will be used in the emitted event to allow event/message correlation." }, - "ISendMessageDIDCommAlpha1Args": { + "ISendDIDCommMessageResponse": { "type": "object", "properties": { - "url": { + "transportId": { "type": "string" }, - "save": { - "type": "boolean" - }, - "data": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "from": { - "type": "string" - }, - "to": { - "type": "string" - }, - "type": { - "type": "string" - }, - "body": { - "anyOf": [ - { - "type": "object" - }, - { - "type": "string" - } - ] - } - }, - "required": [ - "from", - "to", - "type", - "body" - ] - }, - "headers": { - "type": "object", - "additionalProperties": { - "type": "string" - } + "returnMessage": { + "$ref": "#/components/schemas/IMessage" } }, "required": [ - "data" + "transportId" ], - "deprecated": "Please use {@link IDIDComm.sendDIDCommMessage } instead. This will be removed in Veramo 4.0.\nInput arguments for {@link IDIDComm.sendMessageDIDCommAlpha1 }" + "description": "The response from the {@link IDIDComm.sendDIDCommMessage } method." }, "IMessage": { "type": "object", @@ -647,9 +608,63 @@ }, "description": "The DIDComm message structure for data in an attachment. See https://identity.foundation/didcomm-messaging/spec/#attachments" }, + "ISendMessageDIDCommAlpha1Args": { + "type": "object", + "properties": { + "url": { + "type": "string" + }, + "save": { + "type": "boolean" + }, + "data": { + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "from": { + "type": "string" + }, + "to": { + "type": "string" + }, + "type": { + "type": "string" + }, + "body": { + "anyOf": [ + { + "type": "object" + }, + { + "type": "string" + } + ] + } + }, + "required": [ + "from", + "to", + "type", + "body" + ] + }, + "headers": { + "type": "object", + "additionalProperties": { + "type": "string" + } + } + }, + "required": [ + "data" + ], + "deprecated": "Please use {@link IDIDComm.sendDIDCommMessage } instead. This will be removed in Veramo 4.0.\nInput arguments for {@link IDIDComm.sendMessageDIDCommAlpha1 }" + }, "IUnpackDIDCommMessageArgs": { "$ref": "#/components/schemas/IPackedDIDCommMessage", - "description": "The input to the {@link DIDComm.unpackDIDCommMessage } method." + "description": "The input to the {@link IDIDComm.unpackDIDCommMessage } method." }, "IUnpackedDIDCommMessage": { "type": "object", @@ -700,12 +715,12 @@ } }, "sendDIDCommMessage": { - "description": "Sends the given message to the recipient. If a return transport is provided it will be checked whether the parent thread allows reusing the route. You cannot reuse the transport if the message was forwarded from a DIDComm mediator.", + "description": "Sends the given message to the recipient. If a return-transport is provided it will be checked whether the parent thread allows reusing the route. You cannot reuse the transport if the message was forwarded from a DIDComm mediator.", "arguments": { "$ref": "#/components/schemas/ISendDIDCommMessageArgs" }, "returnType": { - "type": "string" + "$ref": "#/components/schemas/ISendDIDCommMessageResponse" } }, "sendMessageDIDCommAlpha1": { diff --git a/packages/did-comm/src/protocols/coordinate-mediation-v3-message-handler.ts b/packages/did-comm/src/protocols/coordinate-mediation-v3-message-handler.ts new file mode 100644 index 000000000..944a4a95e --- /dev/null +++ b/packages/did-comm/src/protocols/coordinate-mediation-v3-message-handler.ts @@ -0,0 +1,576 @@ +import { IAgentContext, IDIDManager, IKeyManager } from '@veramo/core-types' +import { MediationResponse, IMediationManager, RequesterDid, RecipientDid } from '@veramo/mediation-manager' + +import { AbstractMessageHandler, Message } from '@veramo/message-handler' +import Debug from 'debug' +import { v4 } from 'uuid' +import { IDIDComm } from '../types/IDIDComm.js' +import { IDIDCommMessage, DIDCommMessageMediaType } from '../types/message-types.js' + +const debug = Debug('veramo:did-comm:coordinate-mediation-message-handler') + +const GRANTED = 'GRANTED' +const DENIED = 'DENIED' + +type Context = IAgentContext + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * Represents the actions (add or remove) that can be taken on a recipient did + * + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export enum UpdateAction { + ADD = 'add', + REMOVE = 'remove', +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * Represents the result of an update action + * + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export enum RecipientUpdateResult { + SUCCESS = 'success', + NO_CHANGE = 'no_change', + CLIENT_ERROR = 'client_error', + SERVER_ERROR = 'server_error', +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * Parameter options for the CoordinateMediationV3MediatorMessageHandler {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export interface CoordinateMediationV3MediatorMessageHandlerOptions { + isMediateDefaultGrantAll: boolean +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * Represents the structure of a specific update on RECIPIENT_UPDATE + */ +export interface Update { + recipient_did: RecipientDid + action: UpdateAction +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * Represents an update response on RECIPIENT_UPDATE_RESPONSE + */ +export interface UpdateResult extends Update { + result: RecipientUpdateResult +} + +interface Query { + limit: number + offset: number +} + +interface MediateRequestMessage extends Message { + to: string + from: RequesterDid + type: CoordinateMediation.MEDIATE_REQUEST +} + +interface RecipientUpdateMessage extends Message { + to: string + from: RequesterDid + type: CoordinateMediation.RECIPIENT_UPDATE + body: { updates: Update[] } + return_route: 'all' +} + +interface RecipientQueryMessage extends Message { + to: string + from: RequesterDid + type: CoordinateMediation.RECIPIENT_QUERY + body: { paginate?: Query } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * Represents the types of messages that can be sent and received by the Mediator Coordinator protocol + * + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + * @see {@link @veramo/did-comm#CoordinateMediationRecipientMessageHandler} + */ +export enum CoordinateMediation { + MEDIATE_REQUEST = 'https://didcomm.org/coordinate-mediation/3.0/mediate-request', + MEDIATE_GRANT = 'https://didcomm.org/coordinate-mediation/3.0/mediate-grant', + MEDIATE_DENY = 'https://didcomm.org/coordinate-mediation/3.0/mediate-deny', + RECIPIENT_UPDATE = 'https://didcomm.org/coordinate-mediation/3.0/recipient-update', + RECIPIENT_UPDATE_RESPONSE = 'https://didcomm.org/coordinate-mediation/3.0/recipient-update-response', + RECIPIENT_QUERY = 'https://didcomm.org/coordinate-mediation/3.0/recipient-query', + RECIPIENT_QUERY_RESPONSE = 'https://didcomm.org/coordinate-mediation/3.0/recipient', +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + */ +export enum MessagePickup { + STATUS_REQUEST_MESSAGE_TYPE = 'https://didcomm.org/messagepickup/3.0/status-request', + DELIVERY_REQUEST_MESSAGE_TYPE = 'https://didcomm.org/messagepickup/3.0/delivery-request', +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + */ +export function createV3MediateGrantMessage( + recipientDidUrl: string, + mediatorDidUrl: string, + thid: string, +): IDIDCommMessage { + return { + type: CoordinateMediation.MEDIATE_GRANT, + from: mediatorDidUrl, + to: recipientDidUrl, + id: v4(), + thid: thid, + body: { routing_did: [mediatorDidUrl] }, + created_time: new Date().toISOString(), + } +} +/** + * @beta This API may change without a BREAKING CHANGE notice. + */ +export const createV3MediateDenyMessage = ( + recipientDidUrl: string, + mediatorDidUrl: string, + thid: string, +): IDIDCommMessage => { + return { + type: CoordinateMediation.MEDIATE_DENY, + from: mediatorDidUrl, + to: recipientDidUrl, + id: v4(), + thid: thid, + created_time: new Date().toISOString(), + body: null, + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export function createV3RecipientUpdateResponseMessage( + recipientDidUrl: string, + mediatorDidUrl: string, + thid: string, + updates: UpdateResult[], +): IDIDCommMessage { + return { + type: CoordinateMediation.RECIPIENT_UPDATE_RESPONSE, + from: mediatorDidUrl, + to: recipientDidUrl, + id: v4(), + thid: thid, + body: { updates }, + created_time: new Date().toISOString(), + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export const createV3RecipientQueryResponseMessage = ( + recipientDidUrl: string, + mediatorDidUrl: string, + thid: string, + dids: Record<'recipient_did', RecipientDid>[], +): IDIDCommMessage => { + return { + type: CoordinateMediation.RECIPIENT_QUERY_RESPONSE, + from: mediatorDidUrl, + to: recipientDidUrl, + id: v4(), + thid: thid, + body: { dids }, + created_time: new Date().toISOString(), + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * @returns a structured message for the Mediator Coordinator protocol + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export function createV3MediateRequestMessage( + recipientDidUrl: string, + mediatorDidUrl: string, +): IDIDCommMessage { + return { + type: CoordinateMediation.MEDIATE_REQUEST, + from: recipientDidUrl, + to: mediatorDidUrl, + id: v4(), + created_time: new Date().toISOString(), + body: {}, + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + */ +export const createV3StatusRequestMessage = ( + recipientDidUrl: string, + mediatorDidUrl: string, +): IDIDCommMessage => { + return { + id: v4(), + type: MessagePickup.STATUS_REQUEST_MESSAGE_TYPE, + to: mediatorDidUrl, + from: recipientDidUrl, + return_route: 'all', + body: {}, + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * @returns a structured upate message for the Mediator Coordinator protocol + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export const createV3RecipientUpdateMessage = ( + recipientDidUrl: string, + mediatorDidUrl: string, + updates: Update[], +): IDIDCommMessage => { + return { + type: CoordinateMediation.RECIPIENT_UPDATE, + from: recipientDidUrl, + to: mediatorDidUrl, + id: v4(), + created_time: new Date().toISOString(), + body: { updates }, + return_route: 'all', + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + * + * @returns a structured query message for the Mediator Coordinator protocol + * @see {@link @veramo/did-comm#CoordinateMediationV3MediatorMessageHandler} + */ +export const createV3RecipientQueryMessage = ( + recipientDidUrl: string, + mediatorDidUrl: string, +): IDIDCommMessage => { + return { + type: CoordinateMediation.RECIPIENT_QUERY, + from: recipientDidUrl, + to: mediatorDidUrl, + id: v4(), + created_time: new Date().toISOString(), + body: {}, + } +} + +/** + * @beta This API may change without a BREAKING CHANGE notice. + */ +export const createV3DeliveryRequestMessage = ( + recipientDidUrl: string, + mediatorDidUrl: string, +): IDIDCommMessage => { + return { + id: v4(), + type: MessagePickup.DELIVERY_REQUEST_MESSAGE_TYPE, + to: mediatorDidUrl, + from: recipientDidUrl, + return_route: 'all', + body: { limit: 2 }, + } +} + +/** + * Handler Type Guards + */ + +const isMediateRequest = (message: Message): message is MediateRequestMessage => { + if (message.type !== CoordinateMediation.MEDIATE_REQUEST) return false + if (!message.from) throw new Error('invalid_argument: MediateRequest received without `from` set') + if (!message.from) throw new Error('invalid_argument: MediateRequest received without `to` set') + return true +} + +const isRecipientUpdate = (message: Message): message is RecipientUpdateMessage => { + if (message.type !== CoordinateMediation.RECIPIENT_UPDATE) return false + if (!message.from) throw new Error('invalid_argument: RecipientUpdate received without `from` set') + if (!message.to) throw new Error('invalid_argument: RecipientUpdate received without `to` set') + if (!('data' in message)) throw new Error('invalid_argument: RecipientUpdate received without `body` set') + if (!message.data || !message.data.updates) { + throw new Error('invalid_argument: RecipientUpdate received without `updates` set') + } + return true +} + +const isRecipientQuery = (message: Message): message is RecipientQueryMessage => { + if (message.type !== CoordinateMediation.RECIPIENT_QUERY) return false + if (!message.from) throw new Error('invalid_argument: RecipientQuery received without `from` set') + if (!message.to) throw new Error('invalid_argument: RecipientQuery received without `to` set') + return true +} + +/** + * A plugin for the {@link @veramo/message-handler#MessageHandler} that handles Mediator Coordinator messages for the mediator role. + * @beta This API may change without a BREAKING CHANGE notice. + */ +export class CoordinateMediationV3MediatorMessageHandler extends AbstractMessageHandler { + constructor() { + super() + } + + private async grantOrDenyMediation( + { from: requesterDid }: Message, + context: Context, + ): Promise { + if (!requesterDid) return DENIED + const policy = await context.agent.mediationManagerGetMediationPolicy({ requesterDid }) + if (await context.agent.isMediateDefaultGrantAll()) { + return policy === 'DENY' ? DENIED : GRANTED + } else { + return policy === 'ALLOW' ? GRANTED : DENIED + } + } + + private async handleMediateRequest(message: MediateRequestMessage, context: Context): Promise { + try { + debug('MediateRequest Message Received') + const requesterDid = message.from + const status = await this.grantOrDenyMediation(message, context) + await context.agent.mediationManagerSaveMediation({ status, requesterDid }) + const getResponse = status === GRANTED ? createV3MediateGrantMessage : createV3MediateDenyMessage + const response = getResponse(message.from, message.to, message.id) + const packedResponse = await context.agent.packDIDCommMessage({ + message: response, + packing: 'authcrypt', + }) + const returnResponse = { + id: response.id, + message: packedResponse.message, + contentType: DIDCommMessageMediaType.ENCRYPTED, + } + message.addMetaData({ type: 'ReturnRouteResponse', value: JSON.stringify(returnResponse) }) + + // Save message to track recipients + await context.agent.dataStoreSaveMessage({ + message: { + type: response.type, + from: response.from, + to: response.to, + id: response.id, + threadId: response.thid, + data: response.body, + createdAt: response.created_time, + }, + }) + } catch (error) { + debug(error) + } + return message + } + + /** + * Used to notify the mediator of DIDs in use by the recipient + **/ + private async handleRecipientUpdate(message: RecipientUpdateMessage, context: Context): Promise { + try { + debug('MediateRecipientUpdate Message Received') + const updates: Update[] = message.data.updates + + const applyUpdate = async (requesterDid: RequesterDid, update: Update) => { + const { recipient_did: recipientDid } = update + try { + if (update.action === UpdateAction.ADD) { + await context.agent.mediationManagerAddRecipientDid({ requesterDid, recipientDid }) + return { ...update, result: RecipientUpdateResult.SUCCESS } + } else if (update.action === UpdateAction.REMOVE) { + const result = await context.agent.mediationManagerRemoveRecipientDid({ recipientDid }) + if (result) return { ...update, result: RecipientUpdateResult.SUCCESS } + return { ...update, result: RecipientUpdateResult.NO_CHANGE } + } + return { ...update, result: RecipientUpdateResult.CLIENT_ERROR } + } catch (ex) { + debug(ex) + return { ...update, result: RecipientUpdateResult.SERVER_ERROR } + } + } + + const updated = await Promise.all(updates.map(async (u) => await applyUpdate(message.from, u))) + const response = createV3RecipientUpdateResponseMessage(message.from, message.to, message.id, updated) + const packedResponse = await context.agent.packDIDCommMessage({ + message: response, + packing: 'authcrypt', + }) + const returnResponse = { + id: response.id, + message: packedResponse.message, + contentType: DIDCommMessageMediaType.ENCRYPTED, + } + message.addMetaData({ type: 'ReturnRouteResponse', value: JSON.stringify(returnResponse) }) + + await context.agent.dataStoreSaveMessage({ + message: { + type: response.type, + from: response.from, + to: response.to, + id: response.id, + threadId: response.thid, + data: response.body, + createdAt: response.created_time, + }, + }) + } catch (error) { + debug(error) + } + return message + } + + /** + * Query mediator for a list of DIDs registered for this connection + **/ + private async handleRecipientQuery(message: RecipientQueryMessage, context: Context): Promise { + try { + const dids = await context.agent.mediationManagerListRecipientDids({ requesterDid: message.from }) + const response = createV3RecipientQueryResponseMessage( + message.from, + message.to, + message.id, + dids.map((did) => ({ recipient_did: did })), + ) + const packedResponse = await context.agent.packDIDCommMessage({ + message: response, + packing: 'authcrypt', + }) + const returnResponse = { + id: response.id, + message: packedResponse.message, + contentType: DIDCommMessageMediaType.ENCRYPTED, + } + message.addMetaData({ type: 'ReturnRouteResponse', value: JSON.stringify(returnResponse) }) + + await context.agent.dataStoreSaveMessage({ + message: { + type: response.type, + from: response.from, + to: response.to, + id: response.id, + threadId: response.thid, + data: response.body, + createdAt: response.created_time, + }, + }) + } catch (error) { + debug(error) + } + return message + } + + /** + * Handles a Mediator Coordinator messages for the mediator role + * https://didcomm.org/mediator-coordination/3.0/ + */ + public async handle(message: Message, context: Context): Promise { + if (isMediateRequest(message)) return this.handleMediateRequest(message, context) + if (isRecipientUpdate(message)) return this.handleRecipientUpdate(message, context) + if (isRecipientQuery(message)) return this.handleRecipientQuery(message, context) + return super.handle(message, context) + } +} + +/** + * A plugin for the {@link @veramo/message-handler#MessageHandler} that handles Mediator Coordinator messages for the recipient role. + * @beta This API may change without a BREAKING CHANGE notice. + */ +export class CoordinateMediationV3RecipientMessageHandler extends AbstractMessageHandler { + constructor() { + super() + } + + /** + * Handles a Mediator Coordinator messages for the recipient role + * https://didcomm.org/mediator-coordination/2.0/ + */ + public async handle(message: Message, context: Context): Promise { + if (message.type === CoordinateMediation.MEDIATE_GRANT) { + debug('MediateGrant Message Received') + try { + const { from, to, data, threadId } = message + if (!from) { + throw new Error('invalid_argument: MediateGrant received without `from` set') + } + if (!to) { + throw new Error('invalid_argument: MediateGrant received without `to` set') + } + if (!threadId) { + throw new Error('invalid_argument: MediateGrant received without `thid` set') + } + if (!data.routing_did || data.routing_did.length === 0) { + throw new Error('invalid_argument: MediateGrant received with invalid routing_did') + } + // If mediate request was previously sent, add service to DID document + const prevRequestMsg = await context.agent.dataStoreGetMessage({ id: threadId }) + if (prevRequestMsg.from === to && prevRequestMsg.to === from) { + const service = { + id: 'didcomm-mediator', + type: 'DIDCommMessaging', + serviceEndpoint: [ + { + uri: data.routing_did[0], + }, + ], + } + await context.agent.didManagerAddService({ + did: to, + service: service, + }) + message.addMetaData({ type: 'DIDCommMessagingServiceAdded', value: JSON.stringify(service) }) + } + } catch (ex) { + debug(ex) + } + return message + } else if (message.type === CoordinateMediation.MEDIATE_DENY) { + debug('MediateDeny Message Received') + try { + const { from, to } = message + if (!from) { + throw new Error('invalid_argument: MediateGrant received without `from` set') + } + if (!to) { + throw new Error('invalid_argument: MediateGrant received without `to` set') + } + + // Delete service if it exists + const did = await context.agent.didManagerGet({ + did: to, + }) + const existingService = did.services.find( + (s) => + s.serviceEndpoint === from || + (Array.isArray(s.serviceEndpoint) && s.serviceEndpoint.includes(from)), + ) + if (existingService) { + await context.agent.didManagerRemoveService({ did: to, id: existingService.id }) + } + } catch (ex) { + debug(ex) + } + } + + return super.handle(message, context) + } +} diff --git a/packages/did-comm/src/protocols/index.ts b/packages/did-comm/src/protocols/index.ts index f88bae505..aef4b7c2b 100644 --- a/packages/did-comm/src/protocols/index.ts +++ b/packages/did-comm/src/protocols/index.ts @@ -1,4 +1,9 @@ export { TrustPingMessageHandler } from './trust-ping-message-handler.js' -export * from "./coordinate-mediation-message-handler.js" -export { RoutingMessageHandler } from "./routing-message-handler.js" -export { PickupMediatorMessageHandler, PickupRecipientMessageHandler } from "./messagepickup-message-handler.js" \ No newline at end of file +export * from './coordinate-mediation-message-handler.js' +export * from './coordinate-mediation-v3-message-handler.js' +export { RoutingMessageHandler } from './routing-message-handler.js' +export { + PickupMediatorMessageHandler, + PickupRecipientMessageHandler, +} from './messagepickup-message-handler.js' + diff --git a/packages/did-comm/src/protocols/routing-message-handler.ts b/packages/did-comm/src/protocols/routing-message-handler.ts index 130e3e585..567a4022c 100644 --- a/packages/did-comm/src/protocols/routing-message-handler.ts +++ b/packages/did-comm/src/protocols/routing-message-handler.ts @@ -1,16 +1,19 @@ import { IAgentContext, IDIDManager, IKeyManager, IDataStore, IDataStoreORM } from '@veramo/core-types' +import { IMediationManager, RecipientDid } from '@veramo/mediation-manager' import { AbstractMessageHandler, Message } from '@veramo/message-handler' import Debug from 'debug' import { v4 } from 'uuid' import { IDIDComm } from '../types/IDIDComm.js' import { - MEDIATE_GRANT_MESSAGE_TYPE, MEDIATE_DENY_MESSAGE_TYPE, + MEDIATE_GRANT_MESSAGE_TYPE, } from './coordinate-mediation-message-handler.js' const debug = Debug('veramo:did-comm:routing-message-handler') -type IContext = IAgentContext +type IContext = IAgentContext< + IDIDManager & IKeyManager & IDIDComm & IDataStore & IDataStoreORM & IMediationManager +> export const FORWARD_MESSAGE_TYPE = 'https://didcomm.org/routing/2.0/forward' export const QUEUE_MESSAGE_TYPE = 'https://didcomm.org/routing/2.0/forward/queue-message' @@ -25,6 +28,36 @@ export class RoutingMessageHandler extends AbstractMessageHandler { super() } + private isV2MediationGranted = async (message: Message, context: IContext): Promise => { + // Check if receiver has been granted mediation + const mediationResponses = await context.agent.dataStoreORMGetMessages({ + where: [ + { + column: 'type', + value: [MEDIATE_GRANT_MESSAGE_TYPE, MEDIATE_DENY_MESSAGE_TYPE], + op: 'In', + }, + { + column: 'to', + value: [message.data.next], + op: 'In', + }, + ], + order: [{ column: 'createdAt', direction: 'DESC' }], + }) + return mediationResponses.length > 0 && mediationResponses[0].type === MEDIATE_GRANT_MESSAGE_TYPE + } + + private isV3MediationGranted = async (recipientDid: RecipientDid, context: IContext): Promise => { + /** + * NOTE: the below check is used to determine if the agent is using the v3 mediation manager + **/ + if ('isMediateDefaultGrantAll' in context.agent) { + return await context.agent.mediationManagerIsMediationGranted({ recipientDid }) + } + return false + } + /** * Handles forward messages for Routing protocol * https://didcomm.org/routing/2.0/ @@ -33,34 +66,16 @@ export class RoutingMessageHandler extends AbstractMessageHandler { if (message.type === FORWARD_MESSAGE_TYPE) { debug('Forward Message Received') try { - const { attachments, data } = message - if (!attachments) { - throw new Error('invalid_argument: Forward received without `attachments` set') - } - if (!data.next) { - throw new Error('invalid_argument: Forward received without `body.next` set') - } + const { attachments, data: { next: recipientDid = '' } = {} } = message + if (!attachments) throw new Error('invalid_argument: Forward received without `attachments` set') + if (!recipientDid) throw new Error('invalid_argument: Forward received without `body.next` set') - if (attachments.length > 0) { - // Check if receiver has been granted mediation - const mediationResponses = await context.agent.dataStoreORMGetMessages({ - where: [ - { - column: 'type', - value: [MEDIATE_GRANT_MESSAGE_TYPE, MEDIATE_DENY_MESSAGE_TYPE], - op: 'In', - }, - { - column: 'to', - value: [data.next], - op: 'In', - }, - ], - order: [{ column: 'createdAt', direction: 'DESC' }], - }) + if (attachments.length) { + const isMediationGranted = + (await this.isV3MediationGranted(recipientDid, context)) || + (await this.isV2MediationGranted(message, context)) - // If last mediation response was a grant (not deny) - if (mediationResponses.length > 0 && mediationResponses[0].type === MEDIATE_GRANT_MESSAGE_TYPE) { + if (isMediationGranted) { const recipients = attachments[0].data.json.recipients for (let i = 0; i < recipients.length; i++) { const recipient = recipients[i].header.kid diff --git a/packages/did-comm/src/protocols/trust-ping-message-handler.ts b/packages/did-comm/src/protocols/trust-ping-message-handler.ts index 25ecd6abc..66f863b34 100644 --- a/packages/did-comm/src/protocols/trust-ping-message-handler.ts +++ b/packages/did-comm/src/protocols/trust-ping-message-handler.ts @@ -73,7 +73,7 @@ export class TrustPingMessageHandler extends AbstractMessageHandler { packedMessage: packedResponse, recipientDidUrl: from!, }) - message.addMetaData({ type: 'TrustPingResponseSent', value: sent }) + message.addMetaData({ type: 'TrustPingResponseSent', value: JSON.stringify(sent) }) } catch (ex) { debug(ex) } diff --git a/packages/did-comm/src/types/IDIDComm.ts b/packages/did-comm/src/types/IDIDComm.ts index 7e313dee7..88803b658 100644 --- a/packages/did-comm/src/types/IDIDComm.ts +++ b/packages/did-comm/src/types/IDIDComm.ts @@ -7,19 +7,62 @@ import { IPluginMethodMap, IResolver, } from '@veramo/core-types' -import { - IPackDIDCommMessageArgs, - ISendDIDCommMessageArgs, - ISendMessageDIDCommAlpha1Args, - IUnpackDIDCommMessageArgs, -} from '../didcomm.js' +import { ISendMessageDIDCommAlpha1Args } from '../didcomm.js' import { DIDCommMessageMediaType, + DIDCommMessagePacking, + IDIDCommMessage, IDIDCommOptions, IPackedDIDCommMessage, IUnpackedDIDCommMessage, } from './message-types.js' +/** + * The input to the {@link IDIDComm.unpackDIDCommMessage} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export type IUnpackDIDCommMessageArgs = IPackedDIDCommMessage + +/** + * The input to the {@link IDIDComm.packDIDCommMessage} method. + * When `packing` is `authcrypt` or `jws`, a `keyRef` MUST be provided. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IPackDIDCommMessageArgs { + message: IDIDCommMessage + packing: DIDCommMessagePacking + keyRef?: string + options?: IDIDCommOptions +} + +/** + * The input to the {@link IDIDComm.sendDIDCommMessage} method. + * The provided `messageId` will be used in the emitted + * event to allow event/message correlation. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface ISendDIDCommMessageArgs { + packedMessage: IPackedDIDCommMessage + messageId: string + returnTransportId?: string + recipientDidUrl: string +} + +/** + * The response from the {@link IDIDComm.sendDIDCommMessage} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + * `return_message` is only present if the `return_route: 'all'` was used + * in the packedMessage. + */ +export interface ISendDIDCommMessageResponse { + transportId: string + returnMessage?: IMessage +} + /** * DID Comm plugin interface for {@link @veramo/core#Agent} * @@ -29,8 +72,8 @@ export interface IDIDComm extends IPluginMethodMap { /** * Partially decodes a possible DIDComm message string to determine the {@link DIDCommMessageMediaType} * - * @param IPackedDIDCommMessage - the message to be interpreted - * @returns the {@link DIDCommMessageMediaType} if it was successfully parsed + * @param args - the message to be interpreted + * @returns - the {@link DIDCommMessageMediaType} if it was successfully parsed * @throws if the message cannot be parsed as DIDComm v2 * * @beta This API may change without a BREAKING CHANGE notice. @@ -51,7 +94,8 @@ export interface IDIDComm extends IPluginMethodMap { * {@link @veramo/core-types#IKeyManager} and {@link @veramo/core-types#IResolver} plugins in use. * When calling this method, the `context` is supplied automatically by the framework. * - * @returns a Promise that resolves to an object containing the serialized packed `message` string + * @returns - a Promise that resolves to a {@link IPackedDIDCommMessage} object containing the serialized packed + * `message` string * * @beta This API may change without a BREAKING CHANGE notice. */ @@ -69,7 +113,7 @@ export interface IDIDComm extends IPluginMethodMap { * {@link @veramo/core-types#IKeyManager} and {@link @veramo/core-types#IResolver} plugins in use. * When calling this method, the `context` is supplied automatically by the framework. * - * @returns a Promise that resolves to an object containing + * @returns - a Promise that resolves to an object containing * the {@link IDIDCommMessage} and {@link DIDCommMessagePacking} used. * * @beta This API may change without a BREAKING CHANGE notice. @@ -80,7 +124,7 @@ export interface IDIDComm extends IPluginMethodMap { ): Promise /** - * Sends the given message to the recipient. If a return transport is provided + * Sends the given message to the recipient. If a return-transport is provided * it will be checked whether the parent thread allows reusing the route. You cannot * reuse the transport if the message was forwarded from a DIDComm mediator. * @@ -89,21 +133,27 @@ export interface IDIDComm extends IPluginMethodMap { * * @param args - An object containing the message, recipient information and optional * information about the transport that should be used. - * @param context - This method requires an agent that also has {@link @veramo/core-types#IResolver} - * plugins in use. When calling this method, the `context` is supplied automatically by the framework. + * @param context - This method requires an agent that also has {@link @veramo/core-types#IResolver}, + * {@link @veramo/core-types#IKeyManager}, {@link @veramo/core-types#IDIDManager}, and + * {@link @veramo/core-types#IMessageHandler} plugins in use. When calling this method, the `context` is supplied + * automatically by the framework. * - * @returns The transport id that was used to send the message. It throws an error in case something - * went wrong. + * @returns - a {@link ISendDIDCommMessageResponse} containing the transport id that was used to send the message and + * a return message, if one is available. It throws an error in case something went wrong. * * @beta This API may change without a BREAKING CHANGE notice. */ - sendDIDCommMessage(args: ISendDIDCommMessageArgs, context: IAgentContext): Promise + sendDIDCommMessage( + args: ISendDIDCommMessageArgs, + context: IAgentContext, + ): Promise /** * * @deprecated Please use {@link IDIDComm.sendDIDCommMessage} instead. This will be removed in Veramo 4.0 * - * This is used to create a message according to the initial {@link https://github.com/decentralized-identifier/DIDComm-js | DIDComm-js} implementation. + * This is used to create a message according to the initial + * {@link https://github.com/decentralized-identifier/DIDComm-js | DIDComm-js} implementation. * * @remarks Be advised that this spec is still not final and that this protocol may need to change. * diff --git a/packages/did-jwt/package.json b/packages/did-jwt/package.json index 4773a7a17..bf5d42170 100644 --- a/packages/did-jwt/package.json +++ b/packages/did-jwt/package.json @@ -13,7 +13,7 @@ "@veramo/core-types": "workspace:^", "@veramo/message-handler": "workspace:^", "debug": "^4.3.3", - "did-jwt": "^7.2.5", + "did-jwt": "^7.4.1", "did-resolver": "^4.1.0" }, "devDependencies": { diff --git a/packages/did-manager/src/abstract-identifier-store.ts b/packages/did-manager/src/abstract-identifier-store.ts index 28e291100..0c4e17f58 100644 --- a/packages/did-manager/src/abstract-identifier-store.ts +++ b/packages/did-manager/src/abstract-identifier-store.ts @@ -7,7 +7,7 @@ import { IIdentifier } from '@veramo/core-types' export abstract class AbstractDIDStore { abstract importDID(args: IIdentifier): Promise abstract getDID(args: { did: string }): Promise - abstract getDID(args: { alias: string; provider: string }): Promise + abstract getDID(args: { alias: string }): Promise abstract deleteDID(args: { did: string }): Promise abstract listDIDs(args: { alias?: string; provider?: string }): Promise } diff --git a/packages/did-manager/src/id-manager.ts b/packages/did-manager/src/id-manager.ts index 78fea219d..116b5e303 100644 --- a/packages/did-manager/src/id-manager.ts +++ b/packages/did-manager/src/id-manager.ts @@ -93,9 +93,8 @@ export class DIDManager implements IAgentPlugin { } /** {@inheritDoc @veramo/core-types#IDIDManager.didManagerGetByAlias} */ - async didManagerGetByAlias({ alias, provider }: IDIDManagerGetByAliasArgs): Promise { - const providerName = provider || this.defaultProvider - return this.store.getDID({ alias, provider: providerName }) + async didManagerGetByAlias({ alias }: IDIDManagerGetByAliasArgs): Promise { + return this.store.getDID({ alias }) } /** {@inheritDoc @veramo/core-types#IDIDManager.didManagerCreate} */ @@ -107,11 +106,11 @@ export class DIDManager implements IAgentPlugin { if (args?.alias !== undefined) { let existingIdentifier try { - existingIdentifier = await this.store.getDID({ alias: args.alias, provider: providerName }) + existingIdentifier = await this.store.getDID({ alias: args.alias }) } catch (e) {} if (existingIdentifier) { throw Error( - `illegal_argument: Identifier with alias: ${args.alias}, provider: ${providerName} already exists: ${existingIdentifier.did}`, + `illegal_argument: Identifier with alias: ${args.alias} already exists: ${existingIdentifier.did}`, ) } } @@ -133,14 +132,21 @@ export class DIDManager implements IAgentPlugin { { provider, alias, kms, options }: IDIDManagerGetOrCreateArgs, context: IAgentContext, ): Promise { + let identifier: IIdentifier | undefined try { - const providerName = provider || this.defaultProvider - // @ts-ignore - const identifier = await this.store.getDID({ alias, provider: providerName }) - return identifier + identifier = await this.store.getDID({ alias }) } catch { - return this.didManagerCreate({ provider, alias, kms, options }, context) + const providerName = provider || this.defaultProvider + return this.didManagerCreate({ provider: providerName, alias, kms, options }, context) } + if (identifier && provider && identifier.provider !== provider) { + if (this.getProvider(identifier.provider) !== this.getProvider(provider)) { + throw Error( + `illegal_argument: Identifier with alias: ${alias}, already exists ${identifier.did}, but was created with a different provider: ${identifier.provider}!==${provider}`, + ) + } + } + return identifier } /** {@inheritDoc @veramo/core-types#IDIDManager.didManagerUpdate} */ diff --git a/packages/did-manager/src/memory-did-store.ts b/packages/did-manager/src/memory-did-store.ts index b552217c4..1845439ce 100644 --- a/packages/did-manager/src/memory-did-store.ts +++ b/packages/did-manager/src/memory-did-store.ts @@ -21,9 +21,9 @@ export class MemoryDIDStore extends AbstractDIDStore { if (did && !alias) { if (!this.identifiers[did]) throw Error(`not_found: IIdentifier not found with did=${did}`) return this.identifiers[did] - } else if (!did && alias && provider) { + } else if (!did && alias) { for (const key of Object.keys(this.identifiers)) { - if (this.identifiers[key].alias === alias && this.identifiers[key].provider === provider) { + if (this.identifiers[key].alias === alias) { return this.identifiers[key] } } diff --git a/packages/did-provider-ethr/package.json b/packages/did-provider-ethr/package.json index d36ba3792..a9f176c56 100644 --- a/packages/did-provider-ethr/package.json +++ b/packages/did-provider-ethr/package.json @@ -10,19 +10,11 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/abstract-signer": "5.7.0", - "@ethersproject/address": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/properties": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", "@veramo/core-types": "workspace:^", "@veramo/did-manager": "workspace:^", "debug": "^4.3.3", - "ethr-did": "^2.3.18" + "ethers": "^6.9.0", + "ethr-did": "^3.0.5" }, "devDependencies": { "@types/debug": "4.1.8", diff --git a/packages/did-provider-ethr/src/ethr-did-provider.ts b/packages/did-provider-ethr/src/ethr-did-provider.ts index d34f540c6..e23f89191 100644 --- a/packages/did-provider-ethr/src/ethr-did-provider.ts +++ b/packages/did-provider-ethr/src/ethr-did-provider.ts @@ -1,14 +1,9 @@ import { IAgentContext, IIdentifier, IKey, IKeyManager, IService } from '@veramo/core-types' import { AbstractIdentifierProvider } from '@veramo/did-manager' -import { Provider } from '@ethersproject/abstract-provider' -import { JsonRpcProvider, TransactionRequest } from '@ethersproject/providers' -import { BigNumber } from '@ethersproject/bignumber' -import { computePublicKey } from '@ethersproject/signing-key' -import { computeAddress } from '@ethersproject/transactions' +import { Provider, SigningKey, computeAddress, JsonRpcProvider, TransactionRequest, Signature } from 'ethers' import { KmsEthereumSigner } from './kms-eth-signer.js' import Debug from 'debug' import { EthrDID } from 'ethr-did' -import { splitSignature } from '@ethersproject/bytes' const debug = Debug('veramo:did-provider-ethr') @@ -38,7 +33,7 @@ export interface CreateDidEthrOptions { * * If this is not specified, `mainnet` is assumed. */ - network?: string | number + network?: string | number | bigint /** * This is usually a did prefix, like `did:ethr` or `did:ethr:goerli` and can be used to determine the desired @@ -106,7 +101,7 @@ export interface EthrNetworkConfiguration { * * Example, chainId==42 and name==undefined => DIDs are prefixed with `did:ethr:0x2a:` */ - chainId?: string | number + chainId?: string | number | bigint // eslint-disable-next-line @typescript-eslint/no-explicit-any [index: string]: any @@ -129,7 +124,7 @@ export class EthrDIDProvider extends AbstractIdentifierProvider { /** * @deprecated Please use the `networks` parameter instead. */ - network?: string | number + network?: string | number | bigint /** * @deprecated Please use the `networks` parameter instead. */ @@ -166,13 +161,16 @@ export class EthrDIDProvider extends AbstractIdentifierProvider { } if (typeof options.network === 'string') { if (options.network.startsWith('0x')) { - singleNetwork.chainId = parseInt(options.network.substring(2), 16) + singleNetwork.chainId = BigInt(options.network) } else { singleNetwork.name = options.network } - } else if (typeof options.network === 'number') { + } else if (typeof options.network === 'bigint') { singleNetwork.chainId = options.network singleNetwork.name = options.name + } else if (typeof options.network === 'number') { + singleNetwork.chainId = BigInt(options.network) + singleNetwork.name = options.name } this.networks = [singleNetwork] } @@ -184,22 +182,33 @@ export class EthrDIDProvider extends AbstractIdentifierProvider { { kms, options }: { kms?: string; options?: CreateDidEthrOptions }, context: IRequiredContext, ): Promise> { - const key = await context.agent.keyManagerCreate({ kms: kms || this.defaultKms, type: 'Secp256k1' }) - const compressedPublicKey = computePublicKey(`0x${key.publicKeyHex}`, true) - let networkSpecifier = - options?.network || - (options?.providerName?.match(/^did:ethr:.+$/) ? options?.providerName?.substring(9) : undefined) + const key = await context.agent.keyManagerCreate({kms: kms || this.defaultKms, type: 'Secp256k1'}) + const compressedPublicKey = SigningKey.computePublicKey(`0x${key.publicKeyHex}`, true) + + let networkSpecifier + if(options?.network) { + if(typeof options.network === 'number') { + networkSpecifier = BigInt(options?.network) + } else { + networkSpecifier = options?.network + } + } else if(options?.providerName?.match(/^did:ethr:.+$/)) { + networkSpecifier = options?.providerName?.substring(9) + } else { + networkSpecifier = undefined + } + const network = this.getNetworkFor(networkSpecifier) if (!network) { throw new Error( `invalid_setup: Cannot create did:ethr. There is no known configuration for network=${networkSpecifier}'`, ) } - if (typeof networkSpecifier === 'number') { + if (typeof networkSpecifier === 'bigint' || typeof networkSpecifier === 'number') { networkSpecifier = network.name && network.name.length > 0 ? network.name - : BigNumber.from(options?.network || 1).toHexString() + : BigInt(options?.network || 1).toString(16) } const networkString = networkSpecifier && networkSpecifier !== 'mainnet' ? `${networkSpecifier}:` : '' const identifier: Omit = { @@ -227,16 +236,19 @@ export class EthrDIDProvider extends AbstractIdentifierProvider { return true } - private getNetworkFor(networkSpecifier: string | number | undefined): EthrNetworkConfiguration | undefined { - let networkNameOrId: string | number = networkSpecifier || 'mainnet' - if ( - typeof networkNameOrId === 'string' && - (networkNameOrId.startsWith('0x') || parseInt(networkNameOrId) > 0) - ) { - networkNameOrId = BigNumber.from(networkNameOrId).toNumber() - } + private getNetworkFor(networkSpecifier: string | number | bigint | undefined): EthrNetworkConfiguration | undefined { + let networkNameOrId: string | number | bigint = networkSpecifier || 'mainnet' let network = this.networks.find( - (n) => n.chainId === networkNameOrId || n.name === networkNameOrId || n.description === networkNameOrId, + (n) => { + if(n.chainId) { + if(typeof networkSpecifier === 'bigint') { + if(BigInt(n.chainId) === networkNameOrId) return n + } else { + if(n.chainId === networkNameOrId) return n + } + } + if(n.name === networkNameOrId || n.description === networkNameOrId) return n + }, ) if (!network && !networkSpecifier && this.networks.length === 1) { network = this.networks[0] @@ -261,10 +273,15 @@ export class EthrDIDProvider extends AbstractIdentifierProvider { const networkStringMatcher = /^did:ethr(:.+)?:(0x[0-9a-fA-F]{40}|0x[0-9a-fA-F]{66}).*$/ const matches = identifier.did.match(networkStringMatcher) let network = this.getNetworkFor(matches?.[1]?.substring(1)) + if (!matches || !network) { throw new Error(`invalid_argument: cannot find network for ${identifier.did}`) } + if(!network.provider) { + throw new Error(`Provider was not found for network ${identifier.did}`) + } + if (metaIdentifierKeyId) { const metaControllerKey = await context.agent.keyManagerGet({ kid: metaIdentifierKeyId }) if (typeof metaControllerKey === 'undefined') { @@ -522,6 +539,6 @@ export class EthrDIDProvider extends AbstractIdentifierProvider { algorithm: 'eth_rawSign', encoding: 'hex', }) - return splitSignature(signature) + return Signature.from(signature) } } diff --git a/packages/did-provider-ethr/src/kms-eth-signer.ts b/packages/did-provider-ethr/src/kms-eth-signer.ts index 3fdeac61b..c29e64e28 100644 --- a/packages/did-provider-ethr/src/kms-eth-signer.ts +++ b/packages/did-provider-ethr/src/kms-eth-signer.ts @@ -1,28 +1,33 @@ -import { TransactionRequest, Provider } from '@ethersproject/abstract-provider' -import { Signer, TypedDataSigner, TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' -import { getAddress } from '@ethersproject/address' -import { Bytes } from '@ethersproject/bytes' -import { Deferrable, resolveProperties } from '@ethersproject/properties' -import { computeAddress, serialize, UnsignedTransaction } from '@ethersproject/transactions' +import { + Provider, + Signer, + TypedDataDomain, + TypedDataField, + getAddress, + computeAddress, + Transaction, + AbstractSigner, +} from 'ethers' import { IRequiredContext } from './ethr-did-provider.js' import { IKey } from '@veramo/core-types' +import {Addressable} from "ethers"; /** - * Creates an `@ethersproject/abstract-signer` implementation by wrapping + * Creates an `ethers` - `signer` implementation by wrapping * a veramo agent with a key-manager that should be capable of `eth_signTransaction` * * @internal This is exported for convenience, not meant to be supported as part of the public API */ -export class KmsEthereumSigner extends Signer implements TypedDataSigner { +export class KmsEthereumSigner extends AbstractSigner { private context: IRequiredContext private controllerKey: IKey - readonly provider?: Provider + readonly provider: Provider | null constructor(controllerKey: IKey, context: IRequiredContext, provider?: Provider) { - super() + super(provider) this.controllerKey = controllerKey this.context = context - this.provider = provider + this.provider = provider || null } async getAddress(): Promise { @@ -33,25 +38,24 @@ export class KmsEthereumSigner extends Signer implements TypedDataSigner { return computeAddress('0x' + this.controllerKey.publicKeyHex) } - async signTransaction(transaction: Deferrable): Promise { - const tx = await resolveProperties(transaction) - if (tx.from != null) { + async signTransaction(transaction: Transaction): Promise { + if (transaction.from != null) { const thisAddress = await this.getAddress() - if (getAddress(tx.from) !== thisAddress) { + if (getAddress(transaction.from) !== thisAddress) { throw new Error(`transaction from address mismatch ${transaction.from} != ${thisAddress}`) } - delete tx.from } + const signature = await this.context.agent.keyManagerSign({ keyRef: this.controllerKey.kid, - data: serialize(tx), + data: transaction.unsignedSerialized, algorithm: 'eth_signTransaction', encoding: 'base16', }) return signature } - async _signTypedData( + async signTypedData( domain: TypedDataDomain, types: Record>, value: Record, @@ -68,11 +72,18 @@ export class KmsEthereumSigner extends Signer implements TypedDataSigner { }); } - signMessage(message: string | Bytes): Promise { + signMessage(message: string | Uint8Array): Promise { throw new Error('not_implemented: signMessage() Method not implemented by KmsEthereumSigner.') } - connect(provider: Provider): KmsEthereumSigner { - return new KmsEthereumSigner(this.controllerKey, this.context, provider) + connect(provider: Provider | null) { + if(!provider) { + throw new Error('provider must not be null') + } + return new KmsEthereumSigner(this.controllerKey, this.context, provider) as unknown as Signer } } + +function isAddressable(address: any): address is Addressable { + return (address as Addressable).getAddress !== undefined; +} diff --git a/packages/did-provider-ion/package.json b/packages/did-provider-ion/package.json index 949a531c7..4cc0955bb 100644 --- a/packages/did-provider-ion/package.json +++ b/packages/did-provider-ion/package.json @@ -11,8 +11,6 @@ }, "dependencies": { "@decentralized-identity/ion-sdk": "^1.0.1", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", "@noble/curves": "^1.1.0", "@noble/hashes": "^1.3.1", "@sphereon/ion-pow": "^0.2.0", @@ -27,6 +25,7 @@ "cross-fetch": "^4.0.0", "debug": "^4.3.3", "did-resolver": "^4.1.0", + "ethers": "^6.9.0", "multihashes": "^4.0.3" }, "devDependencies": { diff --git a/packages/did-provider-ion/src/functions.ts b/packages/did-provider-ion/src/functions.ts index f25f1aac6..8e8914c33 100644 --- a/packages/did-provider-ion/src/functions.ts +++ b/packages/did-provider-ion/src/functions.ts @@ -12,10 +12,9 @@ import { IonPublicKeyPurpose, JwkEs256k, } from '@decentralized-identity/ion-sdk' -import { computePublicKey } from '@ethersproject/signing-key' import { IKey, ManagedKeyInfo } from '@veramo/core-types' import keyto from '@trust/keyto' -import { randomBytes } from '@ethersproject/random' +import { randomBytes, SigningKey } from 'ethers' import { ed25519 } from '@noble/curves/ed25519' import Debug from 'debug' import { JsonCanonicalizer } from './json-canonicalizer.js' @@ -103,7 +102,7 @@ const publicKeyJwkFromPublicKeyHex = (publicKeyHex: string) => { const compressedHexEncodedPublicKeyLength = 66 if (publicKeyHex.length === compressedHexEncodedPublicKeyLength) { const publicBytes = hexToBytes(publicKeyHex) - key = computePublicKey(publicBytes, true).substring(2) + key = SigningKey.computePublicKey(publicBytes, true).substring(2) } const jwk = { ...keyto.from(key, 'blk').toJwk('public'), diff --git a/packages/did-provider-jwk/src/jwk-did-provider.ts b/packages/did-provider-jwk/src/jwk-did-provider.ts index 550abfcfb..6a1941dbc 100644 --- a/packages/did-provider-jwk/src/jwk-did-provider.ts +++ b/packages/did-provider-jwk/src/jwk-did-provider.ts @@ -1,9 +1,8 @@ import { IIdentifier, IKey, IService, IAgentContext, IKeyManager } from '@veramo/core-types' import { AbstractIdentifierProvider } from '@veramo/did-manager' -import { encodeJoseBlob } from '@veramo/utils' +import { JwkDidSupportedKeyTypes, encodeJoseBlob, generateJwkFromVerificationMethod } from '@veramo/utils' import { VerificationMethod } from 'did-resolver' -import type { JwkCreateIdentifierOptions, JwkDidImportOrGenerateKeyArgs, JwkDidSupportedKeyTypes } from './types/jwk-provider-types.js' -import { generateJwkFromVerificationMethod } from './jwkDidUtils.js' +import type { JwkCreateIdentifierOptions, JwkDidImportOrGenerateKeyArgs } from './types/jwk-provider-types.js' import Debug from 'debug' const debug = Debug('veramo:did-jwk:identifier-provider') @@ -44,7 +43,7 @@ export class JwkDIDProvider extends AbstractIdentifierProvider { { publicKeyHex: key.publicKeyHex, } as VerificationMethod, - options?.keyUse + options?.keyUse, ) const jwkBase64url = encodeJoseBlob(jwk as {}) @@ -70,55 +69,42 @@ export class JwkDIDProvider extends AbstractIdentifierProvider { throw new Error('not_supported: JwkDIDProvider updateIdentifier not possible') } - async deleteIdentifier( - identifier: IIdentifier, - context: IContext - ): Promise { + async deleteIdentifier(identifier: IIdentifier, context: IContext): Promise { for (const { kid } of identifier.keys) { await context.agent.keyManagerDelete({ kid }) } return true } - async addKey({ - identifier, - key, - options, - }: { identifier: IIdentifier; key: IKey; options?: any }, - context: IContext + async addKey( + { identifier, key, options }: { identifier: IIdentifier; key: IKey; options?: any }, + context: IContext, ): Promise { throw Error('not_supported: JwkDIDProvider addKey not possible') } - async addService({ - identifier, - service, - options, - }: { identifier: IIdentifier; service: IService; options?: any }, - context: IContext + async addService( + { identifier, service, options }: { identifier: IIdentifier; service: IService; options?: any }, + context: IContext, ): Promise { throw Error('not_supported: JwkDIDProvider addService not possible') } async removeKey( args: { identifier: IIdentifier; kid: string; options?: any }, - context: IContext + context: IContext, ): Promise { throw Error('not_supported: JwkDIDProvider removeKey not possible') - } async removeService( args: { identifier: IIdentifier; id: string; options?: any }, - context: IContext + context: IContext, ): Promise { throw Error('not_supported: JwkDIDProvider removeService not possible') } - private async importOrGenerateKey( - args: JwkDidImportOrGenerateKeyArgs, - context: IContext - ): Promise { + private async importOrGenerateKey(args: JwkDidImportOrGenerateKeyArgs, context: IContext): Promise { if (args.options.privateKeyHex) { return context.agent.keyManagerImport({ kms: args.kms || this.defaultKms, diff --git a/packages/did-provider-jwk/src/resolver.ts b/packages/did-provider-jwk/src/resolver.ts index 336394995..378d72baa 100644 --- a/packages/did-provider-jwk/src/resolver.ts +++ b/packages/did-provider-jwk/src/resolver.ts @@ -7,8 +7,7 @@ import { Resolvable, JsonWebKey, } from 'did-resolver' -import { encodeBase64url, decodeBase64url } from '@veramo/utils' -import { isJWK } from './jwkDidUtils.js' +import { encodeBase64url, decodeBase64url, isJWK } from '@veramo/utils' function generateDidResolution(jwk: JsonWebKey, parsed: ParsedDID): Promise { return new Promise((resolve, reject) => { diff --git a/packages/did-provider-jwk/src/types/jwk-provider-types.ts b/packages/did-provider-jwk/src/types/jwk-provider-types.ts index be8899115..5846adba8 100644 --- a/packages/did-provider-jwk/src/types/jwk-provider-types.ts +++ b/packages/did-provider-jwk/src/types/jwk-provider-types.ts @@ -1,3 +1,5 @@ +import { JwkDidSupportedKeyTypes, KeyUse } from '@veramo/utils' + export type JwkCreateIdentifierOptions = { keyType?: JwkDidSupportedKeyTypes privateKeyHex?: string @@ -13,14 +15,3 @@ type ImportOrGenerateKeyOpts = { keyType: JwkDidSupportedKeyTypes privateKeyHex?: string } - -export enum SupportedKeyTypes { - Secp256r1 = 'Secp256r1', - Secp256k1 = 'Secp256k1', - Ed25519 = 'Ed25519', - X25519 = 'X25519', -} - -export type JwkDidSupportedKeyTypes = keyof typeof SupportedKeyTypes - -export type KeyUse = 'sig' | 'enc' diff --git a/packages/did-provider-key/package.json b/packages/did-provider-key/package.json index c944cbe7d..d439476f1 100644 --- a/packages/did-provider-key/package.json +++ b/packages/did-provider-key/package.json @@ -10,7 +10,6 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/signing-key": "^5.7.0", "@transmute/did-key-ed25519": "^0.3.0-unstable.10", "@transmute/did-key-secp256k1": "^0.3.0-unstable.10", "@transmute/did-key-x25519": "^0.3.0-unstable.10", @@ -19,8 +18,7 @@ "@veramo/utils": "workspace:^", "debug": "^4.3.3", "did-resolver": "^4.1.0", - "multicodec": "^3.2.1", - "multiformats": "^12.0.1" + "ethers": "^6.9.0" }, "devDependencies": { "@types/debug": "4.1.8", diff --git a/packages/did-provider-key/src/key-did-provider.ts b/packages/did-provider-key/src/key-did-provider.ts index 2c42df506..a031dae35 100644 --- a/packages/did-provider-key/src/key-did-provider.ts +++ b/packages/did-provider-key/src/key-did-provider.ts @@ -1,9 +1,7 @@ import { IAgentContext, IIdentifier, IKey, IKeyManager, IService, RequireOnly } from '@veramo/core-types' import { AbstractIdentifierProvider } from '@veramo/did-manager' -import { hexToBytes } from '@veramo/utils' -import { computePublicKey } from '@ethersproject/signing-key' -import { base58btc } from 'multiformats/bases/base58' -import Multicodec from 'multicodec' +import { hexToBytes, bytesToMultibase } from '@veramo/utils' +import { SigningKey } from 'ethers' import Debug from 'debug' @@ -11,11 +9,11 @@ const debug = Debug('veramo:did-key:identifier-provider') type IContext = IAgentContext type CreateKeyDidOptions = { - keyType?: keyof typeof keyOptions + keyType?: keyof typeof keyCodecs privateKeyHex?: string } -const keyOptions = { +const keyCodecs = { Ed25519: 'ed25519-pub', X25519: 'x25519-pub', Secp256k1: 'secp256k1-pub', @@ -38,7 +36,7 @@ export class KeyDIDProvider extends AbstractIdentifierProvider { { kms, options }: { kms?: string; options?: CreateKeyDidOptions }, context: IContext, ): Promise> { - const keyType = (options?.keyType && keyOptions[options?.keyType] && options.keyType) || 'Ed25519' + const keyType = (options?.keyType && keyCodecs[options?.keyType] && options.keyType) || 'Ed25519' const key = await this.importOrGenerateKey( { kms: kms || this.defaultKms, @@ -50,9 +48,8 @@ export class KeyDIDProvider extends AbstractIdentifierProvider { context, ) - const publicKeyHex = key.type === 'Secp256k1' ? computePublicKey('0x' + key.publicKeyHex, true) : key.publicKeyHex - const multicodecEncoded = Multicodec.addPrefix(keyOptions[keyType], hexToBytes(publicKeyHex)) - const methodSpecificId: string = base58btc.encode(multicodecEncoded) + const publicKeyHex = key.type === 'Secp256k1' ? SigningKey.computePublicKey('0x' + key.publicKeyHex, true) : key.publicKeyHex + const methodSpecificId: string = bytesToMultibase(hexToBytes(publicKeyHex), 'base58btc', keyCodecs[keyType]) const identifier: Omit = { did: 'did:key:' + methodSpecificId, diff --git a/packages/did-provider-peer/package.json b/packages/did-provider-peer/package.json index 997d23d21..c651f21f2 100644 --- a/packages/did-provider-peer/package.json +++ b/packages/did-provider-peer/package.json @@ -15,9 +15,7 @@ "@veramo/did-manager": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.3", - "did-resolver": "^4.1.0", - "multicodec": "^3.2.1", - "multiformats": "^12.0.1" + "did-resolver": "^4.1.0" }, "devDependencies": { "@types/debug": "4.1.8", diff --git a/packages/did-provider-peer/src/peer-did-provider.ts b/packages/did-provider-peer/src/peer-did-provider.ts index 87d63bc7d..c59ad16fc 100644 --- a/packages/did-provider-peer/src/peer-did-provider.ts +++ b/packages/did-provider-peer/src/peer-did-provider.ts @@ -1,8 +1,6 @@ import { IAgentContext, IIdentifier, IKey, IKeyManager, IService } from '@veramo/core-types' import { AbstractIdentifierProvider } from '@veramo/did-manager' -import { base58btc } from 'multiformats/bases/base58' -import Multicodec from 'multicodec' -import { bytesToBase64url, hexToBytes, stringToUtf8Bytes } from '@veramo/utils' +import { bytesToBase64url, bytesToMultibase, hexToBytes, stringToUtf8Bytes } from '@veramo/utils' import Debug from 'debug' @@ -45,9 +43,7 @@ export class PeerDIDProvider extends AbstractIdentifierProvider { ): Promise> { if (options.num_algo == 0) { const key = await context.agent.keyManagerCreate({ kms: kms || this.defaultKms, type: 'Ed25519' }) - const methodSpecificId = base58btc.encode( - Multicodec.addPrefix('ed25519-pub', hexToBytes(key.publicKeyHex)), - ) + const methodSpecificId = bytesToMultibase(hexToBytes(key.publicKeyHex), 'base58btc', 'ed25519-pub') const identifier: Omit = { did: 'did:peer:0' + methodSpecificId, @@ -67,12 +63,12 @@ export class PeerDIDProvider extends AbstractIdentifierProvider { type: 'X25519', }) - const authKeyText = base58btc.encode( - Multicodec.addPrefix('ed25519-pub', hexToBytes(authKey.publicKeyHex)), - ) + const authKeyText = bytesToMultibase(hexToBytes(authKey.publicKeyHex), 'base58btc', 'ed25519-pub') - const agreementKeyText = base58btc.encode( - Multicodec.addPrefix('x25519-pub', hexToBytes(agreementKey.publicKeyHex)), + const agreementKeyText = bytesToMultibase( + hexToBytes(agreementKey.publicKeyHex), + 'base58btc', + 'x25519-pub', ) const ServiceEncoded = encodeService(options.service) diff --git a/packages/did-provider-peer/src/resolver.ts b/packages/did-provider-peer/src/resolver.ts index ec9c66860..099029b38 100644 --- a/packages/did-provider-peer/src/resolver.ts +++ b/packages/did-provider-peer/src/resolver.ts @@ -2,6 +2,11 @@ import { DIDDocument, DIDResolutionResult, DIDResolver, ParsedDID } from 'did-re import { resolve } from '@aviarytech/did-peer' import { IDIDDocumentServiceDescriptor } from '@aviarytech/did-peer/interfaces.js' +/** + * Creates a DID Resolver that can resolve Peer DIDs (for the 0 and 2 num_algo values) + * + * @public + */ export function getResolver(): Record { async function resolveInner(did: string, parsed: ParsedDID): Promise { const didDocumentMetadata = {} diff --git a/packages/did-provider-pkh/README.md b/packages/did-provider-pkh/README.md index 34de2dbc9..cea5f6f45 100644 --- a/packages/did-provider-pkh/README.md +++ b/packages/did-provider-pkh/README.md @@ -1,4 +1,4 @@ -# Veramo did:web provider +# Veramo did:pkh provider This package contains an implementation of `AbstractIdentifierProvider` for the `did:pkh` method. This enables creation and control of `did:pkh` entities. diff --git a/packages/did-provider-pkh/package.json b/packages/did-provider-pkh/package.json index 27e58ca2f..f92cdab49 100644 --- a/packages/did-provider-pkh/package.json +++ b/packages/did-provider-pkh/package.json @@ -10,15 +10,12 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", "@veramo/core-types": "workspace:^", "@veramo/did-manager": "workspace:^", "caip": "^1.1.0", "debug": "^4.3.3", - "did-resolver": "^4.1.0" + "did-resolver": "^4.1.0", + "ethers": "^6.9.0" }, "devDependencies": { "@types/debug": "4.1.8", diff --git a/packages/did-provider-pkh/src/pkh-did-provider.ts b/packages/did-provider-pkh/src/pkh-did-provider.ts index c89e45a70..6fdf74ca3 100644 --- a/packages/did-provider-pkh/src/pkh-did-provider.ts +++ b/packages/did-provider-pkh/src/pkh-did-provider.ts @@ -1,4 +1,4 @@ -import { computeAddress } from '@ethersproject/transactions'; +import { computeAddress } from 'ethers'; import { IAgentContext, IIdentifier, diff --git a/packages/did-provider-pkh/src/resolver.ts b/packages/did-provider-pkh/src/resolver.ts index 4647ee6eb..90d31fe5d 100644 --- a/packages/did-provider-pkh/src/resolver.ts +++ b/packages/did-provider-pkh/src/resolver.ts @@ -49,6 +49,11 @@ function toDidDoc(did: string, blockchainAccountId: string): any { return doc; } +/** + * Creates a DID resolver that resolves PKH DIDs + * + * @public + */ export function getResolver(): ResolverRegistry { return { pkh: async ( diff --git a/packages/did-resolver/package.json b/packages/did-resolver/package.json index 62c6aee73..7f6ac4ccb 100644 --- a/packages/did-resolver/package.json +++ b/packages/did-resolver/package.json @@ -17,8 +17,8 @@ "did-resolver": "^4.1.0" }, "devDependencies": { + "ethr-did-resolver": "10.1.0", "@types/debug": "4.1.8", - "ethr-did-resolver": "8.1.2", "typescript": "5.2.2", "web-did-resolver": "2.0.27" }, diff --git a/packages/did-resolver/src/__tests__/integration.test.ts b/packages/did-resolver/src/__tests__/integration.test.ts index adc51f8fe..89b96f6e8 100644 --- a/packages/did-resolver/src/__tests__/integration.test.ts +++ b/packages/did-resolver/src/__tests__/integration.test.ts @@ -71,10 +71,7 @@ describe('@veramo/did-resolver', () => { resolverPlugin.resolveDid({ didUrl: 'did:ethr:mainnet:0xaafe788d8ca214a080b0f6ac7f48480b2aefa9bb' }), ).resolves.toEqual({ didDocument: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/secp256k1recovery-2020/v2', - ], + '@context': expect.anything(), id: 'did:ethr:mainnet:0xaafe788d8ca214a080b0f6ac7f48480b2aefa9bb', verificationMethod: [ { diff --git a/packages/key-manager/package.json b/packages/key-manager/package.json index daa72cf51..9d52b0949 100644 --- a/packages/key-manager/package.json +++ b/packages/key-manager/package.json @@ -10,19 +10,16 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", "@noble/curves": "^1.1.0", "@veramo/core-types": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.4", - "did-jwt": "^7.2.5", + "did-jwt": "^7.4.1", + "ethers": "^6.9.0", "uint8arrays": "^4.0.6", "uuid": "^9.0.0" }, "devDependencies": { - "@ethersproject/abstract-signer": "5.7.0", "@types/debug": "4.1.8", "@types/uuid": "9.0.2", "typescript": "5.2.2" diff --git a/packages/key-manager/src/abstract-key-management-system.ts b/packages/key-manager/src/abstract-key-management-system.ts index fd44424af..a66051755 100644 --- a/packages/key-manager/src/abstract-key-management-system.ts +++ b/packages/key-manager/src/abstract-key-management-system.ts @@ -1,6 +1,5 @@ import { IKey, ManagedKeyInfo, MinimalImportableKey, TKeyType } from '@veramo/core-types' -import { arrayify } from '@ethersproject/bytes' -import { serialize } from '@ethersproject/transactions' +import { getBytes, Transaction } from 'ethers' import * as u8a from 'uint8arrays' /** @@ -20,7 +19,8 @@ export abstract class AbstractKeyManagementSystem { /**@deprecated please use `sign({key, alg: 'eth_signTransaction', data: arrayify(serialize(transaction))})` instead */ async signEthTX({ key, transaction }: { key: Pick; transaction: object }): Promise { const { v, r, s, from, ...tx } = transaction - const data = arrayify(serialize(tx)) + const serializedTx = Transaction.from(tx).unsignedSerialized + const data = getBytes(serializedTx) const algorithm = 'eth_signTransaction' const signedTxHexString = this.sign({ keyRef: key, data, algorithm }) return signedTxHexString @@ -31,7 +31,11 @@ export abstract class AbstractKeyManagementSystem { let dataBytes: Uint8Array if (typeof data === 'string') { try { - dataBytes = arrayify(data, { allowMissingPrefix: true }) + // TODO: Make sure this works as we removed the options from arrayify + if (data && data.substring(0, 2) !== "0x") { + data = "0x" + data; + } + dataBytes = getBytes(data) } catch (e) { dataBytes = u8a.fromString(data, 'utf-8') } diff --git a/packages/key-manager/src/key-manager.ts b/packages/key-manager/src/key-manager.ts index 9056e9ead..21088ff3b 100644 --- a/packages/key-manager/src/key-manager.ts +++ b/packages/key-manager/src/key-manager.ts @@ -20,11 +20,9 @@ import { import schema from '@veramo/core-types/build/plugin.schema.json' assert { type: 'json' } import * as u8a from 'uint8arrays' import { createAnonDecrypter, createAnonEncrypter, createJWE, decryptJWE, type ECDH, type JWE } from 'did-jwt' -import { arrayify, hexlify } from '@ethersproject/bytes' -import { computeAddress, serialize } from '@ethersproject/transactions' -import { toUtf8Bytes, toUtf8String } from '@ethersproject/strings' import { convertEd25519PublicKeyToX25519 } from '@veramo/utils' import Debug from 'debug' +import {getBytes, hexlify, toUtf8Bytes, toUtf8String, computeAddress, Transaction} from "ethers"; const debug = Debug('veramo:key-manager') @@ -130,10 +128,10 @@ export class KeyManager implements IAgentPlugin { let recipientPublicKey: Uint8Array if (to.type === 'Ed25519') { - recipientPublicKey = arrayify('0x' + to.publicKeyHex) + recipientPublicKey = getBytes('0x' + to.publicKeyHex) recipientPublicKey = convertEd25519PublicKeyToX25519(recipientPublicKey) } else if (to.type === 'X25519') { - recipientPublicKey = arrayify('0x' + to.publicKeyHex) + recipientPublicKey = getBytes('0x' + to.publicKeyHex) } else { throw new Error('not_supported: The recipient public key type is not supported') } @@ -203,7 +201,7 @@ export class KeyManager implements IAgentPlugin { } } } - const data = serialize(tx) + const data = Transaction.from(tx).unsignedSerialized const algorithm = 'eth_signTransaction' return this.keyManagerSign({ keyRef: kid, data, algorithm, encoding: 'base16' }) } @@ -231,7 +229,7 @@ export class KeyManager implements IAgentPlugin { } const publicKey = { type: 'X25519', publicKeyHex: hexlify(theirPublicKey).substring(2) } const shared = await this.keyManagerSharedSecret({ secretKeyRef, publicKey }) - return arrayify('0x' + shared) + return getBytes('0x' + shared) } } } diff --git a/packages/key-manager/src/types.ts b/packages/key-manager/src/types.ts index 691a0e7f5..fdae0c580 100644 --- a/packages/key-manager/src/types.ts +++ b/packages/key-manager/src/types.ts @@ -1,4 +1,4 @@ -import { TypedDataDomain, TypedDataField } from '@ethersproject/abstract-signer' +import { TypedDataDomain, TypedDataField } from 'ethers' /** * The payload that is sent to be signed according to EIP712 diff --git a/packages/kms-local/package.json b/packages/kms-local/package.json index 45c620f3e..33a6833ca 100644 --- a/packages/kms-local/package.json +++ b/packages/kms-local/package.json @@ -10,13 +10,6 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/abstract-provider": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/random": "^5.7.0", - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", - "@ethersproject/wallet": "^5.7.0", "@noble/curves": "^1.1.0", "@stablelib/nacl": "^1.0.4", "@stablelib/random": "^1.0.2", @@ -24,7 +17,8 @@ "@veramo/key-manager": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.3", - "did-jwt": "^7.2.5" + "did-jwt": "^7.4.1", + "ethers": "^6.9.0" }, "devDependencies": { "@types/debug": "4.1.8", diff --git a/packages/kms-local/src/key-management-system.ts b/packages/kms-local/src/key-management-system.ts index 74564d0fc..5552fad53 100644 --- a/packages/kms-local/src/key-management-system.ts +++ b/packages/kms-local/src/key-management-system.ts @@ -16,13 +16,17 @@ import { import { EdDSASigner, ES256KSigner, ES256Signer } from 'did-jwt' import { ed25519, x25519 } from '@noble/curves/ed25519' import { p256 } from '@noble/curves/p256' -import { TransactionRequest } from '@ethersproject/abstract-provider' -import { toUtf8String } from '@ethersproject/strings' -import { parse } from '@ethersproject/transactions' -import { Wallet } from '@ethersproject/wallet' -import { SigningKey } from '@ethersproject/signing-key' -import { randomBytes } from '@ethersproject/random' -import { arrayify, hexlify } from '@ethersproject/bytes' +import { + TransactionRequest, + toUtf8String, + Wallet, + SigningKey, + randomBytes, + getBytes, + hexlify, + Transaction, + decodeRlp +} from 'ethers' import Debug from 'debug' import { bytesToHex, @@ -175,13 +179,13 @@ export class KeyManagementSystem extends AbstractKeyManagementSystem { ) { throw new Error(`invalid_argument: args.theirKey must contain 'type' and 'publicKeyHex'`) } - let myKeyBytes = arrayify('0x' + myKey.privateKeyHex) + let myKeyBytes = getBytes('0x' + myKey.privateKeyHex) if (myKey.type === 'Ed25519') { myKeyBytes = convertEd25519PrivateKeyToX25519(myKeyBytes) } else if (myKey.type !== 'X25519') { throw new Error(`not_supported: can't compute shared secret for type=${myKey.type}`) } - let theirKeyBytes = arrayify('0x' + theirKey.publicKeyHex) + let theirKeyBytes = getBytes('0x' + theirKey.publicKeyHex) if (theirKey.type === 'Ed25519') { theirKeyBytes = convertEd25519PublicKeyToX25519(theirKeyBytes) } else if (theirKey.type !== 'X25519') { @@ -218,7 +222,7 @@ export class KeyManagementSystem extends AbstractKeyManagementSystem { delete msgTypes.EIP712Domain const wallet = new Wallet(privateKeyHex) - const signature = await wallet._signTypedData(msgDomain, msgTypes, msg) + const signature = await wallet.signTypedData(msgDomain, msgTypes, msg) // HEX encoded string return signature } @@ -237,18 +241,18 @@ export class KeyManagementSystem extends AbstractKeyManagementSystem { * @returns a `0x` prefixed hex string representing the signed raw transaction */ private async eth_signTransaction(privateKeyHex: string, rlpTransaction: Uint8Array) { - const { v, r, s, from, ...tx } = parse(rlpTransaction) + const transaction = Transaction.from(bytesToHex(rlpTransaction, true)) const wallet = new Wallet(privateKeyHex) - if (from) { + if (transaction.from) { debug('WARNING: executing a transaction signing request with a `from` field.') - if (wallet.address.toLowerCase() !== from.toLowerCase()) { + if (wallet.address.toLowerCase() !== transaction.from.toLowerCase()) { const msg = 'invalid_arguments: eth_signTransaction `from` field does not match the chosen key. `from` field should be omitted.' debug(msg) throw new Error(msg) } } - const signedRawTransaction = await wallet.signTransaction(tx) + const signedRawTransaction = await wallet.signTransaction(transaction) // HEX encoded string, 0x prefixed return signedRawTransaction } @@ -257,14 +261,14 @@ export class KeyManagementSystem extends AbstractKeyManagementSystem { * @returns a `0x` prefixed hex string representing the signed digest in compact format */ private eth_rawSign(managedKey: string, data: Uint8Array) { - return new SigningKey('0x' + managedKey).signDigest(data).compact + return new SigningKey('0x' + managedKey).sign(data).compactSerialized } /** * @returns a base64url encoded signature for the `EdDSA` alg */ private async signEdDSA(key: string, data: Uint8Array): Promise { - const signer = EdDSASigner(arrayify(key, { allowMissingPrefix: true })) + const signer = EdDSASigner(hexToBytes(key)) const signature = await signer(data) // base64url encoded string return signature as string @@ -278,7 +282,7 @@ export class KeyManagementSystem extends AbstractKeyManagementSystem { alg: string | undefined, data: Uint8Array, ): Promise { - const signer = ES256KSigner(arrayify(privateKeyHex, { allowMissingPrefix: true }), alg === 'ES256K-R') + const signer = ES256KSigner(hexToBytes(privateKeyHex), alg === 'ES256K-R') const signature = await signer(data) // base64url encoded string return signature as string @@ -288,7 +292,7 @@ export class KeyManagementSystem extends AbstractKeyManagementSystem { * @returns a base64url encoded signature for the `ES256` alg */ private async signES256(privateKeyHex: string, data: Uint8Array): Promise { - const signer = ES256Signer(arrayify(privateKeyHex, { allowMissingPrefix: true })) + const signer = ES256Signer(hexToBytes(privateKeyHex)) const signature = await signer(data) // base64url encoded string return signature as string diff --git a/packages/kms-local/src/secret-box.ts b/packages/kms-local/src/secret-box.ts index 3b69d123c..ce28f7393 100644 --- a/packages/kms-local/src/secret-box.ts +++ b/packages/kms-local/src/secret-box.ts @@ -1,8 +1,7 @@ import { AbstractSecretBox } from '@veramo/key-manager' import { secretBox, openSecretBox, generateKeyPair } from '@stablelib/nacl' import { randomBytes } from '@stablelib/random' -import { arrayify, hexConcat, hexlify } from '@ethersproject/bytes' -import { toUtf8Bytes, toUtf8String } from '@ethersproject/strings' +import { getBytes, concat, hexlify, toUtf8Bytes, toUtf8String } from 'ethers' const NONCE_BYTES = 24 @@ -31,16 +30,16 @@ export class SecretBox extends AbstractSecretBox { async encrypt(message: string): Promise { const nonce = randomBytes(NONCE_BYTES) - const key = arrayify('0x' + this.secretKey) + const key = getBytes('0x' + this.secretKey) const cipherText = secretBox(key, nonce, toUtf8Bytes(message)) - return hexConcat([nonce, cipherText]).substring(2) + return concat([nonce, cipherText]).substring(2) } async decrypt(encryptedMessageHex: string): Promise { - const cipherTextWithNonce = arrayify('0x' + encryptedMessageHex) + const cipherTextWithNonce = getBytes('0x' + encryptedMessageHex) const nonce = cipherTextWithNonce.slice(0, NONCE_BYTES) const cipherText = cipherTextWithNonce.slice(NONCE_BYTES) - const key = arrayify('0x' + this.secretKey) + const key = getBytes('0x' + this.secretKey) const decrypted = openSecretBox(key, nonce, cipherText) || new Uint8Array(0) return toUtf8String(decrypted) } diff --git a/packages/kms-web3/package.json b/packages/kms-web3/package.json index e675404d0..1c6c20698 100644 --- a/packages/kms-web3/package.json +++ b/packages/kms-web3/package.json @@ -10,12 +10,10 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/providers": "^5.7.0", - "@ethersproject/strings": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", "@veramo/core-types": "workspace:^", "@veramo/key-manager": "workspace:^", - "debug": "^4.3.3" + "debug": "^4.3.3", + "ethers": "^6.9.0" }, "devDependencies": { "@types/debug": "4.1.8", diff --git a/packages/kms-web3/src/web3-key-management-system.ts b/packages/kms-web3/src/web3-key-management-system.ts index 9a8e650c2..19a89060b 100644 --- a/packages/kms-web3/src/web3-key-management-system.ts +++ b/packages/kms-web3/src/web3-key-management-system.ts @@ -1,7 +1,6 @@ -import { JsonRpcSigner, Web3Provider } from '@ethersproject/providers' +import { JsonRpcSigner, BrowserProvider, toUtf8String } from 'ethers' import { TKeyType, IKey, ManagedKeyInfo, MinimalImportableKey } from '@veramo/core-types' import { AbstractKeyManagementSystem, Eip712Payload } from '@veramo/key-manager' -import { toUtf8String } from '@ethersproject/strings' /** * This is a {@link @veramo/key-manager#AbstractKeyManagementSystem | KMS} implementation that uses the addresses of a @@ -14,7 +13,7 @@ export class Web3KeyManagementSystem extends AbstractKeyManagementSystem { * @param providers - the key can be any unique name. * Example `{ metamask: metamaskProvider, walletConnect: walletConnectProvider }` */ - constructor(private providers: Record) { + constructor(private providers: Record) { super() } @@ -63,12 +62,12 @@ export class Web3KeyManagementSystem extends AbstractKeyManagementSystem { // keyRef should be in this format '{providerName-account} // example: 'metamask-0xf3beac30c498d9e26865f34fcaa57dbb935b0d74' - private getAccountAndSignerByKeyRef(keyRef: Pick): { account: string; signer: JsonRpcSigner } { + private async getAccountAndSignerByKeyRef(keyRef: Pick): Promise<{ account: string; signer: JsonRpcSigner }> { const [providerName, account] = keyRef.kid.split('-') if (!this.providers[providerName]) { throw Error(`not_available: provider ${providerName}`) } - const signer = this.providers[providerName].getSigner(account) + const signer = await this.providers[providerName].getSigner(account) return { account, signer } } @@ -119,8 +118,8 @@ export class Web3KeyManagementSystem extends AbstractKeyManagementSystem { } delete msgTypes.EIP712Domain - const { signer } = this.getAccountAndSignerByKeyRef(keyRef) - const signature = await signer._signTypedData(msgDomain, msgTypes, msg) + const { signer } = await this.getAccountAndSignerByKeyRef(keyRef) + const signature = await signer.signTypedData(msgDomain, msgTypes, msg) return signature } @@ -129,7 +128,7 @@ export class Web3KeyManagementSystem extends AbstractKeyManagementSystem { * @returns a `0x` prefixed hex string representing the signed message */ private async eth_signMessage(keyRef: Pick, rawMessageBytes: Uint8Array) { - const { signer } = this.getAccountAndSignerByKeyRef(keyRef) + const { signer } = await this.getAccountAndSignerByKeyRef(keyRef) const signature = await signer.signMessage(rawMessageBytes) // HEX encoded string, 0x prefixed return signature diff --git a/packages/kv-store/package.json b/packages/kv-store/package.json index 8ad281e26..9a4f25465 100644 --- a/packages/kv-store/package.json +++ b/packages/kv-store/package.json @@ -28,8 +28,8 @@ "@types/debug": "4.1.8", "@types/events": "^3.0.0", "@types/json-buffer": "3.0.0", - "@types/node": "20.6.2", - "eslint": "8.49.0", + "@types/node": "20.8.2", + "eslint": "8.50.0", "eslint-plugin-promise": "6.1.1", "keyv": "4.5.3", "timekeeper": "2.3.1", diff --git a/packages/kv-store/src/index.ts b/packages/kv-store/src/index.ts index 415492c9d..4ff1db7dc 100644 --- a/packages/kv-store/src/index.ts +++ b/packages/kv-store/src/index.ts @@ -8,3 +8,4 @@ export { KeyValueStore } from './key-value-store.js' export * from './store-adapters/tiered/index.js' export * from './store-adapters/typeorm/index.js' export * from './key-value-types.js' +export * from './store-adapters/index.js' diff --git a/packages/kv-store/src/key-value-store.ts b/packages/kv-store/src/key-value-store.ts index 4230a9cc0..36bfca8f9 100644 --- a/packages/kv-store/src/key-value-store.ts +++ b/packages/kv-store/src/key-value-store.ts @@ -46,10 +46,16 @@ export class KeyValueStore implements IKeyValu return this.toDeserializedValueData(result) } - async getMany(keys: string[]): Promise> { + getIterator(): AsyncGenerator<[key: string, value: ValueType], void> { + if (!this.keyv.iterator) throw new Error('keyv: iterator not available') + return this.keyv.iterator() + } + + async getMany(keys?: string[]): Promise> { if (!keys || keys.length === 0) { return [] } + let result = await this.keyv.getMany(keys, { raw: false }) // Making sure we return the same array length as the amount of key(s) passed in diff --git a/packages/kv-store/src/key-value-types.ts b/packages/kv-store/src/key-value-types.ts index 8b3f5b6c2..9db1420da 100644 --- a/packages/kv-store/src/key-value-types.ts +++ b/packages/kv-store/src/key-value-types.ts @@ -76,6 +76,17 @@ export interface IKeyValueStore { */ getAsValueData(key: string): Promise> + /** + * @remarks in order to consume the iterator, you need to use the for await syntax as follows: + * + * for await (const result of store.getIterator()) { + * console.log(result) + * } + * + * @returns An async iterator for all the keys in the store + */ + getIterator(): AsyncGenerator + /** * Get multiple values from the store. Will always return an array with values, but the values can be undefined in case the actual store does not contain the value for the respective key * @@ -121,7 +132,7 @@ export interface IKeyValueStore { /** * Determine whether the store has the value belonging to the provided key * - * @param key The key to search for + * @param key - The key to search for */ has(key: string): Promise diff --git a/packages/kv-store/src/keyv/keyv.ts b/packages/kv-store/src/keyv/keyv.ts index 0e1fa3a0c..2a0af5988 100644 --- a/packages/kv-store/src/keyv/keyv.ts +++ b/packages/kv-store/src/keyv/keyv.ts @@ -312,7 +312,7 @@ export class Keyv extends EventEmitter implements KeyvStore } } -const iterableAdapters = ['sqlite', 'postgres', 'mysql', 'mongo', 'redis', 'tiered'] +const iterableAdapters = ['typeorm', 'sqlite', 'postgres', 'mysql', 'mongo', 'redis', 'tiered'] function toValue(input: KeyvDeserializedData | string | Value) { return input !== null && typeof input === 'object' && 'value' in input ? input.value : input diff --git a/packages/kv-store/src/store-adapters/index.ts b/packages/kv-store/src/store-adapters/index.ts index 4b88a3c38..1784d2a9e 100644 --- a/packages/kv-store/src/store-adapters/index.ts +++ b/packages/kv-store/src/store-adapters/index.ts @@ -1,2 +1,3 @@ export * from './tiered/index.js' export * from './typeorm/index.js' +export * from './typeorm/migrations/index.js' diff --git a/packages/kv-store/src/store-adapters/typeorm/index.ts b/packages/kv-store/src/store-adapters/typeorm/index.ts index 196296839..078ddfa3e 100644 --- a/packages/kv-store/src/store-adapters/typeorm/index.ts +++ b/packages/kv-store/src/store-adapters/typeorm/index.ts @@ -9,6 +9,8 @@ import JSONB from 'json-buffer' export { KeyValueTypeORMOptions } from './types.js' +export const Entities = [KeyValueStoreEntity] + /** * TypeORM based key value store adapter * @beta @@ -48,6 +50,35 @@ export class KeyValueTypeORMStoreAdapter return options?.raw !== true || !result ? result?.data : { value: result?.data, expires: result?.expires } } + async *iterator(namespace?: string) { + const limit = 10 // NOTE: return 10 entries at a time + async function* iterate( + offset: number, + options: Options_, + db: OrPromise, + ): AsyncGenerator { + const connection = await _getConnectedDb(db) + const entries = await connection.getRepository(KeyValueStoreEntity).find({ + where: { + key: Like(`${namespace ? namespace + ':' : ''}%`), + }, + take: limit, + skip: offset, + }) + + for (const entry of entries) { + yield [entry.key, entry.data] + } + + if (entries.length === limit) { + offset += limit + yield* iterate(offset, options, db) + } + } + + yield* iterate(0, this.opts, this.dbConnection) + } + async getMany(keys: string[], options?: { raw?: boolean }): Promise>> { const connection = await _getConnectedDb(this.dbConnection) const results = await connection.getRepository(KeyValueStoreEntity).findBy({ diff --git a/packages/mediation-manager/CHANGELOG.md b/packages/mediation-manager/CHANGELOG.md new file mode 100644 index 000000000..e69de29bb diff --git a/packages/mediation-manager/LICENSE b/packages/mediation-manager/LICENSE new file mode 100644 index 000000000..5d33ff719 --- /dev/null +++ b/packages/mediation-manager/LICENSE @@ -0,0 +1,201 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright 2023 Radley E. Sidwell-Lewis + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/mediation-manager/README.md b/packages/mediation-manager/README.md new file mode 100644 index 000000000..847fe0121 --- /dev/null +++ b/packages/mediation-manager/README.md @@ -0,0 +1,191 @@ +# Veramo: Mediation Manager Plugin + +A plugin for the Veramo agent for integration with the DIDComm plugin when implementing mediation to the [Cooordinate Mediation V3 Specification](https://didcomm.org/coordinate-mediation/3.0/). + +## Overview + +The Mediation Manager plugin enables the Coordinate Mediation V3 Specification in the `did-comm` plugin. There are three distinct stores which represent the three phases of mediation setup as well as a global policy of how requests for mediation should be dealt with. + +0. **Mediation Grant Policy** + +By default, the `isMediateGrantAll` policy is set to `true` meaning that any requests for mediation will be `GRANTED` unless their `did` is listed in the `preRequestPolicyStore` as `ALLOW`. Conversely, if the `isMediateGrantAll` policy is set to `false`, all requests will be allowed, unless they are listed in the `preRequestPolicyStore` as `ALLOW`. + +1. **Pre-Mediation Policy Store** + +This store includes RequesterDid's as a key and stores an associated policy of `ALLOW` or `DENY`. + +2. **Mediation Response Store** + +Any request for mediation results in either a `GRANTED` or `DENIED` outcome. This is recorded in the `MediationResponseStore` with the `key=requester-did` and the value of `GRANTED` or `DENIED`. + +3. **Recipient DID Store** + +Finally, once a requester has been granted mediation, they need to inform the mediator of any dids in use (including their requester did or in other words the did they used to request mediation) by using the update recipient did message type. + +**CLI Mediate** + +For the purpose of managing `ALLOW` or `DENY` pre-mediation policies, as well as listing responses to mediation requests, a cli tool for mediation is available. See: + +```bash +veramo mediate -h +``` + +## Configuration + +The Mediation Manager Plugin can be used via the `agent.yml` or programatically injected in to the DIDComm plugin. + +## example agent.yml configuration + +`agent.yml` example configuration for the `mediationManager` plugin below: + +#### Step 1. Update the `dbConnection` in your `agent.yml` + +> NOTE! this is required to include the kv-store migrations and entities so that the stores required by the mediationManager (in the next step) are available. + +```yml +# Database + +dbConnection: + $require: typeorm#DataSource + $args: + - type: sqlite + database: + $ref: /constants/databaseFile + synchronize: false + migrationsRun: true + migrations: + $require: '@veramo/data-store?t=function#migrationConcat' + $args: + - $require: '@veramo/data-store?t=object#migrations' + - $require: '@veramo/kv-store?t=object#kvStoreMigrations' + logging: false + entities: + $require: '@veramo/data-store?t=function#entitiesConcat' + $args: + - $require: '@veramo/data-store?t=object#Entities' + - $require: '@veramo/kv-store?t=object#Entities' +``` + +#### Step 2. Configure your Mediation Manager Plugin + +> NOTE! each store MUST have a unique namespace so as to prevent conflicts. Each stage of the mediation setup has its own accompanying store. + +```yml +# Mediation Manager plugin + +mediationManager: + $require: '@veramo/mediation-manager#MediationManagerPlugin' + $args: + - isDefaultMediateGrantAll: true + - policyStore: + $require: '@veramo/kv-store#KeyValueStore' + $args: + - namespace: 'mediation_policy' + store: + $require: '@veramo/kv-store#KeyValueTypeORMStoreAdapter' + $args: + - options: + dbConnection: + $ref: /dbConnection + - mediationStore: + $require: '@veramo/kv-store#KeyValueStore' + $args: + - namespace: 'mediation' + store: + $require: '@veramo/kv-store#KeyValueTypeORMStoreAdapter' + $args: + - options: + dbConnection: + $ref: /dbConnection + - recipientDidStore: + $require: '@veramo/kv-store#KeyValueStore' + $args: + - namespace: 'recipient_did' + store: + $require: '@veramo/kv-store#KeyValueTypeORMStoreAdapter' + $args: + - options: + dbConnection: + $ref: /dbConnection +``` + +#### Step 3. Include the `mediationManager` above in your agent's plugins + +```yml +# Agent + +agent: + $require: '@veramo/core#Agent' + $args: + - schemaValidation: false + plugins: + - $ref: /keyManager + - $ref: /didManager + - $ref: /didResolver + - $ref: /didDiscovery + - $ref: /messageHandler + - $ref: /mediationManager # <<<< include your mediationManager plugin here + - $require: '@veramo/did-comm#DIDComm' + - $require: '@veramo/credential-w3c#CredentialPlugin' + - $ref: /credentialIssuerLD + - $require: '@veramo/credential-eip712#CredentialIssuerEIP712' + - $require: '@veramo/selective-disclosure#SelectiveDisclosure' + - $require: '@veramo/data-store#DataStore' + $args: + - $ref: /dbConnection + - $require: '@veramo/data-store#DataStoreORM' + $args: + - $ref: /dbConnection +``` + +## Example TypeScript Configuration + +```typescript +import { + KeyValueStore, + KeyValueTypeORMStoreAdapter, + Entities as KVStoreEntities, + kvStoreMigrations, +} from '@veramo/kv-store' +import { DataSource } from 'typeorm' + +const dbConnection = new DataSource({ + name: 'test', + type: 'sqlite', + database: ':memory:', + synchronize: false, + migrations: dataStoreMigrations.concat(kvStoreMigrations), + migrationsRun: true, + logging: false, + entities: (KVStoreEntities as any).concat(DataStoreEntities), +}) + +const policyStore = new KeyValueStore({ + namespace: 'mediation_policy', + store: new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'mediation_policy' }), +}) +const mediationStore = new KeyValueStore({ + namespace: 'mediation_response', + store: new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'mediation_response' }), +}) + +const recipientDidStore = new KeyValueStore({ + namespace: 'recipient_did', + store: new KeyValueTypeORMStoreAdapter({ dbConnection, namespace: 'recipient_did' }), +}) + +const isDefaultMediateGrantAll = true; +const mediationManager = new MediationManagerPlugin( + isDefaultMediateGrantAll, + policyStore, + mediationStore, + recipientDidStore +) + +const agent = createAgent({ + plugins: [ + // other plugins go here + mediationManager + ], +}) +``` diff --git a/packages/mediation-manager/api-extractor.json b/packages/mediation-manager/api-extractor.json new file mode 100644 index 000000000..606443e68 --- /dev/null +++ b/packages/mediation-manager/api-extractor.json @@ -0,0 +1,16 @@ +{ + "$schema": "https://developer.microsoft.com/json-schemas/api-extractor/v7/api-extractor.schema.json", + "apiReport": { + "enabled": true, + "reportFolder": "./api", + "reportTempFolder": "./api" + }, + "docModel": { + "enabled": true, + "apiJsonFilePath": "./api/.api.json" + }, + "dtsRollup": { + "enabled": false + }, + "mainEntryPointFilePath": "/build/index.d.ts" +} diff --git a/packages/mediation-manager/package.json b/packages/mediation-manager/package.json new file mode 100644 index 000000000..24db67dc1 --- /dev/null +++ b/packages/mediation-manager/package.json @@ -0,0 +1,56 @@ +{ + "name": "@veramo/mediation-manager", + "description": "Mediation Manager Plugin for Veramo", + "version": "1.0.0", + "main": "build/index.js", + "exports": "./build/index.js", + "types": "build/index.d.ts", + "scripts": { + "build": "tsc", + "test": "jest --config=../../jest.config.mjs", + "test:ci": "jest --config=../../jest.config.mjs", + "extract-api": "node ../cli/bin/veramo.js dev extract-api" + }, + "dependencies": { + "@veramo/core-types": "workspace:^", + "@veramo/kv-store": "workspace:^", + "debug": "^4.3.4", + "uuid": "^9.0.0" + }, + "devDependencies": { + "eslint": "8.50.0", + "eslint-plugin-promise": "6.1.1", + "timekeeper": "2.3.1", + "typescript": "5.2.2" + }, + "files": [ + "build/**/*", + "src/**/*", + "README.md", + "LICENSE" + ], + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "https://github.com/decentralized-identity/veramo.git", + "directory": "packages/mediation-manager" + }, + "author": "Radley Sidwell-Lewis ", + "contributors": [ + "Paul Desmond Parker ", + "Mircea Nistor " + ], + "keywords": [ + "Veramo", + "mediation-manager", + "veramo-plugin" + ], + "license": "Apache-2.0", + "type": "module", + "moduleDirectories": [ + "node_modules", + "src" + ] +} diff --git a/packages/mediation-manager/src/index.ts b/packages/mediation-manager/src/index.ts new file mode 100644 index 000000000..64c54b47d --- /dev/null +++ b/packages/mediation-manager/src/index.ts @@ -0,0 +1,8 @@ +/** + * Provides a {@link @veramo/mediation-manager#MediationManager | plugin} for the + * {@link @veramo/core#Agent} that implements the {@link @veramo/mediation-manager#IMediationManager} interface. + * + * @packageDocumentation + */ +export { MediationManagerPlugin } from './mediation-manager.js' +export * from './types/IMediationManager.js' diff --git a/packages/mediation-manager/src/mediation-manager.ts b/packages/mediation-manager/src/mediation-manager.ts new file mode 100644 index 000000000..0af381510 --- /dev/null +++ b/packages/mediation-manager/src/mediation-manager.ts @@ -0,0 +1,161 @@ +import type { + PreMediationRequestPolicy, + IMediationManagerSaveMediationPolicyArgs, + IMediationManagerRemoveMediationPolicyArgs, + IMediationManagerGetMediationPolicyArgs, + IMediationManager, + IMediationGetArgs, + MediationResponse, + RequesterDid, + IMediationManagerSaveMediationArgs, + IMediationManagerRecipientDidArgs, + IMediationManagerAddRecipientDidArgs, + RecipientDid, + IMediationManagerListRecipientDidsArgs, +} from './types/IMediationManager' +import type { IAgentPlugin } from '@veramo/core-types' +import type { KeyValueStore } from '@veramo/kv-store' + +type PreRequestPolicyStore = KeyValueStore +type MediationResponseStore = KeyValueStore +type RecipientDidStore = KeyValueStore + +/** + * Mediation Manager Plugin for {@link @veramo/core#Agent} + * + * This plugin exposes methods pertaining to the {@link @veramo/core-types#IMediationManager} interface. + * + * @remarks be advised that the {@link @veramo/mediation-manager#IMediationManager} interface is for use with + * {@link @veramo/did-comm#DIDComm | DIDCOmm} and specifically the V3 Coordinate Mediation Protocol implementation. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export class MediationManagerPlugin implements IAgentPlugin { + private readonly preRequestPolicyStore: KeyValueStore + private readonly mediationResponseStore: KeyValueStore + private readonly recipientDidStore: KeyValueStore + readonly methods: IMediationManager + + constructor( + isMediateDefaultGrantAll = true, + preRequestPolicyStore: PreRequestPolicyStore, + mediationResponseStore: MediationResponseStore, + recipientDidStore: RecipientDidStore, + ) { + this.preRequestPolicyStore = preRequestPolicyStore + this.mediationResponseStore = mediationResponseStore + this.recipientDidStore = recipientDidStore + this.methods = { + isMediateDefaultGrantAll: () => Promise.resolve(isMediateDefaultGrantAll), + /* Mediation Policy Methods */ + mediationManagerSaveMediationPolicy: this.mediationManagerSaveMediationPolicy.bind(this), + mediationManagerRemoveMediationPolicy: this.mediationManagerRemoveMediationPolicy.bind(this), + mediationManagerGetMediationPolicy: this.mediationManagerGetMediationPolicy.bind(this), + mediationManagerListMediationPolicies: this.mediationManagerListMediationPolicies.bind(this), + /* Mediation Methods */ + mediationManagerSaveMediation: this.mediationManagerSaveMediation.bind(this), + mediationManagerGetMediation: this.mediationManagerGetMediation.bind(this), + mediationManagerRemoveMediation: this.mediationManagerRemoveMediation.bind(this), + mediationManagerGetAllMediations: this.mediationManagerGetAllMediations.bind(this), + /* Recipient Did Methods */ + mediationManagerAddRecipientDid: this.mediationManagerAddRecipientDid.bind(this), + mediationManagerRemoveRecipientDid: this.mediationManagerRemoveRecipientDid.bind(this), + mediationManagerGetRecipientDid: this.mediationManagerGetRecipientDid.bind(this), + mediationManagerListRecipientDids: this.mediationManagerListRecipientDids.bind(this), + mediationManagerIsMediationGranted: this.mediationManagerIsMediationGranted.bind(this), + } + } + + public async mediationManagerSaveMediationPolicy({ + requesterDid, + policy, + }: IMediationManagerSaveMediationPolicyArgs): Promise { + const res = await this.preRequestPolicyStore.set(requesterDid, policy) + if (!res || !res.value) throw new Error('mediation_manager: failed to save mediation policy') + return requesterDid + } + + public async mediationManagerRemoveMediationPolicy({ + requesterDid, + }: IMediationManagerRemoveMediationPolicyArgs): Promise { + return await this.preRequestPolicyStore.delete(requesterDid) + } + + public async mediationManagerGetMediationPolicy({ + requesterDid, + }: IMediationManagerGetMediationPolicyArgs): Promise { + return (await this.preRequestPolicyStore.get(requesterDid)) || null + } + + public async mediationManagerListMediationPolicies(): Promise> { + const policies: Record = {} + for await (const [requesterDid, policy] of this.preRequestPolicyStore.getIterator()) { + policies[requesterDid] = policy + } + return policies + } + + public async mediationManagerGetMediation({ + requesterDid, + }: IMediationGetArgs): Promise { + return (await this.mediationResponseStore.get(requesterDid)) || null + } + + public async mediationManagerSaveMediation({ + requesterDid, + status, + }: IMediationManagerSaveMediationArgs): Promise { + const res = await this.mediationResponseStore.set(requesterDid, status) + if (!res.value) throw new Error('mediation_manager: failed to save mediation') + return res.value + } + + public async mediationManagerRemoveMediation({ requesterDid }: IMediationGetArgs): Promise { + return await this.mediationResponseStore.delete(requesterDid) + } + + public async mediationManagerGetAllMediations(): Promise> { + const mediationResponses: Record = {} + for await (const [requesterDid, response] of this.mediationResponseStore.getIterator()) { + mediationResponses[requesterDid] = response + } + return mediationResponses + } + + public async mediationManagerAddRecipientDid({ + recipientDid, + requesterDid, + }: IMediationManagerAddRecipientDidArgs): Promise { + const addResult = await this.recipientDidStore.set(recipientDid, requesterDid) + if (!addResult || !addResult.value) throw new Error('mediation_manager: failed to add recipient did') + return addResult.value + } + + public async mediationManagerRemoveRecipientDid({ + recipientDid, + }: IMediationManagerRecipientDidArgs): Promise { + return await this.recipientDidStore.delete(recipientDid) + } + + public async mediationManagerGetRecipientDid({ + recipientDid, + }: IMediationManagerRecipientDidArgs): Promise { + return (await this.recipientDidStore.get(recipientDid)) || null + } + + public async mediationManagerListRecipientDids({ + requesterDid, + }: IMediationManagerListRecipientDidsArgs): Promise { + const recipientDids: RecipientDid[] = [] + for await (const [recipientDid, did] of this.recipientDidStore.getIterator()) { + if (did === requesterDid) recipientDids.push(recipientDid) + } + return recipientDids + } + + public async mediationManagerIsMediationGranted({ + recipientDid, + }: IMediationManagerRecipientDidArgs): Promise { + return !!(await this.recipientDidStore.get(recipientDid)) + } +} diff --git a/packages/mediation-manager/src/types/IMediationManager.ts b/packages/mediation-manager/src/types/IMediationManager.ts new file mode 100644 index 000000000..4c263f6e5 --- /dev/null +++ b/packages/mediation-manager/src/types/IMediationManager.ts @@ -0,0 +1,248 @@ +import { IPluginMethodMap } from '@veramo/core-types' + +/** + * The input to the {@link IMediationManager.mediationManagerSaveMediationPolicy} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerSaveMediationPolicyArgs { + requesterDid: RequesterDid + policy: PreMediationRequestPolicy +} + +/** + * The input to the {@link IMediationManager.mediationManagerRemoveMediationPolicy} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerRemoveMediationPolicyArgs { + requesterDid: RequesterDid +} + +/** + * The input to the {@link IMediationManager.mediationManagerListRecipientDids} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerListRecipientDidsArgs { + requesterDid: RequesterDid +} + +/** + * The input to the {@link IMediationManager.mediationManagerGetMediationPolicy} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerGetMediationPolicyArgs { + requesterDid: RequesterDid +} + +/** + * The input to the {@link IMediationManager.mediationManagerGetMediation} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationGetArgs { + requesterDid: RequesterDid +} + +/** + * The input to the {@link IMediationManager.mediationManagerSaveMediation} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerSaveMediationArgs { + requesterDid: RequesterDid + status: MediationResponse +} + +/** + * The input to the {@link IMediationManager.mediationManagerAddRecipientDid} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerAddRecipientDidArgs { + recipientDid: RecipientDid + requesterDid: RequesterDid +} + +/** + * The input to the {@link IMediationManager.mediationManagerGetRecipientDid} method. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManagerRecipientDidArgs { + recipientDid: RecipientDid +} + +/** + * A string representing the Recipient Did + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export type RecipientDid = string + +/** + * A string representing the Requester Did + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export type RequesterDid = string + +/** + * Can be "ALLOW" or "DENY" and is used to determine whether a mediation request for a specific {@link RequesterDid} should be ALLOW or DENY. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export type PreMediationRequestPolicy = 'ALLOW' | 'DENY' + +/** + * Can be "GRANTED" or "DENIED" and is used to record whether a mediation response for a specific {@link RequesterDid} has been granted or denied. + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export type MediationResponse = 'GRANTED' | 'DENIED' + +/** + * An object of keys and their associated {@link PreMediationRequestPolicy} + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export type Mediations = Record + +/** + * MediationManager plugin interface for {@link @veramo/core#Agent} + * + * @beta This API may change without a BREAKING CHANGE notice. + */ +export interface IMediationManager extends IPluginMethodMap { + /** + * Returns a boolean indicating whether the agent is configured to "ALLOW" or "DENY" all mediation requests + * as the default policy. + * + * @returns - a Promise that resolves to a boolean + * + * @beta This API may change without a BREAKING CHANGE notice. + */ + isMediateDefaultGrantAll(): Promise + + /** + * Takes a Requester Did and a {@link PreMediationRequestPolicy} and saves it to the store. + * + * @param args - an object {@link IMediationManagerSaveMediationPolicyArgs} + * @returns - a Promise that resolves to the saved Requester Did + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerSaveMediationPolicy(args: IMediationManagerSaveMediationPolicyArgs): Promise + + /** + * Takes a Requester Did and removes the {@link PreMediationRequestPolicy} associated with it from the store. + * + * @param args - an object {@link IMediationManagerRemoveMediationPolicyArgs} + * @returns - a Promise that resolves to a boolean indicating whether the policy was successfully removed + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerRemoveMediationPolicy(args: IMediationManagerRemoveMediationPolicyArgs): Promise + + /** + * Takes a Requester Did and returns the {@link PreMediationRequestPolicy} associated with it from the store. + * + * @param args - an object {@link IMediationManagerRemoveMediationPolicyArgs} + * @returns - a Promise that resolves to the {@link PreMediationRequestPolicy} associated with the Requester Did or null if no policy exists + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerGetMediationPolicy( + args: IMediationManagerGetMediationPolicyArgs, + ): Promise + + /** + * Returns an object of keys and their associated {@link PreMediationRequestPolicy} it from the store. + * + * @returns - a Promise that resolves to an object {@link PreMediationRequestPolicy}. + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerListMediationPolicies(): Promise> + + /** + * Takes a Requester Did and returns the {@link MediationResponse} associated with it from the store. + * + * @param args - an object {@link IMediationGetArgs} + * @returns - a Promise that resolves to the {@link MediationResponse} associated with the Requester Did + * or null if no {@link MediationResponse} exists + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerGetMediation(args: IMediationGetArgs): Promise + + /** + * Takes a Requester Did and removes the {@link MediationResponse} associated with it from the store. + * + * @param args - an object {@link IMediationGetArgs} + * @returns - a Promise that resolves to a boolean indicating success or failure. + * or null if no {@link MediationResponse} exists + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerRemoveMediation(args: IMediationGetArgs): Promise + + /** + * Takes a Requester Did and saves the {@link MediationResponse} associated with it to the store. + * + * @param args - an object {@link IMediationManagerSaveMediationArgs} + * @returns - a Promise that resolves to a {@link RequesterDid} saved to the store. + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerSaveMediation(args: IMediationManagerSaveMediationArgs): Promise + + /** + * Returns a record of all {@link RequesterDid} and their associated {@link MediationResponse}. + * + * @returns - a Promise that resolves to a list of {@link RequesterDid} saved to the store. + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerGetAllMediations(): Promise> + + /** + * Takes a {@link RecipientDid} and its owning {@link RequesterDid} and adds it to the store. + * + * @remarks the {@link RecipientDid} is used as the key and the {@link RequesterDid} is the value. + * @param args - an object {@link IMediationManagerAddRecipientDidArgs} + * @returns - a Promise that resolves to a {@link RequesterDid}. + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerAddRecipientDid(args: IMediationManagerAddRecipientDidArgs): Promise + + /** + * Takes a {@link RecipientDid} and removes it from the store. + * + * @param args - an object {@link IMediationManagerRecipientDidArgs} + * @returns - a Promise that resolves to a boolean indicating success or failure. + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerRemoveRecipientDid(args: IMediationManagerRecipientDidArgs): Promise + + /** + * Takes a {@link RecipientDid} and returns its associated value {@link RequesterDid}. + * + * @param args - an object {@link IMediationManagerRecipientDidArgs} + * @returns - a Promise that resolves string which is the {@link RequesterDid} + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerGetRecipientDid(args: IMediationManagerRecipientDidArgs): Promise + + /** + * Takes a {@link RequesterDid} and returns all associated {@link RecipientDid}. + * + * @param args - an object {@link IMediationManagerListRecipientDidsArgs} + * @returns - a Promise that resolves to an array of {@link RecipientDid} + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerListRecipientDids(args: IMediationManagerListRecipientDidsArgs): Promise + + /** + * Takes a {@link RecipientDid} and returns a boolean indicating whether it has been granted mediation. + * + * @param args - an object {@link IMediationManagerRecipientDidArgs} + * @returns - a Promise that resolves to a boolean indicating whether mediation has been granted. + * @beta This API may change without a BREAKING CHANGE notice. + */ + mediationManagerIsMediationGranted(args: IMediationManagerRecipientDidArgs): Promise +} diff --git a/packages/mediation-manager/tsconfig.json b/packages/mediation-manager/tsconfig.json new file mode 100644 index 000000000..daa2804de --- /dev/null +++ b/packages/mediation-manager/tsconfig.json @@ -0,0 +1,22 @@ +{ + "extends": "../tsconfig.settings.json", + "compilerOptions": { + "esModuleInterop": true, + "rootDir": "src", + "outDir": "build", + "declarationDir": "build", + "skipLibCheck": true, + "strictFunctionTypes": false, + "types": [ + "node" + ] + }, + "references": [ + { + "path": "../core-types" + }, + { + "path": "../utils" + } + ] +} diff --git a/packages/message-handler/src/abstract-message-handler.ts b/packages/message-handler/src/abstract-message-handler.ts index 16bc4fdfd..13186d046 100644 --- a/packages/message-handler/src/abstract-message-handler.ts +++ b/packages/message-handler/src/abstract-message-handler.ts @@ -18,9 +18,7 @@ export abstract class AbstractMessageHandler { } public async handle(message: Message, context: IAgentContext<{}>): Promise { - if (this.nextMessageHandler) { - return this.nextMessageHandler.handle(message, context) - } + if (this.nextMessageHandler) return this.nextMessageHandler.handle(message, context) debug("can't handle message: ", message) return Promise.reject(unsupportedMessageTypeError) } diff --git a/packages/remote-client/src/client.ts b/packages/remote-client/src/client.ts index 20d044037..7d51ec60a 100644 --- a/packages/remote-client/src/client.ts +++ b/packages/remote-client/src/client.ts @@ -20,15 +20,17 @@ export class AgentRestClient implements IAgentPlugin { url: string enabledMethods: string[] schema?: IAgentPluginSchema - headers?: Record + headers?: Record | (() => Promise>) }) { this.url = options.url this.schema = options.schema for (const method of options.enabledMethods) { this.methods[method] = async (args: any) => { + // in case headers is an async call, we will wait for it to resolve + const headers = typeof options.headers === 'function' ? await options.headers() : options.headers const res = await fetch(this.url + '/' + method, { - headers: { ...options.headers, 'Content-Type': 'application/json' }, + headers: { ...headers, 'Content-Type': 'application/json' }, method: 'post', body: JSON.stringify(args), }) diff --git a/packages/remote-server/src/web-did-doc-router.ts b/packages/remote-server/src/web-did-doc-router.ts index a8a51d53d..cc17f9110 100644 --- a/packages/remote-server/src/web-did-doc-router.ts +++ b/packages/remote-server/src/web-did-doc-router.ts @@ -68,12 +68,12 @@ export const WebDidDocRouter = (options: WebDidDocRouterOptions): Router => { break case 'Ed25519VerificationKey2020': contexts.add('https://w3id.org/security/suites/ed25519-2020/v1') - vm.publicKeyMultibase = bytesToMultibase(hexToBytes(key.publicKeyHex), 'Ed25519') + vm.publicKeyMultibase = bytesToMultibase(hexToBytes(key.publicKeyHex), 'base58btc', 'ed25519-pub') delete(vm.publicKeyHex) break case 'X25519KeyAgreementKey2020': contexts.add('https://w3id.org/security/suites/x25519-2020/v1') - vm.publicKeyMultibase = bytesToMultibase(hexToBytes(key.publicKeyHex), 'Ed25519') + vm.publicKeyMultibase = bytesToMultibase(hexToBytes(key.publicKeyHex), 'base58btc', 'x25519-pub') delete(vm.publicKeyHex) break case 'EcdsaSecp256r1VerificationKey2019': diff --git a/packages/selective-disclosure/package.json b/packages/selective-disclosure/package.json index 76e2a1125..04a80e520 100644 --- a/packages/selective-disclosure/package.json +++ b/packages/selective-disclosure/package.json @@ -22,7 +22,7 @@ "@veramo/message-handler": "workspace:^", "@veramo/utils": "workspace:^", "debug": "^4.3.3", - "did-jwt": "^7.2.5", + "did-jwt": "^7.4.1", "uuid": "^9.0.0" }, "devDependencies": { diff --git a/packages/test-react-app/headless-tests/browserAgent.browser-test.ts b/packages/test-react-app/headless-tests/browserAgent.browser-test.ts index 7558b91dc..6d90a91b5 100644 --- a/packages/test-react-app/headless-tests/browserAgent.browser-test.ts +++ b/packages/test-react-app/headless-tests/browserAgent.browser-test.ts @@ -52,10 +52,7 @@ describe('Browser integration tests', () => { contentType: 'application/did+ld+json', }, didDocument: { - '@context': [ - 'https://www.w3.org/ns/did/v1', - 'https://w3id.org/security/suites/secp256k1recovery-2020/v2', - ], + '@context': expect.anything(), id: 'did:ethr:0x6acf3bb1ef0ee84559de2bc2bd9d91532062a730', verificationMethod: [ { diff --git a/packages/test-react-app/package.json b/packages/test-react-app/package.json index 30fe14d0b..45c1c0c61 100644 --- a/packages/test-react-app/package.json +++ b/packages/test-react-app/package.json @@ -16,6 +16,7 @@ "@veramo/did-provider-ethr": "workspace:*", "@veramo/did-provider-jwk": "workspace:*", "@veramo/did-provider-key": "workspace:*", + "@veramo/did-provider-peer": "workspace:^", "@veramo/did-provider-pkh": "workspace:*", "@veramo/did-provider-web": "workspace:*", "@veramo/did-resolver": "workspace:*", @@ -30,7 +31,7 @@ "buffer": "npm:buffer", "crypto": "npm:crypto-browserify", "did-resolver": "^4.1.0", - "ethr-did-resolver": "^8.1.2", + "ethr-did-resolver": "^10.1.0", "path": "npm:path-browserify", "process": "npm:process", "react": "18.2.0", @@ -67,14 +68,14 @@ }, "devDependencies": { "@babel/plugin-syntax-import-assertions": "7.22.5", - "@babel/preset-typescript": "7.22.5", + "@babel/preset-typescript": "7.23.0", "@craco/craco": "7.1.0", "@types/eslint": "8.44.2", "@types/eslint-scope": "3.7.4", "@types/expect-puppeteer": "5.0.3", "@types/jest": "29.5.3", "@types/jest-environment-puppeteer": "5.0.3", - "@types/node": "20.6.2", + "@types/node": "20.8.2", "@types/react": "18.2.20", "@types/react-dom": "18.2.7", "babel-jest": "29.7.0", @@ -86,7 +87,7 @@ "jest-environment-puppeteer-jsdom": "6.0.0", "jest-jasmine2": "29.7.0", "jest-puppeteer": "9.0.0", - "puppeteer": "21.2.1", + "puppeteer": "21.3.4", "react-scripts": "5.0.1", "ts-jest": "29.1.1", "typescript": "5.2.2" diff --git a/packages/test-react-app/src/App.tsx b/packages/test-react-app/src/App.tsx index da8ad0435..52f6e00e7 100644 --- a/packages/test-react-app/src/App.tsx +++ b/packages/test-react-app/src/App.tsx @@ -2,10 +2,12 @@ import * as React from 'react' import './App.css' import { getAgent } from './veramo/setup' import { DIDResolutionResult } from 'did-resolver' +import { VerifiableCredential } from '@veramo/core-types' function App() { - const [didDoc, setDidDoc] = React.useState(null) - const [invalidDidDoc, setInvalidDidDoc] = React.useState(null) + const [didDoc, setDidDoc] = React.useState(undefined) + const [invalidDidDoc, setInvalidDidDoc] = React.useState(undefined) + const [credential, setCredential] = React.useState(undefined) const agent = getAgent() @@ -22,16 +24,43 @@ function App() { }) setInvalidDidDoc(doc) } - + const issueCredential = async () => { + const identifier = await agent.didManagerGetOrCreate({ + alias: 'default', + provider: 'did:ethr:goerli', + }) + const credential = await agent.createVerifiableCredential({ + credential: { + issuer: { id: identifier.did }, + issuanceDate: new Date().toISOString(), + type: ['VerifiableCredential', 'UniversityDegreeCredential'], + credentialSubject: { + id: 'did:example:ebfeb1f712ebc6f1c276e12ec21', + degree: { + type: 'BachelorDegree', + name: 'Bachelor of Science and Arts', + }, + }, + }, + proofFormat: 'jwt', + }) + const hash = await agent.dataStoreSaveVerifiableCredential({ + verifiableCredential: credential, + }) + console.log('Credential hash', hash) + setCredential(credential) + } React.useEffect(() => { resolve() resolveInvalid() + issueCredential() }, []) return (

{didDoc &&
{JSON.stringify(didDoc, null, 2)}
} + {credential &&
{JSON.stringify(credential, null, 2)}
} {invalidDidDoc &&
{JSON.stringify(invalidDidDoc, null, 2)}
}
diff --git a/packages/test-react-app/src/veramo/setup.ts b/packages/test-react-app/src/veramo/setup.ts index b84714033..4c471f952 100644 --- a/packages/test-react-app/src/veramo/setup.ts +++ b/packages/test-react-app/src/veramo/setup.ts @@ -29,6 +29,7 @@ import { VeramoEd25519Signature2018, } from '@veramo/credential-ld' import { getDidKeyResolver, KeyDIDProvider } from '@veramo/did-provider-key' +import { getResolver as getDidPeerResolver, PeerDIDProvider } from '@veramo/did-provider-peer' import { getDidPkhResolver, PkhDIDProvider } from '@veramo/did-provider-pkh' import { getDidJwkResolver, JwkDIDProvider } from '@veramo/did-provider-jwk' import { DIDComm, DIDCommMessageHandler, IDIDComm } from '@veramo/did-comm' @@ -74,6 +75,7 @@ export function getAgent(options?: IAgentOptions): TAgent { ...ethrDidResolver({ infuraProjectId: INFURA_PROJECT_ID }), ...webDidResolver(), ...getDidKeyResolver(), + ...getDidPeerResolver(), ...getDidPkhResolver(), ...getDidJwkResolver(), ...new FakeDidResolver(() => agent as TAgent).getDidFakeResolver(), @@ -104,6 +106,11 @@ export function getAgent(options?: IAgentOptions): TAgent { name: 'goerli', rpcUrl: 'https://goerli.infura.io/v3/' + INFURA_PROJECT_ID, }, + { + name: 'sepolia', + chainId: 11155111, + rpcUrl: 'https://sepolia.infura.io/v3/' + INFURA_PROJECT_ID, + }, { chainId: 421613, name: 'arbitrum:goerli', @@ -118,6 +125,9 @@ export function getAgent(options?: IAgentOptions): TAgent { 'did:key': new KeyDIDProvider({ defaultKms: 'local', }), + 'did:peer': new PeerDIDProvider({ + defaultKms: 'local', + }), 'did:pkh': new PkhDIDProvider({ defaultKms: 'local', }), diff --git a/packages/test-react-app/tsconfig.json b/packages/test-react-app/tsconfig.json index aebebc273..0acc3953b 100644 --- a/packages/test-react-app/tsconfig.json +++ b/packages/test-react-app/tsconfig.json @@ -32,6 +32,7 @@ { "path": "../did-provider-ethr" }, { "path": "../did-provider-jwk" }, { "path": "../did-provider-key" }, + { "path": "../did-provider-peer" }, { "path": "../did-provider-pkh" }, { "path": "../did-provider-web" }, { "path": "../did-resolver" }, diff --git a/packages/utils/package.json b/packages/utils/package.json index 24e73a1c9..3d1766af1 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -10,17 +10,17 @@ "extract-api": "node ../cli/bin/veramo.js dev extract-api" }, "dependencies": { - "@ethersproject/signing-key": "^5.7.0", - "@ethersproject/transactions": "^5.7.0", + "@ipld/dag-pb": "^4.0.5", "@noble/curves": "^1.1.0", - "@noble/hashes": "^1.3.1", "@veramo/core-types": "workspace:^", "credential-status": "^2.0.5", "cross-fetch": "^4.0.0", "debug": "^4.3.3", - "did-jwt": "^7.2.5", - "did-jwt-vc": "^3.2.5", + "did-jwt": "^7.4.1", + "did-jwt-vc": "^3.2.10", "did-resolver": "^4.1.0", + "ethers": "^6.9.0", + "ipfs-unixfs": "^11.1.0", "multiformats": "^12.0.1", "uint8arrays": "^4.0.6" }, diff --git a/packages/utils/src/__tests__/credential-utils.test.ts b/packages/utils/src/__tests__/credential-utils.test.ts index b7b34c503..e3c8982fc 100644 --- a/packages/utils/src/__tests__/credential-utils.test.ts +++ b/packages/utils/src/__tests__/credential-utils.test.ts @@ -181,7 +181,7 @@ describe('@veramo/utils credential utils', () => { expect(computeEntryHash(expandedCred)).toEqual(computeEntryHash(serializedCred)) expect(computeEntryHash(jwt)).toEqual(computeEntryHash(serializedCred)) expect(computeEntryHash(serializedCred)).toEqual( - '452f0fb4b876e22867585ee15a6aabb7a6f9ccccf6a2ee664e9f7618737792d64b219fef0792b9d73f3ff756a265083526ecb7313ae4972ef6290b600cacbe88', + 'QmYBWeZCoB1zbJwGou1svfgrq9muVQyy7uzokMfdeSEoHH', ) }) @@ -208,7 +208,7 @@ describe('@veramo/utils credential utils', () => { '{"issuer":{"id":"did:key:z6MkvGFkoFarw7pXRBkKqZKwDcc2L3U4AZC1RtBiceicUHqn"},"@context":["https://www.w3.org/2018/credentials/v1","https://veramo.io/contexts/profile/v1"],"type":["VerifiableCredential","Profile"],"issuanceDate":"2021-11-23T15:06:12.820Z","credentialSubject":{"id":"did:key:z6MkvGFkoFarw7pXRBkKqZKwDcc2L3U4AZC1RtBiceicUHqn","name":"Martin, the great"},"proof":{"type":"Ed25519Signature2018","created":"2021-11-23T15:06:12Z","verificationMethod":"did:key:z6MkvGFkoFarw7pXRBkKqZKwDcc2L3U4AZC1RtBiceicUHqn#z6MkvGFkoFarw7pXRBkKqZKwDcc2L3U4AZC1RtBiceicUHqn","proofPurpose":"assertionMethod","jws":"eyJhbGciOiJFZERTQSIsImI2NCI6ZmFsc2UsImNyaXQiOlsiYjY0Il19..wKMmMZNdIgL_19HYJgpRL9SeKVzYT85S-ZyVdF3IMiaiL8nhX8i48D82TQtuQlTT960h_TOQ18fQFula6QxADA"}}' expect(computeEntryHash(expandedCred)).toEqual(computeEntryHash(serializedCred)) expect(computeEntryHash(serializedCred)).toEqual( - '357436ca94682f2872b26c35a64d52c8e12dfbf86561a8f219cb395482f5978758fb577c927874cdb01189853054433a07eca81a4b3a999be12290021eb9bcbb', + 'QmYeBhqpqiFUcsTS1qz7tkuVCJq8Z4VrrSJsjJc4Q7k9ig', ) }) diff --git a/packages/utils/src/__tests__/did-utils.test.ts b/packages/utils/src/__tests__/did-utils.test.ts index 743beaad3..3726261ea 100644 --- a/packages/utils/src/__tests__/did-utils.test.ts +++ b/packages/utils/src/__tests__/did-utils.test.ts @@ -70,7 +70,7 @@ describe('@veramo/utils did utils', () => { it('should convert to multibase and back', async () => { const publicKeyHex = '6bb3f30242ac89bb6baa169fd5d1fea5adb61ce5b3cfee9e157e699a51983869' - const computedMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'Ed25519') + const computedMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'base58btc', 'ed25519-pub') // // multibase // let expectedMultibase = `z8FRmkyRH9xAsLCk51yXN2Qy6uq4eN4iAesa3v3Hv889v`; @@ -91,16 +91,16 @@ describe('@veramo/utils did utils', () => { it('should convert to multibase and back', async () => { const publicKeyHex = '6bb3f30242ac89bb6baa169fd5d1fea5adb61ce5b3cfee9e157e699a51983869' - const computedMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'Ed25519') + const computedMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'base58btc', 'ed25519-pub') // // multibase + multicodec let expectedMultibase = `z6MkmhgpMDfiVVfLShamhYVCsWX6jQLVmwxXLtUykKFw3LwJ`; expect(computedMultibase).toEqual(expectedMultibase) - const computedXMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'X25519') + const computedXMultibase = bytesToMultibase(hexToBytes(publicKeyHex), 'base58btc', 'x25519-pub') let expectedXMultibase = `z6LSivbwHHE9FQtcRb7qYd3KM1Bakybm4ftKXrHjQVwSqVvg`; - + expect(computedXMultibase).toEqual(expectedXMultibase) const computedHex = extractPublicKeyHex({ diff --git a/packages/utils/src/credential-utils.ts b/packages/utils/src/credential-utils.ts index 73f9fa1fb..4af63d415 100644 --- a/packages/utils/src/credential-utils.ts +++ b/packages/utils/src/credential-utils.ts @@ -11,8 +11,11 @@ import { } from '@veramo/core-types' import { decodeJWT } from 'did-jwt' import { normalizeCredential, normalizePresentation } from 'did-jwt-vc' -import { blake2b } from '@noble/hashes/blake2b' -import { bytesToHex } from './encodings.js' +import { code, encode, prepare } from '@ipld/dag-pb' +import * as Digest from 'multiformats/hashes/digest' +import { CID } from 'multiformats/cid' +import { UnixFS } from 'ipfs-unixfs' +import { sha256 } from '@noble/hashes/sha256' /** * Every Verifiable Credential `@context` property must contain this. @@ -96,7 +99,15 @@ export function computeEntryHash( } else { hashable = JSON.stringify(input) } - return bytesToHex(blake2b(hashable)) + + const unixfs = new UnixFS({ + type: 'file', + data: new TextEncoder().encode(hashable) + }) + + const bytes = encode(prepare({ Data: unixfs.marshal() })) + const digest = Digest.create(18, sha256(bytes)) + return CID.create(0, code, digest).toString() } /** @@ -104,7 +115,7 @@ export function computeEntryHash( * `iss` from a JWT or `issuer`/`issuer.id` from a VC or `holder` from a VP * * @param input - the credential or presentation whose issuer/holder needs to be extracted. - * @param options + * @param options - options for the extraction * removeParameters - Remove all DID parameters from the issuer ID * * @beta This API may change without a BREAKING CHANGE notice. diff --git a/packages/utils/src/did-utils.ts b/packages/utils/src/did-utils.ts index 7e4d52294..050d70fa1 100644 --- a/packages/utils/src/did-utils.ts +++ b/packages/utils/src/did-utils.ts @@ -1,7 +1,7 @@ -import { computePublicKey } from '@ethersproject/signing-key' -import { computeAddress } from '@ethersproject/transactions' +import { SigningKey, computeAddress } from 'ethers' import { DIDDocumentSection, IAgentContext, IIdentifier, IKey, IResolver } from '@veramo/core-types' import { DIDDocument, VerificationMethod } from 'did-resolver' +import { extractPublicKeyBytes } from 'did-jwt' import { _ExtendedIKey, _ExtendedVerificationMethod, @@ -9,9 +9,8 @@ import { } from './types/utility-types.js' import { isDefined } from './type-utils.js' import Debug from 'debug' -import { base58ToBytes, base64ToBytes, bytesToHex, hexToBytes, multibaseKeyToBytes } from './encodings.js' +import { bytesToHex, hexToBytes } from './encodings.js' import { ed25519 } from '@noble/curves/ed25519' -import { secp256k1 } from '@noble/curves/secp256k1' const debug = Debug('veramo:utils') @@ -87,7 +86,7 @@ export function compressIdentifierSecp256k1Keys(identifier: IIdentifier): IKey[] if (key.type === 'Secp256k1') { if (key.publicKeyHex) { const publicBytes = hexToBytes(key.publicKeyHex) - key.publicKeyHex = computePublicKey(publicBytes, true).substring(2) + key.publicKeyHex = SigningKey.computePublicKey(publicBytes, true).substring(2) key.meta = { ...key.meta } key.meta.ethereumAddress = computeAddress('0x' + key.publicKeyHex) } @@ -154,7 +153,7 @@ export function getEthereumAddress(verificationMethod: VerificationMethod): stri verificationMethod.publicKeyJwk ) { const pbBytes = extractPublicKeyBytes(verificationMethod) - const pbHex = computePublicKey(pbBytes, false) + const pbHex = SigningKey.computePublicKey(pbBytes, false) vmEthAddr = computeAddress(pbHex).toLowerCase() } @@ -162,39 +161,6 @@ export function getEthereumAddress(verificationMethod: VerificationMethod): stri return vmEthAddr } -interface LegacyVerificationMethod extends VerificationMethod { - publicKeyBase64: string -} - -function extractPublicKeyBytes(pk: VerificationMethod): Uint8Array { - if (pk.publicKeyBase58) { - return base58ToBytes(pk.publicKeyBase58) - } else if (pk.publicKeyMultibase) { - return multibaseKeyToBytes(pk.publicKeyMultibase) - } else if ((pk).publicKeyBase64) { - return base64ToBytes((pk).publicKeyBase64) - } else if (pk.publicKeyHex) { - return hexToBytes(pk.publicKeyHex) - } else if ( - pk.publicKeyJwk && - pk.publicKeyJwk.crv === 'secp256k1' && - pk.publicKeyJwk.x && - pk.publicKeyJwk.y - ) { - return secp256k1.ProjectivePoint.fromAffine({ - x: BigInt('0x' + bytesToHex(base64ToBytes(pk.publicKeyJwk.x))), - y: BigInt('0x' + bytesToHex(base64ToBytes(pk.publicKeyJwk.y))), - }).toRawBytes(false) - } else if ( - pk.publicKeyJwk && - (pk.publicKeyJwk.crv === 'Ed25519' || pk.publicKeyJwk.crv === 'X25519') && - pk.publicKeyJwk.x - ) { - return base64ToBytes(pk.publicKeyJwk.x) - } - return new Uint8Array() -} - /** * Extracts the chain ID from a {@link did-resolver#VerificationMethod | verification method} supporting legacy * representations as well. diff --git a/packages/utils/src/encodings.ts b/packages/utils/src/encodings.ts index 3e505f8ad..67d21f7fb 100644 --- a/packages/utils/src/encodings.ts +++ b/packages/utils/src/encodings.ts @@ -1,33 +1,24 @@ import { fromString, toString, concat as concatArrays } from 'uint8arrays' -import { base64, base64url } from 'multiformats/bases/base64' -import { base16, base16upper } from 'multiformats/bases/base16' -import { base10 } from 'multiformats/bases/base10' -import { base58btc } from 'multiformats/bases/base58' +import { + hexToBytes as hexToBytesRaw, + bytesToHex as bytesToHexRaw, + bytesToBase58, + base58ToBytes, + base64ToBytes, + bytesToBase64url, + bytesToMultibase, + multibaseToBytes, +} from 'did-jwt' const u8a = { toString, fromString, concatArrays } -/** - * Converts a Uint8Array to a base64url string - * @param b - the array to be converted - * - * @public - */ -export function bytesToBase64url(b: Uint8Array): string { - return u8a.toString(b, 'base64url') -} - -/** - * Converts a base64url string to the Uint8Array it represents. - * - * @param s - the string to be converted - * - * @throws if the string is not formatted correctly. - * - * @public - */ -export function base64ToBytes(s: string): Uint8Array { - const inputBase64Url = s.replace(/\+/g, '-').replace(/\//g, '_').replace(/=/g, '') - return u8a.fromString(inputBase64Url, 'base64url') +export { + bytesToBase58, + base58ToBytes, + bytesToBase64url, + base64ToBytes, + multibaseToBytes, + bytesToMultibase } /** @@ -119,9 +110,7 @@ export function hexToBytes(hexString: string): Uint8Array { if (typeof hexString !== 'string') { throw new Error('illegal_argument: a string must be provided for a hex-string to byte array conversion') } - const noPrefix = hexString.startsWith('0x') ? hexString.substring(2) : hexString - const padded = noPrefix.length % 2 !== 0 ? `0${noPrefix}` : noPrefix - return u8a.fromString(padded.toLowerCase(), 'base16') + return hexToBytesRaw(hexString) } /** @@ -140,100 +129,10 @@ export function bytesToHex(byteArray: Uint8Array, prefix: boolean = false): stri if (!(byteArray instanceof Uint8Array)) { throw new Error('illegal_argument: only byte arrays can be converted to hex encoding') } - const result = u8a.toString(byteArray, 'base16') + const result = bytesToHexRaw(byteArray) return prefix ? `0x${result}` : result } -/** - * Converts a base58 string to the Uint8Array it represents. - * - * @param s - the string to be converted - * - * @throws if the string is not formatted correctly. - * - * @public - */ -export function base58ToBytes(s: string): Uint8Array { - return u8a.fromString(s, 'base58btc') -} - -/** - * Converts a base58 string to the Uint8Array it represents. - * - * @param s - the string to be converted - * - * @throws if the string is not formatted correctly. - * - * @public - */ -export function bytesToBase58(byteArray: Uint8Array): string { - return u8a.toString(byteArray, 'base58btc') -} - -/** - * Converts a multibase string to the Uint8Array it represents. - * - * @param s - the string to be converted - * - * @throws if the string is not formatted correctly. - * - * @public - */ -export function multibaseKeyToBytes(s: string): Uint8Array { - if (s.charAt(0) !== 'z') { - throw new Error('invalid multibase string: string is not base58 encoded (does not start with "z")') - } - const baseDecoder = base58btc.decoder - .or(base10.decoder) - .or(base16.decoder) - .or(base16upper.decoder) - .or(base64.decoder) - .or(base64url.decoder) - const bytes = baseDecoder.decode(s) - - if (bytes.length !== 34) { - throw new Error('invalid multibase string: length is not 34 bytes') - } - - // only ed25519-pub and x25519-pub multicodecs supported now - if (bytes[0] !== 0xed && bytes[0] !== 0xec) { - throw new Error('invalid multibase string: first byte is not 0xed') - } - - if (bytes[1] !== 0x01) { - throw new Error('invalid multibase string: second byte is not 0x01') - } - - return bytes.slice(2) -} - -/** - * Converts a Uint8Array to a multibase string. - * - * @param b - the array to be converted - * @param type - the type of the key to be represented - * - * @throws if the array is not formatted correctly. - * - * @public - */ -export function bytesToMultibase(byteArray: Uint8Array, type: string): string { - if (byteArray.length !== 32) { - throw new Error('invalid byte array: length is not 32 bytes') - } - - const bytes = new Uint8Array(34) - if (type === 'Ed25519') { - bytes[0] = 0xed - } else if (type === 'X25519') { - bytes[0] = 0xec - } - bytes[1] = 0x01 - bytes.set(byteArray, 2) - - return base58btc.encode(bytes) -} - /** * Concatenates a bunch of arrays into one Uint8Array * @param arrays - the arrays to be concatenated diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts index e1a4193ac..086c12996 100644 --- a/packages/utils/src/index.ts +++ b/packages/utils/src/index.ts @@ -9,3 +9,4 @@ export * from './credential-utils.js' export * from './did-utils.js' export * from './encodings.js' export * from './type-utils.js' +export * from './jwk-did-utils.js' diff --git a/packages/did-provider-jwk/src/jwkDidUtils.ts b/packages/utils/src/jwk-did-utils.ts similarity index 96% rename from packages/did-provider-jwk/src/jwkDidUtils.ts rename to packages/utils/src/jwk-did-utils.ts index e53bf0afa..f3b4b6b94 100644 --- a/packages/did-provider-jwk/src/jwkDidUtils.ts +++ b/packages/utils/src/jwk-did-utils.ts @@ -1,8 +1,9 @@ -import { JwkDidSupportedKeyTypes, KeyUse, SupportedKeyTypes } from './types/jwk-provider-types.js' +import { JwkDidSupportedKeyTypes, KeyUse, SupportedKeyTypes } from './types/utility-types.js' import type { VerificationMethod, JsonWebKey } from 'did-resolver' -import { hexToBytes, bytesToBase64url, extractPublicKeyHex } from '@veramo/utils' import { secp256k1 } from '@noble/curves/secp256k1' import { p256 } from '@noble/curves/p256' +import { bytesToBase64url, hexToBytes } from 'did-jwt' +import { extractPublicKeyHex } from './did-utils.js' export function getKeyUse(keyType: JwkDidSupportedKeyTypes, passedKeyUse?: KeyUse): KeyUse { if (passedKeyUse) { diff --git a/packages/utils/src/type-utils.ts b/packages/utils/src/type-utils.ts index 231e409f5..7efa4c190 100644 --- a/packages/utils/src/type-utils.ts +++ b/packages/utils/src/type-utils.ts @@ -42,6 +42,7 @@ export function isIterable(obj: any): obj is Iterable { * @param b - second array * @returns The intersection of the two arrays. * + * @public */ export function intersect(a: T[] | any, b: any[] | any): T[] { const setB = new Set(asArray(b)); diff --git a/packages/utils/src/types/utility-types.ts b/packages/utils/src/types/utility-types.ts index 4919bedd3..0cdf7bc75 100644 --- a/packages/utils/src/types/utility-types.ts +++ b/packages/utils/src/types/utility-types.ts @@ -45,3 +45,14 @@ export type OrPromise = T | Promise * @beta This API may change without a BREAKING CHANGE notice. */ export type RecordLike = Map | Record + +export enum SupportedKeyTypes { + Secp256r1 = 'Secp256r1', + Secp256k1 = 'Secp256k1', + Ed25519 = 'Ed25519', + X25519 = 'X25519', +} + +export type KeyUse = 'sig' | 'enc' + +export type JwkDidSupportedKeyTypes = keyof typeof SupportedKeyTypes diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index aaa8b4c9b..36ee971e1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,18 +12,6 @@ importers: .: devDependencies: - '@ethersproject/contracts': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.2 - version: 5.7.2 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/wallet': - specifier: ^5.7.0 - version: 5.7.0 '@jest/globals': specifier: 29.7.0 version: 29.7.0 @@ -32,13 +20,13 @@ importers: version: 7.0.0 '@microsoft/api-documenter': specifier: 7.23.0 - version: 7.23.0(@types/node@20.6.2) + version: 7.23.0(@types/node@20.8.2) '@microsoft/api-extractor': - specifier: 7.37.0 - version: 7.37.0(@types/node@20.6.2) + specifier: 7.38.0 + version: 7.38.0(@types/node@20.8.2) '@microsoft/api-extractor-model': specifier: 7.28.0 - version: 7.28.0(@types/node@20.6.2) + version: 7.28.0(@types/node@20.8.2) '@microsoft/tsdoc': specifier: 0.14.2 version: 0.14.2 @@ -61,8 +49,8 @@ importers: specifier: 29.5.3 version: 29.5.3 '@types/node': - specifier: 20.6.2 - version: 20.6.2 + specifier: 20.8.2 + version: 20.8.2 '@types/uuid': specifier: 9.0.2 version: 9.0.2 @@ -76,17 +64,20 @@ importers: specifier: 7.0.3 version: 7.0.3 did-jwt: - specifier: 7.2.7 - version: 7.2.7 + specifier: 7.4.2 + version: 7.4.2 did-jwt-vc: - specifier: 3.2.7 - version: 3.2.7 + specifier: 3.2.11 + version: 3.2.11 did-resolver: specifier: 4.1.0 version: 4.1.0 + ethers: + specifier: 6.9.0 + version: 6.9.0 ethr-did-resolver: - specifier: 8.1.2 - version: 8.1.2 + specifier: 10.1.0 + version: 10.1.0 express: specifier: 4.18.2 version: 4.18.2 @@ -95,10 +86,10 @@ importers: version: 7.9.0 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-config: specifier: 29.7.0 - version: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-environment-jsdom: specifier: 29.7.0 version: 29.7.0 @@ -128,16 +119,16 @@ importers: version: 5.0.1 semantic-release: specifier: 22.0.0 - version: 22.0.0(typescript@5.2.2) + version: 22.0.0 ts-jest: specifier: 29.1.1 - version: 29.1.1(@babel/core@7.22.9)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2) + version: 29.1.1(@babel/core@7.23.6)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2) ts-json-schema-generator: specifier: 1.3.0 version: 1.3.0 ts-node: specifier: 10.9.1 - version: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + version: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) typeorm: specifier: 0.3.17 version: 0.3.17(pg@8.11.2)(sqlite3@5.1.6)(ts-node@10.9.1) @@ -158,10 +149,10 @@ importers: dependencies: '@microsoft/api-extractor': specifier: ^7.36.3 - version: 7.36.3(@types/node@20.6.2) + version: 7.36.3(@types/node@20.8.2) '@microsoft/api-extractor-model': specifier: ^7.27.5 - version: 7.27.5(@types/node@20.6.2) + version: 7.27.5(@types/node@20.8.2) '@transmute/credentials-context': specifier: ^0.7.0-unstable.81 version: 0.7.0-unstable.81 @@ -225,6 +216,12 @@ importers: '@veramo/kms-local': specifier: workspace:^ version: link:../kms-local + '@veramo/kv-store': + specifier: workspace:^ + version: link:../kv-store + '@veramo/mediation-manager': + specifier: workspace:^ + version: link:../mediation-manager '@veramo/message-handler': specifier: workspace:^ version: link:../message-handler @@ -271,8 +268,8 @@ importers: specifier: ^16.3.1 version: 16.3.1 ethr-did-resolver: - specifier: ^8.1.2 - version: 8.1.2 + specifier: ^10.1.0 + version: 10.1.0 express: specifier: ^4.18.2 version: 4.18.2 @@ -408,8 +405,8 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt-vc: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.2.10 + version: 3.2.10 did-resolver: specifier: ^4.1.0 version: 4.1.0 @@ -424,8 +421,8 @@ importers: packages/credential-eip712: dependencies: '@metamask/eth-sig-util': - specifier: ^6.0.0 - version: 6.0.0 + specifier: ^7.0.0 + version: 7.0.0 '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -450,31 +447,31 @@ importers: dependencies: '@digitalcredentials/ed25519-signature-2020': specifier: ^3.0.2 - version: 3.0.2(expo@49.0.6)(react-native@0.72.3) + version: 3.0.2(expo@49.0.21)(react-native@0.73.0) '@digitalcredentials/ed25519-verification-key-2020': specifier: ^4.0.0 version: 4.0.0 '@digitalcredentials/jsonld': specifier: ^6.0.0 - version: 6.0.0(expo@49.0.6)(react-native@0.72.3) + version: 6.0.0(expo@49.0.21)(react-native@0.73.0) '@digitalcredentials/jsonld-signatures': specifier: ^9.3.2 - version: 9.3.2(expo@49.0.6)(react-native@0.72.3) + version: 9.3.2(expo@49.0.21)(react-native@0.73.0) '@digitalcredentials/vc': specifier: ^6.0.0 - version: 6.0.0(expo@49.0.6)(react-native@0.72.3) + version: 6.0.0(expo@49.0.21)(react-native@0.73.0) '@transmute/credentials-context': specifier: ^0.7.0-unstable.81 version: 0.7.0-unstable.81 '@transmute/ed25519-signature-2018': specifier: ^0.7.0-unstable.81 - version: 0.7.0-unstable.81(expo@49.0.6)(react-native@0.72.3) + version: 0.7.0-unstable.81(expo@49.0.21)(react-native@0.73.0) '@transmute/json-web-signature': specifier: ^0.7.0-unstable.81 - version: 0.7.0-unstable.81(expo@49.0.6)(react-native@0.72.3) + version: 0.7.0-unstable.81(expo@49.0.21)(react-native@0.73.0) '@veramo-community/lds-ecdsa-secp256k1-recovery2020': specifier: uport-project/EcdsaSecp256k1RecoverySignature2020 - version: github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/ab0db52de6f4e6663ef271a48009ba26e688ef9b(expo@49.0.6)(react-native@0.72.3) + version: github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/ab0db52de6f4e6663ef271a48009ba26e688ef9b(expo@49.0.21)(react-native@0.73.0) '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -513,8 +510,8 @@ importers: specifier: ^2.0.5 version: 2.0.5 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 did-resolver: specifier: ^4.1.0 version: 4.1.0 @@ -544,11 +541,11 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 did-jwt-vc: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.2.10 + version: 3.2.10 did-resolver: specifier: ^4.1.0 version: 4.1.0 @@ -591,8 +588,8 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt-vc: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.2.10 + version: 3.2.10 typeorm: specifier: ^0.3.17 version: 0.3.17(pg@8.11.2)(sqlite3@5.1.6)(ts-node@10.9.1) @@ -634,8 +631,8 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt-vc: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.2.10 + version: 3.2.10 uuid: specifier: ^9.0.0 version: 9.0.0 @@ -655,9 +652,6 @@ importers: packages/did-comm: dependencies: - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 '@noble/curves': specifier: ^1.1.0 version: 1.1.0 @@ -676,6 +670,12 @@ importers: '@veramo/core-types': specifier: workspace:^ version: link:../core-types + '@veramo/kv-store': + specifier: workspace:^ + version: link:../kv-store + '@veramo/mediation-manager': + specifier: workspace:^ + version: link:../mediation-manager '@veramo/message-handler': specifier: workspace:^ version: link:../message-handler @@ -689,14 +689,14 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 did-resolver: specifier: ^4.1.0 version: 4.1.0 isomorphic-webcrypto: specifier: ^2.3.8 - version: 2.3.8(expo@49.0.6)(react-native@0.72.3) + version: 2.3.8(expo@49.0.21)(react-native@0.73.0) uuid: specifier: ^9.0.0 version: 9.0.0 @@ -739,8 +739,8 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 did-resolver: specifier: ^4.1.0 version: 4.1.0 @@ -767,33 +767,6 @@ importers: packages/did-provider-ethr: dependencies: - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/abstract-signer': - specifier: 5.7.0 - version: 5.7.0 - '@ethersproject/address': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/bignumber': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/properties': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/providers': - specifier: ^5.7.0 - version: 5.7.2 - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -803,9 +776,12 @@ importers: debug: specifier: ^4.3.3 version: 4.3.4 + ethers: + specifier: ^6.9.0 + version: 6.9.0 ethr-did: - specifier: ^2.3.18 - version: 2.3.18 + specifier: ^3.0.5 + version: 3.0.5 devDependencies: '@types/debug': specifier: 4.1.8 @@ -819,12 +795,6 @@ importers: '@decentralized-identity/ion-sdk': specifier: ^1.0.1 version: 1.0.1 - '@ethersproject/random': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 '@noble/curves': specifier: ^1.1.0 version: 1.1.0 @@ -833,13 +803,13 @@ importers: version: 1.3.1 '@sphereon/ion-pow': specifier: ^0.2.0 - version: 0.2.0(@sphereon/react-native-argon2@2.0.9)(react-native@0.72.3) + version: 0.2.0(@sphereon/react-native-argon2@2.0.9)(react-native@0.73.0) '@sphereon/isomorphic-argon2': specifier: ^1.0.1 - version: 1.0.1(@sphereon/react-native-argon2@2.0.9)(react-native@0.72.3) + version: 1.0.1(@sphereon/react-native-argon2@2.0.9)(react-native@0.73.0) '@sphereon/react-native-argon2': specifier: ^2.0.7 - version: 2.0.9(react-native@0.72.3) + version: 2.0.9(react-native@0.73.0) '@trust/keyto': specifier: ^1.0.1 version: 1.0.1 @@ -870,6 +840,9 @@ importers: did-resolver: specifier: ^4.1.0 version: 4.1.0 + ethers: + specifier: ^6.9.0 + version: 6.9.0 multihashes: specifier: ^4.0.3 version: 4.0.3 @@ -920,18 +893,15 @@ importers: packages/did-provider-key: dependencies: - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 '@transmute/did-key-ed25519': specifier: ^0.3.0-unstable.10 - version: 0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3) + version: 0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0) '@transmute/did-key-secp256k1': specifier: ^0.3.0-unstable.10 - version: 0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3) + version: 0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0) '@transmute/did-key-x25519': specifier: ^0.3.0-unstable.10 - version: 0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3) + version: 0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0) '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -947,12 +917,9 @@ importers: did-resolver: specifier: ^4.1.0 version: 4.1.0 - multicodec: - specifier: ^3.2.1 - version: 3.2.1 - multiformats: - specifier: ^12.0.1 - version: 12.0.1 + ethers: + specifier: ^6.9.0 + version: 6.9.0 devDependencies: '@types/debug': specifier: 4.1.8 @@ -981,12 +948,6 @@ importers: did-resolver: specifier: ^4.1.0 version: 4.1.0 - multicodec: - specifier: ^3.2.1 - version: 3.2.1 - multiformats: - specifier: ^12.0.1 - version: 12.0.1 devDependencies: '@types/debug': specifier: 4.1.8 @@ -997,18 +958,6 @@ importers: packages/did-provider-pkh: dependencies: - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/bignumber': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -1024,6 +973,9 @@ importers: did-resolver: specifier: ^4.1.0 version: 4.1.0 + ethers: + specifier: ^6.9.0 + version: 6.9.0 devDependencies: '@types/debug': specifier: 4.1.8 @@ -1073,8 +1025,8 @@ importers: specifier: 4.1.8 version: 4.1.8 ethr-did-resolver: - specifier: 8.1.2 - version: 8.1.2 + specifier: 10.1.0 + version: 10.1.0 typescript: specifier: 5.2.2 version: 5.2.2 @@ -1084,15 +1036,6 @@ importers: packages/key-manager: dependencies: - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/strings': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 '@noble/curves': specifier: ^1.1.0 version: 1.1.0 @@ -1106,8 +1049,11 @@ importers: specifier: ^4.3.4 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 + ethers: + specifier: ^6.9.0 + version: 6.9.0 uint8arrays: specifier: ^4.0.6 version: 4.0.6 @@ -1115,9 +1061,6 @@ importers: specifier: ^9.0.0 version: 9.0.0 devDependencies: - '@ethersproject/abstract-signer': - specifier: 5.7.0 - version: 5.7.0 '@types/debug': specifier: 4.1.8 version: 4.1.8 @@ -1130,27 +1073,6 @@ importers: packages/kms-local: dependencies: - '@ethersproject/abstract-provider': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/bytes': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/random': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/strings': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/wallet': - specifier: ^5.7.0 - version: 5.7.0 '@noble/curves': specifier: ^1.1.0 version: 1.1.0 @@ -1173,8 +1095,11 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 + ethers: + specifier: ^6.9.0 + version: 6.9.0 devDependencies: '@types/debug': specifier: 4.1.8 @@ -1185,15 +1110,6 @@ importers: packages/kms-web3: dependencies: - '@ethersproject/providers': - specifier: ^5.7.0 - version: 5.7.2 - '@ethersproject/strings': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -1203,6 +1119,9 @@ importers: debug: specifier: ^4.3.3 version: 4.3.4 + ethers: + specifier: ^6.9.0 + version: 6.9.0 devDependencies: '@types/debug': specifier: 4.1.8 @@ -1257,14 +1176,14 @@ importers: specifier: 3.0.0 version: 3.0.0 '@types/node': - specifier: 20.6.2 - version: 20.6.2 + specifier: 20.8.2 + version: 20.8.2 eslint: - specifier: 8.49.0 - version: 8.49.0 + specifier: 8.50.0 + version: 8.50.0 eslint-plugin-promise: specifier: 6.1.1 - version: 6.1.1(eslint@8.49.0) + version: 6.1.1(eslint@8.50.0) keyv: specifier: 4.5.3 version: 4.5.3 @@ -1275,6 +1194,34 @@ importers: specifier: 5.2.2 version: 5.2.2 + packages/mediation-manager: + dependencies: + '@veramo/core-types': + specifier: workspace:^ + version: link:../core-types + '@veramo/kv-store': + specifier: workspace:^ + version: link:../kv-store + debug: + specifier: ^4.3.4 + version: 4.3.4 + uuid: + specifier: ^9.0.0 + version: 9.0.0 + devDependencies: + eslint: + specifier: 8.50.0 + version: 8.50.0 + eslint-plugin-promise: + specifier: 6.1.1 + version: 6.1.1(eslint@8.50.0) + timekeeper: + specifier: 2.3.1 + version: 2.3.1 + typescript: + specifier: 5.2.2 + version: 5.2.2 + packages/message-handler: dependencies: '@veramo/core-types': @@ -1377,8 +1324,8 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 uuid: specifier: ^9.0.0 version: 9.0.0 @@ -1431,6 +1378,9 @@ importers: '@veramo/did-provider-key': specifier: workspace:* version: link:../did-provider-key + '@veramo/did-provider-peer': + specifier: workspace:^ + version: link:../did-provider-peer '@veramo/did-provider-pkh': specifier: workspace:* version: link:../did-provider-pkh @@ -1474,8 +1424,8 @@ importers: specifier: ^4.1.0 version: 4.1.0 ethr-did-resolver: - specifier: ^8.1.2 - version: 8.1.2 + specifier: ^10.1.0 + version: 10.1.0 path: specifier: npm:path-browserify version: /path-browserify@1.0.1 @@ -1506,13 +1456,13 @@ importers: devDependencies: '@babel/plugin-syntax-import-assertions': specifier: 7.22.5 - version: 7.22.5(@babel/core@7.22.9) + version: 7.22.5(@babel/core@7.23.6) '@babel/preset-typescript': - specifier: 7.22.5 - version: 7.22.5(@babel/core@7.22.9) + specifier: 7.23.0 + version: 7.23.0(@babel/core@7.23.6) '@craco/craco': specifier: 7.1.0 - version: 7.1.0(@types/node@20.6.2)(postcss@8.4.27)(react-scripts@5.0.1)(typescript@5.2.2) + version: 7.1.0(@types/node@20.8.2)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.2.2) '@types/eslint': specifier: ^8.4.6 version: 8.44.1 @@ -1529,8 +1479,8 @@ importers: specifier: 5.0.3 version: 5.0.3 '@types/node': - specifier: 20.6.2 - version: 20.6.2 + specifier: 20.8.2 + version: 20.8.2 '@types/react': specifier: 18.2.20 version: 18.2.20 @@ -1539,7 +1489,7 @@ importers: version: 18.2.7 babel-jest: specifier: 29.7.0 - version: 29.7.0(@babel/core@7.22.9) + version: 29.7.0(@babel/core@7.23.6) babel-preset-react-app: specifier: 10.0.1 version: 10.0.1 @@ -1548,10 +1498,10 @@ importers: version: 7.0.3 jest: specifier: 29.7.0 - version: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-config: specifier: 29.7.0 - version: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + version: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-environment-puppeteer: specifier: 9.0.0 version: 9.0.0 @@ -1563,16 +1513,16 @@ importers: version: 29.7.0 jest-puppeteer: specifier: 9.0.0 - version: 9.0.0(puppeteer@21.2.1) + version: 9.0.0(puppeteer@21.3.4) puppeteer: - specifier: 21.2.1 - version: 21.2.1(typescript@5.2.2) + specifier: 21.3.4 + version: 21.3.4(typescript@5.2.2) react-scripts: specifier: 5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2) + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2) ts-jest: specifier: 29.1.1 - version: 29.1.1(@babel/core@7.22.9)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2) + version: 29.1.1(@babel/core@7.23.6)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2) typescript: specifier: 5.2.2 version: 5.2.2 @@ -1632,18 +1582,12 @@ importers: packages/utils: dependencies: - '@ethersproject/signing-key': - specifier: ^5.7.0 - version: 5.7.0 - '@ethersproject/transactions': - specifier: ^5.7.0 - version: 5.7.0 + '@ipld/dag-pb': + specifier: ^4.0.5 + version: 4.0.5 '@noble/curves': specifier: ^1.1.0 version: 1.1.0 - '@noble/hashes': - specifier: ^1.3.1 - version: 1.3.1 '@veramo/core-types': specifier: workspace:^ version: link:../core-types @@ -1657,14 +1601,20 @@ importers: specifier: ^4.3.3 version: 4.3.4 did-jwt: - specifier: ^7.2.5 - version: 7.2.5 + specifier: ^7.4.1 + version: 7.4.1 did-jwt-vc: - specifier: ^3.2.5 - version: 3.2.5 + specifier: ^3.2.10 + version: 3.2.10 did-resolver: specifier: ^4.1.0 version: 4.1.0 + ethers: + specifier: ^6.9.0 + version: 6.9.0 + ipfs-unixfs: + specifier: ^11.1.0 + version: 11.1.0 multiformats: specifier: ^12.0.1 version: 12.0.1 @@ -1686,6 +1636,9 @@ packages: engines: {node: '>=0.10.0'} dev: true + /@adraffy/ens-normalize@1.10.0: + resolution: {integrity: sha512-nA9XHtlAkYfJxY7bce8DcN7eKxWWCWkU+1GR9d+U6MbNpfwQp8TI7vqOsBsMcHoT4mBu2kypKoSKnghEzOOq5Q==} + /@ampproject/remapping@2.2.1: resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -1714,7 +1667,7 @@ packages: /@babel/code-frame@7.10.4: resolution: {integrity: sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==} dependencies: - '@babel/highlight': 7.22.5 + '@babel/highlight': 7.23.4 dev: false optional: true @@ -1724,23 +1677,39 @@ packages: dependencies: '@babel/highlight': 7.22.5 + /@babel/code-frame@7.23.5: + resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': 7.23.4 + chalk: 2.4.2 + + /@babel/compat-data@7.22.5: + resolution: {integrity: sha512-4Jc/YuIaYqKnDDz892kPIledykKg12Aw1PYX5i/TY28anJtacvM1Rrr8wbieB9GfEJwlzqT0hUEao0CxEebiDA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/compat-data@7.22.9: resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==} engines: {node: '>=6.9.0'} + /@babel/compat-data@7.23.5: + resolution: {integrity: sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==} + engines: {node: '>=6.9.0'} + /@babel/core@7.20.12: resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.20.12) - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.20.12) - '@babel/helpers': 7.22.6 - '@babel/parser': 7.22.7 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.20.12) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 + '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4 @@ -1757,13 +1726,13 @@ packages: dependencies: '@ampproject/remapping': 2.2.1 '@babel/code-frame': 7.22.5 - '@babel/generator': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.5) - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.5) - '@babel/helpers': 7.22.6 - '@babel/parser': 7.22.7 + '@babel/generator': 7.22.5 + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) + '@babel/helper-module-transforms': 7.22.5 + '@babel/helpers': 7.22.5 + '@babel/parser': 7.22.5 '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 + '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 convert-source-map: 1.9.0 debug: 4.3.4 @@ -1796,7 +1765,29 @@ packages: transitivePeerDependencies: - supports-color - /@babel/eslint-parser@7.19.1(@babel/core@7.22.9)(eslint@8.49.0): + /@babel/core@7.23.6: + resolution: {integrity: sha512-FxpRyGjrMJXh7X3wGLGhNDCRiwpWEF74sKjTLDJSG5Kyvow3QZaG0Adbqzi9ZrVjTWpsX+2cxWXD71NMg93kdw==} + engines: {node: '>=6.9.0'} + dependencies: + '@ampproject/remapping': 2.2.1 + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helpers': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + convert-source-map: 2.0.0 + debug: 4.3.4 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + /@babel/eslint-parser@7.19.1(@babel/core@7.22.9)(eslint@8.55.0): resolution: {integrity: sha512-AqNf2QWt1rtu2/1rLswy6CDP7H9Oh3mMhk177Y67Rg8d7RD9WfOLLv8CGn6tisFvS2htm86yIe1yLF6I1UDaGQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: @@ -1805,11 +1796,21 @@ packages: dependencies: '@babel/core': 7.22.9 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.49.0 + eslint: 8.55.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 dev: true + /@babel/generator@7.22.5: + resolution: {integrity: sha512-+lcUbnTRhd0jOewtFSedLyiPsD5tswKkbgcezOqqWFUVNEwoUTlpPOBmvhG7OXWLR4jMdv0czPGH5XbflnD1EA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.22.5 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.18 + jsesc: 2.5.2 + dev: true + /@babel/generator@7.22.9: resolution: {integrity: sha512-KtLMbmicyuK2Ak/FTCJVbDnkN1SlT8/kceFTiuDiiRUUSMnHMidxSCdG4ndkTOHHpoomWe/4xkvHkEOncwjYIw==} engines: {node: '>=6.9.0'} @@ -1819,6 +1820,15 @@ packages: '@jridgewell/trace-mapping': 0.3.18 jsesc: 2.5.2 + /@babel/generator@7.23.6: + resolution: {integrity: sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.6 + '@jridgewell/gen-mapping': 0.3.3 + '@jridgewell/trace-mapping': 0.3.20 + jsesc: 2.5.2 + /@babel/helper-annotate-as-pure@7.22.5: resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} engines: {node: '>=6.9.0'} @@ -1833,23 +1843,51 @@ packages: '@babel/types': 7.22.5 dev: true - /@babel/helper-builder-binary-assignment-operator-visitor@7.22.5: - resolution: {integrity: sha512-m1EP3lVOPptR+2DwD125gziZNcmoNSHGmJROKoy87loWUQyJaVXDgpmruWqDARZSmtYQ+Dl25okU8+qhVzuykw==} + /@babel/helper-builder-binary-assignment-operator-visitor@7.22.15: + resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/types': 7.23.6 dev: false - /@babel/helper-compilation-targets@7.22.9(@babel/core@7.20.12): - resolution: {integrity: sha512-7qYrNM6HjpnPHJbopxmb8hSPoZ0gsX8IvUS32JGVoy+pU9e5N0nLr1VjJoR6kA4d9dmGLxNYOjeB8sUDal2WMw==} + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.20.12): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.20.12 '@babel/helper-validator-option': 7.22.5 - browserslist: 4.21.10 + browserslist: 4.21.7 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.5): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.7 + lru-cache: 5.1.1 + semver: 6.3.1 + dev: true + + /@babel/helper-compilation-targets@7.22.5(@babel/core@7.22.9): + resolution: {integrity: sha512-Ji+ywpHeuqxB8WDxraCiqR0xfhYjiDE/e6k7FuIaANnoOFxAHskHChz4vA1mJC9Lbm01s1PVAGhQY4FUKSkGZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/compat-data': 7.22.5 + '@babel/core': 7.22.9 + '@babel/helper-validator-option': 7.22.5 + browserslist: 4.21.7 lru-cache: 5.1.1 semver: 6.3.1 dev: true @@ -1881,8 +1919,18 @@ packages: lru-cache: 5.1.1 semver: 6.3.1 - /@babel/helper-create-class-features-plugin@7.22.1(@babel/core@7.22.5): - resolution: {integrity: sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==} + /@babel/helper-compilation-targets@7.23.6: + resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/helper-validator-option': 7.23.5 + browserslist: 4.22.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1891,34 +1939,31 @@ packages: '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.3 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.22.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.5) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - transitivePeerDependencies: - - supports-color dev: true - /@babel/helper-create-class-features-plugin@7.22.1(@babel/core@7.22.9): - resolution: {integrity: sha512-SowrZ9BWzYFgzUMwUmowbPSGu6CXL5MSuuCkG3bejahSpSymioPmuLdhPxNOc9MjuNGjy7M/HaXvJ8G82Lywlw==} + /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.3 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/helper-replace-supers': 7.22.1 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 - transitivePeerDependencies: - - supports-color + dev: true /@babel/helper-create-class-features-plugin@7.22.9(@babel/core@7.22.5): resolution: {integrity: sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==} @@ -1955,6 +2000,60 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 semver: 6.3.1 + /@babel/helper-create-class-features-plugin@7.22.9(@babel/core@7.23.6): + resolution: {integrity: sha512-Pwyi89uO4YrGKxL/eNJ8lfEH55DnRloGPOseaA8NFNL6jAUnn+KccaISiFazCj5IolPPDjGSdzQzXVzODVRqUQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.22.9): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + + /@babel/helper-create-class-features-plugin@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cBXU1vZni/CpGF29iTu4YRbOZt3Wat6zCoMDxRF1MayiEc4URxOj31tT65HUM0CRpMowA3HCJaAOVOUnMf96cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + semver: 6.3.1 + dev: false + /@babel/helper-create-regexp-features-plugin@7.22.1(@babel/core@7.22.5): resolution: {integrity: sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==} engines: {node: '>=6.9.0'} @@ -1978,8 +2077,21 @@ packages: regexpu-core: 5.3.2 semver: 6.3.1 - /@babel/helper-create-regexp-features-plugin@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==} + /@babel/helper-create-regexp-features-plugin@7.22.1(@babel/core@7.23.6): + resolution: {integrity: sha512-WWjdnfR3LPIe+0EY8td7WmjhytxXtjKAEpnAxun/hkNiyOaPlvGK+NZaBFIdi9ndYV3Gav7BpFvtUwnaJlwi1w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + optional: true + + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.9): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -1990,6 +2102,18 @@ packages: semver: 6.3.1 dev: false + /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + regexpu-core: 5.3.2 + semver: 6.3.1 + dev: false + /@babel/helper-define-polyfill-provider@0.4.0(@babel/core@7.22.5): resolution: {integrity: sha512-RnanLx5ETe6aybRi1cO/edaRH+bNYWaryCEmjDDYyNr4wnSzyOp8T0dWipmqVHKEY3AbVKUom50AKSlj1zmKbg==} peerDependencies: @@ -2022,21 +2146,40 @@ packages: - supports-color dev: true - /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.9): - resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==} + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.22.9): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 debug: 4.3.4 lodash.debounce: 4.0.8 - resolve: 1.22.2 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/helper-define-polyfill-provider@0.4.4(@babel/core@7.23.6): + resolution: {integrity: sha512-QcJMILQCu2jm5TFPGA3lCpJJTeEP+mqeXooG/NZbg/h5FTFi6V0+99ahlRsW8/kRLyb24LZVCCiclDedhLKcBA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + debug: 4.3.4 + lodash.debounce: 4.0.8 + resolve: 1.22.8 transitivePeerDependencies: - supports-color dev: false + /@babel/helper-environment-visitor@7.22.20: + resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + engines: {node: '>=6.9.0'} + /@babel/helper-environment-visitor@7.22.5: resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==} engines: {node: '>=6.9.0'} @@ -2055,14 +2198,15 @@ packages: '@babel/template': 7.22.5 '@babel/types': 7.22.5 - /@babel/helper-hoist-variables@7.22.5: - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} + /@babel/helper-function-name@7.23.0: + resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.22.5 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 - /@babel/helper-member-expression-to-functions@7.22.3: - resolution: {integrity: sha512-Gl7sK04b/2WOb6OPVeNy9eFKeD3L6++CzL3ykPOWqTn08xgYYK0wz4TUh2feIImDXxcVW3/9WQ1NMKY66/jfZA==} + /@babel/helper-hoist-variables@7.22.5: + resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 @@ -2073,24 +2217,38 @@ packages: dependencies: '@babel/types': 7.22.5 + /@babel/helper-member-expression-to-functions@7.23.0: + resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + + /@babel/helper-module-imports@7.22.15: + resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/types': 7.23.0 + /@babel/helper-module-imports@7.22.5: resolution: {integrity: sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 - /@babel/helper-module-transforms@7.22.9(@babel/core@7.20.12): - resolution: {integrity: sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==} + /@babel/helper-module-transforms@7.22.5: + resolution: {integrity: sha512-+hGKDt/Ze8GFExiVHno/2dvG5IdstpzCq0y4Qc9OJ25D4q3pKfiIP/4Vp3/JvhDkLKsDK2api3q3fpIgiIF5bw==} engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0 dependencies: - '@babel/core': 7.20.12 '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-module-imports': 7.22.5 '@babel/helper-simple-access': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 + '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 + '@babel/types': 7.22.5 + transitivePeerDependencies: + - supports-color dev: true /@babel/helper-module-transforms@7.22.9(@babel/core@7.22.5): @@ -2120,11 +2278,60 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/helper-validator-identifier': 7.22.5 - /@babel/helper-optimise-call-expression@7.18.6: - resolution: {integrity: sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==} + /@babel/helper-module-transforms@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.6): + resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: true + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/helper-module-transforms@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-simple-access': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/helper-validator-identifier': 7.22.20 /@babel/helper-optimise-call-expression@7.22.5: resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} @@ -2166,30 +2373,53 @@ packages: - supports-color dev: true - /@babel/helper-remap-async-to-generator@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==} + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.22.9): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-wrap-function': 7.22.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 dev: false - /@babel/helper-replace-supers@7.22.1: - resolution: {integrity: sha512-ut4qrkE4AuSfrwHSps51ekR1ZY/ygrP1tp0WFm8oVq6nzc/hvfV/22JylndIbsf2U2M9LOMwiSddr6y+78j+OQ==} + /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.3 - '@babel/helper-optimise-call-expression': 7.18.6 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 - transitivePeerDependencies: - - supports-color + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-wrap-function': 7.22.20 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.22.9): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false + + /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.6): + resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + dev: false /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.5): resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} @@ -2199,7 +2429,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 dev: true @@ -2211,17 +2441,22 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-member-expression-to-functions': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 - /@babel/helper-simple-access@7.22.5: - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + /@babel/helper-replace-supers@7.22.9(@babel/core@7.23.6): + resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/types': 7.22.5 + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-member-expression-to-functions': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 - /@babel/helper-skip-transparent-expression-wrappers@7.20.0: - resolution: {integrity: sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==} + /@babel/helper-simple-access@7.22.5: + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} dependencies: '@babel/types': 7.22.5 @@ -2242,14 +2477,31 @@ packages: resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==} engines: {node: '>=6.9.0'} + /@babel/helper-string-parser@7.23.4: + resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==} + engines: {node: '>=6.9.0'} + + /@babel/helper-validator-identifier@7.22.20: + resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + engines: {node: '>=6.9.0'} + /@babel/helper-validator-identifier@7.22.5: resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.22.15: + resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/helper-validator-option@7.22.5: resolution: {integrity: sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==} engines: {node: '>=6.9.0'} + /@babel/helper-validator-option@7.23.5: + resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + engines: {node: '>=6.9.0'} + /@babel/helper-wrap-function@7.20.5: resolution: {integrity: sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==} engines: {node: '>=6.9.0'} @@ -2262,14 +2514,25 @@ packages: - supports-color dev: true - /@babel/helper-wrap-function@7.22.9: - resolution: {integrity: sha512-sZ+QzfauuUEfxSEjKFmi3qDSHgLsTPK/pEpoD/qonZKOtTPTLbf59oabPQ4rKekt9lFcj/hTZaOhWwFYrgjk+Q==} + /@babel/helper-wrap-function@7.22.20: + resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-function-name': 7.23.0 + '@babel/template': 7.22.15 + '@babel/types': 7.23.6 + dev: false + + /@babel/helpers@7.22.5: + resolution: {integrity: sha512-pSXRmfE1vzcUIDFQcSGA5Mr+GxBV9oiRKDuDxXvWQQBCh8HoIjs/2DlDB7H8smac1IVrB9/xdXj2N3Wol9Cr+Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/helper-function-name': 7.22.5 '@babel/template': 7.22.5 + '@babel/traverse': 7.22.5 '@babel/types': 7.22.5 - dev: false + transitivePeerDependencies: + - supports-color + dev: true /@babel/helpers@7.22.6: resolution: {integrity: sha512-YjDs6y/fVOYFV8hAf1rxd1QvR9wJe1pDBZ2AREKq/SDayfPzgk0PBnVuTCE5X1acEpMMNOVUqoe+OwiZGJ+OaA==} @@ -2281,6 +2544,16 @@ packages: transitivePeerDependencies: - supports-color + /@babel/helpers@7.23.6: + resolution: {integrity: sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 + transitivePeerDependencies: + - supports-color + /@babel/highlight@7.22.5: resolution: {integrity: sha512-BSKlD1hgnedS5XRnGOljZawtag7H1yPfQp0tdNJCHoH6AZ+Pcm9VvkrK59/Yy593Ypg0zMxH2BxD1VPYUQ7UIw==} engines: {node: '>=6.9.0'} @@ -2289,6 +2562,21 @@ packages: chalk: 2.4.2 js-tokens: 4.0.0 + /@babel/highlight@7.23.4: + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': 7.22.20 + chalk: 2.4.2 + js-tokens: 4.0.0 + + /@babel/parser@7.22.5: + resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.22.5 + /@babel/parser@7.22.7: resolution: {integrity: sha512-7NF8pOkHP5o2vpmGgNGcfAeCvOYhGLyA3Z4eBQkT1RJlWu47n63bCs93QfJ2hIAFCil7L5P2IWhs1oToVgrL0Q==} engines: {node: '>=6.0.0'} @@ -2296,6 +2584,13 @@ packages: dependencies: '@babel/types': 7.22.5 + /@babel/parser@7.23.6: + resolution: {integrity: sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==} + engines: {node: '>=6.0.0'} + hasBin: true + dependencies: + '@babel/types': 7.23.6 + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -2316,8 +2611,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==} + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -2326,6 +2621,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-iRkKcCqb7iGnq9+3G6rZ+Ciz5VywC4XNRHe57lKM+jOeYAoR0lVqdeeDRfh0tQcTfw/+vBhHn926FmQhLtlFLQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-6r4yRwEnorYByILoDRnEqxtojYKuiIv9FojW2E8GUKo9eWBwbKcd9IiZOZpdyXc64RmyGGyPu3/uAcrz/dq2kQ==} engines: {node: '>=6.9.0'} @@ -2334,7 +2640,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.22.3(@babel/core@7.22.5) dev: true @@ -2346,12 +2652,12 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-transform-optional-chaining': 7.22.3(@babel/core@7.22.9) dev: true - /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==} + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 @@ -2359,9 +2665,45 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.22.9) dev: false + /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-WwlxbfMNdVEpQjZmK5mhm7oSwD3dS6eU+Iwsi4Knl9wAletWem7kaRsGOG+8UEbRyqxY4SS5zvtfXwX+jMxUwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + dev: false + optional: true + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XaJak1qcityzrX0/IU5nKHb34VaibwP3saKqG6a/tppelgllOH13LUann4ZCIBcVOeE6H18K4Vx9QKkVww3z/w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.22.9): resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} engines: {node: '>=6.9.0'} @@ -2370,12 +2712,26 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.9) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) dev: false + /@babel/plugin-proposal-async-generator-functions@7.20.7(@babel/core@7.23.6): + resolution: {integrity: sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-async-generator-functions instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + dev: false + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} engines: {node: '>=6.9.0'} @@ -2383,10 +2739,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.9): @@ -2396,10 +2750,19 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: false /@babel/plugin-proposal-decorators@7.22.3(@babel/core@7.22.5): @@ -2409,39 +2772,65 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.5) '@babel/helper-split-export-declaration': 7.22.6 '@babel/plugin-syntax-decorators': 7.22.3(@babel/core@7.22.5) - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-proposal-decorators@7.22.7(@babel/core@7.22.9): - resolution: {integrity: sha512-omXqPF7Onq4Bb7wHxXjM3jSMSJvUUbvDvmmds7KI5n9Cq6Ln5I05I1W2nRlRof1rGdiUxJrxwe285WF96XlBXQ==} + /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.22.9): + resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.9) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.22.9) + dev: false + optional: true + + /@babel/plugin-proposal-decorators@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-D7Ccq9LfkBFnow3azZGJvZYgcfeqAw3I1e5LoTpj6UKIFQilh8yqXsIGcRIqbBdsPWIz+Ze7ZZfggSj62Qp+Fg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/helper-split-export-declaration': 7.22.6 - '@babel/plugin-syntax-decorators': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-decorators': 7.23.3(@babel/core@7.23.6) dev: false optional: true - /@babel/plugin-proposal-export-default-from@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-UCe1X/hplyv6A5g2WnQ90tnHRvYL29dabCWww92lO7VdfMVTVReBTRrhiMrKQejHD9oVkdnRdwYuzUZkBVQisg==} + /@babel/plugin-proposal-export-default-from@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-export-default-from': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.22.9) + dev: false + + /@babel/plugin-proposal-export-default-from@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-Q23MpLZfSGZL1kU7fWqV262q65svLSCIP5kZ/JCW/rKTCm/FrLjpvEd2kfUYMVeHh4QhV/xzyoRAHWrAZJrE3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.6) dev: false /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.22.9): @@ -2455,6 +2844,18 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-proposal-export-namespace-from@7.18.9(@babel/core@7.23.6): + resolution: {integrity: sha512-k1NtHyOMvlDDFeb9G5PhUXuGj8m/wiwojgQVEhJ/fsVsMCpLyOP4h0uGEjYJKrRI+EVPlb5Jk+Gt9P97lOGwtA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} engines: {node: '>=6.9.0'} @@ -2477,6 +2878,17 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + dev: false + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} engines: {node: '>=6.9.0'} @@ -2499,6 +2911,17 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) dev: false + /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + dev: false + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.22.9): resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} engines: {node: '>=6.9.0'} @@ -2506,12 +2929,27 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.23.5 '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.22.9) + dev: false + + /@babel/plugin-proposal-object-rest-spread@7.20.7(@babel/core@7.23.6): + resolution: {integrity: sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-object-rest-spread instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) dev: false /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.22.9): @@ -2526,6 +2964,18 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-proposal-optional-catch-binding@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==} + engines: {node: '>=6.9.0'} + deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-catch-binding instead. + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + dev: false + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} engines: {node: '>=6.9.0'} @@ -2534,7 +2984,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) dev: true @@ -2546,10 +2996,22 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.6): + resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + dev: false + /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==} engines: {node: '>=6.9.0'} @@ -2557,10 +3019,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9): @@ -2572,6 +3032,16 @@ packages: '@babel/core': 7.22.9 dev: false + /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6): + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + dev: false + optional: true + /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.5): resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==} engines: {node: '>=6.9.0'} @@ -2580,11 +3050,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.9): @@ -2595,11 +3063,9 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-proposal-unicode-property-regex@7.18.6(@babel/core@7.22.5): @@ -2622,6 +3088,7 @@ packages: '@babel/core': 7.22.9 '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 + dev: true /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.20.12): resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} @@ -2649,6 +3116,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.6): + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} peerDependencies: @@ -2667,6 +3142,15 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true + /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.20.12): resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} peerDependencies: @@ -2693,6 +3177,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.6): + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.5): resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} engines: {node: '>=6.9.0'} @@ -2712,6 +3204,17 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-syntax-decorators@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-R16Zuge73+8/nLcDjkIpyhi5wIbN7i7fiuLJR8yQX7vPAa/ltUKtd3iLbb4AgP5nrLi91HnNUNosELIGUGH1bg==} engines: {node: '>=6.9.0'} @@ -2722,8 +3225,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-decorators@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-avpUOBS7IU6al8MmF1XpAyj9QYeLPuSDJI5D4pVMSMdL7xQokKqJPYQC67RCT0aCTashUXPiGwMJ0DEXXCEmMA==} + /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2733,6 +3236,17 @@ packages: dev: false optional: true + /@babel/plugin-syntax-decorators@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-cf7Niq4/+/juY67E0PbgH0TDhLQ5J7zS8C/Q5FFx+DWyrRa9sUQdTXkjqKu8zGvuqr7vw1muKiukseihU+PJDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: @@ -2750,8 +3264,17 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - /@babel/plugin-syntax-export-default-from@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-ODAqWWXB/yReh/jVQDag/3/tl6lgBueQkk/TcfW/59Oykm4c8a55XloX0CTk2k2VJiFWMgHby9xNX29IbCv9dQ==} + /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-export-default-from@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2760,6 +3283,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-syntax-export-default-from@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KeENO5ck1IeZ/l2lFZNy+mpobV3D2Zy5C1YFnWm+YuY5mQiAWc4yAp13dqgguwsBsFVLh4LPCEqCa5qW13N+hw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.5): resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} peerDependencies: @@ -2777,6 +3310,16 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} engines: {node: '>=6.9.0'} @@ -2787,14 +3330,24 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==} + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-flow@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YZiAIpkJAwQXBJLIQbRFayR5c+gJ35Vcz3bg954k7cd73zqjvhacJuL9RbrzPz8qPmZdgqP6EUKwy0PCNhaaPA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} @@ -2814,6 +3367,38 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-import-assertions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lPgDSU+SJLK3xmFDTV2ZRQAiM7UuUjGidwBywFavObCiZc1BeAAcMtHJKUya92hPHO+at63JJPLygilZard8jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true /@babel/plugin-syntax-import-attributes@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-i35jZJv6aO7hxEbIWQ41adVfOzjm9dcYDNeWlBMd8p0ZQRtNUCBrmGwZt+H5lb+oOC9a3svp956KP0oWGA1YsA==} @@ -2835,8 +3420,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==} + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2845,6 +3430,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-syntax-import-attributes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-pawnE0P9g10xgoP7yKr6CK63K2FMsTE+FZidZO/1PwRdzmAPVs+HS1mAURUsgaoxammTJvULUdIkEK0gOcU2tA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -2871,6 +3467,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} peerDependencies: @@ -2897,6 +3501,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} engines: {node: '>=6.9.0'} @@ -2915,6 +3527,36 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-jsx@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} @@ -2942,6 +3584,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} peerDependencies: @@ -2968,6 +3618,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.20.12): resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} peerDependencies: @@ -2994,6 +3652,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} peerDependencies: @@ -3020,6 +3686,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} peerDependencies: @@ -3046,6 +3720,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.20.12): resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} peerDependencies: @@ -3072,6 +3754,14 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.5): resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} engines: {node: '>=6.9.0'} @@ -3091,6 +3781,16 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.20.12): resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} engines: {node: '>=6.9.0'} @@ -3120,6 +3820,15 @@ packages: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.6): + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} engines: {node: '>=6.9.0'} @@ -3138,6 +3847,37 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: true + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-syntax-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-9EiNjVJOMwCO+43TqoTrgQ8jMwcAd0sWyXi9RPfIsLTj4R2MADDDQXELhffaUx/uJv2AYcxBgPwH6j4TIA4ytQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} @@ -3160,6 +3900,18 @@ packages: '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 + /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.6): + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.1(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-transform-arrow-functions@7.21.5(@babel/core@7.22.5): resolution: {integrity: sha512-wb1mhwGOCaXHDTcsRYMKF9e5bbMgqwxtqa2Y1ifH96dXJPwbuLX9qHy3clhrxVqgMz7nyNXs8VkxdH8UBcjKqA==} engines: {node: '>=6.9.0'} @@ -3180,8 +3932,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==} + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3190,6 +3942,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-arrow-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-NzQcQrzaQPkaEwoTm4Mhyl8jI1huEL/WWIEvudjTCMJ9aBZNpsJbMASx7EQECtQQPS/DcnFpo0FIh3LvEO9cxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-async-generator-functions@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-36A4Aq48t66btydbZd5Fk0/xJqbpg/v4QWI4AH4cYHBXy9Mu42UOupZpebKFiCFNT9S9rJFcsld0gsv0ayLjtA==} engines: {node: '>=6.9.0'} @@ -3220,19 +3982,33 @@ packages: - supports-color dev: true - /@babel/plugin-transform-async-generator-functions@7.22.7(@babel/core@7.22.9): - resolution: {integrity: sha512-7HmE7pk/Fmke45TODvxvkxRMV9RazV+ZZzhOL9AG8G29TLrr3jkjwF7uJfxZ30EoXpO+LJkq4oA8NjO2DTnEDg==} + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-environment-visitor': 7.22.20 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.9) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-async-generator-functions@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-efdkfPhHYTtn0G6n2ddrESE91fgXxjlqLsnUtPWnJs4a4mZIbUaK7ffqKIIUKXSHwcDvaCVX6GXkaJJFqtX7jw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-async-to-generator@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==} engines: {node: '>=6.9.0'} @@ -3261,16 +4037,28 @@ packages: - supports-color dev: true - /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==} + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.22.9) + dev: false + + /@babel/plugin-transform-async-to-generator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-A7LFsKi4U4fomjqXJlZg/u0ft/n8/7n7lpffUP/ZULx/DtV9SGlNKZolHH6PE8Xl1ngCc0M11OaeZptXVkfKSw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-remap-async-to-generator': 7.22.9(@babel/core@7.22.9) + '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.6) dev: false /@babel/plugin-transform-block-scoped-functions@7.18.6(@babel/core@7.22.5): @@ -3293,8 +4081,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==} + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3303,6 +4091,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-block-scoped-functions@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vI+0sIaPIO6CNuM9Kk5VmXcMVRiOpDh7w2zZt9GXzmE/9KD70CUEVhvPR/etAeNK/FAEkhxQtXOzVF3EuRL41A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-block-scoping@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==} engines: {node: '>=6.9.0'} @@ -3323,8 +4121,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-block-scoping@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-EcACl1i5fSQ6bt+YGuU/XGCeZKStLmyVGytWkpyhCLeQVA0eu6Wtiw92V+I1T/hnezUv7j74dA/Ro69gWcU+hg==} + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3333,6 +4131,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-block-scoping@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-0QqbP6B6HOh7/8iNR4CQU2Th/bbRtBp4KS9vcaZd1fZ0wSh5Fyssg0UCIHwxh+ka+pNDREbVLQnHCMHKZfPwfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-class-properties@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-mASLsd6rhOrLZ5F3WbCxkzl67mmOnqik0zrg5W6D/X0QMW7HtvnoL1dRARLKIbMP3vXwkwziuLesPqWVGIl6Bw==} engines: {node: '>=6.9.0'} @@ -3340,10 +4148,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-class-properties@7.22.3(@babel/core@7.22.9): @@ -3353,22 +4159,32 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==} + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-class-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-uM+AN8yCIjDPccsKGlw271xjJtGii+xQIF/uMPS8H15L12jZTsLfF4o5vNO7d/oUguOyfdikHGc/yi9ge4SGIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false + optional: true /@babel/plugin-transform-class-static-block@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-5BirgNWNOx7cwbTJCOmKFJ1pZjwk5MUfMIwiBBvsirCJMZeQgs5pk6i1OlkVg+1Vef5LfBahFOrdCnAWvkVKMw==} @@ -3377,11 +4193,9 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.5) - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-class-static-block@7.22.3(@babel/core@7.22.9): @@ -3391,25 +4205,36 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-class-static-block@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==} + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-class-static-block@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-nsWu/1M+ggti1SOALj3hfx5FXzAY06fwPJsUZD4/A5e1bWi46VUIWtD+kOX6/IdhXGsXBWllLFDSnqSCdUNydQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-classes@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==} engines: {node: '>=6.9.0'} @@ -3418,16 +4243,14 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.5) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-classes@7.21.0(@babel/core@7.22.9): @@ -3438,32 +4261,48 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.9) '@babel/helper-environment-visitor': 7.22.5 '@babel/helper-function-name': 7.22.5 - '@babel/helper-optimise-call-expression': 7.18.6 + '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.1 + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-classes@7.22.6(@babel/core@7.22.9): - resolution: {integrity: sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==} + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.22.9): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) - '@babel/helper-environment-visitor': 7.22.5 - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 '@babel/helper-optimise-call-expression': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.9) + '@babel/helper-split-export-declaration': 7.22.6 + globals: 11.12.0 + dev: false + + /@babel/plugin-transform-classes@7.23.5(@babel/core@7.23.6): + resolution: {integrity: sha512-jvOTR4nicqYC9yzOHIhXG5emiFEOpappSJAl73SDSEDcybD+Puuze8Tnpb9p9qEyYup24tq891gkaygIFvWDqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) '@babel/helper-split-export-declaration': 7.22.6 globals: 11.12.0 dev: false @@ -3490,15 +4329,26 @@ packages: '@babel/template': 7.22.5 dev: true - /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==} + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/template': 7.22.5 + '@babel/template': 7.22.15 + dev: false + + /@babel/plugin-transform-computed-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-dTj83UVTLw/+nbiHqQSFdwO9CbTtwq1DsDqm3CUEtDrZNET5rT5E6bIdTlOftDTDLMYxvxHNEYO4B9SLl8SLZw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/template': 7.22.15 dev: false /@babel/plugin-transform-destructuring@7.21.3(@babel/core@7.22.5): @@ -3521,8 +4371,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-destructuring@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-GfqcFuGW8vnEqTUBM7UtPd5A4q797LTvvwKxXTgRsFjoqaJiEg9deBG6kWeQYkVEL569NpnmpC0Pkr/8BLKGnQ==} + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3531,6 +4381,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-destructuring@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-n225npDqjDIr967cMScVKHXJs7rout1q+tt50inyBCPkyZ8KxeI6d+GIbSBTT/w/9WdlWDOej3V9HE5Lgk57gw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-dotall-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==} engines: {node: '>=6.9.0'} @@ -3553,16 +4413,28 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==} + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-dotall-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vgnFYDHAKzFaTVp+mneDsIEbnJ2Np/9ng9iviHw3P/KVcgONxpNULEW/51Z/BaFojG2GI2GwwXck5uV1+1NOYQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false + optional: true /@babel/plugin-transform-duplicate-keys@7.18.9(@babel/core@7.22.5): resolution: {integrity: sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==} @@ -3584,8 +4456,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==} + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3594,6 +4466,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-duplicate-keys@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-RrqQ+BQmU3Oyav3J+7/myfvRCq7Tbz+kKLLshUmMwNlDHExbGL7ARhajvoBJEvc+fCguPPu887N+3RRXBVKZUA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-transform-dynamic-import@7.22.1(@babel/core@7.22.5): resolution: {integrity: sha512-rlhWtONnVBPdmt+jeewS0qSnMz/3yLFrqAP8hHC6EDcrYRSyuz9f9yQhHvVn2Ad6+yO9fHXac5piudeYrInxwQ==} engines: {node: '>=6.9.0'} @@ -3616,8 +4499,8 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-dynamic-import@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==} + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3627,6 +4510,18 @@ packages: '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-dynamic-import@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-V6jIbLhdJK86MaLh4Jpghi8ho5fGzt3imHOBu/x0jlBaPYqDoWz4RDXjmMOfnh+JWNaQleEAByZLV0QzBT4YQQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-exponentiation-operator@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==} engines: {node: '>=6.9.0'} @@ -3649,16 +4544,28 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==} + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.5 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-exponentiation-operator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-5fhCsl1odX96u7ILKHBj4/Y8vipoqwsJMh4csSA8qFfxrZDEA4Ssku2DyNvMJSmZNOEBT750LfFPbtrnTP90BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 dev: false + optional: true /@babel/plugin-transform-export-namespace-from@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-5Ti1cHLTDnt3vX61P9KZ5IG09bFXp4cDVFJIAeCZuxu9OXXJJZp5iP0n/rzM2+iAutJY+KWEyyHcRaHlpQ/P5g==} @@ -3682,8 +4589,8 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-export-namespace-from@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==} + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3693,6 +4600,18 @@ packages: '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-export-namespace-from@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-GzuSBcKkx62dGzZI1WVgTWvkkz84FZO5TC5T8dl/Tht/rAla6Dg/Mz9Yhypg+ezVACf/rgDuQt3kbWEv7LdUDQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-flow-strip-types@7.21.0(@babel/core@7.22.5): resolution: {integrity: sha512-FlFA2Mj87a6sDkW4gfGrQQqwY/dLlBAyJa2dJEZ+FHXUVHBflO2wyKvg+OOEzXfrKYIa4HWl0mgmbCzt0cMb7w==} engines: {node: '>=6.9.0'} @@ -3704,15 +4623,26 @@ packages: '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.5) dev: true - /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==} + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.22.9) + dev: false + + /@babel/plugin-transform-flow-strip-types@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-26/pQTf9nQSNVJCrLB1IkHUKyPxR+lMrH2QDPG89+Znu9rAMbtrybdbWeE9bb7gzjmE5iXHEY+e0HUwM6Co93Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) dev: false /@babel/plugin-transform-for-of@7.21.5(@babel/core@7.22.5): @@ -3735,14 +4665,26 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-for-of@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==} + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.22.9): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + + /@babel/plugin-transform-for-of@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-aYH4ytZ0qSuBbpfhuofbg/e96oQ7U2w1Aw/UQmKT+1l39uEhUPoFS3fHevDc1G0OvewyDudfMKY1OulczHzWIw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false /@babel/plugin-transform-function-name@7.18.9(@babel/core@7.22.5): @@ -3752,7 +4694,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -3764,20 +4706,32 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.9) '@babel/helper-function-name': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==} + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) - '@babel/helper-function-name': 7.22.5 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-function-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-I1QXp1LxIvt8yLaib49dRW5Okt7Q4oaxao6tFVKS/anCdEOMtYwWVKoiOA1p34GOWIZjUK0E+zCp7+l1pfQyiw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-function-name': 7.23.0 '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -3803,8 +4757,8 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-json-strings@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==} + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3814,6 +4768,18 @@ packages: '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-json-strings@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-81nTOqM1dMwZ/aRXQ59zVubN9wHGqk6UtqRK+/q+ciXmRy8fSolhGVvG09HHRGo4l6fr/c4ZhXUQH0uFW7PZbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-literals@7.18.9(@babel/core@7.22.5): resolution: {integrity: sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==} engines: {node: '>=6.9.0'} @@ -3834,8 +4800,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==} + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3844,6 +4810,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wZ0PIXRxnwZvl9AYpqNUxpZ5BiTGrYt7kueGQ+N5FiQ7RCOD4cm8iShd6S6ggfVIWaJf2EMk8eRzAh52RfP4rQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-logical-assignment-operators@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-CbayIfOw4av2v/HYZEsH+Klks3NC2/MFIR3QR8gnpGNNPEaq2fdlVCRYG/paKs7/5hvBLQ+H70pGWOHtlNEWNA==} engines: {node: '>=6.9.0'} @@ -3866,8 +4842,8 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-logical-assignment-operators@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==} + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3877,6 +4853,18 @@ packages: '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-logical-assignment-operators@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-Mc/ALf1rmZTP4JKKEhUwiORU+vcfarFVLfcFiolKUo6sewoxSEgl36ak5t+4WamRsNr6nzjZXQjM35WsU+9vbg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-member-expression-literals@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-qSF1ihLGO3q+/g48k85tUjD033C29TNTVB2paCwZPVmOsjn9pClvYYrM2VeJpBY2bcNkuny0YUyTNRyRxJ54KA==} engines: {node: '>=6.9.0'} @@ -3897,8 +4885,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==} + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -3907,6 +4895,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-member-expression-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-sC3LdDBDi5x96LA+Ytekz2ZPk8i/Ck+DEuDbRAll5rknJ5XRTSaPKEYwomLcs1AA8wg9b3KjIQRsnApj+q51Ag==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-modules-amd@7.20.11(@babel/core@7.22.5): resolution: {integrity: sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==} engines: {node: '>=6.9.0'} @@ -3929,16 +4927,28 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==} + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-amd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-vJYQGxeKM4t8hYCKVBlZX/gtIY2I7mRGFNcm85sgXGMTBcoV3QdVtdpbcWEbzbfUIUZKwvgFT82mRvaQIebZzw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false + optional: true /@babel/plugin-transform-modules-commonjs@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==} @@ -3963,6 +4973,54 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-simple-access': 7.22.5 + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.5 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.6): + resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: true + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-commonjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-aVS0F65LKsdNOtcz6FRCpE4OgsP2OFnW46qNxNIX9h3wuzaNcSQsJysuMwqSibC98HPrf2vCgtxKNwS0DAlgcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-simple-access': 7.22.5 + dev: false + /@babel/plugin-transform-modules-systemjs@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-V21W3bKLxO3ZjcBJZ8biSvo5gQ85uIXW2vJfh7JSWf/4SLUSr1tOoHX3ruN4+Oqa2m+BKfsxTR1I+PsvkIWvNw==} engines: {node: '>=6.9.0'} @@ -3989,18 +5047,32 @@ packages: '@babel/helper-validator-identifier': 7.22.5 dev: true - /@babel/plugin-transform-modules-systemjs@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==} + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + dev: false + + /@babel/plugin-transform-modules-systemjs@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ZxyKGTkF9xT9YJuKQRo19ewf3pXpopuYQd8cDXqNzc3mUNbOME0RKMoZxviQk74hwzfQsEe66dE92MaZbdHKNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-identifier': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 dev: false + optional: true /@babel/plugin-transform-modules-umd@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==} @@ -4024,16 +5096,28 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==} + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-module-transforms': 7.22.9(@babel/core@7.22.9) + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-modules-umd@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-zHsy9iXX2nIsCBFPud3jKn1IRPWg3Ing1qOZgeKV39m1ZgIdpJqvlWVeiHBZC6ITRG0MfskhYe9cLgntfSFPIg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-transforms': 7.23.3(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false + optional: true /@babel/plugin-transform-named-capturing-groups-regex@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-c6HrD/LpUdNNJsISQZpds3TXvfYIAbo+efE9aWmY/PmSRD0agrJ9cPMt4BmArwUQ7ZymEWTFjTyp+yReLJZh0Q==} @@ -4064,7 +5148,18 @@ packages: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.6): + resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -4088,8 +5183,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==} + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4098,6 +5193,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-new-target@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-YJ3xKqtJMAT5/TIZnpAR3I+K+WaDowYbN3xyxI8zxx/Gsypwf9B9h0VB+1Nh6ACAAPRS5NSRje0uVv5i79HYGQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-transform-nullish-coalescing-operator@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-CpaoNp16nX7ROtLONNuCyenYdY/l7ZsR6aoVa7rW7nMWisoNoQNIH5Iay/4LDyRjKMuElMqXiBoOQCDLTMGZiw==} engines: {node: '>=6.9.0'} @@ -4120,8 +5226,8 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-nullish-coalescing-operator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==} + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4131,6 +5237,18 @@ packages: '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-nullish-coalescing-operator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-jHE9EVVqHKAQx+VePv5LLGHjmHSJR76vawFPTdlxR/LVJPfOEGxREQwQfjuZEOPTwG92X3LINSh3M40Rv4zpVA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-numeric-separator@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-+AF88fPDJrnseMh5vD9+SH6wq4ZMvpiTMHh58uLs+giMEyASFVhcT3NkoyO+NebFCNnpHJEq5AXO2txV4AGPDQ==} engines: {node: '>=6.9.0'} @@ -4153,8 +5271,8 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-numeric-separator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==} + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4164,15 +5282,27 @@ packages: '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-numeric-separator@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-mps6auzgwjRrwKEZA05cOwuDc9FAzoyFS4ZsG/8F43bTLf/TgkJg7QXOrPO1JO599iA3qgK9MXdMGOEC8O1h6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-object-rest-spread@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-38bzTsqMMCI46/TQnJwPPpy33EjLCc1Gsm2hRTF6zTMWnKsN61vdrpuzIEGQyKEhDSYDKyZHrrd5FMj4gcUHhw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.5) '@babel/plugin-transform-parameters': 7.22.3(@babel/core@7.22.5) @@ -4184,27 +5314,42 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) '@babel/plugin-transform-parameters': 7.22.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-object-rest-spread@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==} + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.23.5 '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.22.9) + dev: false + + /@babel/plugin-transform-object-rest-spread@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) dev: false + optional: true /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==} @@ -4214,9 +5359,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.1 - transitivePeerDependencies: - - supports-color + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.5) dev: true /@babel/plugin-transform-object-super@7.18.6(@babel/core@7.22.9): @@ -4227,20 +5370,29 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.1 - transitivePeerDependencies: - - supports-color + '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==} + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.9) + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.22.9) + dev: false + + /@babel/plugin-transform-object-super@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-BwQ8q0x2JG+3lxCVFohg+KbQM7plfpBwThdW9A6TMtWwLsbDA01Ek2Zb/AgDN39BiZsExm4qrXxjk+P1/fzGrA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.6) dev: false /@babel/plugin-transform-optional-catch-binding@7.22.3(@babel/core@7.22.5): @@ -4265,8 +5417,8 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-optional-catch-binding@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==} + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4276,6 +5428,18 @@ packages: '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-optional-catch-binding@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-XIq8t0rJPHf6Wvmbn9nFxU6ao4c7WhghTR5WyV8SrJfUFzyxhCm4nhC+iAp3HFhbAKLfYpgzhJ6t4XCtVwqO5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-optional-chaining@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-63v3/UFFxhPKT8j8u1jTTGVyITxl7/7AfOqK8C5gz1rHURPUGe3y5mvIf68eYKGoBNahtJnTxBKug4BQOnzeJg==} engines: {node: '>=6.9.0'} @@ -4284,7 +5448,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.5) dev: true @@ -4296,12 +5460,12 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-optional-chaining@7.22.6(@babel/core@7.22.9): - resolution: {integrity: sha512-Vd5HiWml0mDVtcLHIoEU5sw6HOUW/Zk0acLs/SAeuLzkGNOPc9DB4nkUajemhCmTIz3eiaKREZn2hQQqF79YTg==} + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4312,6 +5476,19 @@ packages: '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-optional-chaining@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-ZU8y5zWOfjM5vZ+asjgAPwDaBjJzgufjES89Rs4Lpq63O300R/kOz30WCLo6BxxX6QVEilwSlpClnG5cZaikTA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + dev: false + optional: true + /@babel/plugin-transform-parameters@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-x7QHQJHPuD9VmfpzboyGJ5aHEr9r7DsAsdxdhJiTB3J3j8dyl+NFZ+rX5Q2RWFDCs61c06qBfS4ys2QYn8UkMw==} engines: {node: '>=6.9.0'} @@ -4332,8 +5509,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-parameters@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==} + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4342,6 +5519,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-parameters@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-09lMt6UsUb3/34BbECKVbVwrT9bO6lILWln237z7sLaWnMsTi7Yc9fhX5DLpkJzAGfaReXI22wP41SZmnAA3Vw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-private-methods@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-fC7jtjBPFqhqpPAE+O4LKwnLq7gGkD3ZmC2E3i4qWH34mH3gOg2Xrq5YMHUq6DM30xhqM1DNftiRaSqVjEG+ug==} engines: {node: '>=6.9.0'} @@ -4349,10 +5536,8 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-private-methods@7.22.3(@babel/core@7.22.9): @@ -4362,20 +5547,29 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==} + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-private-methods@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-UzqRcRtWsDMTLrRWFvUBDwmw06tCQH9Rl1uAjfh6ijMSmGYQ+fpdB+cnqRC8EMh5tuuxSv0/TejGL+7vyj+50g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -4387,11 +5581,9 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.5) - transitivePeerDependencies: - - supports-color dev: true /@babel/plugin-transform-private-property-in-object@7.22.3(@babel/core@7.22.9): @@ -4402,26 +5594,37 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.1(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) - transitivePeerDependencies: - - supports-color dev: true - /@babel/plugin-transform-private-property-in-object@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==} + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) dev: false + /@babel/plugin-transform-private-property-in-object@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-9G3K1YqTq3F4Vt88Djx1UZ79PDyj+yKRnUy7cZGSMe+a7jkwD259uKKuUzQlPkGam7R+8RJwh5z4xO27fA1o2A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + dev: false + /@babel/plugin-transform-property-literals@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-cYcs6qlgafTud3PAzrrRNbQtfpQ8+y/+M5tKmksS9+M1ckbH6kzY8MrexEM9mcA6JDsukE19iIRvAyYl463sMg==} engines: {node: '>=6.9.0'} @@ -4442,8 +5645,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==} + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4452,6 +5655,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-property-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-jR3Jn3y7cZp4oEWPFAlRsSWjxKe4PZILGBSd4nis1TsC5qeSpb+nrtihJuDhNI7QHiVbUaiXa0X2RZY3/TI6Nw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-react-constant-elements@7.20.2(@babel/core@7.22.9): resolution: {integrity: sha512-KS/G8YI8uwMGKErLFOHS/ekhqdHhpEloxs43NecQHVgo2QuQSyJhGIY1fL8UGl9wy5ItVwwoUL4YxVqsplGq2g==} engines: {node: '>=6.9.0'} @@ -4482,8 +5695,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==} + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4492,6 +5705,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-react-display-name@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-GnvhtVfA2OAtzdX58FJxU19rhoGeQzyVndw3GgtdECQvQFXPEZIOVULHVZGAYmOgmqjXpVpfocAbSjh99V/Fqw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-react-jsx-development@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==} engines: {node: '>=6.9.0'} @@ -4512,8 +5735,8 @@ packages: '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.9) dev: true - /@babel/plugin-transform-react-jsx-self@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-nTh2ogNUtxbiSbxaT4Ds6aXnXEipHweN9YRgOX/oNXdf0cCrGn/+2LozFa3lnPV5D90MkjhgckCPBrsoSc1a7g==} + /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4522,8 +5745,18 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-react-jsx-source@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-yIiRO6yobeEIaI0RTbIr8iAK9FcBHLtZq0S89ZPjDLQXBA4xvghaKqI0etp/tF3htTM0sazJKKLz9oEiGRtu7w==} + /@babel/plugin-transform-react-jsx-self@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-qXRvbeKDSfwnlJnanVRp0SfuWE5DQhwQr5xtLBzp56Wabyo+4CMosF6Kfp+eOD/4FYpql64XVJ2W0pVLlJZxOQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4532,6 +5765,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-react-jsx-source@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-91RS0MDnAWDNvGC6Wio5XYkyWI39FMFO+JK9+4AlgaTH+yWwVTsw7/sn6LK0lH7c5F+TFkpv/3LfCJ1Ydwof/g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-react-jsx@7.22.5(@babel/core@7.22.5): resolution: {integrity: sha512-rog5gZaVbUip5iWDMTYbVM15XQq+RkUKhET/IHR6oizR+JEoN6CAfTTuHcK4vwUyzca30qqHqEpzBOnaRMWYMA==} engines: {node: '>=6.9.0'} @@ -4558,6 +5801,34 @@ packages: '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) '@babel/types': 7.22.5 + dev: true + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.22.9): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.22.9) + '@babel/types': 7.23.6 + dev: false + + /@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.23.6): + resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/types': 7.23.6 /@babel/plugin-transform-react-pure-annotations@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-I8VfEPg9r2TRDdvnHgPepTKvuRomzA8+u+nhY7qSI1fR2hRNebasZEETLyM5mAUr0Ku56OkXJ0I7NHJnO6cJiQ==} @@ -4603,16 +5874,28 @@ packages: regenerator-transform: 0.15.1 dev: true - /@babel/plugin-transform-regenerator@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-rR7KePOE7gfEtNTh9Qw+iO3Q/e4DEsoQ+hdvM6QUDH7JRJ5qxq5AA52ZzBWbI5i9lfNuvySgOGP8ZN7LAmaiPw==} + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - regenerator-transform: 0.15.1 + regenerator-transform: 0.15.2 + dev: false + + /@babel/plugin-transform-regenerator@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KP+75h0KghBMcVpuKisx3XTu9Ncut8Q8TuvGO4IhY+9D5DFEckQefOuIsB/gQ2tG71lCke4NMrtIPS8pOj18BQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + regenerator-transform: 0.15.2 dev: false + optional: true /@babel/plugin-transform-reserved-words@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-oX/4MyMoypzHjFrT1CdivfKZ+XvIPMFXwwxHp/r0Ddy2Vuomt4HDFGmft1TAY2yiTKiNSsh3kjBAzcM8kSdsjA==} @@ -4634,8 +5917,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==} + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4644,6 +5927,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-reserved-words@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-QnNTazY54YqgGxwIexMZva9gqbPa15t/x9VS+0fsEFWplwVpXYZivtgl43Z1vMpc1bdPP2PP8siFeVcnFvA3Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-transform-runtime@7.22.4(@babel/core@7.22.5): resolution: {integrity: sha512-Urkiz1m4zqiRo17klj+l3nXgiRTFQng91Bc1eiLF7BMQu1e7wE5Gcq9xSv062IF068NHjcutSbIMev60gXxAvA==} engines: {node: '>=6.9.0'} @@ -4661,18 +5955,35 @@ packages: - supports-color dev: true - /@babel/plugin-transform-runtime@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-9KjBH61AGJetCPYp/IEyLEp47SyybZb0nDRpBvmtEkm+rUIwxdlKpyNHI1TmsGkeuLclJdleQHRZ8XLBnnh8CQ==} + /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.22.9): + resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-module-imports': 7.22.5 + '@babel/helper-module-imports': 7.22.15 + '@babel/helper-plugin-utils': 7.22.5 + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.22.9) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.22.9) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.22.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /@babel/plugin-transform-runtime@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-kF1Zg62aPseQ11orDhFRw+aPG/eynNQtI+TyY+m33qJa2cJ5EEvza2P2BNTIA9E5MyqFABHEyY6CPHwgdy9aNg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-module-imports': 7.22.15 '@babel/helper-plugin-utils': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.9) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.9) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.9) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -4698,8 +6009,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==} + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4708,6 +6019,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-shorthand-properties@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-ED2fgqZLmexWiN+YNFX26fx4gh5qHDhn1O2gvEhreLW2iI63Sqm4llRLCXALKrCnbN4Jy0VcMQZl/SAzqug/jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-spread@7.20.7(@babel/core@7.22.5): resolution: {integrity: sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==} engines: {node: '>=6.9.0'} @@ -4716,7 +6037,7 @@ packages: dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true /@babel/plugin-transform-spread@7.20.7(@babel/core@7.22.9): @@ -4727,11 +6048,11 @@ packages: dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.20.0 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: true - /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==} + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4741,6 +6062,17 @@ packages: '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 dev: false + /@babel/plugin-transform-spread@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-VvfVYlrlBVu+77xVTOAoxQ6mZbnIq5FM0aGBSFEcIh03qHf+zNqA4DC/3XMUozTg7bZV3e3mZQ0i13VB6v5yUg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + dev: false + /@babel/plugin-transform-sticky-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==} engines: {node: '>=6.9.0'} @@ -4761,8 +6093,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==} + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4771,6 +6103,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-sticky-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-HZOyN9g+rtvnOU3Yh7kSxXrKbzgrm5X4GncPY1QOquu7epga5MxKHVpYu2hvQnry/H+JjckSYRb93iNfsioAGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-template-literals@7.18.9(@babel/core@7.22.5): resolution: {integrity: sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==} engines: {node: '>=6.9.0'} @@ -4791,8 +6133,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==} + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4801,6 +6143,16 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-template-literals@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-Flok06AYNp7GV2oJPZZcP9vZdszev6vPBkHLwxwSpaIqx75wn6mUd3UFWsSsA0l8nXAKkyCmL/sR02m8RYGeHg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + /@babel/plugin-transform-typeof-symbol@7.18.9(@babel/core@7.22.5): resolution: {integrity: sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==} engines: {node: '>=6.9.0'} @@ -4821,8 +6173,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4831,30 +6183,68 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false - /@babel/plugin-transform-typescript@7.22.9(@babel/core@7.22.5): - resolution: {integrity: sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==} + /@babel/plugin-transform-typeof-symbol@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-4t15ViVnaFdrPC74be1gXBSMzXk3B4Us9lP7uLRQHTFpV5Dvt33pn+2MyyNxmN3VTTm3oTrZVMUmuw3oBnQ2oQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.5): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.5) + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.5) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) + dev: true + + /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.6) + dev: true + + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.22.9): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.22.9 + '@babel/helper-annotate-as-pure': 7.22.5 + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.5) - dev: true + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.22.9) + dev: false - /@babel/plugin-transform-typescript@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-BnVR1CpKiuD0iobHPaM1iLvcwPYN2uVFAqoLVSpEDKWuOikoCv5HbKLxclhKYUXlWkX86DoZGtqI4XhbOsyrMg==} + /@babel/plugin-transform-typescript@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-6cBG5mBvUu4VUD04OHKnYzbuHNP8huDsD3EDqqpIpsswTDoqHCjLoHb6+QgsV1WsT2nipRqCPgxD3LXnEO7XfA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.23.6 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-class-features-plugin': 7.23.6(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.6) + dev: false /@babel/plugin-transform-unicode-escapes@7.21.5(@babel/core@7.22.5): resolution: {integrity: sha512-LYm/gTOwZqsYohlvFUe/8Tujz75LqqVC2w+2qPHLR+WyWHGCZPN1KBpJCJn+4Bk4gOkQy/IXKIge6az5MqwlOg==} @@ -4876,8 +6266,8 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-escapes@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-biEmVg1IYB/raUO5wT1tgfacCef15Fbzhkx493D3urBI++6hpJ+RFG4SrWMn0NEZLfvilqKf3QDrRVZHo08FYg==} + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -4886,6 +6276,17 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-unicode-escapes@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-OMCUx/bU6ChE3r4+ZdylEqAjaQgHAgipgW8nsCfu5pGqDcFytVd91AwRvUJSBZDz0exPGgnjoqhgRYLRjFZc9Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/plugin-transform-unicode-property-regex@7.22.3(@babel/core@7.22.5): resolution: {integrity: sha512-5ScJ+OmdX+O6HRuMGW4kv7RL9vIKdtdAj9wuWUKy1wbHY3jaM/UlyIiC1G7J6UJiiyMukjjK0QwL3P0vBd0yYg==} engines: {node: '>=6.9.0'} @@ -4908,16 +6309,28 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==} + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-property-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-KcLIm+pDZkWZQAFJ9pdfmh89EwVfmNovFBcXko8szpBeF8z68kWIPeKlmSOkT9BXJxs2C0uk+5LxoxIv62MROA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false + optional: true /@babel/plugin-transform-unicode-regex@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==} @@ -4941,14 +6354,25 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==} + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.9) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + + /@babel/plugin-transform-unicode-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-wMHpNA4x2cIA32b/ci3AfwNgheiva2W0WUKWTK7vBHBhDKfPsc5cFGNWm69WBqpwd86u1qwZ9PWevKqm1A3yAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) '@babel/helper-plugin-utils': 7.22.5 dev: false @@ -4974,26 +6398,38 @@ packages: '@babel/helper-plugin-utils': 7.22.5 dev: true - /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==} + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.22.9): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-create-regexp-features-plugin': 7.22.9(@babel/core@7.22.9) + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 dev: false + /@babel/plugin-transform-unicode-sets-regex@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-W7lliA/v9bNR83Qc3q1ip9CQMZ09CcHDbHfbLRDNuAhn1Mvkr1ZNF7hPmztMQvtTGVLJ9m8IZqWsTkXOml8dbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.6) + '@babel/helper-plugin-utils': 7.22.5 + dev: false + optional: true + /@babel/preset-env@7.22.4(@babel/core@7.22.5): resolution: {integrity: sha512-c3lHOjbwBv0TkhYCr+XCR6wKcSZ1QbQTVdSkZUaVpLv8CVWotBMArWUi5UAJrcrQaEnleVkkvaV8F/pmc/STZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.5) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.5) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.5) @@ -5082,9 +6518,9 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.22.5(@babel/core@7.22.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/helper-validator-option': 7.22.5 '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.18.6(@babel/core@7.22.9) @@ -5167,27 +6603,28 @@ packages: - supports-color dev: true - /@babel/preset-env@7.22.9(@babel/core@7.22.9): - resolution: {integrity: sha512-wNi5H/Emkhll/bqPjsjQorSykrlfY5OWakd6AulLvMEytpKasMVUpVy8RL4qBIBs5Ac6/5i0/Rv0b/Fg6Eag/g==} + /@babel/preset-env@7.23.6(@babel/core@7.22.9): + resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.23.5 '@babel/core': 7.22.9 - '@babel/helper-compilation-targets': 7.22.9(@babel/core@7.22.9) + '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.5(@babel/core@7.22.9) + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.22.9) '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.9) '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.9) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.9) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.22.9) '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.9) '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.9) '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.9) @@ -5199,75 +6636,166 @@ packages: '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.9) '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-async-generator-functions': 7.22.7(@babel/core@7.22.9) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-class-static-block': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-dynamic-import': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-export-namespace-from': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-json-strings': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-logical-assignment-operators': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-systemjs': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.22.9) '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-numeric-separator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-object-rest-spread': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-optional-catch-binding': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-optional-chaining': 7.22.6(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-private-property-in-object': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-regenerator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-escapes': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.9) - '@babel/preset-modules': 0.1.6(@babel/core@7.22.9) - '@babel/types': 7.22.5 - babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.9) - babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.9) - babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.9) - core-js-compat: 3.32.0 + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.22.9) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.9) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.22.9) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.22.9) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.22.9) + core-js-compat: 3.34.0 semver: 6.3.1 transitivePeerDependencies: - supports-color dev: false - /@babel/preset-flow@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-ta2qZ+LSiGCrP5pgcGt8xMnnkXQrq8Sa4Ulhy06BOlF5QbLw9q5hIx7bn5MrsvyTGAfh6kTOo07Q+Pfld/8Y5Q==} + /@babel/preset-env@7.23.6(@babel/core@7.23.6): + resolution: {integrity: sha512-2XPn/BqKkZCpzYhUUNZ1ssXw7DcXfKQEjv/uXZUXgaebCMYmkEsfZ2yY+vv+xtXv50WmL5SGhyB6/xsWxIvvOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-compilation-targets': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.6) + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-assertions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-attributes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-generator-functions': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-class-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-class-static-block': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dotall-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-duplicate-keys': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-dynamic-import': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-exponentiation-operator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-export-namespace-from': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-json-strings': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-logical-assignment-operators': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-amd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-systemjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-umd': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-new-target': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-nullish-coalescing-operator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-numeric-separator': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-rest-spread': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-optional-catch-binding': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-optional-chaining': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-regenerator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-reserved-words': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typeof-symbol': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-escapes': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-property-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-sets-regex': 7.23.3(@babel/core@7.23.6) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.6) + babel-plugin-polyfill-corejs2: 0.4.7(@babel/core@7.23.6) + babel-plugin-polyfill-corejs3: 0.8.7(@babel/core@7.23.6) + babel-plugin-polyfill-regenerator: 0.5.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + optional: true + + /@babel/preset-flow@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-7yn6hl8RIv+KNk6iIrGZ+D06VhVY35wLVf23Cz/mMu1zOr7u4MMP4j0nZ9tLf8+4ZFpnib8cFYgB/oYg9hfswA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.9) + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) dev: false /@babel/preset-modules@0.1.5(@babel/core@7.22.5): @@ -5296,19 +6824,29 @@ packages: esutils: 2.0.3 dev: true - /@babel/preset-modules@0.1.6(@babel/core@7.22.9): - resolution: {integrity: sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==} + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.9): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.9 '@babel/helper-plugin-utils': 7.22.5 - '@babel/plugin-proposal-unicode-property-regex': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.9) - '@babel/types': 7.22.5 + '@babel/types': 7.23.6 esutils: 2.0.3 dev: false + /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.6): + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/types': 7.23.6 + esutils: 2.0.3 + dev: false + optional: true + /@babel/preset-react@7.18.6(@babel/core@7.22.5): resolution: {integrity: sha512-zXr6atUmyYdiWRVLOZahakYmOBHtWc2WGCkP8PYTgZi0iJXDY2CN180TdrIW4OGOAdLc7TifzDIvtx6izaRIzg==} engines: {node: '>=6.9.0'} @@ -5339,40 +6877,55 @@ packages: '@babel/plugin-transform-react-pure-annotations': 7.18.6(@babel/core@7.22.9) dev: true - /@babel/preset-typescript@7.22.5(@babel/core@7.22.5): - resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} + /@babel/preset-typescript@7.23.0(@babel/core@7.22.5): + resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.22.5 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 + '@babel/helper-validator-option': 7.22.15 '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.5) - '@babel/plugin-transform-typescript': 7.22.9(@babel/core@7.22.5) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.22.5) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.5) dev: true - /@babel/preset-typescript@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-YbPaal9LxztSGhmndR46FmAbkJ/1fAsw293tSU+I5E5h+cnJ3d4GTwyUgGYmOXJYdGA+uNePle4qbaRzj2NISQ==} + /@babel/preset-typescript@7.23.0(@babel/core@7.23.6): + resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.23.6 '@babel/helper-plugin-utils': 7.22.5 - '@babel/helper-validator-option': 7.22.5 - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-typescript': 7.22.9(@babel/core@7.22.9) + '@babel/helper-validator-option': 7.22.15 + '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.6) + dev: true - /@babel/register@7.22.5(@babel/core@7.22.9): - resolution: {integrity: sha512-vV6pm/4CijSQ8Y47RH5SopXzursN35RQINfGJkmOlcpAtGuf94miFvIPhCKGQN7WGIcsgG1BHEX2KVdTYwTwUQ==} + /@babel/preset-typescript@7.23.3(@babel/core@7.23.6): + resolution: {integrity: sha512-17oIGVlqz6CchO9RFYn5U6ZpWRZIngayYCtrPRSgANSwC2V1Jb+iP74nVxzzXJte8b8BYxrL1yY96xfhTBrNNQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.23.6 + '@babel/helper-plugin-utils': 7.22.5 + '@babel/helper-validator-option': 7.23.5 + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + dev: false + + /@babel/register@7.22.15(@babel/core@7.23.6): + resolution: {integrity: sha512-V3Q3EqoQdn65RCgTLwauZaTfd1ShhwPmbBv+1dkZV/HpCGMKVyn6oFcRlI7RaKqiDQjX2Qd3AuoEguBgdjIKlg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + dependencies: + '@babel/core': 7.23.6 clone-deep: 4.0.1 find-cache-dir: 2.1.0 make-dir: 2.1.0 @@ -5394,15 +6947,49 @@ packages: engines: {node: '>=6.9.0'} dependencies: regenerator-runtime: 0.13.11 + dev: true + + /@babel/runtime@7.23.6: + resolution: {integrity: sha512-zHd0eUrf5GZoOWVCXp6koAKQTfZV07eit6bGPmJgnZdnSAvvZee6zniW2XMF7Cmc4ISOOnPy3QaSiIJGJkVEDQ==} + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: 0.14.0 + dev: false + + /@babel/template@7.22.15: + resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 /@babel/template@7.22.5: resolution: {integrity: sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.22.5 - '@babel/parser': 7.22.7 + '@babel/parser': 7.22.5 '@babel/types': 7.22.5 + /@babel/traverse@7.22.5: + resolution: {integrity: sha512-7DuIjPgERaNo6r+PZwItpjCZEa5vyw4eJGufeLxrPdBXBoLcCJCIasvK6pK/9DVNrLZTLFhUGqaC6X/PA007TQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.22.5 + '@babel/generator': 7.22.5 + '@babel/helper-environment-visitor': 7.22.5 + '@babel/helper-function-name': 7.22.5 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.22.5 + '@babel/types': 7.22.5 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + dev: true + /@babel/traverse@7.22.8: resolution: {integrity: sha512-y6LPR+wpM2I3qJrsheCTwhIinzkETbplIgPBbwvqPKc+uljeA5gP+3nP8irdYt1mjQaDnlIcG+dw8OjAco4GXw==} engines: {node: '>=6.9.0'} @@ -5420,6 +7007,23 @@ packages: transitivePeerDependencies: - supports-color + /@babel/traverse@7.23.6: + resolution: {integrity: sha512-czastdK1e8YByZqezMPFiZ8ahwVMh/ESl9vPgvgdB9AmFMGP5jfpFax74AQgl5zj4XHzqeYAg2l8PuUeRS1MgQ==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/code-frame': 7.23.5 + '@babel/generator': 7.23.6 + '@babel/helper-environment-visitor': 7.22.20 + '@babel/helper-function-name': 7.23.0 + '@babel/helper-hoist-variables': 7.22.5 + '@babel/helper-split-export-declaration': 7.22.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + debug: 4.3.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + /@babel/types@7.22.5: resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==} engines: {node: '>=6.9.0'} @@ -5428,6 +7032,22 @@ packages: '@babel/helper-validator-identifier': 7.22.5 to-fast-properties: 2.0.0 + /@babel/types@7.23.0: + resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.22.5 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + + /@babel/types@7.23.6: + resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==} + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-string-parser': 7.23.4 + '@babel/helper-validator-identifier': 7.22.20 + to-fast-properties: 2.0.0 + /@bcoe/v8-coverage@0.2.3: resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} dev: true @@ -5444,19 +7064,19 @@ packages: dev: true optional: true - /@craco/craco@7.1.0(@types/node@20.6.2)(postcss@8.4.27)(react-scripts@5.0.1)(typescript@5.2.2): + /@craco/craco@7.1.0(@types/node@20.8.2)(postcss@8.4.32)(react-scripts@5.0.1)(typescript@5.2.2): resolution: {integrity: sha512-oRAcPIKYrfPXp9rSzlsDNeOaVtDiKhoyqSXUoqiK24jCkHr4T8m/a2f74yXIzCbIheoUWDOIfWZyRgFgT+cpqA==} engines: {node: '>=6'} hasBin: true peerDependencies: react-scripts: ^5.0.0 dependencies: - autoprefixer: 10.4.13(postcss@8.4.27) + autoprefixer: 10.4.13(postcss@8.4.32) cosmiconfig: 7.1.0 - cosmiconfig-typescript-loader: 1.0.9(@types/node@20.6.2)(cosmiconfig@7.1.0)(typescript@5.2.2) + cosmiconfig-typescript-loader: 1.0.9(@types/node@20.8.2)(cosmiconfig@7.1.0)(typescript@5.2.2) cross-spawn: 7.0.3 lodash: 4.17.21 - react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2) + react-scripts: 5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2) semver: 7.3.8 webpack-merge: 5.8.0 transitivePeerDependencies: @@ -5650,12 +7270,12 @@ packages: factory.ts: 0.5.2 dev: false - /@did-core/did-ld-json@0.1.1-unstable.15(expo@49.0.6)(react-native@0.72.3): + /@did-core/did-ld-json@0.1.1-unstable.15(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-p2jKRxSU+eJJqd+ewCklYp/XZ6ysISk8VU2/kANCoB/WwUy/kVgw2rUNScRDXw2utr9Qj36P8EZTYi4aj7vRCQ==} engines: {node: '>=10'} dependencies: '@transmute/did-context': 0.6.1-unstable.37 - jsonld-checker: 0.1.8(expo@49.0.6)(react-native@0.72.3) + jsonld-checker: 0.1.8(expo@49.0.21)(react-native@0.73.0) transitivePeerDependencies: - domexception - encoding @@ -5680,12 +7300,12 @@ packages: resolution: {integrity: sha512-vQsqQXpmSXKNy/C0xxFUOBzz60dHh6oupQam1xRC8IspVC11hYJiX9SAhmbI0ulHvX1R2JfqZaJHZjmAyMZ/aA==} dev: false - /@digitalbazaar/vc-status-list@7.0.0(expo@49.0.6)(react-native@0.72.3): + /@digitalbazaar/vc-status-list@7.0.0(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-fFSZx5S/LG9PRxHkoVgH+jMib18zAVjWLbcsrdK2qE8jalX8Kg/IILFr37ifmL4CYXIwelM0cff0P/SIaz96zw==} engines: {node: '>=16'} dependencies: '@digitalbazaar/bitstring': 3.1.0 - '@digitalbazaar/vc': 5.0.0(expo@49.0.6)(react-native@0.72.3) + '@digitalbazaar/vc': 5.0.0(expo@49.0.21)(react-native@0.73.0) '@digitalbazaar/vc-status-list-context': 3.0.1 credentials-context: 2.0.0 transitivePeerDependencies: @@ -5695,13 +7315,13 @@ packages: - web-streams-polyfill dev: false - /@digitalbazaar/vc@5.0.0(expo@49.0.6)(react-native@0.72.3): + /@digitalbazaar/vc@5.0.0(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-XmLM7Ag5W+XidGnFuxFIyUFSMnHnWEMJlHei602GG94+WzFJ6Ik8txzPQL8T18egSoiTsd1VekymbIlSimhuaQ==} engines: {node: '>=14'} dependencies: credentials-context: 2.0.0 - jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.6)(react-native@0.72.3) - jsonld-signatures: 11.2.1(expo@49.0.6)(react-native@0.72.3) + jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.21)(react-native@0.73.0) + jsonld-signatures: 11.2.1(expo@49.0.21)(react-native@0.73.0) transitivePeerDependencies: - domexception - expo @@ -5729,13 +7349,13 @@ packages: pako: 2.1.0 dev: false - /@digitalcredentials/ed25519-signature-2020@3.0.2(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/ed25519-signature-2020@3.0.2(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-R8IrR21Dh+75CYriQov3nVHKaOVusbxfk9gyi6eCAwLHKn6fllUt+2LQfuUrL7Ts/sGIJqQcev7YvkX9GvyYRA==} engines: {node: '>=14'} dependencies: '@digitalcredentials/base58-universal': 1.0.1 '@digitalcredentials/ed25519-verification-key-2020': 3.2.2 - '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.21)(react-native@0.73.0) ed25519-signature-2018-context: 1.1.0 ed25519-signature-2020-context: 1.1.0 transitivePeerDependencies: @@ -5775,14 +7395,14 @@ packages: - web-streams-polyfill dev: false - /@digitalcredentials/jsonld-signatures@9.3.2(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/jsonld-signatures@9.3.2(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-auubZrr3D7et5O6zCdqoXsLhI8/F26HqneE94gIoZYVuxNHBNaFoDQ1Z71RfddRqwJonHkfkWgeZSzqjv6aUmg==} engines: {node: '>=12'} dependencies: '@digitalbazaar/security-context': 1.0.1 - '@digitalcredentials/jsonld': 6.0.0(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/jsonld': 6.0.0(expo@49.0.21)(react-native@0.73.0) fast-text-encoding: 1.0.6 - isomorphic-webcrypto: 2.3.8(expo@49.0.6)(react-native@0.72.3) + isomorphic-webcrypto: 2.3.8(expo@49.0.21)(react-native@0.73.0) serialize-error: 8.1.0 transitivePeerDependencies: - domexception @@ -5791,12 +7411,12 @@ packages: - web-streams-polyfill dev: false - /@digitalcredentials/jsonld@5.2.2(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/jsonld@5.2.2(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-hz7YR3kv6+8UUdgMyTGl1o8NjVKKwnMry/Rh/rWeAvwL+NqgoUHorWzI3rM+PW+MPFyDC0ieXStClt9n9D9SGA==} engines: {node: '>=12'} dependencies: '@digitalcredentials/http-client': 1.2.2 - '@digitalcredentials/rdf-canonize': 1.0.0(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/rdf-canonize': 1.0.0(expo@49.0.21)(react-native@0.73.0) canonicalize: 1.0.8 lru-cache: 6.0.0 transitivePeerDependencies: @@ -5806,12 +7426,12 @@ packages: - web-streams-polyfill dev: false - /@digitalcredentials/jsonld@6.0.0(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/jsonld@6.0.0(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-5tTakj0/GsqAJi8beQFVMQ97wUJZnuxViW9xRuAATL6eOBIefGBwHkVryAgEq2I4J/xKgb/nEyw1ZXX0G8wQJQ==} engines: {node: '>=12'} dependencies: '@digitalcredentials/http-client': 1.2.2 - '@digitalcredentials/rdf-canonize': 1.0.0(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/rdf-canonize': 1.0.0(expo@49.0.21)(react-native@0.73.0) canonicalize: 1.0.8 lru-cache: 6.0.0 transitivePeerDependencies: @@ -5830,24 +7450,24 @@ packages: resolution: {integrity: sha512-cMS+biUjJYwq60xeop6iHPC3Cxrv77jbdS2hPY/IkZfXIZlt2rvB7dz7rP/iGWwRiT5SQBLVdX+ZiDZc8xee/Q==} dev: false - /@digitalcredentials/rdf-canonize@1.0.0(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/rdf-canonize@1.0.0(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-z8St0Ex2doecsExCFK1uI4gJC+a5EqYYu1xpRH1pKmqSS9l/nxfuVxexNFyaeEum4dUdg1EetIC2rTwLIFhPRA==} engines: {node: '>=12'} dependencies: fast-text-encoding: 1.0.6 - isomorphic-webcrypto: 2.3.8(expo@49.0.6)(react-native@0.72.3) + isomorphic-webcrypto: 2.3.8(expo@49.0.21)(react-native@0.73.0) transitivePeerDependencies: - expo - react-native dev: false - /@digitalcredentials/vc-status-list@5.0.2(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/vc-status-list@5.0.2(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-PI0N7SM0tXpaNLelbCNsMAi34AjOeuhUzMSYTkHdeqRPX7oT2F3ukyOssgr4koEqDxw9shHtxHu3fSJzrzcPMQ==} engines: {node: '>=14'} dependencies: '@digitalbazaar/vc-status-list-context': 3.0.1 '@digitalcredentials/bitstring': 2.0.1 - '@digitalcredentials/vc': 4.2.0(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/vc': 4.2.0(expo@49.0.21)(react-native@0.73.0) credentials-context: 2.0.0 transitivePeerDependencies: - domexception @@ -5856,12 +7476,12 @@ packages: - web-streams-polyfill dev: false - /@digitalcredentials/vc@4.2.0(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/vc@4.2.0(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-8Rxpn77JghJN7noBQdcMuzm/tB8vhDwPoFepr3oGd5w+CyJxOk2RnBlgIGlAAGA+mALFWECPv1rANfXno+hdjA==} engines: {node: '>=12'} dependencies: - '@digitalcredentials/jsonld': 5.2.2(expo@49.0.6)(react-native@0.72.3) - '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/jsonld': 5.2.2(expo@49.0.21)(react-native@0.73.0) + '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.21)(react-native@0.73.0) credentials-context: 2.0.0 transitivePeerDependencies: - domexception @@ -5870,16 +7490,16 @@ packages: - web-streams-polyfill dev: false - /@digitalcredentials/vc@6.0.0(expo@49.0.6)(react-native@0.72.3): + /@digitalcredentials/vc@6.0.0(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-RNCkNAKEnkU7/8OiKbS3sM3qePQpH4ZGAXSwaQ0XrRQumPbLEJz8AMpxXmH28sFnmxUrCyvuCGKUq8CBjS1+cQ==} engines: {node: '>=12'} dependencies: - '@digitalbazaar/vc-status-list': 7.0.0(expo@49.0.6)(react-native@0.72.3) - '@digitalcredentials/ed25519-signature-2020': 3.0.2(expo@49.0.6)(react-native@0.72.3) - '@digitalcredentials/jsonld': 6.0.0(expo@49.0.6)(react-native@0.72.3) - '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.6)(react-native@0.72.3) + '@digitalbazaar/vc-status-list': 7.0.0(expo@49.0.21)(react-native@0.73.0) + '@digitalcredentials/ed25519-signature-2020': 3.0.2(expo@49.0.21)(react-native@0.73.0) + '@digitalcredentials/jsonld': 6.0.0(expo@49.0.21)(react-native@0.73.0) + '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.21)(react-native@0.73.0) '@digitalcredentials/open-badges-context': 2.0.1 - '@digitalcredentials/vc-status-list': 5.0.2(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/vc-status-list': 5.0.2(expo@49.0.21)(react-native@0.73.0) credentials-context: 2.0.0 fix-esm: 1.0.1 transitivePeerDependencies: @@ -5890,16 +7510,31 @@ packages: - web-streams-polyfill dev: false - /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.49.0 + eslint: 8.50.0 eslint-visitor-keys: 3.4.3 dev: true + /@eslint-community/eslint-utils@4.4.0(eslint@8.55.0): + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.55.0 + eslint-visitor-keys: 3.4.3 + dev: true + + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint-community/regexpp@4.6.2: resolution: {integrity: sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} @@ -5922,8 +7557,30 @@ packages: - supports-color dev: true - /@eslint/js@8.49.0: - resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.0 + ignore: 5.3.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js@8.50.0: + resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + + /@eslint/js@8.55.0: + resolution: {integrity: sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true @@ -5932,7 +7589,6 @@ packages: dependencies: '@ethereumjs/util': 8.1.0 crc-32: 1.2.2 - dev: true /@ethereumjs/rlp@4.0.1: resolution: {integrity: sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==} @@ -5947,7 +7603,6 @@ packages: '@ethereumjs/rlp': 4.0.1 '@ethereumjs/util': 8.1.0 ethereum-cryptography: 2.1.2 - dev: true /@ethereumjs/util@8.1.0: resolution: {integrity: sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA==} @@ -5957,39 +7612,6 @@ packages: ethereum-cryptography: 2.1.2 micro-ftch: 0.3.1 - /@ethersproject/abi@5.7.0: - resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==} - dependencies: - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - - /@ethersproject/abstract-provider@5.7.0: - resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==} - dependencies: - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - - /@ethersproject/abstract-signer@5.7.0: - resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - /@ethersproject/address@5.7.0: resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==} dependencies: @@ -5998,17 +7620,7 @@ packages: '@ethersproject/keccak256': 5.7.0 '@ethersproject/logger': 5.7.0 '@ethersproject/rlp': 5.7.0 - - /@ethersproject/base64@5.7.0: - resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==} - dependencies: - '@ethersproject/bytes': 5.7.0 - - /@ethersproject/basex@5.7.0: - resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/properties': 5.7.0 + dev: false /@ethersproject/bignumber@5.7.0: resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==} @@ -6016,147 +7628,43 @@ packages: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 bn.js: 5.2.1 + dev: false /@ethersproject/bytes@5.7.0: resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==} dependencies: '@ethersproject/logger': 5.7.0 + dev: false /@ethersproject/constants@5.7.0: resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==} dependencies: '@ethersproject/bignumber': 5.7.0 + dev: false - /@ethersproject/contracts@5.7.0: - resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==} - dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/transactions': 5.7.0 - - /@ethersproject/hash@5.7.0: - resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - - /@ethersproject/hdnode@5.7.0: - resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - - /@ethersproject/json-wallets@5.7.0: - resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==} - dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/pbkdf2': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - aes-js: 3.0.0 - scrypt-js: 3.0.1 - - /@ethersproject/keccak256@5.7.0: - resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - js-sha3: 0.8.0 - - /@ethersproject/logger@5.7.0: - resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} - - /@ethersproject/networks@5.7.1: - resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==} - dependencies: - '@ethersproject/logger': 5.7.0 - - /@ethersproject/pbkdf2@5.7.0: - resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/sha2': 5.7.0 - - /@ethersproject/properties@5.7.0: - resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} - dependencies: - '@ethersproject/logger': 5.7.0 - - /@ethersproject/providers@5.7.2: - resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/networks': 5.7.1 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/rlp': 5.7.0 - '@ethersproject/sha2': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/web': 5.7.1 - bech32: 1.1.4 - ws: 7.4.6 - transitivePeerDependencies: - - bufferutil - - utf-8-validate - - /@ethersproject/random@5.7.0: - resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==} + /@ethersproject/keccak256@5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==} dependencies: '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 + js-sha3: 0.8.0 + dev: false - /@ethersproject/rlp@5.7.0: - resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} + /@ethersproject/logger@5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==} + dev: false + + /@ethersproject/properties@5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==} dependencies: - '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 + dev: false - /@ethersproject/sha2@5.7.0: - resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==} + /@ethersproject/rlp@5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==} dependencies: '@ethersproject/bytes': 5.7.0 '@ethersproject/logger': 5.7.0 - hash.js: 1.1.7 + dev: false /@ethersproject/signing-key@5.7.0: resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==} @@ -6167,13 +7675,7 @@ packages: bn.js: 5.2.1 elliptic: 6.5.4 hash.js: 1.1.7 - - /@ethersproject/strings@5.7.0: - resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/constants': 5.7.0 - '@ethersproject/logger': 5.7.0 + dev: false /@ethersproject/transactions@5.7.0: resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==} @@ -6187,43 +7689,7 @@ packages: '@ethersproject/properties': 5.7.0 '@ethersproject/rlp': 5.7.0 '@ethersproject/signing-key': 5.7.0 - - /@ethersproject/wallet@5.7.0: - resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==} - dependencies: - '@ethersproject/abstract-provider': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/hdnode': 5.7.0 - '@ethersproject/json-wallets': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/random': 5.7.0 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wordlists': 5.7.0 - - /@ethersproject/web@5.7.1: - resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==} - dependencies: - '@ethersproject/base64': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 - - /@ethersproject/wordlists@5.7.0: - resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==} - dependencies: - '@ethersproject/bytes': 5.7.0 - '@ethersproject/hash': 5.7.0 - '@ethersproject/logger': 5.7.0 - '@ethersproject/properties': 5.7.0 - '@ethersproject/strings': 5.7.0 + dev: false /@expo/bunyan@4.0.0: resolution: {integrity: sha512-Ydf4LidRB/EBI+YrB+cVLqIseiRfjUI/AeHBgjGMtq3GroraDu81OV7zqophRgupngoL3iS3JUMDMnxO7g39qA==} @@ -6236,11 +7702,11 @@ packages: dev: false optional: true - /@expo/cli@0.10.11(expo-modules-autolinking@1.5.0): - resolution: {integrity: sha512-ehaAOw4SwkJ9uL5z9c3RD4LJpmMDCXZBCWZG4fonUGutks4t/GLoNRcdENkWsf6NSgkdPNgNl8KwphU1p083PQ==} + /@expo/cli@0.10.16(expo-modules-autolinking@1.5.1): + resolution: {integrity: sha512-EwgnRN5AMElg0JJjFLJTPk5hYkVXxnNMLIvZBiTfGoCq+rDw6u7Mg5l2Bbm/geSHOoplaHyPZ/Wr23FAuZWehA==} hasBin: true dependencies: - '@babel/runtime': 7.22.6 + '@babel/runtime': 7.23.6 '@expo/code-signing-certificates': 0.0.5 '@expo/config': 8.1.2 '@expo/config-plugins': 7.2.5 @@ -6250,9 +7716,9 @@ packages: '@expo/json-file': 8.2.37 '@expo/metro-config': 0.10.7 '@expo/osascript': 2.0.33 - '@expo/package-manager': 1.0.2 + '@expo/package-manager': 1.1.2 '@expo/plist': 0.0.20 - '@expo/prebuild-config': 6.2.6(expo-modules-autolinking@1.5.0) + '@expo/prebuild-config': 6.2.6(expo-modules-autolinking@1.5.1) '@expo/rudder-sdk-node': 1.1.1 '@expo/spawn-async': 1.5.0 '@expo/xcpretty': 4.2.2 @@ -6264,7 +7730,7 @@ packages: bplist-parser: 0.3.2 cacache: 15.3.0 chalk: 4.1.2 - ci-info: 3.8.0 + ci-info: 3.9.0 debug: 4.3.4 env-editor: 0.4.2 form-data: 3.0.1 @@ -6275,13 +7741,12 @@ packages: graphql-tag: 2.12.6(graphql@15.8.0) https-proxy-agent: 5.0.1 internal-ip: 4.3.0 - is-root: 2.1.0 js-yaml: 3.14.1 json-schema-deref-sync: 0.13.0 md5-file: 3.2.3 md5hex: 1.0.0 minipass: 3.1.6 - node-fetch: 2.6.12 + node-fetch: 2.7.0 node-forge: 1.3.1 npm-package-arg: 7.0.0 ora: 3.4.0 @@ -6296,13 +7761,13 @@ packages: send: 0.18.0 slugify: 1.6.6 structured-headers: 0.4.1 - tar: 6.1.15 + tar: 6.2.0 tempy: 0.7.1 terminal-link: 2.1.1 text-table: 0.2.0 url-join: 4.0.0 wrap-ansi: 7.0.0 - ws: 8.14.1 + ws: 8.15.1 transitivePeerDependencies: - bluebird - bufferutil @@ -6381,7 +7846,7 @@ packages: fs-extra: 9.0.0 is-docker: 2.2.1 is-wsl: 2.2.0 - node-fetch: 2.6.12 + node-fetch: 2.7.0 open: 8.4.2 resolve-from: 5.0.0 serialize-error: 6.0.0 @@ -6407,7 +7872,7 @@ packages: rimraf: 2.7.1 sudo-prompt: 8.2.5 tmp: 0.0.33 - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - supports-color dev: false @@ -6435,7 +7900,7 @@ packages: getenv: 1.0.0 jimp-compact: 0.16.1 mime: 2.6.0 - node-fetch: 2.6.12 + node-fetch: 2.7.0 parse-png: 2.1.0 resolve-from: 5.0.0 semver: 7.3.2 @@ -6466,7 +7931,7 @@ packages: getenv: 1.0.0 jsc-safe-url: 0.2.4 lightningcss: 1.19.0 - postcss: 8.4.27 + postcss: 8.4.32 resolve-from: 5.0.0 sucrase: 3.34.0 transitivePeerDependencies: @@ -6483,8 +7948,8 @@ packages: dev: false optional: true - /@expo/package-manager@1.0.2: - resolution: {integrity: sha512-dlUp6o8qs1mi3/+l3y7cY3oMoqQVVzvH18cUTi6+t4ob8XwTpaeP2SwOP+obwZN29dMg9YzZAv4eQz+mshAbQA==} + /@expo/package-manager@1.1.2: + resolution: {integrity: sha512-JI9XzrxB0QVXysyuJ996FPCJGDCYRkbUvgG4QmMTTMFA1T+mv8YzazC3T9C1pHQUAAveVCre1+Pqv0nZXN24Xg==} dependencies: '@expo/json-file': 8.2.37 '@expo/spawn-async': 1.5.0 @@ -6509,7 +7974,7 @@ packages: dev: false optional: true - /@expo/prebuild-config@6.2.6(expo-modules-autolinking@1.5.0): + /@expo/prebuild-config@6.2.6(expo-modules-autolinking@1.5.1): resolution: {integrity: sha512-uFVvDAm9dPg9p1qpnr4CVnpo2hmkZIL5FQz+VlIdXXJpe7ySh/qTGHtKWY/lWUshQkAJ0nwbKGPztGWdABns/Q==} peerDependencies: expo-modules-autolinking: '>=0.8.1' @@ -6520,7 +7985,7 @@ packages: '@expo/image-utils': 0.3.22 '@expo/json-file': 8.2.37 debug: 4.3.4 - expo-modules-autolinking: 1.5.0 + expo-modules-autolinking: 1.5.1 fs-extra: 9.1.0 resolve-from: 5.0.0 semver: 7.5.3 @@ -6539,7 +8004,7 @@ packages: '@segment/loosely-validate-event': 2.0.0 fetch-retry: 4.1.1 md5: 2.3.0 - node-fetch: 2.6.12 + node-fetch: 2.7.0 remove-trailing-slash: 0.1.1 uuid: 8.3.2 transitivePeerDependencies: @@ -6607,6 +8072,17 @@ packages: - supports-color dev: true + /@humanwhocodes/config-array@0.11.13: + resolution: {integrity: sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 2.0.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/module-importer@1.0.1: resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -6616,11 +8092,22 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true + /@humanwhocodes/object-schema@2.0.1: + resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} + dev: true + /@hutson/parse-repository-url@3.0.2: resolution: {integrity: sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==} engines: {node: '>=6.9.0'} dev: true + /@ipld/dag-pb@4.0.5: + resolution: {integrity: sha512-El2Jhmv6bWuakhvnw1dl6xOhqLeVhlY8DIAJ06NtZRAoDcOzeGzvOtPzMCszVgCT0EQz+LOctyfgQ5Oszba19A==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + multiformats: 12.0.1 + dev: false + /@isaacs/cliui@8.0.2: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -6632,6 +8119,11 @@ packages: wrap-ansi: 8.1.0 wrap-ansi-cjs: /wrap-ansi@7.0.0 + /@isaacs/ttlcache@1.4.1: + resolution: {integrity: sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==} + engines: {node: '>=12'} + dev: false + /@istanbuljs/load-nyc-config@1.1.0: resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -6653,7 +8145,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 jest-message-util: 27.5.1 jest-util: 27.5.1 @@ -6665,7 +8157,7 @@ packages: engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 jest-message-util: 28.1.3 jest-util: 28.1.3 @@ -6677,7 +8169,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -6698,7 +8190,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.8.1 @@ -6743,14 +8235,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.8.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -6772,8 +8264,8 @@ packages: - ts-node dev: true - /@jest/create-cache-key-function@29.6.2: - resolution: {integrity: sha512-oGVRMr8na9h1vUiem1E/Uoxb/NR9BdfKb7IBZ+pNWxJQmTYSbDF0dsVBAGqNU7MBQwYJDyRx0H7H/0itiqAgQg==} + /@jest/create-cache-key-function@29.7.0: + resolution: {integrity: sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 @@ -6785,27 +8277,17 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-mock: 27.5.1 dev: true - /@jest/environment@29.6.2: - resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/fake-timers': 29.6.2 - '@jest/types': 29.6.1 - '@types/node': 20.6.2 - jest-mock: 29.6.2 - dev: true - /@jest/environment@29.7.0: resolution: {integrity: sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-mock: 29.7.0 /@jest/expect-utils@29.6.2: @@ -6838,31 +8320,19 @@ packages: dependencies: '@jest/types': 27.5.1 '@sinonjs/fake-timers': 8.1.0 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-message-util: 27.5.1 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true - /@jest/fake-timers@29.6.2: - resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.1 - '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.6.2 - jest-message-util: 29.6.2 - jest-mock: 29.6.2 - jest-util: 29.6.2 - dev: true - /@jest/fake-timers@29.7.0: resolution: {integrity: sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6902,7 +8372,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -6941,14 +8411,14 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.18 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 glob: 7.2.3 graceful-fs: 4.2.11 istanbul-lib-coverage: 3.2.0 - istanbul-lib-instrument: 6.0.0 + istanbul-lib-instrument: 6.0.1 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 istanbul-reports: 3.1.6 @@ -7103,10 +8573,10 @@ packages: resolution: {integrity: sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ==} engines: {node: '>= 10.14.2'} dependencies: - '@types/istanbul-lib-coverage': 2.0.4 - '@types/istanbul-reports': 3.0.1 - '@types/node': 20.6.2 - '@types/yargs': 15.0.15 + '@types/istanbul-lib-coverage': 2.0.6 + '@types/istanbul-reports': 3.0.4 + '@types/node': 20.10.4 + '@types/yargs': 15.0.19 chalk: 4.1.2 dev: false @@ -7116,9 +8586,10 @@ packages: dependencies: '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 '@types/yargs': 16.0.5 chalk: 4.1.2 + dev: true /@jest/types@28.1.3: resolution: {integrity: sha512-RyjiyMUZrKz/c+zlMFO1pm70DcIlST8AeWTkoUdZevew44wcNZQHsEVOiCVtgVnlFFD82FPaXycys58cf2muVQ==} @@ -7127,7 +8598,7 @@ packages: '@jest/schemas': 28.1.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -7139,7 +8610,7 @@ packages: '@jest/schemas': 29.6.0 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 '@types/yargs': 17.0.24 chalk: 4.1.2 dev: true @@ -7151,7 +8622,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.4 '@types/istanbul-reports': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 '@types/yargs': 17.0.24 chalk: 4.1.2 @@ -7167,6 +8638,10 @@ packages: resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} + /@jridgewell/resolve-uri@3.1.1: + resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} + engines: {node: '>=6.0.0'} + /@jridgewell/set-array@1.1.2: resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} engines: {node: '>=6.0.0'} @@ -7182,7 +8657,7 @@ packages: resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==} dependencies: '@jridgewell/gen-mapping': 0.3.3 - '@jridgewell/trace-mapping': 0.3.18 + '@jridgewell/trace-mapping': 0.3.20 dev: false /@jridgewell/sourcemap-codec@1.4.14: @@ -7197,6 +8672,12 @@ packages: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 + /@jridgewell/trace-mapping@0.3.20: + resolution: {integrity: sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==} + dependencies: + '@jridgewell/resolve-uri': 3.1.1 + '@jridgewell/sourcemap-codec': 1.4.15 + /@jridgewell/trace-mapping@0.3.9: resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} dependencies: @@ -7258,7 +8739,7 @@ packages: strong-log-transformer: 2.1.0 dev: true - /@lerna/create@7.3.0(typescript@5.2.2): + /@lerna/create@7.3.0: resolution: {integrity: sha512-fjgiKjg9VXwQ4ZKKsrXICEKRiC3yo6+FprR0mc55uz0s5e9xupoSGLobUTTBdE7ncNB3ibqml8dfaAn/+ESajQ==} engines: {node: ^14.17.0 || >=16.0.0} dependencies: @@ -7274,7 +8755,7 @@ packages: columnify: 1.6.0 conventional-changelog-core: 5.0.1 conventional-recommended-bump: 7.0.1 - cosmiconfig: 8.3.5(typescript@5.2.2) + cosmiconfig: 8.2.0 dedent: 0.7.0 execa: 5.0.0 fs-extra: 11.1.1 @@ -7334,7 +8815,6 @@ packages: - debug - encoding - supports-color - - typescript dev: true /@mapbox/node-pre-gyp@1.0.10: @@ -7362,19 +8842,6 @@ packages: superstruct: 1.0.3 transitivePeerDependencies: - supports-color - dev: true - - /@metamask/eth-sig-util@6.0.0: - resolution: {integrity: sha512-M0ezVz8lirXG1P6rHPzx+9i4zfhebCgVHE8XQT8VWxy/eUWllHQGcBcE8QmOusC7su55M4CMr9AyMIu0lx452g==} - engines: {node: '>=14.0.0'} - dependencies: - '@ethereumjs/util': 8.1.0 - bn.js: 4.12.0 - ethereum-cryptography: 2.1.2 - ethjs-util: 0.1.6 - tweetnacl: 1.0.3 - tweetnacl-util: 0.15.1 - dev: false /@metamask/eth-sig-util@7.0.0: resolution: {integrity: sha512-8KeXZB4SKx3EfNS5ahbjUMegyGvDQYk6Nk3hmM658sXpfAQR5ZlIXBgj+9RF+ZROqsU6EuNVgKt7Fr10re60PQ==} @@ -7389,29 +8856,27 @@ packages: tweetnacl-util: 0.15.1 transitivePeerDependencies: - supports-color - dev: true /@metamask/utils@8.1.0: resolution: {integrity: sha512-sFNpzBKRicDgM2ZuU6vrPROlqNGm8/jDsjc5WrU1RzCkAMc4Xr3vUUf8p59uQ6B09etUWNb8d2GTCbISdmH/Ug==} engines: {node: '>=16.0.0'} dependencies: '@ethereumjs/tx': 4.2.0 - '@noble/hashes': 1.3.1 + '@noble/hashes': 1.3.3 '@types/debug': 4.1.8 debug: 4.3.4 semver: 7.5.4 superstruct: 1.0.3 transitivePeerDependencies: - supports-color - dev: true - /@microsoft/api-documenter@7.23.0(@types/node@20.6.2): + /@microsoft/api-documenter@7.23.0(@types/node@20.8.2): resolution: {integrity: sha512-fEScQLW29+tgP4hxNS0NretEC0UFNVHj7H5C4FjapkNlcNcy/rVa/2v7LybTL5E7ilCsbEftmso8wyzFjg0Dvw==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.28.0(@types/node@20.6.2) + '@microsoft/api-extractor-model': 7.28.0(@types/node@20.8.2) '@microsoft/tsdoc': 0.14.2 - '@rushstack/node-core-library': 3.60.0(@types/node@20.6.2) + '@rushstack/node-core-library': 3.60.0(@types/node@20.8.2) '@rushstack/ts-command-line': 4.16.0 colors: 1.2.5 js-yaml: 3.13.1 @@ -7420,34 +8885,44 @@ packages: - '@types/node' dev: true - /@microsoft/api-extractor-model@7.27.5(@types/node@20.6.2): + /@microsoft/api-extractor-model@7.27.5(@types/node@20.8.2): resolution: {integrity: sha512-9/tBzYMJitR+o+zkPr1lQh2+e8ClcaTF6eZo7vZGDqRt2O5XmXWPbYJZmxyM3wb5at6lfJNEeGZrQXLjsQ0Nbw==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.59.6(@types/node@20.6.2) + '@rushstack/node-core-library': 3.59.6(@types/node@20.8.2) transitivePeerDependencies: - '@types/node' dev: false - /@microsoft/api-extractor-model@7.28.0(@types/node@20.6.2): + /@microsoft/api-extractor-model@7.28.0(@types/node@20.8.2): resolution: {integrity: sha512-QIMtUVm1tqiKG+M6ciFgRShcDoovyltaeg+CbyOnyr7SMrp6gg0ojK5/nToMqR9kAvsTS4QVgW4Twl50EoAjcw==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.60.0(@types/node@20.6.2) + '@rushstack/node-core-library': 3.60.0(@types/node@20.8.2) + transitivePeerDependencies: + - '@types/node' + dev: true + + /@microsoft/api-extractor-model@7.28.2(@types/node@20.8.2): + resolution: {integrity: sha512-vkojrM2fo3q4n4oPh4uUZdjJ2DxQ2+RnDQL/xhTWSRUNPF6P4QyrvY357HBxbnltKcYu+nNNolVqc6TIGQ73Ig==} + dependencies: + '@microsoft/tsdoc': 0.14.2 + '@microsoft/tsdoc-config': 0.16.2 + '@rushstack/node-core-library': 3.61.0(@types/node@20.8.2) transitivePeerDependencies: - '@types/node' dev: true - /@microsoft/api-extractor@7.36.3(@types/node@20.6.2): + /@microsoft/api-extractor@7.36.3(@types/node@20.8.2): resolution: {integrity: sha512-u0H6362AQq+r55X8drHx4npgkrCfJnMzRRHfQo8PMNKB8TcBnrTLfXhXWi+xnTM6CzlU/netEN8c4bq581Rnrg==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.27.5(@types/node@20.6.2) + '@microsoft/api-extractor-model': 7.27.5(@types/node@20.8.2) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.59.6(@types/node@20.6.2) + '@rushstack/node-core-library': 3.59.6(@types/node@20.8.2) '@rushstack/rig-package': 0.4.0 '@rushstack/ts-command-line': 4.15.1 colors: 1.2.5 @@ -7460,16 +8935,16 @@ packages: - '@types/node' dev: false - /@microsoft/api-extractor@7.37.0(@types/node@20.6.2): - resolution: {integrity: sha512-df/wffWpDhYRw7kzdxeHGsCpim+dC8aFiZlsJb4uFvVPWhBZpDzOhQxSUTFx3Df1ORY+/JjuPR3fDE9Hq+PHzQ==} + /@microsoft/api-extractor@7.38.0(@types/node@20.8.2): + resolution: {integrity: sha512-e1LhZYnfw+JEebuY2bzhw0imDCl1nwjSThTrQqBXl40hrVo6xm3j/1EpUr89QyzgjqmAwek2ZkIVZbrhaR+cqg==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.28.0(@types/node@20.6.2) + '@microsoft/api-extractor-model': 7.28.2(@types/node@20.8.2) '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.60.0(@types/node@20.6.2) - '@rushstack/rig-package': 0.5.0 - '@rushstack/ts-command-line': 4.16.0 + '@rushstack/node-core-library': 3.61.0(@types/node@20.8.2) + '@rushstack/rig-package': 0.5.1 + '@rushstack/ts-command-line': 4.16.1 colors: 1.2.5 lodash: 4.17.21 resolve: 1.22.2 @@ -7501,11 +8976,19 @@ packages: eslint-scope: 5.1.1 dev: true + /@noble/ciphers@0.3.0: + resolution: {integrity: sha512-ldbrnOjmNRwFdXcTM6uXDcxpMIFrbzAWNnpBPp4oTJTFF0XByGD6vf45WrehZGXRQTRVV+Zm8YP+EgEf+e4cWA==} + /@noble/curves@1.1.0: resolution: {integrity: sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==} dependencies: '@noble/hashes': 1.3.1 + /@noble/curves@1.2.0: + resolution: {integrity: sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==} + dependencies: + '@noble/hashes': 1.3.2 + /@noble/ed25519@1.7.1: resolution: {integrity: sha512-Rk4SkJFaXZiznFyC/t77Q0NKS4FL7TLJJsVG2V2oiEq3kJVeTdxysEe/yRWSpnWMe808XRDJ+VFh5pt/FN5plw==} dev: false @@ -7518,6 +9001,14 @@ packages: resolution: {integrity: sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==} engines: {node: '>= 16'} + /@noble/hashes@1.3.2: + resolution: {integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==} + engines: {node: '>= 16'} + + /@noble/hashes@1.3.3: + resolution: {integrity: sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==} + engines: {node: '>= 16'} + /@noble/secp256k1@2.0.0: resolution: {integrity: sha512-rUGBd95e2a45rlmFTqQJYEFA4/gdIARFfuTuTqLglz0PZ6AKyzyXsEZZq7UZn8hZsvaBgpCzKKBJizT2cJERXw==} dev: false @@ -7624,7 +9115,7 @@ packages: hasBin: true dependencies: nx: 16.6.0 - tslib: 2.6.1 + tslib: 2.6.2 transitivePeerDependencies: - '@swc-node/register' - '@swc/core' @@ -7642,7 +9133,7 @@ packages: nx: 16.6.0 semver: 7.5.3 tmp: 0.2.1 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /@nx/nx-darwin-arm64@16.6.0: @@ -7972,14 +9463,14 @@ packages: dependencies: asn1js: 3.0.5 pvtsutils: 1.3.2 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@peculiar/json-schema@1.1.12: resolution: {integrity: sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==} engines: {node: '>=8.0.0'} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /@peculiar/webcrypto@1.4.1: @@ -7989,7 +9480,7 @@ packages: '@peculiar/asn1-schema': 2.3.3 '@peculiar/json-schema': 1.1.12 pvtsutils: 1.3.2 - tslib: 2.6.1 + tslib: 2.6.2 webcrypto-core: 1.7.5 dev: false @@ -8060,6 +9551,49 @@ packages: config-chain: 1.1.13 dev: true + /@protobufjs/aspromise@1.1.2: + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + dev: false + + /@protobufjs/base64@1.1.2: + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + dev: false + + /@protobufjs/codegen@2.0.4: + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + dev: false + + /@protobufjs/eventemitter@1.1.0: + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + dev: false + + /@protobufjs/fetch@1.1.0: + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + dev: false + + /@protobufjs/float@1.0.2: + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + dev: false + + /@protobufjs/inquire@1.1.0: + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + dev: false + + /@protobufjs/path@1.1.2: + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + dev: false + + /@protobufjs/pool@1.1.0: + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + dev: false + + /@protobufjs/utf8@1.1.0: + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + dev: false + /@puppeteer/browsers@1.7.1: resolution: {integrity: sha512-nIb8SOBgDEMFY2iS2MdnUZOg2ikcYchRrBoF+wtdjieRFKR2uGRipHY/oFLo+2N6anDualyClPzGywTHRGrLfw==} engines: {node: '>=16.3.0'} @@ -8076,236 +9610,446 @@ packages: - supports-color dev: true - /@react-native-community/cli-clean@11.3.5: - resolution: {integrity: sha512-1+7BU962wKkIkHRp/uW3jYbQKKGtU7L+R3g59D8K6uLccuxJYUBJv18753ojMa6SD3SAq5Xh31bAre+YwVcOTA==} + /@react-native-community/cli-clean@12.1.1: + resolution: {integrity: sha512-lbEQJ9xO8DmNbES7nFcGIQC0Q15e9q1zwKfkN2ty2eM93ZTFqYzOwsddlNoRN9FO7diakMWoWgielhcfcIeIrQ==} dependencies: - '@react-native-community/cli-tools': 11.3.5 + '@react-native-community/cli-tools': 12.1.1 chalk: 4.1.2 execa: 5.1.1 - prompts: 2.4.2 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-config@11.3.5: - resolution: {integrity: sha512-fMblIsHlUleKfGsgWyjFJYfx1SqrsnhS/QXfA8w7iT6GrNOOjBp5UWx8+xlMDFcmOb9e42g1ExFDKl3n8FWkxQ==} + /@react-native-community/cli-config@12.1.1: + resolution: {integrity: sha512-og8/yH7ZNMBcRJOGaHcn9BLt1WJF3XvgBw8iYsByVSEN7yvzAbYZ+CvfN6EdObGOqendbnE4lN9CVyQYM9Ufsw==} dependencies: - '@react-native-community/cli-tools': 11.3.5 + '@react-native-community/cli-tools': 12.1.1 chalk: 4.1.2 cosmiconfig: 5.2.1 deepmerge: 4.3.1 glob: 7.2.3 - joi: 17.9.2 + joi: 17.11.0 transitivePeerDependencies: - encoding dev: false - /@react-native-community/cli-debugger-ui@11.3.5: - resolution: {integrity: sha512-o5JVCKEpPUXMX4r3p1cYjiy3FgdOEkezZcQ6owWEae2dYvV19lLYyJwnocm9Y7aG9PvpgI3PIMVh3KZbhS21eA==} + /@react-native-community/cli-debugger-ui@12.1.1: + resolution: {integrity: sha512-q427jvbJ0WdDuS6HNdc3EbmUu/dX/+FWCcZI60xB7m1i/8p+LzmrsoR2yIJCricsAIV3hhiFOGfquZDgrbF27Q==} dependencies: serve-static: 1.15.0 transitivePeerDependencies: - supports-color dev: false - /@react-native-community/cli-doctor@11.3.5: - resolution: {integrity: sha512-+4BuFHjoV4FFjX5y60l0s6nS0agidb1izTVwsFixeFKW73LUkOLu+Ae5HI94RAFEPE4ePEVNgYX3FynIau6K0g==} + /@react-native-community/cli-doctor@12.1.1: + resolution: {integrity: sha512-IUZJ/KUCuz+IzL9GdHUlIf6zF93XadxCBDPseUYb0ucIS+rEb3RmYC+IukYhUWwN3y4F/yxipYy3ytKrQ33AxA==} dependencies: - '@react-native-community/cli-config': 11.3.5 - '@react-native-community/cli-platform-android': 11.3.5 - '@react-native-community/cli-platform-ios': 11.3.5 - '@react-native-community/cli-tools': 11.3.5 + '@react-native-community/cli-config': 12.1.1 + '@react-native-community/cli-platform-android': 12.1.1 + '@react-native-community/cli-platform-ios': 12.1.1 + '@react-native-community/cli-tools': 12.1.1 chalk: 4.1.2 command-exists: 1.2.9 - envinfo: 7.10.0 + deepmerge: 4.3.1 + envinfo: 7.11.0 execa: 5.1.1 hermes-profile-transformer: 0.0.6 ip: 1.1.8 node-stream-zip: 1.15.0 ora: 5.4.1 - prompts: 2.4.2 - semver: 6.3.1 + semver: 7.5.4 strip-ansi: 5.2.0 - sudo-prompt: 9.2.1 wcwidth: 1.0.1 - yaml: 2.3.1 + yaml: 2.3.4 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-hermes@12.1.1: + resolution: {integrity: sha512-J6yxQoZooFRT8+Dtz8Px/bwasQxnbxZZFAFQzOs3f6CAfXrcr/+JLVFZRWRv9XGfcuLdCHr22JUVPAnyEd48DA==} + dependencies: + '@react-native-community/cli-platform-android': 12.1.1 + '@react-native-community/cli-tools': 12.1.1 + chalk: 4.1.2 + hermes-profile-transformer: 0.0.6 + ip: 1.1.8 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-platform-android@12.1.1: + resolution: {integrity: sha512-jnyc9y5cPltBo518pfVZ53dtKGDy02kkCkSIwv4ltaHYse7JyEFxFbzBn9lloWvbZ0iFHvEo1NN78YGPAlXSDw==} + dependencies: + '@react-native-community/cli-tools': 12.1.1 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.2 + glob: 7.2.3 + logkitty: 0.7.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-platform-ios@12.1.1: + resolution: {integrity: sha512-RA2lvFrswwQRIhCV3hoIYZmLe9TkRegpAWimdubtMxRHiv7Eh2dC0VWWR5VdWy3ltbJzeiEpxCoH/EcrMfp9tg==} + dependencies: + '@react-native-community/cli-tools': 12.1.1 + chalk: 4.1.2 + execa: 5.1.1 + fast-xml-parser: 4.3.2 + glob: 7.2.3 + ora: 5.4.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-plugin-metro@12.1.1: + resolution: {integrity: sha512-HV+lW1mFSu6GL7du+0/tfq8/5jytKp+w3n4+MWzRkx5wXvUq3oJjzwe8y+ZvvCqkRPdsOiwFDgJrtPhvaZp+xA==} + dev: false + + /@react-native-community/cli-server-api@12.1.1: + resolution: {integrity: sha512-dUqqEmtEiCMyqFd6LF1UqH0WwXirK2tpU7YhyFsBbigBj3hPz2NmzghCe7DRIcC9iouU0guBxhgmiLtmUEPduQ==} + dependencies: + '@react-native-community/cli-debugger-ui': 12.1.1 + '@react-native-community/cli-tools': 12.1.1 + compression: 1.7.4 + connect: 3.7.0 + errorhandler: 1.5.1 + nocache: 3.0.4 + pretty-format: 26.6.2 + serve-static: 1.15.0 + ws: 7.5.9 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@react-native-community/cli-tools@12.1.1: + resolution: {integrity: sha512-c9vjDVojZnivGsLoVoTZsJjHnwBEI785yV8mgyKTVFx1sciK8lCsIj1Lke7jNpz7UAE1jW94nI7de2B1aQ9rbA==} + dependencies: + appdirsjs: 1.2.7 + chalk: 4.1.2 + find-up: 5.0.0 + mime: 2.6.0 + node-fetch: 2.7.0 + open: 6.4.0 + ora: 5.4.1 + semver: 7.5.4 + shell-quote: 1.8.1 + sudo-prompt: 9.2.1 + transitivePeerDependencies: + - encoding + dev: false + + /@react-native-community/cli-types@12.1.1: + resolution: {integrity: sha512-B9lFEIc1/H2GjiyRCk6ISJNn06h5j0cWuokNm3FmeyGOoGIfm4XYUbnM6IpGlIDdQpTtUzZfNq8CL4CIJZXF0g==} + dependencies: + joi: 17.11.0 + dev: false + + /@react-native-community/cli@12.1.1: + resolution: {integrity: sha512-St/lyxQ//crrigfE2QCqmjDb0IH3S9nmolm0eqmCA1bB8WWUk5dpjTgQk6xxDxz+3YtMghDJkGZPK4AxDXT42g==} + engines: {node: '>=18'} + hasBin: true + dependencies: + '@react-native-community/cli-clean': 12.1.1 + '@react-native-community/cli-config': 12.1.1 + '@react-native-community/cli-debugger-ui': 12.1.1 + '@react-native-community/cli-doctor': 12.1.1 + '@react-native-community/cli-hermes': 12.1.1 + '@react-native-community/cli-plugin-metro': 12.1.1 + '@react-native-community/cli-server-api': 12.1.1 + '@react-native-community/cli-tools': 12.1.1 + '@react-native-community/cli-types': 12.1.1 + chalk: 4.1.2 + commander: 9.5.0 + deepmerge: 4.3.1 + execa: 5.1.1 + find-up: 4.1.0 + fs-extra: 8.1.0 + graceful-fs: 4.2.11 + prompts: 2.4.2 + semver: 7.5.4 + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /@react-native/assets-registry@0.73.1: + resolution: {integrity: sha512-2FgAbU7uKM5SbbW9QptPPZx8N9Ke2L7bsHb+EhAanZjFZunA9PaYtyjUQ1s7HD+zDVqOQIvjkpXSv7Kejd2tqg==} + engines: {node: '>=18'} + dev: false + + /@react-native/babel-plugin-codegen@0.74.0(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-xAM/eVSb5LBkKue3bDZgt76bdsGGzKeF/iEzUNbDTwRQrB3Q5GoceGNM/zVlF+z1xGAkr3jhL+ZyITZGSoIlgw==} + engines: {node: '>=18'} + dependencies: + '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.6) + transitivePeerDependencies: + - '@babel/preset-env' + - supports-color + dev: false + + /@react-native/babel-preset@0.74.0(@babel/core@7.22.9)(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-k+1aaYQeLn+GBmGA5Qs3NKI8uzhLvRRMML+pB/+43ZL6DvCklbuJ5KO5oqRRpF3KZ2t/VKUqqSichpXfFrXGjg==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' + dependencies: + '@babel/core': 7.22.9 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.9) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.9) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.9) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.9) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.22.9) + '@babel/template': 7.22.15 + '@react-native/babel-plugin-codegen': 0.74.0(@babel/preset-env@7.23.6) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.22.9) + react-refresh: 0.14.0 transitivePeerDependencies: - - encoding + - '@babel/preset-env' + - supports-color dev: false - /@react-native-community/cli-hermes@11.3.5: - resolution: {integrity: sha512-+3m34hiaJpFel8BlJE7kJOaPzWR/8U8APZG2LXojbAdBAg99EGmQcwXIgsSVJFvH8h/nezf4DHbsPKigIe33zA==} + /@react-native/babel-preset@0.74.0(@babel/core@7.23.6)(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-k+1aaYQeLn+GBmGA5Qs3NKI8uzhLvRRMML+pB/+43ZL6DvCklbuJ5KO5oqRRpF3KZ2t/VKUqqSichpXfFrXGjg==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' dependencies: - '@react-native-community/cli-platform-android': 11.3.5 - '@react-native-community/cli-tools': 11.3.5 - chalk: 4.1.2 - hermes-profile-transformer: 0.0.6 - ip: 1.1.8 + '@babel/core': 7.23.6 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.6) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-methods': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-private-property-in-object': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/template': 7.22.15 + '@react-native/babel-plugin-codegen': 0.74.0(@babel/preset-env@7.23.6) + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.6) + react-refresh: 0.14.0 transitivePeerDependencies: - - encoding + - '@babel/preset-env' + - supports-color dev: false - /@react-native-community/cli-platform-android@11.3.5: - resolution: {integrity: sha512-s4Lj7FKxJ/BofGi/ifjPfrA9MjFwIgYpHnHBSlqtbsvPoSYzmVCU2qlWM8fb3AmkXIwyYt4A6MEr3MmNT2UoBg==} + /@react-native/codegen@0.73.2(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-lfy8S7umhE3QLQG5ViC4wg5N1Z+E6RnaeIw8w1voroQsXXGPB72IBozh8dAHR3+ceTxIU0KX3A8OpJI8e1+HpQ==} + engines: {node: '>=18'} + peerDependencies: + '@babel/preset-env': ^7.1.6 dependencies: - '@react-native-community/cli-tools': 11.3.5 - chalk: 4.1.2 - execa: 5.1.1 + '@babel/parser': 7.23.6 + '@babel/preset-env': 7.23.6(@babel/core@7.22.9) + flow-parser: 0.206.0 glob: 7.2.3 - logkitty: 0.7.1 + invariant: 2.2.4 + jscodeshift: 0.14.0(@babel/preset-env@7.23.6) + mkdirp: 0.5.6 + nullthrows: 1.1.1 transitivePeerDependencies: - - encoding + - supports-color dev: false - /@react-native-community/cli-platform-ios@11.3.5: - resolution: {integrity: sha512-ytJC/YCFD7P+KuQHOT5Jzh1ho2XbJEjq71yHa1gJP2PG/Q/uB4h1x2XpxDqv5iXU6E250yjvKMmkReKTW4CTig==} + /@react-native/community-cli-plugin@0.73.10(@babel/core@7.22.9)(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-e9kWr1SpVsu0qoHzxtgJCKojvVwaNUfyXXGEFSvQue4zNhuzzoC3Bk9bsJgA1+W7ur4ajRbhz3lnBV8v6lmsbw==} + engines: {node: '>=18'} dependencies: - '@react-native-community/cli-tools': 11.3.5 + '@react-native-community/cli-server-api': 12.1.1 + '@react-native-community/cli-tools': 12.1.1 + '@react-native/dev-middleware': 0.73.5 + '@react-native/metro-babel-transformer': 0.73.12(@babel/core@7.22.9)(@babel/preset-env@7.23.6) chalk: 4.1.2 execa: 5.1.1 - fast-xml-parser: 4.2.7 - glob: 7.2.3 - ora: 5.4.1 + metro: 0.80.1 + metro-config: 0.80.1 + metro-core: 0.80.1 + node-fetch: 2.7.0 + readline: 1.3.0 transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil - encoding + - supports-color + - utf-8-validate dev: false - /@react-native-community/cli-plugin-metro@11.3.5(@babel/core@7.22.9): - resolution: {integrity: sha512-r9AekfeLKdblB7LfWB71IrNy1XM03WrByQlUQajUOZAP2NmUUBLl9pMZscPjJeOSgLpHB9ixEFTIOhTabri/qg==} + /@react-native/community-cli-plugin@0.73.10(@babel/core@7.23.6)(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-e9kWr1SpVsu0qoHzxtgJCKojvVwaNUfyXXGEFSvQue4zNhuzzoC3Bk9bsJgA1+W7ur4ajRbhz3lnBV8v6lmsbw==} + engines: {node: '>=18'} dependencies: - '@react-native-community/cli-server-api': 11.3.5 - '@react-native-community/cli-tools': 11.3.5 + '@react-native-community/cli-server-api': 12.1.1 + '@react-native-community/cli-tools': 12.1.1 + '@react-native/dev-middleware': 0.73.5 + '@react-native/metro-babel-transformer': 0.73.12(@babel/core@7.23.6)(@babel/preset-env@7.23.6) chalk: 4.1.2 execa: 5.1.1 - metro: 0.76.7 - metro-config: 0.76.7 - metro-core: 0.76.7 - metro-react-native-babel-transformer: 0.76.7(@babel/core@7.22.9) - metro-resolver: 0.76.7 - metro-runtime: 0.76.7 + metro: 0.80.1 + metro-config: 0.80.1 + metro-core: 0.80.1 + node-fetch: 2.7.0 readline: 1.3.0 transitivePeerDependencies: - '@babel/core' + - '@babel/preset-env' - bufferutil - encoding - supports-color - utf-8-validate dev: false - /@react-native-community/cli-server-api@11.3.5: - resolution: {integrity: sha512-PM/jF13uD1eAKuC84lntNuM5ZvJAtyb+H896P1dBIXa9boPLa3KejfUvNVoyOUJ5s8Ht25JKbc3yieV2+GMBDA==} + /@react-native/debugger-frontend@0.73.2: + resolution: {integrity: sha512-YDCerm7FwaWMsc4zVBWQ3jMuFoq+a3DGhS4LAynwsFqCyo8Gmir2ARvmOHQdqZZ2KrBWqaIyiHh1nJ/UrAJntw==} + engines: {node: '>=18'} + dev: false + + /@react-native/dev-middleware@0.73.5: + resolution: {integrity: sha512-Ca9RHPaQXQn9yZke4n8sG09u+RuWpQun4imKg3tuykwPH3UrTTSSxoP/I04xdxsAOxaCkCl/ZdgL6SiAmzxWiQ==} + engines: {node: '>=18'} dependencies: - '@react-native-community/cli-debugger-ui': 11.3.5 - '@react-native-community/cli-tools': 11.3.5 - compression: 1.7.4 + '@isaacs/ttlcache': 1.4.1 + '@react-native/debugger-frontend': 0.73.2 + chrome-launcher: 0.15.2 + chromium-edge-launcher: 1.0.0 connect: 3.7.0 - errorhandler: 1.5.1 - nocache: 3.0.4 - pretty-format: 26.6.2 + debug: 2.6.9 + node-fetch: 2.7.0 + open: 7.4.2 serve-static: 1.15.0 - ws: 7.5.9 + temp-dir: 2.0.0 transitivePeerDependencies: - - bufferutil - encoding - supports-color - - utf-8-validate dev: false - /@react-native-community/cli-tools@11.3.5: - resolution: {integrity: sha512-zDklE1+ah/zL4BLxut5XbzqCj9KTHzbYBKX7//cXw2/0TpkNCaY9c+iKx//gZ5m7U1OKbb86Fm2b0AKtKVRf6Q==} - dependencies: - appdirsjs: 1.2.7 - chalk: 4.1.2 - find-up: 5.0.0 - mime: 2.6.0 - node-fetch: 2.6.12 - open: 6.4.0 - ora: 5.4.1 - semver: 6.3.1 - shell-quote: 1.8.1 - transitivePeerDependencies: - - encoding + /@react-native/gradle-plugin@0.73.4: + resolution: {integrity: sha512-PMDnbsZa+tD55Ug+W8CfqXiGoGneSSyrBZCMb5JfiB3AFST3Uj5e6lw8SgI/B6SKZF7lG0BhZ6YHZsRZ5MlXmg==} + engines: {node: '>=18'} dev: false - /@react-native-community/cli-types@11.3.5: - resolution: {integrity: sha512-pf0kdWMEfPSV/+8rcViDCFzbLMtWIHMZ8ay7hKwqaoWegsJ0oprSF2tSTH+LSC/7X1Beb9ssIvHj1m5C4es5Xg==} - dependencies: - joi: 17.9.2 + /@react-native/js-polyfills@0.73.1: + resolution: {integrity: sha512-ewMwGcumrilnF87H4jjrnvGZEaPFCAC4ebraEK+CurDDmwST/bIicI4hrOAv+0Z0F7DEK4O4H7r8q9vH7IbN4g==} + engines: {node: '>=18'} dev: false - /@react-native-community/cli@11.3.5(@babel/core@7.22.9): - resolution: {integrity: sha512-wMXgKEWe6uesw7vyXKKjx5EDRog0QdXHxdgRguG14AjQRao1+4gXEWq2yyExOTi/GDY6dfJBUGTCwGQxhnk/Lg==} - engines: {node: '>=16'} - hasBin: true + /@react-native/metro-babel-transformer@0.73.12(@babel/core@7.22.9)(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-VmxN5aaoOprzDzUR+8c3XYhG0FoMOO6n0ToylCW6EeZCuf5RTY7HWVOhacabGoB1mHrWzJ0wWEsqX+eD4iFxoA==} + engines: {node: '>=18'} + peerDependencies: + '@babel/core': '*' dependencies: - '@react-native-community/cli-clean': 11.3.5 - '@react-native-community/cli-config': 11.3.5 - '@react-native-community/cli-debugger-ui': 11.3.5 - '@react-native-community/cli-doctor': 11.3.5 - '@react-native-community/cli-hermes': 11.3.5 - '@react-native-community/cli-plugin-metro': 11.3.5(@babel/core@7.22.9) - '@react-native-community/cli-server-api': 11.3.5 - '@react-native-community/cli-tools': 11.3.5 - '@react-native-community/cli-types': 11.3.5 - chalk: 4.1.2 - commander: 9.5.0 - execa: 5.1.1 - find-up: 4.1.0 - fs-extra: 8.1.0 - graceful-fs: 4.2.11 - prompts: 2.4.2 - semver: 6.3.1 + '@babel/core': 7.22.9 + '@react-native/babel-preset': 0.74.0(@babel/core@7.22.9)(@babel/preset-env@7.23.6) + babel-preset-fbjs: 3.4.0(@babel/core@7.22.9) + hermes-parser: 0.15.0 + nullthrows: 1.1.1 transitivePeerDependencies: - - '@babel/core' - - bufferutil - - encoding + - '@babel/preset-env' - supports-color - - utf-8-validate - dev: false - - /@react-native/assets-registry@0.72.0: - resolution: {integrity: sha512-Im93xRJuHHxb1wniGhBMsxLwcfzdYreSZVQGDoMJgkd6+Iky61LInGEHnQCTN0fKNYF1Dvcofb4uMmE1RQHXHQ==} dev: false - /@react-native/codegen@0.72.6(@babel/preset-env@7.22.9): - resolution: {integrity: sha512-idTVI1es/oopN0jJT/0jB6nKdvTUKE3757zA5+NPXZTeB46CIRbmmos4XBiAec8ufu9/DigLPbHTYAaMNZJ6Ig==} + /@react-native/metro-babel-transformer@0.73.12(@babel/core@7.23.6)(@babel/preset-env@7.23.6): + resolution: {integrity: sha512-VmxN5aaoOprzDzUR+8c3XYhG0FoMOO6n0ToylCW6EeZCuf5RTY7HWVOhacabGoB1mHrWzJ0wWEsqX+eD4iFxoA==} + engines: {node: '>=18'} peerDependencies: - '@babel/preset-env': ^7.1.6 + '@babel/core': '*' dependencies: - '@babel/parser': 7.22.7 - '@babel/preset-env': 7.22.9(@babel/core@7.22.9) - flow-parser: 0.206.0 - jscodeshift: 0.14.0(@babel/preset-env@7.22.9) + '@babel/core': 7.23.6 + '@react-native/babel-preset': 0.74.0(@babel/core@7.23.6)(@babel/preset-env@7.23.6) + babel-preset-fbjs: 3.4.0(@babel/core@7.23.6) + hermes-parser: 0.15.0 nullthrows: 1.1.1 transitivePeerDependencies: + - '@babel/preset-env' - supports-color dev: false - /@react-native/gradle-plugin@0.72.11: - resolution: {integrity: sha512-P9iRnxiR2w7EHcZ0mJ+fmbPzMby77ZzV6y9sJI3lVLJzF7TLSdbwcQyD3lwMsiL+q5lKUHoZJS4sYmih+P2HXw==} - dev: false - - /@react-native/js-polyfills@0.72.1: - resolution: {integrity: sha512-cRPZh2rBswFnGt5X5EUEPs0r+pAsXxYsifv/fgy9ZLQokuT52bPH+9xjDR+7TafRua5CttGW83wP4TntRcWNDA==} - dev: false - /@react-native/normalize-color@2.1.0: resolution: {integrity: sha512-Z1jQI2NpdFJCVgpY+8Dq/Bt3d+YUi1928Q+/CZm/oh66fzM0RUl54vvuXlPJKybH4pdCZey1eDTPaLHkMPNgWA==} dev: false optional: true - /@react-native/normalize-colors@0.72.0: - resolution: {integrity: sha512-285lfdqSXaqKuBbbtP9qL2tDrfxdOFtIMvkKadtleRQkdOxx+uzGvFr82KHmc/sSiMtfXGp7JnFYWVh4sFl7Yw==} + /@react-native/normalize-colors@0.73.2: + resolution: {integrity: sha512-bRBcb2T+I88aG74LMVHaKms2p/T8aQd8+BZ7LuuzXlRfog1bMWWn/C5i0HVuvW4RPtXQYgIlGiXVDy9Ir1So/w==} dev: false - /@react-native/virtualized-lists@0.72.6(react-native@0.72.3): - resolution: {integrity: sha512-JhT6ydu35LvbSKdwnhWDuGHMOwM0WAh9oza/X8vXHA8ELHRyQ/4p8eKz/bTQcbQziJaaleUURToGhFuCtgiMoA==} + /@react-native/virtualized-lists@0.73.3(react-native@0.73.0): + resolution: {integrity: sha512-3qPNlLk9T2+qZpqcB1lvuy5LjeQezNNG/oV1GMyTrXR8lf/gFgsz2+ZxlmpNt3S4/jBypQbHOpGi6K+DjrN96A==} + engines: {node: '>=18'} peerDependencies: react-native: '*' dependencies: invariant: 2.2.4 nullthrows: 1.1.1 - react-native: 0.72.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9)(react@18.2.0) + react-native: 0.73.0(@babel/core@7.22.9)(@babel/preset-env@7.23.6)(react@18.2.0) dev: false /@rollup/plugin-babel@5.3.1(@babel/core@7.22.9)(rollup@2.79.1): @@ -8366,7 +10110,7 @@ packages: resolution: {integrity: sha512-sXo/qW2/pAcmT43VoRKOJbDOfV3cYpq3szSVfIThQXNt+E4DfKj361vaAt3c88U5tPUxzEswam7GW48PJqtKAg==} dev: true - /@rushstack/node-core-library@3.59.6(@types/node@20.6.2): + /@rushstack/node-core-library@3.59.6(@types/node@20.8.2): resolution: {integrity: sha512-bMYJwNFfWXRNUuHnsE9wMlW/mOB4jIwSUkRKtu02CwZhQdmzMsUbxE0s1xOLwTpNIwlzfW/YT7OnOHgDffLgYg==} peerDependencies: '@types/node': '*' @@ -8374,7 +10118,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -8384,7 +10128,7 @@ packages: z-schema: 5.0.5 dev: false - /@rushstack/node-core-library@3.60.0(@types/node@20.6.2): + /@rushstack/node-core-library@3.60.0(@types/node@20.8.2): resolution: {integrity: sha512-PcyrqhILvzU+65wMFybQ2VeGNnU5JzhDq2OvUi3j6jPUxyllM7b2hrRUwCuVaYboewYzIbpzXFzgxe2K7ii1nw==} peerDependencies: '@types/node': '*' @@ -8392,7 +10136,25 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 + colors: 1.2.5 + fs-extra: 7.0.1 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.2 + semver: 7.5.4 + z-schema: 5.0.5 + dev: true + + /@rushstack/node-core-library@3.61.0(@types/node@20.8.2): + resolution: {integrity: sha512-tdOjdErme+/YOu4gPed3sFS72GhtWCgNV9oDsHDnoLY5oDfwjKUc9Z+JOZZ37uAxcm/OCahDHfuu2ugqrfWAVQ==} + peerDependencies: + '@types/node': '*' + peerDependenciesMeta: + '@types/node': + optional: true + dependencies: + '@types/node': 20.8.2 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -8409,8 +10171,8 @@ packages: strip-json-comments: 3.1.1 dev: false - /@rushstack/rig-package@0.5.0: - resolution: {integrity: sha512-bGnOW4DWHOePDiABKy6qyqYJl9i7fKn4bRucExRVt5QzyPxuVHMl8CMmCabtoNSpXzgG3qymWOrMoa/W2PpJrw==} + /@rushstack/rig-package@0.5.1: + resolution: {integrity: sha512-pXRYSe29TjRw7rqxD4WS3HN/sRSbfr+tJs4a9uuaSIBAITbUggygdhuG0VrO0EO+QqH91GhYMN4S6KRtOEmGVA==} dependencies: resolve: 1.22.2 strip-json-comments: 3.1.1 @@ -8434,32 +10196,41 @@ packages: string-argv: 0.3.2 dev: true - /@scure/base@1.1.1: - resolution: {integrity: sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==} + /@rushstack/ts-command-line@4.16.1: + resolution: {integrity: sha512-+OCsD553GYVLEmz12yiFjMOzuPeCiZ3f8wTiFHL30ZVXexTyPmgjwXEhg2K2P0a2lVf+8YBy7WtPoflB2Fp8/A==} + dependencies: + '@types/argparse': 1.0.38 + argparse: 1.0.10 + colors: 1.2.5 + string-argv: 0.3.2 + dev: true + + /@scure/base@1.1.3: + resolution: {integrity: sha512-/+SgoRjLq7Xlf0CWuLHq2LUZeL/w65kfzAPG5NH9pcmBhs+nunQTn4gvdwgMTIXnt9b2C/1SeL2XiysZEyIC9Q==} /@scure/bip32@1.3.1: resolution: {integrity: sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==} dependencies: '@noble/curves': 1.1.0 '@noble/hashes': 1.3.1 - '@scure/base': 1.1.1 + '@scure/base': 1.1.3 /@scure/bip39@1.2.1: resolution: {integrity: sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==} dependencies: '@noble/hashes': 1.3.1 - '@scure/base': 1.1.1 + '@scure/base': 1.1.3 /@segment/loosely-validate-event@2.0.0: resolution: {integrity: sha512-ZMCSfztDBqwotkl848ODgVcAmN4OItEWDCkshcKz0/W6gGSQayuuCtWV/MlodFivAZD793d6UgANd6wCXUfrIw==} dependencies: - component-type: 1.2.1 + component-type: 1.2.2 join-component: 1.1.0 dev: false optional: true - /@semantic-release/commit-analyzer@11.0.0-beta.4(semantic-release@22.0.0): - resolution: {integrity: sha512-K6HkgFadJ+imAc0n2P9sLjrEw+xAPqigsu6RS+wCUqc6et2J7ig8uJ4hqujXsXHZLtsKQt/5yjw0t3FjcvseIA==} + /@semantic-release/commit-analyzer@11.0.0(semantic-release@22.0.0): + resolution: {integrity: sha512-uEXyf4Z0AWJuxI9TbSQP5kkIYqus1/E1NcmE7pIv6d6/m/5EJcNWAGR4FOo34vrV26FhEaRVkxFfYzp/M7BKIg==} engines: {node: ^18.17 || >=20.6.1} peerDependencies: semantic-release: '>=20.1.0' @@ -8471,7 +10242,7 @@ packages: import-from: 4.0.0 lodash-es: 4.17.21 micromatch: 4.0.5 - semantic-release: 22.0.0(typescript@5.2.2) + semantic-release: 22.0.0 transitivePeerDependencies: - supports-color dev: true @@ -8497,12 +10268,12 @@ packages: dir-glob: 3.0.1 globby: 13.2.2 http-proxy-agent: 7.0.0 - https-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.1 issue-parser: 6.0.0 lodash-es: 4.17.21 mime: 3.0.0 p-filter: 3.0.0 - semantic-release: 22.0.0(typescript@5.2.2) + semantic-release: 22.0.0 url-join: 5.0.0 transitivePeerDependencies: - supports-color @@ -8521,17 +10292,17 @@ packages: lodash-es: 4.17.21 nerf-dart: 1.0.0 normalize-url: 8.0.0 - npm: 10.1.0 + npm: 10.2.0 rc: 1.2.8 read-pkg: 8.0.0 registry-auth-token: 5.0.2 - semantic-release: 22.0.0(typescript@5.2.2) + semantic-release: 22.0.0 semver: 7.5.4 tempy: 3.1.0 dev: true - /@semantic-release/release-notes-generator@12.0.0-beta.3(semantic-release@22.0.0): - resolution: {integrity: sha512-87tr1FqBTCDIyfiqPTJrRU/aANzaekmhtgBV/nm2D3WCDp6Wr9PydsFOTSTL+H7LZZKDZANsRv9UGRSBEPvtRQ==} + /@semantic-release/release-notes-generator@12.0.0(semantic-release@22.0.0): + resolution: {integrity: sha512-m7Ds8ComP1KJgA2Lke2xMwE1TOOU40U7AzP4lT8hJ2tUAeicziPz/1GeDFmRkTOkMFlfHvE6kuvMkvU+mIzIDQ==} engines: {node: ^18.17 || >=20.6.1} peerDependencies: semantic-release: '>=20.1.0' @@ -8546,7 +10317,7 @@ packages: into-stream: 7.0.0 lodash-es: 4.17.21 read-pkg-up: 10.0.0 - semantic-release: 22.0.0(typescript@5.2.2) + semantic-release: 22.0.0 transitivePeerDependencies: - supports-color dev: true @@ -8618,13 +10389,13 @@ packages: engines: {node: '>= 8'} dev: true - /@sphereon/ion-pow@0.2.0(@sphereon/react-native-argon2@2.0.9)(react-native@0.72.3): + /@sphereon/ion-pow@0.2.0(@sphereon/react-native-argon2@2.0.9)(react-native@0.73.0): resolution: {integrity: sha512-SpEG4mV5D+K/jrqGI9QSBPPKO5+Kpu6F3cINBKbWiz+ZI4boWwz9JAdNspD45YnnMqTbR14CDEGtHwOaHboJQg==} peerDependencies: '@sphereon/react-native-argon2': ^2.0.7 dependencies: - '@sphereon/isomorphic-argon2': 1.0.1(@sphereon/react-native-argon2@2.0.9)(react-native@0.72.3) - '@sphereon/react-native-argon2': 2.0.9(react-native@0.72.3) + '@sphereon/isomorphic-argon2': 1.0.1(@sphereon/react-native-argon2@2.0.9)(react-native@0.73.0) + '@sphereon/react-native-argon2': 2.0.9(react-native@0.73.0) cross-fetch: 3.1.8 debug: 4.3.4 uint8arrays: 3.1.1 @@ -8634,24 +10405,24 @@ packages: - supports-color dev: false - /@sphereon/isomorphic-argon2@1.0.1(@sphereon/react-native-argon2@2.0.9)(react-native@0.72.3): + /@sphereon/isomorphic-argon2@1.0.1(@sphereon/react-native-argon2@2.0.9)(react-native@0.73.0): resolution: {integrity: sha512-Z40mdiuuZjII19FfIsti9JFGqX56jhpaeZb135BZayJPaRSbi8JnbJ3pzulJJAHsymkWzVqMqt242fBKpualHg==} peerDependencies: '@sphereon/react-native-argon2': ^2.0.9 react-native: '>=0.60.0' dependencies: - '@sphereon/react-native-argon2': 2.0.9(react-native@0.72.3) + '@sphereon/react-native-argon2': 2.0.9(react-native@0.73.0) argon2-browser: 1.18.0 - react-native: 0.72.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9)(react@18.2.0) + react-native: 0.73.0(@babel/core@7.23.6)(@babel/preset-env@7.23.6)(react@18.2.0) uint8arrays: 3.1.1 dev: false - /@sphereon/react-native-argon2@2.0.9(react-native@0.72.3): + /@sphereon/react-native-argon2@2.0.9(react-native@0.73.0): resolution: {integrity: sha512-mXcp3meaKbv5TpEPxItZ1ZuRqkdNf8vjx3EM+GqNVQ8QQF9pbD3jw6wQfuFRPc+8kN+m9GEiVVbd9I0m50OPBg==} peerDependencies: react-native: '>=0.67.0' dependencies: - react-native: 0.72.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9)(react@18.2.0) + react-native: 0.73.0(@babel/core@7.23.6)(@babel/preset-env@7.23.6)(react@18.2.0) dev: false /@sqltools/formatter@1.2.5: @@ -8961,12 +10732,12 @@ packages: resolution: {integrity: sha512-p/QnG3QKS4218hjIDgdvJOFATCXsAnZKgy4egqRrJLlo3Y6OaDBg7cA73dixOwUPoEKob0K6rLIGcsCI/L1acw==} dev: false - /@transmute/did-key-common@0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3): + /@transmute/did-key-common@0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-Iryh/HcGIvmTtWFTRaG/JEgbUsqI5OqKqkR2676yQWK4ajLMsyNattz5n0ZfFQk/4U7Ee6pJvvKRduFDAqqV0Q==} engines: {node: '>=14'} dependencies: '@did-core/data-model': 0.1.1-unstable.15 - '@did-core/did-ld-json': 0.1.1-unstable.15(expo@49.0.6)(react-native@0.72.3) + '@did-core/did-ld-json': 0.1.1-unstable.15(expo@49.0.21)(react-native@0.73.0) '@transmute/did-context': 0.6.1-unstable.37 '@transmute/ld-key-pair': 0.6.1-unstable.37 '@transmute/security-context': 0.6.1-unstable.37 @@ -8978,11 +10749,11 @@ packages: - web-streams-polyfill dev: false - /@transmute/did-key-ed25519@0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3): + /@transmute/did-key-ed25519@0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-9QdXl58DjwqBuOJBx6DtvaNW2bZLmVBxMSq2En4RAQcGIz1GGulyEQ1NB7PLIAgnam3LIFxiK6RiQGQTfJmmJg==} engines: {node: '>=14'} dependencies: - '@transmute/did-key-common': 0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3) + '@transmute/did-key-common': 0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0) '@transmute/ed25519-key-pair': 0.6.1-unstable.37 transitivePeerDependencies: - domexception @@ -8992,11 +10763,11 @@ packages: - web-streams-polyfill dev: false - /@transmute/did-key-secp256k1@0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3): + /@transmute/did-key-secp256k1@0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-C/Gyu2U3NQZ9Gxu4WVwUk8h0ERbY9Z4Kjk0P49p3IQFrWK19XmVXjA+b1RiqffhYzWJ6fH5TPYIt2LW5MRQmUA==} engines: {node: '>=14'} dependencies: - '@transmute/did-key-common': 0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3) + '@transmute/did-key-common': 0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0) '@transmute/secp256k1-key-pair': 0.7.0-unstable.79 transitivePeerDependencies: - domexception @@ -9006,11 +10777,11 @@ packages: - web-streams-polyfill dev: false - /@transmute/did-key-x25519@0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3): + /@transmute/did-key-x25519@0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-Jm5UxwI9EhlfVQ9D0Clj9RlMvhOi8nqAgQG30KMzjFMVGfWqIPwQNZFvmL+XsQ7g3dfTo5iQwXBY0de/f+RoMA==} engines: {node: '>=14'} dependencies: - '@transmute/did-key-common': 0.3.0-unstable.10(expo@49.0.6)(react-native@0.72.3) + '@transmute/did-key-common': 0.3.0-unstable.10(expo@49.0.21)(react-native@0.73.0) '@transmute/x25519-key-pair': 0.7.0-unstable.79 transitivePeerDependencies: - domexception @@ -9047,14 +10818,14 @@ packages: '@transmute/x25519-key-pair': 0.7.0-unstable.81 dev: false - /@transmute/ed25519-signature-2018@0.7.0-unstable.81(expo@49.0.6)(react-native@0.72.3): + /@transmute/ed25519-signature-2018@0.7.0-unstable.81(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-qgDKvBuIFPRWmxydnQVNzdc0MttlN1s0NAgeEFpDGbL7SX9/9nnx/dC+5RGnrpu/EiShNKFhF4TBRq8HBmorsw==} engines: {node: '>=16'} dependencies: '@transmute/credentials-context': 0.7.0-unstable.81 '@transmute/ed25519-key-pair': 0.7.0-unstable.2 '@transmute/jose-ld': 0.7.0-unstable.81 - '@transmute/jsonld': 0.0.4(expo@49.0.6)(react-native@0.72.3) + '@transmute/jsonld': 0.0.4(expo@49.0.21)(react-native@0.73.0) '@transmute/security-context': 0.7.0-unstable.81 transitivePeerDependencies: - domexception @@ -9075,13 +10846,13 @@ packages: web-streams-polyfill: 3.2.1 dev: false - /@transmute/json-web-signature@0.7.0-unstable.81(expo@49.0.6)(react-native@0.72.3): + /@transmute/json-web-signature@0.7.0-unstable.81(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-RFC34CnF571dK/K8uRr8dLLZySgrAr5vhhMB2YgGEy51cWzgYeLuhJw6Pzmm67E/r4CAa+r7/+hqVUfgihkNXw==} engines: {node: '>=16'} dependencies: '@transmute/ed25519-key-pair': 0.7.0-unstable.81 '@transmute/jose-ld': 0.7.0-unstable.81 - '@transmute/jsonld': 0.0.4(expo@49.0.6)(react-native@0.72.3) + '@transmute/jsonld': 0.0.4(expo@49.0.21)(react-native@0.73.0) '@transmute/secp256k1-key-pair': 0.7.0-unstable.81 '@transmute/security-context': 0.7.0-unstable.81 '@transmute/web-crypto-key-pair': 0.7.0-unstable.81 @@ -9092,12 +10863,12 @@ packages: - web-streams-polyfill dev: false - /@transmute/jsonld@0.0.4(expo@49.0.6)(react-native@0.72.3): + /@transmute/jsonld@0.0.4(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-6G++8imMYW9dtTvATPHNfrV3lLeX5E57DOmlgIDfO0A0yjkBCss1usB80NfONS26ynyveb8vTbp4nQDW9Ki4Rw==} engines: {node: '>=16'} dependencies: json-pointer: 0.6.2 - jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.6)(react-native@0.72.3) + jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.21)(react-native@0.73.0) transitivePeerDependencies: - domexception - expo @@ -9236,7 +11007,7 @@ packages: /@types/accepts@1.3.5: resolution: {integrity: sha512-jOdnI/3qTpHABjM5cx1Hc0sKsPoYCp+DP/GJRGtDlPd7fiV9oXGGIcjW/ZOxLIvjGz8MA+uMZI9metHlgqbgwQ==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.10.4 dev: true /@types/argparse@1.0.38: @@ -9274,38 +11045,38 @@ packages: /@types/blessed@0.1.22: resolution: {integrity: sha512-BsCmBwdn2ELV94FvMXGX1L1UIF/KO7kZvd1PKRbNG9lgiVYoyzcg8Y77S8VeWxX3zS8PUMIdZy1cWpSdvaOx9Q==} dependencies: - '@types/node': 20.4.9 + '@types/node': 20.8.2 dev: false /@types/bn.js@5.1.1: resolution: {integrity: sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/body-parser@1.19.2: resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} dependencies: '@types/connect': 3.4.35 - '@types/node': 20.6.2 + '@types/node': 20.8.2 /@types/bonjour@3.5.10: resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/connect-history-api-fallback@1.3.5: resolution: {integrity: sha512-h8QJa8xSb1WD4fpKBDcATDNGXghFj6/3GRWG6dhmRcu0RX1Ubasur2Uvx5aeEwlf0MwblEC2bMzzMQntxnw/Cw==} dependencies: '@types/express-serve-static-core': 4.17.35 - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/connect@3.4.35: resolution: {integrity: sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 /@types/content-disposition@0.5.5: resolution: {integrity: sha512-v6LCdKfK6BwcqMo+wYW05rLS12S0ZO0Fl4w1h4aaZMD7bqT3gVUns6FvLJKGZHQmYn3SX55JWGpziwJRwVgutA==} @@ -9317,14 +11088,13 @@ packages: '@types/connect': 3.4.35 '@types/express': 4.17.17 '@types/keygrip': 1.0.2 - '@types/node': 20.6.2 + '@types/node': 20.10.4 dev: true /@types/debug@4.1.8: resolution: {integrity: sha512-/vPO1EPOs306Cvhwv7KfVfYvOJqA/S/AXjaHQiJboCZzcNDb+TIJFN9/2C9DZ//ijSKWioNyUxD792QmDJ+HKQ==} dependencies: '@types/ms': 0.7.31 - dev: true /@types/eslint-scope@3.7.4: resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} @@ -9370,7 +11140,7 @@ packages: /@types/express-serve-static-core@4.17.35: resolution: {integrity: sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 '@types/qs': 6.9.7 '@types/range-parser': 1.2.4 '@types/send': 0.17.1 @@ -9387,13 +11157,13 @@ packages: resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: '@types/jsonfile': 6.1.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/graceful-fs@4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/html-minifier-terser@6.1.0: @@ -9411,7 +11181,7 @@ packages: /@types/http-proxy@1.17.9: resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/inquirer-autocomplete-prompt@3.0.0: @@ -9430,16 +11200,32 @@ packages: /@types/istanbul-lib-coverage@2.0.4: resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + /@types/istanbul-lib-coverage@2.0.6: + resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} + dev: false + /@types/istanbul-lib-report@3.0.0: resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} dependencies: '@types/istanbul-lib-coverage': 2.0.4 + /@types/istanbul-lib-report@3.0.3: + resolution: {integrity: sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==} + dependencies: + '@types/istanbul-lib-coverage': 2.0.6 + dev: false + /@types/istanbul-reports@3.0.1: resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} dependencies: '@types/istanbul-lib-report': 3.0.0 + /@types/istanbul-reports@3.0.4: + resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + dependencies: + '@types/istanbul-lib-report': 3.0.3 + dev: false + /@types/jest-environment-puppeteer@5.0.3: resolution: {integrity: sha512-vWGfeb+0TOPZy7+VscKURWzE5lzYjclSWLxtjVpDAYcjUv8arAS1av06xK3mpgeNCDVx7XvavD8Elq1a4w9wIA==} dependencies: @@ -9458,7 +11244,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 '@types/tough-cookie': 4.0.2 parse5: 7.1.2 dev: true @@ -9482,7 +11268,7 @@ packages: /@types/jsonfile@6.1.1: resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/keygrip@1.0.2: @@ -9505,7 +11291,7 @@ packages: '@types/http-errors': 2.0.1 '@types/keygrip': 1.0.2 '@types/koa-compose': 3.2.5 - '@types/node': 20.6.2 + '@types/node': 20.10.4 dev: true /@types/lru-cache@5.1.1: @@ -9528,7 +11314,6 @@ packages: /@types/ms@0.7.31: resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} - dev: true /@types/node-fetch@3.0.3: resolution: {integrity: sha512-HhggYPH5N+AQe/OmN6fmhKmRRt2XuNJow+R3pQwJxOOF9GuwM7O2mheyGeIrs5MOIeNjDEdgdoyHBOrFeJBR3g==} @@ -9537,11 +11322,16 @@ packages: node-fetch: 3.3.0 dev: true - /@types/node@20.4.9: - resolution: {integrity: sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==} + /@types/node@18.15.13: + resolution: {integrity: sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==} - /@types/node@20.6.2: - resolution: {integrity: sha512-Y+/1vGBHV/cYk6OI1Na/LHzwnlNCAfU3ZNGrc1LdRe/LAIbdDPTTv/HU3M7yXN448aTVDq3eKRm2cg7iKLb8gw==} + /@types/node@20.10.4: + resolution: {integrity: sha512-D08YG6rr8X90YB56tSIuBaddy/UXAA9RKJoFvrsnogAum/0pmjkgi4+2nx96A330FmioegBWmEYQ+syqCFaveg==} + dependencies: + undici-types: 5.26.5 + + /@types/node@20.8.2: + resolution: {integrity: sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==} /@types/normalize-package-data@2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -9586,7 +11376,7 @@ packages: /@types/puppeteer@5.4.7: resolution: {integrity: sha512-JdGWZZYL0vKapXF4oQTC5hLVNfOgdPrqeZ1BiQnGk5cB7HeE91EWUiTdVSdQPobRN8rIcdffjiOgCYJ/S8QrnQ==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/q@1.5.5: @@ -9620,7 +11410,7 @@ packages: /@types/resolve@1.17.1: resolution: {integrity: sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/retry@0.12.0: @@ -9643,7 +11433,7 @@ packages: resolution: {integrity: sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==} dependencies: '@types/mime': 1.3.2 - '@types/node': 20.6.2 + '@types/node': 20.8.2 /@types/serve-index@1.9.1: resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==} @@ -9655,19 +11445,19 @@ packages: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.10.4 dev: false /@types/serve-static@1.15.1: resolution: {integrity: sha512-NUo5XNiAdULrJENtJXZZ3fHtfMolzZwczzBbnAeBbqBwG+LaG6YaJtuwzwGSQZ2wsCrxjEhNNjAkKigy3n8teQ==} dependencies: '@types/mime': 3.0.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 /@types/sockjs@0.3.33: resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true /@types/stack-utils@2.0.1: @@ -9683,7 +11473,7 @@ packages: /@types/through@0.0.30: resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.10.4 dev: true /@types/tough-cookie@4.0.2: @@ -9709,37 +11499,42 @@ packages: /@types/ws@8.5.5: resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==} dependencies: - '@types/node': 20.4.9 + '@types/node': 20.8.2 dev: true /@types/yargs-parser@21.0.0: resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} - /@types/yargs@15.0.15: - resolution: {integrity: sha512-IziEYMU9XoVj8hWg7k+UJrXALkGFjWJhn5QFEv9q4p+v40oZhSuC135M38st8XPjICL7Ey4TV64ferBGUoJhBg==} + /@types/yargs-parser@21.0.3: + resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} + dev: false + + /@types/yargs@15.0.19: + resolution: {integrity: sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==} dependencies: - '@types/yargs-parser': 21.0.0 + '@types/yargs-parser': 21.0.3 dev: false /@types/yargs@16.0.5: resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==} dependencies: '@types/yargs-parser': 21.0.0 + dev: true /@types/yargs@17.0.24: resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==} dependencies: '@types/yargs-parser': 21.0.0 - /@types/yauzl@2.10.0: - resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} requiresBuild: true dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 dev: true optional: true - /@typescript-eslint/eslint-plugin@5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/eslint-plugin@5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9750,12 +11545,12 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.48.1(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.48.1(eslint@8.55.0)(typescript@5.2.2) '@typescript-eslint/scope-manager': 5.48.1 - '@typescript-eslint/type-utils': 5.48.1(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/utils': 5.48.1(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/type-utils': 5.48.1(eslint@8.55.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.48.1(eslint@8.55.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.49.0 + eslint: 8.55.0 ignore: 5.2.4 natural-compare-lite: 1.4.0 regexpp: 3.2.0 @@ -9766,20 +11561,20 @@ packages: - supports-color dev: true - /@typescript-eslint/experimental-utils@5.48.1(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/experimental-utils@5.48.1(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-8OoIZZuOeqsm5cxn2f01qHWtVC3M4iixSsfZXPiQUg4Sl4LiU+b5epcJFwxNfqeoLl+SGncELyi3x99zI6C0ng==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.1(eslint@8.49.0)(typescript@5.2.2) - eslint: 8.49.0 + '@typescript-eslint/utils': 5.48.1(eslint@8.55.0)(typescript@5.2.2) + eslint: 8.55.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/parser@5.48.1(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/parser@5.48.1(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9793,7 +11588,7 @@ packages: '@typescript-eslint/types': 5.48.1 '@typescript-eslint/typescript-estree': 5.48.1(typescript@5.2.2) debug: 4.3.4 - eslint: 8.49.0 + eslint: 8.55.0 typescript: 5.2.2 transitivePeerDependencies: - supports-color @@ -9807,7 +11602,7 @@ packages: '@typescript-eslint/visitor-keys': 5.48.1 dev: true - /@typescript-eslint/type-utils@5.48.1(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/type-utils@5.48.1(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9818,9 +11613,9 @@ packages: optional: true dependencies: '@typescript-eslint/typescript-estree': 5.48.1(typescript@5.2.2) - '@typescript-eslint/utils': 5.48.1(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/utils': 5.48.1(eslint@8.55.0)(typescript@5.2.2) debug: 4.3.4 - eslint: 8.49.0 + eslint: 8.55.0 tsutils: 3.21.0(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: @@ -9853,7 +11648,7 @@ packages: - supports-color dev: true - /@typescript-eslint/utils@5.48.1(eslint@8.49.0)(typescript@5.2.2): + /@typescript-eslint/utils@5.48.1(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -9864,9 +11659,9 @@ packages: '@typescript-eslint/scope-manager': 5.48.1 '@typescript-eslint/types': 5.48.1 '@typescript-eslint/typescript-estree': 5.48.1(typescript@5.2.2) - eslint: 8.49.0 + eslint: 8.55.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0(eslint@8.49.0) + eslint-utils: 3.0.0(eslint@8.55.0) semver: 7.5.4 transitivePeerDependencies: - supports-color @@ -9883,7 +11678,6 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - dev: false /@unimodules/core@7.1.2: resolution: {integrity: sha512-lY+e2TAFuebD3vshHMIRqru3X4+k7Xkba4Wa7QsDBd+ex4c4N2dHAO61E2SrGD9+TRBD8w/o7mzK6ljbqRnbyg==} @@ -10061,7 +11855,7 @@ packages: engines: {node: '>=14.15.0'} dependencies: js-yaml: 3.14.1 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /@zkochan/js-yaml@0.0.6: @@ -10182,6 +11976,13 @@ packages: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} hasBin: true + dev: true + + /acorn@8.11.2: + resolution: {integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==} + engines: {node: '>=0.4.0'} + hasBin: true + dev: false /acorn@8.8.1: resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} @@ -10205,8 +12006,8 @@ packages: regex-parser: 2.2.11 dev: true - /aes-js@3.0.0: - resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==} + /aes-js@4.0.0-beta.5: + resolution: {integrity: sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==} /agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} @@ -10577,7 +12378,7 @@ packages: dependencies: pvtsutils: 1.3.2 pvutils: 1.1.3 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /ast-types-flow@0.0.7: @@ -10588,14 +12389,14 @@ packages: resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} engines: {node: '>=4'} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: true /ast-types@0.15.2: resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} engines: {node: '>=4'} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /astral-regex@1.0.0: @@ -10621,6 +12422,7 @@ packages: /async@3.2.4: resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + dev: true /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -10645,7 +12447,7 @@ packages: postcss-value-parser: 4.2.0 dev: true - /autoprefixer@10.4.13(postcss@8.4.27): + /autoprefixer@10.4.13(postcss@8.4.32): resolution: {integrity: sha512-49vKpMqcZYsJjwotvt4+h/BCjJVnhGwcLpDt5xkcaOG3eLrG/HUYLagrihYsQ+qrIBgIzX1Rw7a6L8I/ZA1Atg==} engines: {node: ^10 || ^12 || >=14} hasBin: true @@ -10657,7 +12459,7 @@ packages: fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 - postcss: 8.4.27 + postcss: 8.4.32 postcss-value-parser: 4.2.0 dev: true @@ -10719,12 +12521,12 @@ packages: b64-lite: 1.4.0 dev: false - /babel-core@7.0.0-bridge.0(@babel/core@7.22.9): + /babel-core@7.0.0-bridge.0(@babel/core@7.23.6): resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==} peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/core': 7.22.9 + '@babel/core': 7.23.6 dev: false /babel-jest@27.5.1(@babel/core@7.20.12): @@ -10783,6 +12585,24 @@ packages: - supports-color dev: true + /babel-jest@29.7.0(@babel/core@7.23.6): + resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + dependencies: + '@babel/core': 7.23.6 + '@jest/transform': 29.7.0 + '@types/babel__core': 7.20.1 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.6.3(@babel/core@7.23.6) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + dev: true + /babel-loader@8.3.0(@babel/core@7.20.12)(webpack@5.75.0): resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} @@ -10848,7 +12668,7 @@ packages: glob: 8.1.0 pkg-up: 3.1.0 reselect: 4.1.8 - resolve: 1.22.2 + resolve: 1.22.8 dev: false optional: true @@ -10865,7 +12685,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.5 '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.5) semver: 6.3.1 @@ -10878,7 +12698,7 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.22.5 '@babel/core': 7.22.9 '@babel/helper-define-polyfill-provider': 0.4.0(@babel/core@7.22.9) semver: 6.3.1 @@ -10886,14 +12706,27 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.9): - resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==} + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.22.9): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: - '@babel/compat-data': 7.22.9 + '@babel/compat-data': 7.23.5 '@babel/core': 7.22.9 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.22.9) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs2@0.4.7(@babel/core@7.23.6): + resolution: {integrity: sha512-LidDk/tEGDfuHW2DWh/Hgo4rmnw3cduK6ZkOI1NPFceSK3n/yAGeOsNT7FLnSGHkXj3RHGSEVkN3FsCTY6w2CQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/compat-data': 7.23.5 + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -10923,14 +12756,26 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.9): - resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==} + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.22.9): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) - core-js-compat: 3.32.0 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.22.9) + core-js-compat: 3.34.0 + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-corejs3@0.8.7(@babel/core@7.23.6): + resolution: {integrity: sha512-KyDvZYxAzkC0Aj2dAPyDzi2Ym15e5JKZSK+maI7NAwSqofvuFglbSsxE7wUOvTg9oFVnHMzVzBKcqEb4PJgtOA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) + core-js-compat: 3.34.0 transitivePeerDependencies: - supports-color dev: false @@ -10957,13 +12802,24 @@ packages: - supports-color dev: true - /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.9): - resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==} + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.22.9): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 dependencies: '@babel/core': 7.22.9 - '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.9) + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.22.9) + transitivePeerDependencies: + - supports-color + dev: false + + /babel-plugin-polyfill-regenerator@0.5.4(@babel/core@7.23.6): + resolution: {integrity: sha512-S/x2iOCvDaCASLYsOOgWOq4bCfKYVqvO/uxjkaYyZ3rVsVE3CeAI/c84NpyuBBymEgNvHgjEot3a9/Z/kXvqsg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/helper-define-polyfill-provider': 0.4.4(@babel/core@7.23.6) transitivePeerDependencies: - supports-color dev: false @@ -10980,7 +12836,15 @@ packages: /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.22.9): resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} dependencies: - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + dev: false + + /babel-plugin-transform-flow-enums@0.0.2(@babel/core@7.23.6): + resolution: {integrity: sha512-g4aaCrDDOsWjbm0PUUeVnkcVd6AKJsVc/MbnPhEotEpkeJQP6b8nzewohQi7+QS8UyPehOhGWn0nOwjvWpmMvQ==} + dependencies: + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) transitivePeerDependencies: - '@babel/core' dev: false @@ -11029,17 +12893,54 @@ packages: '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.9) dev: true - /babel-preset-expo@9.5.1(@babel/core@7.22.9): - resolution: {integrity: sha512-dOLhi5C1hNOAMFYjRlsP1axswMSf9MxX7zsez9kmwrm46cyev2l2ThQ8VdDig/YdwhNScd7sQ/lovrOTObk4Hg==} + /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.6): + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 dependencies: - '@babel/plugin-proposal-decorators': 7.22.7(@babel/core@7.22.9) + '@babel/core': 7.23.6 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.6) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.6) + dev: true + + /babel-preset-expo@9.5.2(@babel/core@7.22.9): + resolution: {integrity: sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ==} + dependencies: + '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.22.9) '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.22.9) '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.9) - '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.9) - '@babel/preset-env': 7.22.9(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.9) + '@babel/preset-env': 7.23.6(@babel/core@7.22.9) + babel-plugin-module-resolver: 5.0.0 + babel-plugin-react-native-web: 0.18.12 + metro-react-native-babel-preset: 0.76.8(@babel/core@7.22.9) + transitivePeerDependencies: + - '@babel/core' + - supports-color + dev: false + optional: true + + /babel-preset-expo@9.5.2(@babel/core@7.23.6): + resolution: {integrity: sha512-hU1G1TDiikuXV6UDZjPnX+WdbjbtidDiYhftMEVrZQSst45pDPVBWbM41TUKrpJMwv4FypsLzK+378gnMPRVWQ==} + dependencies: + '@babel/plugin-proposal-decorators': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-proposal-export-namespace-from': 7.18.9(@babel/core@7.23.6) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.23.6) babel-plugin-module-resolver: 5.0.0 babel-plugin-react-native-web: 0.18.12 - metro-react-native-babel-preset: 0.76.7(@babel/core@7.22.9) + metro-react-native-babel-preset: 0.76.8(@babel/core@7.23.6) transitivePeerDependencies: - '@babel/core' - supports-color @@ -11055,32 +12956,65 @@ packages: '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.9) '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.9) - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.22.9) '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-for-of': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.22.9) + babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 + dev: false + + /babel-preset-fbjs@3.4.0(@babel/core@7.23.6): + resolution: {integrity: sha512-9ywCsCvo1ojrw0b+XYk7aFvTH6D9064t0RIL1rtMf3nsa02Xw41MS7sZw216Im35xj/UY0PDBQsa1brUDDF1Ow==} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.6) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.6) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-jsx': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoped-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-for-of': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-member-expression-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-object-super': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-property-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-template-literals': 7.23.3(@babel/core@7.23.6) babel-plugin-syntax-trailing-function-commas: 7.0.0-beta.0 - transitivePeerDependencies: - - supports-color dev: false /babel-preset-jest@27.5.1(@babel/core@7.20.12): @@ -11116,6 +13050,17 @@ packages: babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.9) dev: true + /babel-preset-jest@29.6.3(@babel/core@7.23.6): + resolution: {integrity: sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + dependencies: + '@babel/core': 7.23.6 + babel-plugin-jest-hoist: 29.6.3 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.6) + dev: true + /babel-preset-react-app@10.0.1: resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==} dependencies: @@ -11132,7 +13077,7 @@ packages: '@babel/plugin-transform-runtime': 7.22.4(@babel/core@7.22.5) '@babel/preset-env': 7.22.4(@babel/core@7.22.5) '@babel/preset-react': 7.18.6(@babel/core@7.22.5) - '@babel/preset-typescript': 7.22.5(@babel/core@7.22.5) + '@babel/preset-typescript': 7.23.0(@babel/core@7.22.5) '@babel/runtime': 7.22.3 babel-plugin-macros: 3.1.0 babel-plugin-transform-react-remove-prop-types: 0.4.24 @@ -11182,9 +13127,6 @@ packages: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} dev: true - /bech32@1.1.4: - resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} - /bech32@2.0.0: resolution: {integrity: sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==} @@ -11215,6 +13157,12 @@ packages: engines: {node: '>=0.6'} dev: false + /big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + dev: false + optional: true + /big.js@5.2.2: resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==} dev: true @@ -11255,6 +13203,7 @@ packages: /bn.js@5.2.1: resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} + dev: false /body-parser@1.20.1: resolution: {integrity: sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==} @@ -11338,7 +13287,7 @@ packages: resolution: {integrity: sha512-PyJxiNtA5T2PlLIeBot4lbp7rj4OadzjnMZD/G5zuBNt8ei/yCU7+wW0h2bag9vr8c+/WuRWmSxbqAl9hL1rBA==} engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: false optional: true @@ -11346,7 +13295,7 @@ packages: resolution: {integrity: sha512-apC2+fspHGI3mMKj+dGevkGo/tCqVB8jMb6i+OX+E29p0Iposz07fABkRIfVUPNd5A5VbuOz1bZbnmkKLYF+wQ==} engines: {node: '>= 5.10.0'} dependencies: - big-integer: 1.6.51 + big-integer: 1.6.52 dev: false optional: true @@ -11438,12 +13387,33 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001519 - electron-to-chromium: 1.4.484 - node-releases: 2.0.13 - update-browserslist-db: 1.0.11(browserslist@4.21.4) + caniuse-lite: 1.0.30001502 + electron-to-chromium: 1.4.427 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.4) + dev: true + + /browserslist@4.21.7: + resolution: {integrity: sha512-BauCXrQ7I2ftSqd2mvKHGo85XR0u7Ru3C/Hxsy/0TkfCtjrmAbPdzLGasmoiBxplpDXlPvdjX9u7srIMfgasNA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001502 + electron-to-chromium: 1.4.427 + node-releases: 2.0.12 + update-browserslist-db: 1.0.11(browserslist@4.21.7) dev: true + /browserslist@4.22.2: + resolution: {integrity: sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + dependencies: + caniuse-lite: 1.0.30001570 + electron-to-chromium: 1.4.611 + node-releases: 2.0.14 + update-browserslist-db: 1.0.13(browserslist@4.22.2) + /bs-logger@0.2.6: resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} engines: {node: '>= 6'} @@ -11616,7 +13586,7 @@ packages: resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} dependencies: pascal-case: 3.1.2 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /camelcase-css@2.0.1: @@ -11644,8 +13614,8 @@ packages: /caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: - browserslist: 4.21.10 - caniuse-lite: 1.0.30001519 + browserslist: 4.21.7 + caniuse-lite: 1.0.30001502 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true @@ -11654,9 +13624,16 @@ packages: resolution: {integrity: sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow==} dev: true + /caniuse-lite@1.0.30001502: + resolution: {integrity: sha512-AZ+9tFXw1sS0o0jcpJQIXvFTOB/xGiQ4OQ2t98QX3NDn2EZTSRBC801gxrsGgViuq2ak/NLkNgSNEPtCr5lfKg==} + dev: true + /caniuse-lite@1.0.30001519: resolution: {integrity: sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==} + /caniuse-lite@1.0.30001570: + resolution: {integrity: sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==} + /canonicalize@1.0.8: resolution: {integrity: sha512-0CNTVCLZggSh7bc5VkX5WWPWO+cyZbNd07IHIsSXLia/eAq+r836hgk+8BKoEh7949Mda87VUOitx5OddVj64A==} dev: false @@ -11749,27 +13726,54 @@ packages: normalize-path: 3.0.0 readdirp: 3.6.0 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /chownr@2.0.0: resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} engines: {node: '>=10'} + /chrome-launcher@0.15.2: + resolution: {integrity: sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==} + engines: {node: '>=12.13.0'} + hasBin: true + dependencies: + '@types/node': 20.10.4 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + transitivePeerDependencies: + - supports-color + dev: false + /chrome-trace-event@1.0.3: resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} engines: {node: '>=6.0'} dev: true - /chromium-bidi@0.4.26(devtools-protocol@0.0.1159816): - resolution: {integrity: sha512-lukBGfogAI4T0y3acc86RaacqgKQve47/8pV2c+Hr1PjcICj2K4OkL3qfX3qrqxxnd4ddurFC0WBA3VCQqYeUQ==} + /chromium-bidi@0.4.28(devtools-protocol@0.0.1179426): + resolution: {integrity: sha512-2HZ74QlAApJrEwcGlU/sUu0s4VS+FI3CJ09Toc9aE9VemMyhHZXeaROQgJKNRaYMUTUx6qIv1cLBs3F+vfgjSw==} peerDependencies: devtools-protocol: '*' dependencies: - devtools-protocol: 0.0.1159816 + devtools-protocol: 0.0.1179426 mitt: 3.0.1 + urlpattern-polyfill: 9.0.0 dev: true + /chromium-edge-launcher@1.0.0: + resolution: {integrity: sha512-pgtgjNKZ7i5U++1g1PWv75umkHvhVTDOQIZ+sjeUX9483S7Y6MUvO0lrd7ShGlQlFHMN4SwKTCq/X8hWrbv2KA==} + dependencies: + '@types/node': 20.10.4 + escape-string-regexp: 4.0.0 + is-wsl: 2.2.0 + lighthouse-logger: 1.4.2 + mkdirp: 1.0.4 + rimraf: 3.0.2 + transitivePeerDependencies: + - supports-color + dev: false + /ci-info@2.0.0: resolution: {integrity: sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==} dev: false @@ -11778,6 +13782,12 @@ packages: resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} engines: {node: '>=8'} + /ci-info@3.9.0: + resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} + engines: {node: '>=8'} + dev: false + optional: true + /cipher-base@1.0.4: resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} dependencies: @@ -11849,6 +13859,12 @@ packages: resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} engines: {node: '>=6'} + /cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + dev: false + optional: true + /cli-table3@0.6.3: resolution: {integrity: sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg==} engines: {node: 10.* || >= 12.*} @@ -12009,10 +14025,6 @@ packages: resolution: {integrity: sha512-9HMlXtt/BNoYr8ooyjjNRdIilOTkVJXB+GhxMTtOKwk0R4j4lS4NpjuqmRxroBfnfTSHQIHQB7wryHhXarNjmQ==} engines: {node: '>=16'} - /commander@2.13.0: - resolution: {integrity: sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==} - dev: false - /commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -12064,8 +14076,8 @@ packages: dev: false optional: true - /component-type@1.2.1: - resolution: {integrity: sha512-Kgy+2+Uwr75vAi6ChWXgHuLvd+QLD7ssgpaRq2zCvt80ptvAfMc/hijcJxXkBa2wMlEZcJvC2H8Ubo+A9ATHIg==} + /component-type@1.2.2: + resolution: {integrity: sha512-99VUHREHiN5cLeHm3YLq312p6v+HUEcwtLCAtelvUDI6+SH5g5Cr85oNR2S1o6ywzL0ykMbuwLzM2ANocjEOIA==} dev: false optional: true @@ -12274,7 +14286,6 @@ packages: /convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - dev: true /cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} @@ -12286,13 +14297,13 @@ packages: /core-js-compat@3.30.2: resolution: {integrity: sha512-nriW1nuJjUgvkEjIot1Spwakz52V9YkYHZAQG6A1eCgC8AA1p0zngrQEP9R0+V6hji5XilWKG1Bd0YRppmGimA==} dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 dev: true - /core-js-compat@3.32.0: - resolution: {integrity: sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==} + /core-js-compat@3.34.0: + resolution: {integrity: sha512-4ZIyeNbW/Cn1wkMMDy+mvrRUxrwFNjKwbhCfQpDd+eLgYipDqp8oGFGtLmhh18EDPKA0g3VUBYOxQGGwvWLVpA==} dependencies: - browserslist: 4.21.10 + browserslist: 4.22.2 dev: false /core-js-pure@3.27.1: @@ -12316,7 +14327,7 @@ packages: vary: 1.1.2 dev: false - /cosmiconfig-typescript-loader@1.0.9(@types/node@20.6.2)(cosmiconfig@7.1.0)(typescript@5.2.2): + /cosmiconfig-typescript-loader@1.0.9(@types/node@20.8.2)(cosmiconfig@7.1.0)(typescript@5.2.2): resolution: {integrity: sha512-tRuMRhxN4m1Y8hP9SNYfz7jRwt8lZdWxdjg/ohg5esKmsndJIn4yT96oJVcf5x0eA11taXl+sIp+ielu529k6g==} engines: {node: '>=12', npm: '>=6'} peerDependencies: @@ -12324,9 +14335,9 @@ packages: cosmiconfig: '>=7' typescript: '>=3' dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 cosmiconfig: 7.1.0 - ts-node: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@swc/core' @@ -12375,8 +14386,8 @@ packages: path-type: 4.0.0 dev: true - /cosmiconfig@8.3.5(typescript@5.2.2): - resolution: {integrity: sha512-A5Xry3xfS96wy2qbiLkQLAg4JUrR2wvfybxj6yqLmrUfMAvhS3MZxIP2oQn0grgYIvJqzpeTEWu4vK0t+12NNw==} + /cosmiconfig@8.3.6(typescript@5.2.2): + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} engines: {node: '>=14'} peerDependencies: typescript: '>=4.9.5' @@ -12395,7 +14406,6 @@ packages: resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} engines: {node: '>=0.8'} hasBin: true - dev: true /create-ecdh@4.0.4: resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} @@ -12425,7 +14435,7 @@ packages: sha.js: 2.4.11 dev: false - /create-jest@29.7.0(@types/node@20.6.2)(ts-node@10.9.1): + /create-jest@29.7.0(@types/node@20.8.2)(ts-node@10.9.1): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -12434,7 +14444,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -12854,8 +14864,8 @@ packages: resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} dev: true - /dayjs@1.11.9: - resolution: {integrity: sha512-QvzAURSbQ0pKdIye2txOzNaHmxtUBXerpY0FJsFXUMKbIZeFm5ht1LS/jFsrncjnmtv8HsG0W2g6c0zUjZWmpA==} + /dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} dev: false /debug@2.6.9: @@ -13037,10 +15047,11 @@ packages: resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} engines: {node: '>= 0.8'} - /deprecated-react-native-prop-types@4.1.0: - resolution: {integrity: sha512-WfepZHmRbbdTvhcolb8aOKEvQdcmTMn5tKLbqbXmkBvjFjRVWAYqsXk/DBsV8TZxws8SdGHLuHaJrHSQUPRdfw==} + /deprecated-react-native-prop-types@5.0.0: + resolution: {integrity: sha512-cIK8KYiiGVOFsKdPMmm1L3tA/Gl+JopXL6F5+C7x39MyPsQYnP57Im/D6bNUzcborD7fcMwiwZqcBdBXXZucYQ==} + engines: {node: '>=18'} dependencies: - '@react-native/normalize-colors': 0.72.0 + '@react-native/normalize-colors': 0.73.2 invariant: 2.2.4 prop-types: 15.8.1 dev: false @@ -13106,23 +15117,23 @@ packages: minimist: 1.2.8 dev: true - /devtools-protocol@0.0.1159816: - resolution: {integrity: sha512-2cZlHxC5IlgkIWe2pSDmCrDiTzbSJWywjbDDnupOImEBcG31CQgBLV8wWE+5t+C4rimcjHsbzy7CBzf9oFjboA==} + /devtools-protocol@0.0.1179426: + resolution: {integrity: sha512-KKC7IGwdOr7u9kTGgjUvGTov/z1s2H7oHi3zKCdR9eSDyCPia5CBi4aRhtp7d8uR7l0GS5UTDw3TjKGu5CqINg==} dev: true - /did-jwt-vc@3.2.5: - resolution: {integrity: sha512-FPVW9fRMqQZmDCgoJkj1ZN4v0esLg1BlZRHHqKwTKW8Dg3n1eWvTOxrQlGys8BDlWGDALBw+N2SCM6LYyj7qZg==} + /did-jwt-vc@3.2.10: + resolution: {integrity: sha512-fX4WBcsjwQ3OWj98t6p5iR4bqSS8wgCt1rVJXeL/ZRy4ij4Y+SJOUpwBoMF/t2ziQMwd47XLCCHYfvKerALZjQ==} engines: {node: '>=18'} dependencies: - did-jwt: 7.2.5 + did-jwt: 7.4.1 did-resolver: 4.1.0 dev: false - /did-jwt-vc@3.2.7: - resolution: {integrity: sha512-1DsMN4KaCRJiy7TvP8IsPS3D7o3AZlXKzpXGHKGAmPTK55l66QrPBYlD+omhHO1t/BLADRubob9leS9O2Jlu0g==} + /did-jwt-vc@3.2.11: + resolution: {integrity: sha512-bmy/ZyR563WDx3n6or8AwxbqQXKv/aKc2eQI4mkuDSGEdO0MwkxTQVA1i82TZAmYKUJ0zf0CMZKnhvJn/mKAUQ==} engines: {node: '>=18'} dependencies: - did-jwt: 7.2.7 + did-jwt: 7.4.2 did-resolver: 4.1.0 dev: true @@ -13142,26 +15153,26 @@ packages: multiformats: 9.9.0 uint8arrays: 3.1.1 - /did-jwt@7.2.5: - resolution: {integrity: sha512-bbkRurNmIOvr9F8cmgOg1oaXEoGUCmi4UttADCFG//JRdN4EhPnvGVfpp3HGnvhw1vIAvhm0rCLPG9HBgQIM4Q==} + /did-jwt@7.4.1: + resolution: {integrity: sha512-gYDbY6KKuKxmcmJvI1u4zS7QDQGz4B4Ak/T/biMMOHNYZZDGDMKXdZYhiCsphqrBvd7j0OZTFK7iAvMgSpB2aw==} dependencies: + '@noble/ciphers': 0.3.0 '@noble/curves': 1.1.0 '@noble/hashes': 1.3.1 - '@stablelib/xchacha20poly1305': 1.0.1 - bech32: 2.0.0 + '@scure/base': 1.1.3 canonicalize: 2.0.0 did-resolver: 4.1.0 multiformats: 12.0.1 uint8arrays: 4.0.6 dev: false - /did-jwt@7.2.7: - resolution: {integrity: sha512-8hCEG13b3YV7Gw+euv4hSFKTk83tAeItP8d/dfz81KL1XfRahsvdbepZS1ckPsS1tLzQadQ+pxscvhkddfuQDA==} + /did-jwt@7.4.2: + resolution: {integrity: sha512-bdMVrUKD8wBiYihrxm5Bso33vYuw5DHxxN6y+IFSpHQpYQF16nuW6T8+FCrVkS5gDYE6jFZmnkqjJwycT4K7AA==} dependencies: + '@noble/ciphers': 0.3.0 '@noble/curves': 1.1.0 '@noble/hashes': 1.3.1 - '@stablelib/xchacha20poly1305': 1.0.1 - bech32: 2.0.0 + '@scure/base': 1.1.3 canonicalize: 2.0.0 did-resolver: 4.1.0 multiformats: 12.0.1 @@ -13306,7 +15317,7 @@ packages: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /dot-prop@5.3.0: @@ -13379,9 +15390,16 @@ packages: jake: 10.8.7 dev: true + /electron-to-chromium@1.4.427: + resolution: {integrity: sha512-HK3r9l+Jm8dYAm1ctXEWIC+hV60zfcjS9UA5BDlYvnI5S7PU/yytjpvSrTNrSSRRkuu3tDyZhdkwIczh+0DWaw==} + dev: true + /electron-to-chromium@1.4.484: resolution: {integrity: sha512-nO3ZEomTK2PO/3TUXgEx0A97xZTpKVf4p427lABHuCpT1IQ2N+njVh29DkQkCk6Q4m2wjU+faK4xAcfFndwjvw==} + /electron-to-chromium@1.4.611: + resolution: {integrity: sha512-ZtRpDxrjHapOwxtv+nuth5ByB8clyn8crVynmRNGO3wG3LOp8RTcyZDqwaI6Ng6y8FCK2hVZmJoqwCskKbNMaw==} + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -13482,8 +15500,8 @@ packages: resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} engines: {node: '>=6'} - /envinfo@7.10.0: - resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==} + /envinfo@7.11.0: + resolution: {integrity: sha512-G9/6xF1FPbIw0TtalAMaVPpiq2aDEuKLXM314jPVAO9r2fo2a4BLqMNkmRS7O/xPPZ+COAhGIz3ETvHEV3eUcg==} engines: {node: '>=4'} hasBin: true dev: false @@ -13502,6 +15520,10 @@ packages: /err-code@2.0.3: resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + /err-code@3.0.1: + resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} + dev: false + /error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} dependencies: @@ -13622,7 +15644,6 @@ packages: /escape-string-regexp@4.0.0: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - dev: true /escape-string-regexp@5.0.0: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} @@ -13640,7 +15661,7 @@ packages: source-map: 0.6.1 dev: true - /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0)(jest@27.5.1)(typescript@5.2.2): + /eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(jest@27.5.1)(typescript@5.2.2): resolution: {integrity: sha512-K6rNzvkIeHaTd8m/QEh1Zko0KI7BACWkkneSs6s9cKZC/J27X3eZR6Upt1jkmZ/4FK+XUOPPxMEN7+lbUXfSlA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -13651,20 +15672,20 @@ packages: optional: true dependencies: '@babel/core': 7.22.9 - '@babel/eslint-parser': 7.19.1(@babel/core@7.22.9)(eslint@8.49.0) + '@babel/eslint-parser': 7.19.1(@babel/core@7.22.9)(eslint@8.55.0) '@rushstack/eslint-patch': 1.2.0 - '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/parser': 5.48.1(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.55.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.48.1(eslint@8.55.0)(typescript@5.2.2) babel-preset-react-app: 10.0.1 confusing-browser-globals: 1.0.11 - eslint: 8.49.0 - eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0) - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.49.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.49.0)(jest@27.5.1)(typescript@5.2.2) - eslint-plugin-jsx-a11y: 6.7.0(eslint@8.49.0) - eslint-plugin-react: 7.32.0(eslint@8.49.0) - eslint-plugin-react-hooks: 4.6.0(eslint@8.49.0) - eslint-plugin-testing-library: 5.9.1(eslint@8.49.0)(typescript@5.2.2) + eslint: 8.55.0 + eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0) + eslint-plugin-import: 2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.55.0) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.55.0)(jest@27.5.1)(typescript@5.2.2) + eslint-plugin-jsx-a11y: 6.7.0(eslint@8.55.0) + eslint-plugin-react: 7.32.0(eslint@8.55.0) + eslint-plugin-react-hooks: 4.6.0(eslint@8.55.0) + eslint-plugin-testing-library: 5.9.1(eslint@8.55.0)(typescript@5.2.2) typescript: 5.2.2 transitivePeerDependencies: - '@babel/plugin-syntax-flow' @@ -13684,7 +15705,7 @@ packages: - supports-color dev: true - /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.49.0): + /eslint-module-utils@2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.55.0): resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: @@ -13705,15 +15726,15 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.48.1(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.48.1(eslint@8.55.0)(typescript@5.2.2) debug: 3.2.7 - eslint: 8.49.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.6 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0): + /eslint-plugin-flowtype@8.0.3(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0): resolution: {integrity: sha512-dX8l6qUL6O+fYPtpNRideCFSpmWOUVx5QcaGLVqe/vlDiBSe4vYljDWDETwnyFzpl7By/WVIu6rcrniCgH9BqQ==} engines: {node: '>=12.0.0'} peerDependencies: @@ -13721,14 +15742,14 @@ packages: '@babel/plugin-transform-react-jsx': ^7.14.9 eslint: ^8.1.0 dependencies: - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.9) - eslint: 8.49.0 + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + eslint: 8.55.0 lodash: 4.17.21 string-natural-compare: 3.0.1 dev: true - /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.49.0): + /eslint-plugin-import@2.26.0(@typescript-eslint/parser@5.48.1)(eslint@8.55.0): resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} engines: {node: '>=4'} peerDependencies: @@ -13738,14 +15759,14 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.48.1(eslint@8.49.0)(typescript@5.2.2) + '@typescript-eslint/parser': 5.48.1(eslint@8.55.0)(typescript@5.2.2) array-includes: 3.1.6 array.prototype.flat: 1.3.1 debug: 2.6.9 doctrine: 2.1.0 - eslint: 8.49.0 + eslint: 8.55.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.49.0) + eslint-module-utils: 2.7.4(@typescript-eslint/parser@5.48.1)(eslint-import-resolver-node@0.3.6)(eslint@8.55.0) has: 1.0.3 is-core-module: 2.12.1 is-glob: 4.0.3 @@ -13759,7 +15780,7 @@ packages: - supports-color dev: true - /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.49.0)(jest@27.5.1)(typescript@5.2.2): + /eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.48.1)(eslint@8.55.0)(jest@27.5.1)(typescript@5.2.2): resolution: {integrity: sha512-PWLUEXeeF7C9QGKqvdSbzLOiLTx+bno7/HC9eefePfEb257QFHg7ye3dh80AZVkaa/RQsBB1Q/ORQvg2X7F0NQ==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} peerDependencies: @@ -13772,16 +15793,16 @@ packages: jest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.49.0)(typescript@5.2.2) - '@typescript-eslint/experimental-utils': 5.48.1(eslint@8.49.0)(typescript@5.2.2) - eslint: 8.49.0 + '@typescript-eslint/eslint-plugin': 5.48.1(@typescript-eslint/parser@5.48.1)(eslint@8.55.0)(typescript@5.2.2) + '@typescript-eslint/experimental-utils': 5.48.1(eslint@8.55.0)(typescript@5.2.2) + eslint: 8.55.0 jest: 27.5.1(ts-node@10.9.1) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-jsx-a11y@6.7.0(eslint@8.49.0): + /eslint-plugin-jsx-a11y@6.7.0(eslint@8.55.0): resolution: {integrity: sha512-EGGRKhzejSzXKtjmEjWNtr4SK/DkMkSzkBH7g7e7moBDXZXrqaUIxkmD7uF93upMysc4dKYEJwupu7Dff+ShwA==} engines: {node: '>=4.0'} peerDependencies: @@ -13796,7 +15817,7 @@ packages: axobject-query: 3.1.1 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 8.49.0 + eslint: 8.55.0 has: 1.0.3 jsx-ast-utils: 3.3.3 language-tags: 1.0.5 @@ -13806,25 +15827,25 @@ packages: semver: 6.3.1 dev: true - /eslint-plugin-promise@6.1.1(eslint@8.49.0): + /eslint-plugin-promise@6.1.1(eslint@8.50.0): resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.49.0 + eslint: 8.50.0 dev: true - /eslint-plugin-react-hooks@4.6.0(eslint@8.49.0): + /eslint-plugin-react-hooks@4.6.0(eslint@8.55.0): resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} engines: {node: '>=10'} peerDependencies: eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 dependencies: - eslint: 8.49.0 + eslint: 8.55.0 dev: true - /eslint-plugin-react@7.32.0(eslint@8.49.0): + /eslint-plugin-react@7.32.0(eslint@8.55.0): resolution: {integrity: sha512-vSBi1+SrPiLZCGvxpiZIa28fMEUaMjXtCplrvxcIxGzmFiYdsXQDwInEjuv5/i/2CTTxbkS87tE8lsQ0Qxinbw==} engines: {node: '>=4'} peerDependencies: @@ -13834,7 +15855,7 @@ packages: array.prototype.flatmap: 1.3.1 array.prototype.tosorted: 1.1.1 doctrine: 2.1.0 - eslint: 8.49.0 + eslint: 8.55.0 estraverse: 5.3.0 jsx-ast-utils: 3.3.3 minimatch: 3.1.2 @@ -13848,14 +15869,14 @@ packages: string.prototype.matchall: 4.0.8 dev: true - /eslint-plugin-testing-library@5.9.1(eslint@8.49.0)(typescript@5.2.2): + /eslint-plugin-testing-library@5.9.1(eslint@8.55.0)(typescript@5.2.2): resolution: {integrity: sha512-6BQp3tmb79jLLasPHJmy8DnxREe+2Pgf7L+7o09TSWPfdqqtQfRZmZNetr5mOs3yqZk/MRNxpN3RUpJe0wB4LQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 dependencies: - '@typescript-eslint/utils': 5.48.1(eslint@8.49.0)(typescript@5.2.2) - eslint: 8.49.0 + '@typescript-eslint/utils': 5.48.1(eslint@8.55.0)(typescript@5.2.2) + eslint: 8.55.0 transitivePeerDependencies: - supports-color - typescript @@ -13877,13 +15898,13 @@ packages: estraverse: 5.3.0 dev: true - /eslint-utils@3.0.0(eslint@8.49.0): + /eslint-utils@3.0.0(eslint@8.55.0): resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.49.0 + eslint: 8.55.0 eslint-visitor-keys: 2.1.0 dev: true @@ -13897,7 +15918,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint-webpack-plugin@3.2.0(eslint@8.49.0)(webpack@5.75.0): + /eslint-webpack-plugin@3.2.0(eslint@8.55.0)(webpack@5.75.0): resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -13905,7 +15926,7 @@ packages: webpack: ^5.0.0 dependencies: '@types/eslint': 8.44.1 - eslint: 8.49.0 + eslint: 8.55.0 jest-worker: 28.1.3 micromatch: 4.0.5 normalize-path: 3.0.0 @@ -13913,15 +15934,15 @@ packages: webpack: 5.75.0 dev: true - /eslint@8.49.0: - resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==} + /eslint@8.50.0: + resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) '@eslint-community/regexpp': 4.6.2 '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.49.0 + '@eslint/js': 8.50.0 '@humanwhocodes/config-array': 0.11.11 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 @@ -13959,6 +15980,53 @@ packages: - supports-color dev: true + /eslint@8.55.0: + resolution: {integrity: sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0(eslint@8.55.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.55.0 + '@humanwhocodes/config-array': 0.11.13 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.24.0 + graphemer: 1.4.0 + ignore: 5.3.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /espree@9.6.1: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -14017,6 +16085,21 @@ packages: '@scure/bip32': 1.3.1 '@scure/bip39': 1.2.1 + /ethers@6.9.0: + resolution: {integrity: sha512-pmfNyQzc2mseLe91FnT2vmNaTt8dDzhxZ/xItAV7uGsF4dI4ek2ufMu3rAkgQETL/TIs0GS5A+U05g9QyWnv3Q==} + engines: {node: '>=14.0.0'} + dependencies: + '@adraffy/ens-normalize': 1.10.0 + '@noble/curves': 1.2.0 + '@noble/hashes': 1.3.2 + '@types/node': 18.15.13 + aes-js: 4.0.0-beta.5 + tslib: 2.4.0 + ws: 8.5.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + /ethjs-util@0.1.6: resolution: {integrity: sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==} engines: {node: '>=6.5.0', npm: '>=3'} @@ -14024,40 +16107,22 @@ packages: is-hex-prefixed: 1.0.0 strip-hex-prefix: 1.0.0 - /ethr-did-resolver@8.1.2: - resolution: {integrity: sha512-dnbE3GItE1YHp/eavR11KbGDi8Il01H9GeH+wKgoSgE95pKBZufHyHYce/EK2k8VOmj6MJf8u/TIpPvxjCbK+A==} + /ethr-did-resolver@10.1.0: + resolution: {integrity: sha512-PH3R8UQGpJGWXaVVSWPppPiEzb7eHrzG6yTCGtk23Fw8Et2totj+7V1id+zxCQvToM9cW+CHA/+k64F8xpk/Mw==} dependencies: - '@ethersproject/abi': 5.7.0 - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/address': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bignumber': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/contracts': 5.7.0 - '@ethersproject/keccak256': 5.7.0 - '@ethersproject/providers': 5.7.2 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/transactions': 5.7.0 did-resolver: 4.1.0 + ethers: 6.9.0 transitivePeerDependencies: - bufferutil - utf-8-validate - /ethr-did@2.3.18: - resolution: {integrity: sha512-kxklUibNLoSFPLhajPptjp+SutGV27cpNsUzby9O/qg1+jBGDRipJ3kLhzHzGMuERxXv18ZqToCnuYD7NShjZg==} + /ethr-did@3.0.5: + resolution: {integrity: sha512-qvA2nBqsxQF2YFPoQ7v0rgSVlj+9CCBnbAu6VtD/veJTq9dhytsEtjz6VDCIqJ6mqEMw7nb8sTLDSwHRgbwyiA==} dependencies: - '@ethersproject/abstract-signer': 5.7.0 - '@ethersproject/base64': 5.7.0 - '@ethersproject/basex': 5.7.0 - '@ethersproject/bytes': 5.7.0 - '@ethersproject/providers': 5.7.2 - '@ethersproject/signing-key': 5.7.0 - '@ethersproject/strings': 5.7.0 - '@ethersproject/transactions': 5.7.0 - '@ethersproject/wallet': 5.7.0 - did-jwt: 7.2.5 + did-jwt: 7.4.1 did-resolver: 4.1.0 - ethr-did-resolver: 8.1.2 + ethers: 6.9.0 + ethr-did-resolver: 10.1.0 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -14193,7 +16258,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/expect-utils': 29.6.2 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-get-type: 29.4.3 jest-matcher-utils: 29.6.2 jest-message-util: 29.6.2 @@ -14211,21 +16276,21 @@ packages: jest-util: 29.7.0 dev: true - /expo-application@5.3.0(expo@49.0.6): - resolution: {integrity: sha512-XLkaELwmiXW6JjFVkwuiFQaGZoNKAxNAcSJkFdz8s4rCljEwehylbzoPk37QHw3cxqb4v0/2EICtg4C4kpEVCA==} + /expo-application@5.3.1(expo@49.0.21): + resolution: {integrity: sha512-HR2+K+Hm33vLw/TfbFaHrvUbRRNRco8R+3QaCKy7eJC2LFfT05kZ15ynGaKfB5DJ/oqPV3mxXVR/EfwmE++hoA==} peerDependencies: expo: '*' dependencies: - expo: 49.0.6(@babel/core@7.22.9) + expo: 49.0.21(@babel/core@7.22.9) dev: false optional: true - /expo-asset@8.10.1(expo@49.0.6): + /expo-asset@8.10.1(expo@49.0.21): resolution: {integrity: sha512-5VMTESxgY9GBsspO/esY25SKEa7RyascVkLe/OcL1WgblNFm7xCCEEUIW8VWS1nHJQGYxpMZPr3bEfjMpdWdyA==} dependencies: blueimp-md5: 2.19.0 - expo-constants: 14.4.2(expo@49.0.6) - expo-file-system: 15.4.2(expo@49.0.6) + expo-constants: 14.4.2(expo@49.0.21) + expo-file-system: 15.4.5(expo@49.0.21) invariant: 2.2.4 md5-file: 3.2.3 path-browserify: 1.0.1 @@ -14236,45 +16301,45 @@ packages: dev: false optional: true - /expo-constants@14.4.2(expo@49.0.6): + /expo-constants@14.4.2(expo@49.0.21): resolution: {integrity: sha512-nOB122DOAjk+KrJT69lFQAoYVQGQjFHSigCPVBzVdko9S1xGsfiOH9+X5dygTsZTIlVLpQJDdmZ7ONiv3i+26w==} peerDependencies: expo: '*' dependencies: '@expo/config': 8.1.2 - expo: 49.0.6(@babel/core@7.22.9) + expo: 49.0.21(@babel/core@7.22.9) uuid: 3.4.0 transitivePeerDependencies: - supports-color dev: false optional: true - /expo-file-system@15.4.2(expo@49.0.6): - resolution: {integrity: sha512-WFaEWuFEuUpETiq85YlhKYJgedccWTjtCMnYGAgyNfCfvnIgfMCVH7dWudGuxhfAcTZqh36OcqtSckbtbhOtyg==} + /expo-file-system@15.4.5(expo@49.0.21): + resolution: {integrity: sha512-xy61KaTaDgXhT/dllwYDHm3ch026EyO8j4eC6wSVr/yE12MMMxAC09yGwy4f7kkOs6ztGVQF5j7ldRzNLN4l0Q==} peerDependencies: expo: '*' dependencies: - expo: 49.0.6(@babel/core@7.22.9) + expo: 49.0.21(@babel/core@7.22.9) uuid: 3.4.0 dev: false optional: true - /expo-font@11.4.0(expo@49.0.6): + /expo-font@11.4.0(expo@49.0.21): resolution: {integrity: sha512-nkmezCFD7gR/I6R+e3/ry18uEfF8uYrr6h+PdBJu+3dawoLOpo+wFb/RG9bHUekU1/cPanR58LR7G5MEMKHR2w==} peerDependencies: expo: '*' dependencies: - expo: 49.0.6(@babel/core@7.22.9) + expo: 49.0.21(@babel/core@7.22.9) fontfaceobserver: 2.3.0 dev: false optional: true - /expo-keep-awake@12.3.0(expo@49.0.6): + /expo-keep-awake@12.3.0(expo@49.0.21): resolution: {integrity: sha512-ujiJg1p9EdCOYS05jh5PtUrfiZnK0yyLy+UewzqrjUqIT8eAGMQbkfOn3C3fHE7AKd5AefSMzJnS3lYZcZYHDw==} peerDependencies: expo: '*' dependencies: - expo: 49.0.6(@babel/core@7.22.9) + expo: 49.0.21(@babel/core@7.22.9) dev: false optional: true @@ -14291,14 +16356,14 @@ packages: dev: false optional: true - /expo-modules-autolinking@1.5.0: - resolution: {integrity: sha512-i9zll5xNYh0/sjaa6hpZlTHodKEu2tMEFsJJYsfBMTt8G9J8gGhalOydrX/Ql1E8bQ4GxnLAqrM7duR0Tj2VTQ==} + /expo-modules-autolinking@1.5.1: + resolution: {integrity: sha512-yt5a1VCp2BF9CrsO689PCD5oXKP14MMhnOanQMvDn4BDpURYfzAlDVGC5fZrNQKtwn/eq3bcrxIwZ7D9QjVVRg==} hasBin: true dependencies: '@expo/config': 8.1.2 chalk: 4.1.2 commander: 7.2.0 - fast-glob: 3.3.1 + fast-glob: 3.3.2 find-up: 5.0.0 fs-extra: 9.1.0 transitivePeerDependencies: @@ -14306,47 +16371,81 @@ packages: dev: false optional: true - /expo-modules-core@1.5.9: - resolution: {integrity: sha512-kQxllZfus7wM0O6X0Ud+SOnbH/kbxtEAQp2gkvDq3P3kqhtafue/H9CPDX04uWc/pypvp9vp/sZ+qvA0alaVuQ==} + /expo-modules-core@1.5.12: + resolution: {integrity: sha512-mY4wTDU458dhwk7IVxLNkePlYXjs9BTgk4NQHBUXf0LapXsvr+i711qPZaFNO4egf5qq6fQV+Yfd/KUguHstnQ==} dependencies: compare-versions: 3.6.0 invariant: 2.2.4 dev: false optional: true - /expo-random@13.2.0(expo@49.0.6): - resolution: {integrity: sha512-ZamtB6Yuly8VLr8frQfh7PxMtvXmP9YDdce4JxWEFp9TaHGZep7MJ73SUo7PsMA61PVmHWJuZOw6big6dweloA==} + /expo-random@13.4.0(expo@49.0.21): + resolution: {integrity: sha512-Z/Bbd+1MbkK8/4ukspgA3oMlcu0q3YTCu//7q2xHwy35huN6WCv4/Uw2OGyCiOQjAbU02zwq6swA+VgVmJRCEw==} requiresBuild: true peerDependencies: expo: '*' dependencies: base64-js: 1.5.1 - expo: 49.0.6(@babel/core@7.22.9) + expo: 49.0.21(@babel/core@7.23.6) dev: false optional: true - /expo@49.0.6(@babel/core@7.22.9): - resolution: {integrity: sha512-prwW1DNTehTdJh2xp+HrEMVrO53WfFNdCC9c2yo3BfsqASGhP8LUePC+RyNgNZzOTL0OsXY7pxkEd0zH1idudA==} + /expo@49.0.21(@babel/core@7.22.9): + resolution: {integrity: sha512-JpHL6V0yt8/fzsmkAdPdtsah+lU6Si4ac7MDklLYvzEil7HAFEsN/pf06wQ21ax4C+BL27hI6JJoD34tzXUCJA==} hasBin: true dependencies: - '@babel/runtime': 7.22.6 - '@expo/cli': 0.10.11(expo-modules-autolinking@1.5.0) + '@babel/runtime': 7.23.6 + '@expo/cli': 0.10.16(expo-modules-autolinking@1.5.1) '@expo/config': 8.1.2 '@expo/config-plugins': 7.2.5 '@expo/vector-icons': 13.0.0 - babel-preset-expo: 9.5.1(@babel/core@7.22.9) - expo-application: 5.3.0(expo@49.0.6) - expo-asset: 8.10.1(expo@49.0.6) - expo-constants: 14.4.2(expo@49.0.6) - expo-file-system: 15.4.2(expo@49.0.6) - expo-font: 11.4.0(expo@49.0.6) - expo-keep-awake: 12.3.0(expo@49.0.6) - expo-modules-autolinking: 1.5.0 - expo-modules-core: 1.5.9 + babel-preset-expo: 9.5.2(@babel/core@7.22.9) + expo-application: 5.3.1(expo@49.0.21) + expo-asset: 8.10.1(expo@49.0.21) + expo-constants: 14.4.2(expo@49.0.21) + expo-file-system: 15.4.5(expo@49.0.21) + expo-font: 11.4.0(expo@49.0.21) + expo-keep-awake: 12.3.0(expo@49.0.21) + expo-modules-autolinking: 1.5.1 + expo-modules-core: 1.5.12 fbemitter: 3.0.0 invariant: 2.2.4 md5-file: 3.2.3 - node-fetch: 2.6.12 + node-fetch: 2.7.0 + pretty-format: 26.6.2 + uuid: 3.4.0 + transitivePeerDependencies: + - '@babel/core' + - bluebird + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + optional: true + + /expo@49.0.21(@babel/core@7.23.6): + resolution: {integrity: sha512-JpHL6V0yt8/fzsmkAdPdtsah+lU6Si4ac7MDklLYvzEil7HAFEsN/pf06wQ21ax4C+BL27hI6JJoD34tzXUCJA==} + hasBin: true + dependencies: + '@babel/runtime': 7.23.6 + '@expo/cli': 0.10.16(expo-modules-autolinking@1.5.1) + '@expo/config': 8.1.2 + '@expo/config-plugins': 7.2.5 + '@expo/vector-icons': 13.0.0 + babel-preset-expo: 9.5.2(@babel/core@7.23.6) + expo-application: 5.3.1(expo@49.0.21) + expo-asset: 8.10.1(expo@49.0.21) + expo-constants: 14.4.2(expo@49.0.21) + expo-file-system: 15.4.5(expo@49.0.21) + expo-font: 11.4.0(expo@49.0.21) + expo-keep-awake: 12.3.0(expo@49.0.21) + expo-modules-autolinking: 1.5.1 + expo-modules-core: 1.5.12 + fbemitter: 3.0.0 + invariant: 2.2.4 + md5-file: 3.2.3 + node-fetch: 2.7.0 pretty-format: 26.6.2 uuid: 3.4.0 transitivePeerDependencies: @@ -14427,7 +16526,7 @@ packages: get-stream: 5.2.0 yauzl: 2.10.0 optionalDependencies: - '@types/yauzl': 2.10.0 + '@types/yauzl': 2.10.3 transitivePeerDependencies: - supports-color dev: true @@ -14468,6 +16567,18 @@ packages: merge2: 1.4.1 micromatch: 4.0.5 + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} + engines: {node: '>=8.6.0'} + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.5 + dev: false + optional: true + /fast-json-stable-stringify@2.1.0: resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} @@ -14482,8 +16593,8 @@ packages: resolution: {integrity: sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w==} dev: false - /fast-xml-parser@4.2.7: - resolution: {integrity: sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==} + /fast-xml-parser@4.3.2: + resolution: {integrity: sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==} hasBin: true dependencies: strnum: 1.0.5 @@ -14529,7 +16640,7 @@ packages: object-assign: 4.1.1 promise: 7.3.1 setimmediate: 1.0.5 - ua-parser-js: 1.0.35 + ua-parser-js: 1.0.37 transitivePeerDependencies: - encoding dev: false @@ -14778,8 +16889,8 @@ packages: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /flow-enums-runtime@0.0.5: - resolution: {integrity: sha512-PSZF9ZuaZD03sT9YaIs0FrGJ7lSUw7rHZIex+73UYVXg46eL/wxN5PaVcPJFudE2cJu5f0fezitV5aBkLHPUOQ==} + /flow-enums-runtime@0.0.6: + resolution: {integrity: sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==} dev: false /flow-parser@0.206.0: @@ -14835,7 +16946,7 @@ packages: cross-spawn: 7.0.3 signal-exit: 4.1.0 - /fork-ts-checker-webpack-plugin@6.5.2(eslint@8.49.0)(typescript@5.2.2)(webpack@5.75.0): + /fork-ts-checker-webpack-plugin@6.5.2(eslint@8.55.0)(typescript@5.2.2)(webpack@5.75.0): resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -14855,7 +16966,7 @@ packages: chokidar: 3.5.3 cosmiconfig: 6.0.0 deepmerge: 4.3.1 - eslint: 8.49.0 + eslint: 8.55.0 fs-extra: 9.1.0 glob: 7.2.3 memfs: 3.4.13 @@ -14999,8 +17110,8 @@ packages: /fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} - /fsevents@2.3.2: - resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + /fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} os: [darwin] requiresBuild: true @@ -15009,6 +17120,10 @@ packages: /function-bind@1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} + /function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + dev: false + /function.prototype.name@1.1.5: resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} engines: {node: '>= 0.4'} @@ -15406,6 +17521,13 @@ packages: type-fest: 0.20.2 dev: true + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -15458,7 +17580,7 @@ packages: graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 dependencies: graphql: 15.8.0 - tslib: 2.6.1 + tslib: 2.6.2 dev: false optional: true @@ -15556,19 +17678,36 @@ packages: inherits: 2.0.4 minimalistic-assert: 1.0.1 + /hasown@2.0.0: + resolution: {integrity: sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==} + engines: {node: '>= 0.4'} + dependencies: + function-bind: 1.1.2 + dev: false + /he@1.2.0: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true dev: true - /hermes-estree@0.12.0: - resolution: {integrity: sha512-+e8xR6SCen0wyAKrMT3UD0ZCCLymKhRgjEB5sS28rKiFir/fXgLoeRilRUssFCILmGHb+OvHDUlhxs0+IEyvQw==} + /hermes-estree@0.15.0: + resolution: {integrity: sha512-lLYvAd+6BnOqWdnNbP/Q8xfl8LOGw4wVjfrNd9Gt8eoFzhNBRVD95n4l2ksfMVOoxuVyegs85g83KS9QOsxbVQ==} + dev: false + + /hermes-estree@0.17.1: + resolution: {integrity: sha512-EdUJms+eRE40OQxysFlPr1mPpvUbbMi7uDAKlScBw8o3tQY22BZ5yx56OYyp1bVaBm+7Cjc3NQz24sJEFXkPxg==} + dev: false + + /hermes-parser@0.15.0: + resolution: {integrity: sha512-Q1uks5rjZlE9RjMMjSUCkGrEIPI5pKJILeCtK1VmTj7U4pf3wVPoo+cxfu+s4cBAPy2JzikIIdCZgBoR6x7U1Q==} + dependencies: + hermes-estree: 0.15.0 dev: false - /hermes-parser@0.12.0: - resolution: {integrity: sha512-d4PHnwq6SnDLhYl3LHNHvOg7nQ6rcI7QVil418REYksv0Mh3cEkHDcuhGxNQ3vgnLSLl4QSvDrFCwQNYdpWlzw==} + /hermes-parser@0.17.1: + resolution: {integrity: sha512-yErtFLMEL6490fFJPurNn23OI2ciGAtaUfKUg9VPdcde9CmItCjOVQkJt1Xzawv5kuRzeIx0RE2E2Q9TbIgdzA==} dependencies: - hermes-estree: 0.12.0 + hermes-estree: 0.17.1 dev: false /hermes-profile-transformer@0.0.6: @@ -15812,6 +17951,16 @@ packages: transitivePeerDependencies: - supports-color + /https-proxy-agent@7.0.1: + resolution: {integrity: sha512-Eun8zV0kcYS1g19r78osiQLEFIRspRUDd9tIfBCTBPBeMieF/EsJNL8VI3xOIdYRDEkjQnqOYPsZ2DsWsVsFwQ==} + engines: {node: '>= 14'} + dependencies: + agent-base: 7.1.0 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + /https-proxy-agent@7.0.2: resolution: {integrity: sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==} engines: {node: '>= 14'} @@ -15894,6 +18043,11 @@ packages: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} + /ignore@5.3.0: + resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + engines: {node: '>= 4'} + dev: true + /image-size@1.0.2: resolution: {integrity: sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==} engines: {node: '>=14.0.0'} @@ -16094,6 +18248,15 @@ packages: engines: {node: '>= 10'} dev: true + /ipfs-unixfs@11.1.0: + resolution: {integrity: sha512-Lq37nKLJOpRFjx3rcg3y+ZwUxBX7jluKfIt5UPp6wb1L3dP0sj1yaLR0Yg2CdGYvHWyUpZD1iTnT8upL0ToDOw==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + err-code: 3.0.1 + protons-runtime: 5.0.2(uint8arraylist@2.4.3) + uint8arraylist: 2.4.3 + dev: false + /is-arguments@1.1.1: resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} engines: {node: '>= 0.4'} @@ -16157,6 +18320,12 @@ packages: dependencies: has: 1.0.3 + /is-core-module@2.13.1: + resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + dependencies: + hasown: 2.0.0 + dev: false + /is-date-object@1.0.5: resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} engines: {node: '>= 0.4'} @@ -16328,6 +18497,7 @@ packages: /is-root@2.1.0: resolution: {integrity: sha512-AGOriNp96vNBd3HtU+RzFEc75FfR5ymiYv8E553I71SCeXBiMsVDUtdio1OEFvrPyLIQ9tVR5RxXIFe5PUFjMg==} engines: {node: '>=6'} + dev: true /is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} @@ -16471,7 +18641,7 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} - /isomorphic-webcrypto@2.3.8(expo@49.0.6)(react-native@0.72.3): + /isomorphic-webcrypto@2.3.8(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-XddQSI0WYlSCjxtm1AI8kWQOulf7hAN3k3DclF1sxDJZqOe0pcsOt675zvWW91cZH9hYs3nlA3Ev8QK5i80SxQ==} dependencies: '@peculiar/webcrypto': 1.4.1 @@ -16484,8 +18654,8 @@ packages: optionalDependencies: '@unimodules/core': 7.1.2 '@unimodules/react-native-adapter': 6.3.9 - expo-random: 13.2.0(expo@49.0.6) - react-native-securerandom: 0.1.1(react-native@0.72.3) + expo-random: 13.4.0(expo@49.0.21) + react-native-securerandom: 0.1.1(react-native@0.73.0) transitivePeerDependencies: - expo - react-native @@ -16520,8 +18690,8 @@ packages: - supports-color dev: true - /istanbul-lib-instrument@6.0.0: - resolution: {integrity: sha512-x58orMzEVfzPUKqlbLd1hXCnySCxKdDKa6Rjg97CwuLLRI4g3FHTdnExu1OqffVFay6zeMW+T6/DowFLndWnIw==} + /istanbul-lib-instrument@6.0.1: + resolution: {integrity: sha512-EAMEJBsYuyyztxMxW3g7ugGPkrZsV57v0Hmv3mm1uQsmB+QnZuepg731CRaIgeUVSdmsTngOkSnauNF8p7FIhA==} engines: {node: '>=10'} dependencies: '@babel/core': 7.22.9 @@ -16619,7 +18789,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -16647,7 +18817,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -16698,7 +18868,7 @@ packages: - utf-8-validate dev: true - /jest-cli@29.7.0(@types/node@20.6.2)(ts-node@10.9.1): + /jest-cli@29.7.0(@types/node@20.8.2)(ts-node@10.9.1): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -16712,10 +18882,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + create-jest: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + jest-config: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -16759,7 +18929,7 @@ packages: pretty-format: 27.5.1 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) transitivePeerDependencies: - bufferutil - canvas @@ -16767,7 +18937,7 @@ packages: - utf-8-validate dev: true - /jest-config@29.7.0(@types/node@20.6.2)(ts-node@10.9.1): + /jest-config@29.7.0(@types/node@20.8.2)(ts-node@10.9.1): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -16782,7 +18952,7 @@ packages: '@babel/core': 7.22.9 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 babel-jest: 29.7.0(@babel/core@7.22.9) chalk: 4.1.2 ci-info: 3.8.0 @@ -16802,7 +18972,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -16912,7 +19082,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -16936,7 +19106,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -16953,23 +19123,11 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-mock: 27.5.1 jest-util: 27.5.1 dev: true - /jest-environment-node@29.6.2: - resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/environment': 29.6.2 - '@jest/fake-timers': 29.6.2 - '@jest/types': 29.6.1 - '@types/node': 20.6.2 - jest-mock: 29.6.2 - jest-util: 29.6.2 - dev: true - /jest-environment-node@29.7.0: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -16977,7 +19135,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -17005,7 +19163,7 @@ packages: cosmiconfig: 8.2.0 deepmerge: 4.3.1 jest-dev-server: 9.0.0 - jest-environment-node: 29.6.2 + jest-environment-node: 29.7.0 transitivePeerDependencies: - debug - supports-color @@ -17040,7 +19198,7 @@ packages: dependencies: '@jest/types': 27.5.1 '@types/graceful-fs': 4.1.6 - '@types/node': 20.6.2 + '@types/node': 20.8.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -17051,7 +19209,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /jest-haste-map@29.7.0: @@ -17060,7 +19218,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.6 - '@types/node': 20.6.2 + '@types/node': 20.8.2 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -17070,7 +19228,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /jest-jasmine2@27.5.1: @@ -17081,7 +19239,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -17107,7 +19265,7 @@ packages: '@jest/source-map': 29.6.3 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 co: 4.6.0 is-generator-fn: 2.1.0 @@ -17233,16 +19391,7 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.6.2 - dev: true - - /jest-mock@29.6.2: - resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - dependencies: - '@jest/types': 29.6.1 - '@types/node': 20.6.2 - jest-util: 29.6.2 + '@types/node': 20.8.2 dev: true /jest-mock@29.7.0: @@ -17250,7 +19399,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-util: 29.7.0 /jest-pnp-resolver@1.2.3(jest-resolve@27.5.1): @@ -17277,7 +19426,7 @@ packages: jest-resolve: 29.7.0 dev: true - /jest-puppeteer@9.0.0(puppeteer@21.2.1): + /jest-puppeteer@9.0.0(puppeteer@21.3.4): resolution: {integrity: sha512-LCon1dWydLcrq6Qnv/K8NgawVW+nllUVGzKBa/ETZV8yrlzp6d53Ydli3ngsX/maMkiQANl5ID/9GQqo9BY7Mw==} engines: {node: '>=16'} peerDependencies: @@ -17285,7 +19434,7 @@ packages: dependencies: expect-puppeteer: 9.0.0 jest-environment-puppeteer: 9.0.0 - puppeteer: 21.2.1(typescript@5.2.2) + puppeteer: 21.3.4(typescript@5.2.2) transitivePeerDependencies: - debug - supports-color @@ -17294,6 +19443,7 @@ packages: /jest-regex-util@27.5.1: resolution: {integrity: sha512-4bfKq2zie+x16okqDXjXn9ql2B0dScQu+vcwe4TvFVhkVyuWLqpZrZtXxLLWoXYgn0E87I6r6GRYHF7wFZBUvg==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dev: true /jest-regex-util@28.0.2: resolution: {integrity: sha512-4s0IgyNIy0y9FK+cjoVYoxamT7Zeo7MhzqRGx7YDYmaQn1wucY9rotiGkBzzcMXTtjrCAP/f7f+E0F7+fxPNdw==} @@ -17366,7 +19516,7 @@ packages: '@jest/test-result': 27.5.1 '@jest/transform': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 emittery: 0.8.1 graceful-fs: 4.2.11 @@ -17398,7 +19548,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -17459,7 +19609,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -17482,7 +19632,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 graceful-fs: 4.2.11 dev: true @@ -17549,18 +19699,19 @@ packages: engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 picomatch: 2.3.1 + dev: true /jest-util@28.1.3: resolution: {integrity: sha512-XdqfpHwpcSRko/C35uLYFM2emRAltIIKZiJ9eAmhjsj0CqZMa0p1ib0R5fWIqGhn1a103DebTbpqIaP1qCQ6tQ==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/types': 28.1.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -17572,7 +19723,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -17584,7 +19735,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 chalk: 4.1.2 ci-info: 3.8.0 graceful-fs: 4.2.11 @@ -17635,7 +19786,7 @@ packages: dependencies: '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 20.6.2 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 jest-util: 27.5.1 @@ -17648,7 +19799,7 @@ packages: dependencies: '@jest/test-result': 28.1.3 '@jest/types': 28.1.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.10.2 @@ -17662,7 +19813,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -17674,7 +19825,7 @@ packages: resolution: {integrity: sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 merge-stream: 2.0.0 supports-color: 7.2.0 dev: true @@ -17683,15 +19834,16 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 merge-stream: 2.0.0 supports-color: 8.1.1 + dev: true /jest-worker@28.1.3: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true @@ -17700,11 +19852,10 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.6.2 + '@types/node': 20.8.2 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: true /jest@27.5.1(ts-node@10.9.1): resolution: {integrity: sha512-Yn0mADZB89zTtjkPJEXwrac3LHudkQMR+Paqa8uxJHCBr9agxztUifWCyiYrjhMPBoUVBjyny0I7XH6ozDr7QQ==} @@ -17727,7 +19878,7 @@ packages: - utf-8-validate dev: true - /jest@29.7.0(@types/node@20.6.2)(ts-node@10.9.1): + /jest@29.7.0(@types/node@20.8.2)(ts-node@10.9.1): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -17740,7 +19891,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.1) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + jest-cli: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -17756,6 +19907,16 @@ packages: /jju@1.4.0: resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + /joi@17.11.0: + resolution: {integrity: sha512-NgB+lZLNoqISVy1rZocE9PZI36bL/77ie924Ri43yEvi9GUUMPeyVIr8KdFTMUlby1p0PBYMk9spIxEUQYqrJQ==} + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.4 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + dev: false + /joi@17.7.0: resolution: {integrity: sha512-1/ugc8djfn93rTE3WRKdCzGGt/EtiYKxITMO4Wiv6q5JL1gl9ePt4kBsl1S499nbosspfctIQTpYIhSmHA3WAg==} dependencies: @@ -17774,6 +19935,7 @@ packages: '@sideway/address': 4.1.4 '@sideway/formula': 3.0.1 '@sideway/pinpoint': 2.0.0 + dev: true /join-component@1.1.0: resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} @@ -17819,23 +19981,23 @@ packages: resolution: {integrity: sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==} dev: false - /jscodeshift@0.14.0(@babel/preset-env@7.22.9): + /jscodeshift@0.14.0(@babel/preset-env@7.23.6): resolution: {integrity: sha512-7eCC1knD7bLUPuSCwXsMZUH51O8jIcoVyKtI6P0XM0IVzlGjckPy3FIwQlorzbN0Sg79oK+RlohN32Mqf/lrYA==} hasBin: true peerDependencies: '@babel/preset-env': ^7.1.6 dependencies: - '@babel/core': 7.22.9 - '@babel/parser': 7.22.7 - '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.9) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) - '@babel/preset-env': 7.22.9(@babel/core@7.22.9) - '@babel/preset-flow': 7.22.5(@babel/core@7.22.9) - '@babel/preset-typescript': 7.22.5(@babel/core@7.22.9) - '@babel/register': 7.22.5(@babel/core@7.22.9) - babel-core: 7.0.0-bridge.0(@babel/core@7.22.9) + '@babel/core': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/preset-env': 7.23.6(@babel/core@7.22.9) + '@babel/preset-flow': 7.23.3(@babel/core@7.23.6) + '@babel/preset-typescript': 7.23.3(@babel/core@7.23.6) + '@babel/register': 7.22.15(@babel/core@7.23.6) + babel-core: 7.0.0-bridge.0(@babel/core@7.23.6) chalk: 4.1.2 flow-parser: 0.206.0 graceful-fs: 4.2.11 @@ -17924,7 +20086,7 @@ packages: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.13.0 + ws: 8.15.1 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -18045,11 +20207,11 @@ packages: optionalDependencies: graceful-fs: 4.2.11 - /jsonld-checker@0.1.8(expo@49.0.6)(react-native@0.72.3): + /jsonld-checker@0.1.8(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-jclmnPRrm5SEpaIV6IiSTJxplRAqIWHduQLsUfrYpZM41Ng48m1RN2/aUyHze/ynfO0D2UhlJBt8SdObsH5GBw==} engines: {node: '>=10'} dependencies: - jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.6)(react-native@0.72.3) + jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.21)(react-native@0.73.0) node-fetch: 2.6.12 transitivePeerDependencies: - domexception @@ -18059,12 +20221,12 @@ packages: - web-streams-polyfill dev: false - /jsonld-signatures@11.2.1(expo@49.0.6)(react-native@0.72.3): + /jsonld-signatures@11.2.1(expo@49.0.21)(react-native@0.73.0): resolution: {integrity: sha512-RNaHTEeRrX0jWeidPCwxMq/E/Ze94zFyEZz/v267ObbCHQlXhPO7GtkY6N5PSHQfQhZPXa8NlMBg5LiDF4dNbA==} engines: {node: '>=14'} dependencies: '@digitalbazaar/security-context': 1.0.1 - jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.6)(react-native@0.72.3) + jsonld: /@digitalcredentials/jsonld@6.0.0(expo@49.0.21)(react-native@0.73.0) serialize-error: 8.1.0 transitivePeerDependencies: - domexception @@ -18199,7 +20361,7 @@ packages: hasBin: true dependencies: '@lerna/child-process': 7.3.0 - '@lerna/create': 7.3.0(typescript@5.2.2) + '@lerna/create': 7.3.0 '@npmcli/run-script': 6.0.2 '@nx/devkit': 16.6.0(nx@16.6.0) '@octokit/plugin-enterprise-rest': 6.0.1 @@ -18355,6 +20517,15 @@ packages: - supports-color dev: true + /lighthouse-logger@1.4.2: + resolution: {integrity: sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==} + dependencies: + debug: 2.6.9 + marky: 1.2.5 + transitivePeerDependencies: + - supports-color + dev: false + /lightningcss-darwin-arm64@1.19.0: resolution: {integrity: sha512-wIJmFtYX0rXHsXHSr4+sC5clwblEMji7HHQ4Ub1/CznVRxtCFha6JIt5JZaNf8vQrfdZnBxLLC6R8pC818jXqg==} engines: {node: '>= 12.0.0'} @@ -18610,10 +20781,14 @@ packages: hasBin: true dependencies: ansi-fragments: 0.2.1 - dayjs: 1.11.9 + dayjs: 1.11.10 yargs: 15.4.1 dev: false + /long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + dev: false + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -18623,7 +20798,7 @@ packages: /lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: true /lru-cache@10.0.1: @@ -18763,6 +20938,10 @@ packages: hasBin: true dev: true + /marky@1.2.5: + resolution: {integrity: sha512-q9JtQJKjpsVxCRVgQ+WapguSbKC3SQ5HEzFGPAJMStgh3QjCawp00UKv3MTTAArTmGmmPUvllHZoNbZ3gs0I+Q==} + dev: false + /md5-file@3.2.3: resolution: {integrity: sha512-3Tkp1piAHaworfcCgH0jKbTvj1jWWFgbvh2cXaNCgHwyTCBxxvD1Y04rmfpvdPm1P4oXMOpm6+2H7sr7v9v8Fw==} engines: {node: '>=0.10'} @@ -18876,41 +21055,41 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - /metro-babel-transformer@0.76.7: - resolution: {integrity: sha512-bgr2OFn0J4r0qoZcHrwEvccF7g9k3wdgTOgk6gmGHrtlZ1Jn3oCpklW/DfZ9PzHfjY2mQammKTc19g/EFGyOJw==} - engines: {node: '>=16'} + /metro-babel-transformer@0.80.1: + resolution: {integrity: sha512-8mFluLGyOKzhedSAFANCe1cyT2fBlt1+tl0dqlcJI6OCP/V0I22bNFlyogWzseOjVTd3c0iEAbRXioZOUGOMzQ==} + engines: {node: '>=18'} dependencies: - '@babel/core': 7.22.9 - hermes-parser: 0.12.0 + '@babel/core': 7.23.6 + hermes-parser: 0.17.1 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color dev: false - /metro-cache-key@0.76.7: - resolution: {integrity: sha512-0pecoIzwsD/Whn/Qfa+SDMX2YyasV0ndbcgUFx7w1Ct2sLHClujdhQ4ik6mvQmsaOcnGkIyN0zcceMDjC2+BFQ==} - engines: {node: '>=16'} + /metro-cache-key@0.80.1: + resolution: {integrity: sha512-Hj2CWFVy11dEa7iNoy2fI14kD6DiFUD7houGTnFy9esCAm3y/hedciMXg4+1eihz+vtfhPWUIu+ZW/sXeIQkFQ==} + engines: {node: '>=18'} dev: false - /metro-cache@0.76.7: - resolution: {integrity: sha512-nWBMztrs5RuSxZRI7hgFgob5PhYDmxICh9FF8anm9/ito0u0vpPvRxt7sRu8fyeD2AHdXqE7kX32rWY0LiXgeg==} - engines: {node: '>=16'} + /metro-cache@0.80.1: + resolution: {integrity: sha512-pAYrlPCnomv7EQi08YSeoeF7YL3/4S3JzNn+nVp8e7AIOekO6Hf9j/GPRKfIQwll+os5bE9qFa++NPPmD59IeQ==} + engines: {node: '>=18'} dependencies: - metro-core: 0.76.7 + metro-core: 0.80.1 rimraf: 3.0.2 dev: false - /metro-config@0.76.7: - resolution: {integrity: sha512-CFDyNb9bqxZemiChC/gNdXZ7OQkIwmXzkrEXivcXGbgzlt/b2juCv555GWJHyZSlorwnwJfY3uzAFu4A9iRVfg==} - engines: {node: '>=16'} + /metro-config@0.80.1: + resolution: {integrity: sha512-ADbPLfMAe68CJGwu6vM0cXImfME0bauLK8P98mQbiAP6xLYVehCdeXEWSe9plVWhzpPLNemSr1AlTvPTMdl3Bw==} + engines: {node: '>=18'} dependencies: connect: 3.7.0 cosmiconfig: 5.2.1 jest-validate: 29.7.0 - metro: 0.76.7 - metro-cache: 0.76.7 - metro-core: 0.76.7 - metro-runtime: 0.76.7 + metro: 0.80.1 + metro-cache: 0.80.1 + metro-core: 0.80.1 + metro-runtime: 0.80.1 transitivePeerDependencies: - bufferutil - encoding @@ -18918,69 +21097,43 @@ packages: - utf-8-validate dev: false - /metro-core@0.76.7: - resolution: {integrity: sha512-0b8KfrwPmwCMW+1V7ZQPkTy2tsEKZjYG9Pu1PTsu463Z9fxX7WaR0fcHFshv+J1CnQSUTwIGGjbNvj1teKe+pw==} - engines: {node: '>=16'} + /metro-core@0.80.1: + resolution: {integrity: sha512-f2Kav0/467YBG0DGAEX6+EQoYcUK+8vXIrEHQSkxCPXTjFcyppXUt2O6SDHMlL/Z5CGpd4uK1c/byXEfImJJdA==} + engines: {node: '>=18'} dependencies: lodash.throttle: 4.1.1 - metro-resolver: 0.76.7 + metro-resolver: 0.80.1 dev: false - /metro-file-map@0.76.7: - resolution: {integrity: sha512-s+zEkTcJ4mOJTgEE2ht4jIo1DZfeWreQR3tpT3gDV/Y/0UQ8aJBTv62dE775z0GLsWZApiblAYZsj7ZE8P06nw==} - engines: {node: '>=16'} + /metro-file-map@0.80.1: + resolution: {integrity: sha512-Z00OaxlVx1Ynr3r3bZwgI9RXaimh1evTgofuk5TeYC5LEKWcAVr7QU0cGbjfhXa/kzD8iFFYPbDBENOXc398XQ==} + engines: {node: '>=18'} dependencies: anymatch: 3.1.3 debug: 2.6.9 fb-watchman: 2.0.2 graceful-fs: 4.2.11 invariant: 2.2.4 - jest-regex-util: 27.5.1 - jest-util: 27.5.1 - jest-worker: 27.5.1 + jest-worker: 29.7.0 micromatch: 4.0.5 - node-abort-controller: 3.1.1 - nullthrows: 1.1.1 - walker: 1.0.8 - optionalDependencies: - fsevents: 2.3.2 - transitivePeerDependencies: - - supports-color - dev: false - - /metro-inspector-proxy@0.76.7: - resolution: {integrity: sha512-rNZ/6edTl/1qUekAhAbaFjczMphM50/UjtxiKulo6vqvgn/Mjd9hVqDvVYfAMZXqPvlusD88n38UjVYPkruLSg==} - engines: {node: '>=16'} - hasBin: true - dependencies: - connect: 3.7.0 - debug: 2.6.9 - node-fetch: 2.6.12 - ws: 7.5.9 - yargs: 17.7.2 + node-abort-controller: 3.1.1 + nullthrows: 1.1.1 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 transitivePeerDependencies: - - bufferutil - - encoding - supports-color - - utf-8-validate - dev: false - - /metro-minify-terser@0.76.7: - resolution: {integrity: sha512-FQiZGhIxCzhDwK4LxyPMLlq0Tsmla10X7BfNGlYFK0A5IsaVKNJbETyTzhpIwc+YFRT4GkFFwgo0V2N5vxO5HA==} - engines: {node: '>=16'} - dependencies: - terser: 5.19.2 dev: false - /metro-minify-uglify@0.76.7: - resolution: {integrity: sha512-FuXIU3j2uNcSvQtPrAJjYWHruPiQ+EpE++J9Z+VznQKEHcIxMMoQZAfIF2IpZSrZYfLOjVFyGMvj41jQMxV1Vw==} - engines: {node: '>=16'} + /metro-minify-terser@0.80.1: + resolution: {integrity: sha512-LfX3n895J6MsyiQkLz2SYcKVmZA1ag0NfYDyQapdnOd/oZmkdSu5jUWt0IjiohRLqKSnvyDp00OdQDRfhD3S8g==} + engines: {node: '>=18'} dependencies: - uglify-es: 3.3.9 + terser: 5.26.0 dev: false - /metro-react-native-babel-preset@0.76.7(@babel/core@7.22.9): - resolution: {integrity: sha512-R25wq+VOSorAK3hc07NW0SmN8z9S/IR0Us0oGAsBcMZnsgkbOxu77Mduqf+f4is/wnWHc5+9bfiqdLnaMngiVw==} + /metro-react-native-babel-preset@0.76.8(@babel/core@7.22.9): + resolution: {integrity: sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg==} engines: {node: '>=16'} peerDependencies: '@babel/core': '*' @@ -18988,97 +21141,132 @@ packages: '@babel/core': 7.22.9 '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.22.9) '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.9) - '@babel/plugin-proposal-export-default-from': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.22.9) '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.9) '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.9) '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.22.9) '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.22.9) '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.9) '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-syntax-export-default-from': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.22.9) '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.9) '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.9) - '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-block-scoping': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-classes': 7.22.6(@babel/core@7.22.9) - '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-destructuring': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-modules-commonjs': 7.22.5(@babel/core@7.22.9) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.22.9) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.22.9) '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-parameters': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-jsx': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-jsx-self': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-runtime': 7.22.9(@babel/core@7.22.9) - '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.9) - '@babel/plugin-transform-typescript': 7.22.9(@babel/core@7.22.9) - '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.9) - '@babel/template': 7.22.5 + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.22.9) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.22.9) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.22.9) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.22.9) + '@babel/template': 7.22.15 babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.22.9) react-refresh: 0.4.3 transitivePeerDependencies: - supports-color dev: false + optional: true - /metro-react-native-babel-transformer@0.76.7(@babel/core@7.22.9): - resolution: {integrity: sha512-W6lW3J7y/05ph3c2p3KKJNhH0IdyxdOCbQ5it7aM2MAl0SM4wgKjaV6EYv9b3rHklpV6K3qMH37UKVcjMooWiA==} + /metro-react-native-babel-preset@0.76.8(@babel/core@7.23.6): + resolution: {integrity: sha512-Ptza08GgqzxEdK8apYsjTx2S8WDUlS2ilBlu9DR1CUcHmg4g3kOkFylZroogVAUKtpYQNYwAvdsjmrSdDNtiAg==} engines: {node: '>=16'} peerDependencies: '@babel/core': '*' dependencies: - '@babel/core': 7.22.9 - babel-preset-fbjs: 3.4.0(@babel/core@7.22.9) - hermes-parser: 0.12.0 - metro-react-native-babel-preset: 0.76.7(@babel/core@7.22.9) - nullthrows: 1.1.1 + '@babel/core': 7.23.6 + '@babel/plugin-proposal-async-generator-functions': 7.20.7(@babel/core@7.23.6) + '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-export-default-from': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-object-rest-spread': 7.20.7(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-catch-binding': 7.18.6(@babel/core@7.23.6) + '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.6) + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-export-default-from': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-flow': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.6) + '@babel/plugin-transform-arrow-functions': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-async-to-generator': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-block-scoping': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-classes': 7.23.5(@babel/core@7.23.6) + '@babel/plugin-transform-computed-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-destructuring': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-flow-strip-types': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-function-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-literals': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-modules-commonjs': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.6) + '@babel/plugin-transform-parameters': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-display-name': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-self': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-react-jsx-source': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-runtime': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-shorthand-properties': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-spread': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-sticky-regex': 7.23.3(@babel/core@7.23.6) + '@babel/plugin-transform-typescript': 7.23.6(@babel/core@7.23.6) + '@babel/plugin-transform-unicode-regex': 7.23.3(@babel/core@7.23.6) + '@babel/template': 7.22.15 + babel-plugin-transform-flow-enums: 0.0.2(@babel/core@7.23.6) + react-refresh: 0.4.3 transitivePeerDependencies: - supports-color dev: false + optional: true - /metro-resolver@0.76.7: - resolution: {integrity: sha512-pC0Wgq29HHIHrwz23xxiNgylhI8Rq1V01kQaJ9Kz11zWrIdlrH0ZdnJ7GC6qA0ErROG+cXmJ0rJb8/SW1Zp2IA==} - engines: {node: '>=16'} + /metro-resolver@0.80.1: + resolution: {integrity: sha512-NuVTx+eplveM8mNybsCQ9BrATGw7lXhfEIvCa7gz6eMcKOQ6RBzwUXWMYKehw8KL4eIkNOHzdczAiGTRuhzrQg==} + engines: {node: '>=18'} dev: false - /metro-runtime@0.76.7: - resolution: {integrity: sha512-MuWHubQHymUWBpZLwuKZQgA/qbb35WnDAKPo83rk7JRLIFPvzXSvFaC18voPuzJBt1V98lKQIonh6MiC9gd8Ug==} - engines: {node: '>=16'} + /metro-runtime@0.80.1: + resolution: {integrity: sha512-RQ+crdwbC4oUYzWom8USCvJWEfFyIuQAeV0bVcNvbpaaz3Q4imXSINJkjDth37DHnxUlhNhEeAcRG6JQIO1QeA==} + engines: {node: '>=18'} dependencies: - '@babel/runtime': 7.22.6 - react-refresh: 0.4.3 + '@babel/runtime': 7.23.6 dev: false - /metro-source-map@0.76.7: - resolution: {integrity: sha512-Prhx7PeRV1LuogT0Kn5VjCuFu9fVD68eefntdWabrksmNY6mXK8pRqzvNJOhTojh6nek+RxBzZeD6MIOOyXS6w==} - engines: {node: '>=16'} + /metro-source-map@0.80.1: + resolution: {integrity: sha512-RoVaBdS44H68WY3vaO+s9/wshypPy8gKgcbND+A4FRxVsKM3+PI2pRoaAk4lTshgbmmXUuBZADzXdCz4F2JmnQ==} + engines: {node: '>=18'} dependencies: - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 invariant: 2.2.4 - metro-symbolicate: 0.76.7 + metro-symbolicate: 0.80.1 nullthrows: 1.1.1 - ob1: 0.76.7 + ob1: 0.80.1 source-map: 0.5.7 vlq: 1.0.1 transitivePeerDependencies: - supports-color dev: false - /metro-symbolicate@0.76.7: - resolution: {integrity: sha512-p0zWEME5qLSL1bJb93iq+zt5fz3sfVn9xFYzca1TJIpY5MommEaS64Va87lp56O0sfEIvh4307Oaf/ZzRjuLiQ==} - engines: {node: '>=16'} + /metro-symbolicate@0.80.1: + resolution: {integrity: sha512-HxIHH/wLPyO9pZTmIfvCG/63n8UDTLjHzcWPMRUiLOc0cHa/NI2ewtik1VK2Lzm3swvU8EfD9XXJ//jEnIlhIg==} + engines: {node: '>=18'} hasBin: true dependencies: invariant: 2.2.4 - metro-source-map: 0.76.7 + metro-source-map: 0.80.1 nullthrows: 1.1.1 source-map: 0.5.7 through2: 2.0.5 @@ -19087,34 +21275,33 @@ packages: - supports-color dev: false - /metro-transform-plugins@0.76.7: - resolution: {integrity: sha512-iSmnjVApbdivjuzb88Orb0JHvcEt5veVyFAzxiS5h0QB+zV79w6JCSqZlHCrbNOkOKBED//LqtKbFVakxllnNg==} - engines: {node: '>=16'} + /metro-transform-plugins@0.80.1: + resolution: {integrity: sha512-sJkzY9WJ9p7t3TrvNuIxW/6z4nQZC1pN3nJl4eQmE2lmHBqEMeZr/83DyTnf9Up86abQAXHVZmG5JzXrq7Kb5g==} + engines: {node: '>=18'} dependencies: - '@babel/core': 7.22.9 - '@babel/generator': 7.22.9 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 nullthrows: 1.1.1 transitivePeerDependencies: - supports-color dev: false - /metro-transform-worker@0.76.7: - resolution: {integrity: sha512-cGvELqFMVk9XTC15CMVzrCzcO6sO1lURfcbgjuuPdzaWuD11eEyocvkTX0DPiRjsvgAmicz4XYxVzgYl3MykDw==} - engines: {node: '>=16'} + /metro-transform-worker@0.80.1: + resolution: {integrity: sha512-SkX9JBQGbNkzJ2oF7sAi8Nbc0KRLj8Rus9Z4kPh++JCTNqEwsZV5z27ksr9I9EGbqL2/qfUrDZJo1OwozX6dhw==} + engines: {node: '>=18'} dependencies: - '@babel/core': 7.22.9 - '@babel/generator': 7.22.9 - '@babel/parser': 7.22.7 - '@babel/types': 7.22.5 - babel-preset-fbjs: 3.4.0(@babel/core@7.22.9) - metro: 0.76.7 - metro-babel-transformer: 0.76.7 - metro-cache: 0.76.7 - metro-cache-key: 0.76.7 - metro-source-map: 0.76.7 - metro-transform-plugins: 0.76.7 + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/types': 7.23.6 + metro: 0.80.1 + metro-babel-transformer: 0.80.1 + metro-cache: 0.80.1 + metro-cache-key: 0.80.1 + metro-source-map: 0.80.1 + metro-transform-plugins: 0.80.1 nullthrows: 1.1.1 transitivePeerDependencies: - bufferutil @@ -19123,20 +21310,19 @@ packages: - utf-8-validate dev: false - /metro@0.76.7: - resolution: {integrity: sha512-67ZGwDeumEPnrHI+pEDSKH2cx+C81Gx8Mn5qOtmGUPm/Up9Y4I1H2dJZ5n17MWzejNo0XAvPh0QL0CrlJEODVQ==} - engines: {node: '>=16'} + /metro@0.80.1: + resolution: {integrity: sha512-yp0eLYFY+5seXr7KR1fe61eDL4Qf5dvLS6dl1eKn4DPKgROC9A4nTsulHdMy2ntXWgjnAZRJBDPHuh3tAi4/nQ==} + engines: {node: '>=18'} hasBin: true dependencies: - '@babel/code-frame': 7.22.5 - '@babel/core': 7.22.9 - '@babel/generator': 7.22.9 - '@babel/parser': 7.22.7 - '@babel/template': 7.22.5 - '@babel/traverse': 7.22.8 - '@babel/types': 7.22.5 + '@babel/code-frame': 7.23.5 + '@babel/core': 7.23.6 + '@babel/generator': 7.23.6 + '@babel/parser': 7.23.6 + '@babel/template': 7.22.15 + '@babel/traverse': 7.23.6 + '@babel/types': 7.23.6 accepts: 1.3.8 - async: 3.2.4 chalk: 4.1.2 ci-info: 2.0.0 connect: 3.7.0 @@ -19144,30 +21330,27 @@ packages: denodeify: 1.2.1 error-stack-parser: 2.1.4 graceful-fs: 4.2.11 - hermes-parser: 0.12.0 + hermes-parser: 0.17.1 image-size: 1.0.2 invariant: 2.2.4 - jest-worker: 27.5.1 + jest-worker: 29.7.0 jsc-safe-url: 0.2.4 lodash.throttle: 4.1.1 - metro-babel-transformer: 0.76.7 - metro-cache: 0.76.7 - metro-cache-key: 0.76.7 - metro-config: 0.76.7 - metro-core: 0.76.7 - metro-file-map: 0.76.7 - metro-inspector-proxy: 0.76.7 - metro-minify-terser: 0.76.7 - metro-minify-uglify: 0.76.7 - metro-react-native-babel-preset: 0.76.7(@babel/core@7.22.9) - metro-resolver: 0.76.7 - metro-runtime: 0.76.7 - metro-source-map: 0.76.7 - metro-symbolicate: 0.76.7 - metro-transform-plugins: 0.76.7 - metro-transform-worker: 0.76.7 + metro-babel-transformer: 0.80.1 + metro-cache: 0.80.1 + metro-cache-key: 0.80.1 + metro-config: 0.80.1 + metro-core: 0.80.1 + metro-file-map: 0.80.1 + metro-minify-terser: 0.80.1 + metro-resolver: 0.80.1 + metro-runtime: 0.80.1 + metro-source-map: 0.80.1 + metro-symbolicate: 0.80.1 + metro-transform-plugins: 0.80.1 + metro-transform-worker: 0.80.1 mime-types: 2.1.35 - node-fetch: 2.6.12 + node-fetch: 2.7.0 nullthrows: 1.1.1 rimraf: 3.0.2 serialize-error: 2.1.0 @@ -19475,14 +21658,6 @@ packages: thunky: 1.1.0 dev: true - /multicodec@3.2.1: - resolution: {integrity: sha512-+expTPftro8VAW8kfvcuNNNBgb9gPeNYV9dn+z1kJRWF2vih+/S79f2RVeIwmrJBUJ6NT9IUPWnZDQvegEh5pw==} - deprecated: This module has been superseded by the multiformats module - dependencies: - uint8arrays: 3.1.1 - varint: 6.0.0 - dev: false - /multiformats@12.0.1: resolution: {integrity: sha512-s01wijBJoDUqESWSzePY0lvTw7J3PVO9x2Cc6ASI5AMZM2Gnhh7BC17+nlFhHKU7dDzaCaRfb+NiqNzOsgPUoQ==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} @@ -19542,8 +21717,8 @@ packages: hasBin: true dev: true - /nanoid@3.3.6: - resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} + /nanoid@3.3.7: + resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -19596,7 +21771,7 @@ packages: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} dependencies: lower-case: 2.0.2 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /nocache@3.0.4: @@ -19665,6 +21840,18 @@ packages: whatwg-url: 5.0.0 dev: true + /node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + dependencies: + whatwg-url: 5.0.0 + dev: false + /node-fetch@3.0.0-beta.9: resolution: {integrity: sha512-RdbZCEynH2tH46+tj0ua9caUHVWrd/RHnRfvly2EVdqGmI3ndS1Vn/xjm5KuGejDt2RNDQsVRLPNd2QPwcewVg==} engines: {node: ^10.17 || >=12.3} @@ -19745,9 +21932,16 @@ packages: resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} dev: true + /node-releases@2.0.12: + resolution: {integrity: sha512-QzsYKWhXTWx8h1kIvqfnC++o0pEmpRQA/aenALsL2F4pqNVr7YzcdMlDij5WBnwftRbJCNJL/O7zdKaxKPHqgQ==} + dev: true + /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} + /node-releases@2.0.14: + resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + /node-stream-zip@1.15.0: resolution: {integrity: sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==} engines: {node: '>=0.12.0'} @@ -19938,8 +22132,8 @@ packages: path-key: 4.0.0 dev: true - /npm@10.1.0: - resolution: {integrity: sha512-pZ2xybXzNGbJFZEKNbPoEXsE38Xou9VTnxxBk+B3pz0ndsGCs7iWHoUCPSsISU2hjmkWfDkJo3bYKE8RDOg4eg==} + /npm@10.2.0: + resolution: {integrity: sha512-Auyq6d4cfg/SY4URjZE2aePLOPzK4lUD+qyMxY/7HbxAvCnOCKtMlyLPcbLSOq9lhEGBZN800S1o+UmfjA5dTg==} engines: {node: ^18.17.0 || >=20.5.0} hasBin: true dev: true @@ -19988,6 +22182,7 @@ packages: - ms - node-gyp - nopt + - normalize-package-data - npm-audit-report - npm-install-checks - npm-package-arg @@ -20003,7 +22198,9 @@ packages: - qrcode-terminal - read - semver + - spdx-expression-parse - ssri + - strip-ansi - supports-color - tar - text-table @@ -20094,7 +22291,7 @@ packages: tar-stream: 2.2.0 tmp: 0.2.1 tsconfig-paths: 4.2.0 - tslib: 2.6.1 + tslib: 2.6.2 v8-compile-cache: 2.3.0 yargs: 17.7.2 yargs-parser: 21.1.1 @@ -20128,9 +22325,9 @@ packages: yaml: 1.10.2 yargs: 17.7.2 - /ob1@0.76.7: - resolution: {integrity: sha512-BQdRtxxoUNfSoZxqeBGOyuT9nEYSn18xZHwGMb0mMVpn2NBcYbnyKY4BK2LIHRgw33CBGlUmE+KMaNvyTpLLtQ==} - engines: {node: '>=16'} + /ob1@0.80.1: + resolution: {integrity: sha512-o9eYflOo+QnbC/k9GYQuAy90zOGQ/OBgrjlIeW6VrKhevSxth83JSdEvKuKaV7SMGJVQhSY3Zp8eGa3g0rLP0A==} + engines: {node: '>=18'} dev: false /object-assign@4.1.1: @@ -20266,6 +22463,14 @@ packages: is-wsl: 1.1.0 dev: false + /open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + dev: false + /open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -20295,7 +22500,7 @@ packages: dependencies: chalk: 2.4.2 cli-cursor: 2.1.0 - cli-spinners: 2.9.0 + cli-spinners: 2.9.2 log-symbols: 2.2.0 strip-ansi: 5.2.0 wcwidth: 1.0.1 @@ -20553,7 +22758,7 @@ packages: resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} dependencies: dot-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /parent-module@1.0.1: @@ -20651,7 +22856,7 @@ packages: resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} dependencies: no-case: 3.0.4 - tslib: 2.6.1 + tslib: 2.6.2 dev: true /passport-http-bearer@1.0.1: @@ -20985,7 +23190,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 caniuse-api: 3.0.0 colord: 2.9.3 postcss: 8.4.21 @@ -20998,7 +23203,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -21210,7 +23415,7 @@ packages: dependencies: lilconfig: 2.0.6 postcss: 8.4.21 - ts-node: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) yaml: 1.10.2 dev: true @@ -21263,7 +23468,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 caniuse-api: 3.0.0 cssnano-utils: 3.1.0(postcss@8.4.21) postcss: 8.4.21 @@ -21298,7 +23503,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 cssnano-utils: 3.1.0(postcss@8.4.21) postcss: 8.4.21 postcss-value-parser: 4.2.0 @@ -21441,7 +23646,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 postcss: 8.4.21 postcss-value-parser: 4.2.0 dev: true @@ -21550,7 +23755,7 @@ packages: '@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.21) '@csstools/postcss-unset-value': 1.0.2(postcss@8.4.21) autoprefixer: 10.4.13(postcss@8.4.21) - browserslist: 4.21.10 + browserslist: 4.21.7 css-blank-pseudo: 3.0.3(postcss@8.4.21) css-has-pseudo: 3.0.4(postcss@8.4.21) css-prefers-color-scheme: 6.0.3(postcss@8.4.21) @@ -21603,7 +23808,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 caniuse-api: 3.0.0 postcss: 8.4.21 dev: true @@ -21686,11 +23891,11 @@ packages: source-map-js: 1.0.2 dev: true - /postcss@8.4.27: - resolution: {integrity: sha512-gY/ACJtJPSmUFPDCHtX78+01fHa64FaU4zaaWfuh1MhGJISufJAH4cun6k/8fwsHYeK4UQmENQK+tRLCFJE8JQ==} + /postcss@8.4.32: + resolution: {integrity: sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==} engines: {node: ^10 || ^12 || >=14} dependencies: - nanoid: 3.3.6 + nanoid: 3.3.7 picocolors: 1.0.0 source-map-js: 1.0.2 @@ -21853,10 +24058,38 @@ packages: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true + /protobufjs@7.2.5: + resolution: {integrity: sha512-gGXRSXvxQ7UiPgfw8gevrfRWcTlSbOFg+p/N+JVJEK5VhueL2miT6qTymqAmjr1Q5WbOCyJbyrk6JfWKwlFn6A==} + engines: {node: '>=12.0.0'} + requiresBuild: true + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.10.4 + long: 5.2.3 + dev: false + /protocols@2.0.1: resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} dev: true + /protons-runtime@5.0.2(uint8arraylist@2.4.3): + resolution: {integrity: sha512-eKppVrIS5dDh+Y61Yj4bDEOs2sQLQbQGIhr7EBiybPQhIMGBynzVXlYILPWl3Td1GDadobc8qevh5D+JwfG9bw==} + peerDependencies: + uint8arraylist: ^2.3.2 + dependencies: + protobufjs: 7.2.5 + uint8arraylist: 2.4.3 + dev: false + /proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -21909,16 +24142,16 @@ packages: resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} engines: {node: '>=6'} - /puppeteer-core@21.2.1: - resolution: {integrity: sha512-+I8EjpWFeeFKScpQiTEnC4jGve2Wr4eA9qUMoa8S317DJPm9h7wzrT4YednZK2TQZMyPtPQ2Disb/Tg02+4Naw==} + /puppeteer-core@21.3.4: + resolution: {integrity: sha512-iaG7ScTXOm9hlsBTBGGtr5dAAsA8IiWTx8E0Ghr0b5Ntl42bdcPS8EXjcERKocDhua2YqdlnFGs/cBxHY+VNyA==} engines: {node: '>=16.3.0'} dependencies: '@puppeteer/browsers': 1.7.1 - chromium-bidi: 0.4.26(devtools-protocol@0.0.1159816) + chromium-bidi: 0.4.28(devtools-protocol@0.0.1179426) cross-fetch: 4.0.0 debug: 4.3.4 - devtools-protocol: 0.0.1159816 - ws: 8.14.1 + devtools-protocol: 0.0.1179426 + ws: 8.14.2 transitivePeerDependencies: - bufferutil - encoding @@ -21926,14 +24159,14 @@ packages: - utf-8-validate dev: true - /puppeteer@21.2.1(typescript@5.2.2): - resolution: {integrity: sha512-bgY/lYBH3rR+m5EP1FxzY2MRMrau7Pyq+N5YlspA63sF+cBkUiTn5WZXwXm7mEHwkkOSVi5LiS74T5QIgrSklg==} + /puppeteer@21.3.4(typescript@5.2.2): + resolution: {integrity: sha512-kE67k1KR6hQs3g0Yf/i3GYOhTU8zC2dtcpHhtcSC9bGoVxRgqDo/hwVkDqlNKxJsJHuVX+qviWC7F0FdSjcFTA==} engines: {node: '>=16.3.0'} requiresBuild: true dependencies: '@puppeteer/browsers': 1.7.1 - cosmiconfig: 8.3.5(typescript@5.2.2) - puppeteer-core: 21.2.1 + cosmiconfig: 8.3.6(typescript@5.2.2) + puppeteer-core: 21.3.4 transitivePeerDependencies: - bufferutil - encoding @@ -21949,7 +24182,7 @@ packages: /pvtsutils@1.3.2: resolution: {integrity: sha512-+Ipe2iNUyrZz+8K/2IOo+kKikdtfhRKzNpQbruF2URmqPtoqAs8g3xS7TJvFF2GcPXjh7DkqMnpVveRFq4PgEQ==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 dev: false /pvutils@1.1.3: @@ -22068,7 +24301,7 @@ packages: whatwg-fetch: 3.6.2 dev: true - /react-dev-utils@12.0.1(eslint@8.49.0)(typescript@5.2.2)(webpack@5.75.0): + /react-dev-utils@12.0.1(eslint@8.55.0)(typescript@5.2.2)(webpack@5.75.0): resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -22080,14 +24313,14 @@ packages: dependencies: '@babel/code-frame': 7.22.5 address: 1.2.2 - browserslist: 4.21.10 + browserslist: 4.21.7 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2(eslint@8.49.0)(typescript@5.2.2)(webpack@5.75.0) + fork-ts-checker-webpack-plugin: 6.5.2(eslint@8.55.0)(typescript@5.2.2)(webpack@5.75.0) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -22110,8 +24343,8 @@ packages: - vue-template-compiler dev: true - /react-devtools-core@4.28.0: - resolution: {integrity: sha512-E3C3X1skWBdBzwpOUbmXG8SgH6BtsluSMe+s6rRcujNKG1DGi8uIfhdhszkgDpAsMoE55hwqRUzeXCmETDBpTg==} + /react-devtools-core@4.28.5: + resolution: {integrity: sha512-cq/o30z9W2Wb4rzBefjv5fBalHU0rJGZCHAkf/RHSBWSSYwh8PlQTqqOJmgIIbBtpj27T6FIPXeomIjZtCNVqA==} dependencies: shell-quote: 1.8.1 ws: 7.5.9 @@ -22143,59 +24376,114 @@ packages: /react-is@18.2.0: resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} - /react-native-securerandom@0.1.1(react-native@0.72.3): + /react-native-securerandom@0.1.1(react-native@0.73.0): resolution: {integrity: sha512-CozcCx0lpBLevxiXEb86kwLRalBCHNjiGPlw3P7Fi27U6ZLdfjOCNRHD1LtBKcvPvI3TvkBXB3GOtLvqaYJLGw==} requiresBuild: true peerDependencies: react-native: '*' dependencies: base64-js: 1.5.1 - react-native: 0.72.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9)(react@18.2.0) + react-native: 0.73.0(@babel/core@7.23.6)(@babel/preset-env@7.23.6)(react@18.2.0) dev: false optional: true - /react-native@0.72.3(@babel/core@7.22.9)(@babel/preset-env@7.22.9)(react@18.2.0): - resolution: {integrity: sha512-QqISi+JVmCssNP2FlQ4MWhlc4O/I00MRE1/GClvyZ8h/6kdsyk/sOirkYdZqX3+DrJfI3q+OnyMnsyaXIQ/5tQ==} - engines: {node: '>=16'} + /react-native@0.73.0(@babel/core@7.22.9)(@babel/preset-env@7.23.6)(react@18.2.0): + resolution: {integrity: sha512-ya7wu/L8BeATv2rtXZDToYyD9XuTTDCByi8LvJGr6GKSXcmokkCRMGAiTEZfPkq7+nhVmbasjtoAJDuMRYfudQ==} + engines: {node: '>=18'} hasBin: true peerDependencies: react: 18.2.0 dependencies: - '@jest/create-cache-key-function': 29.6.2 - '@react-native-community/cli': 11.3.5(@babel/core@7.22.9) - '@react-native-community/cli-platform-android': 11.3.5 - '@react-native-community/cli-platform-ios': 11.3.5 - '@react-native/assets-registry': 0.72.0 - '@react-native/codegen': 0.72.6(@babel/preset-env@7.22.9) - '@react-native/gradle-plugin': 0.72.11 - '@react-native/js-polyfills': 0.72.1 - '@react-native/normalize-colors': 0.72.0 - '@react-native/virtualized-lists': 0.72.6(react-native@0.72.3) + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.1.1 + '@react-native-community/cli-platform-android': 12.1.1 + '@react-native-community/cli-platform-ios': 12.1.1 + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.6) + '@react-native/community-cli-plugin': 0.73.10(@babel/core@7.22.9)(@babel/preset-env@7.23.6) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.3(react-native@0.73.0) abort-controller: 3.0.0 anser: 1.4.10 + ansi-regex: 5.0.1 base64-js: 1.5.1 - deprecated-react-native-prop-types: 4.1.0 + deprecated-react-native-prop-types: 5.0.0 event-target-shim: 5.0.1 - flow-enums-runtime: 0.0.5 + flow-enums-runtime: 0.0.6 invariant: 2.2.4 jest-environment-node: 29.7.0 jsc-android: 250231.0.0 memoize-one: 5.2.1 - metro-runtime: 0.76.7 - metro-source-map: 0.76.7 + metro-runtime: 0.80.1 + metro-source-map: 0.80.1 mkdirp: 0.5.6 nullthrows: 1.1.1 pretty-format: 26.6.2 promise: 8.3.0 react: 18.2.0 - react-devtools-core: 4.28.0 - react-refresh: 0.4.3 + react-devtools-core: 4.28.5 + react-refresh: 0.14.0 + react-shallow-renderer: 16.15.0(react@18.2.0) + regenerator-runtime: 0.13.11 + scheduler: 0.24.0-canary-efb381bbf-20230505 + stacktrace-parser: 0.1.10 + whatwg-fetch: 3.6.19 + ws: 6.2.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@babel/core' + - '@babel/preset-env' + - bufferutil + - encoding + - supports-color + - utf-8-validate + dev: false + + /react-native@0.73.0(@babel/core@7.23.6)(@babel/preset-env@7.23.6)(react@18.2.0): + resolution: {integrity: sha512-ya7wu/L8BeATv2rtXZDToYyD9XuTTDCByi8LvJGr6GKSXcmokkCRMGAiTEZfPkq7+nhVmbasjtoAJDuMRYfudQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + react: 18.2.0 + dependencies: + '@jest/create-cache-key-function': 29.7.0 + '@react-native-community/cli': 12.1.1 + '@react-native-community/cli-platform-android': 12.1.1 + '@react-native-community/cli-platform-ios': 12.1.1 + '@react-native/assets-registry': 0.73.1 + '@react-native/codegen': 0.73.2(@babel/preset-env@7.23.6) + '@react-native/community-cli-plugin': 0.73.10(@babel/core@7.23.6)(@babel/preset-env@7.23.6) + '@react-native/gradle-plugin': 0.73.4 + '@react-native/js-polyfills': 0.73.1 + '@react-native/normalize-colors': 0.73.2 + '@react-native/virtualized-lists': 0.73.3(react-native@0.73.0) + abort-controller: 3.0.0 + anser: 1.4.10 + ansi-regex: 5.0.1 + base64-js: 1.5.1 + deprecated-react-native-prop-types: 5.0.0 + event-target-shim: 5.0.1 + flow-enums-runtime: 0.0.6 + invariant: 2.2.4 + jest-environment-node: 29.7.0 + jsc-android: 250231.0.0 + memoize-one: 5.2.1 + metro-runtime: 0.80.1 + metro-source-map: 0.80.1 + mkdirp: 0.5.6 + nullthrows: 1.1.1 + pretty-format: 26.6.2 + promise: 8.3.0 + react: 18.2.0 + react-devtools-core: 4.28.5 + react-refresh: 0.14.0 react-shallow-renderer: 16.15.0(react@18.2.0) regenerator-runtime: 0.13.11 scheduler: 0.24.0-canary-efb381bbf-20230505 stacktrace-parser: 0.1.10 - use-sync-external-store: 1.2.0(react@18.2.0) - whatwg-fetch: 3.6.17 + whatwg-fetch: 3.6.19 ws: 6.2.2 yargs: 17.7.2 transitivePeerDependencies: @@ -22212,12 +24500,18 @@ packages: engines: {node: '>=0.10.0'} dev: true + /react-refresh@0.14.0: + resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==} + engines: {node: '>=0.10.0'} + dev: false + /react-refresh@0.4.3: resolution: {integrity: sha512-Hwln1VNuGl/6bVwnd0Xdn1e84gT/8T9aYNL+HAKDArLCS7LWjwr7StE30IEYbIkx0Vi3vs+coQxe+SQDbGbbpA==} engines: {node: '>=0.10.0'} dev: false + optional: true - /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2): + /react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2): resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -22244,9 +24538,9 @@ packages: css-minimizer-webpack-plugin: 3.4.1(webpack@5.75.0) dotenv: 10.0.0 dotenv-expand: 5.1.0 - eslint: 8.49.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.5)(eslint@8.49.0)(jest@27.5.1)(typescript@5.2.2) - eslint-webpack-plugin: 3.2.0(eslint@8.49.0)(webpack@5.75.0) + eslint: 8.55.0 + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3)(@babel/plugin-transform-react-jsx@7.23.4)(eslint@8.55.0)(jest@27.5.1)(typescript@5.2.2) + eslint-webpack-plugin: 3.2.0(eslint@8.55.0)(webpack@5.75.0) file-loader: 6.2.0(webpack@5.75.0) fs-extra: 10.1.0 html-webpack-plugin: 5.5.0(webpack@5.75.0) @@ -22263,7 +24557,7 @@ packages: prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.49.0)(typescript@5.2.2)(webpack@5.75.0) + react-dev-utils: 12.0.1(eslint@8.55.0)(typescript@5.2.2)(webpack@5.75.0) react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 @@ -22279,7 +24573,7 @@ packages: webpack-manifest-plugin: 4.1.1(webpack@5.75.0) workbox-webpack-plugin: 6.5.4(webpack@5.75.0) optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 transitivePeerDependencies: - '@babel/plugin-syntax-flow' - '@babel/plugin-transform-react-jsx' @@ -22467,7 +24761,7 @@ packages: ast-types: 0.15.2 esprima: 4.0.1 source-map: 0.6.1 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /recursive-readdir@2.2.3: @@ -22509,10 +24803,21 @@ packages: /regenerator-runtime@0.13.11: resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} + /regenerator-runtime@0.14.0: + resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + dev: false + /regenerator-transform@0.15.1: resolution: {integrity: sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==} dependencies: '@babel/runtime': 7.22.3 + dev: true + + /regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + dependencies: + '@babel/runtime': 7.23.6 + dev: false /regex-parser@2.2.11: resolution: {integrity: sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==} @@ -22687,6 +24992,15 @@ packages: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + /resolve@1.22.8: + resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} + hasBin: true + dependencies: + is-core-module: 2.13.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + dev: false + /resolve@1.7.1: resolution: {integrity: sha512-c7rwLofp8g1U+h1KNyHL/jicrKg1Ek4q+Lr33AL65uZTinUZHe30D5HlyN5V9NW0JX1D5dXQ4jqW5l7Sy/kGfw==} dependencies: @@ -22803,7 +25117,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: 2.3.3 dev: true /run-async@2.4.1: @@ -22823,12 +25137,12 @@ packages: /rxjs@7.8.0: resolution: {integrity: sha512-F2+gxDshqmIub1KdvZkaEfGDwLNpPvk9Fs6LD/MyQxNgMds/WH9OdDDXOmxUZpME+iSK3rQCctkL0DYyytUqMg==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 /rxjs@7.8.1: resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} dependencies: - tslib: 2.6.1 + tslib: 2.6.2 /safe-buffer@5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} @@ -22893,6 +25207,12 @@ packages: /sax@1.2.4: resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + dev: true + + /sax@1.3.0: + resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + dev: false + optional: true /saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} @@ -22957,9 +25277,6 @@ packages: ajv-keywords: 5.1.0(ajv@8.12.0) dev: true - /scrypt-js@3.0.1: - resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==} - /secp256k1@4.0.3: resolution: {integrity: sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==} engines: {node: '>=10.0.0'} @@ -22980,18 +25297,18 @@ packages: node-forge: 1.3.1 dev: true - /semantic-release@22.0.0(typescript@5.2.2): + /semantic-release@22.0.0: resolution: {integrity: sha512-WTD8zPxh+pyc/DrTALRHJ47p1XbKqi2AJljn5WkXgLFFIMSax4uu15u4ZEZaa7ftBo8cSajh16VeafgUu9DX8g==} engines: {node: ^18.17 || >=20.6.1} hasBin: true dependencies: - '@semantic-release/commit-analyzer': 11.0.0-beta.4(semantic-release@22.0.0) + '@semantic-release/commit-analyzer': 11.0.0(semantic-release@22.0.0) '@semantic-release/error': 4.0.0 '@semantic-release/github': 9.0.4(semantic-release@22.0.0) '@semantic-release/npm': 11.0.0(semantic-release@22.0.0) - '@semantic-release/release-notes-generator': 12.0.0-beta.3(semantic-release@22.0.0) + '@semantic-release/release-notes-generator': 12.0.0(semantic-release@22.0.0) aggregate-error: 5.0.0 - cosmiconfig: 8.3.5(typescript@5.2.2) + cosmiconfig: 8.2.0 debug: 4.3.4 env-ci: 9.1.1 execa: 8.0.1 @@ -23015,7 +25332,6 @@ packages: yargs: 17.7.2 transitivePeerDependencies: - supports-color - - typescript dev: true /semver-diff@4.0.0: @@ -23788,7 +26104,7 @@ packages: peerDependencies: postcss: ^8.2.15 dependencies: - browserslist: 4.21.10 + browserslist: 4.21.7 postcss: 8.4.21 postcss-selector-parser: 6.0.11 dev: true @@ -23825,7 +26141,6 @@ packages: /superstruct@1.0.3: resolution: {integrity: sha512-8iTn3oSS8nRGn+C2pgXSKPI3jmpm6FExNazNpjvqS6ZUJQCej3PUXEKM8NjHBOs54ExM+LPW/FBRhymrdcCiSg==} engines: {node: '>=14.0.0'} - dev: true /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} @@ -24007,6 +26322,19 @@ packages: mkdirp: 1.0.4 yallist: 4.0.0 + /tar@6.2.0: + resolution: {integrity: sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==} + engines: {node: '>=10'} + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + dev: false + optional: true + /temp-dir@1.0.0: resolution: {integrity: sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==} engines: {node: '>=4'} @@ -24111,13 +26439,13 @@ packages: source-map-support: 0.5.21 dev: true - /terser@5.19.2: - resolution: {integrity: sha512-qC5+dmecKJA4cpYxRa5aVkKehYsQKc+AHeKl0Oe62aYjBL8ZA33tTljktDHJSaxxMnbI5ZYw+o/S2DxxLu8OfA==} + /terser@5.26.0: + resolution: {integrity: sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ==} engines: {node: '>=10'} hasBin: true dependencies: '@jridgewell/source-map': 0.3.5 - acorn: 8.10.0 + acorn: 8.11.2 commander: 2.20.3 source-map-support: 0.5.21 dev: false @@ -24265,7 +26593,7 @@ packages: dev: false optional: true - /ts-jest@29.1.1(@babel/core@7.22.9)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2): + /ts-jest@29.1.1(@babel/core@7.23.6)(babel-jest@29.7.0)(jest@29.7.0)(typescript@5.2.2): resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -24286,11 +26614,11 @@ packages: esbuild: optional: true dependencies: - '@babel/core': 7.22.9 - babel-jest: 29.7.0(@babel/core@7.22.9) + '@babel/core': 7.23.6 + babel-jest: 29.7.0(@babel/core@7.23.6) bs-logger: 0.2.6 fast-json-stable-stringify: 2.1.0 - jest: 29.7.0(@types/node@20.6.2)(ts-node@10.9.1) + jest: 29.7.0(@types/node@20.8.2)(ts-node@10.9.1) jest-util: 29.6.2 json5: 2.2.3 lodash.memoize: 4.1.2 @@ -24328,7 +26656,7 @@ packages: typescript: 5.1.6 dev: true - /ts-node@10.9.1(@types/node@20.6.2)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.8.2)(typescript@5.2.2): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -24347,7 +26675,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.3 - '@types/node': 20.6.2 + '@types/node': 20.8.2 acorn: 8.8.1 acorn-walk: 8.2.0 arg: 4.1.3 @@ -24380,9 +26708,15 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true + /tslib@2.4.0: + resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /tslib@2.6.1: resolution: {integrity: sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==} + /tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + /tsutils@3.21.0(typescript@5.2.2): resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} engines: {node: '>= 6'} @@ -24581,7 +26915,7 @@ packages: reflect-metadata: 0.1.13 sha.js: 2.4.11 sqlite3: 5.1.6 - ts-node: 10.9.1(@types/node@20.6.2)(typescript@5.2.2) + ts-node: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) tslib: 2.6.1 uuid: 9.0.0 yargs: 17.7.2 @@ -24610,21 +26944,11 @@ packages: engines: {node: '>=14.17'} hasBin: true - /ua-parser-js@1.0.35: - resolution: {integrity: sha512-fKnGuqmTBnIE+/KXSzCn4db8RTigUzw1AN0DmdU6hJovUTbYJKyqj+8Mt1c4VfRDnOVJnENmfYkIPZ946UrSAA==} + /ua-parser-js@1.0.37: + resolution: {integrity: sha512-bhTyI94tZofjo+Dn8SN6Zv8nBDvyXTymAdM3LDI/0IboIUwTu1rEhW7v2TfiVsoYWgkQ4kOVqnI8APUFbIQIFQ==} dev: false optional: true - /uglify-es@3.3.9: - resolution: {integrity: sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==} - engines: {node: '>=0.8.0'} - deprecated: support for ECMAScript is superseded by `uglify-js` as of v3.13.0 - hasBin: true - dependencies: - commander: 2.13.0 - source-map: 0.6.1 - dev: false - /uglify-js@3.17.4: resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} engines: {node: '>=0.8.0'} @@ -24632,6 +26956,13 @@ packages: requiresBuild: true optional: true + /uint8arraylist@2.4.3: + resolution: {integrity: sha512-oEVZr4/GrH87K0kjNce6z8pSCzLEPqHNLNR5sj8cJOySrTP8Vb/pMIbZKLJGhQKxm1TiZ31atNrpn820Pyqpow==} + engines: {node: '>=16.0.0', npm: '>=7.0.0'} + dependencies: + uint8arrays: 4.0.6 + dev: false + /uint8arrays@3.1.1: resolution: {integrity: sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg==} dependencies: @@ -24658,6 +26989,9 @@ packages: through: 2.3.8 dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + /unicode-canonical-property-names-ecmascript@2.0.0: resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} engines: {node: '>=4'} @@ -24784,6 +27118,27 @@ packages: picocolors: 1.0.0 dev: true + /update-browserslist-db@1.0.11(browserslist@4.21.7): + resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.21.7 + escalade: 3.1.1 + picocolors: 1.0.0 + dev: true + + /update-browserslist-db@1.0.13(browserslist@4.22.2): + resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + dependencies: + browserslist: 4.22.2 + escalade: 3.1.1 + picocolors: 1.0.0 + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: @@ -24805,13 +27160,9 @@ packages: querystringify: 2.2.0 requires-port: 1.0.0 - /use-sync-external-store@1.2.0(react@18.2.0): - resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - dependencies: - react: 18.2.0 - dev: false + /urlpattern-polyfill@9.0.0: + resolution: {integrity: sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g==} + dev: true /utf-8-validate@5.0.7: resolution: {integrity: sha512-vLt1O5Pp+flcArHGIyKEQq883nBt8nN8tVBcoL0qUXj2XT1n7p70yGIq2VK98I5FdZ1YHc0wk/koOnHjnXWk1Q==} @@ -24934,10 +27285,6 @@ packages: resolution: {integrity: sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow==} dev: false - /varint@6.0.0: - resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} - dev: false - /vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -25042,7 +27389,7 @@ packages: '@peculiar/json-schema': 1.1.12 asn1js: 3.0.5 pvtsutils: 1.3.2 - tslib: 2.6.1 + tslib: 2.6.2 dev: false /webcrypto-shim@0.1.7: @@ -25125,7 +27472,7 @@ packages: spdy: 4.0.2 webpack: 5.75.0 webpack-dev-middleware: 5.3.3(webpack@5.75.0) - ws: 8.13.0 + ws: 8.15.1 transitivePeerDependencies: - bufferutil - debug @@ -25189,7 +27536,7 @@ packages: '@webassemblyjs/wasm-parser': 1.11.1 acorn: 8.10.0 acorn-import-assertions: 1.8.0(acorn@8.10.0) - browserslist: 4.21.10 + browserslist: 4.21.7 chrome-trace-event: 1.0.3 enhanced-resolve: 5.12.0 es-module-lexer: 0.9.3 @@ -25239,8 +27586,8 @@ packages: iconv-lite: 0.6.3 dev: true - /whatwg-fetch@3.6.17: - resolution: {integrity: sha512-c4ghIvG6th0eudYwKZY5keb81wtFz9/WeAHAoy8+r18kcWlitUIrmGFQ2rWEl4UCKUilD3zCLHOIPheHx5ypRQ==} + /whatwg-fetch@3.6.19: + resolution: {integrity: sha512-d67JP4dHSbm2TrpFj8AbO8DnL1JXL5J9u0Kq2xW6d0TFDbCA3Muhdt8orXC22utleTVj7Prqt82baN6RBvnEgw==} dev: false /whatwg-fetch@3.6.2: @@ -25615,8 +27962,8 @@ packages: async-limiter: 1.0.1 dev: false - /ws@7.4.6: - resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==} + /ws@7.5.9: + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -25627,20 +27974,21 @@ packages: utf-8-validate: optional: true - /ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} - engines: {node: '>=8.3.0'} + /ws@8.13.0: + resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true + dev: false - /ws@8.13.0: - resolution: {integrity: sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==} + /ws@8.14.2: + resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -25650,9 +27998,10 @@ packages: optional: true utf-8-validate: optional: true + dev: true - /ws@8.14.1: - resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==} + /ws@8.15.1: + resolution: {integrity: sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -25679,6 +28028,18 @@ packages: utf-8-validate: 5.0.7 dev: true + /ws@8.5.0: + resolution: {integrity: sha512-BWX0SWVgLPzYwF8lTzEy1egjhS4S4OEAHfsO8o65WOVsrnSRGaSiUaa9e0ggGlkMTtBlmOpEXiie9RUcBO86qg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + /xcode@3.0.1: resolution: {integrity: sha512-kCz5k7J7XbJtjABOvkc5lJmkiDh8VhjVCGNiqdKCscmVpdVUpEAyXv1xmCLkQJ5dsHqx3IPO4XW+NTDhU/fatA==} engines: {node: '>=10.0.0'} @@ -25701,7 +28062,7 @@ packages: resolution: {integrity: sha512-eLTh0kA8uHceqesPqSE+VvO1CDDJWMwlQfB6LuN6T8w6MaDJ8Txm8P7s5cHD0miF0V+GGTZrDQfxPZQVsur33w==} engines: {node: '>=4.0.0'} dependencies: - sax: 1.2.4 + sax: 1.3.0 xmlbuilder: 11.0.1 dev: false optional: true @@ -25755,6 +28116,11 @@ packages: engines: {node: '>= 14'} dev: false + /yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + dev: false + /yargs-parser@18.1.3: resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} engines: {node: '>=6'} @@ -25881,15 +28247,15 @@ packages: commander: 10.0.1 dev: false - github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/ab0db52de6f4e6663ef271a48009ba26e688ef9b(expo@49.0.6)(react-native@0.72.3): + github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/ab0db52de6f4e6663ef271a48009ba26e688ef9b(expo@49.0.21)(react-native@0.73.0): resolution: {tarball: https://codeload.github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/tar.gz/ab0db52de6f4e6663ef271a48009ba26e688ef9b} id: github.com/uport-project/EcdsaSecp256k1RecoverySignature2020/ab0db52de6f4e6663ef271a48009ba26e688ef9b name: '@veramo-community/lds-ecdsa-secp256k1-recovery2020' version: 0.0.8 dependencies: '@bitauth/libauth': 1.19.1 - '@digitalcredentials/jsonld': 5.2.2(expo@49.0.6)(react-native@0.72.3) - '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.6)(react-native@0.72.3) + '@digitalcredentials/jsonld': 5.2.2(expo@49.0.21)(react-native@0.73.0) + '@digitalcredentials/jsonld-signatures': 9.3.2(expo@49.0.21)(react-native@0.73.0) '@ethersproject/transactions': 5.7.0 '@trust/keyto': 1.0.1 base64url: 3.0.1