From a7f8df759f1bae954b19ac80c526aa3608551079 Mon Sep 17 00:00:00 2001 From: Jakub Sydor Date: Tue, 1 Mar 2022 12:45:12 +0100 Subject: [PATCH 1/2] feat: verifiable credential poc --- README.md | 42 +- docs/api/README.md | 42 +- docs/api/classes/EkcSigner.md | 19 + docs/api/classes/SignerService.md | 40 +- .../VerifiableCredentialsServiceBase.md | 158 ++ docs/api/enums/ERROR_MESSAGES.md | 7 + .../SignVerifiableCredentialOptions.md | 27 + .../interfaces/SignedVerifiableCredential.md | 99 + docs/api/interfaces/VerifiableCredential.md | 53 + .../VerifyVerifiableCredentialOptions.md | 20 + .../VerifyVerifiableCredentialResults.md | 27 + docs/api/modules.md | 58 +- e2e/claims.service.e2e.ts | 9 +- e2e/fixtures/externalVC.ts | 177 ++ e2e/fixtures/index.ts | 1 + e2e/verifiableCredentials.service.e2e.ts | 142 ++ package-lock.json | 1780 +++++++++-------- package.json | 2 + src/errors/ErrorMessages.ts | 1 + src/index.ts | 1 + src/init.ts | 5 + src/modules/signer/ekcSigner.ts | 7 +- src/modules/signer/signer.service.ts | 40 +- src/modules/signer/signer.types.ts | 5 + src/modules/verifiableCredentials/index.ts | 23 + .../verifiableCredentials.types.ts | 50 + .../verifiableCredentialsBase.service.ts | 136 ++ .../verifiableCredentialsNode.service.ts | 34 + .../verifiableCredentialsWeb.service.ts | 34 + src/utils/updateLegacyIssuers.ts | 12 +- 30 files changed, 2155 insertions(+), 896 deletions(-) create mode 100644 docs/api/classes/VerifiableCredentialsServiceBase.md create mode 100644 docs/api/interfaces/SignVerifiableCredentialOptions.md create mode 100644 docs/api/interfaces/SignedVerifiableCredential.md create mode 100644 docs/api/interfaces/VerifiableCredential.md create mode 100644 docs/api/interfaces/VerifyVerifiableCredentialOptions.md create mode 100644 docs/api/interfaces/VerifyVerifiableCredentialResults.md create mode 100644 e2e/fixtures/externalVC.ts create mode 100644 e2e/fixtures/index.ts create mode 100644 e2e/verifiableCredentials.service.e2e.ts create mode 100644 src/modules/verifiableCredentials/index.ts create mode 100644 src/modules/verifiableCredentials/verifiableCredentials.types.ts create mode 100644 src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts create mode 100644 src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts create mode 100644 src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts diff --git a/README.md b/README.md index 43c90482..44cf3763 100644 --- a/README.md +++ b/README.md @@ -26,11 +26,24 @@ For development purposes, please follow below steps to integrate the library wit ### Prerequisites -`iam-client-lib` is written in TypeScript. Make sure to have Node.js (>= v10) installed. -Create a folder named **_iam-client-lib_** and clone this GIT project. +`iam-client-lib` is written in TypeScript. Make sure to have Node.js (>= v10) installed. Create a folder named **_iam-client-lib_** and clone this GIT project. Also note that having a DID document with a public key is a prerequisite for using iam-client-lib and during initialization the library with attempt to add a public key to the DID document if one doesn't exist. This addition of the public key requires the account to be funded. +`iam-client-lib` has a WebAssembly dependency. Some bundlers/frameworks doesn't support it out of the box, so some action are required. Here is a list of known problems: + +- **Angular** - you'll have to add following in you `package.json` + +``` +"browser": { + "fs": false, + "os": false, + "path": false + } +``` + +- **React** - you'll have to add a `wasm-loader` for the files with `.wasm` extension to your Webpack configuration. To edit Webpack config you can use [@craco/craco](https://www.npmjs.com/package/@craco/craco) or [react-app-rewired](https://www.npmjs.com/package/react-app-rewired). + ### Install Latest stable version @@ -49,8 +62,7 @@ Some library dependencies require Node.js built-ins. Therefore when library is u ### Initialization -Because of dependencies between modules they should be initialized in right order. -This is achieved by accessing module initializer from initialization function of required module. +Because of dependencies between modules they should be initialized in right order. This is achieved by accessing module initializer from initialization function of required module. 1. Initializing signer service. It will initialize staking and messaging services and allow to connect to cache server @@ -68,11 +80,11 @@ This is achieved by accessing module initializer from initialization function of // IAM has builtin default settings for VOLTA CHAIN, which can overriden // 1111 is an example of another ChainID (https://chainlist.org/) setChainConfig(1111, { - didContractAddress: '0x3e2fb24edc3536d655720280b427c91bcb55f3d6', - ensRegistryAddress: '0xa372d665f83197a63bbe633ebe19c7bfd4943003', - ensResolverAddress: '0xe878bdcf5148307378043bfd2b584909aa48a227', - rpcUrl: 'http://some-rpc.com', -}) + didContractAddress: '0x3e2fb24edc3536d655720280b427c91bcb55f3d6', + ensRegistryAddress: '0xa372d665f83197a63bbe633ebe19c7bfd4943003', + ensResolverAddress: '0xe878bdcf5148307378043bfd2b584909aa48a227', + rpcUrl: 'http://some-rpc.com', +}); setMessagingConfig(1111, { messagingMethod: MessagingMethod.Nats, @@ -84,20 +96,14 @@ setCacheConfig(1111, { cacheServerSupportsAuth: true, }) -const { - cacheClient, - domainsService, - connectToDidRegistry -} = await connectToCacheServer() +const { cacheClient, domainsService, connectToDidRegistry } = + await connectToCacheServer(); ``` 3. Connecting to DID registry. ```js -const { - didRegistry, - claimsService -} = await connectToDidRegistry() +const { didRegistry, claimsService } = await connectToDidRegistry(); ``` ## Development diff --git a/docs/api/README.md b/docs/api/README.md index bb74cf21..db4d5729 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -26,11 +26,24 @@ For development purposes, please follow below steps to integrate the library wit ### Prerequisites -`iam-client-lib` is written in TypeScript. Make sure to have Node.js (>= v10) installed. -Create a folder named **_iam-client-lib_** and clone this GIT project. +`iam-client-lib` is written in TypeScript. Make sure to have Node.js (>= v10) installed. Create a folder named **_iam-client-lib_** and clone this GIT project. Also note that having a DID document with a public key is a prerequisite for using iam-client-lib and during initialization the library with attempt to add a public key to the DID document if one doesn't exist. This addition of the public key requires the account to be funded. +`iam-client-lib` has a WebAssembly dependency. Some bundlers/frameworks doesn't support it out of the box, so some action are required. Here is a list of known problems: + +- **Angular** - you'll have to add following in you `package.json` + +``` +"browser": { + "fs": false, + "os": false, + "path": false + } +``` + +- **React** - you'll have to add a `wasm-loader` for the files with `.wasm` extension to your Webpack configuration. To edit Webpack config you can use [@craco/craco](https://www.npmjs.com/package/@craco/craco) or [react-app-rewired](https://www.npmjs.com/package/react-app-rewired). + ### Install Latest stable version @@ -47,8 +60,7 @@ npm i iam-client-lib@canary ### Initialization -Because of dependencies between modules they should be initialized in right order. -This is achieved by accessing module initializer from initialization function of required module. +Because of dependencies between modules they should be initialized in right order. This is achieved by accessing module initializer from initialization function of required module. 1. Initializing signer service. It will initialize staking and messaging services and allow to connect to cache server @@ -66,11 +78,11 @@ This is achieved by accessing module initializer from initialization function of // IAM has builtin default settings for VOLTA CHAIN, which can overriden // 1111 is an example of another ChainID (https://chainlist.org/) setChainConfig(1111, { - didContractAddress: '0x3e2fb24edc3536d655720280b427c91bcb55f3d6', - ensRegistryAddress: '0xa372d665f83197a63bbe633ebe19c7bfd4943003', - ensResolverAddress: '0xe878bdcf5148307378043bfd2b584909aa48a227', - rpcUrl: 'http://some-rpc.com', -}) + didContractAddress: '0x3e2fb24edc3536d655720280b427c91bcb55f3d6', + ensRegistryAddress: '0xa372d665f83197a63bbe633ebe19c7bfd4943003', + ensResolverAddress: '0xe878bdcf5148307378043bfd2b584909aa48a227', + rpcUrl: 'http://some-rpc.com', +}); setMessagingConfig(1111, { messagingMethod: MessagingMethod.Nats, @@ -82,20 +94,14 @@ setCacheConfig(1111, { cacheServerSupportsAuth: true, }) -const { - cacheClient, - domainsService, - connectToDidRegistry -} = await connectToCacheServer() +const { cacheClient, domainsService, connectToDidRegistry } = + await connectToCacheServer(); ``` 3. Connecting to DID registry. ```js -const { - didRegistry, - claimsService -} = await connectToDidRegistry() +const { didRegistry, claimsService } = await connectToDidRegistry(); ``` ## Development diff --git a/docs/api/classes/EkcSigner.md b/docs/api/classes/EkcSigner.md index b892f869..a58b7586 100644 --- a/docs/api/classes/EkcSigner.md +++ b/docs/api/classes/EkcSigner.md @@ -6,6 +6,10 @@ ↳ **`EkcSigner`** +## Implements + +- `TypedDataSigner` + ## Table of contents ### Constructors @@ -19,6 +23,7 @@ ### Methods +- [\_signTypedData](EkcSigner.md#_signtypeddata) - [connect](EkcSigner.md#connect) - [getAddress](EkcSigner.md#getaddress) - [signMessage](EkcSigner.md#signmessage) @@ -59,6 +64,20 @@ Signer.provider ## Methods +### \_signTypedData + +▸ **_signTypedData**(): `Promise`<`string`\> + +#### Returns + +`Promise`<`string`\> + +#### Implementation of + +TypedDataSigner.\_signTypedData + +___ + ### connect ▸ **connect**(`provider`): `Signer` diff --git a/docs/api/classes/SignerService.md b/docs/api/classes/SignerService.md index 6af9bb75..71967f78 100644 --- a/docs/api/classes/SignerService.md +++ b/docs/api/classes/SignerService.md @@ -12,6 +12,7 @@ - [address](SignerService.md#address) - [chainId](SignerService.md#chainid) - [did](SignerService.md#did) +- [didHex](SignerService.md#didhex) - [isEthSigner](SignerService.md#isethsigner) - [provider](SignerService.md#provider) - [providerType](SignerService.md#providertype) @@ -33,6 +34,7 @@ - [publicKeyAndIdentityToken](SignerService.md#publickeyandidentitytoken) - [send](SignerService.md#send) - [signMessage](SignerService.md#signmessage) +- [signTypedData](SignerService.md#signtypeddata) ## Constructors @@ -44,7 +46,7 @@ | Name | Type | | :------ | :------ | -| `_signer` | `Required`<`Signer`\> | +| `_signer` | `Required`<[`SignerT`](../modules.md#signert)\> | | `_providerType` | [`ProviderType`](../enums/ProviderType.md) | ## Accessors @@ -89,6 +91,16 @@ ___ ___ +### didHex + +• `get` **didHex**(): `string` + +#### Returns + +`string` + +___ + ### isEthSigner • `get` **isEthSigner**(): `boolean` @@ -121,11 +133,11 @@ ___ ### signer -• `get` **signer**(): `Required`<`Signer`\> +• `get` **signer**(): `Required`<[`SignerT`](../modules.md#signert)\> #### Returns -`Required`<`Signer`\> +`Required`<[`SignerT`](../modules.md#signert)\> ## Methods @@ -188,7 +200,7 @@ ___ | Name | Type | | :------ | :------ | -| `signer` | `Required`<`Signer`\> | +| `signer` | `Required`<[`SignerT`](../modules.md#signert)\> | | `providerType` | [`ProviderType`](../enums/ProviderType.md) | #### Returns @@ -325,3 +337,23 @@ When running in browser `isEthSigner` variable should be stored in local storage #### Returns `Promise`<`string`\> + +___ + +### signTypedData + +▸ **signTypedData**(`domain`, `types`, `message`): `Promise`<`string`\> + +**`description`** Tries to create conformant signature (https://eips.ethereum.org/EIPS/eip-712) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `domain` | `TypedDataDomain` | +| `types` | `Record`<`string`, `TypedDataField`[]\> | +| `message` | `Record`<`string`, `unknown`\> | + +#### Returns + +`Promise`<`string`\> diff --git a/docs/api/classes/VerifiableCredentialsServiceBase.md b/docs/api/classes/VerifiableCredentialsServiceBase.md new file mode 100644 index 00000000..09b5e031 --- /dev/null +++ b/docs/api/classes/VerifiableCredentialsServiceBase.md @@ -0,0 +1,158 @@ +# Class: VerifiableCredentialsServiceBase + +## Table of contents + +### Constructors + +- [constructor](VerifiableCredentialsServiceBase.md#constructor) + +### Properties + +- [completeIssueCredential](VerifiableCredentialsServiceBase.md#completeissuecredential) +- [prepareIssueCredential](VerifiableCredentialsServiceBase.md#prepareissuecredential) +- [verifyCredential](VerifiableCredentialsServiceBase.md#verifycredential) + +### Methods + +- [signVerifiableCredential](VerifiableCredentialsServiceBase.md#signverifiablecredential) +- [verifyVerifiableCredential](VerifiableCredentialsServiceBase.md#verifyverifiablecredential) +- [create](VerifiableCredentialsServiceBase.md#create) + +## Constructors + +### constructor + +• **new VerifiableCredentialsServiceBase**(`_signerService`) + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `_signerService` | [`SignerService`](SignerService.md) | + +## Properties + +### completeIssueCredential + +• `Abstract` **completeIssueCredential**: (`credential`: `string`, `preparation`: `string`, `signature`: `string`) => `Promise`<`string`\> + +#### Type declaration + +▸ (`credential`, `preparation`, `signature`): `Promise`<`string`\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `credential` | `string` | +| `preparation` | `string` | +| `signature` | `string` | + +##### Returns + +`Promise`<`string`\> + +___ + +### prepareIssueCredential + +• `Abstract` **prepareIssueCredential**: (`credential`: `string`, `linked_data_proof_options`: `string`, `public_key`: `string`) => `Promise`<`string`\> + +#### Type declaration + +▸ (`credential`, `linked_data_proof_options`, `public_key`): `Promise`<`string`\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `credential` | `string` | +| `linked_data_proof_options` | `string` | +| `public_key` | `string` | + +##### Returns + +`Promise`<`string`\> + +___ + +### verifyCredential + +• `Abstract` **verifyCredential**: (`vc`: `string`, `proof_options`: `string`) => `Promise`<`string`\> + +#### Type declaration + +▸ (`vc`, `proof_options`): `Promise`<`string`\> + +##### Parameters + +| Name | Type | +| :------ | :------ | +| `vc` | `string` | +| `proof_options` | `string` | + +##### Returns + +`Promise`<`string`\> + +## Methods + +### signVerifiableCredential + +▸ **signVerifiableCredential**<`T`\>(`credential`, `options?`): `Promise`<[`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\>\> + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `credential` | [`VerifiableCredential`](../interfaces/VerifiableCredential.md)<`T`\> | +| `options?` | [`SignVerifiableCredentialOptions`](../interfaces/SignVerifiableCredentialOptions.md) | + +#### Returns + +`Promise`<[`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\>\> + +___ + +### verifyVerifiableCredential + +▸ **verifyVerifiableCredential**<`T`\>(`vc`, `options?`): `Promise`<`boolean`\> + +#### Type parameters + +| Name | +| :------ | +| `T` | + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `vc` | [`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\> | +| `options?` | [`VerifyVerifiableCredentialOptions`](../interfaces/VerifyVerifiableCredentialOptions.md) | + +#### Returns + +`Promise`<`boolean`\> + +___ + +### create + +▸ `Static` **create**(`signerService`): `Promise`<[`VerifiableCredentialsServiceBase`](VerifiableCredentialsServiceBase.md)\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `signerService` | [`SignerService`](SignerService.md) | + +#### Returns + +`Promise`<[`VerifiableCredentialsServiceBase`](VerifiableCredentialsServiceBase.md)\> diff --git a/docs/api/enums/ERROR_MESSAGES.md b/docs/api/enums/ERROR_MESSAGES.md index 81c6934f..560fabd4 100644 --- a/docs/api/enums/ERROR_MESSAGES.md +++ b/docs/api/enums/ERROR_MESSAGES.md @@ -25,6 +25,7 @@ - [PUBLISH\_NOT\_ISSUED\_CLAIM](ERROR_MESSAGES.md#publish_not_issued_claim) - [ROLE\_NOT\_EXISTS](ERROR_MESSAGES.md#role_not_exists) - [ROLE\_PREREQUISITES\_NOT\_MET](ERROR_MESSAGES.md#role_prerequisites_not_met) +- [SIGN\_TYPED\_DATA\_NOT\_SUPPORTED](ERROR_MESSAGES.md#sign_typed_data_not_supported) - [STAKE\_WAS\_NOT\_PUT](ERROR_MESSAGES.md#stake_was_not_put) - [TOKEN\_REQUIRED\_FOR\_OFF\_CHAIN\_REGISTRATION](ERROR_MESSAGES.md#token_required_for_off_chain_registration) - [UNKNOWN\_PROVIDER](ERROR_MESSAGES.md#unknown_provider) @@ -159,6 +160,12 @@ ___ ___ +### SIGN\_TYPED\_DATA\_NOT\_SUPPORTED + +• **SIGN\_TYPED\_DATA\_NOT\_SUPPORTED** = `"Sign typed data not supported"` + +___ + ### STAKE\_WAS\_NOT\_PUT • **STAKE\_WAS\_NOT\_PUT** = `"Stake was not put"` diff --git a/docs/api/interfaces/SignVerifiableCredentialOptions.md b/docs/api/interfaces/SignVerifiableCredentialOptions.md new file mode 100644 index 00000000..43f17e86 --- /dev/null +++ b/docs/api/interfaces/SignVerifiableCredentialOptions.md @@ -0,0 +1,27 @@ +# Interface: SignVerifiableCredentialOptions + +## Table of contents + +### Properties + +- [domain](SignVerifiableCredentialOptions.md#domain) +- [proofPurpose](SignVerifiableCredentialOptions.md#proofpurpose) +- [verificationMethod](SignVerifiableCredentialOptions.md#verificationmethod) + +## Properties + +### domain + +• `Optional` **domain**: `Partial`<`TypedDataDomain`\> + +___ + +### proofPurpose + +• `Optional` **proofPurpose**: `string` + +___ + +### verificationMethod + +• `Optional` **verificationMethod**: `string` diff --git a/docs/api/interfaces/SignedVerifiableCredential.md b/docs/api/interfaces/SignedVerifiableCredential.md new file mode 100644 index 00000000..2b11a19d --- /dev/null +++ b/docs/api/interfaces/SignedVerifiableCredential.md @@ -0,0 +1,99 @@ +# Interface: SignedVerifiableCredential + +## Type parameters + +| Name | +| :------ | +| `T` | + +## Hierarchy + +- [`VerifiableCredential`](VerifiableCredential.md)<`T`\> + + ↳ **`SignedVerifiableCredential`** + +## Table of contents + +### Properties + +- [@context](SignedVerifiableCredential.md#@context) +- [credentialSubject](SignedVerifiableCredential.md#credentialsubject) +- [id](SignedVerifiableCredential.md#id) +- [issuer](SignedVerifiableCredential.md#issuer) +- [proof](SignedVerifiableCredential.md#proof) +- [type](SignedVerifiableCredential.md#type) + +## Properties + +### @context + +• **@context**: `string` \| `string`[] + +#### Inherited from + +[VerifiableCredential](VerifiableCredential.md).[@context](VerifiableCredential.md#@context) + +___ + +### credentialSubject + +• **credentialSubject**: `T` + +#### Inherited from + +[VerifiableCredential](VerifiableCredential.md).[credentialSubject](VerifiableCredential.md#credentialsubject) + +___ + +### id + +• `Optional` **id**: `string` + +#### Inherited from + +[VerifiableCredential](VerifiableCredential.md).[id](VerifiableCredential.md#id) + +___ + +### issuer + +• **issuer**: `string` + +#### Inherited from + +[VerifiableCredential](VerifiableCredential.md).[issuer](VerifiableCredential.md#issuer) + +___ + +### proof + +• **proof**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `@context` | `string` \| `string`[] | +| `created` | `string` | +| `eip712Domain` | { `domain`: `TypedDataDomain` ; `messageSchema`: { `CredentialSubject`: `TypedDataField`[] ; `EIP712Domain`: `TypedDataField`[] ; `Proof`: `TypedDataField`[] ; `VerifiableCredential`: `TypedDataField`[] } ; `primaryType`: `string` } | +| `eip712Domain.domain` | `TypedDataDomain` | +| `eip712Domain.messageSchema` | { `CredentialSubject`: `TypedDataField`[] ; `EIP712Domain`: `TypedDataField`[] ; `Proof`: `TypedDataField`[] ; `VerifiableCredential`: `TypedDataField`[] } | +| `eip712Domain.messageSchema.CredentialSubject` | `TypedDataField`[] | +| `eip712Domain.messageSchema.EIP712Domain` | `TypedDataField`[] | +| `eip712Domain.messageSchema.Proof` | `TypedDataField`[] | +| `eip712Domain.messageSchema.VerifiableCredential` | `TypedDataField`[] | +| `eip712Domain.primaryType` | `string` | +| `proofPurpose` | `string` | +| `proofValue` | `string` | +| `type` | `string` | +| `verificationMethod` | `string` | + +___ + +### type + +• **type**: `string`[] + +#### Inherited from + +[VerifiableCredential](VerifiableCredential.md).[type](VerifiableCredential.md#type) diff --git a/docs/api/interfaces/VerifiableCredential.md b/docs/api/interfaces/VerifiableCredential.md new file mode 100644 index 00000000..6566ccf8 --- /dev/null +++ b/docs/api/interfaces/VerifiableCredential.md @@ -0,0 +1,53 @@ +# Interface: VerifiableCredential + +## Type parameters + +| Name | +| :------ | +| `T` | + +## Hierarchy + +- **`VerifiableCredential`** + + ↳ [`SignedVerifiableCredential`](SignedVerifiableCredential.md) + +## Table of contents + +### Properties + +- [@context](VerifiableCredential.md#@context) +- [credentialSubject](VerifiableCredential.md#credentialsubject) +- [id](VerifiableCredential.md#id) +- [issuer](VerifiableCredential.md#issuer) +- [type](VerifiableCredential.md#type) + +## Properties + +### @context + +• **@context**: `string` \| `string`[] + +___ + +### credentialSubject + +• **credentialSubject**: `T` + +___ + +### id + +• `Optional` **id**: `string` + +___ + +### issuer + +• **issuer**: `string` + +___ + +### type + +• **type**: `string`[] diff --git a/docs/api/interfaces/VerifyVerifiableCredentialOptions.md b/docs/api/interfaces/VerifyVerifiableCredentialOptions.md new file mode 100644 index 00000000..fecc4b11 --- /dev/null +++ b/docs/api/interfaces/VerifyVerifiableCredentialOptions.md @@ -0,0 +1,20 @@ +# Interface: VerifyVerifiableCredentialOptions + +## Table of contents + +### Properties + +- [proofPurpose](VerifyVerifiableCredentialOptions.md#proofpurpose) +- [verificationMethod](VerifyVerifiableCredentialOptions.md#verificationmethod) + +## Properties + +### proofPurpose + +• `Optional` **proofPurpose**: `string` + +___ + +### verificationMethod + +• `Optional` **verificationMethod**: `string` diff --git a/docs/api/interfaces/VerifyVerifiableCredentialResults.md b/docs/api/interfaces/VerifyVerifiableCredentialResults.md new file mode 100644 index 00000000..3954a7a6 --- /dev/null +++ b/docs/api/interfaces/VerifyVerifiableCredentialResults.md @@ -0,0 +1,27 @@ +# Interface: VerifyVerifiableCredentialResults + +## Table of contents + +### Properties + +- [checks](VerifyVerifiableCredentialResults.md#checks) +- [errors](VerifyVerifiableCredentialResults.md#errors) +- [warnings](VerifyVerifiableCredentialResults.md#warnings) + +## Properties + +### checks + +• **checks**: `string`[] + +___ + +### errors + +• **errors**: `string`[] + +___ + +### warnings + +• **warnings**: `string`[] diff --git a/docs/api/modules.md b/docs/api/modules.md index 8215845b..f2849689 100644 --- a/docs/api/modules.md +++ b/docs/api/modules.md @@ -35,6 +35,7 @@ - [SignerService](classes/SignerService.md) - [StakingFactoryService](classes/StakingFactoryService.md) - [StakingPoolService](classes/StakingPoolService.md) +- [VerifiableCredentialsServiceBase](classes/VerifiableCredentialsServiceBase.md) ### Interfaces @@ -57,6 +58,11 @@ - [IRole](interfaces/IRole.md) - [MessagingConfig](interfaces/MessagingConfig.md) - [Profile](interfaces/Profile.md) +- [SignVerifiableCredentialOptions](interfaces/SignVerifiableCredentialOptions.md) +- [SignedVerifiableCredential](interfaces/SignedVerifiableCredential.md) +- [VerifiableCredential](interfaces/VerifiableCredential.md) +- [VerifyVerifiableCredentialOptions](interfaces/VerifyVerifiableCredentialOptions.md) +- [VerifyVerifiableCredentialResults](interfaces/VerifyVerifiableCredentialResults.md) ### Type aliases @@ -69,6 +75,7 @@ - [RequestClaim](modules.md#requestclaim) - [Service](modules.md#service) - [ServiceInitializer](modules.md#serviceinitializer) +- [SignerT](modules.md#signert) - [Stake](modules.md#stake) ### Variables @@ -104,6 +111,7 @@ - [fromPrivateKey](modules.md#fromprivatekey) - [fromWalletConnectMetamask](modules.md#fromwalletconnectmetamask) - [getMessagingConfig](modules.md#getmessagingconfig) +- [getVerifiableCredentialsService](modules.md#getverifiablecredentialsservice) - [init](modules.md#init) - [initWithEKC](modules.md#initwithekc) - [initWithGnosis](modules.md#initwithgnosis) @@ -236,6 +244,12 @@ ___ ___ +### SignerT + +Ƭ **SignerT**: `Signer` & `TypedDataSigner` + +___ + ### Stake Ƭ **Stake**: `Object` @@ -531,9 +545,25 @@ ___ ___ +### getVerifiableCredentialsService + +▸ **getVerifiableCredentialsService**(`signerService`): `Promise`<[`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md)\> + +#### Parameters + +| Name | Type | +| :------ | :------ | +| `signerService` | [`SignerService`](classes/SignerService.md) | + +#### Returns + +`Promise`<[`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md)\> + +___ + ### init -▸ **init**(`signerService`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **init**(`signerService`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Parameters @@ -543,13 +573,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ ### initWithEKC -▸ **initWithEKC**(`proxyUrl?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithEKC**(`proxyUrl?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Parameters @@ -559,13 +589,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ ### initWithGnosis -▸ **initWithGnosis**(`safeAppSdk`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithGnosis**(`safeAppSdk`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Parameters @@ -575,13 +605,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ ### initWithKms -▸ **initWithKms**(`__namedParameters?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithKms**(`__namedParameters?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Parameters @@ -593,23 +623,23 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ ### initWithMetamask -▸ **initWithMetamask**(): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithMetamask**(): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ ### initWithPrivateKeySigner -▸ **initWithPrivateKeySigner**(`privateKey`, `rpcUrl`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithPrivateKeySigner**(`privateKey`, `rpcUrl`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Parameters @@ -620,13 +650,13 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ ### initWithWalletConnect -▸ **initWithWalletConnect**(`bridge?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +▸ **initWithWalletConnect**(`bridge?`): `Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> #### Parameters @@ -636,7 +666,7 @@ ___ #### Returns -`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) }\> +`Promise`<{ `connectToCacheServer`: () => `Promise`<{ `assetsService`: [`AssetsService`](classes/AssetsService.md) ; `cacheClient`: [`CacheClient`](classes/CacheClient.md) ; `connectToDidRegistry`: (`ipfsStore?`: `string`) => `Promise`<{ `claimsService`: [`ClaimsService`](classes/ClaimsService.md) ; `didRegistry`: [`DidRegistry`](classes/DidRegistry.md) }\> ; `domainsService`: [`DomainsService`](classes/DomainsService.md) ; `stakingPoolService`: ``null`` \| [`StakingFactoryService`](classes/StakingFactoryService.md) }\> ; `messagingService`: [`MessagingService`](classes/MessagingService.md) ; `signerService`: [`SignerService`](classes/SignerService.md) ; `verifiableCredentialsService`: [`VerifiableCredentialsServiceBase`](classes/VerifiableCredentialsServiceBase.md) }\> ___ diff --git a/e2e/claims.service.e2e.ts b/e2e/claims.service.e2e.ts index eb5b4ed9..dde525f1 100644 --- a/e2e/claims.service.e2e.ts +++ b/e2e/claims.service.e2e.ts @@ -2,7 +2,7 @@ import { IRoleDefinition, PreconditionType } from '@energyweb/credential-governa import { Methods, Chain } from '@ew-did-registry/did'; import { addressOf } from '@ew-did-registry/did-ethr-resolver'; import { KeyTags } from '@ew-did-registry/did-resolver-interface'; -import { ethers, providers, utils, Wallet } from 'ethers'; +import { providers, utils, Wallet } from 'ethers'; import { AssetsService, ClaimsService, @@ -16,6 +16,7 @@ import { DidRegistry, MessagingService, IClaimIssuance, + SignerT, } from '../src'; import { replenish, root, rpcUrl, setupENS } from './utils/setup_contracts'; import { ClaimManager__factory } from '../ethers/factories/ClaimManager__factory'; @@ -163,8 +164,8 @@ describe('Enrollment claim tests', () => { describe('Enrollment tests', () => { async function enrolAndIssue( - requestSigner: Required, - issueSigner: Required, + requestSigner: Required, + issueSigner: Required, { subjectDID, claimType, @@ -237,7 +238,7 @@ describe('Enrollment claim tests', () => { } async function issueWithoutRequest( - issueSigner: Required, + issueSigner: Required, { subjectDID, claimType, diff --git a/e2e/fixtures/externalVC.ts b/e2e/fixtures/externalVC.ts new file mode 100644 index 00000000..5aec1220 --- /dev/null +++ b/e2e/fixtures/externalVC.ts @@ -0,0 +1,177 @@ +// Source: https://github.com/spruceid/ssi/blob/3745b7dfdd18e1b27c6135f8036470efde596f35/did-pkh/tests/vc-eth-eip712sig.jsonld + +export const validExampleExternalVC = { + '@context': ['https://www.w3.org/2018/credentials/v1'], + type: ['VerifiableCredential'], + credentialSubject: { + id: 'did:example:foo', + }, + issuer: 'did:pkh:eth:0x2fbf1be19d90a29aea9363f4ef0b6bf1c4ff0758', + issuanceDate: '2021-03-18T16:38:25Z', + proof: { + '@context': 'https://demo.spruceid.com/ld/eip712sig-2021/v0.1.jsonld', + type: 'EthereumEip712Signature2021', + proofPurpose: 'assertionMethod', + proofValue: + '0x9abee96d684a146aa0b30498d8799ee9a4f8f54488c73d4a4fba3a6fb94eca8764af54f15a24deba0dd9ee2f460d1f6bd174a4ca7504a72d6b1fe9b739d613fe1b', + verificationMethod: + 'did:pkh:eth:0x2fbf1be19d90a29aea9363f4ef0b6bf1c4ff0758#Recovery2020', + created: '2021-06-17T17:16:39.791Z', + eip712Domain: { + domain: { + name: 'EthereumEip712Signature2021', + }, + messageSchema: { + CredentialSubject: [ + { + name: 'id', + type: 'string', + }, + ], + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + ], + Proof: [ + { + name: '@context', + type: 'string', + }, + { + name: 'verificationMethod', + type: 'string', + }, + { + name: 'created', + type: 'string', + }, + { + name: 'proofPurpose', + type: 'string', + }, + { + name: 'type', + type: 'string', + }, + ], + VerifiableCredential: [ + { + name: '@context', + type: 'string[]', + }, + { + name: 'type', + type: 'string[]', + }, + { + name: 'issuer', + type: 'string', + }, + { + name: 'issuanceDate', + type: 'string', + }, + { + name: 'credentialSubject', + type: 'CredentialSubject', + }, + { + name: 'proof', + type: 'Proof', + }, + ], + }, + primaryType: 'VerifiableCredential', + }, + }, +}; + +export const invalidExampleExternalVC = { + '@context': ['https://www.w3.org/2018/credentials/v1'], + type: ['VerifiableCredential'], + credentialSubject: { + id: 'did:example:wrong', + }, + issuer: 'did:pkh:eth:0x2fbf1be19d90a29aea9363f4ef0b6bf1c4ff0758', + issuanceDate: '2021-03-18T16:38:25Z', + proof: { + '@context': 'https://demo.spruceid.com/ld/eip712sig-2021/v0.1.jsonld', + type: 'EthereumEip712Signature2021', + proofPurpose: 'assertionMethod', + proofValue: + '0x9abee96d684a146aa0b30498d8799ee9a4f8f54488c73d4a4fba3a6fb94eca8764af54f15a24deba0dd9ee2f460d1f6bd174a4ca7504a72d6b1fe9b739d613fe1b', + verificationMethod: + 'did:pkh:eth:0x2fbf1be19d90a29aea9363f4ef0b6bf1c4ff0758#Recovery2020', + created: '2021-06-17T17:16:39.791Z', + eip712Domain: { + domain: { + name: 'EthereumEip712Signature2021', + }, + messageSchema: { + CredentialSubject: [ + { + name: 'id', + type: 'string', + }, + ], + EIP712Domain: [ + { + name: 'name', + type: 'string', + }, + ], + Proof: [ + { + name: '@context', + type: 'string', + }, + { + name: 'verificationMethod', + type: 'string', + }, + { + name: 'created', + type: 'string', + }, + { + name: 'proofPurpose', + type: 'string', + }, + { + name: 'type', + type: 'string', + }, + ], + VerifiableCredential: [ + { + name: '@context', + type: 'string[]', + }, + { + name: 'type', + type: 'string[]', + }, + { + name: 'issuer', + type: 'string', + }, + { + name: 'issuanceDate', + type: 'string', + }, + { + name: 'credentialSubject', + type: 'CredentialSubject', + }, + { + name: 'proof', + type: 'Proof', + }, + ], + }, + primaryType: 'VerifiableCredential', + }, + }, +}; diff --git a/e2e/fixtures/index.ts b/e2e/fixtures/index.ts new file mode 100644 index 00000000..3b0acf53 --- /dev/null +++ b/e2e/fixtures/index.ts @@ -0,0 +1 @@ +export * from './externalVC'; diff --git a/e2e/verifiableCredentials.service.e2e.ts b/e2e/verifiableCredentials.service.e2e.ts new file mode 100644 index 00000000..6400ef8a --- /dev/null +++ b/e2e/verifiableCredentials.service.e2e.ts @@ -0,0 +1,142 @@ +import { Wallet } from 'ethers'; +import { v4 as uuid } from 'uuid'; +import { invalidExampleExternalVC, validExampleExternalVC } from './fixtures'; +import { replenish, rpcUrl, setupENS } from './utils/setup_contracts'; +import { fromPrivateKey } from '../src'; +import { + getVerifiableCredentialsService, + VerifiableCredentialsServiceBase, +} from '../src/modules/verifiableCredentials'; + +describe('Verifiable credentials tests', () => { + let verifiableCredentialsService: VerifiableCredentialsServiceBase; + let rootOwnerDid: string; + const rootOwnerWallet = Wallet.createRandom(); + const rootOwnerAddress = rootOwnerWallet.address; + + beforeEach(async () => { + jest.clearAllMocks(); + await replenish(rootOwnerAddress); + await setupENS(rootOwnerAddress); + const signerService = await fromPrivateKey( + rootOwnerWallet.privateKey, + rpcUrl + ); + + await signerService.publicKeyAndIdentityToken(); + + rootOwnerDid = signerService.didHex; + verifiableCredentialsService = await getVerifiableCredentialsService( + signerService + ); + }); + + test('should create a VC proof', async () => { + const credential = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://tzprofiles.com/2021/ethereum-address-control-v1.jsonld', + ], + id: 'urn:uuid:' + uuid(), + issuer: rootOwnerDid, + issuanceDate: new Date().toISOString(), + type: ['VerifiableCredential', 'EthereumAddressControl'], + credentialSubject: { + address: rootOwnerAddress, + sameAs: rootOwnerDid, + }, + }; + + const vc = await verifiableCredentialsService.signVerifiableCredential( + credential + ); + + expect(vc).toBeDefined(); + expect(vc.proof).toStrictEqual( + expect.objectContaining({ + '@context': 'https://w3id.org/security/suites/eip712sig-2021/v1', + type: 'EthereumEip712Signature2021', + proofPurpose: 'assertionMethod', + proofValue: expect.any(String), + verificationMethod: `${rootOwnerDid}#controller`, + created: expect.any(String), + eip712Domain: expect.anything(), + }) + ); + }); + + test('should verify a valid VC', async () => { + const credential = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://tzprofiles.com/2021/ethereum-address-control-v1.jsonld', + ], + id: 'urn:uuid:' + uuid(), + issuer: rootOwnerDid, + issuanceDate: new Date().toISOString(), + type: ['VerifiableCredential', 'EthereumAddressControl'], + credentialSubject: { + address: rootOwnerAddress, + sameAs: rootOwnerDid, + }, + }; + + const vc = await verifiableCredentialsService.signVerifiableCredential( + credential + ); + + expect(vc).toBeDefined(); + + await verifiableCredentialsService.verifyVerifiableCredential(vc); + }); + + test('should throw an error for invalid VC during verification', async () => { + const credential = { + '@context': [ + 'https://www.w3.org/2018/credentials/v1', + 'https://tzprofiles.com/2021/ethereum-address-control-v1.jsonld', + ], + id: 'urn:uuid:' + uuid(), + issuer: rootOwnerDid, + issuanceDate: new Date().toISOString(), + type: ['VerifiableCredential', 'EthereumAddressControl'], + credentialSubject: { + address: rootOwnerAddress, + sameAs: rootOwnerDid, + }, + }; + + const vc = await verifiableCredentialsService.signVerifiableCredential( + credential + ); + + vc.id = 'urn:uuid:' + uuid(); + + expect(vc).toBeDefined(); + + await expect( + verifiableCredentialsService.verifyVerifiableCredential(vc) + ).rejects.toMatchObject({ + message: expect.stringContaining('Verifiable Credential is invalid'), + }); + }); + + test('should verify valid external VC', async () => { + const isValid = + await verifiableCredentialsService.verifyVerifiableCredential( + validExampleExternalVC + ); + + expect(isValid).toBe(true); + }); + + test('should throw an error for invalid external VC', async () => { + await expect( + verifiableCredentialsService.verifyVerifiableCredential( + invalidExampleExternalVC + ) + ).rejects.toMatchObject({ + message: expect.stringContaining('Verifiable Credential is invalid'), + }); + }); +}); diff --git a/package-lock.json b/package-lock.json index 8eae32ab..364cb337 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "iam-client-lib", - "version": "5.0.0", + "version": "5.1.0-alpha.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "iam-client-lib", - "version": "5.0.0", + "version": "5.1.0-alpha.3", "license": "GPL-3.0-or-later", "dependencies": { "@energyweb/credential-governance": "^1.0.1-alpha.22.0", @@ -26,10 +26,12 @@ "@gnosis.pm/safe-apps-provider": "0.8.0", "@gnosis.pm/safe-apps-sdk": "4.3.0", "@metamask/detect-provider": "^1.2.0", - "@walletconnect/ethereum-provider": "^1.7.1", + "@walletconnect/ethereum-provider": "1.7.1", "axios": "^0.26.0", "base64url": "^3.0.1", "concurrently": "^6.1.0", + "didkit-wasm": "^0.1.9", + "didkit-wasm-node": "^0.1.6", "eth-ens-namehash": "^2.0.8", "ethers": "^5.6.1", "js-sha3": "^0.8.0", @@ -204,9 +206,9 @@ } }, "node_modules/@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "dependencies": { "@babel/types": "^7.17.0", @@ -267,26 +269,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "dependencies": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" }, "engines": { "node": ">=6.9.0" @@ -467,13 +456,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "dependencies": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" }, "engines": { @@ -481,9 +470,9 @@ } }, "node_modules/@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "dependencies": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -494,9 +483,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", - "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -862,15 +851,15 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-class-properties/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -900,15 +889,15 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-class-static-block/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -1085,15 +1074,15 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-methods/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -1124,15 +1113,15 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-proposal-private-property-in-object/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -1610,9 +1599,9 @@ } }, "node_modules/@babel/preset-env/node_modules/@babel/plugin-transform-modules-commonjs": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", - "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, "dependencies": { "@babel/helper-module-transforms": "^7.17.7", @@ -2101,9 +2090,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", - "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "dependencies": { "regenerator-runtime": "^0.13.4" }, @@ -2126,18 +2115,18 @@ } }, "node_modules/@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, "dependencies": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -2166,15 +2155,15 @@ "dev": true }, "node_modules/@changesets/apply-release-plan": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-5.0.5.tgz", - "integrity": "sha512-CxL9dkhzjHiVmXCyHgsLCQj7i/coFTMv/Yy0v6BC5cIWZkQml+lf7zvQqAcFXwY7b54HxRWZPku02XFB53Q0Uw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.0.0.tgz", + "integrity": "sha512-gp6nIdVdfYdwKww2+f8whckKmvfE4JEm4jJgBhTmooi0uzHWhnxvk6JIzQi89qEAMINN0SeVNnXiAtbFY0Mj3w==", "dependencies": { "@babel/runtime": "^7.10.4", - "@changesets/config": "^1.7.0", + "@changesets/config": "^2.0.0", "@changesets/get-version-range-type": "^0.3.2", - "@changesets/git": "^1.3.1", - "@changesets/types": "^4.1.0", + "@changesets/git": "^1.3.2", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", @@ -2205,14 +2194,14 @@ } }, "node_modules/@changesets/assemble-release-plan": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.1.1.tgz", - "integrity": "sha512-TQRZnK1sqYuoibJdSwpqE81rfDh0Xrkkr/M6bCQZ1ogGoRJNVbNYDWvNfkNvR4rEdRylri8cfKzffo/ruoy8QA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.1.2.tgz", + "integrity": "sha512-nOFyDw4APSkY/vh5WNwGEtThPgEjVShp03PKVdId6wZTJALVcAALCSLmDRfeqjE2z9EsGJb7hZdDlziKlnqZgw==", "dependencies": { "@babel/runtime": "^7.10.4", "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.1", - "@changesets/types": "^4.1.0", + "@changesets/get-dependents-graph": "^1.3.2", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "semver": "^5.4.1" } @@ -2226,32 +2215,32 @@ } }, "node_modules/@changesets/changelog-git": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.10.tgz", - "integrity": "sha512-4t7zqPOv3aDZp4Y+AyDhiOG2ypaUXDpOz+MT1wOk3uSZNv78AaDByam0hdk5kfYuH1RlMecWU4/U5lO1ZL5eaA==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.11.tgz", + "integrity": "sha512-sWJvAm+raRPeES9usNpZRkooeEB93lOpUN0Lmjz5vhVAb7XGIZrHEJ93155bpE1S0c4oJ5Di9ZWgzIwqhWP/Wg==", "dependencies": { - "@changesets/types": "^4.1.0" + "@changesets/types": "^5.0.0" } }, "node_modules/@changesets/cli": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.21.1.tgz", - "integrity": "sha512-4AJKo/UW0P217m2VHjiuhZy+CstLw54eu9I1fsY7tst76GeEN7mX0mVrTNEisR6CvOH7wLav3ITqvDcKVPbKsw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.22.0.tgz", + "integrity": "sha512-4bA3YoBkd5cm5WUxmrR2N9WYE7EeQcM+R3bVYMUj2NvffkQVpU3ckAI+z8UICoojq+HRl2OEwtz+S5UBmYY4zw==", "dependencies": { "@babel/runtime": "^7.10.4", - "@changesets/apply-release-plan": "^5.0.5", - "@changesets/assemble-release-plan": "^5.1.1", - "@changesets/changelog-git": "^0.1.10", - "@changesets/config": "^1.7.0", + "@changesets/apply-release-plan": "^6.0.0", + "@changesets/assemble-release-plan": "^5.1.2", + "@changesets/changelog-git": "^0.1.11", + "@changesets/config": "^2.0.0", "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.1", - "@changesets/get-release-plan": "^3.0.7", - "@changesets/git": "^1.3.1", + "@changesets/get-dependents-graph": "^1.3.2", + "@changesets/get-release-plan": "^3.0.8", + "@changesets/git": "^1.3.2", "@changesets/logger": "^0.0.5", - "@changesets/pre": "^1.0.10", - "@changesets/read": "^0.5.4", - "@changesets/types": "^4.1.0", - "@changesets/write": "^0.1.7", + "@changesets/pre": "^1.0.11", + "@changesets/read": "^0.5.5", + "@changesets/types": "^5.0.0", + "@changesets/write": "^0.1.8", "@manypkg/get-packages": "^1.1.3", "@types/is-ci": "^3.0.0", "@types/semver": "^6.0.0", @@ -2265,6 +2254,7 @@ "outdent": "^0.5.0", "p-limit": "^2.2.0", "preferred-pm": "^3.0.0", + "resolve-from": "^5.0.0", "semver": "^5.4.1", "spawndamnit": "^2.0.0", "term-size": "^2.1.0", @@ -2283,14 +2273,14 @@ } }, "node_modules/@changesets/config": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-1.7.0.tgz", - "integrity": "sha512-Ctk6ZO5Ay6oZ95bbKXyA2a1QG0jQUePaGCY6BKkZtUG4PgysesfmiQOPgOY5OsRMt8exJeo6l+DJ75YiKmh0rQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-2.0.0.tgz", + "integrity": "sha512-r5bIFY6CN3K6SQ+HZbjyE3HXrBIopONR47mmX7zUbORlybQXtympq9rVAOzc0Oflbap8QeIexc+hikfZoREXDg==", "dependencies": { "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.1", + "@changesets/get-dependents-graph": "^1.3.2", "@changesets/logger": "^0.0.5", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", "micromatch": "^4.0.2" @@ -2305,11 +2295,11 @@ } }, "node_modules/@changesets/get-dependents-graph": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.1.tgz", - "integrity": "sha512-HwUs8U0XK/ZqCQon1/80jJEyswS8JVmTiHTZslrTpuavyhhhxrSpO1eVCdKgaVHBRalOw3gRzdS3uzkmqYsQSQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.2.tgz", + "integrity": "sha512-tsqA6qZRB86SQuApSoDvI8yEWdyIlo/WLI4NUEdhhxLMJ0dapdeT6rUZRgSZzK1X2nv5YwR0MxQBbDAiDibKrg==", "dependencies": { - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "chalk": "^2.1.0", "fs-extra": "^7.0.1", @@ -2325,16 +2315,16 @@ } }, "node_modules/@changesets/get-release-plan": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.7.tgz", - "integrity": "sha512-zDp6RIEKvERIF4Osy8sJ5BzqTiiLMhPWBO02y6w3nzTQJ0VBMaTs4hhwImQ/54O9I34eUHR3D0DwmwGQ27ifaw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.8.tgz", + "integrity": "sha512-TJYiWNuP0Lzu2dL/KHuk75w7TkiE5HqoYirrXF7SJIxkhlgH9toQf2C7IapiFTObtuF1qDN8HJAX1CuIOwXldg==", "dependencies": { "@babel/runtime": "^7.10.4", - "@changesets/assemble-release-plan": "^5.1.1", - "@changesets/config": "^1.7.0", - "@changesets/pre": "^1.0.10", - "@changesets/read": "^0.5.4", - "@changesets/types": "^4.1.0", + "@changesets/assemble-release-plan": "^5.1.2", + "@changesets/config": "^2.0.0", + "@changesets/pre": "^1.0.11", + "@changesets/read": "^0.5.5", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3" } }, @@ -2344,13 +2334,13 @@ "integrity": "sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==" }, "node_modules/@changesets/git": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-1.3.1.tgz", - "integrity": "sha512-yg60QUi38VA0XGXdBy9SRYJhs8xJHE97Z1CaB/hFyByBlh5k1i+avFNBvvw66MsoT/aiml6y9scIG6sC8R5mfg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-1.3.2.tgz", + "integrity": "sha512-p5UL+urAg0Nnpt70DLiBe2iSsMcDubTo9fTOD/61krmcJ466MGh71OHwdAwu1xG5+NKzeysdy1joRTg8CXcEXA==", "dependencies": { "@babel/runtime": "^7.10.4", "@changesets/errors": "^0.1.4", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "is-subdir": "^1.1.1", "spawndamnit": "^2.0.0" @@ -2365,53 +2355,53 @@ } }, "node_modules/@changesets/parse": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.12.tgz", - "integrity": "sha512-FOBz2L1dT9PcvyQU1Qp2sQ0B4Jw7EgRDAKFVzAQwhzXqCq03TcE7vgKU6VSksCJAioMYDowdVVHNnv/Uak6yZQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.13.tgz", + "integrity": "sha512-wh9Ifa0dungY6d2nMz6XxF6FZ/1I7j+mEgPAqrIyKS64nifTh1Ua82qKKMMK05CL7i4wiB2NYc3SfnnCX3RVeA==", "dependencies": { - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "js-yaml": "^3.13.1" } }, "node_modules/@changesets/pre": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.10.tgz", - "integrity": "sha512-cZC1C1wTSC17/TcTWivAQ4LAXz5jEYDuy3UeZiBz1wnTTzMHyTHLLwJi60juhl4hawXunDLw0mwZkcpS8Ivitg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.11.tgz", + "integrity": "sha512-CXZnt4SV9waaC9cPLm7818+SxvLKIDHUxaiTXnJYDp1c56xIexx1BNfC1yMuOdzO2a3rAIcZua5Odxr3dwSKfg==", "dependencies": { "@babel/runtime": "^7.10.4", "@changesets/errors": "^0.1.4", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1" } }, "node_modules/@changesets/read": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.5.4.tgz", - "integrity": "sha512-12dTx+p5ztFs9QgJDGHRHR6HzTIbHct9S4lK2I/i6Qkz1cNfAPVIbdoMCdbPIWeLank9muMUjiiFmCWJD7tQIg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.5.5.tgz", + "integrity": "sha512-bzonrPWc29Tsjvgh+8CqJ0apQOwWim0zheeD4ZK44ApSa/GudnZJTODtA3yNOOuQzeZmL0NUebVoHIurtIkA7w==", "dependencies": { "@babel/runtime": "^7.10.4", - "@changesets/git": "^1.3.1", + "@changesets/git": "^1.3.2", "@changesets/logger": "^0.0.5", - "@changesets/parse": "^0.3.12", - "@changesets/types": "^4.1.0", + "@changesets/parse": "^0.3.13", + "@changesets/types": "^5.0.0", "chalk": "^2.1.0", "fs-extra": "^7.0.1", "p-filter": "^2.1.0" } }, "node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-5.0.0.tgz", + "integrity": "sha512-IT1kBLSbAgTS4WtpU6P5ko054hq12vk4tgeIFRVE7Vnm4a/wgbNvBalgiKP0MjEXbCkZbItiGQHkCGxYWR55sA==" }, "node_modules/@changesets/write": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.1.7.tgz", - "integrity": "sha512-6r+tc6u2l5BBIwEAh7ivRYWFir+XKiw0q/6Hx6NJA4dSN5fNu9uyWRQ+IMHCllD9dBcsh+e79sOepc+xT8l28g==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.1.8.tgz", + "integrity": "sha512-oIHeFVMuP6jf0TPnKPpaFpvvAf3JBc+s2pmVChbeEgQTBTALoF51Z9kqxQfG4XONZPHZnqkmy564c7qohhhhTQ==", "dependencies": { "@babel/runtime": "^7.10.4", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "fs-extra": "^7.0.1", "human-id": "^1.0.2", "prettier": "^1.19.1" @@ -2771,9 +2761,9 @@ "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" }, "node_modules/@ethersproject/bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.0.tgz", - "integrity": "sha512-3hJPlYemb9V4VLfJF5BfN0+55vltPZSHU3QKUyP9M3Y2TcajbiRrz65UG+xVHOzBereB1b9mn7r12o177xgN7w==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "funding": [ { "type": "individual", @@ -2957,9 +2947,9 @@ ] }, "node_modules/@ethersproject/networks": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.0.tgz", - "integrity": "sha512-DaVzgyThzHgSDLuURhvkp4oviGoGe9iTZW4jMEORHDRCgSZ9K9THGFKqL+qGXqPAYLEgZTf5z2w56mRrPR1MjQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.1.tgz", + "integrity": "sha512-b2rrupf3kCTcc3jr9xOWBuHylSFtbpJf79Ga7QR98ienU2UqGimPGEsYMgbI29KHJfA5Us89XwGVmxrlxmSrMg==", "funding": [ { "type": "individual", @@ -3012,9 +3002,9 @@ } }, "node_modules/@ethersproject/providers": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.1.tgz", - "integrity": "sha512-w8Wx15nH+aVDvnoKCyI1f3x0B5idmk/bDJXMEUqCfdO8Eadd0QpDx9lDMTMmenhOmf9vufLJXjpSm24D3ZnVpg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.2.tgz", + "integrity": "sha512-6/EaFW/hNWz+224FXwl8+HdMRzVHt8DpPmu5MZaIQqx/K/ELnC9eY236SMV7mleCM3NnEArFwcAAxH5kUUgaRg==", "funding": [ { "type": "individual", @@ -4189,6 +4179,11 @@ "read-yaml-file": "^1.1.0" } }, + "node_modules/@manypkg/get-packages/node_modules/@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==" + }, "node_modules/@manypkg/get-packages/node_modules/fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -4599,9 +4594,9 @@ } }, "node_modules/@semantic-release/github": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.2.tgz", - "integrity": "sha512-wIbfhOeuxlYzMTjtSAa2xgr54n7ZuPAS2gadyTWBpUt2PNAPgla7A6XxCXJnaKPgfVF0iFfSk3B+KlVKk6ByVg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.4.tgz", + "integrity": "sha512-But4e8oqqP3anZI5tjzZssZc2J6eoUdeeE0s7LVKKwyiAXJiQDWNNvtPOpgG2DsIz4+Exuse7cEQgjGMxwtLmg==", "dev": true, "dependencies": { "@octokit/rest": "^18.0.0", @@ -4723,18 +4718,18 @@ } }, "node_modules/@semantic-release/npm/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@semantic-release/npm/node_modules/universalify": { @@ -4939,15 +4934,15 @@ } }, "node_modules/@types/json-schema": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", - "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "node_modules/@types/lodash": { - "version": "4.14.180", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", - "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", "dev": true }, "node_modules/@types/lodash.difference": { @@ -5067,14 +5062,14 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", - "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", + "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/type-utils": "5.16.0", - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/type-utils": "5.18.0", + "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -5100,29 +5095,29 @@ } }, "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", - "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", + "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", "debug": "^4.3.2" }, "engines": { @@ -5142,13 +5137,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", - "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", + "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0" + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5159,12 +5154,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", - "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", + "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "tsutils": "^3.21.0" }, @@ -5185,9 +5180,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", - "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", + "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -5198,13 +5193,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", - "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", + "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -5225,30 +5220,30 @@ } }, "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", - "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", + "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -5264,12 +5259,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", - "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", + "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/types": "5.18.0", "eslint-visitor-keys": "^3.0.0" }, "engines": { @@ -5281,36 +5276,36 @@ } }, "node_modules/@walletconnect/browser-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.7.5.tgz", - "integrity": "sha512-gm9ufi0n5cGBXoGWDtMVSqIJ0eXYW+ZFuTNVN0fm4oal26J7cPrOdFjzhv5zvx5fKztWQ21DNFZ+PRXBjXg04Q==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.7.7.tgz", + "integrity": "sha512-6Mt7DSPaG0FKnHhuVzkU1hgtsCpGvl2nfbfRytLpyDY05iWMzMg5uK1DzV+0k4hCt9pVli0JVNt6dh9a6Xm94w==", "dependencies": { "@walletconnect/safe-json": "1.0.0", - "@walletconnect/types": "^1.7.5", + "@walletconnect/types": "^1.7.7", "@walletconnect/window-getters": "1.0.0", "@walletconnect/window-metadata": "1.0.0", "detect-browser": "5.2.0" } }, "node_modules/@walletconnect/client": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/client/-/client-1.7.5.tgz", - "integrity": "sha512-Vh3h1kfhmJ4Jx//H0lmmfDc5Q2s+R73Nh5cetVN41QPRrAcqHE4lR2ZS8XxRCNBl4/gcHZJIZS9J2Ui4tTXBLA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/client/-/client-1.7.7.tgz", + "integrity": "sha512-UuDkpXDc1Emx09aGXKz2Fg8omNp5J8ZRgNblnQTb8xnoQ8rgOJSyhbFR37PFIFwVpriZZDAgmy8HlqoGwLQ2ug==", "dependencies": { - "@walletconnect/core": "^1.7.5", - "@walletconnect/iso-crypto": "^1.7.5", - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5" + "@walletconnect/core": "^1.7.7", + "@walletconnect/iso-crypto": "^1.7.7", + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7" } }, "node_modules/@walletconnect/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-1.7.5.tgz", - "integrity": "sha512-c4B8s9fZ/Ah2p460Hxo4e9pwLQVYT2+dVYAfqaxVzfYjhAokDEtO55Bdm1hujtRjQVqwTvCljKxBB+LgMp3k8w==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-1.7.7.tgz", + "integrity": "sha512-XsF2x4JcBS1V2Nk/Uh38dU7ZlLmW/R5oxHp4+tVgCwTID6nZlo3vUSHBOqM7jgDRblKOHixANollm0r94bM8Cg==", "dependencies": { - "@walletconnect/socket-transport": "^1.7.5", - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5" + "@walletconnect/socket-transport": "^1.7.7", + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7" } }, "node_modules/@walletconnect/crypto": { @@ -5355,13 +5350,13 @@ } }, "node_modules/@walletconnect/iso-crypto": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/iso-crypto/-/iso-crypto-1.7.5.tgz", - "integrity": "sha512-mJdRs2SqAPOLBBqLhU+ZnAh2c8TL2uDuL/ojV4aBzZ0ZHNT7X2zSOjAiixCb3vvH8GAt30OKmiRo3+ChI/9zvA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/iso-crypto/-/iso-crypto-1.7.7.tgz", + "integrity": "sha512-t8RKJZkFtFyWMFrl0jPz/3RAGhM5yext+MLFq3L/KTPxLgMZuT1yFHRUiV7cAN3+LcCmk6Sy/rV1yQPTiB158Q==", "dependencies": { "@walletconnect/crypto": "^1.0.2", - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5" + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7" } }, "node_modules/@walletconnect/jsonrpc-http-connection": { @@ -5375,9 +5370,9 @@ } }, "node_modules/@walletconnect/jsonrpc-provider": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.2.tgz", - "integrity": "sha512-7sIjzg27I7noPRULYTV2QEWWNV3+d3f5T7ym8VTtCRoA1Xf+SoN9cZJotO0GCCk0jVcvN2BX3DCSq6WbcCi4Eg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.3.tgz", + "integrity": "sha512-DmSBKEB+RYngQgAbbDtJTUFdgyKvnWJD8bsM2QR1e2fyEUGUaq+z3QXixrMAsMW3tI8EuVlklEd7ayb6oyFpZw==", "dependencies": { "@walletconnect/jsonrpc-utils": "^1.0.0", "@walletconnect/safe-json": "^1.0.0" @@ -5407,13 +5402,13 @@ "deprecated": "Deprecated in favor of dynamic registry available from: https://github.com/walletconnect/walletconnect-registry" }, "node_modules/@walletconnect/qrcode-modal": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.7.5.tgz", - "integrity": "sha512-LVq35jc3VMGq1EMcGCObQtEiercMDmUHDnc7A3AmUo0LoAbaPo6c8Hq0zqy2+JhtLmxUhU3ktf+szmCoiUDTUQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.7.7.tgz", + "integrity": "sha512-HRzw6g4P8/C4ClJYJShaGfdvjfrTfkXv+eb+IylWGWvC8IQhuiSXCq5+F3t0CXxuZs3ir26abgviEMRFQxGKdA==", "dependencies": { - "@walletconnect/browser-utils": "^1.7.5", + "@walletconnect/browser-utils": "^1.7.7", "@walletconnect/mobile-registry": "^1.4.0", - "@walletconnect/types": "^1.7.5", + "@walletconnect/types": "^1.7.7", "copy-to-clipboard": "^3.3.1", "preact": "10.4.1", "qrcode": "1.4.4" @@ -5435,25 +5430,25 @@ "integrity": "sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==" }, "node_modules/@walletconnect/signer-connection": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/signer-connection/-/signer-connection-1.7.5.tgz", - "integrity": "sha512-O7WO1Yqu8eBDfUJYeEkQDV2LDvj5JvAltTRn7El0IYOjK/T979c4NvyBpjHv9rp0eKX6/60foynj4D/h9hA4ew==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/signer-connection/-/signer-connection-1.7.7.tgz", + "integrity": "sha512-mS0Y4k9ckXJwcK1ACI1TAVQtp4oBvZIQw7ErxbRwqVQzmmYEVddKVHLbNm73yWtf+QMGGzGJLn4K/B+qM2TRpw==", "dependencies": { - "@walletconnect/client": "^1.7.5", + "@walletconnect/client": "^1.7.7", "@walletconnect/jsonrpc-types": "^1.0.0", "@walletconnect/jsonrpc-utils": "^1.0.0", - "@walletconnect/qrcode-modal": "^1.7.5", - "@walletconnect/types": "^1.7.5", + "@walletconnect/qrcode-modal": "^1.7.7", + "@walletconnect/types": "^1.7.7", "eventemitter3": "4.0.7" } }, "node_modules/@walletconnect/socket-transport": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/socket-transport/-/socket-transport-1.7.5.tgz", - "integrity": "sha512-4TYCxrNWb4f5a1NGsALXidr+/6dOiqgVfUQJ4fdP6R7ijL+7jtdiktguU9FIDq5wFXRE+ZdpCpwSAfOt60q/mQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/socket-transport/-/socket-transport-1.7.7.tgz", + "integrity": "sha512-RxeFkT+5BqdaZzPtPYIw6+KSVh6Q1NaYqTiAzWWh9RPuvuTajIEsi+fUXizfkpmyi9UTYBvdFXnKcB+eSImpDg==", "dependencies": { - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5", + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7", "ws": "7.5.3" } }, @@ -5483,14 +5478,14 @@ "integrity": "sha512-yXJrLxwLLCXtWgd/e8FjfY9v5DKds12Z7EEPzUrPSq6v7WtXpqate577KwlFQ6UYzioQzIEDE8+98j+0aiZbsw==" }, "node_modules/@walletconnect/utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-1.7.5.tgz", - "integrity": "sha512-U954rIIA/g/Cmdqy+n3hMY1DDMmXxGs8w/QmrK9b/H5nkQ3e4QicOyynq5g/JTTesN5HZdDTFiyX9r0GSKa+iA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-1.7.7.tgz", + "integrity": "sha512-slNlnROS4DEusGFx53hshIBylYhzd5JtGF+AJpza+Tc616+u8ozjQ9aKKUaV85bucnv5Q42bTwLYrYrXiydmuw==", "dependencies": { - "@walletconnect/browser-utils": "^1.7.5", + "@walletconnect/browser-utils": "^1.7.7", "@walletconnect/encoding": "^1.0.1", "@walletconnect/jsonrpc-utils": "^1.0.0", - "@walletconnect/types": "^1.7.5", + "@walletconnect/types": "^1.7.7", "bn.js": "4.11.8", "js-sha3": "0.8.0", "query-string": "6.13.5" @@ -6501,15 +6496,15 @@ } }, "node_modules/bili/node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "dependencies": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -7181,9 +7176,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001319", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz", - "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==", + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==", "dev": true, "funding": [ { @@ -7857,6 +7852,18 @@ "node": ">=10" } }, + "node_modules/conventional-changelog-writer/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-changelog-writer/node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -7898,18 +7905,18 @@ } }, "node_modules/conventional-changelog-writer/node_modules/normalize-package-data/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/conventional-changelog-writer/node_modules/type-fest": { @@ -7924,6 +7931,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/conventional-changelog-writer/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/conventional-changelog-writer/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -7978,6 +7991,18 @@ "node": ">=10" } }, + "node_modules/conventional-commits-parser/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/conventional-commits-parser/node_modules/meow": { "version": "8.1.2", "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", @@ -8019,18 +8044,18 @@ } }, "node_modules/conventional-commits-parser/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/conventional-commits-parser/node_modules/type-fest": { @@ -8045,6 +8070,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/conventional-commits-parser/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/conventional-commits-parser/node_modules/yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -8957,6 +8988,18 @@ "node": ">=8" } }, + "node_modules/didkit-wasm": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/didkit-wasm/-/didkit-wasm-0.1.9.tgz", + "integrity": "sha512-K5+bF4shQxb9cmespZsRF1IFMIeB04jW36Gq+s9g1hmPSGl9ZfvYgDqNRUwoYg2pGhGCmES/HmI2gHy1xTZ9Cw==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/didkit-wasm-node": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/didkit-wasm-node/-/didkit-wasm-node-0.1.6.tgz", + "integrity": "sha512-qvPd4CyuPTJIlWrcoAPXlMu4247o6lBzpUfNC2cDbzlCaNdXp8WT2v+6IZSG+K1w7ZuLtO+GTHMPDTii22H9fA==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, "node_modules/diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -9005,9 +9048,9 @@ } }, "node_modules/dom-serializer/node_modules/domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true, "funding": [ { @@ -9158,9 +9201,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.89", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.89.tgz", - "integrity": "sha512-z1Axg0Fu54fse8wN4fd+GAINdU5mJmLtcl6bqIcYyzNVGONcfHAeeJi88KYMQVKalhXlYuVPzKkFIU5VD0raUw==", + "version": "1.4.106", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz", + "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==", "dev": true }, "node_modules/elliptic": { @@ -9265,9 +9308,9 @@ } }, "node_modules/es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", + "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -9275,15 +9318,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -9445,9 +9488,9 @@ } }, "node_modules/eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "dependencies": { "@eslint/eslintrc": "^1.2.1", @@ -9891,9 +9934,9 @@ } }, "node_modules/ethers": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.1.tgz", - "integrity": "sha512-qtl/2W+dwmUa5Z3JqwsbV3JEBZZHNARe5K/A2ePcNAuhJYnEKIgGOT/O9ouPwBijSqVoQnmQMzi5D48LFNOY2A==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.2.tgz", + "integrity": "sha512-EzGCbns24/Yluu7+ToWnMca3SXJ1Jk1BvWB7CCmVNxyOeM4LLvw2OLuIHhlkhQk1dtOcj9UMsdkxUh8RiG1dxQ==", "funding": [ { "type": "individual", @@ -9912,7 +9955,7 @@ "@ethersproject/base64": "5.6.0", "@ethersproject/basex": "5.6.0", "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.0", + "@ethersproject/bytes": "5.6.1", "@ethersproject/constants": "5.6.0", "@ethersproject/contracts": "5.6.0", "@ethersproject/hash": "5.6.0", @@ -9920,10 +9963,10 @@ "@ethersproject/json-wallets": "5.6.0", "@ethersproject/keccak256": "5.6.0", "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.0", + "@ethersproject/networks": "5.6.1", "@ethersproject/pbkdf2": "5.6.0", "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.1", + "@ethersproject/providers": "5.6.2", "@ethersproject/random": "5.6.0", "@ethersproject/rlp": "5.6.0", "@ethersproject/sha2": "5.6.0", @@ -12068,9 +12111,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "node_modules/grapheme-splitter": { "version": "1.0.4", @@ -13302,9 +13345,9 @@ } }, "node_modules/is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "dependencies": { "has-tostringtag": "^1.0.0" }, @@ -13413,9 +13456,12 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -15408,18 +15454,18 @@ } }, "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/jest-snapshot/node_modules/supports-color": { @@ -16591,23 +16637,14 @@ } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/lru-cache/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/lunr": { "version": "2.3.9", "resolved": "https://registry.npmjs.org/lunr/-/lunr-2.3.9.tgz", @@ -16841,12 +16878,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "dependencies": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { "node": ">=8.6" @@ -17288,9 +17325,9 @@ } }, "node_modules/node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==", "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -17319,19 +17356,19 @@ } }, "node_modules/node-notifier/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "optional": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/node-notifier/node_modules/uuid": { @@ -17367,12 +17404,12 @@ } }, "node_modules/node-pre-gyp/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -17493,14 +17530,15 @@ } }, "node_modules/npm": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.5.tgz", - "integrity": "sha512-a1vl26nokCNlD+my/iNYmOUPx/hpYR4ZyZk8gb7/A2XXtrPZf2gTSJOnVjS77jQS+BSfIVQpipZwXWCL0+5wzg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.6.0.tgz", + "integrity": "sha512-icekvN8FJFESIFkLaFEVl05Nocl5Id5HnoVhJzhCUvtNY8tj9kfUlH/J527fZq/8ltsAUqpettfutwRjQYS2fA==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", "@npmcli/ci-detect", "@npmcli/config", + "@npmcli/fs", "@npmcli/map-workspaces", "@npmcli/package-json", "@npmcli/run-script", @@ -17572,9 +17610,10 @@ "dev": true, "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.0.3", + "@npmcli/arborist": "^5.0.4", "@npmcli/ci-detect": "^2.0.0", "@npmcli/config": "^4.0.1", + "@npmcli/fs": "^2.1.0", "@npmcli/map-workspaces": "^2.0.2", "@npmcli/package-json": "^1.0.1", "@npmcli/run-script": "^3.0.1", @@ -17582,7 +17621,7 @@ "ansicolors": "~0.3.2", "ansistyles": "~0.1.3", "archy": "~1.0.0", - "cacache": "^16.0.2", + "cacache": "^16.0.3", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", @@ -17593,7 +17632,7 @@ "graceful-fs": "^4.2.9", "hosted-git-info": "^5.0.0", "ini": "^2.0.0", - "init-package-json": "^3.0.1", + "init-package-json": "^3.0.2", "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^2.3.1", "libnpmaccess": "^6.0.2", @@ -17607,7 +17646,7 @@ "libnpmsearch": "^5.0.2", "libnpmteam": "^4.0.2", "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^10.1.1", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", @@ -17615,18 +17654,18 @@ "ms": "^2.1.2", "node-gyp": "^9.0.0", "nopt": "^5.0.0", - "npm-audit-report": "^2.1.5", + "npm-audit-report": "^3.0.0", "npm-install-checks": "^4.0.0", "npm-package-arg": "^9.0.1", "npm-pick-manifest": "^7.0.0", "npm-profile": "^6.0.2", - "npm-registry-fetch": "^13.0.1", + "npm-registry-fetch": "^13.1.0", "npm-user-validate": "^1.0.1", "npmlog": "^6.0.1", "opener": "^1.5.2", "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", "read": "~1.0.7", "read-package-json": "^5.0.0", @@ -17639,7 +17678,7 @@ "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^1.0.4", - "validate-npm-package-name": "~3.0.0", + "validate-npm-package-name": "^4.0.0", "which": "^2.0.2", "write-file-atomic": "^4.0.1" }, @@ -17702,7 +17741,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.0.3", + "version": "5.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -17746,7 +17785,7 @@ "arborist": "bin/index.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/ci-detect": { @@ -17790,16 +17829,16 @@ } }, "node_modules/npm/node_modules/@npmcli/fs": { - "version": "1.1.0", + "version": "2.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/@npmcli/git": { @@ -18111,24 +18150,27 @@ } }, "node_modules/npm/node_modules/builtins": { - "version": "1.0.3", + "version": "5.0.0", "dev": true, "inBundle": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "semver": "^7.0.0" + } }, "node_modules/npm/node_modules/cacache": { - "version": "16.0.2", + "version": "16.0.3", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^1.0.0", + "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^1.1.2", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^7.2.0", "infer-owner": "^1.0.4", - "lru-cache": "^7.5.1", + "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", @@ -18142,7 +18184,7 @@ "unique-filename": "^1.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/chalk": { @@ -18309,7 +18351,7 @@ "license": "ISC" }, "node_modules/npm/node_modules/debug": { - "version": "4.3.3", + "version": "4.3.4", "dev": true, "inBundle": true, "license": "MIT", @@ -18445,7 +18487,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/gauge": { - "version": "4.0.3", + "version": "4.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -18460,7 +18502,7 @@ "wide-align": "^1.1.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/glob": { @@ -18645,21 +18687,21 @@ } }, "node_modules/npm/node_modules/init-package-json": { - "version": "3.0.1", + "version": "3.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", "read": "^1.0.7", "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/ip": { @@ -18753,7 +18795,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/just-diff-apply": { - "version": "4.0.1", + "version": "5.2.0", "dev": true, "inBundle": true, "license": "MIT" @@ -18770,7 +18812,7 @@ "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmdiff": { @@ -18789,7 +18831,7 @@ "tar": "^6.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmexec": { @@ -18812,7 +18854,7 @@ "walk-up-path": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmfund": { @@ -18824,7 +18866,7 @@ "@npmcli/arborist": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmhook": { @@ -18837,7 +18879,7 @@ "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmorg": { @@ -18850,7 +18892,7 @@ "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmpack": { @@ -18864,7 +18906,7 @@ "pacote": "^13.0.5" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmpublish": { @@ -18880,7 +18922,7 @@ "ssri": "^8.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmsearch": { @@ -18892,7 +18934,7 @@ "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmteam": { @@ -18905,7 +18947,7 @@ "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/libnpmversion": { @@ -18922,11 +18964,11 @@ "stringify-package": "^1.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/lru-cache": { - "version": "7.5.1", + "version": "7.7.1", "dev": true, "inBundle": true, "license": "ISC", @@ -18935,18 +18977,18 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.0.6", + "version": "10.1.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "agentkeepalive": "^4.2.1", - "cacache": "^16.0.0", + "cacache": "^16.0.2", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.5.1", + "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-fetch": "^2.0.3", @@ -18958,7 +19000,7 @@ "ssri": "^8.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/minimatch": { @@ -18998,7 +19040,7 @@ } }, "node_modules/npm/node_modules/minipass-fetch": { - "version": "2.0.3", + "version": "2.1.0", "dev": true, "inBundle": true, "license": "MIT", @@ -19008,7 +19050,7 @@ "minizlib": "^2.1.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, "optionalDependencies": { "encoding": "^0.1.13" @@ -19175,7 +19217,7 @@ } }, "node_modules/npm/node_modules/npm-audit-report": { - "version": "2.1.5", + "version": "3.0.0", "dev": true, "inBundle": true, "license": "ISC", @@ -19183,7 +19225,7 @@ "chalk": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-bundled": { @@ -19214,17 +19256,17 @@ "license": "ISC" }, "node_modules/npm/node_modules/npm-package-arg": { - "version": "9.0.1", + "version": "9.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "hosted-git-info": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-packlist": { @@ -19274,21 +19316,21 @@ } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.0.1", + "version": "13.1.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^10.0.3", + "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.1", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/npm-user-validate": { @@ -19381,17 +19423,17 @@ } }, "node_modules/npm/node_modules/parse-conflict-json": { - "version": "2.0.1", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", - "just-diff-apply": "^4.0.1" + "just-diff-apply": "^5.2.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/path-is-absolute": { @@ -19404,12 +19446,12 @@ } }, "node_modules/npm/node_modules/proc-log": { - "version": "2.0.0", + "version": "2.0.1", "dev": true, "inBundle": true, "license": "ISC", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/promise-all-reject-late": { @@ -19833,12 +19875,15 @@ } }, "node_modules/npm/node_modules/validate-npm-package-name": { - "version": "3.0.0", + "version": "4.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/walk-up-path": { @@ -21722,9 +21767,9 @@ "dev": true }, "node_modules/postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -21879,9 +21924,9 @@ } }, "node_modules/prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true, "bin": { "prettier": "bin-prettier.js" @@ -23529,21 +23574,39 @@ "node": ">=10" } }, + "node_modules/semantic-release/node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/semantic-release/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/semantic-release/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "node_modules/semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -25106,12 +25169,12 @@ } }, "node_modules/svgo/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -25142,12 +25205,12 @@ } }, "node_modules/tar/node_modules/mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "dependencies": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" }, "bin": { "mkdirp": "bin/cmd.js" @@ -25523,18 +25586,18 @@ } }, "node_modules/ts-jest/node_modules/semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/ts-jest/node_modules/yargs-parser": { @@ -25785,9 +25848,9 @@ } }, "node_modules/typedoc": { - "version": "0.22.13", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.13.tgz", - "integrity": "sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==", + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.14.tgz", + "integrity": "sha512-tlf9wIcsrnQSjetStrnRutuy2RjZkG5PK2umwveZLTkuC2K9VywOZTdu2G19BdOPzGrhZjf9WK7pthXqnFQejg==", "dev": true, "dependencies": { "glob": "^7.2.0", @@ -25840,9 +25903,9 @@ } }, "node_modules/typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -26635,9 +26698,9 @@ } }, "@babel/generator": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.7.tgz", - "integrity": "sha512-oLcVCTeIFadUoArDTwpluncplrYBmTCCZZgXCbgNGvOBBiSDDK3eWO4b/+eOTli5tKv1lg+a5/NAXg+nTcei1w==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", "dev": true, "requires": { "@babel/types": "^7.17.0", @@ -26683,23 +26746,13 @@ } }, "@babel/helper-function-name": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.16.7.tgz", - "integrity": "sha512-QfDfEnIUyyBSR3HtrtGECuZ6DAyCkYFp7GHl75vFtTnn6pjKeK0T1DB5lLkFvBea8MdaiUABx3osbgLyInoejA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.16.7", "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.16.7.tgz", - "integrity": "sha512-flc+RLSOBXzNzVhcLu6ujeHUrD6tANAOU5ojrRx/as+tbzf8+stUCj7+IfRRoAbEZqj/ahXEMsjhOhgeZsrnTw==", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" + "@babel/types": "^7.17.0" } }, "@babel/helper-hoist-variables": { @@ -26835,20 +26888,20 @@ } }, "@babel/helpers": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.8.tgz", - "integrity": "sha512-QcL86FGxpfSJwGtAvv4iG93UL6bmqBdmoVY0CMCU2g+oD2ezQse3PT5Pa+jiD6LJndBQi0EDlpzOWNlLuhz5gw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", "dev": true, "requires": { "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", + "@babel/traverse": "^7.17.9", "@babel/types": "^7.17.0" } }, "@babel/highlight": { - "version": "7.16.10", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.16.10.tgz", - "integrity": "sha512-5FnTQLSLswEj6IkgVw5KusNUUFY9ZGqe/TRFnP/BKYHYgfh7tc+C7mwiy95/yNP7Dh9x580Vv8r7u7ZfTBFxdw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -26856,9 +26909,9 @@ } }, "@babel/parser": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.8.tgz", - "integrity": "sha512-BoHhDJrJXqcg+ZL16Xv39H9n+AqJ4pcDrQBGZN+wHxIysrLZ3/ECwCBUch/1zUNhnsXULcONU3Ei5Hmkfk6kiQ==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", "dev": true }, "@babel/plugin-transform-regenerator": { @@ -27148,15 +27201,15 @@ }, "dependencies": { "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -27176,15 +27229,15 @@ }, "dependencies": { "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -27297,15 +27350,15 @@ }, "dependencies": { "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -27326,15 +27379,15 @@ }, "dependencies": { "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -27653,9 +27706,9 @@ } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.17.7", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.7.tgz", - "integrity": "sha512-ITPmR2V7MqioMJyrxUo2onHNC3e+MvfFiFIR0RP21d3PtlVb6sfzoxNKiphSZUOM9hEIdzCcZe83ieX3yoqjUA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", "dev": true, "requires": { "@babel/helper-module-transforms": "^7.17.7", @@ -28003,9 +28056,9 @@ } }, "@babel/runtime": { - "version": "7.17.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.8.tgz", - "integrity": "sha512-dQpEpK0O9o6lj6oPu0gRDbbnk+4LeHlNcBpspf6Olzt3GIX4P1lWF1gS+pHLDFlaJvbR6q7jCfQ08zA4QJBnmA==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", "requires": { "regenerator-runtime": "^0.13.4" } @@ -28022,18 +28075,18 @@ } }, "@babel/traverse": { - "version": "7.17.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.3.tgz", - "integrity": "sha512-5irClVky7TxRWIRtxlh2WPUUOLhcPN06AGgaQSB8AEwuyEBgJVuJ5imdHm5zxk8w0QS5T+tDfnDxAlhWjpb7cw==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", "dev": true, "requires": { "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", + "@babel/generator": "^7.17.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", "@babel/helper-hoist-variables": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", + "@babel/parser": "^7.17.9", "@babel/types": "^7.17.0", "debug": "^4.1.0", "globals": "^11.1.0" @@ -28056,15 +28109,15 @@ "dev": true }, "@changesets/apply-release-plan": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-5.0.5.tgz", - "integrity": "sha512-CxL9dkhzjHiVmXCyHgsLCQj7i/coFTMv/Yy0v6BC5cIWZkQml+lf7zvQqAcFXwY7b54HxRWZPku02XFB53Q0Uw==", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@changesets/apply-release-plan/-/apply-release-plan-6.0.0.tgz", + "integrity": "sha512-gp6nIdVdfYdwKww2+f8whckKmvfE4JEm4jJgBhTmooi0uzHWhnxvk6JIzQi89qEAMINN0SeVNnXiAtbFY0Mj3w==", "requires": { "@babel/runtime": "^7.10.4", - "@changesets/config": "^1.7.0", + "@changesets/config": "^2.0.0", "@changesets/get-version-range-type": "^0.3.2", - "@changesets/git": "^1.3.1", - "@changesets/types": "^4.1.0", + "@changesets/git": "^1.3.2", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "detect-indent": "^6.0.0", "fs-extra": "^7.0.1", @@ -28088,14 +28141,14 @@ } }, "@changesets/assemble-release-plan": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.1.1.tgz", - "integrity": "sha512-TQRZnK1sqYuoibJdSwpqE81rfDh0Xrkkr/M6bCQZ1ogGoRJNVbNYDWvNfkNvR4rEdRylri8cfKzffo/ruoy8QA==", + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@changesets/assemble-release-plan/-/assemble-release-plan-5.1.2.tgz", + "integrity": "sha512-nOFyDw4APSkY/vh5WNwGEtThPgEjVShp03PKVdId6wZTJALVcAALCSLmDRfeqjE2z9EsGJb7hZdDlziKlnqZgw==", "requires": { "@babel/runtime": "^7.10.4", "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.1", - "@changesets/types": "^4.1.0", + "@changesets/get-dependents-graph": "^1.3.2", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "semver": "^5.4.1" }, @@ -28108,32 +28161,32 @@ } }, "@changesets/changelog-git": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.10.tgz", - "integrity": "sha512-4t7zqPOv3aDZp4Y+AyDhiOG2ypaUXDpOz+MT1wOk3uSZNv78AaDByam0hdk5kfYuH1RlMecWU4/U5lO1ZL5eaA==", + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@changesets/changelog-git/-/changelog-git-0.1.11.tgz", + "integrity": "sha512-sWJvAm+raRPeES9usNpZRkooeEB93lOpUN0Lmjz5vhVAb7XGIZrHEJ93155bpE1S0c4oJ5Di9ZWgzIwqhWP/Wg==", "requires": { - "@changesets/types": "^4.1.0" + "@changesets/types": "^5.0.0" } }, "@changesets/cli": { - "version": "2.21.1", - "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.21.1.tgz", - "integrity": "sha512-4AJKo/UW0P217m2VHjiuhZy+CstLw54eu9I1fsY7tst76GeEN7mX0mVrTNEisR6CvOH7wLav3ITqvDcKVPbKsw==", + "version": "2.22.0", + "resolved": "https://registry.npmjs.org/@changesets/cli/-/cli-2.22.0.tgz", + "integrity": "sha512-4bA3YoBkd5cm5WUxmrR2N9WYE7EeQcM+R3bVYMUj2NvffkQVpU3ckAI+z8UICoojq+HRl2OEwtz+S5UBmYY4zw==", "requires": { "@babel/runtime": "^7.10.4", - "@changesets/apply-release-plan": "^5.0.5", - "@changesets/assemble-release-plan": "^5.1.1", - "@changesets/changelog-git": "^0.1.10", - "@changesets/config": "^1.7.0", + "@changesets/apply-release-plan": "^6.0.0", + "@changesets/assemble-release-plan": "^5.1.2", + "@changesets/changelog-git": "^0.1.11", + "@changesets/config": "^2.0.0", "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.1", - "@changesets/get-release-plan": "^3.0.7", - "@changesets/git": "^1.3.1", + "@changesets/get-dependents-graph": "^1.3.2", + "@changesets/get-release-plan": "^3.0.8", + "@changesets/git": "^1.3.2", "@changesets/logger": "^0.0.5", - "@changesets/pre": "^1.0.10", - "@changesets/read": "^0.5.4", - "@changesets/types": "^4.1.0", - "@changesets/write": "^0.1.7", + "@changesets/pre": "^1.0.11", + "@changesets/read": "^0.5.5", + "@changesets/types": "^5.0.0", + "@changesets/write": "^0.1.8", "@manypkg/get-packages": "^1.1.3", "@types/is-ci": "^3.0.0", "@types/semver": "^6.0.0", @@ -28147,6 +28200,7 @@ "outdent": "^0.5.0", "p-limit": "^2.2.0", "preferred-pm": "^3.0.0", + "resolve-from": "^5.0.0", "semver": "^5.4.1", "spawndamnit": "^2.0.0", "term-size": "^2.1.0", @@ -28161,14 +28215,14 @@ } }, "@changesets/config": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@changesets/config/-/config-1.7.0.tgz", - "integrity": "sha512-Ctk6ZO5Ay6oZ95bbKXyA2a1QG0jQUePaGCY6BKkZtUG4PgysesfmiQOPgOY5OsRMt8exJeo6l+DJ75YiKmh0rQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@changesets/config/-/config-2.0.0.tgz", + "integrity": "sha512-r5bIFY6CN3K6SQ+HZbjyE3HXrBIopONR47mmX7zUbORlybQXtympq9rVAOzc0Oflbap8QeIexc+hikfZoREXDg==", "requires": { "@changesets/errors": "^0.1.4", - "@changesets/get-dependents-graph": "^1.3.1", + "@changesets/get-dependents-graph": "^1.3.2", "@changesets/logger": "^0.0.5", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1", "micromatch": "^4.0.2" @@ -28183,11 +28237,11 @@ } }, "@changesets/get-dependents-graph": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.1.tgz", - "integrity": "sha512-HwUs8U0XK/ZqCQon1/80jJEyswS8JVmTiHTZslrTpuavyhhhxrSpO1eVCdKgaVHBRalOw3gRzdS3uzkmqYsQSQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.2.tgz", + "integrity": "sha512-tsqA6qZRB86SQuApSoDvI8yEWdyIlo/WLI4NUEdhhxLMJ0dapdeT6rUZRgSZzK1X2nv5YwR0MxQBbDAiDibKrg==", "requires": { - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "chalk": "^2.1.0", "fs-extra": "^7.0.1", @@ -28202,16 +28256,16 @@ } }, "@changesets/get-release-plan": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.7.tgz", - "integrity": "sha512-zDp6RIEKvERIF4Osy8sJ5BzqTiiLMhPWBO02y6w3nzTQJ0VBMaTs4hhwImQ/54O9I34eUHR3D0DwmwGQ27ifaw==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@changesets/get-release-plan/-/get-release-plan-3.0.8.tgz", + "integrity": "sha512-TJYiWNuP0Lzu2dL/KHuk75w7TkiE5HqoYirrXF7SJIxkhlgH9toQf2C7IapiFTObtuF1qDN8HJAX1CuIOwXldg==", "requires": { "@babel/runtime": "^7.10.4", - "@changesets/assemble-release-plan": "^5.1.1", - "@changesets/config": "^1.7.0", - "@changesets/pre": "^1.0.10", - "@changesets/read": "^0.5.4", - "@changesets/types": "^4.1.0", + "@changesets/assemble-release-plan": "^5.1.2", + "@changesets/config": "^2.0.0", + "@changesets/pre": "^1.0.11", + "@changesets/read": "^0.5.5", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3" } }, @@ -28221,13 +28275,13 @@ "integrity": "sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==" }, "@changesets/git": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/@changesets/git/-/git-1.3.1.tgz", - "integrity": "sha512-yg60QUi38VA0XGXdBy9SRYJhs8xJHE97Z1CaB/hFyByBlh5k1i+avFNBvvw66MsoT/aiml6y9scIG6sC8R5mfg==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@changesets/git/-/git-1.3.2.tgz", + "integrity": "sha512-p5UL+urAg0Nnpt70DLiBe2iSsMcDubTo9fTOD/61krmcJ466MGh71OHwdAwu1xG5+NKzeysdy1joRTg8CXcEXA==", "requires": { "@babel/runtime": "^7.10.4", "@changesets/errors": "^0.1.4", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "is-subdir": "^1.1.1", "spawndamnit": "^2.0.0" @@ -28242,53 +28296,53 @@ } }, "@changesets/parse": { - "version": "0.3.12", - "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.12.tgz", - "integrity": "sha512-FOBz2L1dT9PcvyQU1Qp2sQ0B4Jw7EgRDAKFVzAQwhzXqCq03TcE7vgKU6VSksCJAioMYDowdVVHNnv/Uak6yZQ==", + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@changesets/parse/-/parse-0.3.13.tgz", + "integrity": "sha512-wh9Ifa0dungY6d2nMz6XxF6FZ/1I7j+mEgPAqrIyKS64nifTh1Ua82qKKMMK05CL7i4wiB2NYc3SfnnCX3RVeA==", "requires": { - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "js-yaml": "^3.13.1" } }, "@changesets/pre": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.10.tgz", - "integrity": "sha512-cZC1C1wTSC17/TcTWivAQ4LAXz5jEYDuy3UeZiBz1wnTTzMHyTHLLwJi60juhl4hawXunDLw0mwZkcpS8Ivitg==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@changesets/pre/-/pre-1.0.11.tgz", + "integrity": "sha512-CXZnt4SV9waaC9cPLm7818+SxvLKIDHUxaiTXnJYDp1c56xIexx1BNfC1yMuOdzO2a3rAIcZua5Odxr3dwSKfg==", "requires": { "@babel/runtime": "^7.10.4", "@changesets/errors": "^0.1.4", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "@manypkg/get-packages": "^1.1.3", "fs-extra": "^7.0.1" } }, "@changesets/read": { - "version": "0.5.4", - "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.5.4.tgz", - "integrity": "sha512-12dTx+p5ztFs9QgJDGHRHR6HzTIbHct9S4lK2I/i6Qkz1cNfAPVIbdoMCdbPIWeLank9muMUjiiFmCWJD7tQIg==", + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@changesets/read/-/read-0.5.5.tgz", + "integrity": "sha512-bzonrPWc29Tsjvgh+8CqJ0apQOwWim0zheeD4ZK44ApSa/GudnZJTODtA3yNOOuQzeZmL0NUebVoHIurtIkA7w==", "requires": { "@babel/runtime": "^7.10.4", - "@changesets/git": "^1.3.1", + "@changesets/git": "^1.3.2", "@changesets/logger": "^0.0.5", - "@changesets/parse": "^0.3.12", - "@changesets/types": "^4.1.0", + "@changesets/parse": "^0.3.13", + "@changesets/types": "^5.0.0", "chalk": "^2.1.0", "fs-extra": "^7.0.1", "p-filter": "^2.1.0" } }, "@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==" + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-5.0.0.tgz", + "integrity": "sha512-IT1kBLSbAgTS4WtpU6P5ko054hq12vk4tgeIFRVE7Vnm4a/wgbNvBalgiKP0MjEXbCkZbItiGQHkCGxYWR55sA==" }, "@changesets/write": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.1.7.tgz", - "integrity": "sha512-6r+tc6u2l5BBIwEAh7ivRYWFir+XKiw0q/6Hx6NJA4dSN5fNu9uyWRQ+IMHCllD9dBcsh+e79sOepc+xT8l28g==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@changesets/write/-/write-0.1.8.tgz", + "integrity": "sha512-oIHeFVMuP6jf0TPnKPpaFpvvAf3JBc+s2pmVChbeEgQTBTALoF51Z9kqxQfG4XONZPHZnqkmy564c7qohhhhTQ==", "requires": { "@babel/runtime": "^7.10.4", - "@changesets/types": "^4.1.0", + "@changesets/types": "^5.0.0", "fs-extra": "^7.0.1", "human-id": "^1.0.2", "prettier": "^1.19.1" @@ -28533,9 +28587,9 @@ } }, "@ethersproject/bytes": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.0.tgz", - "integrity": "sha512-3hJPlYemb9V4VLfJF5BfN0+55vltPZSHU3QKUyP9M3Y2TcajbiRrz65UG+xVHOzBereB1b9mn7r12o177xgN7w==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.6.1.tgz", + "integrity": "sha512-NwQt7cKn5+ZE4uDn+X5RAXLp46E1chXoaMmrxAyA0rblpxz8t58lVkrHXoRIn0lz1joQElQ8410GqhTqMOwc6g==", "requires": { "@ethersproject/logger": "^5.6.0" } @@ -28641,9 +28695,9 @@ "integrity": "sha512-BiBWllUROH9w+P21RzoxJKzqoqpkyM1pRnEKG69bulE9TSQD8SAIvTQqIMZmmCO8pUNkgLP1wndX1gKghSpBmg==" }, "@ethersproject/networks": { - "version": "5.6.0", - "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.0.tgz", - "integrity": "sha512-DaVzgyThzHgSDLuURhvkp4oviGoGe9iTZW4jMEORHDRCgSZ9K9THGFKqL+qGXqPAYLEgZTf5z2w56mRrPR1MjQ==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@ethersproject/networks/-/networks-5.6.1.tgz", + "integrity": "sha512-b2rrupf3kCTcc3jr9xOWBuHylSFtbpJf79Ga7QR98ienU2UqGimPGEsYMgbI29KHJfA5Us89XwGVmxrlxmSrMg==", "requires": { "@ethersproject/logger": "^5.6.0" } @@ -28666,9 +28720,9 @@ } }, "@ethersproject/providers": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.1.tgz", - "integrity": "sha512-w8Wx15nH+aVDvnoKCyI1f3x0B5idmk/bDJXMEUqCfdO8Eadd0QpDx9lDMTMmenhOmf9vufLJXjpSm24D3ZnVpg==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/@ethersproject/providers/-/providers-5.6.2.tgz", + "integrity": "sha512-6/EaFW/hNWz+224FXwl8+HdMRzVHt8DpPmu5MZaIQqx/K/ELnC9eY236SMV7mleCM3NnEArFwcAAxH5kUUgaRg==", "requires": { "@ethersproject/abstract-provider": "^5.6.0", "@ethersproject/abstract-signer": "^5.6.0", @@ -29574,6 +29628,11 @@ "read-yaml-file": "^1.1.0" }, "dependencies": { + "@changesets/types": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", + "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==" + }, "fs-extra": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", @@ -29903,9 +29962,9 @@ } }, "@semantic-release/github": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.2.tgz", - "integrity": "sha512-wIbfhOeuxlYzMTjtSAa2xgr54n7ZuPAS2gadyTWBpUt2PNAPgla7A6XxCXJnaKPgfVF0iFfSk3B+KlVKk6ByVg==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.4.tgz", + "integrity": "sha512-But4e8oqqP3anZI5tjzZssZc2J6eoUdeeE0s7LVKKwyiAXJiQDWNNvtPOpgG2DsIz4+Exuse7cEQgjGMxwtLmg==", "dev": true, "requires": { "@octokit/rest": "^18.0.0", @@ -30004,12 +30063,12 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } }, "universalify": { @@ -30196,15 +30255,15 @@ } }, "@types/json-schema": { - "version": "7.0.10", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.10.tgz", - "integrity": "sha512-BLO9bBq59vW3fxCpD4o0N4U+DXsvwvIcl+jofw0frQo/GrBFC+/jRZj1E7kgp6dvTyNmA4y6JCV5Id/r3mNP5A==", + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, "@types/lodash": { - "version": "4.14.180", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.180.tgz", - "integrity": "sha512-XOKXa1KIxtNXgASAnwj7cnttJxS4fksBRywK/9LzRV5YxrF80BXZIGeQSuoESQ/VkUj30Ae0+YcuHc15wJCB2g==", + "version": "4.14.181", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", "dev": true }, "@types/lodash.difference": { @@ -30324,14 +30383,14 @@ "dev": true }, "@typescript-eslint/eslint-plugin": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.16.0.tgz", - "integrity": "sha512-SJoba1edXvQRMmNI505Uo4XmGbxCK9ARQpkvOd00anxzri9RNQk0DDCxD+LIl+jYhkzOJiOMMKYEHnHEODjdCw==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.18.0.tgz", + "integrity": "sha512-tzrmdGMJI/uii9/V6lurMo4/o+dMTKDH82LkNjhJ3adCW22YQydoRs5MwTiqxGF9CSYxPxQ7EYb4jLNlIs+E+A==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/type-utils": "5.16.0", - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/type-utils": "5.18.0", + "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", @@ -30341,63 +30400,63 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } } } }, "@typescript-eslint/parser": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.16.0.tgz", - "integrity": "sha512-fkDq86F0zl8FicnJtdXakFs4lnuebH6ZADDw6CYQv0UZeIjHvmEw87m9/29nk2Dv5Lmdp0zQ3zDQhiMWQf/GbA==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.18.0.tgz", + "integrity": "sha512-+08nYfurBzSSPndngnHvFw/fniWYJ5ymOrn/63oMIbgomVQOvIDhBoJmYZ9lwQOCnQV9xHGvf88ze3jFGUYooQ==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", "debug": "^4.3.2" } }, "@typescript-eslint/scope-manager": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.16.0.tgz", - "integrity": "sha512-P+Yab2Hovg8NekLIR/mOElCDPyGgFZKhGoZA901Yax6WR6HVeGLbsqJkZ+Cvk5nts/dAlFKm8PfL43UZnWdpIQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.18.0.tgz", + "integrity": "sha512-C0CZML6NyRDj+ZbMqh9FnPscg2PrzSaVQg3IpTmpe0NURMVBXlghGZgMYqBw07YW73i0MCqSDqv2SbywnCS8jQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0" + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0" } }, "@typescript-eslint/type-utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.16.0.tgz", - "integrity": "sha512-SKygICv54CCRl1Vq5ewwQUJV/8padIWvPgCxlWPGO/OgQLCijY9G7lDu6H+mqfQtbzDNlVjzVWQmeqbLMBLEwQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.18.0.tgz", + "integrity": "sha512-vcn9/6J5D6jtHxpEJrgK8FhaM8r6J1/ZiNu70ZUJN554Y3D9t3iovi6u7JF8l/e7FcBIxeuTEidZDR70UuCIfA==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.16.0", + "@typescript-eslint/utils": "5.18.0", "debug": "^4.3.2", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.16.0.tgz", - "integrity": "sha512-oUorOwLj/3/3p/HFwrp6m/J2VfbLC8gjW5X3awpQJ/bSG+YRGFS4dpsvtQ8T2VNveV+LflQHjlLvB6v0R87z4g==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.18.0.tgz", + "integrity": "sha512-bhV1+XjM+9bHMTmXi46p1Led5NP6iqQcsOxgx7fvk6gGiV48c6IynY0apQb7693twJDsXiVzNXTflhplmaiJaw==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.16.0.tgz", - "integrity": "sha512-SE4VfbLWUZl9MR+ngLSARptUv2E8brY0luCdgmUevU6arZRY/KxYoLI/3V/yxaURR8tLRN7bmZtJdgmzLHI6pQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.18.0.tgz", + "integrity": "sha512-wa+2VAhOPpZs1bVij9e5gyVu60ReMi/KuOx4LKjGx2Y3XTNUDJgQ+5f77D49pHtqef/klglf+mibuHs9TrPxdQ==", "dev": true, "requires": { - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/visitor-keys": "5.16.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/visitor-keys": "5.18.0", "debug": "^4.3.2", "globby": "^11.0.4", "is-glob": "^4.0.3", @@ -30406,71 +30465,71 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } } } }, "@typescript-eslint/utils": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.16.0.tgz", - "integrity": "sha512-iYej2ER6AwmejLWMWzJIHy3nPJeGDuCqf8Jnb+jAQVoPpmWzwQOfa9hWVB8GIQE5gsCv/rfN4T+AYb/V06WseQ==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.18.0.tgz", + "integrity": "sha512-+hFGWUMMri7OFY26TsOlGa+zgjEy1ssEipxpLjtl4wSll8zy85x0GrUSju/FHdKfVorZPYJLkF3I4XPtnCTewA==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.16.0", - "@typescript-eslint/types": "5.16.0", - "@typescript-eslint/typescript-estree": "5.16.0", + "@typescript-eslint/scope-manager": "5.18.0", + "@typescript-eslint/types": "5.18.0", + "@typescript-eslint/typescript-estree": "5.18.0", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.16.0.tgz", - "integrity": "sha512-jqxO8msp5vZDhikTwq9ubyMHqZ67UIvawohr4qF3KhlpL7gzSjOd+8471H3nh5LyABkaI85laEKKU8SnGUK5/g==", + "version": "5.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.18.0.tgz", + "integrity": "sha512-Hf+t+dJsjAKpKSkg3EHvbtEpFFb/1CiOHnvI8bjHgOD4/wAw3gKrA0i94LrbekypiZVanJu3McWJg7rWDMzRTg==", "dev": true, "requires": { - "@typescript-eslint/types": "5.16.0", + "@typescript-eslint/types": "5.18.0", "eslint-visitor-keys": "^3.0.0" } }, "@walletconnect/browser-utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.7.5.tgz", - "integrity": "sha512-gm9ufi0n5cGBXoGWDtMVSqIJ0eXYW+ZFuTNVN0fm4oal26J7cPrOdFjzhv5zvx5fKztWQ21DNFZ+PRXBjXg04Q==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/browser-utils/-/browser-utils-1.7.7.tgz", + "integrity": "sha512-6Mt7DSPaG0FKnHhuVzkU1hgtsCpGvl2nfbfRytLpyDY05iWMzMg5uK1DzV+0k4hCt9pVli0JVNt6dh9a6Xm94w==", "requires": { "@walletconnect/safe-json": "1.0.0", - "@walletconnect/types": "^1.7.5", + "@walletconnect/types": "^1.7.7", "@walletconnect/window-getters": "1.0.0", "@walletconnect/window-metadata": "1.0.0", "detect-browser": "5.2.0" } }, "@walletconnect/client": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/client/-/client-1.7.5.tgz", - "integrity": "sha512-Vh3h1kfhmJ4Jx//H0lmmfDc5Q2s+R73Nh5cetVN41QPRrAcqHE4lR2ZS8XxRCNBl4/gcHZJIZS9J2Ui4tTXBLA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/client/-/client-1.7.7.tgz", + "integrity": "sha512-UuDkpXDc1Emx09aGXKz2Fg8omNp5J8ZRgNblnQTb8xnoQ8rgOJSyhbFR37PFIFwVpriZZDAgmy8HlqoGwLQ2ug==", "requires": { - "@walletconnect/core": "^1.7.5", - "@walletconnect/iso-crypto": "^1.7.5", - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5" + "@walletconnect/core": "^1.7.7", + "@walletconnect/iso-crypto": "^1.7.7", + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7" } }, "@walletconnect/core": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-1.7.5.tgz", - "integrity": "sha512-c4B8s9fZ/Ah2p460Hxo4e9pwLQVYT2+dVYAfqaxVzfYjhAokDEtO55Bdm1hujtRjQVqwTvCljKxBB+LgMp3k8w==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/core/-/core-1.7.7.tgz", + "integrity": "sha512-XsF2x4JcBS1V2Nk/Uh38dU7ZlLmW/R5oxHp4+tVgCwTID6nZlo3vUSHBOqM7jgDRblKOHixANollm0r94bM8Cg==", "requires": { - "@walletconnect/socket-transport": "^1.7.5", - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5" + "@walletconnect/socket-transport": "^1.7.7", + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7" } }, "@walletconnect/crypto": { @@ -30515,13 +30574,13 @@ } }, "@walletconnect/iso-crypto": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/iso-crypto/-/iso-crypto-1.7.5.tgz", - "integrity": "sha512-mJdRs2SqAPOLBBqLhU+ZnAh2c8TL2uDuL/ojV4aBzZ0ZHNT7X2zSOjAiixCb3vvH8GAt30OKmiRo3+ChI/9zvA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/iso-crypto/-/iso-crypto-1.7.7.tgz", + "integrity": "sha512-t8RKJZkFtFyWMFrl0jPz/3RAGhM5yext+MLFq3L/KTPxLgMZuT1yFHRUiV7cAN3+LcCmk6Sy/rV1yQPTiB158Q==", "requires": { "@walletconnect/crypto": "^1.0.2", - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5" + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7" } }, "@walletconnect/jsonrpc-http-connection": { @@ -30535,9 +30594,9 @@ } }, "@walletconnect/jsonrpc-provider": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.2.tgz", - "integrity": "sha512-7sIjzg27I7noPRULYTV2QEWWNV3+d3f5T7ym8VTtCRoA1Xf+SoN9cZJotO0GCCk0jVcvN2BX3DCSq6WbcCi4Eg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.3.tgz", + "integrity": "sha512-DmSBKEB+RYngQgAbbDtJTUFdgyKvnWJD8bsM2QR1e2fyEUGUaq+z3QXixrMAsMW3tI8EuVlklEd7ayb6oyFpZw==", "requires": { "@walletconnect/jsonrpc-utils": "^1.0.0", "@walletconnect/safe-json": "^1.0.0" @@ -30566,13 +30625,13 @@ "integrity": "sha512-ZtKRio4uCZ1JUF7LIdecmZt7FOLnX72RPSY7aUVu7mj7CSfxDwUn6gBuK6WGtH+NZCldBqDl5DenI5fFSvkKYw==" }, "@walletconnect/qrcode-modal": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.7.5.tgz", - "integrity": "sha512-LVq35jc3VMGq1EMcGCObQtEiercMDmUHDnc7A3AmUo0LoAbaPo6c8Hq0zqy2+JhtLmxUhU3ktf+szmCoiUDTUQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/qrcode-modal/-/qrcode-modal-1.7.7.tgz", + "integrity": "sha512-HRzw6g4P8/C4ClJYJShaGfdvjfrTfkXv+eb+IylWGWvC8IQhuiSXCq5+F3t0CXxuZs3ir26abgviEMRFQxGKdA==", "requires": { - "@walletconnect/browser-utils": "^1.7.5", + "@walletconnect/browser-utils": "^1.7.7", "@walletconnect/mobile-registry": "^1.4.0", - "@walletconnect/types": "^1.7.5", + "@walletconnect/types": "^1.7.7", "copy-to-clipboard": "^3.3.1", "preact": "10.4.1", "qrcode": "1.4.4" @@ -30594,25 +30653,25 @@ "integrity": "sha512-QJzp/S/86sUAgWY6eh5MKYmSfZaRpIlmCJdi5uG4DJlKkZrHEF7ye7gA+VtbVzvTtpM/gRwO2plQuiooIeXjfg==" }, "@walletconnect/signer-connection": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/signer-connection/-/signer-connection-1.7.5.tgz", - "integrity": "sha512-O7WO1Yqu8eBDfUJYeEkQDV2LDvj5JvAltTRn7El0IYOjK/T979c4NvyBpjHv9rp0eKX6/60foynj4D/h9hA4ew==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/signer-connection/-/signer-connection-1.7.7.tgz", + "integrity": "sha512-mS0Y4k9ckXJwcK1ACI1TAVQtp4oBvZIQw7ErxbRwqVQzmmYEVddKVHLbNm73yWtf+QMGGzGJLn4K/B+qM2TRpw==", "requires": { - "@walletconnect/client": "^1.7.5", + "@walletconnect/client": "^1.7.7", "@walletconnect/jsonrpc-types": "^1.0.0", "@walletconnect/jsonrpc-utils": "^1.0.0", - "@walletconnect/qrcode-modal": "^1.7.5", - "@walletconnect/types": "^1.7.5", + "@walletconnect/qrcode-modal": "^1.7.7", + "@walletconnect/types": "^1.7.7", "eventemitter3": "4.0.7" } }, "@walletconnect/socket-transport": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/socket-transport/-/socket-transport-1.7.5.tgz", - "integrity": "sha512-4TYCxrNWb4f5a1NGsALXidr+/6dOiqgVfUQJ4fdP6R7ijL+7jtdiktguU9FIDq5wFXRE+ZdpCpwSAfOt60q/mQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/socket-transport/-/socket-transport-1.7.7.tgz", + "integrity": "sha512-RxeFkT+5BqdaZzPtPYIw6+KSVh6Q1NaYqTiAzWWh9RPuvuTajIEsi+fUXizfkpmyi9UTYBvdFXnKcB+eSImpDg==", "requires": { - "@walletconnect/types": "^1.7.5", - "@walletconnect/utils": "^1.7.5", + "@walletconnect/types": "^1.7.7", + "@walletconnect/utils": "^1.7.7", "ws": "7.5.3" }, "dependencies": { @@ -30630,14 +30689,14 @@ "integrity": "sha512-yXJrLxwLLCXtWgd/e8FjfY9v5DKds12Z7EEPzUrPSq6v7WtXpqate577KwlFQ6UYzioQzIEDE8+98j+0aiZbsw==" }, "@walletconnect/utils": { - "version": "1.7.5", - "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-1.7.5.tgz", - "integrity": "sha512-U954rIIA/g/Cmdqy+n3hMY1DDMmXxGs8w/QmrK9b/H5nkQ3e4QicOyynq5g/JTTesN5HZdDTFiyX9r0GSKa+iA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/@walletconnect/utils/-/utils-1.7.7.tgz", + "integrity": "sha512-slNlnROS4DEusGFx53hshIBylYhzd5JtGF+AJpza+Tc616+u8ozjQ9aKKUaV85bucnv5Q42bTwLYrYrXiydmuw==", "requires": { - "@walletconnect/browser-utils": "^1.7.5", + "@walletconnect/browser-utils": "^1.7.7", "@walletconnect/encoding": "^1.0.1", "@walletconnect/jsonrpc-utils": "^1.0.0", - "@walletconnect/types": "^1.7.5", + "@walletconnect/types": "^1.7.7", "bn.js": "4.11.8", "js-sha3": "0.8.0", "query-string": "6.13.5" @@ -31439,15 +31498,15 @@ } }, "@babel/helper-create-class-features-plugin": { - "version": "7.17.6", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.6.tgz", - "integrity": "sha512-SogLLSxXm2OkBbSsHZMM4tUi8fUzjs63AT/d0YQIzr6GSd8Hxsbk2KYDX0k0DweAzGMj/YWeiCsorIdtdcW8Eg==", + "version": "7.17.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", "dev": true, "requires": { "@babel/helper-annotate-as-pure": "^7.16.7", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", "@babel/helper-optimise-call-expression": "^7.16.7", "@babel/helper-replace-supers": "^7.16.7", "@babel/helper-split-export-declaration": "^7.16.7" @@ -31942,9 +32001,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001319", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001319.tgz", - "integrity": "sha512-xjlIAFHucBRSMUo1kb5D4LYgcN1M45qdKP++lhqowDpwJwGkpIRTt5qQqnhxjj1vHcI7nrJxWhCC1ATrCEBTcw==", + "version": "1.0.30001325", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", + "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==", "dev": true }, "capture-exit": { @@ -32471,6 +32530,17 @@ "dev": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "meow": { @@ -32505,12 +32575,12 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } } } @@ -32521,6 +32591,12 @@ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -32560,6 +32636,17 @@ "dev": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "meow": { @@ -32594,12 +32681,12 @@ } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } }, "type-fest": { @@ -32608,6 +32695,12 @@ "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, "yargs-parser": { "version": "20.2.9", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", @@ -33348,6 +33441,16 @@ "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "didkit-wasm": { + "version": "0.1.9", + "resolved": "https://registry.npmjs.org/didkit-wasm/-/didkit-wasm-0.1.9.tgz", + "integrity": "sha512-K5+bF4shQxb9cmespZsRF1IFMIeB04jW36Gq+s9g1hmPSGl9ZfvYgDqNRUwoYg2pGhGCmES/HmI2gHy1xTZ9Cw==" + }, + "didkit-wasm-node": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/didkit-wasm-node/-/didkit-wasm-node-0.1.6.tgz", + "integrity": "sha512-qvPd4CyuPTJIlWrcoAPXlMu4247o6lBzpUfNC2cDbzlCaNdXp8WT2v+6IZSG+K1w7ZuLtO+GTHMPDTii22H9fA==" + }, "diff-sequences": { "version": "26.6.2", "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-26.6.2.tgz", @@ -33387,9 +33490,9 @@ }, "dependencies": { "domelementtype": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", - "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", "dev": true } } @@ -33528,9 +33631,9 @@ } }, "electron-to-chromium": { - "version": "1.4.89", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.89.tgz", - "integrity": "sha512-z1Axg0Fu54fse8wN4fd+GAINdU5mJmLtcl6bqIcYyzNVGONcfHAeeJi88KYMQVKalhXlYuVPzKkFIU5VD0raUw==", + "version": "1.4.106", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.106.tgz", + "integrity": "sha512-ZYfpVLULm67K7CaaGP7DmjyeMY4naxsbTy+syVVxT6QHI1Ww8XbJjmr9fDckrhq44WzCrcC5kH3zGpdusxwwqg==", "dev": true }, "elliptic": { @@ -33619,9 +33722,9 @@ } }, "es-abstract": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.1.tgz", - "integrity": "sha512-2vJ6tjA/UfqLm2MPs7jxVybLoB8i1t1Jd9R3kISld20sIxPcTbLuggQOUxeWeAvIUkduv/CfMjuh4WmiXr2v9w==", + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.19.2.tgz", + "integrity": "sha512-gfSBJoZdlL2xRiOCy0g8gLMryhoe1TlimjzU99L/31Z8QEGIhVQI+EWwt5lT+AuU9SnorVupXFqqOGqGfsyO6w==", "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", @@ -33629,15 +33732,15 @@ "get-intrinsic": "^1.1.1", "get-symbol-description": "^1.0.0", "has": "^1.0.3", - "has-symbols": "^1.0.2", + "has-symbols": "^1.0.3", "internal-slot": "^1.0.3", "is-callable": "^1.2.4", - "is-negative-zero": "^2.0.1", + "is-negative-zero": "^2.0.2", "is-regex": "^1.1.4", "is-shared-array-buffer": "^1.0.1", "is-string": "^1.0.7", - "is-weakref": "^1.0.1", - "object-inspect": "^1.11.0", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", "object-keys": "^1.1.1", "object.assign": "^4.1.2", "string.prototype.trimend": "^1.0.4", @@ -33753,9 +33856,9 @@ } }, "eslint": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.11.0.tgz", - "integrity": "sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==", + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.12.0.tgz", + "integrity": "sha512-it1oBL9alZg1S8UycLm5YDMAkIhtH6FtAzuZs6YvoGVldWjbS08BkAdb/ymP9LlAyq8koANu32U7Ib/w+UNh8Q==", "dev": true, "requires": { "@eslint/eslintrc": "^1.2.1", @@ -34084,9 +34187,9 @@ } }, "ethers": { - "version": "5.6.1", - "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.1.tgz", - "integrity": "sha512-qtl/2W+dwmUa5Z3JqwsbV3JEBZZHNARe5K/A2ePcNAuhJYnEKIgGOT/O9ouPwBijSqVoQnmQMzi5D48LFNOY2A==", + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-5.6.2.tgz", + "integrity": "sha512-EzGCbns24/Yluu7+ToWnMca3SXJ1Jk1BvWB7CCmVNxyOeM4LLvw2OLuIHhlkhQk1dtOcj9UMsdkxUh8RiG1dxQ==", "requires": { "@ethersproject/abi": "5.6.0", "@ethersproject/abstract-provider": "5.6.0", @@ -34095,7 +34198,7 @@ "@ethersproject/base64": "5.6.0", "@ethersproject/basex": "5.6.0", "@ethersproject/bignumber": "5.6.0", - "@ethersproject/bytes": "5.6.0", + "@ethersproject/bytes": "5.6.1", "@ethersproject/constants": "5.6.0", "@ethersproject/contracts": "5.6.0", "@ethersproject/hash": "5.6.0", @@ -34103,10 +34206,10 @@ "@ethersproject/json-wallets": "5.6.0", "@ethersproject/keccak256": "5.6.0", "@ethersproject/logger": "5.6.0", - "@ethersproject/networks": "5.6.0", + "@ethersproject/networks": "5.6.1", "@ethersproject/pbkdf2": "5.6.0", "@ethersproject/properties": "5.6.0", - "@ethersproject/providers": "5.6.1", + "@ethersproject/providers": "5.6.2", "@ethersproject/random": "5.6.0", "@ethersproject/rlp": "5.6.0", "@ethersproject/sha2": "5.6.0", @@ -35764,9 +35867,9 @@ } }, "graceful-fs": { - "version": "4.2.9", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", - "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" + "version": "4.2.10", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" }, "grapheme-splitter": { "version": "1.0.4", @@ -36695,9 +36798,9 @@ "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==" }, "is-number-object": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.6.tgz", - "integrity": "sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", "requires": { "has-tostringtag": "^1.0.0" } @@ -36773,9 +36876,12 @@ "integrity": "sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==" }, "is-shared-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.1.tgz", - "integrity": "sha512-IU0NmyknYZN0rChcKhRO1X8LYz5Isj/Fsqh8NJOSf+N/hCOTwy29F32Ik7a+QszE63IdvmwdTPDd6cZ5pg4cwA==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "2.0.1", @@ -38308,12 +38414,12 @@ "dev": true }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } }, "supports-color": { @@ -39252,21 +39358,10 @@ } }, "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - }, - "dependencies": { - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } - } + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", + "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", + "dev": true }, "lunr": { "version": "2.3.9", @@ -39436,12 +39531,12 @@ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==" }, "micromatch": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", - "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { - "braces": "^3.0.1", - "picomatch": "^2.2.3" + "braces": "^3.0.2", + "picomatch": "^2.3.1" } }, "mime": { @@ -39800,9 +39895,9 @@ } }, "node-gyp-build": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.3.0.tgz", - "integrity": "sha512-iWjXZvmboq0ja1pUGULQBexmxq8CV4xBhX7VDOTbL7ZR4FOowwY/VOtRxBN/yKxmdGoIp4j5ysNT4u3S2pDQ3Q==" + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.4.0.tgz", + "integrity": "sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==" }, "node-int64": { "version": "0.4.0", @@ -39826,13 +39921,13 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "optional": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } }, "uuid": { @@ -39863,12 +39958,12 @@ }, "dependencies": { "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } }, "rimraf": { @@ -39971,15 +40066,16 @@ "dev": true }, "npm": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.5.5.tgz", - "integrity": "sha512-a1vl26nokCNlD+my/iNYmOUPx/hpYR4ZyZk8gb7/A2XXtrPZf2gTSJOnVjS77jQS+BSfIVQpipZwXWCL0+5wzg==", + "version": "8.6.0", + "resolved": "https://registry.npmjs.org/npm/-/npm-8.6.0.tgz", + "integrity": "sha512-icekvN8FJFESIFkLaFEVl05Nocl5Id5HnoVhJzhCUvtNY8tj9kfUlH/J527fZq/8ltsAUqpettfutwRjQYS2fA==", "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/arborist": "^5.0.3", + "@npmcli/arborist": "^5.0.4", "@npmcli/ci-detect": "^2.0.0", "@npmcli/config": "^4.0.1", + "@npmcli/fs": "^2.1.0", "@npmcli/map-workspaces": "^2.0.2", "@npmcli/package-json": "^1.0.1", "@npmcli/run-script": "^3.0.1", @@ -39987,7 +40083,7 @@ "ansicolors": "~0.3.2", "ansistyles": "~0.1.3", "archy": "~1.0.0", - "cacache": "^16.0.2", + "cacache": "^16.0.3", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", @@ -39998,7 +40094,7 @@ "graceful-fs": "^4.2.9", "hosted-git-info": "^5.0.0", "ini": "^2.0.0", - "init-package-json": "^3.0.1", + "init-package-json": "^3.0.2", "is-cidr": "^4.0.2", "json-parse-even-better-errors": "^2.3.1", "libnpmaccess": "^6.0.2", @@ -40012,7 +40108,7 @@ "libnpmsearch": "^5.0.2", "libnpmteam": "^4.0.2", "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.0.6", + "make-fetch-happen": "^10.1.1", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", @@ -40020,18 +40116,18 @@ "ms": "^2.1.2", "node-gyp": "^9.0.0", "nopt": "^5.0.0", - "npm-audit-report": "^2.1.5", + "npm-audit-report": "^3.0.0", "npm-install-checks": "^4.0.0", "npm-package-arg": "^9.0.1", "npm-pick-manifest": "^7.0.0", "npm-profile": "^6.0.2", - "npm-registry-fetch": "^13.0.1", + "npm-registry-fetch": "^13.1.0", "npm-user-validate": "^1.0.1", "npmlog": "^6.0.1", "opener": "^1.5.2", "pacote": "^13.0.5", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", + "parse-conflict-json": "^2.0.2", + "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", "read": "~1.0.7", "read-package-json": "^5.0.0", @@ -40044,7 +40140,7 @@ "text-table": "~0.2.0", "tiny-relative-date": "^1.3.0", "treeverse": "^1.0.4", - "validate-npm-package-name": "~3.0.0", + "validate-npm-package-name": "^4.0.0", "which": "^2.0.2", "write-file-atomic": "^4.0.1" }, @@ -40060,7 +40156,7 @@ "dev": true }, "@npmcli/arborist": { - "version": "5.0.3", + "version": "5.0.4", "bundled": true, "dev": true, "requires": { @@ -40129,11 +40225,11 @@ } }, "@npmcli/fs": { - "version": "1.1.0", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { - "@gar/promisify": "^1.0.1", + "@gar/promisify": "^1.1.3", "semver": "^7.3.5" } }, @@ -40365,22 +40461,25 @@ } }, "builtins": { - "version": "1.0.3", + "version": "5.0.0", "bundled": true, - "dev": true + "dev": true, + "requires": { + "semver": "^7.0.0" + } }, "cacache": { - "version": "16.0.2", + "version": "16.0.3", "bundled": true, "dev": true, "requires": { - "@npmcli/fs": "^1.0.0", + "@npmcli/fs": "^2.1.0", "@npmcli/move-file": "^1.1.2", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", "glob": "^7.2.0", "infer-owner": "^1.0.4", - "lru-cache": "^7.5.1", + "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-flush": "^1.0.5", @@ -40501,7 +40600,7 @@ "dev": true }, "debug": { - "version": "4.3.3", + "version": "4.3.4", "bundled": true, "dev": true, "requires": { @@ -40600,7 +40699,7 @@ "dev": true }, "gauge": { - "version": "4.0.3", + "version": "4.0.4", "bundled": true, "dev": true, "requires": { @@ -40742,17 +40841,17 @@ "dev": true }, "init-package-json": { - "version": "3.0.1", + "version": "3.0.2", "bundled": true, "dev": true, "requires": { - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "promzard": "^0.3.0", "read": "^1.0.7", "read-package-json": "^5.0.0", "semver": "^7.3.5", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" } }, "ip": { @@ -40817,7 +40916,7 @@ "dev": true }, "just-diff-apply": { - "version": "4.0.1", + "version": "5.2.0", "bundled": true, "dev": true }, @@ -40945,22 +41044,22 @@ } }, "lru-cache": { - "version": "7.5.1", + "version": "7.7.1", "bundled": true, "dev": true }, "make-fetch-happen": { - "version": "10.0.6", + "version": "10.1.1", "bundled": true, "dev": true, "requires": { "agentkeepalive": "^4.2.1", - "cacache": "^16.0.0", + "cacache": "^16.0.2", "http-cache-semantics": "^4.1.0", "http-proxy-agent": "^5.0.0", "https-proxy-agent": "^5.0.0", "is-lambda": "^1.0.1", - "lru-cache": "^7.5.1", + "lru-cache": "^7.7.1", "minipass": "^3.1.6", "minipass-collect": "^1.0.2", "minipass-fetch": "^2.0.3", @@ -40997,7 +41096,7 @@ } }, "minipass-fetch": { - "version": "2.0.3", + "version": "2.1.0", "bundled": true, "dev": true, "requires": { @@ -41116,7 +41215,7 @@ } }, "npm-audit-report": { - "version": "2.1.5", + "version": "3.0.0", "bundled": true, "dev": true, "requires": { @@ -41145,13 +41244,13 @@ "dev": true }, "npm-package-arg": { - "version": "9.0.1", + "version": "9.0.2", "bundled": true, "dev": true, "requires": { "hosted-git-info": "^5.0.0", "semver": "^7.3.5", - "validate-npm-package-name": "^3.0.0" + "validate-npm-package-name": "^4.0.0" } }, "npm-packlist": { @@ -41186,16 +41285,16 @@ } }, "npm-registry-fetch": { - "version": "13.0.1", + "version": "13.1.0", "bundled": true, "dev": true, "requires": { - "make-fetch-happen": "^10.0.3", + "make-fetch-happen": "^10.0.6", "minipass": "^3.1.6", - "minipass-fetch": "^2.0.1", + "minipass-fetch": "^2.0.3", "minipass-json-stream": "^1.0.1", "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.0", + "npm-package-arg": "^9.0.1", "proc-log": "^2.0.0" } }, @@ -41265,13 +41364,13 @@ } }, "parse-conflict-json": { - "version": "2.0.1", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { "json-parse-even-better-errors": "^2.3.1", "just-diff": "^5.0.1", - "just-diff-apply": "^4.0.1" + "just-diff-apply": "^5.2.0" } }, "path-is-absolute": { @@ -41280,7 +41379,7 @@ "dev": true }, "proc-log": { - "version": "2.0.0", + "version": "2.0.1", "bundled": true, "dev": true }, @@ -41585,11 +41684,11 @@ } }, "validate-npm-package-name": { - "version": "3.0.0", + "version": "4.0.0", "bundled": true, "dev": true, "requires": { - "builtins": "^1.0.3" + "builtins": "^5.0.0" } }, "walk-up-path": { @@ -43134,9 +43233,9 @@ } }, "postcss-selector-parser": { - "version": "6.0.9", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.9.tgz", - "integrity": "sha512-UO3SgnZOVTwu4kyLR22UQ1xZh086RyNZppb7lLAKBFK8a32ttG5i87Y/P3+2bRSjZNyJ1B7hfFNo273tKe9YxQ==", + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -43237,9 +43336,9 @@ "dev": true }, "prettier": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.0.tgz", - "integrity": "sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==", + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", "dev": true }, "prettier-linter-helpers": { @@ -44512,16 +44611,33 @@ "dev": true, "requires": { "lru-cache": "^6.0.0" + }, + "dependencies": { + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + } } }, "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true } } }, @@ -45815,12 +45931,12 @@ }, "dependencies": { "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } } } @@ -45847,12 +45963,12 @@ }, "dependencies": { "mkdirp": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", - "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "^1.2.5" + "minimist": "^1.2.6" } } } @@ -46142,12 +46258,12 @@ }, "dependencies": { "semver": { - "version": "7.3.5", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", - "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "version": "7.3.6", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.6.tgz", + "integrity": "sha512-HZWqcgwLsjaX1HBD31msI/rXktuIhS+lWvdE4kN9z+8IVT4Itc7vqU2WvYsyD6/sjYCt4dEKH/m1M3dwI9CC5w==", "dev": true, "requires": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" } }, "yargs-parser": { @@ -46344,9 +46460,9 @@ } }, "typedoc": { - "version": "0.22.13", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.13.tgz", - "integrity": "sha512-NHNI7Dr6JHa/I3+c62gdRNXBIyX7P33O9TafGLd07ur3MqzcKgwTvpg18EtvCLHJyfeSthAtCLpM7WkStUmDuQ==", + "version": "0.22.14", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.22.14.tgz", + "integrity": "sha512-tlf9wIcsrnQSjetStrnRutuy2RjZkG5PK2umwveZLTkuC2K9VywOZTdu2G19BdOPzGrhZjf9WK7pthXqnFQejg==", "dev": true, "requires": { "glob": "^7.2.0", @@ -46386,9 +46502,9 @@ } }, "typescript": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz", - "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==", + "version": "4.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.3.tgz", + "integrity": "sha512-yNIatDa5iaofVozS/uQJEl3JRWLKKGJKh6Yaiv0GLGSuhpFJe7P3SbHZ8/yjAHRQwKRoA6YZqlfjXWmVzoVSMw==", "dev": true }, "typical": { diff --git a/package.json b/package.json index 11d67f13..6689c099 100644 --- a/package.json +++ b/package.json @@ -80,6 +80,8 @@ "axios": "^0.26.0", "base64url": "^3.0.1", "concurrently": "^6.1.0", + "didkit-wasm": "^0.1.9", + "didkit-wasm-node": "^0.1.6", "eth-ens-namehash": "^2.0.8", "ethers": "^5.6.1", "js-sha3": "^0.8.0", diff --git a/src/errors/ErrorMessages.ts b/src/errors/ErrorMessages.ts index e31b6081..50d0d149 100644 --- a/src/errors/ErrorMessages.ts +++ b/src/errors/ErrorMessages.ts @@ -25,4 +25,5 @@ export enum ERROR_MESSAGES { TOKEN_REQUIRED_FOR_OFF_CHAIN_REGISTRATION = 'token required for off-chain registration', ENS_OWNER_NOT_VALID_ADDRESS = 'Provided owner is not a valid address. Owner of ENS domain must be an address', IS_ETH_SIGNER_NOT_SET = 'Can not determine if signer is conformant with eth_sign specification', + SIGN_TYPED_DATA_NOT_SUPPORTED = 'Sign typed data not supported', } diff --git a/src/index.ts b/src/index.ts index 3fda29e6..8536f910 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,6 +23,7 @@ export * from './modules/domains'; export * from './modules/messaging'; export * from './modules/signer'; export * from './modules/staking'; +export * from './modules/verifiableCredentials'; export * from './errors'; export * from './config'; export * from './utils'; diff --git a/src/init.ts b/src/init.ts index 875c34b2..492f3f9c 100644 --- a/src/init.ts +++ b/src/init.ts @@ -22,6 +22,7 @@ import { defaultKmsServerUrl, } from './utils'; import { chainConfigs } from './config'; +import { getVerifiableCredentialsService } from './modules/verifiableCredentials'; export async function initWithPrivateKeySigner( privateKey: string, @@ -61,6 +62,9 @@ export async function initWithEKC(proxyUrl = defaultAzureProxyUrl) { export async function init(signerService: SignerService) { const messagingService = await MessagingService.create(signerService); + const verifiableCredentialsService = await getVerifiableCredentialsService( + signerService + ); async function connectToCacheServer() { const chainId = signerService.chainId; @@ -116,6 +120,7 @@ export async function init(signerService: SignerService) { return { signerService, messagingService, + verifiableCredentialsService, connectToCacheServer, }; } diff --git a/src/modules/signer/ekcSigner.ts b/src/modules/signer/ekcSigner.ts index c81380c8..7da32ff6 100644 --- a/src/modules/signer/ekcSigner.ts +++ b/src/modules/signer/ekcSigner.ts @@ -1,10 +1,11 @@ import EKC from '@energyweb/ekc'; import { TransactionRequest } from '@ethersproject/abstract-provider'; +import { TypedDataSigner } from '@ethersproject/abstract-signer'; import { Deferrable, resolveProperties } from '@ethersproject/properties'; import { Signer, providers } from 'ethers'; import { ERROR_MESSAGES } from '../../errors'; -export class EkcSigner extends Signer { +export class EkcSigner extends Signer implements TypedDataSigner { public provider: providers.Provider; private _signer: Signer; @@ -42,4 +43,8 @@ export class EkcSigner extends Signer { connect(provider: providers.Provider): Signer { return this._signer.connect(provider); } + + _signTypedData(): Promise { + throw new Error(ERROR_MESSAGES.SIGN_TYPED_DATA_NOT_SUPPORTED); + } } diff --git a/src/modules/signer/signer.service.ts b/src/modules/signer/signer.service.ts index 2b746b04..d5079206 100644 --- a/src/modules/signer/signer.service.ts +++ b/src/modules/signer/signer.service.ts @@ -1,6 +1,9 @@ -import { BigNumber, providers, utils, Wallet, ethers } from 'ethers'; -import { Signer } from '@ethersproject/abstract-signer'; +import { BigNumber, providers, utils, Wallet } from 'ethers'; import base64url from 'base64url'; +import { + TypedDataDomain, + TypedDataField, +} from '@ethersproject/abstract-signer'; import WalletConnectProvider from '@walletconnect/ethereum-provider'; import { Methods } from '@ew-did-registry/did'; import { ERROR_MESSAGES } from '../../errors/ErrorMessages'; @@ -16,6 +19,7 @@ import { AccountInfo, PUBLIC_KEY, IS_ETH_SIGNER, + SignerT, } from './signer.types'; import { EkcSigner } from './ekcSigner'; import { computeAddress } from 'ethers/lib/utils'; @@ -47,7 +51,7 @@ export class SignerService { []; constructor( - private _signer: Required, + private _signer: Required, private _providerType: ProviderType ) {} @@ -162,6 +166,13 @@ export class SignerService { return `did:${Methods.Erc1056}:${this.chainName()}:${this._address}`; } + get didHex() { + const chainBn = BigNumber.from(this.chainId); + return `did:${ + Methods.Erc1056 + }:${chainBn.toHexString()}:${this._address.toLowerCase()}`; + } + async send({ to, data, @@ -211,7 +222,28 @@ export class SignerService { return sig; } - async connect(signer: Required, providerType: ProviderType) { + /** + * @description Tries to create conformant signature (https://eips.ethereum.org/EIPS/eip-712) + * + * @param domain + * @param types + * @param message + * + */ + async signTypedData( + domain: TypedDataDomain, + types: Record>, + message: Record + ) { + if (!this.signer?._signTypedData) { + throw new Error(ERROR_MESSAGES.SIGN_TYPED_DATA_NOT_SUPPORTED); + } + + delete types['EIP712Domain']; + return await this.signer._signTypedData(domain, types, message); + } + + async connect(signer: Required, providerType: ProviderType) { this._signer = signer; this._providerType = providerType; await this.init(); diff --git a/src/modules/signer/signer.types.ts b/src/modules/signer/signer.types.ts index eebcbb41..7232fe00 100644 --- a/src/modules/signer/signer.types.ts +++ b/src/modules/signer/signer.types.ts @@ -1,3 +1,6 @@ +import { TypedDataSigner } from '@ethersproject/abstract-signer'; +import { Signer } from 'ethers'; + export enum ProviderType { WalletConnect = 'WalletConnect', EwKeyManager = 'EwKeyManager', @@ -33,3 +36,5 @@ export type AccountInfo = { export const PUBLIC_KEY = 'PublicKey'; export const IS_ETH_SIGNER = 'isEthSigner'; + +export type SignerT = Signer & TypedDataSigner; diff --git a/src/modules/verifiableCredentials/index.ts b/src/modules/verifiableCredentials/index.ts new file mode 100644 index 00000000..931c2370 --- /dev/null +++ b/src/modules/verifiableCredentials/index.ts @@ -0,0 +1,23 @@ +export * from './verifiableCredentials.types'; +export * from './verifiableCredentialsBase.service'; + +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; +import { ExecutionEnvironment, executionEnvironment } from '../../utils'; + +export const getVerifiableCredentialsService = async ( + signerService: SignerService +): Promise => { + let service: VerifiableCredentialsServiceBase; + if (executionEnvironment() === ExecutionEnvironment.NODE) { + service = await import('./verifiableCredentialsNode.service').then( + (module) => module.VerifiableCredentialsServiceNode.create(signerService) + ); + } else { + service = await import('./verifiableCredentialsWeb.service').then( + (module) => module.VerifiableCredentialsServiceWeb.create(signerService) + ); + } + + return service; +}; diff --git a/src/modules/verifiableCredentials/verifiableCredentials.types.ts b/src/modules/verifiableCredentials/verifiableCredentials.types.ts new file mode 100644 index 00000000..626a63be --- /dev/null +++ b/src/modules/verifiableCredentials/verifiableCredentials.types.ts @@ -0,0 +1,50 @@ +import { + TypedDataDomain, + TypedDataField, +} from '@ethersproject/abstract-signer'; + +export interface VerifiableCredential { + '@context': string | string[]; + id?: string; + issuer: string; + type: string[]; + credentialSubject: T; +} + +export interface SignedVerifiableCredential extends VerifiableCredential { + proof: { + '@context': string | string[]; + type: string; + proofPurpose: string; + proofValue: string; + verificationMethod: string; + created: string; + eip712Domain: { + domain: TypedDataDomain; + messageSchema: { + CredentialSubject: TypedDataField[]; + EIP712Domain: TypedDataField[]; + Proof: TypedDataField[]; + VerifiableCredential: TypedDataField[]; + }; + primaryType: string; + }; + }; +} + +export interface SignVerifiableCredentialOptions { + verificationMethod?: string; + proofPurpose?: string; + domain?: Partial; +} + +export interface VerifyVerifiableCredentialOptions { + proofPurpose?: string; + verificationMethod?: string; +} + +export interface VerifyVerifiableCredentialResults { + checks: string[]; + warnings: string[]; + errors: string[]; +} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts new file mode 100644 index 00000000..85800163 --- /dev/null +++ b/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts @@ -0,0 +1,136 @@ +import { SignerService } from '../signer'; +import { + SignedVerifiableCredential, + SignVerifiableCredentialOptions, + VerifiableCredential, + VerifyVerifiableCredentialOptions, + VerifyVerifiableCredentialResults, +} from './verifiableCredentials.types'; + +export abstract class VerifiableCredentialsServiceBase { + abstract prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + abstract completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + abstract verifyCredential: ( + vc: string, + proof_options: string + ) => Promise; + + constructor(protected readonly _signerService: SignerService) {} + + static async create( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + signerService: SignerService + ): Promise { + throw new Error('Not implemented'); + } + + public async verifyVerifiableCredential( + vc: SignedVerifiableCredential, + options?: VerifyVerifiableCredentialOptions + ) { + const verifyResultsString = await this.verifyCredential( + JSON.stringify(vc), + JSON.stringify(options || {}) + ); + + const verifyResults = JSON.parse( + verifyResultsString + ) as VerifyVerifiableCredentialResults; + + if (verifyResults.errors.length) { + throw new Error( + `Verifiable Credential is invalid, errors: ${verifyResults.errors.join( + ', ' + )}` + ); + } + + return true; + } + + public async signVerifiableCredential( + credential: VerifiableCredential, + options?: SignVerifiableCredentialOptions + ) { + const did = credential.issuer; + + const proofOptions = { + verificationMethod: options?.verificationMethod || did + '#controller', + proofPurpose: options?.proofPurpose || 'assertionMethod', + eip712Domain: { + primaryType: 'VerifiableCredential', + domain: { + name: 'EWF Verifiable Credential', + ...options?.domain, + }, + messageSchema: { + EIP712Domain: [{ name: 'name', type: 'string' }], + VerifiableCredential: [ + { name: '@context', type: 'string[]' }, + { name: 'id', type: 'string' }, + { name: 'type', type: 'string[]' }, + { name: 'issuer', type: 'string' }, + { name: 'issuanceDate', type: 'string' }, + { name: 'credentialSubject', type: 'CredentialSubject' }, + { name: 'proof', type: 'Proof' }, + ], + CredentialSubject: [ + { name: 'address', type: 'string' }, + { name: 'sameAs', type: 'string' }, + ], + Proof: [ + { name: '@context', type: 'string' }, + { name: 'verificationMethod', type: 'string' }, + { name: 'created', type: 'string' }, + { name: 'proofPurpose', type: 'string' }, + { name: 'type', type: 'string' }, + ], + }, + }, + }; + + const keyType = { + kty: 'EC', + crv: 'secp256k1', + alg: 'ES256K-R', + key_ops: ['signTypedData'], + }; + + const stringifyCredential = JSON.stringify(credential); + const preparedVC = await this.prepareIssueCredential( + stringifyCredential, + JSON.stringify(proofOptions), + JSON.stringify(keyType) + ); + const preparation = JSON.parse(preparedVC); + + const typedData = preparation.signingInput; + if (!typedData || !typedData.primaryType) { + throw new Error('Expected EIP-712 TypedData'); + } + + delete typedData.types['EIP712Domain']; + + const signature = await this._signerService.signTypedData( + typedData.domain, + typedData.types, + typedData.message + ); + + const signedCredential = await this.completeIssueCredential( + stringifyCredential, + preparedVC, + signature + ); + + return JSON.parse(signedCredential) as SignedVerifiableCredential; + } +} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts new file mode 100644 index 00000000..9fe110c7 --- /dev/null +++ b/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts @@ -0,0 +1,34 @@ +import { + prepareIssueCredential, + completeIssueCredential, + verifyCredential, +} from 'didkit-wasm-node'; +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; + +export class VerifiableCredentialsServiceNode extends VerifiableCredentialsServiceBase { + prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + verifyCredential: (vc: string, proof_options: string) => Promise; + + constructor(_signerService: SignerService) { + super(_signerService); + + this.completeIssueCredential = completeIssueCredential; + this.prepareIssueCredential = prepareIssueCredential; + this.verifyCredential = verifyCredential; + } + + static async create(signerService: SignerService) { + const service = new VerifiableCredentialsServiceNode(signerService); + return service; + } +} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts new file mode 100644 index 00000000..58c32b48 --- /dev/null +++ b/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts @@ -0,0 +1,34 @@ +import { + prepareIssueCredential, + completeIssueCredential, + verifyCredential, +} from 'didkit-wasm'; +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; + +export class VerifiableCredentialsServiceWeb extends VerifiableCredentialsServiceBase { + prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + verifyCredential: (vc: string, proof_options: string) => Promise; + + constructor(_signerService: SignerService) { + super(_signerService); + + this.completeIssueCredential = completeIssueCredential; + this.prepareIssueCredential = prepareIssueCredential; + this.verifyCredential = verifyCredential; + } + + static async create(signerService: SignerService) { + const service = new VerifiableCredentialsServiceWeb(signerService); + return service; + } +} diff --git a/src/utils/updateLegacyIssuers.ts b/src/utils/updateLegacyIssuers.ts index 79f2c917..16007c4c 100644 --- a/src/utils/updateLegacyIssuers.ts +++ b/src/utils/updateLegacyIssuers.ts @@ -14,9 +14,19 @@ import { labelhash, namehash } from './ensHash'; import { ChainId, chainConfigs } from '../config'; import { castToV2 } from '..'; import { getLogger } from '../config/logger.config'; +import { SignerT } from '../modules/signer'; const { JsonRpcProvider } = providers; +// TODO: implement this function +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export const updateLegacyIssuers = (a: string, b: Wallet, c: number): any[] => { + a; + b; + c; + throw new Error('Method not implemented.'); +}; + /** * @description - Checks that role issuers of all roles under `rootDomain` contains method-specific-id and adds it if missing * `signer` must own `rootDomain` on `targetChain` @@ -28,7 +38,7 @@ export const updateLegacyRoles = async ({ dryRun = true, }: { rootDomain: string; - signer: Signer; + signer: SignerT; chainId: ChainId; dryRun?: boolean; }) => { From a4732e36ee9b4034a0986d0d99f550c4166eb98d Mon Sep 17 00:00:00 2001 From: Jakub Sydor Date: Wed, 9 Mar 2022 14:52:30 +0100 Subject: [PATCH 2/2] feat: verifiable presentation poc --- .github/workflows/deploy.yml | 7 +- docs/api/README.md | 2 + docs/api/classes/DomainsService.md | 4 +- .../VerifiableCredentialsServiceBase.md | 105 +-- .../interfaces/CreatePresentationParams.md | 13 + docs/api/interfaces/IssuerFields.md | 20 + docs/api/interfaces/ProofOptions.md | 20 + docs/api/interfaces/RoleCredentialSubject.md | 44 ++ .../interfaces/RoleCredentialSubjectParams.md | 34 + .../SignVerifiableCredentialOptions.md | 27 - .../interfaces/SignedVerifiableCredential.md | 99 --- docs/api/interfaces/VerifiableCredential.md | 53 -- .../VerifyVerifiableCredentialOptions.md | 20 - docs/api/modules.md | 73 ++- e2e/fixtures/externalVC.ts | 2 +- e2e/verifiable-credentials.service.e2e.ts | 223 +++++++ e2e/verifiableCredentials.service.e2e.ts | 142 ---- package-lock.json | 620 ++++++++++++++++-- package.json | 4 + src/index.ts | 2 +- src/init.ts | 2 +- .../index.ts | 10 +- .../types/eip712.types.ts | 92 +++ .../verifiable-credentials/types/index.ts | 3 + .../types/role-credential.types.ts | 19 + .../types/verifiable-credentials.types.ts | 31 + .../verifiable-credentials-base.service.ts | 315 +++++++++ .../verifiable-credentials-node.service.ts | 61 ++ .../verifiable-credentials-web.service.ts | 61 ++ .../verifiableCredentials.types.ts | 50 -- .../verifiableCredentialsBase.service.ts | 136 ---- .../verifiableCredentialsNode.service.ts | 34 - .../verifiableCredentialsWeb.service.ts | 34 - src/utils/updateLegacyIssuers.ts | 9 - 34 files changed, 1605 insertions(+), 766 deletions(-) create mode 100644 docs/api/interfaces/CreatePresentationParams.md create mode 100644 docs/api/interfaces/IssuerFields.md create mode 100644 docs/api/interfaces/ProofOptions.md create mode 100644 docs/api/interfaces/RoleCredentialSubject.md create mode 100644 docs/api/interfaces/RoleCredentialSubjectParams.md delete mode 100644 docs/api/interfaces/SignVerifiableCredentialOptions.md delete mode 100644 docs/api/interfaces/SignedVerifiableCredential.md delete mode 100644 docs/api/interfaces/VerifiableCredential.md delete mode 100644 docs/api/interfaces/VerifyVerifiableCredentialOptions.md create mode 100644 e2e/verifiable-credentials.service.e2e.ts delete mode 100644 e2e/verifiableCredentials.service.e2e.ts rename src/modules/{verifiableCredentials => verifiable-credentials}/index.ts (63%) create mode 100644 src/modules/verifiable-credentials/types/eip712.types.ts create mode 100644 src/modules/verifiable-credentials/types/index.ts create mode 100644 src/modules/verifiable-credentials/types/role-credential.types.ts create mode 100644 src/modules/verifiable-credentials/types/verifiable-credentials.types.ts create mode 100644 src/modules/verifiable-credentials/verifiable-credentials-base.service.ts create mode 100644 src/modules/verifiable-credentials/verifiable-credentials-node.service.ts create mode 100644 src/modules/verifiable-credentials/verifiable-credentials-web.service.ts delete mode 100644 src/modules/verifiableCredentials/verifiableCredentials.types.ts delete mode 100644 src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts delete mode 100644 src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts delete mode 100644 src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index bef4bf47..a85c2bb1 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -2,13 +2,12 @@ name: Deploy on: push: - branches: ["develop", "master"] + branches: ['develop', 'master'] pull_request: - branches: ["develop", "master"] jobs: cancel-previous: - name: "Cancel Previous Runs" + name: 'Cancel Previous Runs' runs-on: ubuntu-latest timeout-minutes: 3 steps: @@ -26,7 +25,7 @@ jobs: token: ${{ secrets.SECRET_NAME }} - uses: actions/setup-node@v2-beta with: - node-version: "16.10.0" + node-version: '16.10.0' registry-url: https://registry.npmjs.org/ - name: Configure Git diff --git a/docs/api/README.md b/docs/api/README.md index db4d5729..44cf3763 100644 --- a/docs/api/README.md +++ b/docs/api/README.md @@ -58,6 +58,8 @@ Prerelease version npm i iam-client-lib@canary ``` +Some library dependencies require Node.js built-ins. Therefore when library is used in browser make sure they are polyfilled. If application is bundled with Webpack dependencies can be polyfilled with [node-polyfill-webpack-plugin](https://www.npmjs.com/package/node-polyfill-webpack-plugin) + ### Initialization Because of dependencies between modules they should be initialized in right order. This is achieved by accessing module initializer from initialization function of required module. diff --git a/docs/api/classes/DomainsService.md b/docs/api/classes/DomainsService.md index fff75e8e..ca5cce2c 100644 --- a/docs/api/classes/DomainsService.md +++ b/docs/api/classes/DomainsService.md @@ -80,7 +80,7 @@ ___ ### changeOrgOwnership -▸ **changeOrgOwnership**(`__namedParameters`): `Promise`<`undefined` \| { `info`: `string` ; `tx`: `EncodedCall` ; `next`: (`__namedParameters?`: { `retryCheck?`: `boolean` }) => `Promise`<`undefined` \| `TransactionReceipt`\> }[]\> +▸ **changeOrgOwnership**(`__namedParameters`): `Promise`<`undefined` \| [`MulticallTx`](../modules.md#multicalltx)\> changeOrgOwnership @@ -98,7 +98,7 @@ changeOrgOwnership #### Returns -`Promise`<`undefined` \| { `info`: `string` ; `tx`: `EncodedCall` ; `next`: (`__namedParameters?`: { `retryCheck?`: `boolean` }) => `Promise`<`undefined` \| `TransactionReceipt`\> }[]\> +`Promise`<`undefined` \| [`MulticallTx`](../modules.md#multicalltx)\> return array of steps needed to change ownership diff --git a/docs/api/classes/VerifiableCredentialsServiceBase.md b/docs/api/classes/VerifiableCredentialsServiceBase.md index 09b5e031..b6e1a553 100644 --- a/docs/api/classes/VerifiableCredentialsServiceBase.md +++ b/docs/api/classes/VerifiableCredentialsServiceBase.md @@ -6,16 +6,12 @@ - [constructor](VerifiableCredentialsServiceBase.md#constructor) -### Properties - -- [completeIssueCredential](VerifiableCredentialsServiceBase.md#completeissuecredential) -- [prepareIssueCredential](VerifiableCredentialsServiceBase.md#prepareissuecredential) -- [verifyCredential](VerifiableCredentialsServiceBase.md#verifycredential) - ### Methods -- [signVerifiableCredential](VerifiableCredentialsServiceBase.md#signverifiablecredential) -- [verifyVerifiableCredential](VerifiableCredentialsServiceBase.md#verifyverifiablecredential) +- [createPresentation](VerifiableCredentialsServiceBase.md#createpresentation) +- [createRoleVC](VerifiableCredentialsServiceBase.md#createrolevc) +- [createVerifiablePresentation](VerifiableCredentialsServiceBase.md#createverifiablepresentation) +- [verify](VerifiableCredentialsServiceBase.md#verify) - [create](VerifiableCredentialsServiceBase.md#create) ## Constructors @@ -30,116 +26,79 @@ | :------ | :------ | | `_signerService` | [`SignerService`](SignerService.md) | -## Properties - -### completeIssueCredential - -• `Abstract` **completeIssueCredential**: (`credential`: `string`, `preparation`: `string`, `signature`: `string`) => `Promise`<`string`\> +## Methods -#### Type declaration +### createPresentation -▸ (`credential`, `preparation`, `signature`): `Promise`<`string`\> +▸ **createPresentation**(`verifiableCredential`, `options?`): `Presentation` -##### Parameters +#### Parameters | Name | Type | | :------ | :------ | -| `credential` | `string` | -| `preparation` | `string` | -| `signature` | `string` | +| `verifiableCredential` | `VerifiableCredential`<[`RoleCredentialSubject`](../interfaces/RoleCredentialSubject.md)\>[] | +| `options?` | [`CreatePresentationParams`](../interfaces/CreatePresentationParams.md) | -##### Returns +#### Returns -`Promise`<`string`\> +`Presentation` ___ -### prepareIssueCredential +### createRoleVC -• `Abstract` **prepareIssueCredential**: (`credential`: `string`, `linked_data_proof_options`: `string`, `public_key`: `string`) => `Promise`<`string`\> +▸ **createRoleVC**(`credentialParams`, `proofOptions?`): `Promise`<`VerifiableCredential`<[`RoleCredentialSubject`](../interfaces/RoleCredentialSubject.md)\>\> -#### Type declaration - -▸ (`credential`, `linked_data_proof_options`, `public_key`): `Promise`<`string`\> - -##### Parameters +#### Parameters | Name | Type | | :------ | :------ | -| `credential` | `string` | -| `linked_data_proof_options` | `string` | -| `public_key` | `string` | +| `credentialParams` | [`RoleCredentialSubjectParams`](../interfaces/RoleCredentialSubjectParams.md) | +| `proofOptions?` | [`ProofOptions`](../interfaces/ProofOptions.md) | -##### Returns +#### Returns -`Promise`<`string`\> +`Promise`<`VerifiableCredential`<[`RoleCredentialSubject`](../interfaces/RoleCredentialSubject.md)\>\> ___ -### verifyCredential - -• `Abstract` **verifyCredential**: (`vc`: `string`, `proof_options`: `string`) => `Promise`<`string`\> - -#### Type declaration - -▸ (`vc`, `proof_options`): `Promise`<`string`\> +### createVerifiablePresentation -##### Parameters - -| Name | Type | -| :------ | :------ | -| `vc` | `string` | -| `proof_options` | `string` | - -##### Returns - -`Promise`<`string`\> - -## Methods - -### signVerifiableCredential - -▸ **signVerifiableCredential**<`T`\>(`credential`, `options?`): `Promise`<[`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\>\> - -#### Type parameters - -| Name | -| :------ | -| `T` | +▸ **createVerifiablePresentation**(`verifiableCredential`, `options?`): `Promise`<`VerifiablePresentation`\> #### Parameters | Name | Type | | :------ | :------ | -| `credential` | [`VerifiableCredential`](../interfaces/VerifiableCredential.md)<`T`\> | -| `options?` | [`SignVerifiableCredentialOptions`](../interfaces/SignVerifiableCredentialOptions.md) | +| `verifiableCredential` | `VerifiableCredential`<[`RoleCredentialSubject`](../interfaces/RoleCredentialSubject.md)\>[] | +| `options?` | [`ProofOptions`](../interfaces/ProofOptions.md) | #### Returns -`Promise`<[`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\>\> +`Promise`<`VerifiablePresentation`\> ___ -### verifyVerifiableCredential +### verify -▸ **verifyVerifiableCredential**<`T`\>(`vc`, `options?`): `Promise`<`boolean`\> +▸ **verify**<`T`\>(`vp`, `options?`): `any` #### Type parameters -| Name | -| :------ | -| `T` | +| Name | Type | +| :------ | :------ | +| `T` | extends `ICredentialSubject` | #### Parameters | Name | Type | | :------ | :------ | -| `vc` | [`SignedVerifiableCredential`](../interfaces/SignedVerifiableCredential.md)<`T`\> | -| `options?` | [`VerifyVerifiableCredentialOptions`](../interfaces/VerifyVerifiableCredentialOptions.md) | +| `vp` | `VerifiablePresentation` \| `VerifiableCredential`<`T`\> | +| `options?` | [`ProofOptions`](../interfaces/ProofOptions.md) | #### Returns -`Promise`<`boolean`\> +`any` ___ diff --git a/docs/api/interfaces/CreatePresentationParams.md b/docs/api/interfaces/CreatePresentationParams.md new file mode 100644 index 00000000..802b72c9 --- /dev/null +++ b/docs/api/interfaces/CreatePresentationParams.md @@ -0,0 +1,13 @@ +# Interface: CreatePresentationParams + +## Table of contents + +### Properties + +- [presentationDefinition](CreatePresentationParams.md#presentationdefinition) + +## Properties + +### presentationDefinition + +• `Optional` **presentationDefinition**: `IPresentationDefinition` diff --git a/docs/api/interfaces/IssuerFields.md b/docs/api/interfaces/IssuerFields.md new file mode 100644 index 00000000..b1e56506 --- /dev/null +++ b/docs/api/interfaces/IssuerFields.md @@ -0,0 +1,20 @@ +# Interface: IssuerFields + +## Table of contents + +### Properties + +- [key](IssuerFields.md#key) +- [value](IssuerFields.md#value) + +## Properties + +### key + +• **key**: `string` + +___ + +### value + +• **value**: `string` \| `number` diff --git a/docs/api/interfaces/ProofOptions.md b/docs/api/interfaces/ProofOptions.md new file mode 100644 index 00000000..5f0f429b --- /dev/null +++ b/docs/api/interfaces/ProofOptions.md @@ -0,0 +1,20 @@ +# Interface: ProofOptions + +## Table of contents + +### Properties + +- [proofPurpose](ProofOptions.md#proofpurpose) +- [verificationMethod](ProofOptions.md#verificationmethod) + +## Properties + +### proofPurpose + +• `Optional` **proofPurpose**: `string` + +___ + +### verificationMethod + +• `Optional` **verificationMethod**: `string` diff --git a/docs/api/interfaces/RoleCredentialSubject.md b/docs/api/interfaces/RoleCredentialSubject.md new file mode 100644 index 00000000..ac0e1917 --- /dev/null +++ b/docs/api/interfaces/RoleCredentialSubject.md @@ -0,0 +1,44 @@ +# Interface: RoleCredentialSubject + +## Hierarchy + +- `CredentialSubject` + + ↳ **`RoleCredentialSubject`** + +## Table of contents + +### Properties + +- [id](RoleCredentialSubject.md#id) +- [issuerFields](RoleCredentialSubject.md#issuerfields) +- [role](RoleCredentialSubject.md#role) + +## Properties + +### id + +• **id**: `string` + +#### Overrides + +CredentialSubject.id + +___ + +### issuerFields + +• **issuerFields**: [`IssuerFields`](IssuerFields.md)[] + +___ + +### role + +• **role**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `namespace` | `string` | +| `version` | `string` | diff --git a/docs/api/interfaces/RoleCredentialSubjectParams.md b/docs/api/interfaces/RoleCredentialSubjectParams.md new file mode 100644 index 00000000..b94c079c --- /dev/null +++ b/docs/api/interfaces/RoleCredentialSubjectParams.md @@ -0,0 +1,34 @@ +# Interface: RoleCredentialSubjectParams + +## Table of contents + +### Properties + +- [id](RoleCredentialSubjectParams.md#id) +- [issuerFields](RoleCredentialSubjectParams.md#issuerfields) +- [namespace](RoleCredentialSubjectParams.md#namespace) +- [version](RoleCredentialSubjectParams.md#version) + +## Properties + +### id + +• **id**: `string` + +___ + +### issuerFields + +• `Optional` **issuerFields**: [`IssuerFields`](IssuerFields.md)[] + +___ + +### namespace + +• **namespace**: `string` + +___ + +### version + +• **version**: `string` diff --git a/docs/api/interfaces/SignVerifiableCredentialOptions.md b/docs/api/interfaces/SignVerifiableCredentialOptions.md deleted file mode 100644 index 43f17e86..00000000 --- a/docs/api/interfaces/SignVerifiableCredentialOptions.md +++ /dev/null @@ -1,27 +0,0 @@ -# Interface: SignVerifiableCredentialOptions - -## Table of contents - -### Properties - -- [domain](SignVerifiableCredentialOptions.md#domain) -- [proofPurpose](SignVerifiableCredentialOptions.md#proofpurpose) -- [verificationMethod](SignVerifiableCredentialOptions.md#verificationmethod) - -## Properties - -### domain - -• `Optional` **domain**: `Partial`<`TypedDataDomain`\> - -___ - -### proofPurpose - -• `Optional` **proofPurpose**: `string` - -___ - -### verificationMethod - -• `Optional` **verificationMethod**: `string` diff --git a/docs/api/interfaces/SignedVerifiableCredential.md b/docs/api/interfaces/SignedVerifiableCredential.md deleted file mode 100644 index 2b11a19d..00000000 --- a/docs/api/interfaces/SignedVerifiableCredential.md +++ /dev/null @@ -1,99 +0,0 @@ -# Interface: SignedVerifiableCredential - -## Type parameters - -| Name | -| :------ | -| `T` | - -## Hierarchy - -- [`VerifiableCredential`](VerifiableCredential.md)<`T`\> - - ↳ **`SignedVerifiableCredential`** - -## Table of contents - -### Properties - -- [@context](SignedVerifiableCredential.md#@context) -- [credentialSubject](SignedVerifiableCredential.md#credentialsubject) -- [id](SignedVerifiableCredential.md#id) -- [issuer](SignedVerifiableCredential.md#issuer) -- [proof](SignedVerifiableCredential.md#proof) -- [type](SignedVerifiableCredential.md#type) - -## Properties - -### @context - -• **@context**: `string` \| `string`[] - -#### Inherited from - -[VerifiableCredential](VerifiableCredential.md).[@context](VerifiableCredential.md#@context) - -___ - -### credentialSubject - -• **credentialSubject**: `T` - -#### Inherited from - -[VerifiableCredential](VerifiableCredential.md).[credentialSubject](VerifiableCredential.md#credentialsubject) - -___ - -### id - -• `Optional` **id**: `string` - -#### Inherited from - -[VerifiableCredential](VerifiableCredential.md).[id](VerifiableCredential.md#id) - -___ - -### issuer - -• **issuer**: `string` - -#### Inherited from - -[VerifiableCredential](VerifiableCredential.md).[issuer](VerifiableCredential.md#issuer) - -___ - -### proof - -• **proof**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `@context` | `string` \| `string`[] | -| `created` | `string` | -| `eip712Domain` | { `domain`: `TypedDataDomain` ; `messageSchema`: { `CredentialSubject`: `TypedDataField`[] ; `EIP712Domain`: `TypedDataField`[] ; `Proof`: `TypedDataField`[] ; `VerifiableCredential`: `TypedDataField`[] } ; `primaryType`: `string` } | -| `eip712Domain.domain` | `TypedDataDomain` | -| `eip712Domain.messageSchema` | { `CredentialSubject`: `TypedDataField`[] ; `EIP712Domain`: `TypedDataField`[] ; `Proof`: `TypedDataField`[] ; `VerifiableCredential`: `TypedDataField`[] } | -| `eip712Domain.messageSchema.CredentialSubject` | `TypedDataField`[] | -| `eip712Domain.messageSchema.EIP712Domain` | `TypedDataField`[] | -| `eip712Domain.messageSchema.Proof` | `TypedDataField`[] | -| `eip712Domain.messageSchema.VerifiableCredential` | `TypedDataField`[] | -| `eip712Domain.primaryType` | `string` | -| `proofPurpose` | `string` | -| `proofValue` | `string` | -| `type` | `string` | -| `verificationMethod` | `string` | - -___ - -### type - -• **type**: `string`[] - -#### Inherited from - -[VerifiableCredential](VerifiableCredential.md).[type](VerifiableCredential.md#type) diff --git a/docs/api/interfaces/VerifiableCredential.md b/docs/api/interfaces/VerifiableCredential.md deleted file mode 100644 index 6566ccf8..00000000 --- a/docs/api/interfaces/VerifiableCredential.md +++ /dev/null @@ -1,53 +0,0 @@ -# Interface: VerifiableCredential - -## Type parameters - -| Name | -| :------ | -| `T` | - -## Hierarchy - -- **`VerifiableCredential`** - - ↳ [`SignedVerifiableCredential`](SignedVerifiableCredential.md) - -## Table of contents - -### Properties - -- [@context](VerifiableCredential.md#@context) -- [credentialSubject](VerifiableCredential.md#credentialsubject) -- [id](VerifiableCredential.md#id) -- [issuer](VerifiableCredential.md#issuer) -- [type](VerifiableCredential.md#type) - -## Properties - -### @context - -• **@context**: `string` \| `string`[] - -___ - -### credentialSubject - -• **credentialSubject**: `T` - -___ - -### id - -• `Optional` **id**: `string` - -___ - -### issuer - -• **issuer**: `string` - -___ - -### type - -• **type**: `string`[] diff --git a/docs/api/interfaces/VerifyVerifiableCredentialOptions.md b/docs/api/interfaces/VerifyVerifiableCredentialOptions.md deleted file mode 100644 index fecc4b11..00000000 --- a/docs/api/interfaces/VerifyVerifiableCredentialOptions.md +++ /dev/null @@ -1,20 +0,0 @@ -# Interface: VerifyVerifiableCredentialOptions - -## Table of contents - -### Properties - -- [proofPurpose](VerifyVerifiableCredentialOptions.md#proofpurpose) -- [verificationMethod](VerifyVerifiableCredentialOptions.md#verificationmethod) - -## Properties - -### proofPurpose - -• `Optional` **proofPurpose**: `string` - -___ - -### verificationMethod - -• `Optional` **verificationMethod**: `string` diff --git a/docs/api/modules.md b/docs/api/modules.md index f2849689..8f6a0626 100644 --- a/docs/api/modules.md +++ b/docs/api/modules.md @@ -47,6 +47,7 @@ - [ChainConfig](interfaces/ChainConfig.md) - [Claim](interfaces/Claim.md) - [ClaimData](interfaces/ClaimData.md) +- [CreatePresentationParams](interfaces/CreatePresentationParams.md) - [IApp](interfaces/IApp.md) - [ICacheClient](interfaces/ICacheClient.md) - [IClaimIssuance](interfaces/IClaimIssuance.md) @@ -56,12 +57,12 @@ - [IOrganization](interfaces/IOrganization.md) - [IPubKeyAndIdentityToken](interfaces/IPubKeyAndIdentityToken.md) - [IRole](interfaces/IRole.md) +- [IssuerFields](interfaces/IssuerFields.md) - [MessagingConfig](interfaces/MessagingConfig.md) - [Profile](interfaces/Profile.md) -- [SignVerifiableCredentialOptions](interfaces/SignVerifiableCredentialOptions.md) -- [SignedVerifiableCredential](interfaces/SignedVerifiableCredential.md) -- [VerifiableCredential](interfaces/VerifiableCredential.md) -- [VerifyVerifiableCredentialOptions](interfaces/VerifyVerifiableCredentialOptions.md) +- [ProofOptions](interfaces/ProofOptions.md) +- [RoleCredentialSubject](interfaces/RoleCredentialSubject.md) +- [RoleCredentialSubjectParams](interfaces/RoleCredentialSubjectParams.md) - [VerifyVerifiableCredentialResults](interfaces/VerifyVerifiableCredentialResults.md) ### Type aliases @@ -71,6 +72,7 @@ - [ChainId](modules.md#chainid) - [ClaimsFilter](modules.md#claimsfilter) - [IssueClaim](modules.md#issueclaim) +- [MulticallTx](modules.md#multicalltx) - [RejectClaim](modules.md#rejectclaim) - [RequestClaim](modules.md#requestclaim) - [Service](modules.md#service) @@ -95,6 +97,9 @@ - [erc712\_type\_hash](modules.md#erc712_type_hash) - [proof\_type\_hash](modules.md#proof_type_hash) - [typedMsgPrefix](modules.md#typedmsgprefix) +- [verifiableCredentialEIP712Types](modules.md#verifiablecredentialeip712types) +- [verifiablePresentationEIP712Types](modules.md#verifiablepresentationeip712types) +- [verifiablePresentationWithCredentialEIP712Types](modules.md#verifiablepresentationwithcredentialeip712types) ### Functions @@ -190,6 +195,12 @@ ___ ___ +### MulticallTx + +Ƭ **MulticallTx**: { `info`: `string` ; `tx`: `EncodedCall` ; `next`: (`opts?`: { `retryCheck?`: `boolean` }) => `Promise`<`undefined` \| `TransactionReceipt`\> }[] + +___ + ### RejectClaim Ƭ **RejectClaim**: `Object` @@ -353,6 +364,60 @@ ___ • `Const` **typedMsgPrefix**: ``"1901"`` +___ + +### verifiableCredentialEIP712Types + +• `Const` **verifiableCredentialEIP712Types**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `CredentialSubject` | { `name`: `string` = 'id'; `type`: `string` = 'string' }[] | +| `EIP712Domain` | `never`[] | +| `EWFRole` | { `name`: `string` = 'namespace'; `type`: `string` = 'string' }[] | +| `IssuerFields` | { `name`: `string` = 'key'; `type`: `string` = 'string' }[] | +| `Proof` | { `name`: `string` = '@context'; `type`: `string` = 'string' }[] | +| `VerifiableCredential` | { `name`: `string` = '@context'; `type`: `string` = 'string[]' }[] | + +___ + +### verifiablePresentationEIP712Types + +• `Const` **verifiablePresentationEIP712Types**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `EIP712Domain` | `never`[] | +| `Proof` | { `name`: `string` = '@context'; `type`: `string` = 'string' }[] | +| `VerifiablePresentation` | { `name`: `string` = '@context'; `type`: `string` = 'string[]' }[] | + +___ + +### verifiablePresentationWithCredentialEIP712Types + +• `Const` **verifiablePresentationWithCredentialEIP712Types**: `Object` + +#### Type declaration + +| Name | Type | +| :------ | :------ | +| `CredentialSubject` | { `name`: `string` = 'id'; `type`: `string` = 'string' }[] | +| `EIP712Domain` | `never`[] | +| `EWFRole` | { `name`: `string` = 'namespace'; `type`: `string` = 'string' }[] | +| `IssuerFields` | { `name`: `string` = 'key'; `type`: `string` = 'string' }[] | +| `Proof` | { `name`: `string` = '@context'; `type`: `string` = 'string' }[] | +| `VC712Domain` | { `name`: `string` = 'domain'; `type`: `string` = 'VC712DomainData' }[] | +| `VC712DomainData` | `never`[] | +| `VC712DomainSchema` | { `name`: `string` = 'CredentialSubject'; `type`: `string` = 'VC712DomainTypedDataField[]' }[] | +| `VC712DomainTypedDataField` | { `name`: `string` = 'name'; `type`: `string` = 'string' }[] | +| `VCProof` | { `name`: `string` = '@context'; `type`: `string` = 'string' }[] | +| `VerifiableCredential` | { `name`: `string` = '@context'; `type`: `string` = 'string[]' }[] | +| `VerifiablePresentation` | { `name`: `string` = '@context'; `type`: `string` = 'string[]' }[] | + ## Functions ### addSupportedDID diff --git a/e2e/fixtures/externalVC.ts b/e2e/fixtures/externalVC.ts index 5aec1220..9063e6ea 100644 --- a/e2e/fixtures/externalVC.ts +++ b/e2e/fixtures/externalVC.ts @@ -88,7 +88,7 @@ export const validExampleExternalVC = { }, }; -export const invalidExampleExternalVC = { +export const exampleExternalVCWithInvalidSubjectId = { '@context': ['https://www.w3.org/2018/credentials/v1'], type: ['VerifiableCredential'], credentialSubject: { diff --git a/e2e/verifiable-credentials.service.e2e.ts b/e2e/verifiable-credentials.service.e2e.ts new file mode 100644 index 00000000..408dee7d --- /dev/null +++ b/e2e/verifiable-credentials.service.e2e.ts @@ -0,0 +1,223 @@ +import { Wallet } from 'ethers'; +import { v4 as uuid } from 'uuid'; +import { + exampleExternalVCWithInvalidSubjectId, + validExampleExternalVC, +} from './fixtures'; +import { replenish, rpcUrl, setupENS } from './utils/setup_contracts'; +import { fromPrivateKey } from '../src'; +import { + getVerifiableCredentialsService, + IssuerFields, + VerifiableCredentialsServiceBase, +} from '../src/modules/verifiable-credentials'; + +describe('Verifiable credentials tests', () => { + let verifiableCredentialsService: VerifiableCredentialsServiceBase; + let rootOwnerDid: string; + const rootOwnerWallet = Wallet.createRandom(); + const rootOwnerAddress = rootOwnerWallet.address; + + const createExampleSignedCredential = async ( + issuerFields: IssuerFields[] + ) => { + return await verifiableCredentialsService.createRoleVC({ + id: rootOwnerDid, + namespace: 'test.iam.ewc', + version: '1', + issuerFields, + }); + }; + + beforeEach(async () => { + jest.clearAllMocks(); + await replenish(rootOwnerAddress); + await setupENS(rootOwnerAddress); + const signerService = await fromPrivateKey( + rootOwnerWallet.privateKey, + rpcUrl + ); + + await signerService.publicKeyAndIdentityToken(); + + rootOwnerDid = signerService.didHex; + verifiableCredentialsService = await getVerifiableCredentialsService( + signerService + ); + }); + + describe('Verifiable credentials', () => { + test('should create a VC proof', async () => { + const vc = await createExampleSignedCredential([]); + + expect(vc).toBeDefined(); + expect(vc.proof).toStrictEqual( + expect.objectContaining({ + '@context': 'https://w3id.org/security/suites/eip712sig-2021/v1', + type: 'EthereumEip712Signature2021', + proofPurpose: 'assertionMethod', + proofValue: expect.any(String), + verificationMethod: `${rootOwnerDid}#controller`, + created: expect.any(String), + eip712Domain: expect.anything(), + }) + ); + }); + + test('should verify a valid VC', async () => { + const vc = await createExampleSignedCredential([]); + + expect(vc).toBeDefined(); + + const result = await verifiableCredentialsService.verify(vc); + expect(result).toBe(true); + }); + + test('should create a VC proof with issuer fields', async () => { + const issuerFields = [{ key: 'foo', value: 'bar' }]; + const vc = await createExampleSignedCredential(issuerFields); + + expect(vc).toBeDefined(); + + expect(vc.credentialSubject.issuerFields).toBeDefined(); + expect(vc.credentialSubject.issuerFields).toStrictEqual(issuerFields); + expect(vc.proof).toStrictEqual( + expect.objectContaining({ + '@context': 'https://w3id.org/security/suites/eip712sig-2021/v1', + type: 'EthereumEip712Signature2021', + proofPurpose: 'assertionMethod', + proofValue: expect.any(String), + verificationMethod: `${rootOwnerDid}#controller`, + created: expect.any(String), + eip712Domain: expect.anything(), + }) + ); + }); + + test('should verify a valid VC with issuer fields', async () => { + const vc = await createExampleSignedCredential([ + { key: 'foo', value: 'bar' }, + ]); + + expect(vc).toBeDefined(); + + const result = await verifiableCredentialsService.verify(vc); + expect(result).toBe(true); + }); + + test('should throw an error for invalid VC during verification', async () => { + const vc = await createExampleSignedCredential([]); + + vc.id = 'urn:uuid:' + uuid(); + + expect(vc).toBeDefined(); + + await expect( + verifiableCredentialsService.verify(vc) + ).rejects.toMatchObject({ + message: expect.stringContaining( + 'Verifiable Credential or Presentation is invalid' + ), + }); + }); + + test('should verify valid external VC', async () => { + const isValid = await verifiableCredentialsService.verify( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + validExampleExternalVC as any + ); + + expect(isValid).toBe(true); + }); + + test('should throw an error for invalid external VC', async () => { + await expect( + // eslint-disable-next-line @typescript-eslint/no-explicit-any + verifiableCredentialsService.verify( + exampleExternalVCWithInvalidSubjectId as never + ) + ).rejects.toMatchObject({ + message: expect.stringContaining( + 'Verifiable Credential or Presentation is invalid' + ), + }); + }); + }); + + describe('Verifiable presentations', () => { + test('should create a unsigned VP', async () => { + const vc = await createExampleSignedCredential([]); + + const vp = await verifiableCredentialsService.createPresentation([vc]); + + expect(vp).toBeDefined(); + expect(vp['proof']).toBeUndefined(); + expect(vp.verifiableCredential).toStrictEqual([vc]); + }); + + test('should create a VP proof', async () => { + const vc = await createExampleSignedCredential([]); + + const vp = + await verifiableCredentialsService.createVerifiablePresentation([vc]); + + expect(vp).toBeDefined(); + expect(vp.proof).toEqual( + expect.objectContaining({ + '@context': 'https://w3id.org/security/suites/eip712sig-2021/v1', + type: 'EthereumEip712Signature2021', + proofPurpose: 'authentication', + proofValue: expect.any(String), + verificationMethod: `${rootOwnerDid}#controller`, + created: expect.any(String), + eip712Domain: expect.any(Object), + }) + ); + }); + + test('should verify a valid VP', async () => { + const vc = await createExampleSignedCredential([]); + const vp = + await verifiableCredentialsService.createVerifiablePresentation([vc]); + + await verifiableCredentialsService.verify(vp); + }); + + test('should verify a valid VP with issuer fields', async () => { + const vc = await createExampleSignedCredential([ + { key: 'foo', value: 'bar' }, + ]); + const vp = + await verifiableCredentialsService.createVerifiablePresentation([vc]); + + await verifiableCredentialsService.verify(vp); + }); + + test('should verify a valid VP without verifiable credentials', async () => { + const vp = + await verifiableCredentialsService.createVerifiablePresentation([]); + await verifiableCredentialsService.verify(vp); + }); + + test('should throw an error when one of the VC is invalid', async () => { + const vc = await createExampleSignedCredential([ + { key: 'foo', value: 'bar' }, + ]); + + vc.id = 'urn:uuid:' + uuid(); + + expect(vc).toBeDefined(); + + const vp = + await verifiableCredentialsService.createVerifiablePresentation([vc]); + + await expect( + verifiableCredentialsService.verify(vp) + ).rejects.toMatchObject({ + message: expect.stringContaining( + 'Verifiable Credential or Presentation is invalid' + ), + }); + }); + }); +}); diff --git a/e2e/verifiableCredentials.service.e2e.ts b/e2e/verifiableCredentials.service.e2e.ts deleted file mode 100644 index 6400ef8a..00000000 --- a/e2e/verifiableCredentials.service.e2e.ts +++ /dev/null @@ -1,142 +0,0 @@ -import { Wallet } from 'ethers'; -import { v4 as uuid } from 'uuid'; -import { invalidExampleExternalVC, validExampleExternalVC } from './fixtures'; -import { replenish, rpcUrl, setupENS } from './utils/setup_contracts'; -import { fromPrivateKey } from '../src'; -import { - getVerifiableCredentialsService, - VerifiableCredentialsServiceBase, -} from '../src/modules/verifiableCredentials'; - -describe('Verifiable credentials tests', () => { - let verifiableCredentialsService: VerifiableCredentialsServiceBase; - let rootOwnerDid: string; - const rootOwnerWallet = Wallet.createRandom(); - const rootOwnerAddress = rootOwnerWallet.address; - - beforeEach(async () => { - jest.clearAllMocks(); - await replenish(rootOwnerAddress); - await setupENS(rootOwnerAddress); - const signerService = await fromPrivateKey( - rootOwnerWallet.privateKey, - rpcUrl - ); - - await signerService.publicKeyAndIdentityToken(); - - rootOwnerDid = signerService.didHex; - verifiableCredentialsService = await getVerifiableCredentialsService( - signerService - ); - }); - - test('should create a VC proof', async () => { - const credential = { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://tzprofiles.com/2021/ethereum-address-control-v1.jsonld', - ], - id: 'urn:uuid:' + uuid(), - issuer: rootOwnerDid, - issuanceDate: new Date().toISOString(), - type: ['VerifiableCredential', 'EthereumAddressControl'], - credentialSubject: { - address: rootOwnerAddress, - sameAs: rootOwnerDid, - }, - }; - - const vc = await verifiableCredentialsService.signVerifiableCredential( - credential - ); - - expect(vc).toBeDefined(); - expect(vc.proof).toStrictEqual( - expect.objectContaining({ - '@context': 'https://w3id.org/security/suites/eip712sig-2021/v1', - type: 'EthereumEip712Signature2021', - proofPurpose: 'assertionMethod', - proofValue: expect.any(String), - verificationMethod: `${rootOwnerDid}#controller`, - created: expect.any(String), - eip712Domain: expect.anything(), - }) - ); - }); - - test('should verify a valid VC', async () => { - const credential = { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://tzprofiles.com/2021/ethereum-address-control-v1.jsonld', - ], - id: 'urn:uuid:' + uuid(), - issuer: rootOwnerDid, - issuanceDate: new Date().toISOString(), - type: ['VerifiableCredential', 'EthereumAddressControl'], - credentialSubject: { - address: rootOwnerAddress, - sameAs: rootOwnerDid, - }, - }; - - const vc = await verifiableCredentialsService.signVerifiableCredential( - credential - ); - - expect(vc).toBeDefined(); - - await verifiableCredentialsService.verifyVerifiableCredential(vc); - }); - - test('should throw an error for invalid VC during verification', async () => { - const credential = { - '@context': [ - 'https://www.w3.org/2018/credentials/v1', - 'https://tzprofiles.com/2021/ethereum-address-control-v1.jsonld', - ], - id: 'urn:uuid:' + uuid(), - issuer: rootOwnerDid, - issuanceDate: new Date().toISOString(), - type: ['VerifiableCredential', 'EthereumAddressControl'], - credentialSubject: { - address: rootOwnerAddress, - sameAs: rootOwnerDid, - }, - }; - - const vc = await verifiableCredentialsService.signVerifiableCredential( - credential - ); - - vc.id = 'urn:uuid:' + uuid(); - - expect(vc).toBeDefined(); - - await expect( - verifiableCredentialsService.verifyVerifiableCredential(vc) - ).rejects.toMatchObject({ - message: expect.stringContaining('Verifiable Credential is invalid'), - }); - }); - - test('should verify valid external VC', async () => { - const isValid = - await verifiableCredentialsService.verifyVerifiableCredential( - validExampleExternalVC - ); - - expect(isValid).toBe(true); - }); - - test('should throw an error for invalid external VC', async () => { - await expect( - verifiableCredentialsService.verifyVerifiableCredential( - invalidExampleExternalVC - ) - ).rejects.toMatchObject({ - message: expect.stringContaining('Verifiable Credential is invalid'), - }); - }); -}); diff --git a/package-lock.json b/package-lock.json index 364cb337..803377c7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@energyweb/staking-pool": "^1.0.0-rc.14", "@ensdomains/ens": "^0.6.2", "@ew-did-registry/claims": "^0.6.3-alpha.531.0", + "@ew-did-registry/credentials-interface": "^0.6.3-alpha.531.0", "@ew-did-registry/did": "^0.6.3-alpha.531.0", "@ew-did-registry/did-document": "^0.6.3-alpha.531.0", "@ew-did-registry/did-ethr-resolver": "^0.6.3-alpha.531.0", @@ -26,6 +27,9 @@ "@gnosis.pm/safe-apps-provider": "0.8.0", "@gnosis.pm/safe-apps-sdk": "4.3.0", "@metamask/detect-provider": "^1.2.0", + "@sphereon/pex": "^1.0.2", + "@spruceid/didkit-wasm": "^0.2.1", + "@spruceid/didkit-wasm-node": "^0.2.1", "@walletconnect/ethereum-provider": "1.7.1", "axios": "^0.26.0", "base64url": "^3.0.1", @@ -2559,6 +2563,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@eslint/eslintrc/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -2592,6 +2612,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/@eslint/eslintrc/node_modules/type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -3308,6 +3334,17 @@ "sjcl": "npm:sjcl-complete@1.0.0" } }, + "node_modules/@ew-did-registry/credentials-interface": { + "version": "0.6.3-alpha.531.0", + "resolved": "https://registry.npmjs.org/@ew-did-registry/credentials-interface/-/credentials-interface-0.6.3-alpha.531.0.tgz", + "integrity": "sha512-D4FsZyGpdxA3oyX2uHaPlDMTGbESym//gHX39HTk/d4Kc2OpxmKuHXq+VrkIPSpW+VMuvT7nFoXTvnGHJRxAbQ==", + "dependencies": { + "@ethersproject/abstract-signer": "5.6.0", + "@sphereon/pex": "^1.0.2", + "@types/lodash": "^4.14.181", + "lodash": "^4.17.21" + } + }, "node_modules/@ew-did-registry/did": { "version": "0.6.3-alpha.531.0", "resolved": "https://registry.npmjs.org/@ew-did-registry/did/-/did-0.6.3-alpha.531.0.tgz", @@ -4783,6 +4820,37 @@ "@sinonjs/commons": "^1.7.0" } }, + "node_modules/@sphereon/pex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sphereon/pex/-/pex-1.0.2.tgz", + "integrity": "sha512-uwXZt0CQc/0qVyxEREu4mhz9HhvxGirw0L2pxwXT13mpYS5p61maUaF1Dl/G5tV9XyU1CrhaXKdCw9GRNPgzmA==", + "dependencies": { + "@sphereon/pex-models": "^1.1.0", + "ajv": "^8.8.2", + "ajv-formats": "^2.1.1", + "jsonpath": "^1.1.1", + "nanoid": "^3.1.32", + "string.prototype.matchall": "^4.0.6" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@sphereon/pex-models": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-1.1.0.tgz", + "integrity": "sha512-kMslWspdqwuXGBFxOPXTAK8HlIHycBR/locYHMlYmyvdnau6bp40JXk2zviBRVOPfe8N3Dv2p5IPAjMk3pT77A==" + }, + "node_modules/@spruceid/didkit-wasm": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@spruceid/didkit-wasm/-/didkit-wasm-0.2.1.tgz", + "integrity": "sha512-Qi0ZVS2vNA6iVwOzfIdyVQSj1Q88DgV0HyjnQGZ84YsrjaxbCSPwyhZs3TBzUGKwvoyiGCvWohYnL0G3BsPEMQ==" + }, + "node_modules/@spruceid/didkit-wasm-node": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@spruceid/didkit-wasm-node/-/didkit-wasm-node-0.2.1.tgz", + "integrity": "sha512-c8e3u5FIRS/2Gf6UHnRPnfRozgKgby4avZzlvIiaJRDVLl1LaX1SE13vEvKV2rAq6NMfZrV4YG908M4uVlT90Q==" + }, "node_modules/@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -4942,8 +5010,7 @@ "node_modules/@types/lodash": { "version": "4.14.181", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", - "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", - "dev": true + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==" }, "node_modules/@types/lodash.difference": { "version": "4.5.6", @@ -5641,14 +5708,13 @@ } }, "node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "dependencies": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" }, "funding": { @@ -5656,6 +5722,22 @@ "url": "https://github.com/sponsors/epoberezkin" } }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, "node_modules/alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -7176,9 +7258,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001325", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", - "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==", + "version": "1.0.30001327", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz", + "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==", "dev": true, "funding": [ { @@ -8863,8 +8945,7 @@ "node_modules/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "node_modules/deepmerge": { "version": "4.2.2", @@ -9621,6 +9702,22 @@ "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/eslint/node_modules/ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -9746,6 +9843,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/eslint/node_modules/supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -9854,7 +9957,6 @@ "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, "engines": { "node": ">=4.0" } @@ -9869,7 +9971,6 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -10336,8 +10437,7 @@ "node_modules/fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-diff": { "version": "1.2.0", @@ -10385,8 +10485,7 @@ "node_modules/fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "node_modules/fastparse": { "version": "1.1.2", @@ -12180,6 +12279,28 @@ "node": ">=6" } }, + "node_modules/har-validator/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/har-validator/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "node_modules/hard-rejection": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", @@ -15955,10 +16076,9 @@ "dev": true }, "node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -16015,6 +16135,28 @@ "node >= 0.2.0" ] }, + "node_modules/jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "dependencies": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + } + }, + "node_modules/jsonpath/node_modules/esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -16637,9 +16779,9 @@ } }, "node_modules/lru-cache": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", - "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz", + "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==", "dev": true, "engines": { "node": ">=12" @@ -16723,9 +16865,9 @@ } }, "node_modules/marked": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", - "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.13.tgz", + "integrity": "sha512-lS/ZCa4X0gsRcfWs1eoh6dLnHr9kVH3K1t2X4M/tTtNouhZ7anS1Csb6464VGLQHv8b2Tw1cLeZQs58Jav8Rzw==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -22504,6 +22646,21 @@ "node": ">=0.10.0" } }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -22692,9 +22849,9 @@ } }, "node_modules/require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", "engines": { "node": ">=0.10.0" } @@ -24356,6 +24513,14 @@ "node": ">=0.10.0" } }, + "node_modules/solc/node_modules/require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/solc/node_modules/require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -24727,6 +24892,91 @@ "node": ">=8" } }, + "node_modules/static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "dependencies": { + "escodegen": "^1.8.1" + } + }, + "node_modules/static-eval/node_modules/escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=4.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/static-eval/node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/static-eval/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-eval/node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -24942,6 +25192,24 @@ "node": ">=8" } }, + "node_modules/string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -25948,6 +26216,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, "node_modules/unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -26137,7 +26410,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "dependencies": { "punycode": "^2.1.0" } @@ -26433,7 +26705,6 @@ "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -28466,6 +28737,18 @@ "strip-json-comments": "^3.1.1" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -28490,6 +28773,12 @@ "argparse": "^2.0.1" } }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "type-fest": { "version": "0.20.2", "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", @@ -28908,6 +29197,17 @@ "sjcl": "npm:sjcl-complete@1.0.0" } }, + "@ew-did-registry/credentials-interface": { + "version": "0.6.3-alpha.531.0", + "resolved": "https://registry.npmjs.org/@ew-did-registry/credentials-interface/-/credentials-interface-0.6.3-alpha.531.0.tgz", + "integrity": "sha512-D4FsZyGpdxA3oyX2uHaPlDMTGbESym//gHX39HTk/d4Kc2OpxmKuHXq+VrkIPSpW+VMuvT7nFoXTvnGHJRxAbQ==", + "requires": { + "@ethersproject/abstract-signer": "5.6.0", + "@sphereon/pex": "^1.0.2", + "@types/lodash": "^4.14.181", + "lodash": "^4.17.21" + } + }, "@ew-did-registry/did": { "version": "0.6.3-alpha.531.0", "resolved": "https://registry.npmjs.org/@ew-did-registry/did/-/did-0.6.3-alpha.531.0.tgz", @@ -30115,6 +30415,34 @@ "@sinonjs/commons": "^1.7.0" } }, + "@sphereon/pex": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@sphereon/pex/-/pex-1.0.2.tgz", + "integrity": "sha512-uwXZt0CQc/0qVyxEREu4mhz9HhvxGirw0L2pxwXT13mpYS5p61maUaF1Dl/G5tV9XyU1CrhaXKdCw9GRNPgzmA==", + "requires": { + "@sphereon/pex-models": "^1.1.0", + "ajv": "^8.8.2", + "ajv-formats": "^2.1.1", + "jsonpath": "^1.1.1", + "nanoid": "^3.1.32", + "string.prototype.matchall": "^4.0.6" + } + }, + "@sphereon/pex-models": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@sphereon/pex-models/-/pex-models-1.1.0.tgz", + "integrity": "sha512-kMslWspdqwuXGBFxOPXTAK8HlIHycBR/locYHMlYmyvdnau6bp40JXk2zviBRVOPfe8N3Dv2p5IPAjMk3pT77A==" + }, + "@spruceid/didkit-wasm": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@spruceid/didkit-wasm/-/didkit-wasm-0.2.1.tgz", + "integrity": "sha512-Qi0ZVS2vNA6iVwOzfIdyVQSj1Q88DgV0HyjnQGZ84YsrjaxbCSPwyhZs3TBzUGKwvoyiGCvWohYnL0G3BsPEMQ==" + }, + "@spruceid/didkit-wasm-node": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@spruceid/didkit-wasm-node/-/didkit-wasm-node-0.2.1.tgz", + "integrity": "sha512-c8e3u5FIRS/2Gf6UHnRPnfRozgKgby4avZzlvIiaJRDVLl1LaX1SE13vEvKV2rAq6NMfZrV4YG908M4uVlT90Q==" + }, "@tootallnate/once": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", @@ -30263,8 +30591,7 @@ "@types/lodash": { "version": "4.14.181", "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.181.tgz", - "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==", - "dev": true + "integrity": "sha512-n3tyKthHJbkiWhDZs3DkhkCzt2MexYHXlX0td5iMplyfwketaOeKboEVBqzceH7juqvEg3q5oUoBFxSLu7zFag==" }, "@types/lodash.difference": { "version": "4.5.6", @@ -30828,17 +31155,24 @@ } }, "ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", - "dev": true, + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.11.0.tgz", + "integrity": "sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==", "requires": { "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", "uri-js": "^4.2.2" } }, + "ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "requires": { + "ajv": "^8.0.0" + } + }, "alphanum-sort": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", @@ -32001,9 +32335,9 @@ } }, "caniuse-lite": { - "version": "1.0.30001325", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001325.tgz", - "integrity": "sha512-sB1bZHjseSjDtijV1Hb7PB2Zd58Kyx+n/9EotvZ4Qcz2K3d0lWB8dB4nb8wN/TsOGFq3UuAm0zQZNQ4SoR7TrQ==", + "version": "1.0.30001327", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001327.tgz", + "integrity": "sha512-1/Cg4jlD9qjZzhbzkzEaAC2JHsP0WrOc8Rd/3a3LuajGzGWR/hD7TVyvq99VqmTy99eVh8Zkmdq213OgvgXx7w==", "dev": true }, "capture-exit": { @@ -33346,8 +33680,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "4.2.2", @@ -33898,6 +34231,18 @@ "v8-compile-cache": "^2.0.3" }, "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", @@ -33984,6 +34329,12 @@ "argparse": "^2.0.1" } }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", @@ -34111,8 +34462,7 @@ "estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==" }, "estree-walker": { "version": "1.0.1", @@ -34123,8 +34473,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "eth-ens-namehash": { "version": "2.0.8", @@ -34511,8 +34860,7 @@ "fast-deep-equal": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", - "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", - "dev": true + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "fast-diff": { "version": "1.2.0", @@ -34556,8 +34904,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "fastparse": { "version": "1.1.2", @@ -35918,6 +36265,26 @@ "requires": { "ajv": "^6.12.3", "har-schema": "^2.0.0" + }, + "dependencies": { + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + } } }, "hard-rejection": { @@ -38793,10 +39160,9 @@ "dev": true }, "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" }, "json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -38844,6 +39210,23 @@ "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, + "jsonpath": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsonpath/-/jsonpath-1.1.1.tgz", + "integrity": "sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==", + "requires": { + "esprima": "1.2.2", + "static-eval": "2.0.2", + "underscore": "1.12.1" + }, + "dependencies": { + "esprima": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-1.2.2.tgz", + "integrity": "sha1-dqD9Zvz+FU/SkmZ9wmQBl1CxZXs=" + } + } + }, "JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -39358,9 +39741,9 @@ } }, "lru-cache": { - "version": "7.7.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.7.3.tgz", - "integrity": "sha512-WY9wjJNQt9+PZilnLbuFKM+SwDull9+6IAguOrarOMoOHTcJ9GnXSO11+Gw6c7xtDkBkthR57OZMtZKYr+1CEw==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.8.0.tgz", + "integrity": "sha512-AmXqneQZL3KZMIgBpaPTeI6pfwh+xQ2vutMsyqOu1TBdEXFZgpG/80wuJ531w2ZN7TI0/oc8CPxzh/DKQudZqg==", "dev": true }, "lunr": { @@ -39423,9 +39806,9 @@ } }, "marked": { - "version": "4.0.12", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", - "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "version": "4.0.13", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.13.tgz", + "integrity": "sha512-lS/ZCa4X0gsRcfWs1eoh6dLnHr9kVH3K1t2X4M/tTtNouhZ7anS1Csb6464VGLQHv8b2Tw1cLeZQs58Jav8Rzw==", "dev": true }, "marked-terminal": { @@ -43783,6 +44166,15 @@ "safe-regex": "^1.1.0" } }, + "regexp.prototype.flags": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.1.tgz", + "integrity": "sha512-pMR7hBVUUGI7PMA37m2ofIdQCsomVnas+Jn5UPGAHQ+/LlwKm/aTLJHdasmHRzlfeZwHiAOaRSo2rbBDm3nNUQ==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, "regexpp": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", @@ -43928,9 +44320,9 @@ "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "require-from-string": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", - "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==" }, "require-main-filename": { "version": "2.0.0", @@ -45252,6 +45644,11 @@ "read-pkg": "^1.0.0" } }, + "require-from-string": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-1.2.1.tgz", + "integrity": "sha1-UpyczvJzgK3+yaL5ZbZJu+5jZBg=" + }, "require-main-filename": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", @@ -45575,6 +45972,69 @@ } } }, + "static-eval": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/static-eval/-/static-eval-2.0.2.tgz", + "integrity": "sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==", + "requires": { + "escodegen": "^1.8.1" + }, + "dependencies": { + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "requires": { + "prelude-ls": "~1.1.2" + } + } + } + }, "static-extend": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", @@ -45762,6 +46222,21 @@ "strip-ansi": "^6.0.1" } }, + "string.prototype.matchall": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.7.tgz", + "integrity": "sha512-f48okCX7JiwVi1NXCVWcFnZgADDC/n2vePlQ/KUCNqCikLLilQvwjMO8+BHVKvgzH0JB0J9LEPgxOGT02RoETg==", + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.4.1", + "side-channel": "^1.0.4" + } + }, "string.prototype.trimend": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", @@ -46531,6 +47006,11 @@ "which-boxed-primitive": "^1.0.2" } }, + "underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==" + }, "unicode-canonical-property-names-ecmascript": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", @@ -46684,7 +47164,6 @@ "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", - "dev": true, "requires": { "punycode": "^2.1.0" } @@ -46928,8 +47407,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", diff --git a/package.json b/package.json index 6689c099..c38dc121 100644 --- a/package.json +++ b/package.json @@ -65,6 +65,7 @@ "@energyweb/staking-pool": "^1.0.0-rc.14", "@ensdomains/ens": "^0.6.2", "@ew-did-registry/claims": "^0.6.3-alpha.531.0", + "@ew-did-registry/credentials-interface": "^0.6.3-alpha.531.0", "@ew-did-registry/did": "^0.6.3-alpha.531.0", "@ew-did-registry/did-document": "^0.6.3-alpha.531.0", "@ew-did-registry/did-ethr-resolver": "^0.6.3-alpha.531.0", @@ -76,6 +77,9 @@ "@gnosis.pm/safe-apps-provider": "0.8.0", "@gnosis.pm/safe-apps-sdk": "4.3.0", "@metamask/detect-provider": "^1.2.0", + "@sphereon/pex": "^1.0.2", + "@spruceid/didkit-wasm": "^0.2.1", + "@spruceid/didkit-wasm-node": "^0.2.1", "@walletconnect/ethereum-provider": "1.7.1", "axios": "^0.26.0", "base64url": "^3.0.1", diff --git a/src/index.ts b/src/index.ts index 8536f910..0dbe8205 100644 --- a/src/index.ts +++ b/src/index.ts @@ -23,7 +23,7 @@ export * from './modules/domains'; export * from './modules/messaging'; export * from './modules/signer'; export * from './modules/staking'; -export * from './modules/verifiableCredentials'; +export * from './modules/verifiable-credentials'; export * from './errors'; export * from './config'; export * from './utils'; diff --git a/src/init.ts b/src/init.ts index 492f3f9c..a6fde3da 100644 --- a/src/init.ts +++ b/src/init.ts @@ -22,7 +22,7 @@ import { defaultKmsServerUrl, } from './utils'; import { chainConfigs } from './config'; -import { getVerifiableCredentialsService } from './modules/verifiableCredentials'; +import { getVerifiableCredentialsService } from './modules/verifiable-credentials'; export async function initWithPrivateKeySigner( privateKey: string, diff --git a/src/modules/verifiableCredentials/index.ts b/src/modules/verifiable-credentials/index.ts similarity index 63% rename from src/modules/verifiableCredentials/index.ts rename to src/modules/verifiable-credentials/index.ts index 931c2370..5335b809 100644 --- a/src/modules/verifiableCredentials/index.ts +++ b/src/modules/verifiable-credentials/index.ts @@ -1,8 +1,8 @@ -export * from './verifiableCredentials.types'; -export * from './verifiableCredentialsBase.service'; +export * from './types'; +export * from './verifiable-credentials-base.service'; import { SignerService } from '../signer'; -import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; +import { VerifiableCredentialsServiceBase } from './verifiable-credentials-base.service'; import { ExecutionEnvironment, executionEnvironment } from '../../utils'; export const getVerifiableCredentialsService = async ( @@ -10,11 +10,11 @@ export const getVerifiableCredentialsService = async ( ): Promise => { let service: VerifiableCredentialsServiceBase; if (executionEnvironment() === ExecutionEnvironment.NODE) { - service = await import('./verifiableCredentialsNode.service').then( + service = await import('./verifiable-credentials-node.service').then( (module) => module.VerifiableCredentialsServiceNode.create(signerService) ); } else { - service = await import('./verifiableCredentialsWeb.service').then( + service = await import('./verifiable-credentials-web.service').then( (module) => module.VerifiableCredentialsServiceWeb.create(signerService) ); } diff --git a/src/modules/verifiable-credentials/types/eip712.types.ts b/src/modules/verifiable-credentials/types/eip712.types.ts new file mode 100644 index 00000000..a4343fb1 --- /dev/null +++ b/src/modules/verifiable-credentials/types/eip712.types.ts @@ -0,0 +1,92 @@ +export const verifiableCredentialEIP712Types = { + EIP712Domain: [], + VerifiableCredential: [ + { name: '@context', type: 'string[]' }, + { name: 'id', type: 'string' }, + { name: 'type', type: 'string[]' }, + { name: 'issuer', type: 'string' }, + { name: 'issuanceDate', type: 'string' }, + { name: 'credentialSubject', type: 'CredentialSubject' }, + { name: 'proof', type: 'Proof' }, + ], + EWFRole: [ + { name: 'namespace', type: 'string' }, + { name: 'version', type: 'string' }, + ], + IssuerFields: [ + { name: 'key', type: 'string' }, + { name: 'value', type: 'string' }, + ], + CredentialSubject: [ + { name: 'id', type: 'string' }, + { name: 'role', type: 'EWFRole' }, + { name: 'issuerFields', type: 'IssuerFields[]' }, + ], + Proof: [ + { name: '@context', type: 'string' }, + { name: 'verificationMethod', type: 'string' }, + { name: 'created', type: 'string' }, + { name: 'proofPurpose', type: 'string' }, + { name: 'type', type: 'string' }, + ], +}; + +export const verifiablePresentationEIP712Types = { + Proof: verifiableCredentialEIP712Types.Proof, + VerifiablePresentation: [ + { type: 'string[]', name: '@context' }, + { type: 'string', name: 'id' }, + { type: 'string[]', name: 'type' }, + { type: 'string', name: 'holder' }, + { type: 'Proof', name: 'proof' }, + ], + EIP712Domain: [], +}; + +export const verifiablePresentationWithCredentialEIP712Types = { + VC712DomainTypedDataField: [ + { name: 'name', type: 'string' }, + { name: 'type', type: 'string' }, + ], + VC712DomainData: [], + VC712DomainSchema: [ + { name: 'CredentialSubject', type: 'VC712DomainTypedDataField[]' }, + { name: 'EIP712Domain', type: 'VC712DomainTypedDataField[]' }, + { name: 'EWFRole', type: 'VC712DomainTypedDataField[]' }, + { name: 'IssuerFields', type: 'VC712DomainTypedDataField[]' }, + { name: 'Proof', type: 'VC712DomainTypedDataField[]' }, + { name: 'VerifiableCredential', type: 'VC712DomainTypedDataField[]' }, + ], + VC712Domain: [ + { name: 'domain', type: 'VC712DomainData' }, + { name: 'messageSchema', type: 'VC712DomainSchema' }, + { name: 'primaryType', type: 'string' }, + ], + EWFRole: verifiableCredentialEIP712Types.EWFRole, + IssuerFields: verifiableCredentialEIP712Types.IssuerFields, + CredentialSubject: verifiableCredentialEIP712Types.CredentialSubject, + VCProof: [ + ...verifiableCredentialEIP712Types.Proof, + { type: 'string', name: 'proofValue' }, + { type: 'VC712Domain', name: 'eip712Domain' }, + ], + VerifiableCredential: [ + { type: 'string[]', name: '@context' }, + { type: 'string', name: 'id' }, + { type: 'string[]', name: 'type' }, + { type: 'string', name: 'issuer' }, + { type: 'string', name: 'issuanceDate' }, + { type: 'CredentialSubject', name: 'credentialSubject' }, + { type: 'VCProof', name: 'proof' }, + ], + Proof: verifiableCredentialEIP712Types.Proof, + VerifiablePresentation: [ + { type: 'string[]', name: '@context' }, + { type: 'string', name: 'id' }, + { type: 'string[]', name: 'type' }, + { type: 'string', name: 'holder' }, + { type: 'VerifiableCredential[]', name: 'verifiableCredential' }, + { type: 'Proof', name: 'proof' }, + ], + EIP712Domain: [], +}; diff --git a/src/modules/verifiable-credentials/types/index.ts b/src/modules/verifiable-credentials/types/index.ts new file mode 100644 index 00000000..b9b34788 --- /dev/null +++ b/src/modules/verifiable-credentials/types/index.ts @@ -0,0 +1,3 @@ +export * from './eip712.types'; +export * from './role-credential.types'; +export * from './verifiable-credentials.types'; diff --git a/src/modules/verifiable-credentials/types/role-credential.types.ts b/src/modules/verifiable-credentials/types/role-credential.types.ts new file mode 100644 index 00000000..fbd82157 --- /dev/null +++ b/src/modules/verifiable-credentials/types/role-credential.types.ts @@ -0,0 +1,19 @@ +import { CredentialSubject } from '@ew-did-registry/credentials-interface'; + +export interface IssuerFields { + key: string; + value: string | number; +} + +export interface RoleCredentialSubject extends CredentialSubject { + /* + * https://www.w3.org/TR/vc-data-model/#identifiers + */ + id: string; + + role: { + namespace: string; + version: string; + }; + issuerFields: IssuerFields[]; +} diff --git a/src/modules/verifiable-credentials/types/verifiable-credentials.types.ts b/src/modules/verifiable-credentials/types/verifiable-credentials.types.ts new file mode 100644 index 00000000..7228f75e --- /dev/null +++ b/src/modules/verifiable-credentials/types/verifiable-credentials.types.ts @@ -0,0 +1,31 @@ +import { IPresentationDefinition } from '@sphereon/pex'; +import { IssuerFields } from './role-credential.types'; + +/* + * Parameters required to construct the subject for a role credential + * https://www.w3.org/TR/vc-data-model/#credential-subject + */ +export interface RoleCredentialSubjectParams { + /* + * https://www.w3.org/TR/vc-data-model/#identifiers + */ + id: string; + namespace: string; + version: string; + issuerFields?: IssuerFields[]; +} + +export interface ProofOptions { + verificationMethod?: string; + proofPurpose?: string; +} + +export interface CreatePresentationParams { + presentationDefinition?: IPresentationDefinition; +} + +export interface VerifyVerifiableCredentialResults { + checks: string[]; + warnings: string[]; + errors: string[]; +} diff --git a/src/modules/verifiable-credentials/verifiable-credentials-base.service.ts b/src/modules/verifiable-credentials/verifiable-credentials-base.service.ts new file mode 100644 index 00000000..d398b3a5 --- /dev/null +++ b/src/modules/verifiable-credentials/verifiable-credentials-base.service.ts @@ -0,0 +1,315 @@ +import { ICredentialSubject, PEX } from '@sphereon/pex'; +import { v4 as uuid } from 'uuid'; +import { + VerifiableCredential, + VerifiablePresentation, + Credential, + Presentation, +} from '@ew-did-registry/credentials-interface'; +import { SignerService } from '../signer'; +import { + ProofOptions, + VerifyVerifiableCredentialResults, + RoleCredentialSubjectParams, + RoleCredentialSubject, + CreatePresentationParams, + verifiableCredentialEIP712Types, + verifiablePresentationEIP712Types, + verifiablePresentationWithCredentialEIP712Types, +} from './types'; + +export abstract class VerifiableCredentialsServiceBase { + /** + * @param {string} credential - The credential object in JSON format + * @param {string} linked_data_proof_options - The proof options in JSON format + * @param {string} public_key - Information about public key that credential will be signed in JSON format + * @description get prepared data for signing a credential + * @returns {Promise} JSON stringified prepared data (including EIP712 types and credential with proof ready for signing) + */ + protected abstract prepareIssueCredential( + credential: string, + linked_data_proof_options: string, + public_key: string + ): Promise; + + /** + * @param {string} credential - The credential object in JSON format + * @param {string} preparation - Output of `prepareIssueCredential` method + * @param {string} signature - Signature of the credential + * @description get verifiable credential object + * @returns {Promise} verifiable credential object in JSON format + */ + protected abstract completeIssueCredential( + credential: string, + preparation: string, + signature: string + ): Promise; + + /** + * @param {string} vc - The verifiable credential object in JSON format + * @param {string} proof_options - The proof options in JSON format + * @description verify given verifiable credential + * @returns {Promise} object with results of verification in JSON format + */ + protected abstract verifyCredential( + vc: string, + proof_options: string + ): Promise; + + /** + * @param {string} presentation - The presentation object in JSON format + * @param {string} linked_data_proof_options - The proof options in JSON format + * @param {string} public_key - Information about public key that presentation will be signed in JSON format + * @description get prepared data for signing a presentation + * @returns {Promise} JSON stringified prepared data (including EIP712 types and presentation with proof ready for signing) + */ + protected abstract prepareIssuePresentation( + presentation: string, + linked_data_proof_options: string, + public_key: string + ): Promise; + + /** + * @param {string} presentation - The presentation object in JSON format + * @param {string} preparation - Output of `prepareIssuePresentation` method + * @param {string} signature - Signature of the presentation + * @description get verifiable presentation object + * @returns {Promise} verifiable presentation object in JSON format + */ + protected abstract completeIssuePresentation( + presentation: string, + preparation: string, + signature: string + ): Promise; + + /** + * @param {string} vp - The verifiable presentation object in JSON format + * @param {string} proof_options - The proof options in JSON format + * @description verify given verifiable presentation (included verifiable credentials are not verified) + * @returns {Promise} object with results of verification in JSON format + */ + protected abstract verifyPresentation( + vp: string, + proof_options: string + ): Promise; + + constructor(protected readonly _signerService: SignerService) {} + + // * Should be overridden by the implementation + static async create( + // eslint-disable-next-line @typescript-eslint/no-unused-vars + signerService: SignerService + ): Promise { + throw new Error('Not implemented'); + } + + // TODO: Host EWF VC Context and Vocab + private createCredential( + params: RoleCredentialSubjectParams + ): Credential { + const credential = { + '@context': ['https://www.w3.org/2018/credentials/v1'], + id: 'urn:uuid:' + uuid(), + type: ['VerifiableCredential', 'EWFRole'], + issuer: this._signerService.didHex, + issuanceDate: new Date().toISOString(), + credentialSubject: { + role: { + namespace: params.namespace, + version: params.version, + }, + issuerFields: params.issuerFields + ? [ + ...params.issuerFields.map((field) => ({ + ...field, + value: field.value.toString(), + })), + ] + : [], + id: params.id, + }, + }; + return credential; + } + + public async createRoleVC( + credentialParams: RoleCredentialSubjectParams, + proofOptions?: ProofOptions + ): Promise> { + const did = this._signerService.didHex; + + const credentialObject = this.createCredential(credentialParams); + const proofOptionsObject = { + verificationMethod: + proofOptions?.verificationMethod || did + '#controller', + proofPurpose: proofOptions?.proofPurpose || 'assertionMethod', + eip712Domain: { + primaryType: 'VerifiableCredential', + domain: {}, + messageSchema: { + // TODO: generate types from the credential + ...verifiableCredentialEIP712Types, + EIP712Domain: [], + }, + }, + }; + + const keyType = { + kty: 'EC', + crv: 'secp256k1', + alg: 'ES256K-R', + key_ops: ['signTypedData'], + }; + + const stringifyCredential = JSON.stringify(credentialObject); + const preparedVC = await this.prepareIssueCredential( + stringifyCredential, + JSON.stringify(proofOptionsObject), + JSON.stringify(keyType) + ); + const preparation = JSON.parse(preparedVC); + + const typedData = preparation.signingInput; + if (!typedData || !typedData.primaryType) { + throw new Error('Expected EIP-712 TypedData'); + } + + delete typedData.types['EIP712Domain']; + + const signature = await this._signerService.signTypedData( + typedData.domain, + typedData.types, + typedData.message + ); + + const signedCredential = await this.completeIssueCredential( + stringifyCredential, + preparedVC, + signature + ); + + return JSON.parse( + signedCredential + ) as VerifiableCredential; + } + + public createPresentation( + verifiableCredential: VerifiableCredential[], + options?: CreatePresentationParams + ): Presentation { + const did = this._signerService.didHex; + const pex = new PEX(); + + if (options?.presentationDefinition) { + return { + ...pex.presentationFrom( + options.presentationDefinition, + verifiableCredential, + did + ), + id: 'urn:uuid:' + uuid(), + } as Presentation; + } + + return { + '@context': ['https://www.w3.org/2018/credentials/v1'], + id: 'urn:uuid:' + uuid(), + type: ['VerifiablePresentation'], + holder: did, + verifiableCredential, + }; + } + + public async createVerifiablePresentation( + verifiableCredential: VerifiableCredential[], + options?: ProofOptions + ): Promise { + const did = this._signerService.didHex; + + // TODO: generate types from the presentation + const types = verifiableCredential + ? verifiablePresentationWithCredentialEIP712Types + : verifiablePresentationEIP712Types; + + const presentationTemplate = { + ...this.createPresentation(verifiableCredential), + proof: { + '@context': 'https://w3id.org/security/suites/eip712sig-2021/v1', + type: 'EthereumEip712Signature2021', + created: new Date().toISOString(), + verificationMethod: options?.verificationMethod || did + '#controller', + proofPurpose: options?.proofPurpose || 'authentication', + }, + }; + + const signature = await this._signerService.signTypedData( + {}, + { ...types }, + presentationTemplate + ); + + return { + ...presentationTemplate, + proof: { + ...presentationTemplate.proof, + proofValue: signature, + eip712Domain: { + domain: {}, + messageSchema: types, + primaryType: 'VerifiablePresentation', + }, + }, + }; + } + + public async verify( + vp: VerifiablePresentation | VerifiableCredential, + options?: ProofOptions + ) { + let verifyFunc: (vp: string, proof_options: string) => Promise; + switch (vp.type.includes('VerifiablePresentation')) { + case true: + verifyFunc = this.verifyPresentation; + break; + case false: + verifyFunc = this.verifyCredential; + break; + default: + throw new Error( + 'Unsupported verifiable credential or presentation type' + ); + } + + const verifyResultsString = await verifyFunc( + JSON.stringify(vp), + JSON.stringify(options || {}) + ); + + const verifyResults = JSON.parse( + verifyResultsString + ) as VerifyVerifiableCredentialResults; + + if (verifyResults.errors.length) { + throw new Error( + `Verifiable Credential or Presentation is invalid, errors: ${verifyResults.errors.join( + ', ' + )}` + ); + } + + if ( + vp.type.includes('VerifiablePresentation') && + 'verifiableCredential' in vp && + vp.verifiableCredential && + Array.isArray(vp.verifiableCredential) + ) { + const vcsVerification = await Promise.all([ + ...vp.verifiableCredential.map((vc) => this.verify(vc)), + ]); + + return vcsVerification.every(Boolean); + } + + return true; + } +} diff --git a/src/modules/verifiable-credentials/verifiable-credentials-node.service.ts b/src/modules/verifiable-credentials/verifiable-credentials-node.service.ts new file mode 100644 index 00000000..07625537 --- /dev/null +++ b/src/modules/verifiable-credentials/verifiable-credentials-node.service.ts @@ -0,0 +1,61 @@ +import { + prepareIssueCredential, + completeIssueCredential, + verifyCredential, + verifyPresentation, +} from 'didkit-wasm-node'; +import { + prepareIssuePresentation, + completeIssuePresentation, +} from '@spruceid/didkit-wasm-node'; +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiable-credentials-base.service'; + +export class VerifiableCredentialsServiceNode extends VerifiableCredentialsServiceBase { + protected prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + protected completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + protected verifyCredential: ( + vc: string, + proof_options: string + ) => Promise; + + protected prepareIssuePresentation: ( + presentation: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + protected completeIssuePresentation: ( + presentation: string, + preparation: string, + signature: string + ) => Promise; + protected verifyPresentation: ( + vp: string, + proof_options: string + ) => Promise; + + constructor(_signerService: SignerService) { + super(_signerService); + + this.completeIssueCredential = completeIssueCredential; + this.prepareIssueCredential = prepareIssueCredential; + this.verifyCredential = verifyCredential; + + this.prepareIssuePresentation = prepareIssuePresentation; + this.completeIssuePresentation = completeIssuePresentation; + this.verifyPresentation = verifyPresentation; + } + + static async create(signerService: SignerService) { + const service = new VerifiableCredentialsServiceNode(signerService); + return service; + } +} diff --git a/src/modules/verifiable-credentials/verifiable-credentials-web.service.ts b/src/modules/verifiable-credentials/verifiable-credentials-web.service.ts new file mode 100644 index 00000000..ff73d9e3 --- /dev/null +++ b/src/modules/verifiable-credentials/verifiable-credentials-web.service.ts @@ -0,0 +1,61 @@ +import { + prepareIssueCredential, + completeIssueCredential, + verifyCredential, + verifyPresentation, +} from 'didkit-wasm'; +import { + prepareIssuePresentation, + completeIssuePresentation, +} from '@spruceid/didkit-wasm'; +import { SignerService } from '../signer'; +import { VerifiableCredentialsServiceBase } from './verifiable-credentials-base.service'; + +export class VerifiableCredentialsServiceWeb extends VerifiableCredentialsServiceBase { + protected prepareIssueCredential: ( + credential: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + protected completeIssueCredential: ( + credential: string, + preparation: string, + signature: string + ) => Promise; + protected verifyCredential: ( + vc: string, + proof_options: string + ) => Promise; + + protected prepareIssuePresentation: ( + presentation: string, + linked_data_proof_options: string, + public_key: string + ) => Promise; + protected completeIssuePresentation: ( + presentation: string, + preparation: string, + signature: string + ) => Promise; + protected verifyPresentation: ( + vp: string, + proof_options: string + ) => Promise; + + constructor(_signerService: SignerService) { + super(_signerService); + + this.completeIssueCredential = completeIssueCredential; + this.prepareIssueCredential = prepareIssueCredential; + this.verifyCredential = verifyCredential; + + this.prepareIssuePresentation = prepareIssuePresentation; + this.completeIssuePresentation = completeIssuePresentation; + this.verifyPresentation = verifyPresentation; + } + + static async create(signerService: SignerService) { + const service = new VerifiableCredentialsServiceWeb(signerService); + return service; + } +} diff --git a/src/modules/verifiableCredentials/verifiableCredentials.types.ts b/src/modules/verifiableCredentials/verifiableCredentials.types.ts deleted file mode 100644 index 626a63be..00000000 --- a/src/modules/verifiableCredentials/verifiableCredentials.types.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - TypedDataDomain, - TypedDataField, -} from '@ethersproject/abstract-signer'; - -export interface VerifiableCredential { - '@context': string | string[]; - id?: string; - issuer: string; - type: string[]; - credentialSubject: T; -} - -export interface SignedVerifiableCredential extends VerifiableCredential { - proof: { - '@context': string | string[]; - type: string; - proofPurpose: string; - proofValue: string; - verificationMethod: string; - created: string; - eip712Domain: { - domain: TypedDataDomain; - messageSchema: { - CredentialSubject: TypedDataField[]; - EIP712Domain: TypedDataField[]; - Proof: TypedDataField[]; - VerifiableCredential: TypedDataField[]; - }; - primaryType: string; - }; - }; -} - -export interface SignVerifiableCredentialOptions { - verificationMethod?: string; - proofPurpose?: string; - domain?: Partial; -} - -export interface VerifyVerifiableCredentialOptions { - proofPurpose?: string; - verificationMethod?: string; -} - -export interface VerifyVerifiableCredentialResults { - checks: string[]; - warnings: string[]; - errors: string[]; -} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts deleted file mode 100644 index 85800163..00000000 --- a/src/modules/verifiableCredentials/verifiableCredentialsBase.service.ts +++ /dev/null @@ -1,136 +0,0 @@ -import { SignerService } from '../signer'; -import { - SignedVerifiableCredential, - SignVerifiableCredentialOptions, - VerifiableCredential, - VerifyVerifiableCredentialOptions, - VerifyVerifiableCredentialResults, -} from './verifiableCredentials.types'; - -export abstract class VerifiableCredentialsServiceBase { - abstract prepareIssueCredential: ( - credential: string, - linked_data_proof_options: string, - public_key: string - ) => Promise; - abstract completeIssueCredential: ( - credential: string, - preparation: string, - signature: string - ) => Promise; - abstract verifyCredential: ( - vc: string, - proof_options: string - ) => Promise; - - constructor(protected readonly _signerService: SignerService) {} - - static async create( - // eslint-disable-next-line @typescript-eslint/no-unused-vars - signerService: SignerService - ): Promise { - throw new Error('Not implemented'); - } - - public async verifyVerifiableCredential( - vc: SignedVerifiableCredential, - options?: VerifyVerifiableCredentialOptions - ) { - const verifyResultsString = await this.verifyCredential( - JSON.stringify(vc), - JSON.stringify(options || {}) - ); - - const verifyResults = JSON.parse( - verifyResultsString - ) as VerifyVerifiableCredentialResults; - - if (verifyResults.errors.length) { - throw new Error( - `Verifiable Credential is invalid, errors: ${verifyResults.errors.join( - ', ' - )}` - ); - } - - return true; - } - - public async signVerifiableCredential( - credential: VerifiableCredential, - options?: SignVerifiableCredentialOptions - ) { - const did = credential.issuer; - - const proofOptions = { - verificationMethod: options?.verificationMethod || did + '#controller', - proofPurpose: options?.proofPurpose || 'assertionMethod', - eip712Domain: { - primaryType: 'VerifiableCredential', - domain: { - name: 'EWF Verifiable Credential', - ...options?.domain, - }, - messageSchema: { - EIP712Domain: [{ name: 'name', type: 'string' }], - VerifiableCredential: [ - { name: '@context', type: 'string[]' }, - { name: 'id', type: 'string' }, - { name: 'type', type: 'string[]' }, - { name: 'issuer', type: 'string' }, - { name: 'issuanceDate', type: 'string' }, - { name: 'credentialSubject', type: 'CredentialSubject' }, - { name: 'proof', type: 'Proof' }, - ], - CredentialSubject: [ - { name: 'address', type: 'string' }, - { name: 'sameAs', type: 'string' }, - ], - Proof: [ - { name: '@context', type: 'string' }, - { name: 'verificationMethod', type: 'string' }, - { name: 'created', type: 'string' }, - { name: 'proofPurpose', type: 'string' }, - { name: 'type', type: 'string' }, - ], - }, - }, - }; - - const keyType = { - kty: 'EC', - crv: 'secp256k1', - alg: 'ES256K-R', - key_ops: ['signTypedData'], - }; - - const stringifyCredential = JSON.stringify(credential); - const preparedVC = await this.prepareIssueCredential( - stringifyCredential, - JSON.stringify(proofOptions), - JSON.stringify(keyType) - ); - const preparation = JSON.parse(preparedVC); - - const typedData = preparation.signingInput; - if (!typedData || !typedData.primaryType) { - throw new Error('Expected EIP-712 TypedData'); - } - - delete typedData.types['EIP712Domain']; - - const signature = await this._signerService.signTypedData( - typedData.domain, - typedData.types, - typedData.message - ); - - const signedCredential = await this.completeIssueCredential( - stringifyCredential, - preparedVC, - signature - ); - - return JSON.parse(signedCredential) as SignedVerifiableCredential; - } -} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts deleted file mode 100644 index 9fe110c7..00000000 --- a/src/modules/verifiableCredentials/verifiableCredentialsNode.service.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - prepareIssueCredential, - completeIssueCredential, - verifyCredential, -} from 'didkit-wasm-node'; -import { SignerService } from '../signer'; -import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; - -export class VerifiableCredentialsServiceNode extends VerifiableCredentialsServiceBase { - prepareIssueCredential: ( - credential: string, - linked_data_proof_options: string, - public_key: string - ) => Promise; - completeIssueCredential: ( - credential: string, - preparation: string, - signature: string - ) => Promise; - verifyCredential: (vc: string, proof_options: string) => Promise; - - constructor(_signerService: SignerService) { - super(_signerService); - - this.completeIssueCredential = completeIssueCredential; - this.prepareIssueCredential = prepareIssueCredential; - this.verifyCredential = verifyCredential; - } - - static async create(signerService: SignerService) { - const service = new VerifiableCredentialsServiceNode(signerService); - return service; - } -} diff --git a/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts b/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts deleted file mode 100644 index 58c32b48..00000000 --- a/src/modules/verifiableCredentials/verifiableCredentialsWeb.service.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { - prepareIssueCredential, - completeIssueCredential, - verifyCredential, -} from 'didkit-wasm'; -import { SignerService } from '../signer'; -import { VerifiableCredentialsServiceBase } from './verifiableCredentialsBase.service'; - -export class VerifiableCredentialsServiceWeb extends VerifiableCredentialsServiceBase { - prepareIssueCredential: ( - credential: string, - linked_data_proof_options: string, - public_key: string - ) => Promise; - completeIssueCredential: ( - credential: string, - preparation: string, - signature: string - ) => Promise; - verifyCredential: (vc: string, proof_options: string) => Promise; - - constructor(_signerService: SignerService) { - super(_signerService); - - this.completeIssueCredential = completeIssueCredential; - this.prepareIssueCredential = prepareIssueCredential; - this.verifyCredential = verifyCredential; - } - - static async create(signerService: SignerService) { - const service = new VerifiableCredentialsServiceWeb(signerService); - return service; - } -} diff --git a/src/utils/updateLegacyIssuers.ts b/src/utils/updateLegacyIssuers.ts index 16007c4c..aeb51e22 100644 --- a/src/utils/updateLegacyIssuers.ts +++ b/src/utils/updateLegacyIssuers.ts @@ -18,15 +18,6 @@ import { SignerT } from '../modules/signer'; const { JsonRpcProvider } = providers; -// TODO: implement this function -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const updateLegacyIssuers = (a: string, b: Wallet, c: number): any[] => { - a; - b; - c; - throw new Error('Method not implemented.'); -}; - /** * @description - Checks that role issuers of all roles under `rootDomain` contains method-specific-id and adds it if missing * `signer` must own `rootDomain` on `targetChain`