diff --git a/.circleci/config.yml b/.circleci/config.yml index fd0d8d2cd..d5fd8e768 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -311,6 +311,36 @@ jobs: command: 'yarn workspace @requestnetwork/epk-signature run test --ci --maxWorkers=1' - store_test_results: path: packages/epk-signature/reports/ + test-epk-cipher: + docker: + - *node_image + working_directory: *working_directory + steps: + - attach_workspace: + at: *working_directory + - run: + name: 'Build epk-cipher' + command: 'yarn workspace @requestnetwork/epk-cipher run build' + - run: + name: 'Test epk-cipher' + command: 'yarn workspace @requestnetwork/epk-cipher run test --ci --maxWorkers=1' + - store_test_results: + path: packages/epk-cipher/reports/ + test-lit-protocol-cipher: + docker: + - *node_image + working_directory: *working_directory + steps: + - attach_workspace: + at: *working_directory + - run: + name: 'Build lit-protocol-cipher' + command: 'yarn workspace @requestnetwork/lit-protocol-cipher run build' + - run: + name: 'Test lit-protocol-cipher' + command: 'yarn workspace @requestnetwork/lit-protocol-cipher run test --ci --maxWorkers=1' + - store_test_results: + path: packages/lit-protocol-cipher/reports/ test-epk-decryption: docker: - *node_image @@ -558,6 +588,12 @@ workflows: - test-currency: requires: - build + - test-epk-cipher: + requires: + - build + - test-lit-protocol-cipher: + requires: + - build - test-epk-signature: requires: - build @@ -591,6 +627,8 @@ workflows: - test-currency - test-data-access - test-data-format + - test-epk-cipher + - test-lit-protocol-cipher - test-epk-decryption - test-epk-signature - test-ethereum-storage diff --git a/README.md b/README.md index 9ce79a5b8..6790bbe8d 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,11 @@ Join the [Request Discord][request-discord-url] to get in touch with us. | [`@requestnetwork/request-client.js`](/packages/request-client.js) | [![npm](https://img.shields.io/npm/v/@requestnetwork/request-client.js.svg)](https://www.npmjs.com/package/@requestnetwork/request-client.js) | Library to use Request nodes as servers | | [`@requestnetwork/data-access`](/packages/data-access) | [![npm](https://img.shields.io/npm/v/@requestnetwork/data-access.svg)](https://www.npmjs.com/package/@requestnetwork/data-access) | Indexing an batching of transactions | | [`@requestnetwork/data-format`](/packages/data-format) | [![npm](https://img.shields.io/npm/v/@requestnetwork/data-format.svg)](https://www.npmjs.com/package/@requestnetwork/data-format) | Standards for data stored on Request, like invoices format | +| [`@requestnetwork/epk-cipher`](/packages/epk-cipher) | [![npm](https://img.shields.io/npm/v/@requestnetwork/epk-cipher.svg)](https://www.npmjs.com/package/@requestnetwork/epk-cipher) | Encrypt /Decrypt requests using Ethereum private keys | | [`@requestnetwork/epk-signature`](/packages/epk-signature) | [![npm](https://img.shields.io/npm/v/@requestnetwork/epk-signature.svg)](https://www.npmjs.com/package/@requestnetwork/epk-signature) | Sign requests using Ethereum private keys | | [`@requestnetwork/ethereum-storage`](/packages/ethereum-storage) | [![npm](https://img.shields.io/npm/v/@requestnetwork/ethereum-storage.svg)](https://www.npmjs.com/package/@requestnetwork/ethereum-storage) | Storage of Request data on Ethereum and IPFS, with custom indexing | | [`@requestnetwork/epk-decryption`](/packages/epk-decryption) | [![npm](https://img.shields.io/npm/v/@requestnetwork/epk-decryption.svg)](https://www.npmjs.com/package/@requestnetwork/epk-decryption) | Decrypt encrypted requests using Ethereum private keys | +| [`@requestnetwork/lit-protocol-cipher`](/packages/lit-protocol-cipher) | [![npm](https://img.shields.io/npm/v/@requestnetwork/lit-protocol-cipher.svg)](https://www.npmjs.com/package/@requestnetwork/lit-protocol-cipher) | Encrypt / Decrypt requests using Lit Protocol | | [`@requestnetwork/payment-detection`](/packages/payment-detection) | [![npm](https://img.shields.io/npm/v/@requestnetwork/payment-detection.svg)](https://www.npmjs.com/package/@requestnetwork/payment-detection) | Client-side payment detection, to compute the balance. | | [`@requestnetwork/payment-processor`](/packages/payment-processor) | [![npm](https://img.shields.io/npm/v/@requestnetwork/payment-processor.svg)](https://www.npmjs.com/package/@requestnetwork/payment-processor) | Pay a request using a web3 wallet | | [`@requestnetwork/request-logic`](/packages/request-logic) | [![npm](https://img.shields.io/npm/v/@requestnetwork/request-logic.svg)](https://www.npmjs.com/package/@requestnetwork/request-logic) | The Request business logic: properties and actions of requests | diff --git a/packages/epk-cipher/.nycrc b/packages/epk-cipher/.nycrc new file mode 100644 index 000000000..7d71de251 --- /dev/null +++ b/packages/epk-cipher/.nycrc @@ -0,0 +1,8 @@ +{ + "extension": [".ts"], + "include": ["src/*.ts", "src/**/*.ts"], + "require": ["ts-node/register"], + "reporter": ["text-summary", "json", "html"], + "sourceMap": true, + "all": true +} diff --git a/packages/epk-cipher/.vscode/settings.json b/packages/epk-cipher/.vscode/settings.json new file mode 100644 index 000000000..379bec3a4 --- /dev/null +++ b/packages/epk-cipher/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "mochaExplorer.files": "**/test/**/*.ts", + "mochaExplorer.require": "ts-node/register", + "mochaExplorer.cwd": "../.." +} diff --git a/packages/epk-cipher/README.md b/packages/epk-cipher/README.md new file mode 100644 index 000000000..c624a7883 --- /dev/null +++ b/packages/epk-cipher/README.md @@ -0,0 +1,63 @@ +# @requestnetwork/epk-cipher + +Ethereum Private Key Cipher Provider. + +`@requestnetwork/epk-cipher` is a typescript library part of the [Request Network protocol](https://github.com/RequestNetwork/requestNetwork). + +Implementation of the cipher provider from the private keys. +The cipher provider is used to make encryption and decryption in the Request Network Protocol (e.g.: see [Transaction Manager](/packages/transaction-manager)). + +It uses the Request Network Protocol concept of `Identity` described in the [request logic specification](/packages/request-logic/specs/request-logic-specification.md). + +## Installation + +```bash +npm install @requestnetwork/epk-cipher +``` + +## Usage + +```javascript +import { EncryptionTypes, IdentityTypes } from '@requestnetwork/types' + +import EthereumPrivateKeyCipherProvider from '@requestnetwork/epk-cipher' + +const cipherParametersExample: EncryptionTypes.ICipherParameters = { + key: '0xc87509a1c067bbde78beb793e6fa76530b6382a4c0241e5e4a9ec0a0f44dc0d3', + method: EncryptionTypes.METHOD.ECIES, +}; + +// Identity from the previous signature parameter +const identityExample: IdentityTypes.IIdentity = { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: '0x627306090abab3a6e1400e9345bc60c78a8bef57' +}; + +// Construct the provider with a +const cipherProvider = new EthereumPrivateKeyCipherProvider(cipherParametersExample); + +// can list the identity usable +const listOfAvailableIdentity = cipherProvider.getAllRegisteredIdentities(); // [identityExample] + +// can decrypt data with identity +const dataToDecrypt = "02...."; +const decryptedData = await cipherProvider.decrypt(dataToDecrypt, identityExample); // "Decrypted data..." + +// can add a new decryption parameters +cipherProvider.addDecryptionParameters({method: EncryptionTypes.METHOD.ECIES, key: ...}); + +// can remove a cipher parameters from its identity +cipherProvider.removeRegisteredIdentity({type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, value: ...}); + +// can remove all cipher parameters +cipherProvider.clearAllRegisteredIdentities(); +``` + +## Contributing + +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. +[Read the contributing guide](/CONTRIBUTING.md) + +## License + +[MIT](/LICENSE) diff --git a/packages/epk-cipher/jest.config.js b/packages/epk-cipher/jest.config.js new file mode 100644 index 000000000..be20f1cb6 --- /dev/null +++ b/packages/epk-cipher/jest.config.js @@ -0,0 +1,6 @@ +const jestCommonConfig = require('../../jest.config'); + +/** @type {import('jest').Config} */ +module.exports = { + ...jestCommonConfig, +}; diff --git a/packages/epk-cipher/package.json b/packages/epk-cipher/package.json new file mode 100644 index 000000000..fc80c0aa5 --- /dev/null +++ b/packages/epk-cipher/package.json @@ -0,0 +1,68 @@ +{ + "name": "@requestnetwork/epk-cipher", + "version": "0.1.0", + "publishConfig": { + "access": "public" + }, + "description": "Cipher provider using ethereum private keys.", + "keywords": [ + "requestnetwork", + "cipher-provider" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/RequestNetwork/requestNetwork.git" + }, + "homepage": "https://github.com/RequestNetwork/requestNetwork/tree/master/packages/epk-cipher#readme", + "bugs": { + "url": "https://github.com/RequestNetwork/requestNetwork/issues" + }, + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "main": "dist/index.js", + "types": "dist/index.d.ts", + "directories": { + "lib": "src", + "test": "test" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "run-s build:commonjs build:umd", + "build:commonjs": "tsc -b tsconfig.build.json", + "build:umd": "webpack", + "clean": "rm -rf dist tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo", + "lint": "eslint . --fix", + "lint:check": "eslint .", + "test": "jest", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@requestnetwork/multi-format": "0.19.1", + "@requestnetwork/types": "0.45.1", + "@requestnetwork/utils": "0.45.1", + "tslib": "2.5.0" + }, + "devDependencies": { + "@types/jest": "29.5.6", + "amd-loader": "0.0.8", + "crypto-browserify": "3.12.0", + "duplicate-package-checker-webpack-plugin": "3.0.0", + "jest": "29.5.0", + "jest-junit": "16.0.0", + "npm-run-all": "4.1.5", + "source-map-support": "0.5.19", + "stream-browserify": "3.0.0", + "terser-webpack-plugin": "4.2.3", + "ts-jest": "29.1.0", + "ts-loader": "8.4.0", + "ts-node": "10.9.1", + "typescript": "5.1.3", + "webpack": "5.94.0", + "webpack-bundle-analyzer": "4.2.0", + "webpack-cli": "3.3.12" + } +} diff --git a/packages/epk-cipher/src/ethereum-private-key-cipher-provider.ts b/packages/epk-cipher/src/ethereum-private-key-cipher-provider.ts new file mode 100644 index 000000000..e2df0fc75 --- /dev/null +++ b/packages/epk-cipher/src/ethereum-private-key-cipher-provider.ts @@ -0,0 +1,174 @@ +import { CipherProviderTypes, EncryptionTypes, IdentityTypes } from '@requestnetwork/types'; + +import { decrypt, ecEncrypt, getAddressFromPrivateKey } from '@requestnetwork/utils'; + +/** Type of the dictionary of decryptionParameters (private keys) indexed by ethereum address */ +type IDecryptionParametersDictionary = Map; + +/** + * Implementation of the decryption provider from private key + * Allows to decrypt() with "ethereumAddress" identities thanks to their private key given in constructor() or addDecryptionParameters() + */ +export default class EthereumPrivateKeyCipherProvider + implements CipherProviderTypes.ICipherProvider +{ + /** list of supported encryption method */ + public supportedMethods: EncryptionTypes.METHOD[] = [EncryptionTypes.METHOD.ECIES]; + /** list of supported identity types */ + public supportedIdentityTypes: IdentityTypes.TYPE[] = [IdentityTypes.TYPE.ETHEREUM_ADDRESS]; + + /** Dictionary containing all the private keys indexed by address */ + private decryptionParametersDictionary: IDecryptionParametersDictionary; + + constructor(decryptionParameters?: EncryptionTypes.IDecryptionParameters) { + this.decryptionParametersDictionary = new Map(); + if (decryptionParameters) { + this.addDecryptionParameters(decryptionParameters); + } + } + + /** + * Encrypts data + * + * @param data + * @param options + */ + public async encrypt( + data: string, + options: { encryptionParams: EncryptionTypes.IEncryptionParameters }, + ): Promise { + if (!data) { + throw new Error('Data to encrypt cannot be empty'); + } + if (!options?.encryptionParams?.key) { + throw new Error('Encryption key is required'); + } + + const encryptionParams = options.encryptionParams; + + if (encryptionParams.method === EncryptionTypes.METHOD.ECIES) { + const encryptedData = await ecEncrypt(encryptionParams.key, data); + return { + type: EncryptionTypes.METHOD.ECIES, + value: encryptedData, + }; + } + + throw new Error( + `Encryption method '${ + encryptionParams.method + }' is not supported. Supported methods: ${this.supportedMethods.join(', ')}`, + ); + } + + /** + * Decrypts data + * + * @param data the encrypted data + * @param identity identity to decrypt with + * + * @returns the data decrypted + */ + public async decrypt( + encryptedData: EncryptionTypes.IEncryptedData, + options: { + identity: IdentityTypes.IIdentity; + }, + ): Promise { + if (encryptedData.type !== EncryptionTypes.METHOD.ECIES) { + throw Error(`The data must be encrypted with ${EncryptionTypes.METHOD.ECIES}`); + } + + if (!this.supportedIdentityTypes.includes(options.identity.type)) { + throw Error(`Identity type not supported ${options.identity.type}`); + } + + // toLowerCase to avoid mismatch because of case + const decryptionParameters: EncryptionTypes.IDecryptionParameters | undefined = + this.decryptionParametersDictionary.get(options.identity.value.toLowerCase()); + + if (!decryptionParameters) { + throw Error(`private key unknown for the identity: ${options.identity.value}`); + } + + return decrypt(encryptedData, decryptionParameters); + } + + /** + * Check if an identity is registered in the provider + * + * @param identity identity to check + * + * @returns true if the identity is registered, false otherwise + */ + public async isIdentityRegistered(identity: IdentityTypes.IIdentity): Promise { + return Array.from(this.decryptionParametersDictionary.keys()).some( + (address) => identity.value.toLowerCase() === address.toLowerCase(), + ); + } + + /** + * Adds a new private key in the provider + * + * @param decryptionParameters decryption parameters to add + * + * @returns identity from the decryption parameter added + */ + public addDecryptionParameters( + decryptionParameters: EncryptionTypes.IDecryptionParameters, + ): IdentityTypes.IIdentity { + if (!this.supportedMethods.includes(decryptionParameters.method)) { + throw Error(`Encryption method not supported ${decryptionParameters.method}`); + } + + // compute the address from private key + // toLowerCase to avoid mismatch because of case + const address = getAddressFromPrivateKey(decryptionParameters.key).toLowerCase(); + + this.decryptionParametersDictionary.set(address, decryptionParameters); + + return { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: address, + }; + } + + /** + * Removes a private key from the provider + * + * @param identity identity to remove the private key + * + * @returns void + */ + public removeRegisteredIdentity(identity: IdentityTypes.IIdentity): void { + // Check the type of the identity to be sure that the value used to delete will be the right type + if (!this.supportedIdentityTypes.includes(identity.type)) { + throw Error(`Identity type not supported ${identity.type}`); + } + + this.decryptionParametersDictionary.delete(identity.value.toLowerCase()); + } + + /** + * Removes all private keys from the provider + * + * @param identity identity to remove the private key + * + * @returns void + */ + public clearAllRegisteredIdentities(): void { + this.decryptionParametersDictionary.clear(); + } + + /** + * Gets all the identities available to decrypt with + * + * @returns all the identities registered + */ + public getAllRegisteredIdentities(): IdentityTypes.IIdentity[] { + return Array.from(this.decryptionParametersDictionary.keys(), (address) => ({ + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: address, + })); + } +} diff --git a/packages/epk-cipher/src/index.ts b/packages/epk-cipher/src/index.ts new file mode 100644 index 000000000..fcca9921e --- /dev/null +++ b/packages/epk-cipher/src/index.ts @@ -0,0 +1 @@ +export { default as EthereumPrivateKeyCipherProvider } from './ethereum-private-key-cipher-provider'; diff --git a/packages/epk-cipher/test/ethereum-private-key-cypher-provider.test.ts b/packages/epk-cipher/test/ethereum-private-key-cypher-provider.test.ts new file mode 100644 index 000000000..7006f2895 --- /dev/null +++ b/packages/epk-cipher/test/ethereum-private-key-cypher-provider.test.ts @@ -0,0 +1,242 @@ +import { EncryptionTypes, IdentityTypes } from '@requestnetwork/types'; + +import EthereumPrivateKeyCipherProvider from '../src/ethereum-private-key-cipher-provider'; + +const id1Raw = { + address: '0xaf083f77f1ffd54218d91491afd06c9296eac3ce', + decryptionParams: { + key: '0x04674d2e53e0e14653487d7323cc5f0a7959c83067f5654cafe4094bde90fa8a', + method: EncryptionTypes.METHOD.ECIES, + }, + encryptionParams: { + key: '299708c07399c9b28e9870c4e643742f65c94683f35d1b3fc05d0478344ee0cc5a6a5e23f78b5ff8c93a04254232b32350c8672d2873677060d5095184dad422', + method: EncryptionTypes.METHOD.ECIES, + }, + identity: { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: '0xaf083f77f1ffd54218d91491afd06c9296eac3ce', + }, + privateKey: '0x04674d2e53e0e14653487d7323cc5f0a7959c83067f5654cafe4094bde90fa8a', + publicKey: + '299708c07399c9b28e9870c4e643742f65c94683f35d1b3fc05d0478344ee0cc5a6a5e23f78b5ff8c93a04254232b32350c8672d2873677060d5095184dad422', +}; + +const id2Raw = { + address: '0x818b6337657a23f58581715fc610577292e521d0', + decryptionParams: { + key: '0x4025da5692759add08f98f4b056c41c71916a671cedc7584a80d73adc7fb43c0', + method: EncryptionTypes.METHOD.ECIES, + }, + encryptionParams: { + key: 'cf4a1d0bbef8bf0e3fa479a9def565af1b22ea6266294061bfb430701b54a83699e3d47bf52e9f0224dcc29a02721810f1f624f1f70ea3cc5f1fb752cfed379d', + method: EncryptionTypes.METHOD.ECIES, + }, + identity: { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: '0x818b6337657a23f58581715fc610577292e521d0', + }, + privateKey: '0x4025da5692759add08f98f4b056c41c71916a671cedc7584a80d73adc7fb43c0', + publicKey: + 'cf4a1d0bbef8bf0e3fa479a9def565af1b22ea6266294061bfb430701b54a83699e3d47bf52e9f0224dcc29a02721810f1f624f1f70ea3cc5f1fb752cfed379d', +}; + +const decryptedDataExpected = JSON.stringify({ + attribut1: 'VALUE', + attribut2: 'Value', +}); + +/* eslint-disable @typescript-eslint/no-unused-expressions */ +describe('ethereum-private-key-decryption-provider', () => { + describe('constructor', () => { + it('can construct', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + // 'decryptionProvider.supportedIdentityTypes is wrong' + expect(decryptionProvider.supportedIdentityTypes).toEqual([ + IdentityTypes.TYPE.ETHEREUM_ADDRESS, + ]); + // 'decryptionProvider.supportedMethods is wrong' + expect(decryptionProvider.supportedMethods).toEqual([EncryptionTypes.METHOD.ECIES]); + + // 'getAllRegisteredIdentities is wrong' + expect(decryptionProvider.getAllRegisteredIdentities()).toEqual([id1Raw.identity]); + }); + it('cannot construct with decryption parameter not supported', async () => { + // 'should have thrown' + expect( + () => + new EthereumPrivateKeyCipherProvider({ + key: '0x0', + method: 'not_supported', + } as any), + ).toThrowError('Encryption method not supported not_supported'); + }); + it('cannot construct with decryption parameter value not valid', async () => { + // 'should have thrown' + expect( + () => + new EthereumPrivateKeyCipherProvider({ + key: '0x0', + method: EncryptionTypes.METHOD.ECIES, + }), + ).toThrowError('The private key must be a string representing 32 bytes'); + }); + }); + + describe('addDecryptionParameters', () => { + it('can addDecryptionParameters', () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + const identityAdded: IdentityTypes.IIdentity = decryptionProvider.addDecryptionParameters( + id2Raw.decryptionParams, + ); + // 'identityAdded is wrong' + expect(identityAdded).toEqual(id2Raw.identity); + + // 'getAllRegisteredIdentities is wrong' + expect(decryptionProvider.getAllRegisteredIdentities()).toEqual([ + id1Raw.identity, + id2Raw.identity, + ]); + }); + + it('cannot addDecryptionParameters if method not supported', () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + const arbitraryParams: any = { + method: 'unknown method', + privateKey: '0x000', + }; + // 'should throw' + expect(() => { + decryptionProvider.addDecryptionParameters(arbitraryParams); + }).toThrowError('Encryption method not supported unknown method'); + }); + }); + describe('removeDecryptionParameters', () => { + it('can removeDecryptionParameters', () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + decryptionProvider.addDecryptionParameters(id2Raw.decryptionParams); + + decryptionProvider.removeRegisteredIdentity(id2Raw.identity); + + // 'getAllRegisteredIdentities is wrong' + expect(decryptionProvider.getAllRegisteredIdentities()).toEqual([id1Raw.identity]); + }); + + it('cannot removeDecryptionParameters if method not supported', () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + const arbitraryIdentity: any = { + type: 'unknown type', + value: '0x000', + }; + // 'should throw' + expect(() => { + decryptionProvider.removeRegisteredIdentity(arbitraryIdentity); + }).toThrowError('Identity type not supported unknown type'); + }); + }); + + describe('clearAllDecryptionParameters', () => { + it('can clearAllDecryptionParameters', () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + decryptionProvider.addDecryptionParameters(id2Raw.decryptionParams); + + decryptionProvider.clearAllRegisteredIdentities(); + + // 'getAllRegisteredIdentities is wrong' + expect(decryptionProvider.getAllRegisteredIdentities()).toEqual([]); + }); + }); + + describe('encrypt', () => { + it('can encrypt with ECIES', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + const encryptedData = await decryptionProvider.encrypt(decryptedDataExpected, { + encryptionParams: id1Raw.encryptionParams, + }); + // 'encrypt() error' + expect(encryptedData.value.length).toBe(258); + // 'encrypt() error' + expect(encryptedData.type).toBe(EncryptionTypes.METHOD.ECIES); + // 'decrypt() error' + expect( + await decryptionProvider.decrypt(encryptedData, { + identity: id1Raw.identity, + }), + ).toEqual(decryptedDataExpected); + }); + }); + + describe('decrypt', () => { + it('can decrypt', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + const encryptedData = await decryptionProvider.encrypt(decryptedDataExpected, { + encryptionParams: id1Raw.encryptionParams, + }); + + const decryptedData: string = await decryptionProvider.decrypt(encryptedData, { + identity: id1Raw.identity, + }); + + // 'decryptedData is wrong' + expect(decryptedData).toEqual(decryptedDataExpected); + }); + + it('cannot decrypt if encryption not supported', async () => { + const encryptedData = { type: EncryptionTypes.METHOD.AES256_CBC, value: '0000000' }; + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + await expect( + decryptionProvider.decrypt(encryptedData, { + identity: id1Raw.identity, + }), + ).rejects.toThrowError(`The data must be encrypted with ${EncryptionTypes.METHOD.ECIES}`); + }); + + it('cannot decrypt if identity not supported', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + const encryptedData = await decryptionProvider.encrypt(decryptedDataExpected, { + encryptionParams: id1Raw.encryptionParams, + }); + + const arbitraryIdentity: any = { type: 'unknown type', value: '0x000' }; + await expect( + decryptionProvider.decrypt(encryptedData, { identity: arbitraryIdentity }), + ).rejects.toThrowError('Identity type not supported unknown type'); + }); + + it('cannot decrypt if private key of the identity not given', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + const encryptedData = await decryptionProvider.encrypt(decryptedDataExpected, { + encryptionParams: id1Raw.encryptionParams, + }); + + const arbitraryIdentity: IdentityTypes.IIdentity = { + type: IdentityTypes.TYPE.ETHEREUM_ADDRESS, + value: '0x000', + }; + await expect( + decryptionProvider.decrypt(encryptedData, { + identity: arbitraryIdentity, + }), + ).rejects.toThrowError('private key unknown for the identity: 0x000'); + }); + }); + describe('isIdentityRegistered', () => { + it('can check if an identity is registered', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + + // 'id1Raw must be registered' + expect(await decryptionProvider.isIdentityRegistered(id1Raw.identity)).toBe(true); + }); + + it('can check if an identity is NOT registered', async () => { + const decryptionProvider = new EthereumPrivateKeyCipherProvider(id1Raw.decryptionParams); + // 'id2Raw must not be registered' + expect(await decryptionProvider.isIdentityRegistered(id2Raw.identity)).toBe(false); + }); + }); +}); diff --git a/packages/epk-cipher/tsconfig.build.json b/packages/epk-cipher/tsconfig.build.json new file mode 100644 index 000000000..7c30e8d62 --- /dev/null +++ b/packages/epk-cipher/tsconfig.build.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "exclude": ["test/", "**/*.test.ts", "**/*.spec.ts"], + "references": [ + { "path": "../types/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" }, + { "path": "../multi-format/tsconfig.build.json" } + ] +} diff --git a/packages/epk-cipher/tsconfig.json b/packages/epk-cipher/tsconfig.json new file mode 100644 index 000000000..c2f3900f6 --- /dev/null +++ b/packages/epk-cipher/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig", + "include": ["src/", "test/"] +} diff --git a/packages/epk-cipher/webpack.config.js b/packages/epk-cipher/webpack.config.js new file mode 100644 index 000000000..faf79eda7 --- /dev/null +++ b/packages/epk-cipher/webpack.config.js @@ -0,0 +1,53 @@ +/** + * This is to generate the umd bundle only + * From https://github.com/0xProject/0x-monorepo/blob/development/packages/0x.js/webpack.config.js + */ +const path = require('path'); +const TerserPlugin = require('terser-webpack-plugin'); +const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin; +const DuplicatePackageCheckerPlugin = require('duplicate-package-checker-webpack-plugin'); + +module.exports = { + entry: { + 'epk-cipher.min': './src/index.ts', + }, + mode: 'production', + output: { + path: path.resolve(__dirname, 'dist'), + filename: '[name].js', + libraryTarget: 'umd', + library: 'EthereumPrivateKeyCipherProvider', + umdNamedDefine: true, + }, + resolve: { + extensions: ['.ts', '.js', '.json'], + fallback: { + crypto: require.resolve('crypto-browserify'), + stream: require.resolve('stream-browserify'), + }, + }, + devtool: 'source-map', + optimization: { + minimizer: [new TerserPlugin({ sourceMap: true })], + }, + module: { + rules: [ + { + test: /\.ts$/, + use: [ + { + loader: 'ts-loader', + options: { + configFile: 'tsconfig.build.json', + }, + }, + ], + exclude: /node_modules/, + }, + ], + }, + plugins: [ + new BundleAnalyzerPlugin({ analyzerMode: 'static', openAnalyzer: false }), + new DuplicatePackageCheckerPlugin(), + ], +}; diff --git a/packages/lit-protocol-cipher/.nycrc b/packages/lit-protocol-cipher/.nycrc new file mode 100644 index 000000000..7d71de251 --- /dev/null +++ b/packages/lit-protocol-cipher/.nycrc @@ -0,0 +1,8 @@ +{ + "extension": [".ts"], + "include": ["src/*.ts", "src/**/*.ts"], + "require": ["ts-node/register"], + "reporter": ["text-summary", "json", "html"], + "sourceMap": true, + "all": true +} diff --git a/packages/lit-protocol-cipher/CHANGELOG.md b/packages/lit-protocol-cipher/CHANGELOG.md new file mode 100644 index 000000000..e4d87c4d4 --- /dev/null +++ b/packages/lit-protocol-cipher/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. diff --git a/packages/lit-protocol-cipher/LICENSE b/packages/lit-protocol-cipher/LICENSE new file mode 100644 index 000000000..ab602974d --- /dev/null +++ b/packages/lit-protocol-cipher/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/lit-protocol-cipher/README.md b/packages/lit-protocol-cipher/README.md new file mode 100644 index 000000000..2ce1a9297 --- /dev/null +++ b/packages/lit-protocol-cipher/README.md @@ -0,0 +1,138 @@ +# @requestnetwork/lit-protocol-cipher + +Lit Protocol Provider. + +`@requestnetwork/lit-protocol-cipher` is a typescript library part of the [Request Network protocol](https://github.com/RequestNetwork/requestNetwork). + +## Installation + +```bash +npm install @requestnetwork/lit-protocol-cipher +``` + +## Usage + +The `LitProvider` class provides encryption and decryption capabilities using the Lit Protocol. Here's how to implement and use it: + +```typescript +import { ethers } from 'ethers'; +import LitProvider from './LitProvider'; +import { LIT_NETWORKS } from '@lit-protocol/types'; + +// Initialize the provider +const litProvider = new LitProvider( + 'ethereum', // chain + LIT_NETWORKS.MAINNET, // network + { + nodeUrl: 'https://your-request-network-node.com', + }, // nodeConnectionConfig +); + +// Example usage with wallet connection +async function example() { + try { + // Connect wallet and get signer (example using ethers.js) + const provider = new ethers.providers.Web3Provider(window.ethereum); + const signer = provider.getSigner(); + const address = await signer.getAddress(); + + // Get session signatures (required for decryption) + await litProvider.getSessionSignatures(signer, address); + + // Example data to encrypt + const sensitiveData = { + message: 'Secret message', + timestamp: Date.now(), + }; + + // Encryption parameters (defining who can access the data) + const encryptionParams = [ + { + key: '0x1234....', // Ethereum address that can decrypt + type: 'address', + }, + ]; + + // Encrypt data + const encryptedData = await litProvider.encrypt(sensitiveData, { encryptionParams }); + + if (!encryptedData) { + throw new Error('Encryption failed'); + } + + // Store the encrypted data somewhere... + + // Later, decrypt the data + const decryptedData = await litProvider.decrypt(encryptedData, { encryptionParams }); + + if (decryptedData) { + // Parse the decrypted data if it was originally an object + const parsedData = JSON.parse(decryptedData); + console.log('Decrypted data:', parsedData); + } + + // Disconnect wallet when done + await litProvider.disconnectWallet(); + } catch (error) { + console.error('Error:', error); + } +} + +// Multiple recipients example +async function multipleRecipientsExample() { + const encryptionParams = [ + { key: '0x1234....', type: 'address' }, // First recipient + { key: '0x5678....', type: 'address' }, // Second recipient + { key: '0x90AB....', type: 'address' }, // Third recipient + ]; + + const encryptedData = await litProvider.encrypt('Secret message for multiple recipients', { + encryptionParams, + }); +} +``` + +### Key Features + +1. **Wallet Connection Management** + + - Connect and disconnect wallets seamlessly + - Handles session signatures for secure encryption/decryption + +2. **Flexible Encryption** + + - Encrypt both strings and objects + - Support for multiple recipients through encryptionParams + - Uses Lit Protocol's access control conditions + +3. **Secure Decryption** + - Requires valid session signatures + - Supports the same access control conditions used in encryption + +### Important Notes + +- Always ensure you have valid session signatures before attempting decryption +- The provider works in both browser and Node.js environments +- Encrypted objects are automatically stringified during encryption and need to be parsed after decryption +- Make sure to properly handle the encrypted data storage and transmission in your application +- Remember to disconnect the wallet when it's no longer needed + +### Error Handling + +The provider includes built-in error handling for common scenarios: + +- Invalid or missing session signatures +- Empty encryption parameters +- Connection failures +- Invalid client initialization + +It's recommended to wrap your encryption/decryption operations in try-catch blocks to handle any potential errors gracefully. + +## Contributing + +Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change. +[Read the contributing guide](/CONTRIBUTING.md) + +## License + +[MIT](/LICENSE) diff --git a/packages/lit-protocol-cipher/jest.config.js b/packages/lit-protocol-cipher/jest.config.js new file mode 100644 index 000000000..be20f1cb6 --- /dev/null +++ b/packages/lit-protocol-cipher/jest.config.js @@ -0,0 +1,6 @@ +const jestCommonConfig = require('../../jest.config'); + +/** @type {import('jest').Config} */ +module.exports = { + ...jestCommonConfig, +}; diff --git a/packages/lit-protocol-cipher/package.json b/packages/lit-protocol-cipher/package.json new file mode 100644 index 000000000..b07a204c6 --- /dev/null +++ b/packages/lit-protocol-cipher/package.json @@ -0,0 +1,57 @@ +{ + "name": "@requestnetwork/lit-protocol-cipher", + "version": "0.1.0", + "publishConfig": { + "access": "public" + }, + "description": "Lit Protocol Cipher Provider.", + "keywords": [ + "requestnetwork", + "lit-protocol-cipher-provider" + ], + "repository": { + "type": "git", + "url": "git+https://github.com/RequestNetwork/requestNetwork.git" + }, + "homepage": "https://github.com/RequestNetwork/requestNetwork/tree/master/packages/lit-protocol-cipher#readme", + "bugs": { + "url": "https://github.com/RequestNetwork/requestNetwork/issues" + }, + "license": "MIT", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "engines": { + "node": ">=18.0.0" + }, + "directories": { + "lib": "src", + "test": "test" + }, + "files": [ + "dist" + ], + "scripts": { + "build": "tsc -b tsconfig.build.json", + "clean": "rm -rf dist tsconfig.tsbuildinfo tsconfig.build.tsbuildinfo", + "lint": "eslint . --fix", + "lint:check": "eslint .", + "test": "jest", + "test:watch": "yarn test --watch" + }, + "dependencies": { + "@lit-protocol/auth-browser": "6.11.2", + "@lit-protocol/auth-helpers": "6.11.2", + "@lit-protocol/constants": "6.11.2", + "@lit-protocol/lit-node-client": "6.11.2", + "@lit-protocol/types": "6.11.2", + "@requestnetwork/request-client.js": "0.50.0", + "@requestnetwork/types": "0.45.1", + "ethers": "5.7.2" + }, + "devDependencies": { + "@types/node": "18.11.9", + "jest-junit": "16.0.0", + "ts-node": "10.9.1", + "typescript": "5.1.3" + } +} diff --git a/packages/lit-protocol-cipher/src/index.ts b/packages/lit-protocol-cipher/src/index.ts new file mode 100644 index 000000000..f50bf965d --- /dev/null +++ b/packages/lit-protocol-cipher/src/index.ts @@ -0,0 +1 @@ +export { default as LitProtocolProvider } from './lit-protocol-cipher-provider'; diff --git a/packages/lit-protocol-cipher/src/lit-protocol-cipher-provider.ts b/packages/lit-protocol-cipher/src/lit-protocol-cipher-provider.ts new file mode 100644 index 000000000..584aa9ee3 --- /dev/null +++ b/packages/lit-protocol-cipher/src/lit-protocol-cipher-provider.ts @@ -0,0 +1,312 @@ +import * as LitJsSdk from '@lit-protocol/lit-node-client'; +import { CipherProviderTypes, DataAccessTypes, EncryptionTypes } from '@requestnetwork/types'; +import { HttpDataAccess, NodeConnectionConfig } from '@requestnetwork/request-client.js'; +import { + SessionSigsMap, + AccessControlConditions, + EncryptResponse, + AccsDefaultParams, + AuthSig, + LIT_NETWORKS_KEYS, + AuthCallbackParams, +} from '@lit-protocol/types'; +import { + LitAccessControlConditionResource, + LitAbility, + createSiweMessageWithRecaps, + generateAuthSig, +} from '@lit-protocol/auth-helpers'; +import { disconnectWeb3 } from '@lit-protocol/auth-browser'; +import { Signer } from 'ethers'; +/** + * @class LitProvider + * @description A provider class that simplifies the usage of Lit Protocol for encryption and decryption. + * This class can be used with both client-side and Node.js Lit clients. + * It implements the `IKmsProvider` interface for a standardized KMS provider structure. + */ +export default class LitProvider implements CipherProviderTypes.ICipherProvider { + /** + * @property {string} chain - The blockchain to use for access control conditions. + */ + private chain: string; + + /** + * @property {string} network - The network to use for access control conditions. + */ + private network: LIT_NETWORKS_KEYS; + + /** + * @property {DataAccessTypes.IDataAccess} dataAccess - The data access layer for Request Network. + */ + private dataAccess: DataAccessTypes.IDataAccess; + + /** + * @property {SessionSigsMap|null} sessionSigs - The session signatures required for encryption and decryption. + */ + private sessionSigs: SessionSigsMap | null = null; + + /** + * @constructor + * @param {LitNodeClient|LitNodeClientNodeJs} litClient - An instance of a Lit Protocol client (either client-side or Node.js). + * @throws {Error} Throws an error if the provided Lit client is invalid. + */ + constructor( + chain: string, + network: LIT_NETWORKS_KEYS, + nodeConnectionConfig: NodeConnectionConfig, + ) { + this.chain = chain; + this.network = network; + this.dataAccess = new HttpDataAccess({ nodeConnectionConfig }); + } + + /** + * @function initializeClient + * @description Initializes the Lit client based on the environment. + * @returns {LitNodeClient|LitNodeClientNodeJs} A Lit Protocol client instance. + * @throws {Error} Throws an error if the environment is not supported. + * @private + */ + private initializeClient(): LitJsSdk.LitNodeClient | LitJsSdk.LitNodeClientNodeJs { + if (typeof window !== 'undefined') { + return new LitJsSdk.LitNodeClient({ + litNetwork: this.network, + }); + } else { + return new LitJsSdk.LitNodeClientNodeJs({ + litNetwork: this.network, + }); + } + } + + /** + * @async + * @function disconnectWallet + * @description Disconnects wallet from the Lit network. + */ + public async disconnectWallet(): Promise { + if (typeof window !== 'undefined') { + disconnectWeb3(); + } + this.sessionSigs = null; + } + + /** + * @async + * @function getSessionSignatures + * @description Gets the session signatures required for encryption and decryption. + * @param {any} signer - The signer object to use for generating the auth sig. + * @param {string} walletAddress - The wallet address to use for generating the auth sig. + * @returns {Promise} + */ + public async getSessionSignatures(signer: Signer, walletAddress: string): Promise { + if (this.sessionSigs) { + return; + } + + let client: LitJsSdk.LitNodeClient | LitJsSdk.LitNodeClientNodeJs | null = null; + + try { + client = this.initializeClient(); + await client.connect(); + + const capacityDelegationAuthSig: AuthSig = this.dataAccess.getLitCapacityDelegationAuthSig + ? await this.dataAccess.getLitCapacityDelegationAuthSig(walletAddress) + : ({} as AuthSig); + + // Get the latest blockhash + const latestBlockhash = await client.getLatestBlockhash(); + + // Define the authNeededCallback function + const authNeededCallback = async (params: AuthCallbackParams) => { + if (!params.uri) { + throw new Error('uri is required'); + } + if (!params.expiration) { + throw new Error('expiration is required'); + } + + if (!params.resourceAbilityRequests) { + throw new Error('resourceAbilityRequests is required'); + } + + // Create the SIWE message + const toSign = await createSiweMessageWithRecaps({ + uri: params.uri, + expiration: params.expiration, + resources: params.resourceAbilityRequests, + walletAddress: walletAddress, + nonce: latestBlockhash, + litNodeClient: client, + }); + + // Generate the authSig + const authSig = await generateAuthSig({ + signer: signer, + toSign, + }); + + return authSig; + }; + + // Define the Lit resource + const litResource = new LitAccessControlConditionResource('*'); + + // Get the session signatures + this.sessionSigs = await client.getSessionSigs({ + chain: this.chain, + capabilityAuthSigs: [capacityDelegationAuthSig], + resourceAbilityRequests: [ + { + resource: litResource, + ability: LitAbility.AccessControlConditionDecryption, + }, + ], + authNeededCallback, + }); + } finally { + if (client) { + await client.disconnect(); + } + } + } + + /** + * @async + * @function getLitAccessControlConditions + * @description Gets the access control conditions required for Lit Protocol encryption and decryption. + * @param {Array} encryptionParams - An array of encryption parameters. + * @returns {Promise} An array of access control conditions. + * @private + */ + private async getLitAccessControlConditions( + encryptionParams: EncryptionTypes.IEncryptionParameters[], + ): Promise { + if (encryptionParams.length === 0) { + throw new Error('encryptionParams cannot be empty'); + } + + const accessControlConditions = []; + + accessControlConditions.push({ + contractAddress: '', + standardContractType: '' as AccsDefaultParams['standardContractType'], + chain: this.chain as AccsDefaultParams['chain'], + method: '', + parameters: [':userAddress'], + returnValueTest: { + comparator: '=' as AccsDefaultParams['returnValueTest']['comparator'], + value: encryptionParams[0].key, + }, + }); + + for (let i = 1; i < encryptionParams.length; i++) { + accessControlConditions.push( + { operator: 'or' }, + { + contractAddress: '', + standardContractType: '' as AccsDefaultParams['standardContractType'], + chain: this.chain as AccsDefaultParams['chain'], + method: '', + parameters: [':userAddress'], + returnValueTest: { + comparator: '=' as AccsDefaultParams['returnValueTest']['comparator'], + value: encryptionParams[i].key, + }, + }, + ); + } + + return accessControlConditions; + } + + /** + * @async + * @function encrypt + * @description Encrypts data using Lit Protocol with a randomly generated AES key. + * @param {string|object} data - The data to encrypt. Can be a string or an object. + * @param {object} options - Encryption options. + * @param {Array} options.accessControlConditions - An array of access control conditions that define who can decrypt the data. + * @param {string} [options.chain="ethereum"] - The blockchain to use for access control conditions. + * @returns {Promise} The encrypted data. + */ + public async encrypt( + data: string | { [key: string]: any }, + options: { + encryptionParams: EncryptionTypes.IEncryptionParameters[]; + }, + ): Promise { + let client: LitJsSdk.LitNodeClient | LitJsSdk.LitNodeClientNodeJs | null = null; + + try { + client = this.initializeClient(); + + await client.connect(); + const stringifiedData = typeof data === 'string' ? data : JSON.stringify(data); + + const accessControlConditions = await this.getLitAccessControlConditions( + options.encryptionParams, + ); + + return await LitJsSdk.encryptString( + { + accessControlConditions: accessControlConditions, + dataToEncrypt: stringifiedData, + }, + client, + ); + } finally { + if (client) { + await client.disconnect(); + } + } + } + + /** + * @async + * @function decrypt + * @description Decrypts data that was encrypted using the `encrypt` method. + * @param {string} encryptedData - The encrypted data to decrypt. + * @param {object} options - Decryption options. + * @param {Uint8Array} options.encryptedSymmetricKey - The encrypted symmetric key. + * @param {Array} options.accessControlConditions - An array of access control conditions that define who can decrypt the data. + * @param {string} [options.chain="ethereum"] - The blockchain to use for access control conditions. + * @returns {Promise} The decrypted data as a string. + */ + public async decrypt( + encryptedData: EncryptResponse, + options: { + encryptionParams: EncryptionTypes.IEncryptionParameters[]; + }, + ): Promise { + let client: LitJsSdk.LitNodeClient | LitJsSdk.LitNodeClientNodeJs | null = null; + + try { + if (!this.sessionSigs) { + throw new Error('Session signatures are required to decrypt data'); + } + client = this.initializeClient(); + await client.connect(); + + const accessControlConditions = await this.getLitAccessControlConditions( + options.encryptionParams, + ); + + const decryptedData = await LitJsSdk.decryptToString( + { + accessControlConditions: accessControlConditions, + chain: this.chain, + ciphertext: encryptedData.ciphertext, + dataToEncryptHash: encryptedData.dataToEncryptHash, + sessionSigs: this.sessionSigs, + }, + client, + ); + return decryptedData; + } finally { + if (client) { + await client.disconnect(); + } + } + } +} diff --git a/packages/lit-protocol-cipher/test/index.test.ts b/packages/lit-protocol-cipher/test/index.test.ts new file mode 100644 index 000000000..01a7d7797 --- /dev/null +++ b/packages/lit-protocol-cipher/test/index.test.ts @@ -0,0 +1,256 @@ +import { jest } from '@jest/globals'; +import { Signer } from 'ethers'; +import LitProvider from '../src/lit-protocol-cipher-provider'; +import * as LitJsSdk from '@lit-protocol/lit-node-client'; +import { HttpDataAccess, NodeConnectionConfig } from '@requestnetwork/request-client.js'; +import { disconnectWeb3 } from '@lit-protocol/auth-browser'; +import { generateAuthSig } from '@lit-protocol/auth-helpers'; +import { EncryptionTypes } from '@requestnetwork/types'; +import { METHOD } from '@requestnetwork/types/dist/encryption-types'; + +// Mock dependencies +jest.mock('@lit-protocol/lit-node-client'); +jest.mock('@requestnetwork/request-client.js'); +jest.mock('@lit-protocol/auth-browser'); +jest.mock('@lit-protocol/auth-helpers'); + +describe('LitProvider', () => { + let litProvider: LitProvider; + let mockLitClient: jest.Mocked; + let mockSigner: jest.Mocked; + + const mockChain = 'ethereum'; + const mockNetwork = 'cayenne' as const; + const mockNodeConnectionConfig: NodeConnectionConfig = { + baseURL: 'http://localhost:3000', + headers: {}, // Adding required headers property + }; + const mockWalletAddress = '0x1234567890abcdef'; + + // Define encryption parameters with required method property + const mockEncryptionParams: EncryptionTypes.IEncryptionParameters[] = [ + { + key: mockWalletAddress, + method: METHOD.KMS, + }, + ]; + + beforeEach(() => { + // Reset mocks + jest.clearAllMocks(); + + // Create mock LitNodeClient with proper typing + mockLitClient = { + connect: jest.fn().mockReturnValueOnce(null), + disconnect: jest.fn().mockReturnValueOnce(null), + getLatestBlockhash: jest.fn().mockReturnValueOnce('mock-blockhash'), + getSessionSigs: jest.fn().mockReturnValueOnce({ 'mock-session': 'mock-sig' }), + } as unknown as jest.Mocked; + + // Mock LitJsSdk.LitNodeClient constructor + (LitJsSdk.LitNodeClientNodeJs as unknown as jest.Mock).mockImplementationOnce( + () => mockLitClient, + ); + + // Create mock Signer with proper typing + mockSigner = { + getAddress: jest.fn().mockReturnValueOnce(mockWalletAddress), + signMessage: jest.fn().mockReturnValueOnce('mock-signature'), + } as unknown as jest.Mocked; + + // Initialize LitProvider + litProvider = new LitProvider(mockChain, mockNetwork, mockNodeConnectionConfig); + }); + + describe('constructor', () => { + it('should initialize with correct parameters', () => { + expect(litProvider).toBeDefined(); + expect(HttpDataAccess).toHaveBeenCalledWith({ + nodeConnectionConfig: mockNodeConnectionConfig, + }); + }); + }); + + describe('disconnectWallet', () => { + it('should disconnect wallet in browser environment', async () => { + // Mock browser environment + global.window = {} as any; + + await litProvider.disconnectWallet(); + + expect(disconnectWeb3).toHaveBeenCalled(); + }); + + it('should handle disconnection in Node.js environment', async () => { + // Mock Node.js environment + global.window = undefined as any; + + await litProvider.disconnectWallet(); + + expect(disconnectWeb3).not.toHaveBeenCalled(); + }); + }); + + describe('getSessionSignatures', () => { + it('should get session signatures successfully', async () => { + const mockAuthSig = { + sig: 'mock-auth-sig', + address: mockWalletAddress, + derivedVia: 'mock', + signedMessage: 'mock', + }; + (generateAuthSig as jest.Mock).mockReturnValueOnce(mockAuthSig); + + await litProvider.getSessionSignatures(mockSigner, mockWalletAddress); + + expect(mockLitClient.connect).toHaveBeenCalled(); + expect(mockLitClient.getLatestBlockhash).toHaveBeenCalled(); + expect(mockLitClient.getSessionSigs).toHaveBeenCalled(); + expect(mockLitClient.disconnect).toHaveBeenCalled(); + }); + + it('should not get new signatures if they already exist', async () => { + // First call to set session signatures + await litProvider.getSessionSignatures(mockSigner, mockWalletAddress); + + // Reset mocks + jest.clearAllMocks(); + + // Second call should not make any new requests + await litProvider.getSessionSignatures(mockSigner, mockWalletAddress); + + expect(mockLitClient.connect).not.toHaveBeenCalled(); + expect(mockLitClient.getSessionSigs).not.toHaveBeenCalled(); + }); + }); + + describe('encrypt', () => { + const mockData = 'test-data'; + const mockEncryptResponse = { + ciphertext: 'encrypted-data', + dataToEncryptHash: 'hash', + }; + + beforeEach(() => { + (LitJsSdk.encryptString as unknown as jest.Mock).mockReturnValueOnce(mockEncryptResponse); + }); + + it('should encrypt string data successfully', async () => { + const result = await litProvider.encrypt(mockData, { + encryptionParams: mockEncryptionParams, + }); + + expect(result).toEqual(mockEncryptResponse); + expect(LitJsSdk.encryptString).toHaveBeenCalledWith( + expect.objectContaining({ + dataToEncrypt: mockData, + accessControlConditions: expect.any(Array), + }), + expect.any(Object), + ); + }); + + it('should encrypt object data successfully', async () => { + const objectData = { key: 'value' }; + const result = await litProvider.encrypt(objectData, { + encryptionParams: mockEncryptionParams, + }); + + expect(result).toEqual(mockEncryptResponse); + expect(LitJsSdk.encryptString).toHaveBeenCalledWith( + expect.objectContaining({ + dataToEncrypt: JSON.stringify(objectData), + accessControlConditions: expect.any(Array), + }), + expect.any(Object), + ); + }); + + it('should validate access control conditions', async () => { + await litProvider.encrypt(mockData, { + encryptionParams: mockEncryptionParams, + }); + + expect(LitJsSdk.encryptString).toHaveBeenCalledWith( + expect.objectContaining({ + accessControlConditions: expect.arrayContaining([ + expect.objectContaining({ + contractAddress: '', + standardContractType: '', + chain: mockChain, + method: expect.any(String), + parameters: expect.any(Array), + returnValueTest: expect.any(Object), + }), + ]), + }), + expect.any(Object), + ); + }); + + it('should throw error when encryption fails', async () => { + // Correctly mock the encryptString method to reject + (LitJsSdk as any).encryptString.mockRejectedValueOnce(new Error('Encryption failed')); + + try { + await litProvider.encrypt(mockData, { + encryptionParams: mockEncryptionParams, + }); + } catch (error) { + expect(error.message).toBe('Encryption failed'); + } + }); + }); + + describe('decrypt', () => { + const mockEncryptedData = { + ciphertext: 'encrypted-data', + dataToEncryptHash: 'hash', + }; + const mockDecryptedData = 'decrypted-data'; + + beforeEach(async () => { + (LitJsSdk.decryptToString as unknown as jest.Mock).mockReturnValueOnce(mockDecryptedData); + // Set session signatures + await litProvider.getSessionSignatures(mockSigner, mockWalletAddress); + }); + + it('should decrypt data successfully', async () => { + const result = await litProvider.decrypt(mockEncryptedData, { + encryptionParams: mockEncryptionParams, + }); + + expect(result).toBe(mockDecryptedData); + expect(LitJsSdk.decryptToString).toHaveBeenCalledWith( + expect.objectContaining({ + ciphertext: mockEncryptedData.ciphertext, + dataToEncryptHash: mockEncryptedData.dataToEncryptHash, + chain: mockChain, + accessControlConditions: expect.any(Array), + sessionSigs: expect.any(Object), + }), + expect.any(Object), + ); + }); + + it('should throw error if session signatures are not set', async () => { + // Reset provider to clear session signatures + litProvider = new LitProvider(mockChain, mockNetwork, mockNodeConnectionConfig); + + await expect( + litProvider.decrypt(mockEncryptedData, { encryptionParams: mockEncryptionParams }), + ).rejects.toThrow('Session signatures are required to decrypt data'); + }); + + it('should throw error when decryption fails', async () => { + // Correctly mock the decryptString method to reject + (LitJsSdk as any).decryptToString.mockRejectedValueOnce(new Error('Decryption failed')); + + try { + await litProvider.decrypt(mockEncryptedData, { encryptionParams: mockEncryptionParams }); + } catch (error) { + expect(error.message).toBe('Decryption failed'); + } + }); + }); +}); diff --git a/packages/lit-protocol-cipher/tsconfig.build.json b/packages/lit-protocol-cipher/tsconfig.build.json new file mode 100644 index 000000000..7047fca81 --- /dev/null +++ b/packages/lit-protocol-cipher/tsconfig.build.json @@ -0,0 +1,9 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "outDir": "dist", + "rootDir": "src" + }, + "exclude": ["test/", "**/*.test.ts", "**/*.spec.ts"], + "references": [{ "path": "../types/tsconfig.build.json" }] +} diff --git a/packages/lit-protocol-cipher/tsconfig.json b/packages/lit-protocol-cipher/tsconfig.json new file mode 100644 index 000000000..c2f3900f6 --- /dev/null +++ b/packages/lit-protocol-cipher/tsconfig.json @@ -0,0 +1,4 @@ +{ + "extends": "../../tsconfig", + "include": ["src/", "test/"] +} diff --git a/packages/multi-format/src/encryption/encryption-format.ts b/packages/multi-format/src/encryption/encryption-format.ts index 83101dbc5..c3676b018 100644 --- a/packages/multi-format/src/encryption/encryption-format.ts +++ b/packages/multi-format/src/encryption/encryption-format.ts @@ -2,8 +2,10 @@ import { MultiFormatGroup } from '../multi-format-group'; import { Aes256CbcMultiFormat } from './aes256-cbc-format'; import { Aes256GcmMultiFormat } from './aes256-gcm-format'; import { ECIESMultiFormat } from './ecies-format'; +import { KMSMultiFormat } from './kms-format'; export const encryptionFormats = new MultiFormatGroup([ + new KMSMultiFormat(), new Aes256CbcMultiFormat(), new ECIESMultiFormat(), new Aes256GcmMultiFormat(), diff --git a/packages/multi-format/src/encryption/kms-format.ts b/packages/multi-format/src/encryption/kms-format.ts new file mode 100644 index 000000000..b1c9fda68 --- /dev/null +++ b/packages/multi-format/src/encryption/kms-format.ts @@ -0,0 +1,12 @@ +import { EncryptionTypes, MultiFormatTypes } from '@requestnetwork/types'; + +import { SerializableMultiFormat } from '../serializable-multi-format'; + +/** + * Class to serialize and deserialize multi-format KMS encrypted data + */ +export class KMSMultiFormat extends SerializableMultiFormat { + constructor() { + super(MultiFormatTypes.prefix.KMS_ENCRYPTED, EncryptionTypes.METHOD.KMS); + } +} diff --git a/packages/request-client.js/src/api/request-network.ts b/packages/request-client.js/src/api/request-network.ts index 267fb2d57..e35e8a7a2 100644 --- a/packages/request-client.js/src/api/request-network.ts +++ b/packages/request-client.js/src/api/request-network.ts @@ -6,6 +6,7 @@ import { AdvancedLogicTypes, ClientTypes, CurrencyTypes, + CipherProviderTypes, DataAccessTypes, DecryptionProviderTypes, EncryptionTypes, @@ -49,19 +50,21 @@ export default class RequestNetwork { dataAccess, signatureProvider, decryptionProvider, + cipherProvider, currencyManager, paymentOptions, }: { dataAccess: DataAccessTypes.IDataAccess; signatureProvider?: SignatureProviderTypes.ISignatureProvider; decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider; + cipherProvider?: CipherProviderTypes.ICipherProvider; currencyManager?: CurrencyTypes.ICurrencyManager; paymentOptions?: Partial; }) { this.currencyManager = currencyManager || CurrencyManager.getDefault(); this.dataAccess = dataAccess; this.advancedLogic = new AdvancedLogic(this.currencyManager); - this.transaction = new TransactionManager(dataAccess, decryptionProvider); + this.transaction = new TransactionManager(dataAccess, decryptionProvider, cipherProvider); this.requestLogic = new RequestLogic(this.transaction, signatureProvider, this.advancedLogic); this.contentData = new ContentDataExtension(this.advancedLogic); this.paymentNetworkFactory = new PaymentNetworkFactory( diff --git a/packages/request-client.js/src/http-data-access.ts b/packages/request-client.js/src/http-data-access.ts index cf9cadd50..787c1157f 100644 --- a/packages/request-client.js/src/http-data-access.ts +++ b/packages/request-client.js/src/http-data-access.ts @@ -1,9 +1,9 @@ import { ClientTypes, DataAccessTypes } from '@requestnetwork/types'; - import { EventEmitter } from 'events'; import httpConfigDefaults from './http-config-defaults'; import { normalizeKeccak256Hash, retry } from '@requestnetwork/utils'; import { stringify } from 'qs'; +import { utils } from 'ethers'; // eslint-disable-next-line @typescript-eslint/no-var-requires const packageJson = require('../package.json'); @@ -206,6 +206,23 @@ export default class HttpDataAccess implements DataAccessTypes.IDataAccess { return await this.fetchAndRetry('/information', {}); } + /** + * Gets the Lit Protocol capacity delegation auth sig from the node through HTTP. + * + * @param delegateeAddress the address of the delegatee + */ + public async getLitCapacityDelegationAuthSig( + delegateeAddress: string, + ): Promise { + if (!delegateeAddress || typeof delegateeAddress !== 'string') { + throw new Error('delegateeAddress must be a non-empty string'); + } + if (!utils.isAddress(delegateeAddress)) { + throw new Error('delegateeAddress must be a valid Ethereum address'); + } + return await this.fetchAndRetry('/getLitCapacityDelegationAuthSig', { delegateeAddress }); + } + /** * Sends an HTTP GET request to the node and retries until it succeeds. * Throws when the retry count reaches a maximum. diff --git a/packages/request-client.js/src/http-request-network.ts b/packages/request-client.js/src/http-request-network.ts index 4092876fd..78346f54a 100644 --- a/packages/request-client.js/src/http-request-network.ts +++ b/packages/request-client.js/src/http-request-network.ts @@ -2,6 +2,7 @@ import { CurrencyManager } from '@requestnetwork/currency'; import { ClientTypes, CurrencyTypes, + CipherProviderTypes, DataAccessTypes, DecryptionProviderTypes, SignatureProviderTypes, @@ -31,6 +32,7 @@ export default class HttpRequestNetwork extends RequestNetwork { constructor( { decryptionProvider, + cipherProvider, httpConfig, nodeConnectionConfig, signatureProvider, @@ -40,6 +42,7 @@ export default class HttpRequestNetwork extends RequestNetwork { skipPersistence, }: { decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider; + cipherProvider?: CipherProviderTypes.ICipherProvider; httpConfig?: Partial; nodeConnectionConfig?: Partial; signatureProvider?: SignatureProviderTypes.ISignatureProvider; @@ -66,6 +69,13 @@ export default class HttpRequestNetwork extends RequestNetwork { currencyManager = CurrencyManager.getDefault(); } - super({ dataAccess, signatureProvider, decryptionProvider, currencyManager, paymentOptions }); + super({ + dataAccess, + signatureProvider, + decryptionProvider, + cipherProvider, + currencyManager, + paymentOptions, + }); } } diff --git a/packages/request-client.js/src/index.ts b/packages/request-client.js/src/index.ts index 327310560..a5fbf6e35 100644 --- a/packages/request-client.js/src/index.ts +++ b/packages/request-client.js/src/index.ts @@ -5,6 +5,8 @@ import Utils from './api/utils'; import { default as RequestNetwork } from './http-request-network'; import { default as RequestNetworkBase } from './api/request-network'; import { default as HttpMetaMaskDataAccess } from './http-metamask-data-access'; +import { default as HttpDataAccess } from './http-data-access'; +import { NodeConnectionConfig } from './http-data-access'; import * as Types from './types'; export { @@ -12,7 +14,9 @@ export { Request, RequestNetwork, RequestNetworkBase, + HttpDataAccess, HttpMetaMaskDataAccess, + NodeConnectionConfig, Types, Utils, }; diff --git a/packages/request-node/package.json b/packages/request-node/package.json index c67008cef..9c4e6e134 100644 --- a/packages/request-node/package.json +++ b/packages/request-node/package.json @@ -42,6 +42,9 @@ }, "dependencies": { "@ethersproject/experimental": "5.7.0", + "@lit-protocol/constants": "6.11.0", + "@lit-protocol/contracts-sdk": "6.11.0", + "@lit-protocol/lit-node-client": "6.11.0", "@requestnetwork/currency": "0.19.0", "@requestnetwork/data-access": "0.36.1", "@requestnetwork/ethereum-storage": "0.36.1", diff --git a/packages/request-node/src/config.ts b/packages/request-node/src/config.ts index b4d36d2be..de5d0b843 100644 --- a/packages/request-node/src/config.ts +++ b/packages/request-node/src/config.ts @@ -5,6 +5,7 @@ import { BigNumber } from 'ethers'; import { LogTypes } from '@requestnetwork/types'; import { LogMode } from './logger'; +import { LitNetwork } from '@lit-protocol/constants'; const argv = yargs.option('help', { alias: 'h', type: 'boolean' }).parseSync(); @@ -46,6 +47,7 @@ const defaultValues = { wallet: { mnemonic: 'candy maple cake sugar pudding cream honey rich smooth crumble sweet treat', }, + litProtocolNetwork: LitNetwork.DatilTest, }; const getOption = ( @@ -69,6 +71,15 @@ export const isHelp = (): boolean => argv.help || false; */ export const getServerPort = makeOption('port', 'PORT', defaultValues.server.port); +/** + * Get the litProtocolNetwork from command line argument, environment variables or default values to send with the API responses + */ +export const getLitProtocolNetwork = makeOption( + 'litProtocolNetwork', + 'LIT_PROTOCOL_NETWORK', + defaultValues.litProtocolNetwork, +); + /** * Get network id of the Ethereum network from command line argument, environment variables or default values */ diff --git a/packages/request-node/src/request/getLitCapacityDelegationAuthSig.ts b/packages/request-node/src/request/getLitCapacityDelegationAuthSig.ts new file mode 100644 index 000000000..cc3c47d85 --- /dev/null +++ b/packages/request-node/src/request/getLitCapacityDelegationAuthSig.ts @@ -0,0 +1,72 @@ +import { Wallet, providers } from 'ethers'; +import { LitNodeClient } from '@lit-protocol/lit-node-client'; +import { LIT_RPC } from '@lit-protocol/constants'; +import { LogTypes } from '@requestnetwork/types'; +import { Request, Response } from 'express'; +import { StatusCodes } from 'http-status-codes'; +import * as config from '../config'; +import { LitContracts } from '@lit-protocol/contracts-sdk'; +import { utils } from 'ethers'; + +/** + * Handles getLitCapacityDelegationAuthSigHandler. + * + * @param clientRequest http client request object + * @param serverResponse http server response object + */ +export default class GetLitCapacityDelegationAuthSigHandler { + constructor(private logger: LogTypes.ILogger) { + this.handler = this.handler.bind(this); + } + async handler(clientRequest: Request, serverResponse: Response): Promise { + const { delegateeAddress } = clientRequest.query; + // Verifies if data sent from get request are correct + // clientRequest.query is expected to contain the delegateeAddress + if (!delegateeAddress || !utils.isAddress(delegateeAddress as string)) { + serverResponse.status(StatusCodes.UNPROCESSABLE_ENTITY).send('Incorrect data'); + return; + } + + try { + const ethersSigner = Wallet.fromMnemonic(config.getMnemonic()).connect( + new providers.JsonRpcProvider(LIT_RPC.CHRONICLE_YELLOWSTONE), + ); + + const litContractClient = new LitContracts({ + signer: ethersSigner, + network: config.getLitProtocolNetwork(), + }); + await litContractClient.connect(); + + const existingTokens: { tokenId: string }[] = + await litContractClient.rateLimitNftContractUtils.read.getTokensByOwnerAddress( + await ethersSigner.getAddress(), + ); + + if (existingTokens.length === 0) { + serverResponse.status(StatusCodes.UNPROCESSABLE_ENTITY).send('No existing tokens'); + return; + } + + const litNodeClient = new LitNodeClient({ + litNetwork: config.getLitProtocolNetwork(), + debug: false, + }); + await litNodeClient.connect(); + + const { capacityDelegationAuthSig } = await litNodeClient.createCapacityDelegationAuthSig({ + capacityTokenId: existingTokens[existingTokens.length - 1].tokenId, + dAppOwnerWallet: ethersSigner, + delegateeAddresses: [delegateeAddress as string], + uses: '1', + expiration: new Date(Date.now() + 1000 * 60 * 10).toISOString(), // 10 minutes + }); + + serverResponse.status(StatusCodes.OK).send(capacityDelegationAuthSig); + } catch (e) { + this.logger.error(`GetLitCapacityDelegationAuthSigHandler error: ${e}`); + + serverResponse.status(StatusCodes.INTERNAL_SERVER_ERROR).send('Internal Server Error'); + } + } +} diff --git a/packages/request-node/src/requestNode.ts b/packages/request-node/src/requestNode.ts index 52dc724b5..9fdde9446 100644 --- a/packages/request-node/src/requestNode.ts +++ b/packages/request-node/src/requestNode.ts @@ -12,6 +12,7 @@ import GetChannelsByTopicHandler from './request/getChannelsByTopic'; import GetStatusHandler from './request/getStatus'; import IpfsAddHandler from './request/ipfsAdd'; import morgan from 'morgan'; +import GetLitCapacityDelegationAuthSigHandler from './request/getLitCapacityDelegationAuthSig'; // eslint-disable-next-line @typescript-eslint/no-var-requires const packageJson = require('../package.json'); @@ -46,6 +47,7 @@ export class RequestNode { private getChannelByTopicHandler: GetChannelsByTopicHandler; private getStatusHandler: GetStatusHandler; private ipfsAddHandler: IpfsAddHandler; + private getLitCapacityDelegationAuthSigHandler: GetLitCapacityDelegationAuthSigHandler; /** * Request Node constructor * @@ -74,6 +76,9 @@ export class RequestNode { this.getStatusHandler = new GetStatusHandler(this.logger, this.dataAccess); this.ipfsAddHandler = new IpfsAddHandler(this.logger, ipfsStorage); this.persistTransactionHandler = new PersistTransactionHandler(this.dataAccess, this.logger); + this.getLitCapacityDelegationAuthSigHandler = new GetLitCapacityDelegationAuthSigHandler( + this.logger, + ); this.express = express(); this.mountRoutes(); @@ -156,6 +161,10 @@ export class RequestNode { router.get('/getConfirmedTransaction', this.getConfirmedTransactionHandler.handler); router.get('/getTransactionsByChannelId', this.getTransactionsByChannelIdHandler.handler); router.get('/getChannelsByTopic', this.getChannelByTopicHandler.handler); + router.get( + '/getLitCapacityDelegationAuthSig', + this.getLitCapacityDelegationAuthSigHandler.handler, + ); this.express.use('/', router); // Any other route returns error 404 diff --git a/packages/smart-contracts/package.json b/packages/smart-contracts/package.json index ecabeb327..cf64b4750 100644 --- a/packages/smart-contracts/package.json +++ b/packages/smart-contracts/package.json @@ -72,8 +72,8 @@ "@safe-global/api-kit": "1.3.1", "@safe-global/protocol-kit": "1.3.0", "@superfluid-finance/ethereum-contracts": "1.1.1", - "@typechain/ethers-v5": "7.0.1", - "@typechain/hardhat": "2.1.2", + "@typechain/ethers-v5": "11.1.2", + "@typechain/hardhat": "9.1.0", "@types/chai": "4.2.21", "@types/mocha": "8.2.3", "@types/node": "18.11.9", @@ -84,7 +84,7 @@ "ganache-cli": "6.12.0", "hardhat": "2.22.15", "solhint": "3.3.6", - "typechain": "5.1.1", + "typechain": "8.3.2", "web3": "1.7.3", "zksync-web3": "0.14.3" } diff --git a/packages/transaction-manager/README.md b/packages/transaction-manager/README.md index adc164e9c..a774d0ce4 100644 --- a/packages/transaction-manager/README.md +++ b/packages/transaction-manager/README.md @@ -17,10 +17,10 @@ npm install @requestnetwork/transaction-manager In order to decrypt encrypted transactions, you must provide a decryption provider. You can see the specification of decryption provider [here](./specs/decryption-provider.md). -An example of implementation of a decryption provider is available in the package: [epk-decryption](../epk-decryption/) +An example of implementation of a decryption provider is available in the package: [epk-cipher](../epk-cipher/) ```javascript -import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-decryption'; +import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-cipher'; import { TransactionManager } from '@requestnetwork/transaction-manager'; // Decryption provider setup @@ -87,7 +87,7 @@ const { result } = await transactionManager.persistTransaction(data, channelId, ### Get Transactions from channel id ```javascript -import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-decryption'; +import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-cipher'; import { DataAccessTypes, SignatureTypes } from '@requestnetwork/types'; import { TransactionManager } from '@requestnetwork/transaction-manager'; @@ -111,7 +111,7 @@ const { ### Get Transactions from topic ```typescript -import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-decryption'; +import EthereumPrivateKeyDecryptionProvider from '@requestnetwork/epk-cipher'; import { DataAccessTypes, SignatureTypes } from '@requestnetwork/types'; import { TransactionManager } from '@requestnetwork/transaction-manager'; diff --git a/packages/transaction-manager/src/channel-parser.ts b/packages/transaction-manager/src/channel-parser.ts index 9cac64ce8..cf7688ea1 100644 --- a/packages/transaction-manager/src/channel-parser.ts +++ b/packages/transaction-manager/src/channel-parser.ts @@ -1,4 +1,9 @@ -import { DecryptionProviderTypes, EncryptionTypes, TransactionTypes } from '@requestnetwork/types'; +import { + CipherProviderTypes, + DecryptionProviderTypes, + EncryptionTypes, + TransactionTypes, +} from '@requestnetwork/types'; import TransactionsParser from './transactions-parser'; @@ -8,8 +13,11 @@ import TransactionsParser from './transactions-parser'; export default class ChannelParser { private transactionParser: TransactionsParser; - public constructor(decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider) { - this.transactionParser = new TransactionsParser(decryptionProvider); + public constructor( + decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider, + cipherProvider?: CipherProviderTypes.ICipherProvider, + ) { + this.transactionParser = new TransactionsParser(decryptionProvider, cipherProvider); } /** * Decrypts and cleans a channel by removing the wrong transactions @@ -184,7 +192,7 @@ export default class ChannelParser { } catch (error) { // If the transaction is encrypted but the channel key is not found, save channelType and encryptionMethod if ( - error.message.startsWith( + error?.message?.startsWith( 'Impossible to decrypt the channel key from this transaction', ) && result.channelType === TransactionTypes.ChannelType.UNKNOWN diff --git a/packages/transaction-manager/src/transaction-manager.ts b/packages/transaction-manager/src/transaction-manager.ts index 81cded955..b91edbd6c 100644 --- a/packages/transaction-manager/src/transaction-manager.ts +++ b/packages/transaction-manager/src/transaction-manager.ts @@ -1,5 +1,6 @@ import * as MultiFormat from '@requestnetwork/multi-format'; import { + CipherProviderTypes, DataAccessTypes, DecryptionProviderTypes, EncryptionTypes, @@ -18,13 +19,16 @@ import TransactionsFactory from './transactions-factory'; export default class TransactionManager implements TransactionTypes.ITransactionManager { private dataAccess: DataAccessTypes.IDataAccess; private channelParser: ChannelParser; + private cipherProvider?: CipherProviderTypes.ICipherProvider; public constructor( dataAccess: DataAccessTypes.IDataAccess, decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider, + cipherProvider?: CipherProviderTypes.ICipherProvider, ) { this.dataAccess = dataAccess; - this.channelParser = new ChannelParser(decryptionProvider); + this.channelParser = new ChannelParser(decryptionProvider, cipherProvider); + this.cipherProvider = cipherProvider; } /** @@ -59,6 +63,7 @@ export default class TransactionManager implements TransactionTypes.ITransaction transaction = await TransactionsFactory.createEncryptedTransactionInNewChannel( transactionData, encryptionParams, + this.cipherProvider, ); channelEncryptionMethod = transaction.encryptionMethod; } @@ -91,6 +96,7 @@ export default class TransactionManager implements TransactionTypes.ITransaction transactionData, channelKey, encryptionParams, + this.cipherProvider, ); channelEncryptionMethod = encryptionMethod; diff --git a/packages/transaction-manager/src/transactions-factory.ts b/packages/transaction-manager/src/transactions-factory.ts index 8f08dfb3d..62ccb74c0 100644 --- a/packages/transaction-manager/src/transactions-factory.ts +++ b/packages/transaction-manager/src/transactions-factory.ts @@ -1,5 +1,5 @@ import * as MultiFormat from '@requestnetwork/multi-format'; -import { EncryptionTypes, TransactionTypes } from '@requestnetwork/types'; +import { CipherProviderTypes, EncryptionTypes, TransactionTypes } from '@requestnetwork/types'; import { encrypt, generate32BufferKey, @@ -38,10 +38,8 @@ export default class TransactionsFactory { public static async createEncryptedTransactionInNewChannel( data: TransactionTypes.ITransactionData, encryptionParams: EncryptionTypes.IEncryptionParameters[], + cipherProvider?: CipherProviderTypes.ICipherProvider, ): Promise { - // format encryption method property - const encryptionMethod = `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`; - // Generate a key for the AES encryption const symmetricKey: string = await generate32BufferKey(); @@ -57,52 +55,102 @@ export default class TransactionsFactory { throw new Error('Data not parsable'); } - // Check that all the encryption parameters given are ECIES (the only encryption method supported for now) + let encryptionMethod = ''; + let keys: TransactionTypes.IKeysDictionary = {}; + + // TODO: refactor this part once the decryption provider is removed and the cipher provider is used if ( - !encryptionParams.every( + encryptionParams.every( (encryptionParam: EncryptionTypes.IEncryptionParameters) => encryptionParam.method === EncryptionTypes.METHOD.ECIES, ) ) { - throw new Error(`encryptionParams method must be all: ${EncryptionTypes.METHOD.ECIES}`); - } - - // Compute key encryption and identity hash for every encryption parameters given - const encryptedKeyAndIdentityHashesPromises = encryptionParams.map( - async ( - encryptionParam: EncryptionTypes.IEncryptionParameters, - ): Promise<{ - encryptedKey: EncryptionTypes.IEncryptedData; - multiFormattedIdentity: string; - }> => { - const encryptedKey: EncryptionTypes.IEncryptedData = await encrypt( - symmetricKey, - encryptionParam, - ); - const identityEncryption = getIdentityFromEncryptionParams(encryptionParam); - const multiFormattedIdentity: string = MultiFormat.serialize(identityEncryption); - - return { encryptedKey, multiFormattedIdentity }; - }, - ); - const encryptedKeyAndIdentityHashes = await Promise.all(encryptedKeyAndIdentityHashesPromises); - - // Create the encrypted keys object - Encrypted keys indexed by identity multi-format - const keys: TransactionTypes.IKeysDictionary = encryptedKeyAndIdentityHashes.reduce( - ( - allKeys: TransactionTypes.IKeysDictionary, - keyAndHash: { + encryptionMethod = `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`; + // Compute key encryption and identity hash for every encryption parameters given + const encryptedKeyAndIdentityHashesPromises = encryptionParams.map( + async ( + encryptionParam: EncryptionTypes.IEncryptionParameters, + ): Promise<{ encryptedKey: EncryptionTypes.IEncryptedData; multiFormattedIdentity: string; + }> => { + const identityEncryption = getIdentityFromEncryptionParams(encryptionParam); + const multiFormattedIdentity: string = MultiFormat.serialize(identityEncryption); + + if ( + cipherProvider && + 'supportedMethods' in cipherProvider && + 'supportedIdentityTypes' in cipherProvider && + 'isIdentityRegistered' in cipherProvider + ) { + const encryptedKey: EncryptionTypes.IEncryptedData = await cipherProvider.encrypt( + symmetricKey, + { encryptionParams }, + ); + return { encryptedKey, multiFormattedIdentity }; + } else { + const encryptedKey: EncryptionTypes.IEncryptedData = await encrypt( + symmetricKey, + encryptionParam, + ); + return { encryptedKey, multiFormattedIdentity }; + } }, - ): TransactionTypes.IKeysDictionary => { - const encryptedKeySerialized: string = MultiFormat.serialize(keyAndHash.encryptedKey); + ); + const encryptedKeyAndIdentityHashes = await Promise.all( + encryptedKeyAndIdentityHashesPromises, + ); - allKeys[keyAndHash.multiFormattedIdentity] = encryptedKeySerialized; - return allKeys; - }, - {}, - ); + // Create the encrypted keys object - Encrypted keys indexed by identity multi-format + keys = encryptedKeyAndIdentityHashes.reduce( + ( + allKeys: TransactionTypes.IKeysDictionary, + keyAndHash: { + encryptedKey: EncryptionTypes.IEncryptedData; + multiFormattedIdentity: string; + }, + ): TransactionTypes.IKeysDictionary => { + const encryptedKeySerialized: string = MultiFormat.serialize(keyAndHash.encryptedKey); + + allKeys[keyAndHash.multiFormattedIdentity] = encryptedKeySerialized; + return allKeys; + }, + {}, + ); + } else if ( + encryptionParams.every( + (encryptionParam: EncryptionTypes.IEncryptionParameters) => + encryptionParam.method === EncryptionTypes.METHOD.KMS, + ) + ) { + encryptionMethod = `${EncryptionTypes.METHOD.KMS}-${EncryptionTypes.METHOD.AES256_GCM}`; + if (!cipherProvider) { + throw new Error('cipherProvider is required for KMS encryption'); + } + + const encryptResponse = await cipherProvider.encrypt(symmetricKey, { + encryptionParams, + }); + + if (!encryptResponse) { + throw new Error('Invalid encryption response from cipher provider'); + } + keys = Object.fromEntries( + encryptionParams.map((encryptionParam) => { + return [ + encryptionParam.key, + MultiFormat.serialize({ + type: EncryptionTypes.METHOD.KMS, + value: JSON.stringify(encryptResponse), + }), + ]; + }), + ); + } else { + throw new Error( + `encryptionParams method must be all: ${EncryptionTypes.METHOD.ECIES} or ${EncryptionTypes.METHOD.KMS}`, + ); + } const encryptedDataSerialized: string = MultiFormat.serialize(encryptedData); @@ -122,6 +170,7 @@ export default class TransactionsFactory { data: TransactionTypes.ITransactionData, channelKey: EncryptionTypes.IEncryptionParameters, encryptionParams: EncryptionTypes.IEncryptionParameters[] = [], + cipherProvider?: CipherProviderTypes.ICipherProvider, ): Promise { // check if the encryption method is the good one if (channelKey.method !== EncryptionTypes.METHOD.AES256_GCM) { @@ -138,6 +187,7 @@ export default class TransactionsFactory { } const encryptedDataSerialized: string = MultiFormat.serialize(encryptedData); + let keys: TransactionTypes.IKeysDictionary = {}; if (encryptionParams.length === 0) { return { encryptedData: encryptedDataSerialized }; @@ -145,52 +195,94 @@ export default class TransactionsFactory { // FIXME: Refactor, duplicated from createEncryptedTransactionInNewChannel // Check that all the encryption parameters given are ECIES (the only encryption method supported for now) if ( - !encryptionParams.every( + encryptionParams.every( (encryptionParam: EncryptionTypes.IEncryptionParameters) => encryptionParam.method === EncryptionTypes.METHOD.ECIES, ) ) { - throw new Error(`encryptionParams method must be all: ${EncryptionTypes.METHOD.ECIES}`); - } + // Compute key encryption and identity hash for every encryption parameters given + const encryptedKeyAndIdentityHashesPromises = encryptionParams.map( + async ( + encryptionParam: EncryptionTypes.IEncryptionParameters, + ): Promise<{ + encryptedKey: EncryptionTypes.IEncryptedData; + multiFormattedIdentity: string; + }> => { + const identityEncryption = getIdentityFromEncryptionParams(encryptionParam); + const multiFormattedIdentity: string = MultiFormat.serialize(identityEncryption); - // Compute key encryption and identity hash for every encryption parameters given - const encryptedKeyAndIdentityHashesPromises = encryptionParams.map( - async ( - encryptionParam: EncryptionTypes.IEncryptionParameters, - ): Promise<{ - encryptedKey: EncryptionTypes.IEncryptedData; - multiFormattedIdentity: string; - }> => { - const encryptedKey: EncryptionTypes.IEncryptedData = await encrypt( - channelKey.key, - encryptionParam, - ); - const identityEncryption = getIdentityFromEncryptionParams(encryptionParam); - const multiFormattedIdentity: string = MultiFormat.serialize(identityEncryption); + if ( + cipherProvider && + 'supportedMethods' in cipherProvider && + 'supportedIdentityTypes' in cipherProvider && + 'isIdentityRegistered' in cipherProvider + ) { + const encryptedKey: EncryptionTypes.IEncryptedData = await cipherProvider.encrypt( + channelKey.key, + { encryptionParams }, + ); + return { encryptedKey, multiFormattedIdentity }; + } else { + const encryptedKey: EncryptionTypes.IEncryptedData = await encrypt( + channelKey.key, + encryptionParam, + ); + return { encryptedKey, multiFormattedIdentity }; + } + }, + ); + const encryptedKeyAndIdentityHashes = await Promise.all( + encryptedKeyAndIdentityHashesPromises, + ); - return { encryptedKey, multiFormattedIdentity }; - }, - ); - const encryptedKeyAndIdentityHashes = await Promise.all( - encryptedKeyAndIdentityHashesPromises, - ); + // Create the encrypted keys object - Encrypted keys indexed by identity multi-format + keys = encryptedKeyAndIdentityHashes.reduce( + ( + allKeys: TransactionTypes.IKeysDictionary, + keyAndHash: { + encryptedKey: EncryptionTypes.IEncryptedData; + multiFormattedIdentity: string; + }, + ): TransactionTypes.IKeysDictionary => { + const encryptedKeySerialized: string = MultiFormat.serialize(keyAndHash.encryptedKey); - // Create the encrypted keys object - Encrypted keys indexed by identity multi-format - const keys: TransactionTypes.IKeysDictionary = encryptedKeyAndIdentityHashes.reduce( - ( - allKeys: TransactionTypes.IKeysDictionary, - keyAndHash: { - encryptedKey: EncryptionTypes.IEncryptedData; - multiFormattedIdentity: string; + allKeys[keyAndHash.multiFormattedIdentity] = encryptedKeySerialized; + return allKeys; }, - ): TransactionTypes.IKeysDictionary => { - const encryptedKeySerialized: string = MultiFormat.serialize(keyAndHash.encryptedKey); + {}, + ); + } else if ( + encryptionParams.every( + (encryptionParam: EncryptionTypes.IEncryptionParameters) => + encryptionParam.method === EncryptionTypes.METHOD.KMS, + ) + ) { + if (!cipherProvider) { + throw new Error('cipherProvider is required for KMS encryption'); + } + const encryptResponse = await cipherProvider.encrypt(channelKey.key, { + encryptionParams, + }); - allKeys[keyAndHash.multiFormattedIdentity] = encryptedKeySerialized; - return allKeys; - }, - {}, - ); + if (!encryptResponse) { + throw new Error('Invalid encryption response from cipher provider'); + } + keys = Object.fromEntries( + encryptionParams.map((encryptionParam) => { + return [ + encryptionParam.key, + MultiFormat.serialize({ + type: EncryptionTypes.METHOD.KMS, + value: JSON.stringify(encryptResponse), + }), + ]; + }), + ); + } else { + throw new Error( + `encryptionParams method must be all: ${EncryptionTypes.METHOD.ECIES} or ${EncryptionTypes.METHOD.KMS}`, + ); + } return { encryptedData: encryptedDataSerialized, keys }; } diff --git a/packages/transaction-manager/src/transactions-parser.ts b/packages/transaction-manager/src/transactions-parser.ts index b901c950b..82be121a2 100644 --- a/packages/transaction-manager/src/transactions-parser.ts +++ b/packages/transaction-manager/src/transactions-parser.ts @@ -1,5 +1,6 @@ import * as MultiFormat from '@requestnetwork/multi-format'; import { + CipherProviderTypes, DecryptionProviderTypes, EncryptionTypes, IdentityTypes, @@ -14,9 +15,14 @@ import EncryptedTransaction from './encrypted-transaction'; */ export default class TransactionsParser { private decryptionProvider: DecryptionProviderTypes.IDecryptionProvider | undefined; + private cipherProvider: CipherProviderTypes.ICipherProvider | undefined; - constructor(decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider) { + constructor( + decryptionProvider?: DecryptionProviderTypes.IDecryptionProvider, + cipherProvider?: CipherProviderTypes.ICipherProvider, + ) { this.decryptionProvider = decryptionProvider; + this.cipherProvider = cipherProvider; } /** @@ -124,63 +130,111 @@ export default class TransactionsParser { keys: TransactionTypes.IKeysDictionary, encryptionMethod: string, ): Promise { - // Check if the decryption provider is given - if (!this.decryptionProvider) { - throw new Error(`No decryption provider given`); - } + let errorReason = ''; + let channelKey = ''; + let channelKeyMethod: EncryptionTypes.METHOD | undefined; - let channelKeyMethod: EncryptionTypes.METHOD; - // Check the encryption method if ( - encryptionMethod === `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_CBC}` - ) { - channelKeyMethod = EncryptionTypes.METHOD.AES256_CBC; - } else if ( - encryptionMethod === `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}` + this.cipherProvider && + encryptionMethod === `${EncryptionTypes.METHOD.KMS}-${EncryptionTypes.METHOD.AES256_GCM}` ) { - channelKeyMethod = EncryptionTypes.METHOD.AES256_GCM; + const entries = Object.entries(keys); + if (entries.length === 0) { + throw new Error('No encryption keys provided'); + } + let encryptResponse; + try { + encryptResponse = JSON.parse(MultiFormat.deserialize(entries[0][1]).value); + } catch (e) { + throw new Error('Invalid encryption response format'); + } + const encryptionParams = entries.map((entry) => { + return { + method: EncryptionTypes.METHOD.KMS, + key: entry[0], + }; + }); + try { + channelKey = await this.cipherProvider.decrypt(encryptResponse, { + encryptionParams, + }); + channelKeyMethod = EncryptionTypes.METHOD.AES256_GCM; + } catch (e) { + errorReason = e.message; + } } else { - throw new Error(`Encryption method not supported: ${encryptionMethod}`); - } + // Check if the decryption provider is given + if (!this.decryptionProvider && !this.cipherProvider) { + throw new Error(`No decryption or cipher provider given`); + } - let errorReason = ''; - // Try to decrypt the channelKey - const channelKey = await Object.keys(keys || {}).reduce( - async (decryptedChannelKeyPromise, identityMultiFormatted: string) => { - let decryptedChannelKey = await decryptedChannelKeyPromise; - if (keys && decryptedChannelKey === '') { - let identity: IdentityTypes.IIdentity | undefined; - try { - identity = MultiFormat.deserialize(identityMultiFormatted); - } catch (e) { - // if we cannot deserialize it, just ignore this identity - } - // Ignore what is not an identity Ethereum address - if (identity && identity.type === IdentityTypes.TYPE.ETHEREUM_ADDRESS) { - // Check if we can decrypt the key with this identity - if ( - this.decryptionProvider && - (await this.decryptionProvider.isIdentityRegistered(identity)) - ) { - try { - const key = MultiFormat.deserialize(keys[identityMultiFormatted]); - decryptedChannelKey = await this.decryptionProvider.decrypt(key, identity); - } catch (e) { - errorReason = e.message; + // Check the encryption method + if ( + encryptionMethod === `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_CBC}` + ) { + channelKeyMethod = EncryptionTypes.METHOD.AES256_CBC; + } else if ( + encryptionMethod === `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}` + ) { + channelKeyMethod = EncryptionTypes.METHOD.AES256_GCM; + } else { + throw new Error(`Encryption method not supported: ${encryptionMethod}`); + } + + // Try to decrypt the channelKey + channelKey = await Object.keys(keys || {}).reduce( + async (decryptedChannelKeyPromise, identityMultiFormatted: string) => { + let decryptedChannelKey = await decryptedChannelKeyPromise; + if (keys && decryptedChannelKey === '') { + let identity: IdentityTypes.IIdentity | undefined; + try { + identity = MultiFormat.deserialize(identityMultiFormatted); + } catch (e) { + // if we cannot deserialize it, just ignore this identity + } + // Ignore what is not an identity Ethereum address + if (identity && identity.type === IdentityTypes.TYPE.ETHEREUM_ADDRESS) { + // Check if we can decrypt the key with this identity + if ( + (this.decryptionProvider && + (await this.decryptionProvider.isIdentityRegistered(identity))) || + (this.cipherProvider && + typeof ( + this.cipherProvider as CipherProviderTypes.ICipherProvider & { + isIdentityRegistered: (identity: IdentityTypes.IIdentity) => Promise; + } + ).isIdentityRegistered === 'function' && + (await ( + this.cipherProvider as CipherProviderTypes.ICipherProvider & { + isIdentityRegistered: (identity: IdentityTypes.IIdentity) => Promise; + } + ).isIdentityRegistered(identity))) + ) { + try { + const key = MultiFormat.deserialize(keys[identityMultiFormatted]); + decryptedChannelKey = this.cipherProvider + ? await this.cipherProvider.decrypt(key, { + identity, + }) + : await this.decryptionProvider?.decrypt(key, identity); + } catch (e) { + errorReason = e.message; + } } } } - } - return decryptedChannelKey; - }, - Promise.resolve(''), - ); + return decryptedChannelKey; + }, + Promise.resolve(''), + ); + } - if (channelKey === '') { + if (channelKey === '' || !channelKeyMethod) { throw new Error( `Impossible to decrypt the channel key from this transaction (${errorReason})`, ); } + return { key: channelKey, method: channelKeyMethod, diff --git a/packages/transaction-manager/test/index.test.ts b/packages/transaction-manager/test/index.test.ts index c147ce8f5..0a5762715 100644 --- a/packages/transaction-manager/test/index.test.ts +++ b/packages/transaction-manager/test/index.test.ts @@ -568,7 +568,7 @@ describe('index', () => { dataAccessMeta: { transactionsStorageLocation: ['fakeDataId1'] }, ignoredTransactions: [ { - reason: 'No decryption provider given', + reason: 'No decryption or cipher provider given', transaction: { state: TransactionTypes.TransactionState.PENDING, timestamp: 1, @@ -1247,7 +1247,7 @@ describe('index', () => { ignoredTransactions: { [channelId]: [ { - reason: 'No decryption provider given', + reason: 'No decryption or cipher provider given', transaction: { state: TransactionTypes.TransactionState.PENDING, timestamp: 1, @@ -1328,7 +1328,7 @@ describe('index', () => { ignoredTransactions: { [channelId]: [ { - reason: 'No decryption provider given', + reason: 'No decryption or cipher provider given', transaction: { state: TransactionTypes.TransactionState.PENDING, timestamp: 1, diff --git a/packages/transaction-manager/test/unit/transactions-factory.test.ts b/packages/transaction-manager/test/unit/transactions-factory.test.ts index 131f5c860..f91a0a8bc 100644 --- a/packages/transaction-manager/test/unit/transactions-factory.test.ts +++ b/packages/transaction-manager/test/unit/transactions-factory.test.ts @@ -70,6 +70,57 @@ describe('transaction-factory', () => { ).toBe(true); }, 10000); + it('can create encrypted transaction with Lit Protocol', async () => { + const encryptedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( + data, + [ + TestData.kmsRaw1.encryptionParams, + TestData.kmsRaw2.encryptionParams, + TestData.kmsRaw3.encryptionParams, + ], + TestData.fakeLitProtocolProvider, + ); + // eslint-disable-next-line no-magic-numbers + + if (encryptedTx.encryptedData) { + // eslint-disable-next-line no-magic-numbers + expect(encryptedTx.encryptedData.length).toBe(126); + expect(encryptedTx.encryptedData.slice(0, 2)).toEqual( + MultiFormatTypes.prefix.AES256_GCM_ENCRYPTED, + ); + } else { + fail('encryptedData should not be undefined'); + } + + expect(encryptedTx.encryptionMethod).toEqual( + `${EncryptionTypes.METHOD.KMS}-${EncryptionTypes.METHOD.AES256_GCM}`, + ); + + expect(Object.keys(encryptedTx.keys || {}).length).toEqual(3); + + expect(Object.keys(encryptedTx.keys || {})).toEqual([ + TestData.kmsRaw1.encryptionParams.key, + TestData.kmsRaw2.encryptionParams.key, + TestData.kmsRaw3.encryptionParams.key, + ]); + + expect( + Object.values(encryptedTx.keys || {}).every( + (ek) => ek.slice(0, 2) === MultiFormatTypes.prefix.KMS_ENCRYPTED, + ), + ).toBe(true); + }); + + it('should throw error when cipherProvider is not provided for KMS encryption', async () => { + await expect( + TransactionsFactory.createEncryptedTransactionInNewChannel( + data, + [TestData.kmsRaw1.encryptionParams], + undefined, + ), + ).rejects.toThrowError('cipherProvider is required for KMS encryption'); + }); + it('cannot create encrypted transaction with encryption parameters not ECIES', async () => { await expect( TransactionsFactory.createEncryptedTransactionInNewChannel(data, [ @@ -120,6 +171,74 @@ describe('transaction-factory', () => { expect(encryptedTx.keys).toBeUndefined(); }, 10000); + it('can create encrypted transaction with Lit Protocol', async () => { + const channelKey = { + key: 'Vt6L0ppo7tOs9KdnTT6HSHZ/wW1Pfu/rgSs5NVTigN8=', + method: EncryptionTypes.METHOD.AES256_GCM, + }; + const encryptedTx = await TransactionsFactory.createEncryptedTransaction( + data, + channelKey, + undefined, + TestData.fakeLitProtocolProvider, + ); + // eslint-disable-next-line no-magic-numbers + + if (encryptedTx.encryptedData) { + // eslint-disable-next-line no-magic-numbers + // 'encryptedData not right' + expect(encryptedTx.encryptedData.length).toBe(126); + // 'encryptedData not right' + expect(encryptedTx.encryptedData.slice(0, 2)).toEqual( + MultiFormatTypes.prefix.AES256_GCM_ENCRYPTED, + ); + } else { + fail('encryptedData should not be undefined'); + } + + // 'encryptionMethod not right' + expect(encryptedTx.encryptionMethod).toBeUndefined(); + + // 'keys not right' + expect(encryptedTx.keys).toBeUndefined(); + }); + + it('can create encrypted transaction with Lit Protocol and encryption parameters', async () => { + const channelKey = { + key: 'Vt6L0ppo7tOs9KdnTT6HSHZ/wW1Pfu/rgSs5NVTigN8=', + method: EncryptionTypes.METHOD.AES256_GCM, + }; + const encryptedTx = await TransactionsFactory.createEncryptedTransaction( + data, + channelKey, + [ + TestData.kmsRaw1.encryptionParams, + TestData.kmsRaw2.encryptionParams, + TestData.kmsRaw3.encryptionParams, + ], + TestData.fakeLitProtocolProvider, + ); + // eslint-disable-next-line no-magic-numbers + + if (encryptedTx.encryptedData) { + // eslint-disable-next-line no-magic-numbers + // 'encryptedData not right' + expect(encryptedTx.encryptedData.length).toBe(126); + // 'encryptedData not right' + expect(encryptedTx.encryptedData.slice(0, 2)).toEqual( + MultiFormatTypes.prefix.AES256_GCM_ENCRYPTED, + ); + } else { + fail('encryptedData should not be undefined'); + } + + expect( + Object.values(encryptedTx.keys || {}).every( + (ek) => ek.slice(0, 2) === MultiFormatTypes.prefix.KMS_ENCRYPTED, + ), + ).toBe(true); + }); + it('cannot create encrypted transaction with encryption parameters not AES256-CBC', async () => { const channelKeyWrong = { key: 'Vt6L0ppo7tOs9KdnTT6HSHZ/wW1Pfu/rgSs5NVTigN8=', diff --git a/packages/transaction-manager/test/unit/transactions-parser.test.ts b/packages/transaction-manager/test/unit/transactions-parser.test.ts index 92a41cce7..6094b680a 100644 --- a/packages/transaction-manager/test/unit/transactions-parser.test.ts +++ b/packages/transaction-manager/test/unit/transactions-parser.test.ts @@ -69,18 +69,174 @@ describe('transaction-parser', () => { }); }); - describe('parse encrypted persisted transaction', () => { + const encryptedTests = (decryption?: any, provider?: any) => { + describe('parse encrypted persisted transaction', () => { + beforeEach(() => { + transactionParser = new TransactionsParser(decryption, provider); + }); + it('can parse encrypted transaction on an unknown channel', async () => { + const encryptedParsedTx = + await TransactionsFactory.createEncryptedTransactionInNewChannel(data, [ + TestData.idRaw1.encryptionParams, + TestData.idRaw2.encryptionParams, + TestData.idRaw3.encryptionParams, + ]); + + const ret = await transactionParser.parsePersistedTransaction( + encryptedParsedTx, + TransactionTypes.ChannelType.UNKNOWN, + ); + + // 'transaction wrong' + expect(await ret.transaction.getData()).toBe(data); + // 'channelKey wrong' + expect(ret.channelKey).toBeDefined(); + }); + it('cannot parse encrypted transaction without decryptionProvider', async () => { + transactionParser = new TransactionsParser(); + const encryptedParsedTx = + await TransactionsFactory.createEncryptedTransactionInNewChannel(data, [ + TestData.idRaw1.encryptionParams, + ]); + + await expect( + transactionParser.parsePersistedTransaction( + encryptedParsedTx, + TransactionTypes.ChannelType.UNKNOWN, + ), + ).rejects.toThrowError(`No decryption or cipher provider given`); + }); + it('cannot parse encrypted transaction with keys corrupted', async () => { + const encryptedParsedTx = + await TransactionsFactory.createEncryptedTransactionInNewChannel(data, [ + TestData.idRaw1.encryptionParams, + ]); + + const addRaw1Formatted = `20${TestData.idRaw1.address.slice(2)}`; + encryptedParsedTx.keys = { [addRaw1Formatted]: '02Corrupted keys' }; + + await expect( + transactionParser.parsePersistedTransaction( + encryptedParsedTx, + TransactionTypes.ChannelType.UNKNOWN, + ), + ).rejects.toThrowError( + `Impossible to decrypt the channel key from this transaction (The encrypted data is not well formatted)`, + ); + }); + it('cannot parse encrypted transaction with a encryption method not supported', async () => { + await expect( + transactionParser.parsePersistedTransaction( + { + encryptedData: 'encryptedData', + encryptionMethod: 'encryptionMethod', + keys: {}, + }, + TransactionTypes.ChannelType.UNKNOWN, + ), + ).rejects.toThrowError(`Encryption method not supported: encryptionMethod`); + }); + it('cannot parse encrypted transaction on an clear channel', async () => { + transactionParser = new TransactionsParser(TestData.fakeDecryptionProvider); + + const encryptedParsedTx = + await TransactionsFactory.createEncryptedTransactionInNewChannel(data, [ + TestData.idRaw1.encryptionParams, + TestData.idRaw2.encryptionParams, + ]); + await expect( + transactionParser.parsePersistedTransaction( + encryptedParsedTx, + TransactionTypes.ChannelType.CLEAR, + ), + ).rejects.toThrowError('Encrypted transactions are not allowed in clear channel'); + }); + it('cannot parse encrypted transaction without channelKey without encryptionMethod and transaction missing encryptionMethod or keys', async () => { + await expect( + transactionParser.parsePersistedTransaction( + { encryptedData: 'encryptedData', encryptionMethod: 'encryptionMethod' }, + TransactionTypes.ChannelType.UNKNOWN, + ), + ).rejects.toThrowError( + 'the properties "encryptionMethod" and "keys" are needed to compute the channel key', + ); + + await expect( + transactionParser.parsePersistedTransaction( + { + encryptedData: 'encryptedData', + keys: {}, + }, + TransactionTypes.ChannelType.UNKNOWN, + ), + ).rejects.toThrowError( + 'the properties "encryptionMethod" and "keys" are needed to compute the channel key', + ); + }); + it('cannot parse encrypted transaction without channelKey with encryptionMethod and transaction contains encryptionMethod', async () => { + await expect( + transactionParser.parsePersistedTransaction( + { encryptedData: 'encryptedData', encryptionMethod: 'encryptionMethod' }, + TransactionTypes.ChannelType.UNKNOWN, + undefined, + `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + ), + ).rejects.toThrowError( + 'the "encryptionMethod" property has been already given for this channel', + ); + }); + it('cannot parse encrypted transaction without channelKey with encryptionMethod and transaction missing keys', async () => { + await expect( + transactionParser.parsePersistedTransaction( + { encryptedData: 'encryptedData' }, + TransactionTypes.ChannelType.UNKNOWN, + undefined, + `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + ), + ).rejects.toThrowError('the "keys" property is needed to compute the channel key'); + }); + it('cannot parse encrypted transaction with channelKey without encryptionMethod and transaction missing encryptionMethod', async () => { + await expect( + transactionParser.parsePersistedTransaction( + { encryptedData: 'encryptedData' }, + TransactionTypes.ChannelType.UNKNOWN, + { key: 'channelKey', method: EncryptionTypes.METHOD.AES256_GCM }, + ), + ).rejects.toThrowError( + 'the "encryptionMethod" property is needed to use the channel key', + ); + }); + it('cannot parse encrypted transaction with channelKey with encryptionMethod and transaction contains encryptionMethod', async () => { + await expect( + transactionParser.parsePersistedTransaction( + { encryptedData: 'encryptedData', encryptionMethod: 'encryptionMethod' }, + TransactionTypes.ChannelType.UNKNOWN, + { key: 'channelKey', method: EncryptionTypes.METHOD.AES256_GCM }, + `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + ), + ).rejects.toThrowError( + 'the "encryptionMethod" property has been already given for this channel', + ); + }); + }); + }; + + encryptedTests(TestData.fakeDecryptionProvider); + encryptedTests(undefined, TestData.fakeEpkCipherProvider); + + describe('parse encrypted persisted transaction with LitProtocol', () => { beforeEach(() => { - transactionParser = new TransactionsParser(TestData.fakeDecryptionProvider); + transactionParser = new TransactionsParser(undefined, TestData.fakeLitProtocolProvider); }); it('can parse encrypted transaction on an unknown channel', async () => { const encryptedParsedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( data, [ - TestData.idRaw1.encryptionParams, - TestData.idRaw2.encryptionParams, - TestData.idRaw3.encryptionParams, + TestData.kmsRaw1.encryptionParams, + TestData.kmsRaw2.encryptionParams, + TestData.kmsRaw3.encryptionParams, ], + TestData.fakeLitProtocolProvider, ); const ret = await transactionParser.parsePersistedTransaction( @@ -92,7 +248,8 @@ describe('transaction-parser', () => { expect(await ret.transaction.getData()).toBe(data); // 'channelKey wrong' expect(ret.channelKey).toBeDefined(); - }, 15000); + }); + it('cannot parse encrypted transaction without decryptionProvider', async () => { transactionParser = new TransactionsParser(); const encryptedParsedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( @@ -105,15 +262,17 @@ describe('transaction-parser', () => { encryptedParsedTx, TransactionTypes.ChannelType.UNKNOWN, ), - ).rejects.toThrowError(`No decryption provider given`); + ).rejects.toThrowError('No decryption or cipher provider given'); }); + it('cannot parse encrypted transaction with keys corrupted', async () => { const encryptedParsedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( data, - [TestData.idRaw1.encryptionParams], + [TestData.kmsRaw1.encryptionParams], + TestData.fakeLitProtocolProvider, ); - const addRaw1Formatted = `20${TestData.idRaw1.address.slice(2)}`; + const addRaw1Formatted = `20${TestData.kmsRaw1.encryptionParams.key.slice(2)}`; encryptedParsedTx.keys = { [addRaw1Formatted]: '02Corrupted keys' }; await expect( @@ -121,9 +280,7 @@ describe('transaction-parser', () => { encryptedParsedTx, TransactionTypes.ChannelType.UNKNOWN, ), - ).rejects.toThrowError( - `Impossible to decrypt the channel key from this transaction (The encrypted data is not well formatted)`, - ); + ).rejects.toThrowError(`Invalid encryption response format`); }); it('cannot parse encrypted transaction with a encryption method not supported', async () => { await expect( @@ -138,11 +295,10 @@ describe('transaction-parser', () => { ).rejects.toThrowError(`Encryption method not supported: encryptionMethod`); }); it('cannot parse encrypted transaction on an clear channel', async () => { - transactionParser = new TransactionsParser(TestData.fakeDecryptionProvider); - const encryptedParsedTx = await TransactionsFactory.createEncryptedTransactionInNewChannel( data, - [TestData.idRaw1.encryptionParams, TestData.idRaw2.encryptionParams], + [TestData.kmsRaw1.encryptionParams, TestData.kmsRaw2.encryptionParams], + TestData.fakeLitProtocolProvider, ); await expect( transactionParser.parsePersistedTransaction( @@ -179,7 +335,7 @@ describe('transaction-parser', () => { { encryptedData: 'encryptedData', encryptionMethod: 'encryptionMethod' }, TransactionTypes.ChannelType.UNKNOWN, undefined, - `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + `${EncryptionTypes.METHOD.KMS}-${EncryptionTypes.METHOD.AES256_GCM}`, ), ).rejects.toThrowError( 'the "encryptionMethod" property has been already given for this channel', @@ -191,7 +347,7 @@ describe('transaction-parser', () => { { encryptedData: 'encryptedData' }, TransactionTypes.ChannelType.UNKNOWN, undefined, - `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + `${EncryptionTypes.METHOD.KMS}-${EncryptionTypes.METHOD.AES256_GCM}`, ), ).rejects.toThrowError('the "keys" property is needed to compute the channel key'); }); @@ -210,7 +366,7 @@ describe('transaction-parser', () => { { encryptedData: 'encryptedData', encryptionMethod: 'encryptionMethod' }, TransactionTypes.ChannelType.UNKNOWN, { key: 'channelKey', method: EncryptionTypes.METHOD.AES256_GCM }, - `${EncryptionTypes.METHOD.ECIES}-${EncryptionTypes.METHOD.AES256_GCM}`, + `${EncryptionTypes.METHOD.KMS}-${EncryptionTypes.METHOD.AES256_GCM}`, ), ).rejects.toThrowError( 'the "encryptionMethod" property has been already given for this channel', diff --git a/packages/transaction-manager/test/unit/utils/test-data.ts b/packages/transaction-manager/test/unit/utils/test-data.ts index 6556d5f67..c9dede00d 100644 --- a/packages/transaction-manager/test/unit/utils/test-data.ts +++ b/packages/transaction-manager/test/unit/utils/test-data.ts @@ -1,5 +1,31 @@ -import { DecryptionProviderTypes, EncryptionTypes, IdentityTypes } from '@requestnetwork/types'; -import { decrypt } from '@requestnetwork/utils'; +import { + CipherProviderTypes, + DecryptionProviderTypes, + EncryptionTypes, + IdentityTypes, +} from '@requestnetwork/types'; +import { decrypt, ecEncrypt } from '@requestnetwork/utils'; + +export const kmsRaw1 = { + encryptionParams: { + key: '0xaf083f77f1ffd54218d91491afd06c9296eac3ce', + method: EncryptionTypes.METHOD.KMS, + }, +}; + +export const kmsRaw2 = { + encryptionParams: { + key: '0x740fc87bd3f41d07d23a01dec90623ebc5fed9d6', + method: EncryptionTypes.METHOD.KMS, + }, +}; + +export const kmsRaw3 = { + encryptionParams: { + key: '0x818b6337657a23f58581715fc610577292e521d0', + method: EncryptionTypes.METHOD.KMS, + }, +}; export const idRaw1 = { address: '0xaf083f77f1ffd54218d91491afd06c9296eac3ce', @@ -79,6 +105,44 @@ export const fakeDecryptionProvider: DecryptionProviderTypes.IDecryptionProvider supportedMethods: [EncryptionTypes.METHOD.ECIES], }; +export class FakeEpkCipherProvider implements CipherProviderTypes.ICipherProvider { + supportedIdentityTypes = [IdentityTypes.TYPE.ETHEREUM_ADDRESS]; + supportedMethods = [EncryptionTypes.METHOD.ECIES]; + + public async decrypt( + data: EncryptionTypes.IEncryptedData, + options: { identity: IdentityTypes.IIdentity }, + ): Promise { + switch (options.identity.value.toLowerCase()) { + case idRaw1.address: + return decrypt(data, idRaw1.decryptionParams); + case idRaw2.address: + return decrypt(data, idRaw2.decryptionParams); + default: + throw new Error('Identity not registered'); + } + } + + public async encrypt( + data: string, + options: { encryptionParams: EncryptionTypes.IEncryptionParameters }, + ): Promise { + const encryptionParams = options.encryptionParams; + + if (encryptionParams.method === EncryptionTypes.METHOD.ECIES) { + return ecEncrypt(encryptionParams.key, data); + } + + throw new Error('encryptionParams.method not supported'); + } + + public async isIdentityRegistered(identity: IdentityTypes.IIdentity): Promise { + return [idRaw1.address, idRaw2.address].includes(identity.value.toLowerCase()); + } +} + +export const fakeEpkCipherProvider = new FakeEpkCipherProvider(); + export const id3DecryptionProvider: DecryptionProviderTypes.IDecryptionProvider = { decrypt: ( data: EncryptionTypes.IEncryptedData, @@ -97,3 +161,45 @@ export const id3DecryptionProvider: DecryptionProviderTypes.IDecryptionProvider supportedIdentityTypes: [IdentityTypes.TYPE.ETHEREUM_ADDRESS], supportedMethods: [EncryptionTypes.METHOD.ECIES], }; + +export class FakeLitProtocolProvider implements CipherProviderTypes.ICipherProvider { + private storedRawData: string; + + constructor() { + this.storedRawData = ''; + } + + public async decrypt( + encryptedData: string, + options: { + encryptionParams: EncryptionTypes.IEncryptionParameters[]; + }, + ): Promise<{}> { + if (!options.encryptionParams?.length) { + throw new Error('Encryption parameters are required'); + } + if (encryptedData !== 'encrypted') { + throw new Error('Invalid encrypted data format'); + } + return this.storedRawData; + } + + public async encrypt( + data: string, + options: { + encryptionParams: EncryptionTypes.IEncryptionParameters[]; + }, + ): Promise<{}> { + if (!options.encryptionParams?.length) { + throw new Error('Encryption parameters are required'); + } + if (!data) { + throw new Error('Data is required'); + } + this.storedRawData = data; + return 'encrypted'; + } +} + +export const fakeLitProtocolProvider: CipherProviderTypes.ICipherProvider = + new FakeLitProtocolProvider(); diff --git a/packages/types/package.json b/packages/types/package.json index b1146a54a..6bab4de3e 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -38,6 +38,7 @@ "prepare": "yarn run build" }, "dependencies": { + "@lit-protocol/types": "6.11.0", "ethers": "5.7.2" }, "devDependencies": { diff --git a/packages/types/src/cipher-provider-types.ts b/packages/types/src/cipher-provider-types.ts new file mode 100644 index 000000000..4e6c39aa0 --- /dev/null +++ b/packages/types/src/cipher-provider-types.ts @@ -0,0 +1,20 @@ +/** + * A generic interface for Key Management Service (KMS) providers. + */ +export interface ICipherProvider { + /** + * Encrypts the given data. + * @param data - The data to encrypt. + * @param options - Any additional options required for encryption. + * @returns A Promise that resolves to an object containing the encrypted data and any necessary metadata. + */ + encrypt(data: any, options: any): Promise; + + /** + * Decrypts the given encrypted data. + * @param encryptedData - The encrypted data to decrypt. + * @param options - Any additional options required for decryption. + * @returns A Promise that resolves to the decrypted data. + */ + decrypt(encryptedData: any, options: any): Promise; +} diff --git a/packages/types/src/data-access-types.ts b/packages/types/src/data-access-types.ts index 0899640e4..a062615b5 100644 --- a/packages/types/src/data-access-types.ts +++ b/packages/types/src/data-access-types.ts @@ -1,6 +1,6 @@ import * as StorageTypes from './storage-types'; import { ConfirmationEventEmitter } from './events'; - +import { AuthSig } from '@lit-protocol/types'; /** Data Access Layer */ export interface IDataRead { initialize: () => Promise; @@ -33,6 +33,7 @@ export interface IDataWrite { export interface IDataAccess extends IDataRead, IDataWrite { _getStatus?(): Promise; + getLitCapacityDelegationAuthSig?: (delegateeAddress: string) => Promise; } export interface IDataAccessStatus { @@ -152,7 +153,6 @@ export type PendingItem = { transaction: ITransaction; storageResult: StorageTypes.IEntry; }; - export interface IPendingStore { get(channelId: string): PendingItem | undefined; @@ -162,3 +162,5 @@ export interface IPendingStore { remove(channelId: string): void; } + +export { AuthSig }; diff --git a/packages/types/src/encryption-types.ts b/packages/types/src/encryption-types.ts index 5a8924db6..bb379fd8e 100644 --- a/packages/types/src/encryption-types.ts +++ b/packages/types/src/encryption-types.ts @@ -24,6 +24,7 @@ export interface IEncryptedData { /** Supported encryption methods */ export enum METHOD { + KMS = 'kms', ECIES = 'ecies', AES256_CBC = 'aes256-cbc', AES256_GCM = 'aes256-gcm', diff --git a/packages/types/src/epk-provider-types.ts b/packages/types/src/epk-provider-types.ts new file mode 100644 index 000000000..a788c414a --- /dev/null +++ b/packages/types/src/epk-provider-types.ts @@ -0,0 +1,10 @@ +import { CipherProviderTypes } from '.'; +import * as Encryption from './encryption-types'; +import * as Identity from './identity-types'; + +/** EPK provider interface */ +export interface IEpkProvider extends CipherProviderTypes.ICipherProvider { + supportedMethods: Encryption.METHOD[]; + supportedIdentityTypes: Identity.TYPE[]; + isIdentityRegistered: (identity: Identity.IIdentity) => Promise; +} diff --git a/packages/types/src/index.ts b/packages/types/src/index.ts index 1554830bf..a6af1ab50 100644 --- a/packages/types/src/index.ts +++ b/packages/types/src/index.ts @@ -3,9 +3,11 @@ import * as ClientTypes from './client-types'; import * as CurrencyTypes from './currency-types'; import * as DataAccessTypes from './data-access-types'; import * as DecryptionProviderTypes from './decryption-provider-types'; +import * as EpkProviderTypes from './epk-provider-types'; import * as EncryptionTypes from './encryption-types'; import * as ExtensionTypes from './extension-types'; import * as IdentityTypes from './identity-types'; +import * as CipherProviderTypes from './cipher-provider-types'; import * as LogTypes from './logger-types'; import * as MultiFormatTypes from './multi-format-types'; import * as PaymentTypes from './payment-types'; @@ -21,9 +23,11 @@ export { AdvancedLogicTypes, ClientTypes, CurrencyTypes, + CipherProviderTypes, DataAccessTypes, DecryptionProviderTypes, EncryptionTypes, + EpkProviderTypes, ExtensionTypes, IdentityTypes, LogTypes, diff --git a/packages/types/src/multi-format-types.ts b/packages/types/src/multi-format-types.ts index aef5771a9..b08bd18f5 100644 --- a/packages/types/src/multi-format-types.ts +++ b/packages/types/src/multi-format-types.ts @@ -14,6 +14,8 @@ export enum prefix { AES256_CBC_ENCRYPTED = '03', /** AES256-GCM encrypted data */ AES256_GCM_ENCRYPTED = '04', + /** KMS encrypted data */ + KMS_ENCRYPTED = '05', /** Identity Ethereum address */ IDENTITY_ETHEREUM_ADDRESS = '20', diff --git a/packages/utils/src/encryption.ts b/packages/utils/src/encryption.ts index 746c917b3..2b08914ca 100644 --- a/packages/utils/src/encryption.ts +++ b/packages/utils/src/encryption.ts @@ -37,6 +37,8 @@ function getIdentityFromEncryptionParams( /** * Encrypts data using encryption parameters * + * IMPORTANT: This must be used for test purpose only. A cipher provider must be used in production. + * * @param data the data to sign * @param encryptionParams Encryption parameters * @returns the encrypted data diff --git a/yarn.lock b/yarn.lock index 4ccd381b2..3199c7507 100644 --- a/yarn.lock +++ b/yarn.lock @@ -912,6 +912,50 @@ dot "^1.1.3" fs-extra "^9.0.1" +"@cosmjs/amino@0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.30.1.tgz#7c18c14627361ba6c88e3495700ceea1f76baace" + integrity sha512-yNHnzmvAlkETDYIpeCTdVqgvrdt1qgkOXwuRVi8s27UKI5hfqyE9fJ/fuunXE6ZZPnKkjIecDznmuUOMrMvw4w== + dependencies: + "@cosmjs/crypto" "^0.30.1" + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + +"@cosmjs/crypto@0.30.1", "@cosmjs/crypto@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/crypto/-/crypto-0.30.1.tgz#21e94d5ca8f8ded16eee1389d2639cb5c43c3eb5" + integrity sha512-rAljUlake3MSXs9xAm87mu34GfBLN0h/1uPPV6jEwClWjNkAMotzjC0ab9MARy5FFAvYHL3lWb57bhkbt2GtzQ== + dependencies: + "@cosmjs/encoding" "^0.30.1" + "@cosmjs/math" "^0.30.1" + "@cosmjs/utils" "^0.30.1" + "@noble/hashes" "^1" + bn.js "^5.2.0" + elliptic "^6.5.4" + libsodium-wrappers "^0.7.6" + +"@cosmjs/encoding@0.30.1", "@cosmjs/encoding@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.30.1.tgz#b5c4e0ef7ceb1f2753688eb96400ed70f35c6058" + integrity sha512-rXmrTbgqwihORwJ3xYhIgQFfMSrwLu1s43RIK9I8EBudPx3KmnmyAKzMOVsRDo9edLFNuZ9GIvysUCwQfq3WlQ== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + +"@cosmjs/math@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.30.1.tgz#8b816ef4de5d3afa66cb9fdfb5df2357a7845b8a" + integrity sha512-yaoeI23pin9ZiPHIisa6qqLngfnBR/25tSaWpkTm8Cy10MX70UF5oN4+/t1heLaM6SSmRrhk3psRkV4+7mH51Q== + dependencies: + bn.js "^5.2.0" + +"@cosmjs/utils@^0.30.1": + version "0.30.1" + resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.30.1.tgz#6d92582341be3c2ec8d82090253cfa4b7f959edb" + integrity sha512-KvvX58MGMWh7xA+N+deCfunkA/ZNDvFLw4YbOmX3f/XBIkqrVY7qlotfy2aNb1kgp6h4B6Yc8YawJPDTfvWX7g== + "@cspotcode/source-map-support@^0.8.0": version "0.8.1" resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz" @@ -3356,6 +3400,875 @@ write-pkg "4.0.0" yargs "16.2.0" +"@lit-labs/ssr-dom-shim@^1.0.0", "@lit-labs/ssr-dom-shim@^1.1.0": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@lit-labs/ssr-dom-shim/-/ssr-dom-shim-1.2.1.tgz#2f3a8f1d688935c704dbc89132394a41029acbb8" + integrity sha512-wx4aBmgeGvFmOKucFKY+8VFJSYZxs9poN3SDNQFF6lT6NrQUnHiPB2PWz2sc4ieEcAaYYzN+1uWahEeTq2aRIQ== + +"@lit-protocol/access-control-conditions@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/access-control-conditions/-/access-control-conditions-6.11.0.tgz#6004c07d4e2e2eb8c1316d02def606399bef5ac4" + integrity sha512-Pl+q3o+zRQlGiYPCqOLELspgwaUVq08fwPGT6Xx6h1B34X/wylk2hb38w87ymetaDY9eTeK1g+/NlQf7KJr+/A== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/access-control-conditions@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/access-control-conditions/-/access-control-conditions-6.11.2.tgz#1f1ed04a86e40a2d50769a6b0284a8c13f6c3203" + integrity sha512-NqvlJQrm5fi/9b85Dk1ue9JbN91WEJpYOMjd1bmNI+WFzu/K5gdDokhduZWwj0m4KygOS0LQW0cLy/a0U8HxxQ== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/accs-schemas@^0.0.15": + version "0.0.15" + resolved "https://registry.yarnpkg.com/@lit-protocol/accs-schemas/-/accs-schemas-0.0.15.tgz#00e31c6959834da6387049cf52bce29c84f0f9da" + integrity sha512-GYF8BolqrU2H/uXr3D39TUbgFN/3u2d68oHHNfwg926iEsCEHwGmUOPvi4EMprV5lJR3EVn9IQODY/4eokJ6Rg== + dependencies: + ajv "^8.12.0" + +"@lit-protocol/accs-schemas@^0.0.19": + version "0.0.19" + resolved "https://registry.yarnpkg.com/@lit-protocol/accs-schemas/-/accs-schemas-0.0.19.tgz#74216243d1208f62ee593d9e06c29ea433709ec0" + integrity sha512-O7hrDPUA6x5fgOx8HKRAV1k/8VMzwehfNHUwb2UGMbw4g3kKpokbR/ne7OPdIUYMgvRATc0WjL5gbh/w33pkOQ== + dependencies: + ajv "^8.12.0" + +"@lit-protocol/auth-browser@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/auth-browser/-/auth-browser-6.11.0.tgz#809843df6e055b6a6e870a4a0f6cb21dc10a1ea0" + integrity sha512-THutHhdKjiApJvwFDmPOGfE1a1k0slylC8PZeUWNEf7d10yKWzVxZVQS+PPXjU65R+F5mPf/VE69nKfvrRhy6Q== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/strings" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/misc-browser" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + tslib "1.14.1" + +"@lit-protocol/auth-browser@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/auth-browser/-/auth-browser-6.11.2.tgz#52b14a09ece70a11f2ceced4110f1b91548213d3" + integrity sha512-UBZrHYUBtzp1DUCurnm4yHy5R9n3KNr7GlfxNdKC1eutiXfxysX90gDUXkNRLdVtKplUHgqEJVlmZhBGNlyWiw== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/strings" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/misc-browser" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + tslib "1.14.1" + +"@lit-protocol/auth-helpers@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/auth-helpers/-/auth-helpers-6.11.0.tgz#959249399281cbffea3e9a67eaed4d5442a4009f" + integrity sha512-03PqCIQ+kzXZCLYLcvgdgEVI5zO0+Vblqrt5QAshrRgYhm4X4FoTbjt5vZesTxwaWG+tAAISd651GBM4jVnoTQ== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/access-control-conditions" "6.11.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + siwe-recap "0.0.2-alpha.0" + tslib "2.6.0" + util "0.12.5" + +"@lit-protocol/auth-helpers@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/auth-helpers/-/auth-helpers-6.11.2.tgz#0f3eadf3ae62d3a32ab0e060e407982b2d6debba" + integrity sha512-cneLYoFrovVWHxeedeqBsYKNoEkbaABx8woU74g3CxCl+NpuScS0ZRImCza2ci6zHM23y5pIQGeyvb4na1jH1g== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/access-control-conditions" "6.11.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + siwe-recap "0.0.2-alpha.0" + tslib "2.6.0" + util "0.12.5" + +"@lit-protocol/bls-sdk@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/bls-sdk/-/bls-sdk-6.11.0.tgz#08c06df71c11cebd8c0131e432ddece4827db696" + integrity sha512-WHfxJ3Siwt/dG139qowf+dT7K8xPejQ0SGGUSBWkhcuAR+zvCQUQ8MHVjDHmhYXKx9DM/OE+iPwXkva3GEYH0A== + dependencies: + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/bls-sdk@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/bls-sdk/-/bls-sdk-6.11.2.tgz#474014fe722d7da830543886fa4e812b8fa1253c" + integrity sha512-E9YWeeoETrtwwaNiwVvnA4okMSp2PsM6Pp8UL0nRD328YBTuY5UtZaF85QsmuMSbc7SxWU52ABhWNofZAFOh+A== + dependencies: + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/constants@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/constants/-/constants-6.11.0.tgz#d52a0450f1f01e9063dfa927a12b1e0e634d3c65" + integrity sha512-z7WY+qcjy5UXKc9EDqgAyvp7nWKY80IlQAk7lLhP5uIana8zc8RzJSgl0Hkz+vhPrQNmbMuB1/xVjdLD2B1tLg== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/types" "6.11.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/constants@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/constants/-/constants-6.11.2.tgz#b888fcaddcc153f6b00a476500cd59a17d5f8f1c" + integrity sha512-rcOrHikdJ/SdEL6dT/uRKWZNTYPPgQO4xbHweLMZocsIqofaU5Zpn/jLQ6xabVkx8YaW3quYMI2VT15r3u6CGw== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/types" "6.11.2" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/contracts-sdk@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/contracts-sdk/-/contracts-sdk-6.11.0.tgz#67afb126fe34ea87f85adf5c6d236bd50dadecda" + integrity sha512-Qz7q2uv0adL44QKu/MSzCCeRxpeKQAimL2yGfrc/i2W4vIZLPNTUElVvMC/kHlR/x0M9gHJYNhx8EIzoR9tZwg== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/types" "6.11.0" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + process "0.11.10" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/contracts-sdk@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/contracts-sdk/-/contracts-sdk-6.11.2.tgz#ed939fb3053bfc289ce8328c8be744a6a16658eb" + integrity sha512-vfM+AqjHXAzkwjpFPM2JBCgPQmMCHIGrk12upfb1klvvjHqU4BU7fLl7Q6l2SHC0rwQEj5xNGVFY6mDY0DK6VQ== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/types" "6.11.2" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + process "0.11.10" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/contracts@^0.0.63": + version "0.0.63" + resolved "https://registry.yarnpkg.com/@lit-protocol/contracts/-/contracts-0.0.63.tgz#8700c37df9d2422e9c97aa27871fb64de6186f6c" + integrity sha512-CAorNt72ybIY/g//dDeR837izNGuYQR99XwPSK2X2AJ6c+aZX1kdXCrOnxsbY40BzFrOk/dIFo+ymJ9E3qh48w== + +"@lit-protocol/core@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/core/-/core-6.11.0.tgz#b68ee407383a56440dc4cba85f512dedbd895df9" + integrity sha512-jrR7WlDTXDry1PwWTBHbzSwsDZmr4UZPLiWDWiSDdkEdye8j5R2ZO2HmYmajvRaKMlro6IWcgEqUEXUYsbrAeg== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/access-control-conditions" "6.11.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/bls-sdk" "6.11.0" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/contracts-sdk" "6.11.0" + "@lit-protocol/crypto" "6.11.0" + "@lit-protocol/ecdsa-sdk" "6.11.0" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/nacl" "6.11.0" + "@lit-protocol/sev-snp-utils-sdk" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + bs58 "^5.0.0" + cross-fetch "3.1.4" + date-and-time "^2.4.1" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + multiformats "^9.7.1" + pako "1.0.11" + process "0.11.10" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/core@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/core/-/core-6.11.2.tgz#3c68d8d4f7724bdaf16b369550f7024d1fb51108" + integrity sha512-76TKyLWztfwswR1AAKVwVVtm8C1iJzCqntgwjopF6JA8OulZTbmltKx+/WupmeXwQlLo4lzilZZDJLFhkgwMwg== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/access-control-conditions" "6.11.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/bls-sdk" "6.11.2" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/contracts-sdk" "6.11.2" + "@lit-protocol/crypto" "6.11.2" + "@lit-protocol/ecdsa-sdk" "6.11.2" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/nacl" "6.11.2" + "@lit-protocol/sev-snp-utils-sdk" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + bs58 "^5.0.0" + cross-fetch "3.1.4" + date-and-time "^2.4.1" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + multiformats "^9.7.1" + pako "1.0.11" + process "0.11.10" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/crypto@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/crypto/-/crypto-6.11.0.tgz#a6cc655fd3bc64a9c58922f1ba2f32cf96695c8e" + integrity sha512-Yll7okzIqCdVUk8p3JhGEw5S9BtRO8kAHowI9JywTO97g74D3R9yQxdJbcdzIrEUWDZeJkjh6z2kb+fOFqilUQ== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/bls-sdk" "6.11.0" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/ecdsa-sdk" "6.11.0" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/nacl" "6.11.0" + "@lit-protocol/sev-snp-utils-sdk" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + cross-fetch "3.1.4" + ethers "^5.7.1" + jszip "^3.10.1" + pako "1.0.11" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/crypto@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/crypto/-/crypto-6.11.2.tgz#dc32842d129a324b444e07e197bb399f130090ca" + integrity sha512-hpVrhhKI6o4SyX9NRriL6yXoNXDpvxVT3k50pg1F5+tHHlHL0bPuFc4hj9RWQ7TqwUtamMfPxEgRhYCTN5u5wg== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/bls-sdk" "6.11.2" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/ecdsa-sdk" "6.11.2" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/nacl" "6.11.2" + "@lit-protocol/sev-snp-utils-sdk" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + cross-fetch "3.1.4" + ethers "^5.7.1" + jszip "^3.10.1" + pako "1.0.11" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/ecdsa-sdk@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/ecdsa-sdk/-/ecdsa-sdk-6.11.0.tgz#34ef21249bf67ea865b30212b0ac7cff8135f9a2" + integrity sha512-wLx9aYaKzg3ETB7RJtahSE+xFWN/sHzGxVvKERuq7vJR4u+JAayGLAU1kMp5vnWrUCuN1R/SeQmLNKUH0meGAQ== + dependencies: + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/ecdsa-sdk@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/ecdsa-sdk/-/ecdsa-sdk-6.11.2.tgz#882ba01d996a193b09218f99294a090ea3b8e62f" + integrity sha512-slGmsK7GgIamJSdgUWl1soTrWe5qXwxNNwb0FSp7gFDW0X4nReDB8PSJIbu/cG5V6m+5QCHM79GLVJSilKnf5g== + dependencies: + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/encryption@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/encryption/-/encryption-6.11.0.tgz#210f2e1501a8b8fd4cb949f8b55e8dcab02aba7f" + integrity sha512-A191FifNfR2HEr9CHSRkIh18oJYbYPGfKWsUWPmR2tpH1ysItF4uZsKtSJDD8k/O9us5hbudslFpM9fXYA1azA== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/bls-sdk" "6.11.0" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/crypto" "6.11.0" + "@lit-protocol/ecdsa-sdk" "6.11.0" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/nacl" "6.11.0" + "@lit-protocol/sev-snp-utils-sdk" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + cross-fetch "3.1.4" + ethers "^5.7.1" + jszip "^3.10.1" + pako "1.0.11" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/encryption@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/encryption/-/encryption-6.11.2.tgz#f558f755924e6d78a6ed5804b3380c4cfd431188" + integrity sha512-PFbDmwUbTIq+PQPTDOQOGh8wTdgFXsM8KF+i4e+OLFOYqnTYdUcWt3r67z1rU1FVqudDIFj47IWzKe1sBmtTDQ== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/bls-sdk" "6.11.2" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/crypto" "6.11.2" + "@lit-protocol/ecdsa-sdk" "6.11.2" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/nacl" "6.11.2" + "@lit-protocol/sev-snp-utils-sdk" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + cross-fetch "3.1.4" + ethers "^5.7.1" + jszip "^3.10.1" + pako "1.0.11" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/lit-node-client-nodejs@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/lit-node-client-nodejs/-/lit-node-client-nodejs-6.11.0.tgz#5341ccea321a7fea07356f74aeea4532817371a3" + integrity sha512-5yMb8uxmWljKMfiCT/vtvioKlpu+kkhS/Mci8uWVD6VOGlfLodf/DuvKUVRcwfRyhqBeZZEGx8GPRgxUlv63Cw== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/transactions" "5.7.0" + "@lit-protocol/access-control-conditions" "6.11.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/auth-helpers" "6.11.0" + "@lit-protocol/bls-sdk" "6.11.0" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/contracts-sdk" "6.11.0" + "@lit-protocol/core" "6.11.0" + "@lit-protocol/crypto" "6.11.0" + "@lit-protocol/ecdsa-sdk" "6.11.0" + "@lit-protocol/encryption" "6.11.0" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/misc-browser" "6.11.0" + "@lit-protocol/nacl" "6.11.0" + "@lit-protocol/sev-snp-utils-sdk" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + bs58 "^5.0.0" + cross-fetch "3.1.4" + date-and-time "^2.4.1" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + multiformats "^9.7.1" + pako "1.0.11" + process "0.11.10" + siwe "^2.0.5" + siwe-recap "0.0.2-alpha.0" + tslib "^2.3.0" + util "0.12.5" + +"@lit-protocol/lit-node-client-nodejs@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/lit-node-client-nodejs/-/lit-node-client-nodejs-6.11.2.tgz#b9e9ea33059bb793b18e7a1aee34db5b0cb1e030" + integrity sha512-1xMwkEk2LXJi2aOosolDEpVQmthLl6SQbshk0fvwJn57Q+xYBOLH9PjZ9JinGgLOZ6lQGJS6E7yYJ/b4FFo5tA== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/transactions" "5.7.0" + "@lit-protocol/access-control-conditions" "6.11.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/auth-helpers" "6.11.2" + "@lit-protocol/bls-sdk" "6.11.2" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/contracts-sdk" "6.11.2" + "@lit-protocol/core" "6.11.2" + "@lit-protocol/crypto" "6.11.2" + "@lit-protocol/ecdsa-sdk" "6.11.2" + "@lit-protocol/encryption" "6.11.2" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/misc-browser" "6.11.2" + "@lit-protocol/nacl" "6.11.2" + "@lit-protocol/sev-snp-utils-sdk" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + bs58 "^5.0.0" + cross-fetch "3.1.4" + date-and-time "^2.4.1" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + multiformats "^9.7.1" + pako "1.0.11" + process "0.11.10" + siwe "^2.0.5" + siwe-recap "0.0.2-alpha.0" + tslib "^2.3.0" + util "0.12.5" + +"@lit-protocol/lit-node-client@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/lit-node-client/-/lit-node-client-6.11.0.tgz#0b24799fa846e57056fdbfcc69590243419e0f87" + integrity sha512-AX6x5z58c1HmDK88UWT5WLuBr4/OZvu3KLmB0yrHaTbNrKPRmICsydzQ/Vn+XAIf2Fd1ksKg2WCYQ0tZEshJLA== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@lit-protocol/access-control-conditions" "6.11.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/auth-browser" "6.11.0" + "@lit-protocol/auth-helpers" "6.11.0" + "@lit-protocol/bls-sdk" "6.11.0" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/contracts-sdk" "6.11.0" + "@lit-protocol/core" "6.11.0" + "@lit-protocol/crypto" "6.11.0" + "@lit-protocol/ecdsa-sdk" "6.11.0" + "@lit-protocol/encryption" "6.11.0" + "@lit-protocol/lit-node-client-nodejs" "6.11.0" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/misc" "6.11.0" + "@lit-protocol/misc-browser" "6.11.0" + "@lit-protocol/nacl" "6.11.0" + "@lit-protocol/sev-snp-utils-sdk" "6.11.0" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + "@walletconnect/ethereum-provider" "2.9.2" + "@walletconnect/modal" "2.6.1" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + bs58 "^5.0.0" + cross-fetch "3.1.4" + date-and-time "^2.4.1" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + multiformats "^9.7.1" + pako "1.0.11" + process "0.11.10" + siwe "^2.0.5" + siwe-recap "0.0.2-alpha.0" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + util "0.12.5" + +"@lit-protocol/lit-node-client@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/lit-node-client/-/lit-node-client-6.11.2.tgz#ddc0d9a42d62a80a89cbeba3604c100285b54858" + integrity sha512-mV+gc6rDjvECGvmso0LccoIK7mdXXqWYuTHNQOPJbYhN7wiDdNHBdLIu/TweBNzr5A1OYEyrhMd+4QINx/Ydcw== + dependencies: + "@cosmjs/amino" "0.30.1" + "@cosmjs/crypto" "0.30.1" + "@cosmjs/encoding" "0.30.1" + "@ethersproject/abi" "5.7.0" + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/bytes" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@ethersproject/strings" "5.7.0" + "@ethersproject/transactions" "5.7.0" + "@ethersproject/wallet" "5.7.0" + "@lit-protocol/access-control-conditions" "6.11.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/auth-browser" "6.11.2" + "@lit-protocol/auth-helpers" "6.11.2" + "@lit-protocol/bls-sdk" "6.11.2" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/contracts-sdk" "6.11.2" + "@lit-protocol/core" "6.11.2" + "@lit-protocol/crypto" "6.11.2" + "@lit-protocol/ecdsa-sdk" "6.11.2" + "@lit-protocol/encryption" "6.11.2" + "@lit-protocol/lit-node-client-nodejs" "6.11.2" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/misc" "6.11.2" + "@lit-protocol/misc-browser" "6.11.2" + "@lit-protocol/nacl" "6.11.2" + "@lit-protocol/sev-snp-utils-sdk" "6.11.2" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + "@walletconnect/ethereum-provider" "2.9.2" + "@walletconnect/modal" "2.6.1" + ajv "^8.12.0" + bitcoinjs-lib "^6.1.0" + bs58 "^5.0.0" + cross-fetch "3.1.4" + date-and-time "^2.4.1" + ethers "^5.7.1" + jose "^4.14.4" + jszip "^3.10.1" + multiformats "^9.7.1" + pako "1.0.11" + process "0.11.10" + siwe "^2.0.5" + siwe-recap "0.0.2-alpha.0" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + util "0.12.5" + +"@lit-protocol/logger@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/logger/-/logger-6.11.0.tgz#7a3412932af1daed18a921af26fd4e47da4b7c18" + integrity sha512-q+MAK99s+bJxXKklu1+TBT3SS0l2rpAmSg/VznEIOwHcRBpcbLpKWftNqzo3gKqETAK4q7DUgBk6oM9kkNgJEw== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/types" "6.11.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/logger@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/logger/-/logger-6.11.2.tgz#763aa3114727f8e8ff98a755ddec15047dcdc8d0" + integrity sha512-YUIYSOuAqQHbk7kS+c/vTyKWeN+2/x/HjE8eBj3nunQ7EhpK5Y6fIUoUj0Zzr7hUW3mWB9KabB92U9hbweQfkA== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/types" "6.11.2" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/misc-browser@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/misc-browser/-/misc-browser-6.11.0.tgz#12180c78325452bc102aba8be55916394e3ae330" + integrity sha512-8kGIvn60S6YVabhxL3CQXRroR6G3XNWB/05d29DuG1yMuazO65FciA1mta7D63i2TyVaKIKztbfIO0hsmJhj9Q== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/types" "6.11.0" + "@lit-protocol/uint8arrays" "6.11.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/misc-browser@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/misc-browser/-/misc-browser-6.11.2.tgz#4be791ce46b10763e29390139b844ffd5e94ddc0" + integrity sha512-dAHutu+S7BKYfIGXKlWmdsj2T2dneGBTwY09D5GVrgf6iCmyZd5O4X3tCw+vrfVeRxbdLQQrIe2VQkJhP0yMXw== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/types" "6.11.2" + "@lit-protocol/uint8arrays" "6.11.2" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/misc@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/misc/-/misc-6.11.0.tgz#000708399d3289f636e78e6fb2c15a4e8b4602fc" + integrity sha512-euQEqMDqt4ehHx7GFr3u7u9ondGcf6sOoE0bYDrPJi5d6DXLYpLL008A6BqZ2tAqJ+A2yKgK7DfnmBLyKvXWGQ== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/constants" "6.11.0" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.0" + "@lit-protocol/types" "6.11.0" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/misc@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/misc/-/misc-6.11.2.tgz#3c53da1434917a25fdad1fdc5bb9657c8afb49f5" + integrity sha512-J+YbDRpGmO9dtyjJv18pJHRL7qu8acu36wF04Lu8ZwRoYHMBVNQHBNRl7z6h8rcV3TEs9/aERTIQZI23K/EbpA== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@ethersproject/contracts" "5.7.0" + "@ethersproject/providers" "5.7.2" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/constants" "6.11.2" + "@lit-protocol/contracts" "^0.0.63" + "@lit-protocol/logger" "6.11.2" + "@lit-protocol/types" "6.11.2" + ajv "^8.12.0" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + util "0.12.5" + +"@lit-protocol/nacl@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/nacl/-/nacl-6.11.0.tgz#77132e7e2d41aebc91ff87c8e3b12d0d822f40d4" + integrity sha512-bZRLis6uO4OtWIX7C/CPerMfu+oyP6hd2ErUbzS8u6SJdPyW9KqzYMVdQAeijpCXBvAZAZzmgLadnFpNHT1i3g== + dependencies: + tslib "1.14.1" + +"@lit-protocol/nacl@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/nacl/-/nacl-6.11.2.tgz#3fc53f54509120f20b5a6a9d613d4a87e68efe65" + integrity sha512-lMImHYQbtTqR7A+XfuAghLczpmj2ctAFXp0e8OwUFk8cTlBhhncvDihAxtddHFD+iqGKKFIXrtukhOt8d64qiA== + dependencies: + tslib "1.14.1" + +"@lit-protocol/sev-snp-utils-sdk@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/sev-snp-utils-sdk/-/sev-snp-utils-sdk-6.11.0.tgz#043fedad785872fc239c3670d064776769d96bcb" + integrity sha512-T8tmJ4XVyzaufRffy6+rV7tS0XQkVLmbiDpFrGS4d+MVFXE02ct1JWDe/bStJa7xjs9k8HIqf/ejPaj5uhsP0Q== + dependencies: + cross-fetch "3.1.4" + tslib "1.14.1" + +"@lit-protocol/sev-snp-utils-sdk@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/sev-snp-utils-sdk/-/sev-snp-utils-sdk-6.11.2.tgz#97454838bdc16934c393924cd5097ef6f1955014" + integrity sha512-53Pk/8NsFVvfx6wxpoSQkJ3IjovXv8W66PcZyj5awNpR0RMmeXH3aYZtCD0OLl+Aa0PIoRDPUDBKUflKLlogtw== + dependencies: + cross-fetch "3.1.4" + tslib "1.14.1" + +"@lit-protocol/types@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/types/-/types-6.11.0.tgz#cab4a7fd67fec8298023a4c4b535edf39046518c" + integrity sha512-DiJhJkV/o7kVocP2SSAECv4MyF5V4Giz9BJqvrTfiSdfDjYuQoxIvLoSZUNLF/H+oyQQrKinDKNUy8GzhVTBMA== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.15" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/types@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/types/-/types-6.11.2.tgz#69d0cc86824bb0ca5187d0854b4c0298b5ba1c16" + integrity sha512-CPsOcRaRrEkN2X1gV5yYdyaNmNjzWubWgpzElFtvxg0RqU52a+XBGyF2lwFj3rPMkXAqU7ebC9tffU8sSII7bg== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.19" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/uint8arrays@6.11.0": + version "6.11.0" + resolved "https://registry.yarnpkg.com/@lit-protocol/uint8arrays/-/uint8arrays-6.11.0.tgz#6d6d0555c3adab18669d61f947f48a1ffea01a3f" + integrity sha512-0MJwBXmDTpiU8ScsCXShSsajs7P5Fw4xRwj6BbHbRjP7vaGtT1R08XUV95GQJVLFjkFMvJOGeqclSVzEA0ZK4Q== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.15" + "@lit-protocol/contracts" "^0.0.63" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit-protocol/uint8arrays@6.11.2": + version "6.11.2" + resolved "https://registry.yarnpkg.com/@lit-protocol/uint8arrays/-/uint8arrays-6.11.2.tgz#1c0fa56ebf14b17bc1a8c54da4065de2354dea88" + integrity sha512-LJYNxrwK+pjT39akzPxjMrABedP6dHZqZ+P7/t2s6ueDSvAGT+koeivP14uvMqhjZwsSl0QpPjwhmGowYeKLXw== + dependencies: + "@ethersproject/abstract-provider" "5.7.0" + "@lit-protocol/accs-schemas" "^0.0.19" + "@lit-protocol/contracts" "^0.0.63" + ethers "^5.7.1" + jszip "^3.10.1" + siwe "^2.0.5" + tslib "1.14.1" + +"@lit/reactive-element@^1.3.0", "@lit/reactive-element@^1.6.0": + version "1.6.3" + resolved "https://registry.yarnpkg.com/@lit/reactive-element/-/reactive-element-1.6.3.tgz#25b4eece2592132845d303e091bad9b04cdcfe03" + integrity sha512-QuTgnG52Poic7uM1AN5yJ09QMe0O28e10XzSvWDz02TJiiKee4stsiownEIadWm8nYzyDAyT+gKzUoZmiWQtsQ== + dependencies: + "@lit-labs/ssr-dom-shim" "^1.0.0" + "@ljharb/resumer@~0.0.1": version "0.0.1" resolved "https://registry.yarnpkg.com/@ljharb/resumer/-/resumer-0.0.1.tgz#8a940a9192dd31f6a1df17564bbd26dc6ad3e68d" @@ -3457,6 +4370,75 @@ tweetnacl "^1.0.3" tweetnacl-util "^0.15.1" +"@motionone/animation@^10.15.1", "@motionone/animation@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/animation/-/animation-10.18.0.tgz#868d00b447191816d5d5cf24b1cafa144017922b" + integrity sha512-9z2p5GFGCm0gBsZbi8rVMOAJCtw1WqBTIPw3ozk06gDvZInBPIsQcHgYogEJ4yuHJ+akuW8g1SEIOpTOvYs8hw== + dependencies: + "@motionone/easing" "^10.18.0" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" + tslib "^2.3.1" + +"@motionone/dom@^10.16.2", "@motionone/dom@^10.16.4": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/dom/-/dom-10.18.0.tgz#7fd25dac04cab72def6d2b92b8e0cdc091576527" + integrity sha512-bKLP7E0eyO4B2UaHBBN55tnppwRnaE3KFfh3Ps9HhnAkar3Cb69kUCJY9as8LrccVYKgHA+JY5dOQqJLOPhF5A== + dependencies: + "@motionone/animation" "^10.18.0" + "@motionone/generators" "^10.18.0" + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/easing@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/easing/-/easing-10.18.0.tgz#7b82f6010dfee3a1bb0ee83abfbaff6edae0c708" + integrity sha512-VcjByo7XpdLS4o9T8t99JtgxkdMcNWD3yHU/n6CLEz3bkmKDRZyYQ/wmSf6daum8ZXqfUAgFeCZSpJZIMxaCzg== + dependencies: + "@motionone/utils" "^10.18.0" + tslib "^2.3.1" + +"@motionone/generators@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/generators/-/generators-10.18.0.tgz#fe09ab5cfa0fb9a8884097feb7eb60abeb600762" + integrity sha512-+qfkC2DtkDj4tHPu+AFKVfR/C30O1vYdvsGYaR13W/1cczPrrcjdvYCj0VLFuRMN+lP1xvpNZHCRNM4fBzn1jg== + dependencies: + "@motionone/types" "^10.17.1" + "@motionone/utils" "^10.18.0" + tslib "^2.3.1" + +"@motionone/svelte@^10.16.2": + version "10.16.4" + resolved "https://registry.yarnpkg.com/@motionone/svelte/-/svelte-10.16.4.tgz#5daf117cf5b2576fc6dd487c5e0500938a742470" + integrity sha512-zRVqk20lD1xqe+yEDZhMYgftsuHc25+9JSo+r0a0OWUJFocjSV9D/+UGhX4xgJsuwB9acPzXLr20w40VnY2PQA== + dependencies: + "@motionone/dom" "^10.16.4" + tslib "^2.3.1" + +"@motionone/types@^10.15.1", "@motionone/types@^10.17.1": + version "10.17.1" + resolved "https://registry.yarnpkg.com/@motionone/types/-/types-10.17.1.tgz#cf487badbbdc9da0c2cb86ffc1e5d11147c6e6fb" + integrity sha512-KaC4kgiODDz8hswCrS0btrVrzyU2CSQKO7Ps90ibBVSQmjkrt2teqta6/sOG59v7+dPnKMAg13jyqtMKV2yJ7A== + +"@motionone/utils@^10.15.1", "@motionone/utils@^10.18.0": + version "10.18.0" + resolved "https://registry.yarnpkg.com/@motionone/utils/-/utils-10.18.0.tgz#a59ff8932ed9009624bca07c56b28ef2bb2f885e" + integrity sha512-3XVF7sgyTSI2KWvTf6uLlBJ5iAgRgmvp3bpuOiQJvInd4nZ19ET8lX5unn30SlmRH7hXbBbH+Gxd0m0klJ3Xtw== + dependencies: + "@motionone/types" "^10.17.1" + hey-listen "^1.0.8" + tslib "^2.3.1" + +"@motionone/vue@^10.16.2": + version "10.16.4" + resolved "https://registry.yarnpkg.com/@motionone/vue/-/vue-10.16.4.tgz#07d09e3aa5115ca0bcc0076cb9e5322775277c09" + integrity sha512-z10PF9JV6SbjFq+/rYabM+8CVlMokgl8RFGvieSGNTmrkQanfHn+15XBrhG3BgUfvmTeSeyShfOHpG0i9zEdcg== + dependencies: + "@motionone/dom" "^10.16.4" + tslib "^2.3.1" + "@mrmlnc/readdir-enhanced@^2.2.1": version "2.2.1" resolved "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz" @@ -3632,6 +4614,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.3.tgz#39908da56a4adc270147bb07968bf3b16cfe1699" integrity sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA== +"@noble/hashes@^1", "@noble/hashes@^1.1.2", "@noble/hashes@^1.2.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" + integrity sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA== + "@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": version "1.7.1" resolved "https://registry.npmjs.org/@noble/secp256k1/-/secp256k1-1.7.1.tgz" @@ -4276,61 +5263,135 @@ resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.3.0.tgz#d82e74bb564ebd4d8a88791d273a3d2bd61e27ab" integrity sha512-f4o9eA3dgk0XRT3XhB0UWpWpLnKgrh1IwNJKJ7UJek7eTYccQ8LR7XUWFKqw6aEq5KUNlCcGvSzKqSX/vtWVVA== +"@parcel/watcher-android-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.0.tgz#e32d3dda6647791ee930556aee206fcd5ea0fb7a" + integrity sha512-qlX4eS28bUcQCdribHkg/herLe+0A9RyYC+mm2PXpncit8z5b3nSqGVzMNR3CmtAOgRutiZ02eIJJgP/b1iEFQ== + "@parcel/watcher-darwin-arm64@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.3.0.tgz#c9cd03f8f233d512fcfc873d5b4e23f1569a82ad" integrity sha512-mKY+oijI4ahBMc/GygVGvEdOq0L4DxhYgwQqYAz/7yPzuGi79oXrZG52WdpGA1wLBPrYb0T8uBaGFo7I6rvSKw== +"@parcel/watcher-darwin-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.0.tgz#0d9e680b7e9ec1c8f54944f1b945aa8755afb12f" + integrity sha512-hyZ3TANnzGfLpRA2s/4U1kbw2ZI4qGxaRJbBH2DCSREFfubMswheh8TeiC1sGZ3z2jUf3s37P0BBlrD3sjVTUw== + "@parcel/watcher-darwin-x64@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.3.0.tgz#83c902994a2a49b9e1ab5050dba24876fdc2c219" integrity sha512-20oBj8LcEOnLE3mgpy6zuOq8AplPu9NcSSSfyVKgfOhNAc4eF4ob3ldj0xWjGGbOF7Dcy1Tvm6ytvgdjlfUeow== +"@parcel/watcher-darwin-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.0.tgz#f9f1d5ce9d5878d344f14ef1856b7a830c59d1bb" + integrity sha512-9rhlwd78saKf18fT869/poydQK8YqlU26TMiNg7AIu7eBp9adqbJZqmdFOsbZ5cnLp5XvRo9wcFmNHgHdWaGYA== + "@parcel/watcher-freebsd-x64@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.3.0.tgz#7a0f4593a887e2752b706aff2dae509aef430cf6" integrity sha512-7LftKlaHunueAEiojhCn+Ef2CTXWsLgTl4hq0pkhkTBFI3ssj2bJXmH2L67mKpiAD5dz66JYk4zS66qzdnIOgw== +"@parcel/watcher-freebsd-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.0.tgz#2b77f0c82d19e84ff4c21de6da7f7d096b1a7e82" + integrity sha512-syvfhZzyM8kErg3VF0xpV8dixJ+RzbUaaGaeb7uDuz0D3FK97/mZ5AJQ3XNnDsXX7KkFNtyQyFrXZzQIcN49Tw== + "@parcel/watcher-linux-arm-glibc@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.3.0.tgz#3fc90c3ebe67de3648ed2f138068722f9b1d47da" integrity sha512-1apPw5cD2xBv1XIHPUlq0cO6iAaEUQ3BcY0ysSyD9Kuyw4MoWm1DV+W9mneWI+1g6OeP6dhikiFE6BlU+AToTQ== +"@parcel/watcher-linux-arm-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.0.tgz#92ed322c56dbafa3d2545dcf2803334aee131e42" + integrity sha512-0VQY1K35DQET3dVYWpOaPFecqOT9dbuCfzjxoQyif1Wc574t3kOSkKevULddcR9znz1TcklCE7Ht6NIxjvTqLA== + +"@parcel/watcher-linux-arm-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.0.tgz#cd48e9bfde0cdbbd2ecd9accfc52967e22f849a4" + integrity sha512-6uHywSIzz8+vi2lAzFeltnYbdHsDm3iIB57d4g5oaB9vKwjb6N6dRIgZMujw4nm5r6v9/BQH0noq6DzHrqr2pA== + "@parcel/watcher-linux-arm64-glibc@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.3.0.tgz#f7bbbf2497d85fd11e4c9e9c26ace8f10ea9bcbc" integrity sha512-mQ0gBSQEiq1k/MMkgcSB0Ic47UORZBmWoAWlMrTW6nbAGoLZP+h7AtUM7H3oDu34TBFFvjy4JCGP43JlylkTQA== +"@parcel/watcher-linux-arm64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.0.tgz#7b81f6d5a442bb89fbabaf6c13573e94a46feb03" + integrity sha512-BfNjXwZKxBy4WibDb/LDCriWSKLz+jJRL3cM/DllnHH5QUyoiUNEp3GmL80ZqxeumoADfCCP19+qiYiC8gUBjA== + "@parcel/watcher-linux-arm64-musl@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.3.0.tgz#de131a9fcbe1fa0854e9cbf4c55bed3b35bcff43" integrity sha512-LXZAExpepJew0Gp8ZkJ+xDZaTQjLHv48h0p0Vw2VMFQ8A+RKrAvpFuPVCVwKJCr5SE+zvaG+Etg56qXvTDIedw== +"@parcel/watcher-linux-arm64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.0.tgz#dcb8ff01077cdf59a18d9e0a4dff7a0cfe5fd732" + integrity sha512-S1qARKOphxfiBEkwLUbHjCY9BWPdWnW9j7f7Hb2jPplu8UZ3nes7zpPOW9bkLbHRvWM0WDTsjdOTUgW0xLBN1Q== + "@parcel/watcher-linux-x64-glibc@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.3.0.tgz#193dd1c798003cdb5a1e59470ff26300f418a943" integrity sha512-P7Wo91lKSeSgMTtG7CnBS6WrA5otr1K7shhSjKHNePVmfBHDoAOHYRXgUmhiNfbcGk0uMCHVcdbfxtuiZCHVow== +"@parcel/watcher-linux-x64-glibc@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.0.tgz#2e254600fda4e32d83942384d1106e1eed84494d" + integrity sha512-d9AOkusyXARkFD66S6zlGXyzx5RvY+chTP9Jp0ypSTC9d4lzyRs9ovGf/80VCxjKddcUvnsGwCHWuF2EoPgWjw== + "@parcel/watcher-linux-x64-musl@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.3.0.tgz#6dbdb86d96e955ab0fe4a4b60734ec0025a689dd" integrity sha512-+kiRE1JIq8QdxzwoYY+wzBs9YbJ34guBweTK8nlzLKimn5EQ2b2FSC+tAOpq302BuIMjyuUGvBiUhEcLIGMQ5g== +"@parcel/watcher-linux-x64-musl@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.0.tgz#01fcea60fedbb3225af808d3f0a7b11229792eef" + integrity sha512-iqOC+GoTDoFyk/VYSFHwjHhYrk8bljW6zOhPuhi5t9ulqiYq1togGJB5e3PwYVFFfeVgc6pbz3JdQyDoBszVaA== + +"@parcel/watcher-wasm@^2.4.1": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-wasm/-/watcher-wasm-2.5.0.tgz#81fad1e10957f08a532eb4fc0d4c353cd8901a50" + integrity sha512-Z4ouuR8Pfggk1EYYbTaIoxc+Yv4o7cGQnH0Xy8+pQ+HbiW+ZnwhcD2LPf/prfq1nIWpAxjOkQ8uSMFWMtBLiVQ== + dependencies: + is-glob "^4.0.3" + micromatch "^4.0.5" + napi-wasm "^1.1.0" + "@parcel/watcher-win32-arm64@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.3.0.tgz#59da26a431da946e6c74fa6b0f30b120ea6650b6" integrity sha512-35gXCnaz1AqIXpG42evcoP2+sNL62gZTMZne3IackM+6QlfMcJLy3DrjuL6Iks7Czpd3j4xRBzez3ADCj1l7Aw== +"@parcel/watcher-win32-arm64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.0.tgz#87cdb16e0783e770197e52fb1dc027bb0c847154" + integrity sha512-twtft1d+JRNkM5YbmexfcH/N4znDtjgysFaV9zvZmmJezQsKpkfLYJ+JFV3uygugK6AtIM2oADPkB2AdhBrNig== + "@parcel/watcher-win32-ia32@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.3.0.tgz#3ee6a18b08929cd3b788e8cc9547fd9a540c013a" integrity sha512-FJS/IBQHhRpZ6PiCjFt1UAcPr0YmCLHRbTc00IBTrelEjlmmgIVLeOx4MSXzx2HFEy5Jo5YdhGpxCuqCyDJ5ow== +"@parcel/watcher-win32-ia32@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.0.tgz#778c39b56da33e045ba21c678c31a9f9d7c6b220" + integrity sha512-+rgpsNRKwo8A53elqbbHXdOMtY/tAtTzManTWShB5Kk54N8Q9mzNWV7tV+IbGueCbcj826MfWGU3mprWtuf1TA== + "@parcel/watcher-win32-x64@2.3.0": version "2.3.0" resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.3.0.tgz#14e7246289861acc589fd608de39fe5d8b4bb0a7" integrity sha512-dLx+0XRdMnVI62kU3wbXvbIRhLck4aE28bIGKbRGS7BJNt54IIj9+c/Dkqb+7DJEbHUZAX1bwaoM8PqVlHJmCA== +"@parcel/watcher-win32-x64@2.5.0": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.0.tgz#33873876d0bbc588aacce38e90d1d7480ce81cb7" + integrity sha512-lPrxve92zEHdgeff3aiu4gDOIt4u7sJYha6wbdEZDCDUhtjTsOMiaJzG5lMY4GkWH8p0fMmO2Ppq5G5XXG+DQw== + "@parcel/watcher@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" @@ -4362,6 +5423,30 @@ "@parcel/watcher-win32-ia32" "2.3.0" "@parcel/watcher-win32-x64" "2.3.0" +"@parcel/watcher@^2.4.1": + version "2.5.0" + resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.5.0.tgz#5c88818b12b8de4307a9d3e6dc3e28eba0dfbd10" + integrity sha512-i0GV1yJnm2n3Yq1qw6QrUrd/LI9bE8WEBOTtOkpCXHHdyN3TAGgqAK/DAT05z4fq2x04cARXt2pDmjWjL92iTQ== + dependencies: + detect-libc "^1.0.3" + is-glob "^4.0.3" + micromatch "^4.0.5" + node-addon-api "^7.0.0" + optionalDependencies: + "@parcel/watcher-android-arm64" "2.5.0" + "@parcel/watcher-darwin-arm64" "2.5.0" + "@parcel/watcher-darwin-x64" "2.5.0" + "@parcel/watcher-freebsd-x64" "2.5.0" + "@parcel/watcher-linux-arm-glibc" "2.5.0" + "@parcel/watcher-linux-arm-musl" "2.5.0" + "@parcel/watcher-linux-arm64-glibc" "2.5.0" + "@parcel/watcher-linux-arm64-musl" "2.5.0" + "@parcel/watcher-linux-x64-glibc" "2.5.0" + "@parcel/watcher-linux-x64-musl" "2.5.0" + "@parcel/watcher-win32-arm64" "2.5.0" + "@parcel/watcher-win32-ia32" "2.5.0" + "@parcel/watcher-win32-x64" "2.5.0" + "@peculiar/asn1-schema@^2.3.6": version "2.3.8" resolved "https://registry.yarnpkg.com/@peculiar/asn1-schema/-/asn1-schema-2.3.8.tgz#04b38832a814e25731232dd5be883460a156da3b" @@ -4668,6 +5753,150 @@ dependencies: antlr4ts "^0.5.0-alpha.4" +"@spruceid/siwe-parser@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@spruceid/siwe-parser/-/siwe-parser-2.1.2.tgz#3e13e7d3ac0bfdaf109a07342590eb21daee2fc3" + integrity sha512-d/r3S1LwJyMaRAKQ0awmo9whfXeE88Qt00vRj91q5uv5ATtWIQEGJ67Yr5eSZw5zp1/fZCXZYuEckt8lSkereQ== + dependencies: + "@noble/hashes" "^1.1.2" + apg-js "^4.3.0" + uri-js "^4.4.1" + valid-url "^1.0.9" + +"@stablelib/aead@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/aead/-/aead-1.0.1.tgz#c4b1106df9c23d1b867eb9b276d8f42d5fc4c0c3" + integrity sha512-q39ik6sxGHewqtO0nP4BuSe3db5G1fEJE8ukvngS2gLkBXyy6E7pLubhbYgnkDFv6V8cWaxcE4Xn0t6LWcJkyg== + +"@stablelib/binary@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/binary/-/binary-1.0.1.tgz#c5900b94368baf00f811da5bdb1610963dfddf7f" + integrity sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q== + dependencies: + "@stablelib/int" "^1.0.1" + +"@stablelib/bytes@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/bytes/-/bytes-1.0.1.tgz#0f4aa7b03df3080b878c7dea927d01f42d6a20d8" + integrity sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ== + +"@stablelib/chacha20poly1305@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha20poly1305/-/chacha20poly1305-1.0.1.tgz#de6b18e283a9cb9b7530d8767f99cde1fec4c2ee" + integrity sha512-MmViqnqHd1ymwjOQfghRKw2R/jMIGT3wySN7cthjXCBdO+qErNPUBnRzqNpnvIwg7JBCg3LdeCZZO4de/yEhVA== + dependencies: + "@stablelib/aead" "^1.0.1" + "@stablelib/binary" "^1.0.1" + "@stablelib/chacha" "^1.0.1" + "@stablelib/constant-time" "^1.0.1" + "@stablelib/poly1305" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/chacha@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/chacha/-/chacha-1.0.1.tgz#deccfac95083e30600c3f92803a3a1a4fa761371" + integrity sha512-Pmlrswzr0pBzDofdFuVe1q7KdsHKhhU24e8gkEwnTGOmlC7PADzLVxGdn2PoNVBBabdg0l/IfLKg6sHAbTQugg== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/constant-time@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/constant-time/-/constant-time-1.0.1.tgz#bde361465e1cf7b9753061b77e376b0ca4c77e35" + integrity sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg== + +"@stablelib/ed25519@^1.0.2": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@stablelib/ed25519/-/ed25519-1.0.3.tgz#f8fdeb6f77114897c887bb6a3138d659d3f35996" + integrity sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg== + dependencies: + "@stablelib/random" "^1.0.2" + "@stablelib/sha512" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/hash@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hash/-/hash-1.0.1.tgz#3c944403ff2239fad8ebb9015e33e98444058bc5" + integrity sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg== + +"@stablelib/hkdf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hkdf/-/hkdf-1.0.1.tgz#b4efd47fd56fb43c6a13e8775a54b354f028d98d" + integrity sha512-SBEHYE16ZXlHuaW5RcGk533YlBj4grMeg5TooN80W3NpcHRtLZLLXvKyX0qcRFxf+BGDobJLnwkvgEwHIDBR6g== + dependencies: + "@stablelib/hash" "^1.0.1" + "@stablelib/hmac" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/hmac@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/hmac/-/hmac-1.0.1.tgz#3d4c1b8cf194cb05d28155f0eed8a299620a07ec" + integrity sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA== + dependencies: + "@stablelib/constant-time" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/int@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/int/-/int-1.0.1.tgz#75928cc25d59d73d75ae361f02128588c15fd008" + integrity sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w== + +"@stablelib/keyagreement@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz#4612efb0a30989deb437cd352cee637ca41fc50f" + integrity sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg== + dependencies: + "@stablelib/bytes" "^1.0.1" + +"@stablelib/poly1305@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/poly1305/-/poly1305-1.0.1.tgz#93bfb836c9384685d33d70080718deae4ddef1dc" + integrity sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA== + dependencies: + "@stablelib/constant-time" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/random@^1.0.1", "@stablelib/random@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@stablelib/random/-/random-1.0.2.tgz#2dece393636489bf7e19c51229dd7900eddf742c" + integrity sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/sha256@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha256/-/sha256-1.0.1.tgz#77b6675b67f9b0ea081d2e31bda4866297a3ae4f" + integrity sha512-GIIH3e6KH+91FqGV42Kcj71Uefd/QEe7Dy42sBTeqppXV95ggCcxLTk39bEr+lZfJmp+ghsR07J++ORkRELsBQ== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/sha512@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/sha512/-/sha512-1.0.1.tgz#6da700c901c2c0ceacbd3ae122a38ac57c72145f" + integrity sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw== + dependencies: + "@stablelib/binary" "^1.0.1" + "@stablelib/hash" "^1.0.1" + "@stablelib/wipe" "^1.0.1" + +"@stablelib/wipe@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@stablelib/wipe/-/wipe-1.0.1.tgz#d21401f1d59ade56a62e139462a97f104ed19a36" + integrity sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg== + +"@stablelib/x25519@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@stablelib/x25519/-/x25519-1.0.3.tgz#13c8174f774ea9f3e5e42213cbf9fc68a3c7b7fd" + integrity sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw== + dependencies: + "@stablelib/keyagreement" "^1.0.1" + "@stablelib/random" "^1.0.2" + "@stablelib/wipe" "^1.0.1" + "@superfluid-finance/ethereum-contracts@1.1.1": version "1.1.1" resolved "https://registry.npmjs.org/@superfluid-finance/ethereum-contracts/-/ethereum-contracts-1.1.1.tgz" @@ -4883,10 +6112,13 @@ "@tufjs/canonical-json" "1.0.0" minimatch "^9.0.0" -"@typechain/ethers-v5@7.0.1": - version "7.0.1" - resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-7.0.1.tgz#f9ae60ae5bd9e8ea8a996f66244147e8e74034ae" - integrity sha512-mXEJ7LG0pOYO+MRPkHtbf30Ey9X2KAsU0wkeoVvjQIn7iAY6tB3k3s+82bbmJAUMyENbQ04RDOZit36CgSG6Gg== +"@typechain/ethers-v5@11.1.2": + version "11.1.2" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-11.1.2.tgz#82510c1744f37a2f906b9e0532ac18c0b74ffe69" + integrity sha512-ID6pqWkao54EuUQa0P5RgjvfA3MYqxUQKpbGKERbsjBW5Ra7EIXvbMlPp2pcP5IAdUkyMCFYsP2SN5q7mPdLDQ== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" "@typechain/ethers-v5@^2.0.0": version "2.0.0" @@ -4895,10 +6127,10 @@ dependencies: ethers "^5.0.2" -"@typechain/hardhat@2.1.2": - version "2.1.2" - resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-2.1.2.tgz#daf4c5ffaad21196fef71296968180acc616a9bf" - integrity sha512-8MbYzR/cXP/FqVQ9C6zHLS+5fjTAjox4qniiZIej+pV7WCe1kzw1VHee3NsFq3nZVN8ITC6pTgSth7iL++dZ9g== +"@typechain/hardhat@9.1.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== dependencies: fs-extra "^9.1.0" @@ -5314,6 +6546,11 @@ dependencies: "@types/node" "*" +"@types/trusted-types@^2.0.2": + version "2.0.7" + resolved "https://registry.yarnpkg.com/@types/trusted-types/-/trusted-types-2.0.7.tgz#baccb07a970b91707df3a3e8ba6896c57ead2d11" + integrity sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw== + "@types/ws@^8.0.0": version "8.5.10" resolved "https://registry.yarnpkg.com/@types/ws/-/ws-8.5.10.tgz#4acfb517970853fa6574a3a6886791d04a396787" @@ -5410,6 +6647,283 @@ "@typescript-eslint/types" "4.18.0" eslint-visitor-keys "^2.0.0" +"@walletconnect/core@2.9.2": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@walletconnect/core/-/core-2.9.2.tgz#c46734ca63771b28fd77606fd521930b7ecfc5e1" + integrity sha512-VARMPAx8sIgodeyngDHbealP3B621PQqjqKsByFUTOep8ZI1/R/20zU+cmq6j9RCrL+kLKZcrZqeVzs8Z7OlqQ== + dependencies: + "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/jsonrpc-provider" "1.0.13" + "@walletconnect/jsonrpc-types" "1.0.3" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/jsonrpc-ws-connection" "1.0.13" + "@walletconnect/keyvaluestorage" "^1.0.2" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/relay-api" "^1.0.9" + "@walletconnect/relay-auth" "^1.0.4" + "@walletconnect/safe-json" "^1.0.2" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.9.2" + "@walletconnect/utils" "2.9.2" + events "^3.3.0" + lodash.isequal "4.5.0" + uint8arrays "^3.1.0" + +"@walletconnect/environment@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/environment/-/environment-1.0.1.tgz#1d7f82f0009ab821a2ba5ad5e5a7b8ae3b214cd7" + integrity sha512-T426LLZtHj8e8rYnKfzsw1aG6+M0BT1ZxayMdv/p8yM0MU+eJDISqNY3/bccxRr4LrF9csq02Rhqt08Ibl0VRg== + dependencies: + tslib "1.14.1" + +"@walletconnect/ethereum-provider@2.9.2": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@walletconnect/ethereum-provider/-/ethereum-provider-2.9.2.tgz#fb3a6fca279bb4e98e75baa2fb9730545d41bb99" + integrity sha512-eO1dkhZffV1g7vpG19XUJTw09M/bwGUwwhy1mJ3AOPbOSbMPvwiCuRz2Kbtm1g9B0Jv15Dl+TvJ9vTgYF8zoZg== + dependencies: + "@walletconnect/jsonrpc-http-connection" "^1.0.7" + "@walletconnect/jsonrpc-provider" "^1.0.13" + "@walletconnect/jsonrpc-types" "^1.0.3" + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/sign-client" "2.9.2" + "@walletconnect/types" "2.9.2" + "@walletconnect/universal-provider" "2.9.2" + "@walletconnect/utils" "2.9.2" + events "^3.3.0" + +"@walletconnect/events@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/events/-/events-1.0.1.tgz#2b5f9c7202019e229d7ccae1369a9e86bda7816c" + integrity sha512-NPTqaoi0oPBVNuLv7qPaJazmGHs5JGyO8eEAk5VGKmJzDR7AHzD4k6ilox5kxk1iwiOnFopBOOMLs86Oa76HpQ== + dependencies: + keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" + +"@walletconnect/heartbeat@1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@walletconnect/heartbeat/-/heartbeat-1.2.1.tgz#afaa3a53232ae182d7c9cff41c1084472d8f32e9" + integrity sha512-yVzws616xsDLJxuG/28FqtZ5rzrTA4gUjdEMTbWB5Y8V1XHRmqq4efAxCw5ie7WjbXFSUyBHaWlMR+2/CpQC5Q== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/time" "^1.0.2" + tslib "1.14.1" + +"@walletconnect/jsonrpc-http-connection@^1.0.7": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-http-connection/-/jsonrpc-http-connection-1.0.8.tgz#2f4c3948f074960a3edd07909560f3be13e2c7ae" + integrity sha512-+B7cRuaxijLeFDJUq5hAzNyef3e3tBDIxyaCNmFtjwnod5AGis3RToNqzFU33vpVcxFhofkpE7Cx+5MYejbMGw== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.1" + cross-fetch "^3.1.4" + events "^3.3.0" + +"@walletconnect/jsonrpc-provider@1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.13.tgz#9a74da648d015e1fffc745f0c7d629457f53648b" + integrity sha512-K73EpThqHnSR26gOyNEL+acEex3P7VWZe6KE12ZwKzAt2H4e5gldZHbjsu2QR9cLeJ8AXuO7kEMOIcRv1QEc7g== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/safe-json" "^1.0.2" + tslib "1.14.1" + +"@walletconnect/jsonrpc-provider@^1.0.13": + version "1.0.14" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-provider/-/jsonrpc-provider-1.0.14.tgz#696f3e3b6d728b361f2e8b853cfc6afbdf2e4e3e" + integrity sha512-rtsNY1XqHvWj0EtITNeuf8PHMvlCLiS3EjQL+WOkxEOA4KPxsohFnBDeyPYiNm4ZvkQdLnece36opYidmtbmow== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.8" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + +"@walletconnect/jsonrpc-types@1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.3.tgz#65e3b77046f1a7fa8347ae02bc1b841abe6f290c" + integrity sha512-iIQ8hboBl3o5ufmJ8cuduGad0CQm3ZlsHtujv9Eu16xq89q+BG7Nh5VLxxUgmtpnrePgFkTwXirCTkwJH1v+Yw== + dependencies: + keyvaluestorage-interface "^1.0.0" + tslib "1.14.1" + +"@walletconnect/jsonrpc-types@^1.0.2", "@walletconnect/jsonrpc-types@^1.0.3": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-types/-/jsonrpc-types-1.0.4.tgz#ce1a667d79eadf2a2d9d002c152ceb68739c230c" + integrity sha512-P6679fG/M+wuWg9TY8mh6xFSdYnFyFjwFelxyISxMDrlbXokorEVXYOxiqEbrU3x1BmBoCAJJ+vtEaEoMlpCBQ== + dependencies: + events "^3.3.0" + keyvaluestorage-interface "^1.0.0" + +"@walletconnect/jsonrpc-utils@1.0.8", "@walletconnect/jsonrpc-utils@^1.0.6", "@walletconnect/jsonrpc-utils@^1.0.7", "@walletconnect/jsonrpc-utils@^1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-utils/-/jsonrpc-utils-1.0.8.tgz#82d0cc6a5d6ff0ecc277cb35f71402c91ad48d72" + integrity sha512-vdeb03bD8VzJUL6ZtzRYsFMq1eZQcM3EAzT0a3st59dyLfJ0wq+tKMpmGH7HlB7waD858UWgfIcudbPFsbzVdw== + dependencies: + "@walletconnect/environment" "^1.0.1" + "@walletconnect/jsonrpc-types" "^1.0.3" + tslib "1.14.1" + +"@walletconnect/jsonrpc-ws-connection@1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@walletconnect/jsonrpc-ws-connection/-/jsonrpc-ws-connection-1.0.13.tgz#23b0cdd899801bfbb44a6556936ec2b93ef2adf4" + integrity sha512-mfOM7uFH4lGtQxG+XklYuFBj6dwVvseTt5/ahOkkmpcAEgz2umuzu7fTR+h5EmjQBdrmYyEBOWADbeaFNxdySg== + dependencies: + "@walletconnect/jsonrpc-utils" "^1.0.6" + "@walletconnect/safe-json" "^1.0.2" + events "^3.3.0" + tslib "1.14.1" + ws "^7.5.1" + +"@walletconnect/keyvaluestorage@^1.0.2": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@walletconnect/keyvaluestorage/-/keyvaluestorage-1.1.1.tgz#dd2caddabfbaf80f6b8993a0704d8b83115a1842" + integrity sha512-V7ZQq2+mSxAq7MrRqDxanTzu2RcElfK1PfNYiaVnJgJ7Q7G7hTVwF8voIBx92qsRyGHZihrwNPHuZd1aKkd0rA== + dependencies: + "@walletconnect/safe-json" "^1.0.1" + idb-keyval "^6.2.1" + unstorage "^1.9.0" + +"@walletconnect/logger@^2.0.1": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@walletconnect/logger/-/logger-2.1.2.tgz#813c9af61b96323a99f16c10089bfeb525e2a272" + integrity sha512-aAb28I3S6pYXZHQm5ESB+V6rDqIYfsnHaQyzFbwUUBFY4H0OXx/YtTl8lvhUNhMMfb9UxbwEBS253TlXUYJWSw== + dependencies: + "@walletconnect/safe-json" "^1.0.2" + pino "7.11.0" + +"@walletconnect/modal-core@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@walletconnect/modal-core/-/modal-core-2.6.1.tgz#bc76055d0b644a2d4b98024324825c108a700905" + integrity sha512-f2hYlJ5pwzGvjyaZ6BoGR5uiMgXzWXt6w6ktt1N8lmY6PiYp8whZgqx2hTxVWwVlsGnaIfh6UHp1hGnANx0eTQ== + dependencies: + valtio "1.11.0" + +"@walletconnect/modal-ui@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@walletconnect/modal-ui/-/modal-ui-2.6.1.tgz#200c54c8dfe3c71321abb2724e18bb357dfd6371" + integrity sha512-RFUOwDAMijSK8B7W3+KoLKaa1l+KEUG0LCrtHqaB0H0cLnhEGdLR+kdTdygw+W8+yYZbkM5tXBm7MlFbcuyitA== + dependencies: + "@walletconnect/modal-core" "2.6.1" + lit "2.7.6" + motion "10.16.2" + qrcode "1.5.3" + +"@walletconnect/modal@2.6.1": + version "2.6.1" + resolved "https://registry.yarnpkg.com/@walletconnect/modal/-/modal-2.6.1.tgz#066fdbfcff83b58c8a9da66ab4af0eb93e3626de" + integrity sha512-G84tSzdPKAFk1zimgV7JzIUFT5olZUVtI3GcOk77OeLYjlMfnDT23RVRHm5EyCrjkptnvpD0wQScXePOFd2Xcw== + dependencies: + "@walletconnect/modal-core" "2.6.1" + "@walletconnect/modal-ui" "2.6.1" + +"@walletconnect/relay-api@^1.0.9": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-api/-/relay-api-1.0.11.tgz#80ab7ef2e83c6c173be1a59756f95e515fb63224" + integrity sha512-tLPErkze/HmC9aCmdZOhtVmYZq1wKfWTJtygQHoWtgg722Jd4homo54Cs4ak2RUFUZIGO2RsOpIcWipaua5D5Q== + dependencies: + "@walletconnect/jsonrpc-types" "^1.0.2" + +"@walletconnect/relay-auth@^1.0.4": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@walletconnect/relay-auth/-/relay-auth-1.0.4.tgz#0b5c55c9aa3b0ef61f526ce679f3ff8a5c4c2c7c" + integrity sha512-kKJcS6+WxYq5kshpPaxGHdwf5y98ZwbfuS4EE/NkQzqrDFm5Cj+dP8LofzWvjrrLkZq7Afy7WrQMXdLy8Sx7HQ== + dependencies: + "@stablelib/ed25519" "^1.0.2" + "@stablelib/random" "^1.0.1" + "@walletconnect/safe-json" "^1.0.1" + "@walletconnect/time" "^1.0.2" + tslib "1.14.1" + uint8arrays "^3.0.0" + +"@walletconnect/safe-json@^1.0.1", "@walletconnect/safe-json@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/safe-json/-/safe-json-1.0.2.tgz#7237e5ca48046e4476154e503c6d3c914126fa77" + integrity sha512-Ogb7I27kZ3LPC3ibn8ldyUr5544t3/STow9+lzz7Sfo808YD7SBWk7SAsdBFlYgP2zDRy2hS3sKRcuSRM0OTmA== + dependencies: + tslib "1.14.1" + +"@walletconnect/sign-client@2.9.2": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@walletconnect/sign-client/-/sign-client-2.9.2.tgz#ff4c81c082c2078878367d07f24bcb20b1f7ab9e" + integrity sha512-anRwnXKlR08lYllFMEarS01hp1gr6Q9XUgvacr749hoaC/AwGVlxYFdM8+MyYr3ozlA+2i599kjbK/mAebqdXg== + dependencies: + "@walletconnect/core" "2.9.2" + "@walletconnect/events" "^1.0.1" + "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/jsonrpc-utils" "1.0.8" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.9.2" + "@walletconnect/utils" "2.9.2" + events "^3.3.0" + +"@walletconnect/time@^1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@walletconnect/time/-/time-1.0.2.tgz#6c5888b835750ecb4299d28eecc5e72c6d336523" + integrity sha512-uzdd9woDcJ1AaBZRhqy5rNC9laqWGErfc4dxA9a87mPdKOgWMD85mcFo9dIYIts/Jwocfwn07EC6EzclKubk/g== + dependencies: + tslib "1.14.1" + +"@walletconnect/types@2.9.2": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@walletconnect/types/-/types-2.9.2.tgz#d5fd5a61dc0f41cbdca59d1885b85207ac7bf8c5" + integrity sha512-7Rdn30amnJEEal4hk83cdwHUuxI1SWQ+K7fFFHBMqkuHLGi3tpMY6kpyfDxnUScYEZXqgRps4Jo5qQgnRqVM7A== + dependencies: + "@walletconnect/events" "^1.0.1" + "@walletconnect/heartbeat" "1.2.1" + "@walletconnect/jsonrpc-types" "1.0.3" + "@walletconnect/keyvaluestorage" "^1.0.2" + "@walletconnect/logger" "^2.0.1" + events "^3.3.0" + +"@walletconnect/universal-provider@2.9.2": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@walletconnect/universal-provider/-/universal-provider-2.9.2.tgz#40e54e98bc48b1f2f5f77eb5b7f05462093a8506" + integrity sha512-JmaolkO8D31UdRaQCHwlr8uIFUI5BYhBzqYFt54Mc6gbIa1tijGOmdyr6YhhFO70LPmS6gHIjljwOuEllmlrxw== + dependencies: + "@walletconnect/jsonrpc-http-connection" "^1.0.7" + "@walletconnect/jsonrpc-provider" "1.0.13" + "@walletconnect/jsonrpc-types" "^1.0.2" + "@walletconnect/jsonrpc-utils" "^1.0.7" + "@walletconnect/logger" "^2.0.1" + "@walletconnect/sign-client" "2.9.2" + "@walletconnect/types" "2.9.2" + "@walletconnect/utils" "2.9.2" + events "^3.3.0" + +"@walletconnect/utils@2.9.2": + version "2.9.2" + resolved "https://registry.yarnpkg.com/@walletconnect/utils/-/utils-2.9.2.tgz#035bdb859ee81a4bcc6420f56114cc5ec3e30afb" + integrity sha512-D44hwXET/8JhhIjqljY6qxSu7xXnlPrf63UN/Qfl98vDjWlYVcDl2+JIQRxD9GPastw0S8XZXdRq59XDXLuZBg== + dependencies: + "@stablelib/chacha20poly1305" "1.0.1" + "@stablelib/hkdf" "1.0.1" + "@stablelib/random" "^1.0.2" + "@stablelib/sha256" "1.0.1" + "@stablelib/x25519" "^1.0.3" + "@walletconnect/relay-api" "^1.0.9" + "@walletconnect/safe-json" "^1.0.2" + "@walletconnect/time" "^1.0.2" + "@walletconnect/types" "2.9.2" + "@walletconnect/window-getters" "^1.0.1" + "@walletconnect/window-metadata" "^1.0.1" + detect-browser "5.3.0" + query-string "7.1.3" + uint8arrays "^3.1.0" + +"@walletconnect/window-getters@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-getters/-/window-getters-1.0.1.tgz#f36d1c72558a7f6b87ecc4451fc8bd44f63cbbdc" + integrity sha512-vHp+HqzGxORPAN8gY03qnbTMnhqIwjeRJNOMOAzePRg4xVEEE2WvYsI9G2NMjOknA8hnuYbU3/hwLcKbjhc8+Q== + dependencies: + tslib "1.14.1" + +"@walletconnect/window-metadata@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@walletconnect/window-metadata/-/window-metadata-1.0.1.tgz#2124f75447b7e989e4e4e1581d55d25bc75f7be5" + integrity sha512-9koTqyGrM2cqFRW517BPY/iEtUDx2r1+Pwwu5m7sJ7ka79wi3EyqhqcICk/yDmv6jAS1rjKgTKXlEhanYjijcA== + dependencies: + "@walletconnect/window-getters" "^1.0.1" + tslib "1.14.1" + "@webassemblyjs/ast@1.12.1", "@webassemblyjs/ast@^1.12.1": version "1.12.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.12.1.tgz#bb16a0e8b1914f979f45864c23819cc3e3f0d4bb" @@ -5733,6 +7247,11 @@ acorn@^8.0.4, acorn@^8.4.1, acorn@^8.7.1, acorn@^8.8.2: resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5" integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw== +acorn@^8.12.1: + version "8.14.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" + integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== + add-stream@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" @@ -5842,6 +7361,16 @@ ajv@^8.0.1: require-from-string "^2.0.2" uri-js "^4.2.2" +ajv@^8.12.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + amd-loader@0.0.8: version "0.0.8" resolved "https://registry.npmjs.org/amd-loader/-/amd-loader-0.0.8.tgz" @@ -5981,7 +7510,7 @@ anymatch@^3.0.3, anymatch@~3.1.1: normalize-path "^3.0.0" picomatch "^2.0.4" -anymatch@~3.1.2: +anymatch@^3.1.3, anymatch@~3.1.2: version "3.1.3" resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== @@ -6001,6 +7530,11 @@ apache-md5@^1.0.6: resolved "https://registry.npmjs.org/apache-md5/-/apache-md5-1.1.5.tgz" integrity sha512-sbLEIMQrkV7RkIruqTPXxeCMkAAycv4yzTkBzRgOR1BrR5UB7qZtupqxkersTJSf0HZ3sbaNRrNV80TnnM7cUw== +apg-js@^4.3.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/apg-js/-/apg-js-4.4.0.tgz#09dcecab0731fbde233b9f2352fdd2d07e56b2cf" + integrity sha512-fefmXFknJmtgtNEXfPwZKYkMFX4Fyeyz+fNF6JWp87biGOPslJbCBVU158zvKRZfHBKnJDy8CMM40oLFGkXT8Q== + "aproba@^1.0.3 || ^2.0.0", aproba@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz" @@ -6072,6 +7606,16 @@ array-back@^2.0.0: dependencies: typical "^2.6.1" +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + array-buffer-byte-length@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" @@ -6367,6 +7911,11 @@ atob@^2.1.2: resolved "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz" integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + auto-bind@^4.0.0, auto-bind@~4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/auto-bind/-/auto-bind-4.0.0.tgz" @@ -7067,6 +8616,11 @@ base-x@^3.0.9: dependencies: safe-buffer "^5.0.1" +base-x@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-4.0.0.tgz#d0e3b7753450c73f8ad2389b5c018a4af7b2224a" + integrity sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw== + base64-js@0.0.8: version "0.0.8" resolved "https://registry.npmjs.org/base64-js/-/base64-js-0.0.8.tgz" @@ -7114,11 +8668,16 @@ bcryptjs@^2.3.0: resolved "https://registry.npmjs.org/bcryptjs/-/bcryptjs-2.4.3.tgz" integrity sha1-mrVie5PmBiH/fNrF2pczAn3x0Ms= -bech32@1.1.4, bech32@^1.1.3: +bech32@1.1.4, bech32@^1.1.3, bech32@^1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" @@ -7186,6 +8745,11 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" +bip174@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bip174/-/bip174-2.1.1.tgz#ef3e968cf76de234a546962bcf572cc150982f9f" + integrity sha512-mdFV5+/v0XyNYXjBS6CQPLo9ekCx4gtKZFnJm5PMto7Fs9hTTDpkkzOB7/FtluRI6JbUUAu+snTYfJRgHLZbZQ== + bip39@2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/bip39/-/bip39-2.5.0.tgz#51cbd5179460504a63ea3c000db3f787ca051235" @@ -7197,6 +8761,18 @@ bip39@2.5.0: safe-buffer "^5.0.1" unorm "^1.3.3" +bitcoinjs-lib@^6.1.0: + version "6.1.6" + resolved "https://registry.yarnpkg.com/bitcoinjs-lib/-/bitcoinjs-lib-6.1.6.tgz#f57c17c82511f860f11946d784c18da39f8618a8" + integrity sha512-Fk8+Vc+e2rMoDU5gXkW9tD+313rhkm5h6N9HfZxXvYU9LedttVvmXKTgd9k5rsQJjkSfsv6XRM8uhJv94SrvcA== + dependencies: + "@noble/hashes" "^1.2.0" + bech32 "^2.0.0" + bip174 "^2.1.1" + bs58check "^3.0.1" + typeforce "^1.11.3" + varuint-bitcoin "^1.1.2" + bl@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.3.tgz#1e8dd80142eac80d7158c9dccc047fb620e035e7" @@ -7559,6 +9135,13 @@ bs58@^4.0.0, bs58@^4.0.1: dependencies: base-x "^3.0.2" +bs58@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-5.0.0.tgz#865575b4d13c09ea2a84622df6c8cbeb54ffc279" + integrity sha512-r+ihvQJvahgYT50JD05dyJNKlmmSlMoOGwn1lCcEzanPglg7TxYjioQUYehQ9mAR/+hOSd2jRc/Z2y5UxBymvQ== + dependencies: + base-x "^4.0.0" + bs58check@^2.1.2: version "2.1.2" resolved "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz" @@ -7568,6 +9151,14 @@ bs58check@^2.1.2: create-hash "^1.1.0" safe-buffer "^5.1.2" +bs58check@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-3.0.1.tgz#2094d13720a28593de1cba1d8c4e48602fdd841c" + integrity sha512-hjuuJvoWEybo7Hn/0xOrczQKKEKD63WguEjlhLExYs2wUBcebDC1jDNK17eEAD2lYfw82d5ASC1d7K3SWszjaQ== + dependencies: + "@noble/hashes" "^1.2.0" + bs58 "^5.0.0" + bser@2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz" @@ -7974,6 +9565,11 @@ caniuse-lite@^1.0.30001646: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001663.tgz#1529a723505e429fdfd49532e9fc42273ba7fed7" integrity sha512-o9C3X27GLKbLeTYZ6HBOLU1tsAcBZsLis28wrVzddShCS16RujjHp9GDHKZqrB3meE0YjhawvMFsGb/igqiPzA== +canonicalize@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/canonicalize/-/canonicalize-2.0.0.tgz#32be2cef4446d67fd5348027a384cae28f17226a" + integrity sha512-ulDEYPv7asdKvqahuAY35c1selLdzDwHqugK92hfkzvlDCwXRRelDkR+Er33md/PtnpqHemgkuDPanZ4fiYZ8w== + capital-case@^1.0.4: version "1.0.4" resolved "https://registry.npmjs.org/capital-case/-/capital-case-1.0.4.tgz" @@ -8267,6 +9863,21 @@ chokidar@^3.1.1, chokidar@^3.4.0: optionalDependencies: fsevents "~2.3.1" +chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + chokidar@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.1.tgz#4a6dff66798fb0f72a94f616abbd7e1a19f31d41" @@ -8320,6 +9931,13 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" +citty@^0.1.5, citty@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/citty/-/citty-0.1.6.tgz#0f7904da1ed4625e1a9ea7e0fa780981aab7c5e4" + integrity sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ== + dependencies: + consola "^3.2.3" + cjs-module-lexer@^1.0.0: version "1.2.3" resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz#6c370ab19f8a3394e318fe682686ec0ac684d107" @@ -8394,6 +10012,15 @@ cli-width@^3.0.0: resolved "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz" integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== +clipboardy@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/clipboardy/-/clipboardy-4.0.0.tgz#e73ced93a76d19dd379ebf1f297565426dffdca1" + integrity sha512-5mOlNS0mhX0707P2I0aZ2V/cmHUEO/fL7VFLqszkhUsxt7RwnmrInf/eEQKlf5GzvYeHIjT+Ov1HRfNmymlG0w== + dependencies: + execa "^8.0.1" + is-wsl "^3.1.0" + is64bit "^2.0.0" + cliui@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz" @@ -8597,6 +10224,26 @@ command-line-args@^4.0.7: find-replace "^1.0.3" typical "^2.6.1" +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + commander@2.11.0: version "2.11.0" resolved "https://registry.npmjs.org/commander/-/commander-2.11.0.tgz" @@ -8690,6 +10337,11 @@ concat-stream@^2.0.0: readable-stream "^3.0.2" typedarray "^0.0.6" +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + config-chain@1.1.12: version "1.1.12" resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" @@ -8708,6 +10360,11 @@ connect@^3.6.6: parseurl "~1.3.3" utils-merge "1.0.1" +consola@^3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.2.3.tgz#0741857aa88cfa0d6fd53f1cff0375136e98502f" + integrity sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ== + console-browserify@^1.1.0: version "1.2.0" resolved "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz" @@ -8865,6 +10522,11 @@ convert-source-map@~1.1.0: resolved "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz" integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= +cookie-es@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-es/-/cookie-es-1.2.2.tgz#18ceef9eb513cac1cb6c14bcbf8bdb2679b34821" + integrity sha512-+W7VmiVINB+ywl1HGXJXmrqkOhpKrIiVZV6tQuV54ZyQC7MMuBt81Vc336GMLoHBq5hV/F9eXgt5Mnx0Rha5Fg== + cookie-signature@1.0.6: version "1.0.6" resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz" @@ -9039,6 +10701,13 @@ cross-env@7.0.2: dependencies: cross-spawn "^7.0.1" +cross-fetch@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.4.tgz#9723f3a3a247bf8b89039f3a380a9244e8fa2f39" + integrity sha512-1eAtFWdIubi6T4XPy6ei9iUFoKpUkIF971QLN8lIvvvwueI65+Nw5haMNKUwfJxabqlIIDODJKGrQ66gxC0PbQ== + dependencies: + node-fetch "2.6.1" + cross-fetch@^2.1.0, cross-fetch@^2.1.1: version "2.2.6" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-2.2.6.tgz#2ef0bb39a24ac034787965c457368a28730e220a" @@ -9047,7 +10716,7 @@ cross-fetch@^2.1.0, cross-fetch@^2.1.1: node-fetch "^2.6.7" whatwg-fetch "^2.0.4" -cross-fetch@^3.0.4: +cross-fetch@^3.0.4, cross-fetch@^3.1.4: version "3.1.8" resolved "https://registry.yarnpkg.com/cross-fetch/-/cross-fetch-3.1.8.tgz#0327eba65fd68a7d119f8fb2bf9334a1a7956f82" integrity sha512-cvA+JwZoU0Xq+h6WkMvAUqPEYy92Obet6UdKLfW60qn99ftItKjB5T+BkyWOFWe2pUyfQ+IJHmpOTznqk1M6Kg== @@ -9104,6 +10773,13 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" +"crossws@>=0.2.0 <0.4.0": + version "0.3.1" + resolved "https://registry.yarnpkg.com/crossws/-/crossws-0.3.1.tgz#7980e0b6688fe23286661c3ab8deeccbaa05ca86" + integrity sha512-HsZgeVYaG+b5zA+9PbIPGq4+J/CJynJuearykPsXx4V/eMhyQ5EDVg3Ak2FBZtVXCiOLu/U7IiwDHTr9MA+IKw== + dependencies: + uncrypto "^0.1.3" + crypto-addr-codec@^0.1.7: version "0.1.7" resolved "https://registry.npmjs.org/crypto-addr-codec/-/crypto-addr-codec-0.1.7.tgz" @@ -9250,6 +10926,11 @@ dataloader@^2.2.2: resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-2.2.2.tgz#216dc509b5abe39d43a9b9d97e6e5e473dfbe3e0" integrity sha512-8YnDaaf7N3k/q5HnTJVuzSyLETjoZjVmHc4AeKAzOvKHEFQKcn64OKBfzHYtE9zGjctNM7V9I0MfnUVLpi7M5g== +date-and-time@^2.4.1: + version "2.4.3" + resolved "https://registry.yarnpkg.com/date-and-time/-/date-and-time-2.4.3.tgz#116963998a8cecd478955ae053f31a6747a988df" + integrity sha512-xkS/imTmsyEdpp9ie5oV5UWolg3XkYWNySbT2W4ESWr6v4V8YrsHbhpk9fIeQcr0NFTnYbQJLXlgU1zrLItysA== + dateformat@^3.0.0: version "3.0.3" resolved "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz" @@ -9328,7 +11009,7 @@ decamelize@^4.0.0: resolved "https://registry.npmjs.org/decamelize/-/decamelize-4.0.0.tgz" integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== -decode-uri-component@^0.2.0: +decode-uri-component@^0.2.0, decode-uri-component@^0.2.2: version "0.2.2" resolved "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz" integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== @@ -9388,6 +11069,11 @@ deep-equal@~1.1.1: object-keys "^1.1.1" regexp.prototype.flags "^1.5.1" +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.3" resolved "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz" @@ -9501,6 +11187,11 @@ defined@~1.0.1: resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.1.tgz#c0b9db27bfaffd95d6f61399419b893df0f91ebf" integrity sha512-hsBd2qSVCRE+5PmNdHt1uzyrFu5d3RwmFDKzyNZMFq/EwDNJF7Ee5+D5oEKF0hU6LhtoUF1macFvOe4AskQC1Q== +defu@^6.1.4: + version "6.1.4" + resolved "https://registry.yarnpkg.com/defu/-/defu-6.1.4.tgz#4e0c9cf9ff68fe5f3d7f2765cc1a012dfdcb0479" + integrity sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg== + del@^6.0.0: version "6.1.1" resolved "https://registry.yarnpkg.com/del/-/del-6.1.1.tgz#3b70314f1ec0aa325c6b14eb36b95786671edb7a" @@ -9563,6 +11254,11 @@ des.js@^1.0.0: inherits "^2.0.1" minimalistic-assert "^1.0.0" +destr@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/destr/-/destr-2.0.3.tgz#7f9e97cb3d16dbdca7be52aca1644ce402cfe449" + integrity sha512-2N3BOUU4gYMpTP24s5rF5iP7BDr7uNTCs4ozw3kf/eKfvWSIu93GEBi5m427YoyJoeOzQ5smuu4nNAPGb8idSQ== + destroy@1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" @@ -9573,6 +11269,11 @@ destroy@~1.0.4: resolved "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detect-browser@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" + integrity sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w== + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz" @@ -9653,6 +11354,11 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +dijkstrajs@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/dijkstrajs/-/dijkstrajs-1.0.3.tgz#4c8dbdea1f0f6478bff94d9c49c784d623e4fc23" + integrity sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA== + dir-glob@2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-2.0.0.tgz" @@ -9876,6 +11582,16 @@ duplexer@^0.1.1, duplexer@^0.1.2, duplexer@~0.1.1: resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz" integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== +duplexify@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.2" + duplicate-package-checker-webpack-plugin@3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/duplicate-package-checker-webpack-plugin/-/duplicate-package-checker-webpack-plugin-3.0.0.tgz" @@ -9997,6 +11713,11 @@ emojis-list@^3.0.0: resolved "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz" @@ -11125,7 +12846,7 @@ ethereumjs-wallet@0.6.5: utf8 "^3.0.0" uuid "^3.3.2" -ethers@5.7.2, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2, ethers@^5.7.0: +ethers@5.7.2, ethers@^5.0.1, ethers@^5.0.2, ethers@^5.5.2, ethers@^5.7.0, ethers@^5.7.1: version "5.7.2" resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.7.2.tgz#3a7deeabbb8c030d4126b24f84e525466145872e" integrity sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg== @@ -11295,7 +13016,7 @@ eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0, events@^3.2.0: +events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -11379,6 +13100,21 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" +execa@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c" + integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^8.0.1" + human-signals "^5.0.0" + is-stream "^3.0.0" + merge-stream "^2.0.0" + npm-run-path "^5.1.0" + onetime "^6.0.0" + signal-exit "^4.1.0" + strip-final-newline "^3.0.0" + exit-on-epipe@~1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/exit-on-epipe/-/exit-on-epipe-1.0.1.tgz" @@ -11592,7 +13328,7 @@ fast-deep-equal@^1.0.0: resolved "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz" integrity sha1-wFNHeBfIa1HaqFPIHgWbcz0CNhQ= -fast-deep-equal@^3.1.1: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: 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== @@ -11665,11 +13401,21 @@ fast-querystring@^1.1.1: dependencies: fast-decode-uri-component "^1.0.1" +fast-redact@^3.0.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== + fast-safe-stringify@^2.0.7: version "2.0.7" resolved "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz" integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== +fast-uri@^3.0.1: + version "3.0.3" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.3.tgz#892a1c91802d5d7860de728f18608a0573142241" + integrity sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw== + fast-url-parser@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/fast-url-parser/-/fast-url-parser-1.1.3.tgz#f4af3ea9f34d8a271cf58ad2b3759f431f0b318d" @@ -11806,6 +13552,11 @@ fill-range@^7.0.1: dependencies: to-regex-range "^5.0.1" +filter-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/filter-obj/-/filter-obj-1.1.0.tgz#9b311112bc6c6127a16e016c6c5d7f19e0805c5b" + integrity sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ== + finalhandler@1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz" @@ -11849,6 +13600,13 @@ find-replace@^1.0.3: array-back "^1.0.4" test-value "^2.1.0" +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + find-root@^1.0.0: version "1.1.0" resolved "https://registry.npmjs.org/find-root/-/find-root-1.1.0.tgz" @@ -12421,6 +14179,11 @@ get-pkg-repo@^4.0.0: through2 "^2.0.0" yargs "^16.2.0" +get-port-please@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/get-port-please/-/get-port-please-3.1.2.tgz#502795e56217128e4183025c89a48c71652f4e49" + integrity sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ== + get-port@5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/get-port/-/get-port-5.1.1.tgz#0469ed07563479de6efb986baf053dcd7d4e3193" @@ -12460,6 +14223,11 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2" + integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA== + get-symbol-description@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" @@ -12602,10 +14370,10 @@ glob@7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@7.2.0, glob@^7.1.0: - version "7.2.0" - resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" - integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== +glob@7.1.7, glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: + version "7.1.7" + resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -12614,21 +14382,10 @@ glob@7.2.0, glob@^7.1.0: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^10.2.2: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: - version "7.1.7" - resolved "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz" - integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== +glob@7.2.0, glob@^7.1.0: + version "7.2.0" + resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz" + integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q== dependencies: fs.realpath "^1.0.0" inflight "^1.0.4" @@ -12637,17 +14394,16 @@ glob@^7.0.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.1.6, glob@~7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== +glob@^10.2.2: + version "10.3.10" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" + integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" + foreground-child "^3.1.0" + jackspeak "^2.3.5" + minimatch "^9.0.1" + minipass "^5.0.0 || ^6.0.2 || ^7.0.0" + path-scurry "^1.10.1" glob@^8.0.1: version "8.1.0" @@ -12670,6 +14426,18 @@ glob@^9.2.0: minipass "^4.2.4" path-scurry "^1.6.1" +glob@~7.2.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + global-modules@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz" @@ -12937,6 +14705,22 @@ gzip-size@^6.0.0: dependencies: duplexer "^0.1.2" +h3@^1.12.0, h3@^1.13.0: + version "1.13.0" + resolved "https://registry.yarnpkg.com/h3/-/h3-1.13.0.tgz#b5347a8936529794b6754b440e26c0ab8a60dceb" + integrity sha512-vFEAu/yf8UMUcB4s43OaDaigcqpQd14yanmOsn+NcRX3/guSKncyE2rOYhq8RIchgJrPSs/QiIddnTTR1ddiAg== + dependencies: + cookie-es "^1.2.2" + crossws ">=0.2.0 <0.4.0" + defu "^6.1.4" + destr "^2.0.3" + iron-webcrypto "^1.2.1" + ohash "^1.1.4" + radix3 "^1.1.2" + ufo "^1.5.4" + uncrypto "^0.1.3" + unenv "^1.10.0" + handlebars@^4.3.3: version "4.7.7" resolved "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz" @@ -13244,6 +15028,11 @@ heap@0.2.6: resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.6.tgz#087e1f10b046932fc8594dd9e6d378afc9d1e5ac" integrity sha512-MzzWcnfB1e4EG2vHi3dXHoBupmuXNZzx6pY6HldVS55JKKBoq3xOyzfSaZRkJp37HIhEYC78knabHff3zc4dQQ== +hey-listen@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/hey-listen/-/hey-listen-1.0.8.tgz#8e59561ff724908de1aa924ed6ecc84a56a9aa68" + integrity sha512-COpmrF2NOg4TBWUJ5UVyaCU2A88wEMkUPK4hNqyCkqHbxT92BbvfjoSozkAIIm6XhicGlJHhFdullInrdhwU8Q== + highlight.js@^10.4.1: version "10.7.3" resolved "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz" @@ -13451,7 +15240,7 @@ http-proxy-agent@^7.0.0: agent-base "^7.1.0" debug "^4.3.4" -http-shutdown@1.2.2: +http-shutdown@1.2.2, http-shutdown@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/http-shutdown/-/http-shutdown-1.2.2.tgz" integrity sha512-S9wWkJ/VSY9/k4qcjG318bqJNruzE4HySUhFYknwmu6LBP97KLLfwNf+n4V1BHurvFNkSKLFnK/RsuUnRTf9Vw== @@ -13509,6 +15298,11 @@ human-signals@^2.1.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== +human-signals@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28" + integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz" @@ -13542,6 +15336,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +idb-keyval@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/idb-keyval/-/idb-keyval-6.2.1.tgz#94516d625346d16f56f3b33855da11bfded2db33" + integrity sha512-8Sb3veuYCyrZL+VBt9LJfZjLUPWVvqn8tG28VqYNFCo43KHcKuq+b4EiXGeuaLAQWL2YmyDgMp2aSpH9JHsEQg== + idna-uts46-hx@^2.3.1: version "2.3.1" resolved "https://registry.npmjs.org/idna-uts46-hx/-/idna-uts46-hx-2.3.1.tgz" @@ -13593,6 +15392,11 @@ immediate@^3.2.3: resolved "https://registry.npmjs.org/immediate/-/immediate-3.3.0.tgz" integrity sha512-HR7EVodfFUdQCTIeySw+WDRFJlPcLOJbXfwwZ7Oom6tjsvZ3bOkCDJHehQC3nxJrv7+f9XecwazynjU8e4Vw3Q== +immediate@~3.0.5: + version "3.0.6" + resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" + integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== + immediate@~3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/immediate/-/immediate-3.2.3.tgz" @@ -13874,6 +15678,11 @@ ipaddr.js@1.9.1: resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== +iron-webcrypto@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/iron-webcrypto/-/iron-webcrypto-1.2.1.tgz#aa60ff2aa10550630f4c0b11fd2442becdb35a6f" + integrity sha512-feOM6FaSr6rEABp/eDfVseKyTMDt+KGpeB35SkVn9Tyn0CqvVsY3EwI0v5i8nMHyJnzCIQf7nsy3p41TPkJZhg== + irregular-plurals@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/irregular-plurals/-/irregular-plurals-3.2.0.tgz" @@ -14073,6 +15882,11 @@ is-docker@^2.1.1: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== + is-dotfile@^1.0.0: version "1.0.3" resolved "https://registry.npmjs.org/is-dotfile/-/is-dotfile-1.0.3.tgz" @@ -14182,6 +15996,13 @@ is-hex-prefixed@1.0.0: resolved "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz" integrity sha1-fY035q135dEnFIkTxXPggtd39VQ= +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-interactive@^1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz" @@ -14402,6 +16223,11 @@ is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: resolved "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= +is-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" + integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== + is-string@^1.0.5: version "1.0.5" resolved "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz" @@ -14518,6 +16344,20 @@ is-wsl@^2.1.1, is-wsl@^2.2.0: dependencies: is-docker "^2.0.0" +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" + +is64bit@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is64bit/-/is64bit-2.0.0.tgz#198c627cbcb198bbec402251f88e5e1a51236c07" + integrity sha512-jv+8jaWCl0g2lSBkNSVXdzfBA0npK1HGC2KtWM9FumFRoGS94g3NbCCLVnCYHLjp4GrW2KZeeSTMo5ddtznmGw== + dependencies: + system-architecture "^0.1.0" + isarray@0.0.1: version "0.0.1" resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz" @@ -15046,6 +16886,16 @@ jiti@^1.17.1, jiti@^1.18.2: resolved "https://registry.yarnpkg.com/jiti/-/jiti-1.21.0.tgz#7c97f8fe045724e136a397f7340475244156105d" integrity sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q== +jiti@^2.1.2: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jiti/-/jiti-2.4.0.tgz#393d595fb6031a11d11171b5e4fc0b989ba3e053" + integrity sha512-H5UpaUI+aHOqZXlYOaFP/8AzKsg+guWu+Pr3Y8i7+Y3zr1aXAvCvTAQ1RxSc6oVD8R8c7brgNtTVP91E7upH/g== + +jose@^4.14.4: + version "4.15.9" + resolved "https://registry.yarnpkg.com/jose/-/jose-4.15.9.tgz#9b68eda29e9a0614c042fa29387196c7dd800100" + integrity sha512-1vUQX+IdDMVPj4k8kOxgUqlcK518yluMuGZwqlr44FS1ppZB/5GWh4rZG89erpOBOJjU/OBsnCVFfapsRz6nEA== + jose@^5.0.0: version "5.1.3" resolved "https://registry.yarnpkg.com/jose/-/jose-5.1.3.tgz#303959d85c51b5cb14725f930270b72be56abdca" @@ -15298,6 +17148,16 @@ jssha@^2.4.2: resolved "https://registry.npmjs.org/jssha/-/jssha-2.4.2.tgz" integrity sha512-/jsi/9C0S70zfkT/4UlKQa5E1xKurDnXcQizcww9JSR/Fv+uIbWM2btG+bFcL3iNoK9jIGS0ls9HWLr1iw0kFg== +jszip@^3.10.1: + version "3.10.1" + resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.10.1.tgz#34aee70eb18ea1faec2f589208a157d1feb091c2" + integrity sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g== + dependencies: + lie "~3.3.0" + pako "~1.0.2" + readable-stream "~2.3.6" + setimmediate "^1.0.5" + just-diff-apply@^5.2.0: version "5.5.0" resolved "https://registry.yarnpkg.com/just-diff-apply/-/just-diff-apply-5.5.0.tgz#771c2ca9fa69f3d2b54e7c3f5c1dfcbcc47f9f0f" @@ -15339,6 +17199,11 @@ keyv@^4.0.0: dependencies: json-buffer "3.0.1" +keyvaluestorage-interface@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/keyvaluestorage-interface/-/keyvaluestorage-interface-1.0.0.tgz#13ebdf71f5284ad54be94bd1ad9ed79adad515ff" + integrity sha512-8t6Q3TclQ4uZynJY9IGr2+SsIGwK9JHcO6ootkHCGA0CrQCRy+VkouYNO2xicET6b9al7QKzpebNow+gkpCL8g== + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz" @@ -15671,6 +17536,25 @@ libnpmpublish@7.1.4: sigstore "^1.4.0" ssri "^10.0.1" +libsodium-wrappers@^0.7.6: + version "0.7.15" + resolved "https://registry.yarnpkg.com/libsodium-wrappers/-/libsodium-wrappers-0.7.15.tgz#53f13e483820272a3d55b23be2e34402ac988055" + integrity sha512-E4anqJQwcfiC6+Yrl01C1m8p99wEhLmJSs0VQqST66SbQXXBoaJY0pF4BNjRYa/sOQAxx6lXAaAFIlx+15tXJQ== + dependencies: + libsodium "^0.7.15" + +libsodium@^0.7.15: + version "0.7.15" + resolved "https://registry.yarnpkg.com/libsodium/-/libsodium-0.7.15.tgz#ac284e3dcb1c29ae9526c5581cdada6a072f6d20" + integrity sha512-sZwRknt/tUpE2AwzHq3jEyUU5uvIZHtSssktXq7owd++3CSgn8RGrv6UZJJBpP7+iBghBqe7Z06/2M31rI2NKw== + +lie@~3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" + integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== + dependencies: + immediate "~3.0.5" + linebreak@^1.0.2: version "1.0.2" resolved "https://registry.npmjs.org/linebreak/-/linebreak-1.0.2.tgz" @@ -15711,6 +17595,30 @@ lint-staged@10.5.4: string-argv "0.3.1" stringify-object "^3.3.0" +listhen@^1.9.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/listhen/-/listhen-1.9.0.tgz#59355f7e4fc1eefda6bc494ae7e9ed13aa7658ef" + integrity sha512-I8oW2+QL5KJo8zXNWX046M134WchxsXC7SawLPvRQpogCbkyQIaFxPE89A2HiwR7vAK2Dm2ERBAmyjTYGYEpBg== + dependencies: + "@parcel/watcher" "^2.4.1" + "@parcel/watcher-wasm" "^2.4.1" + citty "^0.1.6" + clipboardy "^4.0.0" + consola "^3.2.3" + crossws ">=0.2.0 <0.4.0" + defu "^6.1.4" + get-port-please "^3.1.2" + h3 "^1.12.0" + http-shutdown "^1.2.2" + jiti "^2.1.2" + mlly "^1.7.1" + node-forge "^1.3.1" + pathe "^1.1.2" + std-env "^3.7.0" + ufo "^1.5.4" + untun "^0.1.3" + uqr "^0.1.2" + listr2@^3.2.2: version "3.4.3" resolved "https://registry.npmjs.org/listr2/-/listr2-3.4.3.tgz" @@ -15740,6 +17648,31 @@ listr2@^4.0.5: through "^2.3.8" wrap-ansi "^7.0.0" +lit-element@^3.3.0: + version "3.3.3" + resolved "https://registry.yarnpkg.com/lit-element/-/lit-element-3.3.3.tgz#10bc19702b96ef5416cf7a70177255bfb17b3209" + integrity sha512-XbeRxmTHubXENkV4h8RIPyr8lXc+Ff28rkcQzw3G6up2xg5E8Zu1IgOWIwBLEQsu3cOVFqdYwiVi0hv0SlpqUA== + dependencies: + "@lit-labs/ssr-dom-shim" "^1.1.0" + "@lit/reactive-element" "^1.3.0" + lit-html "^2.8.0" + +lit-html@^2.7.0, lit-html@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-2.8.0.tgz#96456a4bb4ee717b9a7d2f94562a16509d39bffa" + integrity sha512-o9t+MQM3P4y7M7yNzqAyjp7z+mQGa4NS4CxiyLqFPyFWyc4O+nodLrkrxSaCTrla6M5YOLaT3RpbbqjszB5g3Q== + dependencies: + "@types/trusted-types" "^2.0.2" + +lit@2.7.6: + version "2.7.6" + resolved "https://registry.yarnpkg.com/lit/-/lit-2.7.6.tgz#810007b876ed43e0c70124de91831921598b1665" + integrity sha512-1amFHA7t4VaaDe+vdQejSVBklwtH9svGoG6/dZi9JhxtJBBlqY5D1RV7iLUYY0trCqQc4NfhYYZilZiVHt7Hxg== + dependencies: + "@lit/reactive-element" "^1.6.0" + lit-element "^3.3.0" + lit-html "^2.7.0" + live-server@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/live-server/-/live-server-1.2.1.tgz" @@ -15858,12 +17791,17 @@ lodash.assign@^4.0.3, lodash.assign@^4.0.6: resolved "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz" integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc= +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + lodash.clonedeep@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz" integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= -lodash.isequal@^4.5.0: +lodash.isequal@4.5.0, lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz" integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA= @@ -16004,6 +17942,11 @@ lru-cache@5.1.1, lru-cache@^5.1.1: dependencies: yallist "^3.0.2" +lru-cache@^10.4.3: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-3.2.0.tgz#71789b3b7f5399bec8565dda38aa30d2a097efee" @@ -16460,6 +18403,11 @@ mime@^2.4.6: resolved "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz" integrity sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg== +mime@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + mimic-fn@^1.0.0: version "1.2.0" resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz" @@ -16470,6 +18418,11 @@ mimic-fn@^2.0.0, mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-fn@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc" + integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw== + mimic-response@^1.0.0, mimic-response@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz" @@ -16754,6 +18707,16 @@ mkdirp@^2.1.6: resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-2.1.6.tgz#964fbcb12b2d8c5d6fbc62a963ac95a273e2cc19" integrity sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A== +mlly@^1.7.1, mlly@^1.7.2: + version "1.7.2" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.2.tgz#21c0d04543207495b8d867eff0ac29fac9a023c0" + integrity sha512-tN3dvVHYVz4DhSXinXIk7u9syPYaJvio118uomkovAtWBT+RdbP6Lfh/5Lvo519YMmwBafwlh20IPTXIStscpA== + dependencies: + acorn "^8.12.1" + pathe "^1.1.2" + pkg-types "^1.2.0" + ufo "^1.5.4" + mnemonist@^0.38.0: version "0.38.3" resolved "https://registry.npmjs.org/mnemonist/-/mnemonist-0.38.3.tgz" @@ -16858,6 +18821,18 @@ morgan@1.10.0, morgan@^1.9.1: on-finished "~2.3.0" on-headers "~1.0.2" +motion@10.16.2: + version "10.16.2" + resolved "https://registry.yarnpkg.com/motion/-/motion-10.16.2.tgz#7dc173c6ad62210a7e9916caeeaf22c51e598d21" + integrity sha512-p+PurYqfUdcJZvtnmAqu5fJgV2kR0uLFQuBKtLeFVTrYEVllI99tiOTSefVNYuip9ELTEkepIIDftNdze76NAQ== + dependencies: + "@motionone/animation" "^10.15.1" + "@motionone/dom" "^10.16.2" + "@motionone/svelte" "^10.16.2" + "@motionone/types" "^10.15.1" + "@motionone/utils" "^10.15.1" + "@motionone/vue" "^10.16.2" + moving-averages@^4.0.6: version "4.0.6" resolved "https://registry.npmjs.org/moving-averages/-/moving-averages-4.0.6.tgz" @@ -16957,6 +18932,16 @@ multicoin-address-validator@0.5.15: lodash.isequal "^4.5.0" minify "^6.0.1" +multiformats@^11.0.2: + version "11.0.2" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-11.0.2.tgz#b14735efc42cd8581e73895e66bebb9752151b60" + integrity sha512-b5mYMkOkARIuVZCpvijFj9a6m5wMVLC7cf/jIPd5D/ARDOfLC5+IFkbgDXQgcU2goIsTD/O9NY4DI/Mt4OGvlg== + +multiformats@^9.4.2, multiformats@^9.7.1: + version "9.9.0" + resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-9.9.0.tgz#c68354e7d21037a8f1f8833c8ccd68618e8f1d37" + integrity sha512-HoMUjhH9T8DDBNT+6xzkrd9ga/XiBI4xLr58LJACwK6G3HTOPeMz4nB4KJs33L2BelrIJa7P0VuNaVF3hMYfjg== + multihashes@^0.4.15, multihashes@~0.4.15: version "0.4.21" resolved "https://registry.npmjs.org/multihashes/-/multihashes-0.4.21.tgz" @@ -17044,6 +19029,11 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" +napi-wasm@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/napi-wasm/-/napi-wasm-1.1.3.tgz#7bb95c88e6561f84880bb67195437b1cfbe99224" + integrity sha512-h/4nMGsHjZDCYmQVNODIrYACVJ+I9KItbG+0si6W/jSjdA9JbWDoU4LLeMXVcEQGHjttI2tuXqDrbGF7qkUHHg== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz" @@ -17139,6 +19129,16 @@ node-dijkstra@2.5.0: resolved "https://registry.npmjs.org/node-dijkstra/-/node-dijkstra-2.5.0.tgz" integrity sha1-D+t2xaBfNbVueG3m300zZK8o1Og= +node-fetch-native@^1.6.4: + version "1.6.4" + resolved "https://registry.yarnpkg.com/node-fetch-native/-/node-fetch-native-1.6.4.tgz#679fc8fd8111266d47d7e72c379f1bed9acff06e" + integrity sha512-IhOigYzAKHd244OC0JIMIUrjzctirCmPkaIfhDeGcEETWof5zKYUW7e7MYvChGWh/4CJeXEgsRyGzuF334rOOQ== + +node-fetch@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: version "2.6.7" resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz" @@ -17161,6 +19161,11 @@ node-fetch@~1.7.1: encoding "^0.1.11" is-stream "^1.0.1" +node-forge@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.3.1.tgz#be8da2af243b2417d5f646a770663a92b7e9ded3" + integrity sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA== + node-gyp-build@^4.2.0, node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz" @@ -17460,6 +19465,13 @@ npm-run-path@^4.0.0, npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" +npm-run-path@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" + integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== + dependencies: + path-key "^4.0.0" + npmlog@6.0.2, npmlog@^6.0.0, npmlog@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-6.0.2.tgz#c8166017a42f2dea92d6453168dd865186a70830" @@ -17706,6 +19718,25 @@ oboe@2.1.5: dependencies: http-https "^1.0.0" +ofetch@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/ofetch/-/ofetch-1.4.1.tgz#b6bf6b0d75ba616cef6519dd8b6385a8bae480ec" + integrity sha512-QZj2DfGplQAr2oj9KzceK9Hwz6Whxazmn85yYeVuS3u9XTMOGMRx0kO95MQ+vLsj/S/NwBDMMLU5hpxvI6Tklw== + dependencies: + destr "^2.0.3" + node-fetch-native "^1.6.4" + ufo "^1.5.4" + +ohash@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/ohash/-/ohash-1.1.4.tgz#ae8d83014ab81157d2c285abf7792e2995fadd72" + integrity sha512-FlDryZAahJmEF3VR3w1KogSEdWX3WhA5GPakFx4J81kEAiHyLMpdLLElS8n8dfNadMgAne/MywcvmogzscVt4g== + +on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + on-finished@2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" @@ -17746,6 +19777,13 @@ onetime@^5.1.0, onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +onetime@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4" + integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ== + dependencies: + mimic-fn "^4.0.0" + open@^7.4.2: version "7.4.2" resolved "https://registry.yarnpkg.com/open/-/open-7.4.2.tgz#b8147e26dcf3e426316c730089fd71edd29c2321" @@ -18060,16 +20098,16 @@ pacote@^15.0.0, pacote@^15.0.8: ssri "^10.0.0" tar "^6.1.11" +pako@1.0.11, pako@~1.0.2, pako@~1.0.5: + version "1.0.11" + resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" + integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== + pako@^0.2.5: version "0.2.9" resolved "https://registry.npmjs.org/pako/-/pako-0.2.9.tgz" integrity sha1-8/dSL073gjSNqBYbrZ7P1Rv4OnU= -pako@~1.0.5: - version "1.0.11" - resolved "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - param-case@^2.1.0: version "2.1.1" resolved "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz" @@ -18335,6 +20373,11 @@ path-key@^3.0.0, path-key@^3.1.0: resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== +path-key@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18" + integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ== + path-parse@^1.0.6, path-parse@^1.0.7: version "1.0.7" resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz" @@ -18403,6 +20446,11 @@ path-type@^4.0.0: resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^1.1.1, pathe@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec" + integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ== + pathval@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" @@ -18525,6 +20573,36 @@ pinkie@^2.0.0: resolved "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz" integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= +pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== + dependencies: + duplexify "^4.1.2" + split2 "^4.0.0" + +pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== + +pino@7.11.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.0.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" + process-warning "^1.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" + pirates@^4.0.4: version "4.0.6" resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" @@ -18544,6 +20622,15 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" +pkg-types@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.2.1.tgz#6ac4e455a5bb4b9a6185c1c79abd544c901db2e5" + integrity sha512-sQoqa8alT3nHjGuTjuKgOnvjo4cljkufdtLMnO2LBP/wRwuDlo1tkaEdMxCRhyGRPacv/ztlZgDPm2b7FAmEvw== + dependencies: + confbox "^0.1.8" + mlly "^1.7.2" + pathe "^1.1.2" + please-upgrade-node@^3.2.0: version "3.2.0" resolved "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz" @@ -18563,6 +20650,11 @@ png-js@^1.0.0: resolved "https://registry.npmjs.org/png-js/-/png-js-1.0.0.tgz" integrity sha512-k+YsbhpA9e+EFfKjTCH3VW6aoKlyNYI6NYdTfDL4CIvFnvsuO84ttonmZE7rc+v23SLTH8XX+5w/Ak9v0xGY4g== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" @@ -18643,6 +20735,11 @@ prettier@^2.1.2: resolved "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz" integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q== +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + pretty-format@29.4.3: version "29.4.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.4.3.tgz#25500ada21a53c9e8423205cf0337056b201244c" @@ -18686,7 +20783,12 @@ process-nextick-args@~2.0.0: resolved "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== -process@^0.11.10, process@~0.11.0: +process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== + +process@0.11.10, process@^0.11.10, process@~0.11.0: version "0.11.10" resolved "https://registry.npmjs.org/process/-/process-0.11.10.tgz" integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= @@ -18776,6 +20878,11 @@ proxy-addr@~2.0.7: forwarded "0.2.0" ipaddr.js "1.9.1" +proxy-compare@2.5.1: + version "2.5.1" + resolved "https://registry.yarnpkg.com/proxy-compare/-/proxy-compare-2.5.1.tgz#17818e33d1653fbac8c2ec31406bce8a2966f600" + integrity sha512-oyfc0Tx87Cpwva5ZXezSp5V9vht1c7dZBhvuV/y3ctkgMVUmiAGDVeeB0dKhGSyT0v1ZTEQYpe/RXlBVBNuCLA== + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -18924,6 +21031,16 @@ q@^1.5.1: resolved "https://registry.npmjs.org/q/-/q-1.5.1.tgz" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qrcode@1.5.3: + version "1.5.3" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" + integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== + dependencies: + dijkstrajs "^1.0.1" + encode-utf8 "^1.0.3" + pngjs "^5.0.0" + yargs "^15.3.1" + qs@6.11.2: version "6.11.2" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.2.tgz#64bea51f12c1f5da1bc01496f48ffcff7c69d7d9" @@ -18943,6 +21060,16 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.3.tgz#3aeeffc91967ef6e35c0e488ef46fb296ab76aad" integrity sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA== +query-string@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-7.1.3.tgz#a1cf90e994abb113a325804a972d98276fe02328" + integrity sha512-hh2WYhq4fi8+b+/2Kg9CEge4fDPvHS534aOOvOZeQ3+Vf2mCFsaFBYj0i+iXcAq6I9Vzp5fjMFBlONvayDC1qg== + dependencies: + decode-uri-component "^0.2.2" + filter-obj "^1.1.0" + split-on-first "^1.0.0" + strict-uri-encode "^2.0.0" + query-string@^5.0.1: version "5.1.1" resolved "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz" @@ -18967,6 +21094,11 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + quick-lru@^4.0.1: version "4.0.1" resolved "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz" @@ -18986,6 +21118,11 @@ quote-stream@^1.0.1: minimist "^1.1.3" through2 "^2.0.0" +radix3@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/radix3/-/radix3-1.1.2.tgz#fd27d2af3896c6bf4bcdfab6427c69c2afc69ec0" + integrity sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA== + randomatic@^3.0.0: version "3.1.1" resolved "https://registry.npmjs.org/randomatic/-/randomatic-3.1.1.tgz" @@ -19272,6 +21409,16 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" +readonly-date@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/readonly-date/-/readonly-date-1.0.0.tgz#5af785464d8c7d7c40b9d738cbde8c646f97dcd9" + integrity sha512-tMKIV7hlk0h4mO3JTmmVuIlJVXjKk3Sep9Bf5OH0O+758ruuVkUy2J9SttDLm91IEX/WHlXPSpxMGjPj4beMIQ== + +real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + rechoir@^0.6.2: version "0.6.2" resolved "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz" @@ -19295,6 +21442,11 @@ redent@^3.0.0: indent-string "^4.0.0" strip-indent "^3.0.0" +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + regenerate@^1.2.1: version "1.4.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" @@ -19796,6 +21948,11 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" +safe-stable-stringify@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" @@ -20193,7 +22350,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -20233,6 +22390,25 @@ sisteransi@^1.0.5: resolved "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz" integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== +siwe-recap@0.0.2-alpha.0: + version "0.0.2-alpha.0" + resolved "https://registry.yarnpkg.com/siwe-recap/-/siwe-recap-0.0.2-alpha.0.tgz#75a0902c10a8ba5b4471f40e4eafb0afb2f8db59" + integrity sha512-xqFUnvrACWW/Q4s5HQ02avg8IyH2RcgkUzfvN4scYaaHErotLVtTGDZkSS0sn/oNK4MXRt83lTqredsvXgt8iA== + dependencies: + canonicalize "^2.0.0" + multiformats "^11.0.2" + siwe "^2.1.4" + +siwe@^2.0.5, siwe@^2.1.4: + version "2.3.2" + resolved "https://registry.yarnpkg.com/siwe/-/siwe-2.3.2.tgz#0794ae25f734f3068de0ab093ddd2f7867bc2d67" + integrity sha512-aSf+6+Latyttbj5nMu6GF3doMfv2UYj83hhwZgUF20ky6fTS83uVhkQABdIVnEuS8y1bBdk7p6ltb9SmlhTTlA== + dependencies: + "@spruceid/siwe-parser" "^2.1.2" + "@stablelib/random" "^1.0.1" + uri-js "^4.4.1" + valid-url "^1.0.9" + slash@3.0.0, slash@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" @@ -20450,6 +22626,13 @@ solparse@2.2.8: pegjs "^0.10.0" yargs "^10.0.3" +sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + sort-keys@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz" @@ -20570,6 +22753,11 @@ split-ca@^1.0.0, split-ca@^1.0.1: resolved "https://registry.yarnpkg.com/split-ca/-/split-ca-1.0.1.tgz#6c83aff3692fa61256e0cd197e05e9de157691a6" integrity sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ== +split-on-first@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/split-on-first/-/split-on-first-1.1.0.tgz#f610afeee3b12bce1d0c30425e76398b78249a5f" + integrity sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw== + split-string@^3.0.1, split-string@^3.0.2: version "3.1.0" resolved "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz" @@ -20584,6 +22772,11 @@ split2@^3.0.0: dependencies: readable-stream "^3.0.0" +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + split@0.3: version "0.3.3" resolved "https://registry.npmjs.org/split/-/split-0.3.3.tgz" @@ -20721,6 +22914,11 @@ statuses@2.0.1, statuses@^2.0.1: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= +std-env@^3.7.0: + version "3.7.0" + resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.7.0.tgz#c9f7386ced6ecf13360b6c6c55b8aaa4ef7481d2" + integrity sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg== + stream-browserify@3.0.0, stream-browserify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" @@ -20754,6 +22952,11 @@ stream-http@^3.0.0: readable-stream "^3.6.0" xtend "^4.0.2" +stream-shift@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== + stream-splicer@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz" @@ -20785,6 +22988,11 @@ strict-uri-encode@^1.0.0: resolved "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz" integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= +strict-uri-encode@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" + integrity sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ== + string-argv@0.3.1: version "0.3.1" resolved "https://registry.npmjs.org/string-argv/-/string-argv-0.3.1.tgz" @@ -20795,6 +23003,11 @@ string-env-interpolation@^1.0.1: resolved "https://registry.npmjs.org/string-env-interpolation/-/string-env-interpolation-1.0.1.tgz" integrity sha512-78lwMoCcn0nNu8LszbP1UA7g55OeE4v7rCeWnM5B453rnNr4aq+5it3FEYtZrSEiMvHZOZ9Jlqb0OD0M2VInqg== +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz" @@ -21040,6 +23253,11 @@ strip-final-newline@^2.0.0: resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== +strip-final-newline@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" + integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== + strip-hex-prefix@1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz" @@ -21208,6 +23426,21 @@ syntax-error@^1.1.1: dependencies: acorn-node "^1.2.0" +system-architecture@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/system-architecture/-/system-architecture-0.1.0.tgz#71012b3ac141427d97c67c56bc7921af6bff122d" + integrity sha512-ulAk51I9UVUyJgxlv9M6lFot2WP3e7t8Kz9+IS6D4rVba1tR9kON+Ey69f+1R4Q8cd45Lod6a4IcJIxnzGc/zA== + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + table@^5.2.3: version "5.4.6" resolved "https://registry.npmjs.org/table/-/table-5.4.6.tgz" @@ -21482,6 +23715,13 @@ text-table@^0.2.0: resolved "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz" integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= +thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + through2@^2.0.0, through2@^2.0.3, through2@~2.0.3: version "2.0.5" resolved "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz" @@ -21675,6 +23915,16 @@ try-to-catch@^3.0.0: resolved "https://registry.npmjs.org/try-to-catch/-/try-to-catch-3.0.0.tgz" integrity sha512-eIm6ZXwR35jVF8By/HdbbkcaCDTBI5PpCPkejRKrYp0jyf/DbCCcRhHD7/O9jtFI3ewsqo9WctFEiJTS6i+CQA== +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + ts-essentials@^1.0.0: version "1.0.4" resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-1.0.4.tgz#ce3b5dade5f5d97cf69889c11bf7d2da8555b15a" @@ -21857,15 +24107,20 @@ tsify@^5.0.4: through2 "^2.0.0" tsconfig "^5.0.3" +tslib@1.14.1, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@2.5.0: version "2.5.0" resolved "https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== -tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== +tslib@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.0.tgz#b295854684dbda164e181d259a22cd779dcd7bc3" + integrity sha512-7At1WUettjcSRHXCyYtTselblcHl9PJFFVKiCAy/bY97+BPZXSQ2wbq0P9s8tK2G7dFQfNnlJnPAiArVBVBsfA== tslib@^2.0.0, tslib@^2.3.0, tslib@^2.3.1, tslib@^2.4.0, tslib@^2.5.0, tslib@^2.6.1, tslib@^2.6.2, tslib@~2.6.0: version "2.6.2" @@ -22042,20 +24297,20 @@ type@^2.7.2: resolved "https://registry.yarnpkg.com/type/-/type-2.7.2.tgz#2376a15a3a28b1efa0f5350dcf72d24df6ef98d0" integrity sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw== -typechain@5.1.1: - version "5.1.1" - resolved "https://registry.yarnpkg.com/typechain/-/typechain-5.1.1.tgz#2e54bee69bb91d21096943deb400aa91638f698e" - integrity sha512-zN4ylCc3gSw2BXy5Zlpmw8q0lf5pQ+U8gYd5WCWRfDVuUkKyZBURz31VLjkPY/nfOr+P6EcwTC4Ae5VNVqrv/g== +typechain@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== dependencies: "@types/prettier" "^2.1.1" - command-line-args "^4.0.7" - debug "^4.1.1" + debug "^4.3.1" fs-extra "^7.0.0" - glob "^7.1.6" + glob "7.1.7" js-sha3 "^0.8.0" lodash "^4.17.15" mkdirp "^1.0.4" - prettier "^2.1.2" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" ts-essentials "^7.0.1" typechain@^3.0.0: @@ -22173,6 +24428,11 @@ typedarray@^0.0.6: resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typeforce@^1.11.3: + version "1.18.0" + resolved "https://registry.yarnpkg.com/typeforce/-/typeforce-1.18.0.tgz#d7416a2c5845e085034d70fcc5b6cc4a90edbfdc" + integrity sha512-7uc1O8h1M1g0rArakJdf0uLRSSgFcYexrVoKo+bzJd32gd4gDy2L/Z+8/FjPnU9ydY3pEnVPtr9FyscYY60K1g== + typescript@2.9.1: version "2.9.1" resolved "https://registry.npmjs.org/typescript/-/typescript-2.9.1.tgz" @@ -22215,16 +24475,38 @@ typical@^2.6.0, typical@^2.6.1: resolved "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz" integrity sha1-XAgOXWYcu+OCWdLnCjxyU+hziB0= +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + ua-parser-js@^0.7.18: version "0.7.34" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.34.tgz#afb439e2e3e394bdc90080acb661a39c685b67d7" integrity sha512-cJMeh/eOILyGu0ejgTKB95yKT3zOenSe9UGE3vj6WfiOwgGYnmATUsnDixMFvdU+rNMvWih83hrUP8VwhF9yXQ== +ufo@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754" + integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ== + uglify-js@^3.1.4: version "3.13.2" resolved "https://registry.npmjs.org/uglify-js/-/uglify-js-3.13.2.tgz" integrity sha512-SbMu4D2Vo95LMC/MetNaso1194M1htEA+JrqE9Hk+G2DhI+itfS9TRu9ZKeCahLDNa/J3n4MqUJ/fOHMzQpRWw== +uint8arrays@^3.0.0, uint8arrays@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-3.1.1.tgz#2d8762acce159ccd9936057572dade9459f65ae0" + integrity sha512-+QJa8QRnbdXVpHYjLoTpJIdCTiw9Ir62nocClWuXIq2JIh4Uta0cQsTSpFL678p2CN8B+XSApwcU+pQEqVpKWg== + dependencies: + multiformats "^9.4.2" + ultron@~1.1.0: version "1.1.1" resolved "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz" @@ -22260,6 +24542,11 @@ unc-path-regex@^0.1.2: resolved "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz" integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= +uncrypto@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/uncrypto/-/uncrypto-0.1.3.tgz#e1288d609226f2d02d8d69ee861fa20d8348ef2b" + integrity sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q== + undeclared-identifiers@^1.1.2: version "1.1.3" resolved "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz" @@ -22283,6 +24570,17 @@ undici@^5.14.0: dependencies: "@fastify/busboy" "^2.0.0" +unenv@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/unenv/-/unenv-1.10.0.tgz#c3394a6c6e4cfe68d699f87af456fe3f0db39571" + integrity sha512-wY5bskBQFL9n3Eca5XnhH6KbUo/tfvkwm9OpcdCvLaeA7piBNbavbOKJySEwQ1V0RH6HvNlSAFRTpvTqgKRQXQ== + dependencies: + consola "^3.2.3" + defu "^6.1.4" + mime "^3.0.0" + node-fetch-native "^1.6.4" + pathe "^1.1.2" + unicode-properties@^1.2.2: version "1.3.1" resolved "https://registry.npmjs.org/unicode-properties/-/unicode-properties-1.3.1.tgz" @@ -22419,6 +24717,31 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unstorage@^1.9.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/unstorage/-/unstorage-1.13.1.tgz#090b30de978ee8755b3ad7bbc00acfade124ac13" + integrity sha512-ELexQHUrG05QVIM/iUeQNdl9FXDZhqLJ4yP59fnmn2jGUh0TEulwOgov1ubOb3Gt2ZGK/VMchJwPDNVEGWQpRg== + dependencies: + anymatch "^3.1.3" + chokidar "^3.6.0" + citty "^0.1.6" + destr "^2.0.3" + h3 "^1.13.0" + listhen "^1.9.0" + lru-cache "^10.4.3" + node-fetch-native "^1.6.4" + ofetch "^1.4.1" + ufo "^1.5.4" + +untun@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/untun/-/untun-0.1.3.tgz#5d10dee37a3a5737ff03d158be877dae0a0e58a6" + integrity sha512-4luGP9LMYszMRZwsvyUd9MrxgEGZdZuZgpVQHEEX0lCYFESasVRvZd0EYpCkOIbJKHMuv0LskpXc/8Un+MJzEQ== + dependencies: + citty "^0.1.5" + consola "^3.2.3" + pathe "^1.1.1" + upath@2.0.1, upath@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/upath/-/upath-2.0.1.tgz#50c73dea68d6f6b990f51d279ce6081665d61a8b" @@ -22463,7 +24786,12 @@ upper-case@^2.0.2: dependencies: tslib "^2.0.3" -uri-js@^4.2.2: +uqr@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/uqr/-/uqr-0.1.2.tgz#5c6cd5dcff9581f9bb35b982cb89e2c483a41d7d" + integrity sha512-MJu7ypHq6QasgF5YRTjqscSzQp/W11zoUk6kvmlH+fmWEs63Y0Eib13hYFwAzagRJcVY8WVnlV+eBDUGMJ5IbA== + +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -22517,6 +24845,11 @@ urlpattern-polyfill@^9.0.0: resolved "https://registry.yarnpkg.com/urlpattern-polyfill/-/urlpattern-polyfill-9.0.0.tgz#bc7e386bb12fd7898b58d1509df21d3c29ab3460" integrity sha512-WHN8KDQblxd32odxeIgo83rdVDE2bvdkb86it7bMhYZwWKJz0+O0RK/eZiHYnM+zgt/U7hAHOlCQGfjjvSkw2g== +use-sync-external-store@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/use-sync-external-store/-/use-sync-external-store-1.2.0.tgz#7dbefd6ef3fe4e767a0cf5d7287aacfb5846928a" + integrity sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA== + use@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/use/-/use-3.1.1.tgz" @@ -22559,27 +24892,27 @@ util@0.10.3: dependencies: inherits "2.0.1" -util@^0.12.0: - version "0.12.3" - resolved "https://registry.npmjs.org/util/-/util-0.12.3.tgz" - integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== +util@0.12.5, util@^0.12.5: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" is-generator-function "^1.0.7" is-typed-array "^1.1.3" - safe-buffer "^5.1.2" which-typed-array "^1.1.2" -util@^0.12.5: - version "0.12.5" - resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" - integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== +util@^0.12.0: + version "0.12.3" + resolved "https://registry.npmjs.org/util/-/util-0.12.3.tgz" + integrity sha512-I8XkoQwE+fPQEhy9v012V+TSdH2kp9ts29i20TaaDUXsg7x/onePbhFJUExBfv/2ay1ZOp/Vsm3nDlmnFGSAog== dependencies: inherits "^2.0.3" is-arguments "^1.0.4" is-generator-function "^1.0.7" is-typed-array "^1.1.3" + safe-buffer "^5.1.2" which-typed-array "^1.1.2" util@~0.12.0: @@ -22643,6 +24976,11 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +valid-url@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/valid-url/-/valid-url-1.0.9.tgz#1c14479b40f1397a75782f115e4086447433a200" + integrity sha512-QQDsV8OnSf5Uc30CKSwG9lnhMPe6exHtTXLRYX8uMwKENy640pU+2BgBL0LRbDh/eYRahNCS7aewCx0wf3NYVA== + validate-npm-package-license@3.0.4, validate-npm-package-license@^3.0.1, validate-npm-package-license@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz" @@ -22672,6 +25010,14 @@ validate-npm-package-name@^5.0.0: dependencies: builtins "^5.0.0" +valtio@1.11.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/valtio/-/valtio-1.11.0.tgz#c029dcd17a0f99d2fbec933721fe64cfd32a31ed" + integrity sha512-65Yd0yU5qs86b5lN1eu/nzcTgQ9/6YnD6iO+DDaDbQLn1Zv2w12Gwk43WkPlUBxk5wL/6cD5YMFf7kj6HZ1Kpg== + dependencies: + proxy-compare "2.5.1" + use-sync-external-store "1.2.0" + value-or-promise@^1.0.11, value-or-promise@^1.0.12: version "1.0.12" resolved "https://registry.yarnpkg.com/value-or-promise/-/value-or-promise-1.0.12.tgz#0e5abfeec70148c78460a849f6b003ea7986f15c" @@ -22682,6 +25028,13 @@ varint@^5.0.0: resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== +varuint-bitcoin@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/varuint-bitcoin/-/varuint-bitcoin-1.1.2.tgz#e76c138249d06138b480d4c5b40ef53693e24e92" + integrity sha512-4EVb+w4rx+YfVM32HQX42AbbT7/1f5zwAYhIujKXKk8NQK+JfRVl3pqT3hjNn/L+RstigmGGKVwHA/P0wgITZw== + dependencies: + safe-buffer "^5.1.1" + vary@^1, vary@~1.1.2: version "1.1.2" resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz" @@ -24005,6 +26358,14 @@ wordwrap@^1.0.0: resolved "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz" integrity sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus= +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + workerpool@6.2.1: version "6.2.1" resolved "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz" @@ -24160,6 +26521,11 @@ ws@^7.4.6: resolved "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz" integrity sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg== +ws@^7.5.1: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + ws@^8.12.0, ws@^8.13.0, ws@^8.15.0: version "8.15.0" resolved "https://registry.yarnpkg.com/ws/-/ws-8.15.0.tgz#db080a279260c5f532fc668d461b8346efdfcf86"