diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml
index 3d8e5d8a0..436cc43f2 100644
--- a/.github/workflows/main.yml
+++ b/.github/workflows/main.yml
@@ -7,7 +7,7 @@ jobs:
runs-on: ${{ matrix.os }}
strategy:
matrix:
- node: [ '16.x', '18.x' ]
+ node: [ '18.x' ]
os: [ ubuntu-latest ]
steps:
diff --git a/.gitignore b/.gitignore
index 72fa563a6..7ebab6644 100644
--- a/.gitignore
+++ b/.gitignore
@@ -13,4 +13,5 @@ contracts/compiled
examples/*/pnpm-lock.yaml
pnpm-debug.log
docs-json
-docs
+./docs
+.next
diff --git a/.nvmrc b/.nvmrc
index b6a7d89c6..3c032078a 100644
--- a/.nvmrc
+++ b/.nvmrc
@@ -1 +1 @@
-16
+18
diff --git a/demos/README.md b/demos/README.md
new file mode 100644
index 000000000..685ccb7a1
--- /dev/null
+++ b/demos/README.md
@@ -0,0 +1,7 @@
+# `@nucypher/*` Demos
+
+- [`taco-demo`](./taco-demo) - A demo of the `@nucypher/taco` library.
+- [`taco-nft-demo`](./taco-nft-demo) - A demo an NFT-based condition using the `@nucypher/taco` library.
+- [`nucypher-ts-demo`](https://github.com/nucypher/nucypher-ts-demo) - A demo of PRE in the `nucypher-ts` library.
+- [`tdec-sandbox`](https://github.com/nucypher/tdec-sandbox) - A demo of tDec in the `nucypher-ts` library.
+- [`tdec-nft-example`](https://github.com/nucypher/tdec-nft-example) - A demo of tDec in the `nucypher-ts` library.
diff --git a/demos/taco-demo/README.md b/demos/taco-demo/README.md
new file mode 100644
index 000000000..00173b0c0
--- /dev/null
+++ b/demos/taco-demo/README.md
@@ -0,0 +1,31 @@
+# taco-demo
+
+## Installation
+
+```bash
+pnpm install
+pnpm start
+```
+
+## Usage
+
+In order to run this demo will need a MetaMask with an account funded with some
+$MATIC.
+
+In order to connect with the network, the demo uses a public instances of
+[Porter](https://docs.threshold.network/app-development/threshold-access-control-tac/porter).
+
+### Polygon
+
+`@nucypher/taco` is in an early release. We recommend **not** using it in
+production _just yet_.
+
+### Tapir - Mumbai Testnet
+
+The current release of `@nucypher/taco` supports Ursulas working on Tapir
+network and contracts deployed on Mumbai testnet.
+
+## References
+
+This dApp is based on
+[`useDapp` example](https://github.com/EthWorks/useDapp/tree/master/packages/example).
diff --git a/demos/taco-demo/package.json b/demos/taco-demo/package.json
new file mode 100644
index 000000000..369c67c7d
--- /dev/null
+++ b/demos/taco-demo/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "taco-demo",
+ "version": "0.1.0",
+ "description": "A usage example for @nucypher/taco",
+ "private": true,
+ "author": "Piotr Rosłaniec
",
+ "scripts": {
+ "start": "webpack serve --mode development",
+ "build": "tsc --noEmit && rimraf build && webpack --mode production --progress"
+ },
+ "dependencies": {
+ "@nucypher/taco": "workspace:*",
+ "@usedapp/core": "^1.2.13",
+ "buffer": "^6.0.3",
+ "ethers": "^5.7.1",
+ "file-loader": "^6.2.0",
+ "react": "^18.2.0",
+ "react-copy-to-clipboard": "^5.1.0",
+ "react-dom": "^18.2.0",
+ "react-spinners": "^0.13.6"
+ },
+ "devDependencies": {
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
+ "@types/react": "^18.0.20",
+ "@types/react-copy-to-clipboard": "^5.0.4",
+ "@types/react-dom": "^18.0.6",
+ "copy-webpack-plugin": "^11.0.0",
+ "esbuild-loader": "^2.20.0",
+ "html-webpack-plugin": "^5.5.0",
+ "react-refresh": "^0.14.0",
+ "rimraf": "^3.0.2",
+ "stream-browserify": "^3.0.0",
+ "typescript": "^4.8.3",
+ "webpack": "^5.74.0",
+ "webpack-cli": "^4.10.0",
+ "webpack-dev-server": "^4.11.1"
+ }
+}
diff --git a/demos/taco-demo/src/App.tsx b/demos/taco-demo/src/App.tsx
new file mode 100644
index 000000000..6cf0eb981
--- /dev/null
+++ b/demos/taco-demo/src/App.tsx
@@ -0,0 +1,122 @@
+import {
+ conditions,
+ decrypt,
+ encrypt,
+ getPorterUri,
+ initialize,
+ ThresholdMessageKit,
+} from '@nucypher/taco';
+import { Mumbai, useEthers } from '@usedapp/core';
+import { ethers } from 'ethers';
+import React, { useEffect, useState } from 'react';
+
+import { ConditionBuilder } from './ConditionBuilder';
+import { Decrypt } from './Decrypt';
+import { Encrypt } from './Encrypt';
+import { Spinner } from './Spinner';
+
+export default function App() {
+ const { activateBrowserWallet, deactivate, account, switchNetwork } =
+ useEthers();
+
+ const [loading, setLoading] = useState(false);
+ const [condition, setCondition] = useState();
+ const [encryptedMessage, setEncryptedMessage] =
+ useState();
+ const [decryptedMessage, setDecryptedMessage] = useState();
+ const [decryptionErrors, setDecryptionErrors] = useState([]);
+ const [ritualId, setRitualId] = useState(2);
+
+ useEffect(() => {
+ initialize();
+ switchNetwork(Mumbai.chainId);
+ }, []);
+
+ const encryptMessage = async (message: string) => {
+ if (!condition) {
+ return;
+ }
+ setLoading(true);
+
+ await switchNetwork(Mumbai.chainId);
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum);
+ const encryptedMessage = await encrypt(
+ provider,
+ message,
+ condition,
+ ritualId,
+ provider.getSigner(),
+ );
+
+ setEncryptedMessage(encryptedMessage);
+ setLoading(false);
+ };
+
+ const decryptMessage = async (encryptedMessage: ThresholdMessageKit) => {
+ if (!condition) {
+ return;
+ }
+ setLoading(true);
+ setDecryptedMessage('');
+ setDecryptionErrors([]);
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum);
+ const porterUri = getPorterUri('lynx');
+ const decryptedMessage = await decrypt(
+ provider,
+ encryptedMessage,
+ provider.getSigner(),
+ porterUri,
+ );
+
+ setDecryptedMessage(new TextDecoder().decode(decryptedMessage));
+ setLoading(false);
+ };
+
+ if (!account) {
+ return (
+
+
Web3 Provider
+ activateBrowserWallet()}>Connect Wallet
+
+ );
+ }
+
+ if (loading) {
+ return ;
+ }
+
+ return (
+
+
+
Web3 Provider
+
Disconnect Wallet
+ {account &&
Account: {account}
}
+
+
+
Ritual ID
+
Replace with your own ritual ID
+
setRitualId(parseInt(e.currentTarget.value))} />
+
+
+
+
+
+
+
+ );
+}
diff --git a/demos/taco-demo/src/ConditionBuilder.tsx b/demos/taco-demo/src/ConditionBuilder.tsx
new file mode 100644
index 000000000..1a82fc1d3
--- /dev/null
+++ b/demos/taco-demo/src/ConditionBuilder.tsx
@@ -0,0 +1,81 @@
+import {conditions} from '@nucypher/taco';
+import {Mumbai, useEthers} from '@usedapp/core';
+import React, {useState} from 'react';
+
+interface Props {
+ condition?: conditions.Condition | undefined;
+ setConditions: (value: conditions.Condition) => void;
+ enabled: boolean;
+}
+
+const rpcCondition = new conditions.RpcCondition({
+ conditionType: 'rpc',
+ chain: Mumbai.chainId,
+ method: 'eth_getBalance',
+ parameters: [':userAddress'],
+ returnValueTest: {
+ comparator: '>',
+ value: '0',
+ },
+});
+
+export const ConditionBuilder = ({
+ condition,
+ setConditions,
+ enabled,
+ }: Props) => {
+ const {library} = useEthers();
+
+ const demoCondition = JSON.stringify((condition ?? rpcCondition).toObj());
+ const [conditionString, setConditionString] = useState(demoCondition);
+
+ if (!enabled || !library) {
+ return <>>;
+ }
+
+ const prettyPrint = (obj: object | string) => {
+ if (typeof obj === 'string') {
+ obj = JSON.parse(obj);
+ }
+ return JSON.stringify(obj, null, 2);
+ };
+
+ const makeInput = (
+ onChange = (e: any) => console.log(e),
+ defaultValue: string,
+ ) => (
+
+ );
+
+ const conditionJSONInput = makeInput(
+ setConditionString,
+ JSON.stringify(rpcCondition.toObj()),
+ );
+
+ const onCreateCondition = (e: any) => {
+ e.preventDefault();
+ setConditions(conditions.Condition.fromObj(JSON.parse(conditionString)));
+ };
+
+ return (
+ <>
+ Step 1 - Create A Conditioned Access Policy
+
+
+
Customize your Conditions
+
+
Condition JSON
+ {conditionJSONInput}
+
+
+
Create Conditions
+
+ >
+ );
+};
diff --git a/demos/taco-demo/src/Decrypt.tsx b/demos/taco-demo/src/Decrypt.tsx
new file mode 100644
index 000000000..cd67027f0
--- /dev/null
+++ b/demos/taco-demo/src/Decrypt.tsx
@@ -0,0 +1,76 @@
+import { ThresholdMessageKit } from '@nucypher/taco';
+import React, { useState } from 'react';
+
+interface Props {
+ enabled: boolean;
+ decrypt: (encryptedMessage: ThresholdMessageKit) => void;
+ decryptedMessage?: string | undefined;
+ decryptionErrors: string[];
+}
+
+export const Decrypt = ({
+ decrypt,
+ decryptedMessage,
+ decryptionErrors,
+ enabled,
+}: Props) => {
+ const [encryptedMessage, setEncryptedMessage] = useState('');
+
+ if (!enabled) {
+ return <>>;
+ }
+
+ const onDecrypt = () => {
+ if (!encryptedMessage) {
+ return;
+ }
+ const mkBytes = Buffer.from(encryptedMessage, 'base64');
+ const mk = ThresholdMessageKit.fromBytes(mkBytes);
+ decrypt(mk);
+ };
+
+ const DecryptedMessage = () => {
+ if (!decryptedMessage) {
+ return <>>;
+ }
+ return (
+ <>
+ Decrypted Message:
+ {decryptedMessage}
+ >
+ );
+ };
+
+ const DecryptionErrors = () => {
+ if (decryptionErrors.length === 0) {
+ return null;
+ }
+
+ return (
+
+
Decryption Errors
+
Not enough decryption shares to decrypt the message.
+
Some Ursulas have failed with errors:
+
+ {decryptionErrors.map((error, index) => (
+ {error}
+ ))}
+
+
+ );
+ };
+
+ return (
+
+
Step 3 - Decrypt Encrypted Message
+ setEncryptedMessage(e.currentTarget.value)}
+ />
+ Decrypt
+ {DecryptedMessage()}
+ {DecryptionErrors()}
+
+ );
+};
diff --git a/demos/taco-demo/src/Encrypt.tsx b/demos/taco-demo/src/Encrypt.tsx
new file mode 100644
index 000000000..35e64983b
--- /dev/null
+++ b/demos/taco-demo/src/Encrypt.tsx
@@ -0,0 +1,54 @@
+import { ThresholdMessageKit } from '@nucypher/taco';
+import React, { useState } from 'react';
+import { CopyToClipboard } from 'react-copy-to-clipboard';
+
+interface Props {
+ enabled: boolean;
+ encryptedMessage?: ThresholdMessageKit;
+ encrypt: (value: string) => void;
+}
+
+export const Encrypt = ({ encrypt, encryptedMessage, enabled }: Props) => {
+ if (!enabled) {
+ return <>>;
+ }
+
+ const [plaintext, setPlaintext] = useState('plaintext');
+
+ const onClick = () => encrypt(plaintext);
+
+ const EncryptedMessageContent = () => {
+ if (!encryptedMessage) {
+ return <>>;
+ }
+
+ const encodedCiphertext = Buffer.from(encryptedMessage.toBytes()).toString(
+ 'base64',
+ );
+
+ return (
+ <>
+
+
Encrypted ciphertext:
+
{encodedCiphertext}
+
+ Copy to clipboard
+
+
+ >
+ );
+ };
+
+ return (
+
+
Step 2 - Set conditions and Encrypt a message
+ setPlaintext(e.currentTarget.value)}
+ />
+ Encrypt
+ {EncryptedMessageContent()}
+
+ );
+};
diff --git a/demos/taco-demo/src/Spinner.tsx b/demos/taco-demo/src/Spinner.tsx
new file mode 100644
index 000000000..d8a14fbb3
--- /dev/null
+++ b/demos/taco-demo/src/Spinner.tsx
@@ -0,0 +1,23 @@
+import type { CSSProperties } from 'react';
+import React from 'react';
+import ClipLoader from 'react-spinners/ClipLoader';
+
+interface Props {
+ loading: boolean;
+}
+
+export const Spinner = ({ loading }: Props) => {
+ const style: CSSProperties = {
+ position: 'fixed',
+ top: '50%',
+ left: '50%',
+ transform: 'translate(-50%, -50%)',
+ textAlign: 'center',
+ };
+ return (
+
+
Loading
+
+
+ );
+};
diff --git a/demos/taco-demo/src/_redirects b/demos/taco-demo/src/_redirects
new file mode 100644
index 000000000..ad37e2c2c
--- /dev/null
+++ b/demos/taco-demo/src/_redirects
@@ -0,0 +1 @@
+/* /index.html 200
diff --git a/demos/taco-demo/src/assets/images/favicon.png b/demos/taco-demo/src/assets/images/favicon.png
new file mode 100644
index 000000000..4c849e1f7
Binary files /dev/null and b/demos/taco-demo/src/assets/images/favicon.png differ
diff --git a/demos/taco-demo/src/index.html b/demos/taco-demo/src/index.html
new file mode 100644
index 000000000..c17ac7729
--- /dev/null
+++ b/demos/taco-demo/src/index.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+ React App
+
+
+
+ You need to enable JavaScript to run this app.
+
+
+
+
diff --git a/demos/taco-demo/src/index.tsx b/demos/taco-demo/src/index.tsx
new file mode 100644
index 000000000..2a85089c7
--- /dev/null
+++ b/demos/taco-demo/src/index.tsx
@@ -0,0 +1,20 @@
+import { Config, DAppProvider, Mumbai } from '@usedapp/core';
+import React, { StrictMode } from 'react';
+import * as ReactDOMClient from 'react-dom/client';
+
+import App from './App';
+
+const config: Config = {
+ networks: [Mumbai],
+};
+const rootElement = document.getElementById('root');
+
+if (rootElement) {
+ ReactDOMClient.createRoot(rootElement).render(
+
+
+
+
+ ,
+ );
+}
diff --git a/demos/taco-demo/src/react-app-env.d.ts b/demos/taco-demo/src/react-app-env.d.ts
new file mode 100644
index 000000000..4e39a38ad
--- /dev/null
+++ b/demos/taco-demo/src/react-app-env.d.ts
@@ -0,0 +1,5 @@
+///
+
+interface Window {
+ ethereum: any;
+}
diff --git a/demos/taco-demo/tsconfig.json b/demos/taco-demo/tsconfig.json
new file mode 100644
index 000000000..6b7fb0d09
--- /dev/null
+++ b/demos/taco-demo/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "extends": "../../tsconfig.json",
+ "include": ["src", "types"],
+ "compilerOptions": {
+ "jsx": "react",
+ "noEmit": true,
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true
+ },
+ "references": [
+ {
+ "path": "../../packages/taco/tsconfig.es.json"
+ }
+ ]
+}
diff --git a/demos/taco-demo/webpack.config.js b/demos/taco-demo/webpack.config.js
new file mode 100644
index 000000000..b6f51698d
--- /dev/null
+++ b/demos/taco-demo/webpack.config.js
@@ -0,0 +1,78 @@
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const CopyPlugin = require('copy-webpack-plugin');
+const { ESBuildMinifyPlugin } = require('esbuild-loader');
+const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
+const webpack = require('webpack');
+
+const isDevelopment = process.env.NODE_ENV !== 'production';
+
+module.exports = {
+ entry: './src',
+ devtool: isDevelopment ? 'eval-source-map' : 'source-map',
+ plugins: [
+ isDevelopment && new ReactRefreshWebpackPlugin(),
+ new HtmlWebpackPlugin({
+ template: './src/index.html',
+ }),
+ new CopyPlugin({
+ patterns: [
+ { from: 'src/_redirects', to: '' },
+ {
+ from: 'src/assets/images/favicon.png',
+ to: 'favicon.png',
+ },
+ ],
+ }),
+ new webpack.ProvidePlugin({
+ Buffer: ['buffer', 'Buffer'],
+ // process: 'process/browser',
+ }),
+ ].filter(Boolean),
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ loader: 'esbuild-loader',
+ exclude: /node_modules/,
+ options: {
+ loader: 'tsx',
+ target: 'es2018',
+ },
+ },
+ {
+ test: /\.(png|svg|jpg|gif|woff|woff2|eot|ttf|otf|ico)$/,
+ use: ['file-loader'],
+ },
+ ],
+ },
+ resolve: {
+ extensions: ['.tsx', '.ts', '.js'],
+ fallback: {
+ // stream: require.resolve('stream-browserify'),
+ // buffer: require.resolve('buffer/'),
+ },
+ },
+ output: {
+ filename: '[name].[contenthash].js',
+ path: path.resolve(__dirname, 'build'),
+ },
+ optimization: {
+ minimizer: [
+ new ESBuildMinifyPlugin({
+ target: 'es2018',
+ }),
+ ],
+ },
+ devServer: {
+ historyApiFallback: true,
+ host: '127.0.0.1',
+ liveReload: true,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ },
+ },
+ experiments: {
+ asyncWebAssembly: true,
+ },
+};
diff --git a/demos/taco-nft-demo/README.md b/demos/taco-nft-demo/README.md
new file mode 100644
index 000000000..0089830cd
--- /dev/null
+++ b/demos/taco-nft-demo/README.md
@@ -0,0 +1,31 @@
+# taco-nft-example
+
+## Installation
+
+```bash
+pnpm install
+pnpm start
+```
+
+## Usage
+
+In order to run this demo will need a MetaMask with an account funded with some
+$MATIC.
+
+In order to connect with the network, the demo uses a public instances of
+[Porter](https://docs.nucypher.com/en/latest/application_development/web_development.html#running-porter).
+
+### Polygon
+
+`@nucypher/taco` is in an early release. We recommend **not** using it in
+production _just yet_.
+
+### Tapir - Mumbai Testnet
+
+The current release of `@nucypher/taco` supports Ursulas working on Tapir
+network and contracts deployed on Mumbai testnet.
+
+## References
+
+This dApp is based on
+[`useDapp` example](https://github.com/EthWorks/useDapp/tree/master/packages/example).
diff --git a/demos/taco-nft-demo/package.json b/demos/taco-nft-demo/package.json
new file mode 100644
index 000000000..7dedd890c
--- /dev/null
+++ b/demos/taco-nft-demo/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "taco-nft-demo",
+ "version": "0.1.0",
+ "description": "A usage example for @nucypher/taco",
+ "private": true,
+ "author": "Piotr Rosłaniec ",
+ "scripts": {
+ "start": "webpack serve --mode development",
+ "build": "tsc --noEmit && rimraf build && webpack --mode production --progress"
+ },
+ "dependencies": {
+ "@nucypher/taco": "workspace:*",
+ "@usedapp/core": "^1.2.13",
+ "buffer": "^6.0.3",
+ "ethers": "^5.7.1",
+ "file-loader": "^6.2.0",
+ "react": "^18.2.0",
+ "react-copy-to-clipboard": "^5.1.0",
+ "react-dom": "^18.2.0",
+ "react-spinners": "^0.13.6"
+ },
+ "devDependencies": {
+ "@pmmmwh/react-refresh-webpack-plugin": "^0.5.7",
+ "@types/react": "^18.0.20",
+ "@types/react-copy-to-clipboard": "^5.0.4",
+ "@types/react-dom": "^18.0.6",
+ "copy-webpack-plugin": "^11.0.0",
+ "esbuild-loader": "^2.20.0",
+ "html-webpack-plugin": "^5.5.0",
+ "react-refresh": "^0.14.0",
+ "rimraf": "^3.0.2",
+ "stream-browserify": "^3.0.0",
+ "typescript": "^4.8.3",
+ "webpack": "^5.74.0",
+ "webpack-cli": "^4.10.0",
+ "webpack-dev-server": "^4.11.1"
+ }
+}
diff --git a/demos/taco-nft-demo/src/App.tsx b/demos/taco-nft-demo/src/App.tsx
new file mode 100644
index 000000000..b4df8c3ee
--- /dev/null
+++ b/demos/taco-nft-demo/src/App.tsx
@@ -0,0 +1,121 @@
+import {
+ conditions,
+ decrypt,
+ encrypt,
+ getPorterUri,
+ initialize,
+ ThresholdMessageKit,
+} from '@nucypher/taco';
+import {Mumbai, useEthers} from '@usedapp/core';
+import {ethers} from 'ethers';
+import React, {useEffect, useState} from 'react';
+
+import {Decrypt} from './Decrypt';
+import {Encrypt} from './Encrypt';
+import {NFTConditionBuilder} from './NFTConditionBuilder';
+import {Spinner} from './Spinner';
+
+export default function App() {
+ const {activateBrowserWallet, deactivate, account, switchNetwork } =
+ useEthers();
+
+ const [loading, setLoading] = useState(false);
+ const [condition, setCondition] = useState();
+ const [encryptedMessage, setEncryptedMessage] =
+ useState();
+ const [decryptedMessage, setDecryptedMessage] = useState();
+ const [decryptionErrors, setDecryptionErrors] = useState([]);
+ const [ritualId, setRitualId] = useState(2);
+
+ useEffect(() => {
+ initialize();
+ }, []);
+
+ const encryptMessage = async (message: string) => {
+ if (!condition) {
+ return;
+ }
+ setLoading(true);
+
+ await switchNetwork(Mumbai.chainId);
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum);
+ const encryptedMessage = await encrypt(
+ provider,
+ message,
+ condition,
+ ritualId,
+ provider.getSigner(),
+ );
+
+ setEncryptedMessage(encryptedMessage);
+ setLoading(false);
+ };
+
+ const decryptMessage = async (encryptedMessage: ThresholdMessageKit) => {
+ if (!condition) {
+ return;
+ }
+ setLoading(true);
+ setDecryptedMessage('');
+ setDecryptionErrors([]);
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum);
+ const porterUri = getPorterUri('lynx');
+ const decryptedMessage = await decrypt(
+ provider,
+ encryptedMessage,
+ provider.getSigner(),
+ porterUri,
+ );
+
+ setDecryptedMessage(new TextDecoder().decode(decryptedMessage));
+ setLoading(false);
+ };
+
+ if (!account) {
+ return (
+
+
Web3 Provider
+ activateBrowserWallet()}>Connect Wallet
+
+ );
+ }
+
+ if (loading) {
+ return ;
+ }
+
+ return (
+
+
+
Web3 Provider
+
Disconnect Wallet
+ {account &&
Account: {account}
}
+
+
+
Ritual ID
+
Replace with your own ritual ID
+
setRitualId(parseInt(e.currentTarget.value))} />
+
+
+
+
+
+
+
+ );
+}
diff --git a/demos/taco-nft-demo/src/Decrypt.tsx b/demos/taco-nft-demo/src/Decrypt.tsx
new file mode 100644
index 000000000..cd67027f0
--- /dev/null
+++ b/demos/taco-nft-demo/src/Decrypt.tsx
@@ -0,0 +1,76 @@
+import { ThresholdMessageKit } from '@nucypher/taco';
+import React, { useState } from 'react';
+
+interface Props {
+ enabled: boolean;
+ decrypt: (encryptedMessage: ThresholdMessageKit) => void;
+ decryptedMessage?: string | undefined;
+ decryptionErrors: string[];
+}
+
+export const Decrypt = ({
+ decrypt,
+ decryptedMessage,
+ decryptionErrors,
+ enabled,
+}: Props) => {
+ const [encryptedMessage, setEncryptedMessage] = useState('');
+
+ if (!enabled) {
+ return <>>;
+ }
+
+ const onDecrypt = () => {
+ if (!encryptedMessage) {
+ return;
+ }
+ const mkBytes = Buffer.from(encryptedMessage, 'base64');
+ const mk = ThresholdMessageKit.fromBytes(mkBytes);
+ decrypt(mk);
+ };
+
+ const DecryptedMessage = () => {
+ if (!decryptedMessage) {
+ return <>>;
+ }
+ return (
+ <>
+ Decrypted Message:
+ {decryptedMessage}
+ >
+ );
+ };
+
+ const DecryptionErrors = () => {
+ if (decryptionErrors.length === 0) {
+ return null;
+ }
+
+ return (
+
+
Decryption Errors
+
Not enough decryption shares to decrypt the message.
+
Some Ursulas have failed with errors:
+
+ {decryptionErrors.map((error, index) => (
+ {error}
+ ))}
+
+
+ );
+ };
+
+ return (
+
+
Step 3 - Decrypt Encrypted Message
+ setEncryptedMessage(e.currentTarget.value)}
+ />
+ Decrypt
+ {DecryptedMessage()}
+ {DecryptionErrors()}
+
+ );
+};
diff --git a/demos/taco-nft-demo/src/Encrypt.tsx b/demos/taco-nft-demo/src/Encrypt.tsx
new file mode 100644
index 000000000..35e64983b
--- /dev/null
+++ b/demos/taco-nft-demo/src/Encrypt.tsx
@@ -0,0 +1,54 @@
+import { ThresholdMessageKit } from '@nucypher/taco';
+import React, { useState } from 'react';
+import { CopyToClipboard } from 'react-copy-to-clipboard';
+
+interface Props {
+ enabled: boolean;
+ encryptedMessage?: ThresholdMessageKit;
+ encrypt: (value: string) => void;
+}
+
+export const Encrypt = ({ encrypt, encryptedMessage, enabled }: Props) => {
+ if (!enabled) {
+ return <>>;
+ }
+
+ const [plaintext, setPlaintext] = useState('plaintext');
+
+ const onClick = () => encrypt(plaintext);
+
+ const EncryptedMessageContent = () => {
+ if (!encryptedMessage) {
+ return <>>;
+ }
+
+ const encodedCiphertext = Buffer.from(encryptedMessage.toBytes()).toString(
+ 'base64',
+ );
+
+ return (
+ <>
+
+
Encrypted ciphertext:
+
{encodedCiphertext}
+
+ Copy to clipboard
+
+
+ >
+ );
+ };
+
+ return (
+
+
Step 2 - Set conditions and Encrypt a message
+ setPlaintext(e.currentTarget.value)}
+ />
+ Encrypt
+ {EncryptedMessageContent()}
+
+ );
+};
diff --git a/demos/taco-nft-demo/src/NFTConditionBuilder.tsx b/demos/taco-nft-demo/src/NFTConditionBuilder.tsx
new file mode 100644
index 000000000..82d019c4e
--- /dev/null
+++ b/demos/taco-nft-demo/src/NFTConditionBuilder.tsx
@@ -0,0 +1,122 @@
+import { conditions } from '@nucypher/taco';
+import { useEthers } from '@usedapp/core';
+import React, { useState } from 'react';
+
+interface Props {
+ condition?: conditions.Condition | undefined;
+ setConditions: (value: conditions.Condition) => void;
+ enabled: boolean;
+}
+
+export const NFTConditionBuilder = ({
+ condition,
+ setConditions,
+ enabled,
+}: Props) => {
+ const { library } = useEthers();
+ const goerliNFTAddress = '0x932Ca55B9Ef0b3094E8Fa82435b3b4c50d713043'; // https://goerli-nfts.vercel.app/
+ const [contractAddress, setContractAddress] = useState(goerliNFTAddress);
+ const [tokenId, setTokenId] = useState('');
+ const [chain, setChain] = useState(5);
+
+ if (!enabled || !library) {
+ return <>>;
+ }
+
+ const makeInput = (
+ onChange = (e: any) => console.log(e),
+ defaultValue?: string | number,
+ ) => (
+ onChange(e.target.value)}
+ defaultValue={defaultValue}
+ />
+ );
+
+ const makeChainInput = (
+ onChange = (e: any) => console.log(e),
+ defaultValue?: number,
+ ) => (
+ onChange(Number.parseInt(e.target.value))}
+ defaultValue={defaultValue}
+ />
+ );
+
+ const contractAddressInput = makeInput(setContractAddress, goerliNFTAddress);
+ const tokenIdInput = makeInput(setTokenId);
+ const chainInput = makeChainInput(setChain, 5);
+
+ const makeCondition = (): conditions.Condition => {
+ if (tokenId) {
+ return new conditions.ContractCondition({
+ conditionType: 'contract',
+ contractAddress,
+ chain,
+ standardContractType: 'ERC721',
+ method: 'ownerOf',
+ parameters: [parseInt(tokenId, 10)],
+ returnValueTest: {
+ comparator: '==',
+ value: ':userAddress',
+ },
+ });
+ }
+ return new conditions.ContractCondition({
+ conditionType: 'contract',
+ contractAddress,
+ chain,
+ standardContractType: 'ERC721',
+ method: 'balanceOf',
+ parameters: [':userAddress'],
+ returnValueTest: {
+ comparator: '>',
+ value: '0',
+ },
+ });
+ };
+
+ const onCreateCondition = (e: any) => {
+ e.preventDefault();
+ setConditions(makeCondition());
+ };
+
+ const prettyPrint = (obj: object | string) => {
+ if (typeof obj === 'string') {
+ obj = JSON.parse(obj);
+ }
+ return JSON.stringify(obj, null, 2);
+ };
+
+ return (
+ <>
+ Step 1 - Create A Conditioned Access Policy
+
+
+
Customize your NFT-Condition
+
+
+ You can mint an NFT{' '}
+ here or use your own
+ contract.
+
+
+
+
ERC721 Contract Address {contractAddressInput}
+
(Optional) TokenId {tokenIdInput}
+
Chain Id {chainInput}
+
+
Create Conditions
+
+ {condition && (
+
+
Condition JSON:
+
+
+ )}
+
+ >
+ );
+};
diff --git a/demos/taco-nft-demo/src/Spinner.tsx b/demos/taco-nft-demo/src/Spinner.tsx
new file mode 100644
index 000000000..d8a14fbb3
--- /dev/null
+++ b/demos/taco-nft-demo/src/Spinner.tsx
@@ -0,0 +1,23 @@
+import type { CSSProperties } from 'react';
+import React from 'react';
+import ClipLoader from 'react-spinners/ClipLoader';
+
+interface Props {
+ loading: boolean;
+}
+
+export const Spinner = ({ loading }: Props) => {
+ const style: CSSProperties = {
+ position: 'fixed',
+ top: '50%',
+ left: '50%',
+ transform: 'translate(-50%, -50%)',
+ textAlign: 'center',
+ };
+ return (
+
+
Loading
+
+
+ );
+};
diff --git a/demos/taco-nft-demo/src/_redirects b/demos/taco-nft-demo/src/_redirects
new file mode 100644
index 000000000..ad37e2c2c
--- /dev/null
+++ b/demos/taco-nft-demo/src/_redirects
@@ -0,0 +1 @@
+/* /index.html 200
diff --git a/demos/taco-nft-demo/src/assets/images/favicon.png b/demos/taco-nft-demo/src/assets/images/favicon.png
new file mode 100644
index 000000000..4c849e1f7
Binary files /dev/null and b/demos/taco-nft-demo/src/assets/images/favicon.png differ
diff --git a/demos/taco-nft-demo/src/index.html b/demos/taco-nft-demo/src/index.html
new file mode 100644
index 000000000..c17ac7729
--- /dev/null
+++ b/demos/taco-nft-demo/src/index.html
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+ React App
+
+
+
+ You need to enable JavaScript to run this app.
+
+
+
+
diff --git a/demos/taco-nft-demo/src/index.tsx b/demos/taco-nft-demo/src/index.tsx
new file mode 100644
index 000000000..2a85089c7
--- /dev/null
+++ b/demos/taco-nft-demo/src/index.tsx
@@ -0,0 +1,20 @@
+import { Config, DAppProvider, Mumbai } from '@usedapp/core';
+import React, { StrictMode } from 'react';
+import * as ReactDOMClient from 'react-dom/client';
+
+import App from './App';
+
+const config: Config = {
+ networks: [Mumbai],
+};
+const rootElement = document.getElementById('root');
+
+if (rootElement) {
+ ReactDOMClient.createRoot(rootElement).render(
+
+
+
+
+ ,
+ );
+}
diff --git a/demos/taco-nft-demo/src/react-app-env.d.ts b/demos/taco-nft-demo/src/react-app-env.d.ts
new file mode 100644
index 000000000..4e39a38ad
--- /dev/null
+++ b/demos/taco-nft-demo/src/react-app-env.d.ts
@@ -0,0 +1,5 @@
+///
+
+interface Window {
+ ethereum: any;
+}
diff --git a/demos/taco-nft-demo/tsconfig.json b/demos/taco-nft-demo/tsconfig.json
new file mode 100644
index 000000000..6b7fb0d09
--- /dev/null
+++ b/demos/taco-nft-demo/tsconfig.json
@@ -0,0 +1,16 @@
+{
+ "extends": "../../tsconfig.json",
+ "include": ["src", "types"],
+ "compilerOptions": {
+ "jsx": "react",
+ "noEmit": true,
+ "resolveJsonModule": true,
+ "esModuleInterop": true,
+ "skipLibCheck": true
+ },
+ "references": [
+ {
+ "path": "../../packages/taco/tsconfig.es.json"
+ }
+ ]
+}
diff --git a/demos/taco-nft-demo/webpack.config.js b/demos/taco-nft-demo/webpack.config.js
new file mode 100644
index 000000000..b6f51698d
--- /dev/null
+++ b/demos/taco-nft-demo/webpack.config.js
@@ -0,0 +1,78 @@
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+const CopyPlugin = require('copy-webpack-plugin');
+const { ESBuildMinifyPlugin } = require('esbuild-loader');
+const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
+const webpack = require('webpack');
+
+const isDevelopment = process.env.NODE_ENV !== 'production';
+
+module.exports = {
+ entry: './src',
+ devtool: isDevelopment ? 'eval-source-map' : 'source-map',
+ plugins: [
+ isDevelopment && new ReactRefreshWebpackPlugin(),
+ new HtmlWebpackPlugin({
+ template: './src/index.html',
+ }),
+ new CopyPlugin({
+ patterns: [
+ { from: 'src/_redirects', to: '' },
+ {
+ from: 'src/assets/images/favicon.png',
+ to: 'favicon.png',
+ },
+ ],
+ }),
+ new webpack.ProvidePlugin({
+ Buffer: ['buffer', 'Buffer'],
+ // process: 'process/browser',
+ }),
+ ].filter(Boolean),
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ loader: 'esbuild-loader',
+ exclude: /node_modules/,
+ options: {
+ loader: 'tsx',
+ target: 'es2018',
+ },
+ },
+ {
+ test: /\.(png|svg|jpg|gif|woff|woff2|eot|ttf|otf|ico)$/,
+ use: ['file-loader'],
+ },
+ ],
+ },
+ resolve: {
+ extensions: ['.tsx', '.ts', '.js'],
+ fallback: {
+ // stream: require.resolve('stream-browserify'),
+ // buffer: require.resolve('buffer/'),
+ },
+ },
+ output: {
+ filename: '[name].[contenthash].js',
+ path: path.resolve(__dirname, 'build'),
+ },
+ optimization: {
+ minimizer: [
+ new ESBuildMinifyPlugin({
+ target: 'es2018',
+ }),
+ ],
+ },
+ devServer: {
+ historyApiFallback: true,
+ host: '127.0.0.1',
+ liveReload: true,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ },
+ },
+ experiments: {
+ asyncWebAssembly: true,
+ },
+};
diff --git a/examples/README.md b/examples/README.md
index b6fa68da7..424eaeb32 100644
--- a/examples/README.md
+++ b/examples/README.md
@@ -2,3 +2,6 @@
This directory contains a set of examples showing how to integrate `@nucypher/*`
into your application.
+
+Refer to `./taco` for examples of how to use the `@nucypher/taco` package.
+Refer to `./pre` for examples of how to use the `@nucypher/pre` package.
diff --git a/examples/nodejs/README.md b/examples/nodejs/README.md
deleted file mode 100644
index 3a0a4278c..000000000
--- a/examples/nodejs/README.md
+++ /dev/null
@@ -1,10 +0,0 @@
-# `nodejs` integration example
-
-Shows how to use `@nucypher/*` in NodeJS.
-
-## Usage
-
-```bash
-pnpm install
-pnpm start
-```
diff --git a/examples/nextjs/.eslintrc.json b/examples/pre/nextjs/.eslintrc.json
similarity index 100%
rename from examples/nextjs/.eslintrc.json
rename to examples/pre/nextjs/.eslintrc.json
diff --git a/examples/nextjs/.gitignore b/examples/pre/nextjs/.gitignore
similarity index 100%
rename from examples/nextjs/.gitignore
rename to examples/pre/nextjs/.gitignore
diff --git a/examples/nextjs/README.md b/examples/pre/nextjs/README.md
similarity index 100%
rename from examples/nextjs/README.md
rename to examples/pre/nextjs/README.md
diff --git a/examples/pre/nextjs/next-env.d.ts b/examples/pre/nextjs/next-env.d.ts
new file mode 100644
index 000000000..4f11a03dc
--- /dev/null
+++ b/examples/pre/nextjs/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/examples/nextjs/next.config.js b/examples/pre/nextjs/next.config.js
similarity index 100%
rename from examples/nextjs/next.config.js
rename to examples/pre/nextjs/next.config.js
diff --git a/examples/nextjs/package.json b/examples/pre/nextjs/package.json
similarity index 88%
rename from examples/nextjs/package.json
rename to examples/pre/nextjs/package.json
index 92ac6853f..1d88e022a 100644
--- a/examples/nextjs/package.json
+++ b/examples/pre/nextjs/package.json
@@ -9,7 +9,7 @@
"type-check": "tsc -p tsconfig.build.json"
},
"dependencies": {
- "@nucypher/shared": "workspace:*",
+ "@nucypher/pre": "workspace:*",
"@types/node": "20.6.3",
"@types/react": "18.2.22",
"@types/react-dom": "18.2.7",
@@ -22,7 +22,6 @@
"typescript": "5.2.2"
},
"peerDependencies": {
- "@nucypher/shared": "workspace:*",
"ethers": "^5.7.2",
"typescript": "5.2.2"
}
diff --git a/examples/nextjs/src/app/layout.tsx b/examples/pre/nextjs/src/app/layout.tsx
similarity index 100%
rename from examples/nextjs/src/app/layout.tsx
rename to examples/pre/nextjs/src/app/layout.tsx
diff --git a/examples/nextjs/src/app/page.tsx b/examples/pre/nextjs/src/app/page.tsx
similarity index 97%
rename from examples/nextjs/src/app/page.tsx
rename to examples/pre/nextjs/src/app/page.tsx
index 31d9300c9..79648862b 100644
--- a/examples/nextjs/src/app/page.tsx
+++ b/examples/pre/nextjs/src/app/page.tsx
@@ -7,7 +7,7 @@ import {
initialize,
SecretKey,
toHexString,
-} from '@nucypher/shared';
+} from '@nucypher/pre';
import {ethers} from 'ethers';
import {useEffect, useState} from 'react';
@@ -56,8 +56,6 @@ function App() {
return Loading...
;
}
- console.log({Alice, Bob, getPorterUri, SecretKey, toHexString});
-
const makeAlice = () => {
const alice = Alice.fromSecretKey(SecretKey.random());
setAlice(alice);
diff --git a/examples/nextjs/tsconfig.build.json b/examples/pre/nextjs/tsconfig.build.json
similarity index 76%
rename from examples/nextjs/tsconfig.build.json
rename to examples/pre/nextjs/tsconfig.build.json
index ec9b2cb72..bca9966f8 100644
--- a/examples/nextjs/tsconfig.build.json
+++ b/examples/pre/nextjs/tsconfig.build.json
@@ -8,7 +8,7 @@
},
"references": [
{
- "path": "../../packages/shared/tsconfig.es.json"
+ "path": "../../../packages/pre/tsconfig.es.json"
}
]
}
diff --git a/examples/nextjs/tsconfig.json b/examples/pre/nextjs/tsconfig.json
similarity index 100%
rename from examples/nextjs/tsconfig.json
rename to examples/pre/nextjs/tsconfig.json
diff --git a/examples/pre/nodejs/.env.example b/examples/pre/nodejs/.env.example
new file mode 100644
index 000000000..5c9041014
--- /dev/null
+++ b/examples/pre/nodejs/.env.example
@@ -0,0 +1,2 @@
+RPC_PROVIDER_URL=
+PRIVATE_KEY=
diff --git a/examples/pre/nodejs/README.md b/examples/pre/nodejs/README.md
new file mode 100644
index 000000000..3bce6d079
--- /dev/null
+++ b/examples/pre/nodejs/README.md
@@ -0,0 +1,20 @@
+# `nodejs-pre` integration example
+
+Shows how to use `@nucypher/pre in Node.js.
+
+## Setup
+
+Setup environment variables:
+
+```bash
+cp .env.example .env
+```
+
+Update `.env` with your values.
+
+## Usage
+
+```bash
+pnpm install
+pnpm start
+```
diff --git a/examples/nodejs/package.json b/examples/pre/nodejs/package.json
similarity index 76%
rename from examples/nodejs/package.json
rename to examples/pre/nodejs/package.json
index a6dc3930c..2516c1e6f 100644
--- a/examples/nodejs/package.json
+++ b/examples/pre/nodejs/package.json
@@ -9,7 +9,10 @@
"type-check": "tsc"
},
"dependencies": {
- "@nucypher/shared": "workspace:*",
+ "@nucypher/pre": "workspace:*",
+ "dotenv": "^16.3.1"
+ },
+ "peerDependencies": {
"ethers": "^5.7.2"
}
}
diff --git a/examples/nodejs/src/index.ts b/examples/pre/nodejs/src/index.ts
similarity index 63%
rename from examples/nodejs/src/index.ts
rename to examples/pre/nodejs/src/index.ts
index ed6680dff..7cb42d360 100644
--- a/examples/nodejs/src/index.ts
+++ b/examples/pre/nodejs/src/index.ts
@@ -5,9 +5,22 @@ import {
initialize,
SecretKey,
toBytes,
-} from '@nucypher/shared';
+} from '@nucypher/pre';
+import * as dotenv from 'dotenv';
import { ethers } from 'ethers';
+dotenv.config();
+
+const rpcProviderUrl = process.env.RPC_PROVIDER_URL;
+if (!rpcProviderUrl) {
+ throw new Error('RPC_PROVIDER_URL is not set.');
+}
+
+const privateKey = process.env.PRIVATE_KEY;
+if (!privateKey) {
+ throw new Error('PRIVATE_KEY is not set.');
+}
+
const makeAlice = () => {
const secretKey = SecretKey.fromBEBytes(
toBytes('fake-secret-key-32-bytes-alice-x'),
@@ -35,30 +48,21 @@ const getRandomLabel = () => `label-${new Date().getTime()}`;
const runExample = async () => {
await initialize();
- const provider = ethers.Wallet.createRandom();
-
- const remoteBob = makeRemoteBob();
- const threshold = 2;
- const shares = 3;
- const startDate = new Date();
- const endDate = new Date(Date.now() + 1000 * 60 * 60 * 24 * 30); // In 30 days
+ const provider = new ethers.providers.JsonRpcProvider(rpcProviderUrl);
+ const signer = new ethers.Wallet(privateKey);
const policyParams = {
- bob: remoteBob,
+ bob: makeRemoteBob(),
label: getRandomLabel(),
- threshold,
- shares,
- startDate,
- endDate,
+ threshold: 2,
+ shares: 3,
+ startDate: new Date(),
+ endDate: new Date(Date.now() + 1000 * 60 * 60 * 24 * 30), // In 30 days,
};
const porterUri = getPorterUri('tapir'); // Test network
-
const alice = makeAlice();
- const policy = await alice.grant(
- provider.provider,
- provider,
- porterUri,
- policyParams,
- );
+
+ console.log('Creating policy...');
+ const policy = await alice.grant(provider, signer, porterUri, policyParams);
console.log('Policy created:');
console.log({ policy });
diff --git a/examples/pre/nodejs/tsconfig.json b/examples/pre/nodejs/tsconfig.json
new file mode 100644
index 000000000..08684819c
--- /dev/null
+++ b/examples/pre/nodejs/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "outDir": "dist",
+ "rootDir": "src",
+ "noEmit": true
+ },
+ "references": [
+ {
+ "path": "../../../packages/pre/tsconfig.cjs.json"
+ }
+ ]
+}
diff --git a/examples/react/README.md b/examples/pre/react/README.md
similarity index 76%
rename from examples/react/README.md
rename to examples/pre/react/README.md
index f9e056b2a..10eab57c5 100644
--- a/examples/react/README.md
+++ b/examples/pre/react/README.md
@@ -1,6 +1,6 @@
-# `react-craco` integration example
+# `react-pre` integration example
-Shows how to integrate `@nucypher/*` into a React application.
+Shows how to integrate `@nucypher/pre` into a React application.
In order to load WASM dependencies of `@nucypher/*`, we override the
`react-scripts` configuration with `craco`. For more details, see the
diff --git a/examples/react/package.json b/examples/pre/react/package.json
similarity index 89%
rename from examples/react/package.json
rename to examples/pre/react/package.json
index cefe60b36..513cd7e60 100644
--- a/examples/react/package.json
+++ b/examples/pre/react/package.json
@@ -23,8 +23,7 @@
]
},
"dependencies": {
- "@nucypher/shared": "workspace:*",
- "ethers": "^5.7.2",
+ "@nucypher/pre": "workspace:*",
"react": "^18.2.0",
"react-dom": "^18.2.0"
},
@@ -33,5 +32,8 @@
"@types/react": "^18.2.21",
"@types/react-dom": "^18.2.7",
"react-scripts": "^5.0.1"
+ },
+ "peerDependencies": {
+ "ethers": "^5.7.2"
}
}
diff --git a/examples/react/public/favicon.ico b/examples/pre/react/public/favicon.ico
similarity index 100%
rename from examples/react/public/favicon.ico
rename to examples/pre/react/public/favicon.ico
diff --git a/examples/react/public/index.html b/examples/pre/react/public/index.html
similarity index 100%
rename from examples/react/public/index.html
rename to examples/pre/react/public/index.html
diff --git a/examples/react/public/logo192.png b/examples/pre/react/public/logo192.png
similarity index 100%
rename from examples/react/public/logo192.png
rename to examples/pre/react/public/logo192.png
diff --git a/examples/react/public/logo512.png b/examples/pre/react/public/logo512.png
similarity index 100%
rename from examples/react/public/logo512.png
rename to examples/pre/react/public/logo512.png
diff --git a/examples/react/public/manifest.json b/examples/pre/react/public/manifest.json
similarity index 100%
rename from examples/react/public/manifest.json
rename to examples/pre/react/public/manifest.json
diff --git a/examples/react/public/robots.txt b/examples/pre/react/public/robots.txt
similarity index 100%
rename from examples/react/public/robots.txt
rename to examples/pre/react/public/robots.txt
diff --git a/examples/react/src/App.tsx b/examples/pre/react/src/App.tsx
similarity index 92%
rename from examples/react/src/App.tsx
rename to examples/pre/react/src/App.tsx
index c08220141..d4901ad2b 100644
--- a/examples/react/src/App.tsx
+++ b/examples/pre/react/src/App.tsx
@@ -6,7 +6,7 @@ import {
initialize,
SecretKey,
toHexString,
-} from '@nucypher/shared';
+} from '@nucypher/pre';
import { ethers } from 'ethers';
import { useEffect, useState } from 'react';
@@ -30,13 +30,9 @@ function App() {
}
const provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
- const {chainId} = await provider.getNetwork();
- if (chainId !== 80001) {
- // Switch to Matic Mumbai testnet
- await window.ethereum.request({
- method: 'wallet_switchEthereumChain',
- params: [{chainId: '0x13881'}],
- });
+ const { chainId } = await provider.getNetwork();
+ if (![137, 80001].includes(chainId)) {
+ console.error('You need to connect to the Mumbai or Polygon network');
}
await provider.send('eth_requestAccounts', []);
diff --git a/examples/react/src/index.tsx b/examples/pre/react/src/index.tsx
similarity index 100%
rename from examples/react/src/index.tsx
rename to examples/pre/react/src/index.tsx
diff --git a/examples/react/src/react-app-env.d.ts b/examples/pre/react/src/react-app-env.d.ts
similarity index 100%
rename from examples/react/src/react-app-env.d.ts
rename to examples/pre/react/src/react-app-env.d.ts
diff --git a/examples/react/tsconfig.build.json b/examples/pre/react/tsconfig.build.json
similarity index 76%
rename from examples/react/tsconfig.build.json
rename to examples/pre/react/tsconfig.build.json
index ec9b2cb72..bca9966f8 100644
--- a/examples/react/tsconfig.build.json
+++ b/examples/pre/react/tsconfig.build.json
@@ -8,7 +8,7 @@
},
"references": [
{
- "path": "../../packages/shared/tsconfig.es.json"
+ "path": "../../../packages/pre/tsconfig.es.json"
}
]
}
diff --git a/examples/react/tsconfig.json b/examples/pre/react/tsconfig.json
similarity index 100%
rename from examples/react/tsconfig.json
rename to examples/pre/react/tsconfig.json
diff --git a/examples/pre/webpack-5/README.md b/examples/pre/webpack-5/README.md
new file mode 100644
index 000000000..8e5b61600
--- /dev/null
+++ b/examples/pre/webpack-5/README.md
@@ -0,0 +1,12 @@
+# `webpack-5` integration example
+
+Shows how to integrate `@nucypher/taco` with Webpack 5.
+
+## Usage
+
+```bash
+pnpm install
+pnpm start
+```
+
+Go to [localhost:8080](http://localhost:8080/) in your browser and look in the JS console.
diff --git a/examples/webpack-5/package.json b/examples/pre/webpack-5/package.json
similarity index 90%
rename from examples/webpack-5/package.json
rename to examples/pre/webpack-5/package.json
index c07997c2b..640d02886 100644
--- a/examples/webpack-5/package.json
+++ b/examples/pre/webpack-5/package.json
@@ -11,8 +11,7 @@
"type-check": "tsc"
},
"dependencies": {
- "@nucypher/shared": "workspace:*",
- "ethers": "^5.7.2"
+ "@nucypher/pre": "workspace:*"
},
"devDependencies": {
"copy-webpack-plugin": "^10.2.4",
@@ -20,5 +19,8 @@
"webpack": "^5.4.0",
"webpack-cli": "^4.9.2",
"webpack-dev-server": "^4.7.4"
+ },
+ "peerDependencies": {
+ "ethers": "^5.7.2"
}
}
diff --git a/examples/webpack-5/src/index.html b/examples/pre/webpack-5/src/index.html
similarity index 100%
rename from examples/webpack-5/src/index.html
rename to examples/pre/webpack-5/src/index.html
diff --git a/examples/webpack-5/src/index.ts b/examples/pre/webpack-5/src/index.ts
similarity index 85%
rename from examples/webpack-5/src/index.ts
rename to examples/pre/webpack-5/src/index.ts
index 057317a03..3417a426d 100644
--- a/examples/webpack-5/src/index.ts
+++ b/examples/pre/webpack-5/src/index.ts
@@ -1,10 +1,4 @@
-import {
- Alice,
- Bob,
- SecretKey,
- getPorterUri,
- initialize,
-} from '@nucypher/shared';
+import { Alice, Bob, SecretKey, getPorterUri, initialize } from '@nucypher/pre';
import { ethers } from 'ethers';
declare global {
@@ -51,15 +45,6 @@ const runExample = async () => {
const provider = new ethers.providers.Web3Provider(window.ethereum!, 'any');
await provider.send('eth_requestAccounts', []);
- const { chainId } = await provider.getNetwork();
- if (chainId !== 80001) {
- // Switch to Matic Mumbai testnet
- await window.ethereum!.request!({
- method: 'wallet_switchEthereumChain',
- params: [{ chainId: '0x13881' }],
- });
- }
-
const remoteBob = makeRemoteBob();
const threshold = 2;
const shares = 3;
diff --git a/examples/pre/webpack-5/tsconfig.json b/examples/pre/webpack-5/tsconfig.json
new file mode 100644
index 000000000..e0e8b8a09
--- /dev/null
+++ b/examples/pre/webpack-5/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "noEmit": true
+ },
+ "references": [
+ {
+ "path": "../../../packages/pre/tsconfig.es.json"
+ }
+ ]
+}
diff --git a/examples/webpack-5/webpack.config.js b/examples/pre/webpack-5/webpack.config.js
similarity index 100%
rename from examples/webpack-5/webpack.config.js
rename to examples/pre/webpack-5/webpack.config.js
diff --git a/examples/taco/nextjs/.eslintrc.json b/examples/taco/nextjs/.eslintrc.json
new file mode 100644
index 000000000..bffb357a7
--- /dev/null
+++ b/examples/taco/nextjs/.eslintrc.json
@@ -0,0 +1,3 @@
+{
+ "extends": "next/core-web-vitals"
+}
diff --git a/examples/taco/nextjs/.gitignore b/examples/taco/nextjs/.gitignore
new file mode 100644
index 000000000..8f322f0d8
--- /dev/null
+++ b/examples/taco/nextjs/.gitignore
@@ -0,0 +1,35 @@
+# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
+
+# dependencies
+/node_modules
+/.pnp
+.pnp.js
+
+# testing
+/coverage
+
+# next.js
+/.next/
+/out/
+
+# production
+/build
+
+# misc
+.DS_Store
+*.pem
+
+# debug
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# local env files
+.env*.local
+
+# vercel
+.vercel
+
+# typescript
+*.tsbuildinfo
+next-env.d.ts
diff --git a/examples/taco/nextjs/README.md b/examples/taco/nextjs/README.md
new file mode 100644
index 000000000..96f8f3210
--- /dev/null
+++ b/examples/taco/nextjs/README.md
@@ -0,0 +1,48 @@
+This is a [Next.js](https://nextjs.org/) project bootstrapped with
+[`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).
+
+## Getting Started
+
+First, run the development server:
+
+```bash
+npm run dev
+# or
+yarn dev
+# or
+pnpm dev
+# or
+bun dev
+```
+
+Open [http://localhost:3000](http://localhost:3000) with your browser to see the
+result.
+
+You can start editing the page by modifying `app/page.tsx`. The page
+auto-updates as you edit the file.
+
+This project uses
+[`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to
+automatically optimize and load Inter, a custom Google Font.
+
+## Learn More
+
+To learn more about Next.js, take a look at the following resources:
+
+- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js
+ features and API.
+- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.
+
+You can check out
+[the Next.js GitHub repository](https://github.com/vercel/next.js/) - your
+feedback and contributions are welcome!
+
+## Deploy on Vercel
+
+The easiest way to deploy your Next.js app is to use the
+[Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme)
+from the creators of Next.js.
+
+Check out our
+[Next.js deployment documentation](https://nextjs.org/docs/deployment) for more
+details.
diff --git a/examples/taco/nextjs/next-env.d.ts b/examples/taco/nextjs/next-env.d.ts
new file mode 100644
index 000000000..4f11a03dc
--- /dev/null
+++ b/examples/taco/nextjs/next-env.d.ts
@@ -0,0 +1,5 @@
+///
+///
+
+// NOTE: This file should not be edited
+// see https://nextjs.org/docs/basic-features/typescript for more information.
diff --git a/examples/taco/nextjs/next.config.js b/examples/taco/nextjs/next.config.js
new file mode 100644
index 000000000..658404ac6
--- /dev/null
+++ b/examples/taco/nextjs/next.config.js
@@ -0,0 +1,4 @@
+/** @type {import('next').NextConfig} */
+const nextConfig = {};
+
+module.exports = nextConfig;
diff --git a/examples/taco/nextjs/package.json b/examples/taco/nextjs/package.json
new file mode 100644
index 000000000..8653afefe
--- /dev/null
+++ b/examples/taco/nextjs/package.json
@@ -0,0 +1,28 @@
+{
+ "private": true,
+ "scripts": {
+ "build": "next build",
+ "check": "pnpm lint && pnpm type-check && pnpm build",
+ "dev": "next dev",
+ "lint": "next lint",
+ "start": "next start",
+ "type-check": "tsc -p tsconfig.build.json"
+ },
+ "dependencies": {
+ "@nucypher/taco": "workspace:*",
+ "@types/node": "20.6.3",
+ "@types/react": "18.2.22",
+ "@types/react-dom": "18.2.7",
+ "eslint": "8.49.0",
+ "eslint-config-next": "13.5.2",
+ "ethers": "^5.7.2",
+ "next": "13.5.2",
+ "react": "18.2.0",
+ "react-dom": "18.2.0",
+ "typescript": "5.2.2"
+ },
+ "peerDependencies": {
+ "ethers": "^5.7.2",
+ "typescript": "5.2.2"
+ }
+}
diff --git a/examples/taco/nextjs/src/app/layout.tsx b/examples/taco/nextjs/src/app/layout.tsx
new file mode 100644
index 000000000..215ca6cb7
--- /dev/null
+++ b/examples/taco/nextjs/src/app/layout.tsx
@@ -0,0 +1,21 @@
+import type { Metadata } from 'next';
+import { Inter } from 'next/font/google';
+
+const inter = Inter({ subsets: ['latin'] });
+
+export const metadata: Metadata = {
+ title: 'Create Next App',
+ description: 'Generated by create next app',
+};
+
+export default function RootLayout({
+ children,
+}: {
+ children: React.ReactNode;
+}) {
+ return (
+
+ {children}
+
+ );
+}
diff --git a/examples/taco/nextjs/src/app/page.tsx b/examples/taco/nextjs/src/app/page.tsx
new file mode 100644
index 000000000..c9bcea875
--- /dev/null
+++ b/examples/taco/nextjs/src/app/page.tsx
@@ -0,0 +1,107 @@
+'use client';
+import {
+ conditions,
+ decrypt,
+ encrypt, fromBytes,
+ getPorterUri,
+ initialize,
+} from '@nucypher/taco';
+import {ethers} from 'ethers';
+import {useEffect, useState} from 'react';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+declare const window: any;
+
+const message = 'this is a secret';
+
+function App() {
+ const [isInit, setIsInit] = useState(false);
+ const [provider, setProvider] = useState<
+ ethers.providers.Web3Provider | undefined
+ >();
+ const [decryptedMessage, setDecryptedMessage] = useState("");
+
+ const initNucypher = async () => {
+ await initialize();
+ setIsInit(true);
+ };
+
+ const loadWeb3Provider = async () => {
+ if (!window.ethereum) {
+ console.error('You need to connect to the MetaMask extension');
+ }
+ const provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
+
+ const {chainId} = await provider.getNetwork();
+ if (chainId !== 80001) {
+ // Switch to Matic Mumbai testnet
+ await window.ethereum.request({
+ method: 'wallet_switchEthereumChain',
+ params: [{chainId: '0x13881'}],
+ });
+ }
+
+ await provider.send('eth_requestAccounts', []);
+ setProvider(provider);
+ };
+
+ useEffect(() => {
+ initNucypher();
+ loadWeb3Provider();
+ }, []);
+
+ if (!isInit || !provider) {
+ return Loading...
;
+ }
+
+ const runExample = async () => {
+ if (!window.ethereum) {
+ console.error('You need to connect to the MetaMask extension');
+ }
+
+ await initialize();
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum!, 'any');
+ await provider.send('eth_requestAccounts', []);
+ const signer = provider.getSigner();
+
+ const {chainId} = await provider.getNetwork();
+ if (chainId !== 80001) {
+ // Switch to Matic Mumbai testnet
+ await window.ethereum!.request!({
+ method: 'wallet_switchEthereumChain',
+ params: [{chainId: '0x13881'}],
+ });
+ }
+
+ console.log('Encrypting message...');
+ const hasPositiveBalance = new conditions.RpcCondition({
+ conditionType: 'rpc',
+ chain: 5,
+ method: 'eth_getBalance',
+ parameters: [':userAddress', 'latest'],
+ returnValueTest: {
+ comparator: '>',
+ value: 0,
+ },
+ });
+ const ritualId = 2; // Replace with your own ritual ID
+ const messageKit = await encrypt(provider, message, hasPositiveBalance, ritualId, signer);
+
+ console.log('Decrypting message...');
+ const porterUri = getPorterUri('lynx'); // Test network
+ const decryptedMessage = await decrypt(provider, messageKit, signer, porterUri);
+
+ setDecryptedMessage(fromBytes(decryptedMessage));
+ };
+
+ return (
+
+
Secret message: {message}
+ {(decryptedMessage && Decrypted message: {decryptedMessage} )}
+ Run example
+
+ );
+}
+
+export default App;
diff --git a/examples/nodejs/tsconfig.json b/examples/taco/nextjs/tsconfig.build.json
similarity index 62%
rename from examples/nodejs/tsconfig.json
rename to examples/taco/nextjs/tsconfig.build.json
index 681ec7de2..22ff2bd0b 100644
--- a/examples/nodejs/tsconfig.json
+++ b/examples/taco/nextjs/tsconfig.build.json
@@ -1,5 +1,5 @@
{
- "extends": "../../tsconfig.json",
+ "extends": "./tsconfig.json",
"include": ["src"],
"compilerOptions": {
"outDir": "dist",
@@ -8,7 +8,7 @@
},
"references": [
{
- "path": "../../packages/shared/tsconfig.cjs.json"
+ "path": "../../../packages/taco/tsconfig.es.json"
}
]
}
diff --git a/examples/taco/nextjs/tsconfig.json b/examples/taco/nextjs/tsconfig.json
new file mode 100644
index 000000000..e59724b28
--- /dev/null
+++ b/examples/taco/nextjs/tsconfig.json
@@ -0,0 +1,27 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "strict": true,
+ "noEmit": true,
+ "esModuleInterop": true,
+ "module": "esnext",
+ "moduleResolution": "bundler",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "jsx": "preserve",
+ "incremental": true,
+ "plugins": [
+ {
+ "name": "next"
+ }
+ ],
+ "paths": {
+ "@/*": ["./src/*"]
+ }
+ },
+ "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
+ "exclude": ["node_modules"]
+}
diff --git a/examples/taco/nodejs/.env.example b/examples/taco/nodejs/.env.example
new file mode 100644
index 000000000..5c9041014
--- /dev/null
+++ b/examples/taco/nodejs/.env.example
@@ -0,0 +1,2 @@
+RPC_PROVIDER_URL=
+PRIVATE_KEY=
diff --git a/examples/taco/nodejs/README.md b/examples/taco/nodejs/README.md
new file mode 100644
index 000000000..a1fd6843e
--- /dev/null
+++ b/examples/taco/nodejs/README.md
@@ -0,0 +1,20 @@
+# `nodejs-taco` integration example
+
+Shows how to use `@nucypher/taco` in Node.js.
+
+## Setup
+
+Setup environment variables:
+
+```bash
+cp .env.example .env
+```
+
+Update `.env` with your values.
+
+## Usage
+
+```bash
+pnpm install
+pnpm start
+```
diff --git a/examples/taco/nodejs/package.json b/examples/taco/nodejs/package.json
new file mode 100644
index 000000000..8c4ba4a73
--- /dev/null
+++ b/examples/taco/nodejs/package.json
@@ -0,0 +1,18 @@
+{
+ "version": "0.1.0",
+ "private": true,
+ "license": "GPL-3.0-only",
+ "author": "Piotr Rosłaniec ",
+ "scripts": {
+ "check": "pnpm type-check",
+ "start": "ts-node src/index.ts",
+ "type-check": "tsc"
+ },
+ "dependencies": {
+ "@nucypher/taco": "workspace:*",
+ "dotenv": "^16.3.1"
+ },
+ "peerDependencies": {
+ "ethers": "^5.7.2"
+ }
+}
diff --git a/examples/taco/nodejs/src/index.ts b/examples/taco/nodejs/src/index.ts
new file mode 100644
index 000000000..ad00311b5
--- /dev/null
+++ b/examples/taco/nodejs/src/index.ts
@@ -0,0 +1,71 @@
+import {
+ conditions,
+ decrypt,
+ encrypt,
+ fromBytes,
+ getPorterUri,
+ initialize,
+ toBytes,
+} from '@nucypher/taco';
+import * as dotenv from 'dotenv';
+import { ethers } from 'ethers';
+
+dotenv.config();
+
+const rpcProviderUrl = process.env.RPC_PROVIDER_URL;
+if (!rpcProviderUrl) {
+ throw new Error('RPC_PROVIDER_URL is not set.');
+}
+
+const privateKey = process.env.PRIVATE_KEY;
+if (!privateKey) {
+ throw new Error('PRIVATE_KEY is not set.');
+}
+
+const runExample = async () => {
+ await initialize();
+
+ const signer = new ethers.Wallet(privateKey);
+ const provider = new ethers.providers.JsonRpcProvider(rpcProviderUrl);
+
+ console.log("Signer's address:", await signer.getAddress());
+
+ console.log('Encrypting message...');
+ const message = toBytes('this is a secret');
+ const hasPositiveBalance = new conditions.RpcCondition({
+ conditionType: 'rpc',
+ chain: 5,
+ method: 'eth_getBalance',
+ parameters: [':userAddress', 'latest'],
+ returnValueTest: {
+ comparator: '>',
+ value: 0,
+ },
+ });
+ console.assert(
+ hasPositiveBalance.requiresSigner(),
+ 'Condition requires signer',
+ );
+ const ritualId = 2; // Replace with your own ritual ID
+ const messageKit = await encrypt(
+ provider,
+ message,
+ hasPositiveBalance,
+ ritualId,
+ signer,
+ );
+
+ console.log('Decrypting message...');
+ const porterUri = getPorterUri('lynx'); // Test network
+ const decryptedBytes = await decrypt(provider, messageKit, signer, porterUri);
+ const decryptedMessage = fromBytes(decryptedBytes);
+ console.log('Decrypted message:', decryptedMessage);
+};
+
+runExample()
+ .then(() => {
+ console.log('Example finished');
+ })
+ .catch((err) => {
+ console.error('Example failed:', err);
+ });
diff --git a/examples/taco/nodejs/tsconfig.json b/examples/taco/nodejs/tsconfig.json
new file mode 100644
index 000000000..aeb9f0525
--- /dev/null
+++ b/examples/taco/nodejs/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "outDir": "dist",
+ "rootDir": "src",
+ "noEmit": true
+ },
+ "references": [
+ {
+ "path": "../../../packages/taco/tsconfig.cjs.json"
+ }
+ ]
+}
diff --git a/examples/taco/react/README.md b/examples/taco/react/README.md
new file mode 100644
index 000000000..5c1ef1c92
--- /dev/null
+++ b/examples/taco/react/README.md
@@ -0,0 +1,16 @@
+# `react-taco` integration example
+
+Shows how to integrate `@nucypher/taco` into a React application.
+
+In order to load WASM dependencies of `@nucypher/taco`, we override the `react-scripts` configuration with `craco`. For
+more details, see the `craco.config.js` file.
+
+## Usage
+
+```bash
+pnpm install
+pnpm start
+```
+
+Next, go to [http://127.0.0.1:3000/](http://127.0.0.1:8080/) in your browser and
+inspect the UI and the JS console.
diff --git a/examples/taco/react/package.json b/examples/taco/react/package.json
new file mode 100644
index 000000000..7e4a8fde9
--- /dev/null
+++ b/examples/taco/react/package.json
@@ -0,0 +1,39 @@
+{
+ "name": "react",
+ "version": "0.1.0",
+ "private": true,
+ "scripts": {
+ "build": "react-scripts build",
+ "check": "pnpm type-check && pnpm build",
+ "eject": "react-scripts eject",
+ "start": "react-scripts start",
+ "test": "react-scripts test",
+ "type-check": "tsc -p tsconfig.build.json"
+ },
+ "browserslist": {
+ "production": [
+ ">0.2%",
+ "not dead",
+ "not op_mini all"
+ ],
+ "development": [
+ "last 1 chrome version",
+ "last 1 firefox version",
+ "last 1 safari version"
+ ]
+ },
+ "dependencies": {
+ "@nucypher/taco": "workspace:*",
+ "react": "^18.2.0",
+ "react-dom": "^18.2.0"
+ },
+ "devDependencies": {
+ "@types/node": "^16.18.50",
+ "@types/react": "^18.2.21",
+ "@types/react-dom": "^18.2.7",
+ "react-scripts": "^5.0.1"
+ },
+ "peerDependencies": {
+ "ethers": "^5.7.2"
+ }
+}
diff --git a/examples/taco/react/public/favicon.ico b/examples/taco/react/public/favicon.ico
new file mode 100644
index 000000000..a11777cc4
Binary files /dev/null and b/examples/taco/react/public/favicon.ico differ
diff --git a/examples/taco/react/public/index.html b/examples/taco/react/public/index.html
new file mode 100644
index 000000000..e65acb3de
--- /dev/null
+++ b/examples/taco/react/public/index.html
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ React App
+
+
+ You need to enable JavaScript to run this app.
+
+
+
+
diff --git a/examples/taco/react/public/logo192.png b/examples/taco/react/public/logo192.png
new file mode 100644
index 000000000..fc44b0a37
Binary files /dev/null and b/examples/taco/react/public/logo192.png differ
diff --git a/examples/taco/react/public/logo512.png b/examples/taco/react/public/logo512.png
new file mode 100644
index 000000000..a4e47a654
Binary files /dev/null and b/examples/taco/react/public/logo512.png differ
diff --git a/examples/taco/react/public/manifest.json b/examples/taco/react/public/manifest.json
new file mode 100644
index 000000000..080d6c77a
--- /dev/null
+++ b/examples/taco/react/public/manifest.json
@@ -0,0 +1,25 @@
+{
+ "short_name": "React App",
+ "name": "Create React App Sample",
+ "icons": [
+ {
+ "src": "favicon.ico",
+ "sizes": "64x64 32x32 24x24 16x16",
+ "type": "image/x-icon"
+ },
+ {
+ "src": "logo192.png",
+ "type": "image/png",
+ "sizes": "192x192"
+ },
+ {
+ "src": "logo512.png",
+ "type": "image/png",
+ "sizes": "512x512"
+ }
+ ],
+ "start_url": ".",
+ "display": "standalone",
+ "theme_color": "#000000",
+ "background_color": "#ffffff"
+}
diff --git a/examples/taco/react/public/robots.txt b/examples/taco/react/public/robots.txt
new file mode 100644
index 000000000..e9e57dc4d
--- /dev/null
+++ b/examples/taco/react/public/robots.txt
@@ -0,0 +1,3 @@
+# https://www.robotstxt.org/robotstxt.html
+User-agent: *
+Disallow:
diff --git a/examples/taco/react/src/App.tsx b/examples/taco/react/src/App.tsx
new file mode 100644
index 000000000..4073fb53e
--- /dev/null
+++ b/examples/taco/react/src/App.tsx
@@ -0,0 +1,107 @@
+import {
+ conditions,
+ decrypt,
+ encrypt,
+ fromBytes,
+ getPorterUri,
+ initialize,
+} from '@nucypher/taco';
+import {ethers} from 'ethers';
+import {useEffect, useState} from 'react';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+declare const window: any;
+
+const message = 'this is a secret';
+
+function App() {
+ const [isInit, setIsInit] = useState(false);
+ const [provider, setProvider] = useState<
+ ethers.providers.Web3Provider | undefined
+ >();
+ const [decryptedMessage, setDecryptedMessage] = useState("");
+
+ const initNucypher = async () => {
+ await initialize();
+ setIsInit(true);
+ };
+
+ const loadWeb3Provider = async () => {
+ if (!window.ethereum) {
+ console.error('You need to connect to the MetaMask extension');
+ }
+ const provider = new ethers.providers.Web3Provider(window.ethereum, 'any');
+
+ const {chainId} = await provider.getNetwork();
+ if (chainId !== 80001) {
+ // Switch to Matic Mumbai testnet
+ await window.ethereum.request({
+ method: 'wallet_switchEthereumChain',
+ params: [{chainId: '0x13881'}],
+ });
+ }
+
+ await provider.send('eth_requestAccounts', []);
+ setProvider(provider);
+ };
+
+ useEffect(() => {
+ initNucypher();
+ loadWeb3Provider();
+ }, []);
+
+ if (!isInit || !provider) {
+ return Loading...
;
+ }
+
+ const runExample = async () => {
+ if (!window.ethereum) {
+ console.error('You need to connect to the MetaMask extension');
+ }
+
+ await initialize();
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum!, 'any');
+ await provider.send('eth_requestAccounts', []);
+ const signer = provider.getSigner();
+
+ const {chainId} = await provider.getNetwork();
+ if (chainId !== 80001) {
+ // Switch to Matic Mumbai testnet
+ await window.ethereum!.request!({
+ method: 'wallet_switchEthereumChain',
+ params: [{chainId: '0x13881'}],
+ });
+ }
+
+ console.log('Encrypting message...');
+ const hasPositiveBalance = new conditions.RpcCondition({
+ conditionType: 'rpc',
+ chain: 5,
+ method: 'eth_getBalance',
+ parameters: [':userAddress', 'latest'],
+ returnValueTest: {
+ comparator: '>',
+ value: 0,
+ },
+ });
+ const ritualId = 2; // Replace with your own ritual ID
+ const messageKit = await encrypt(provider, message, hasPositiveBalance, ritualId, signer);
+
+ console.log('Decrypting message...');
+ const porterUri = getPorterUri('lynx'); // Test network
+ const decryptedMessage = await decrypt(provider, messageKit, signer, porterUri);
+
+ setDecryptedMessage(fromBytes(decryptedMessage));
+ };
+
+ return (
+
+
Secret message: {message}
+ {(decryptedMessage && Decrypted message: {decryptedMessage} )}
+ Run example
+
+ );
+}
+
+export default App;
diff --git a/examples/taco/react/src/index.tsx b/examples/taco/react/src/index.tsx
new file mode 100644
index 000000000..cd808f32c
--- /dev/null
+++ b/examples/taco/react/src/index.tsx
@@ -0,0 +1,13 @@
+import React from 'react';
+import ReactDOM from 'react-dom/client';
+
+import App from './App';
+
+const root = ReactDOM.createRoot(
+ document.getElementById('root') as HTMLElement,
+);
+root.render(
+
+
+ ,
+);
diff --git a/examples/taco/react/src/react-app-env.d.ts b/examples/taco/react/src/react-app-env.d.ts
new file mode 100644
index 000000000..8f8826530
--- /dev/null
+++ b/examples/taco/react/src/react-app-env.d.ts
@@ -0,0 +1,8 @@
+///
+import { ExternalProvider } from '@ethersproject/providers';
+
+declare global {
+ interface Window {
+ ethereum?: ExternalProvider;
+ }
+}
diff --git a/packages/pre/tsconfig.build.json b/examples/taco/react/tsconfig.build.json
similarity index 59%
rename from packages/pre/tsconfig.build.json
rename to examples/taco/react/tsconfig.build.json
index dedc2a266..22ff2bd0b 100644
--- a/packages/pre/tsconfig.build.json
+++ b/examples/taco/react/tsconfig.build.json
@@ -3,11 +3,12 @@
"include": ["src"],
"compilerOptions": {
"outDir": "dist",
- "rootDir": "src"
+ "rootDir": "src",
+ "noEmit": true
},
"references": [
{
- "path": "../shared/tsconfig.es.json"
+ "path": "../../../packages/taco/tsconfig.es.json"
}
]
}
diff --git a/examples/taco/react/tsconfig.json b/examples/taco/react/tsconfig.json
new file mode 100644
index 000000000..9d379a3c4
--- /dev/null
+++ b/examples/taco/react/tsconfig.json
@@ -0,0 +1,20 @@
+{
+ "compilerOptions": {
+ "target": "es5",
+ "lib": ["dom", "dom.iterable", "esnext"],
+ "allowJs": true,
+ "skipLibCheck": true,
+ "esModuleInterop": true,
+ "allowSyntheticDefaultImports": true,
+ "strict": true,
+ "forceConsistentCasingInFileNames": true,
+ "noFallthroughCasesInSwitch": true,
+ "module": "esnext",
+ "moduleResolution": "node",
+ "resolveJsonModule": true,
+ "isolatedModules": true,
+ "noEmit": true,
+ "jsx": "react-jsx"
+ },
+ "include": ["src"]
+}
diff --git a/examples/taco/webpack-5/README.md b/examples/taco/webpack-5/README.md
new file mode 100644
index 000000000..cfcaa7be2
--- /dev/null
+++ b/examples/taco/webpack-5/README.md
@@ -0,0 +1,13 @@
+# `webpack-5` integration example
+
+Shows how to integrate `@nucypher/taco` with Webpack 5.
+
+## Usage
+
+```bash
+pnpm install
+pnpm start
+```
+
+Go to [localhost:8080](http://localhost:8080/) in your browser and look in the
+JS console.
diff --git a/examples/taco/webpack-5/package.json b/examples/taco/webpack-5/package.json
new file mode 100644
index 000000000..7fd563717
--- /dev/null
+++ b/examples/taco/webpack-5/package.json
@@ -0,0 +1,26 @@
+{
+ "version": "0.1.0",
+ "private": true,
+ "license": "GPL-3.0-only",
+ "author": "Piotr Rosłaniec ",
+ "main": "index.js",
+ "scripts": {
+ "build": "webpack --mode production --progress",
+ "check": "pnpm type-check && pnpm build",
+ "start": "webpack serve --mode development",
+ "type-check": "tsc"
+ },
+ "dependencies": {
+ "@nucypher/taco": "workspace:*"
+ },
+ "devDependencies": {
+ "copy-webpack-plugin": "^10.2.4",
+ "esbuild-loader": "^2.11.0",
+ "webpack": "^5.4.0",
+ "webpack-cli": "^4.9.2",
+ "webpack-dev-server": "^4.7.4"
+ },
+ "peerDependencies": {
+ "ethers": "^5.7.2"
+ }
+}
diff --git a/examples/taco/webpack-5/src/index.html b/examples/taco/webpack-5/src/index.html
new file mode 100644
index 000000000..6e9349b3e
--- /dev/null
+++ b/examples/taco/webpack-5/src/index.html
@@ -0,0 +1,13 @@
+
+
+
+
+ nucypher-ts example
+
+
+
+ This page contains webassembly and javascript content, please enable
+ javascript in your browser.
+ Check console for results
+
+
diff --git a/examples/taco/webpack-5/src/index.ts b/examples/taco/webpack-5/src/index.ts
new file mode 100644
index 000000000..370eada34
--- /dev/null
+++ b/examples/taco/webpack-5/src/index.ts
@@ -0,0 +1,62 @@
+import {
+ conditions,
+ decrypt,
+ encrypt,
+ fromBytes,
+ getPorterUri,
+ initialize,
+ toBytes,
+} from '@nucypher/taco';
+import { ethers } from 'ethers';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+declare const window: any;
+
+const runExample = async () => {
+ await initialize();
+
+ const provider = new ethers.providers.Web3Provider(window.ethereum!, 'any');
+ await provider.send('eth_requestAccounts', []);
+ const signer = provider.getSigner();
+
+ console.log("Signer's address:", await signer.getAddress());
+
+ console.log('Encrypting message...');
+ const message = toBytes('this is a secret');
+ const hasPositiveBalance = new conditions.RpcCondition({
+ conditionType: 'rpc',
+ chain: 5,
+ method: 'eth_getBalance',
+ parameters: [':userAddress', 'latest'],
+ returnValueTest: {
+ comparator: '>',
+ value: 0,
+ },
+ });
+ console.assert(
+ hasPositiveBalance.requiresSigner(),
+ 'Condition requires signer',
+ );
+ const ritualId = 2; // Replace with your own ritual ID
+ const messageKit = await encrypt(
+ provider,
+ message,
+ hasPositiveBalance,
+ ritualId,
+ signer,
+ );
+
+ console.log('Decrypting message...');
+ const porterUri = getPorterUri('lynx'); // Test network
+ const decryptedBytes = await decrypt(provider, messageKit, signer, porterUri);
+ const decryptedMessage = fromBytes(decryptedBytes);
+ console.log('Decrypted message:', decryptedMessage);
+};
+
+runExample()
+ .then(() => {
+ console.log('Example finished');
+ })
+ .catch((err) => {
+ console.error('Example failed:', err);
+ });
diff --git a/examples/taco/webpack-5/tsconfig.json b/examples/taco/webpack-5/tsconfig.json
new file mode 100644
index 000000000..f651a6051
--- /dev/null
+++ b/examples/taco/webpack-5/tsconfig.json
@@ -0,0 +1,14 @@
+{
+ "extends": "../../../tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "esModuleInterop": true,
+ "skipLibCheck": true,
+ "noEmit": true
+ },
+ "references": [
+ {
+ "path": "../../../packages/taco/tsconfig.es.json"
+ }
+ ]
+}
diff --git a/examples/taco/webpack-5/webpack.config.js b/examples/taco/webpack-5/webpack.config.js
new file mode 100644
index 000000000..90e745d26
--- /dev/null
+++ b/examples/taco/webpack-5/webpack.config.js
@@ -0,0 +1,43 @@
+const path = require('path');
+const HtmlWebpackPlugin = require('html-webpack-plugin');
+
+module.exports = {
+ entry: './src/index.ts',
+ plugins: [
+ new HtmlWebpackPlugin({
+ template: './src/index.html',
+ }),
+ ].filter(Boolean),
+ module: {
+ rules: [
+ {
+ test: /\.tsx?$/,
+ loader: 'esbuild-loader',
+ exclude: /node_modules/,
+ options: {
+ loader: 'tsx',
+ target: 'es2018',
+ },
+ },
+ {
+ test: /\.(png|svg|jpg|gif|woff|woff2|eot|ttf|otf|ico)$/,
+ use: ['file-loader'],
+ },
+ ],
+ },
+ resolve: {
+ extensions: ['.tsx', '.ts', '.js'],
+ },
+ output: {
+ filename: '[name].[contenthash].js',
+ path: path.resolve(__dirname, 'build'),
+ },
+ devServer: {
+ historyApiFallback: true,
+ host: '127.0.0.1',
+ liveReload: true,
+ headers: {
+ 'Access-Control-Allow-Origin': '*',
+ },
+ },
+};
diff --git a/examples/webpack-5/README.md b/examples/webpack-5/README.md
deleted file mode 100644
index 0691b025f..000000000
--- a/examples/webpack-5/README.md
+++ /dev/null
@@ -1,20 +0,0 @@
-# `webpack-5` integration example
-
-This example takes advantage of experimental async WASM loading in `webpack-5`.
-See `webpack.config.js` for details:
-
-```
- experiments: {
- asyncWebAssembly: true,
- },
-```
-
-## Usage
-
-```bash
-pnpm install
-pnpm start
-```
-
-Go to [localhost:8080](http://localhost:8080/) in your browser and look in the
-JS console.
diff --git a/examples/webpack-5/tsconfig.json b/examples/webpack-5/tsconfig.json
deleted file mode 100644
index 7c4f81999..000000000
--- a/examples/webpack-5/tsconfig.json
+++ /dev/null
@@ -1,9 +0,0 @@
-{
- "extends": "../../tsconfig.json",
- "include": ["src"],
- "compilerOptions": {
- "esModuleInterop": true,
- "skipLibCheck": true,
- "noEmit": true
- }
-}
diff --git a/package.json b/package.json
index 18b318221..701b8f278 100644
--- a/package.json
+++ b/package.json
@@ -15,7 +15,7 @@
"type-check": "pnpm --parallel --aggregate-output --reporter append-only type-check",
"build": "tsc --build --verbose ./tsconfig.prod.json",
"watch": "tsc --build --verbose --watch ./tsconfig.prod.json",
- "test": "vitest run",
+ "test": "pnpm build && vitest run",
"package:check": "pnpm run --parallel --aggregate-output --reporter append-only --filter './packages/**' package-check",
"packages:lint": "pnpm packages:sort --check",
"packages:sort": "sort-package-json \"package.json\" \"examples/*/package.json\" \"packages/*/package.json\"",
@@ -24,6 +24,9 @@
"ci:lint": "run-p lint type-check package:check packages:lint exports:lint",
"check-examples": "pnpm run --parallel --aggregate-output --reporter append-only --filter './examples/**' check"
},
+ "dependencies": {
+ "@nucypher/nucypher-core": "0.13.0-alpha.1"
+ },
"devDependencies": {
"@skypack/package-check": "^0.2.2",
"@types/node": "^20.6.0",
diff --git a/packages/pre/package.json b/packages/pre/package.json
index 54f68d394..54cef6ee0 100644
--- a/packages/pre/package.json
+++ b/packages/pre/package.json
@@ -14,18 +14,22 @@
"author": "Piotr Roslaniec ",
"exports": {
".": {
- "import": "./dist/index.js",
- "require": "./dist/index.js"
+ "import": "./dist/es/index.js",
+ "require": "./dist/cjs/index.js"
}
},
- "main": "./dist/index.js",
- "module": "./dist/index.js",
- "types": "./dist/index.d.ts",
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/es/index.js",
+ "types": "./dist/cjs/index.d.ts",
"files": [
- "dist/**/*"
+ "dist"
],
"scripts": {
- "build": "tsc --build ./tsconfig.build.json --verbose",
+ "prebuild": "pnpm clean",
+ "build": "pnpm build:module && pnpm build:cjs",
+ "build:cjs": "tsc --build ./tsconfig.cjs.json --verbose",
+ "build:module": "tsc --build ./tsconfig.es.json --verbose",
+ "clean": "rm -rf dist",
"exports:lint": "ts-unused-exports tsconfig.json --ignoreFiles src/index.ts",
"lint": "eslint --ext .ts src test",
"lint:fix": "pnpm lint --fix",
@@ -34,7 +38,7 @@
"typedoc": "typedoc"
},
"dependencies": {
- "@nucypher/nucypher-core": "0.13.0-alpha.0",
+ "@nucypher/nucypher-core": "0.13.0-alpha.1",
"@nucypher/shared": "workspace:*"
},
"devDependencies": {
@@ -44,7 +48,7 @@
"ethers": "^5.7.2"
},
"engines": {
- "node": ">=16",
+ "node": ">=18",
"pnpm": ">=8.0.0"
}
}
diff --git a/packages/shared/src/characters/alice.ts b/packages/pre/src/characters/alice.ts
similarity index 97%
rename from packages/shared/src/characters/alice.ts
rename to packages/pre/src/characters/alice.ts
index c93d3b262..2bc07d1cb 100644
--- a/packages/shared/src/characters/alice.ts
+++ b/packages/pre/src/characters/alice.ts
@@ -4,6 +4,7 @@ import {
Signer,
VerifiedKeyFrag,
} from '@nucypher/nucypher-core';
+import { ChecksumAddress, PorterClient } from '@nucypher/shared';
import { ethers } from 'ethers';
import { Keyring } from '../keyring';
@@ -13,8 +14,6 @@ import {
EnactedPolicy,
PreEnactedPolicy,
} from '../policy';
-import { PorterClient } from '../porter';
-import { ChecksumAddress } from '../types';
import { RemoteBob } from './bob';
diff --git a/packages/shared/src/characters/bob.ts b/packages/pre/src/characters/bob.ts
similarity index 95%
rename from packages/shared/src/characters/bob.ts
rename to packages/pre/src/characters/bob.ts
index 75509456f..6fac22ba7 100644
--- a/packages/shared/src/characters/bob.ts
+++ b/packages/pre/src/characters/bob.ts
@@ -5,12 +5,10 @@ import {
SecretKey,
Signer,
} from '@nucypher/nucypher-core';
+import { PorterClient, zip } from '@nucypher/shared';
import { Keyring } from '../keyring';
-import { PolicyMessageKit } from '../kits/message';
-import { RetrievalResult } from '../kits/retrieval';
-import { PorterClient } from '../porter';
-import { zip } from '../utils';
+import { PolicyMessageKit, RetrievalResult } from '../kits';
export class RemoteBob {
private constructor(
diff --git a/packages/pre/src/characters/enrico.ts b/packages/pre/src/characters/enrico.ts
new file mode 100644
index 000000000..a25e2d5e6
--- /dev/null
+++ b/packages/pre/src/characters/enrico.ts
@@ -0,0 +1,26 @@
+import { MessageKit, PublicKey, SecretKey } from '@nucypher/nucypher-core';
+import { toBytes } from '@nucypher/shared';
+
+import { Keyring } from '../keyring';
+
+export class Enrico {
+ public readonly encryptingKey: PublicKey;
+ private readonly keyring: Keyring;
+
+ constructor(encryptingKey: PublicKey, verifyingKey?: SecretKey) {
+ this.encryptingKey = encryptingKey;
+ this.keyring = new Keyring(verifyingKey ?? SecretKey.random());
+ }
+
+ public get verifyingKey(): PublicKey {
+ return this.keyring.publicKey;
+ }
+
+ public encryptMessage(plaintext: Uint8Array | string): MessageKit {
+ return new MessageKit(
+ this.encryptingKey,
+ plaintext instanceof Uint8Array ? plaintext : toBytes(plaintext),
+ null,
+ );
+ }
+}
diff --git a/packages/shared/src/characters/index.ts b/packages/pre/src/characters/index.ts
similarity index 52%
rename from packages/shared/src/characters/index.ts
rename to packages/pre/src/characters/index.ts
index 4bb043a7f..add1486ba 100644
--- a/packages/shared/src/characters/index.ts
+++ b/packages/pre/src/characters/index.ts
@@ -1,5 +1,3 @@
export * from './alice';
export * from './bob';
-export * from './cbd-recipient';
export * from './enrico';
-export * from './pre-recipient';
diff --git a/packages/shared/src/cohort.ts b/packages/pre/src/cohort.ts
similarity index 91%
rename from packages/shared/src/cohort.ts
rename to packages/pre/src/cohort.ts
index 6807841a5..43e820f8b 100644
--- a/packages/shared/src/cohort.ts
+++ b/packages/pre/src/cohort.ts
@@ -1,6 +1,4 @@
-import { PorterClient } from './porter';
-import { ChecksumAddress } from './types';
-import { objectEquals } from './utils';
+import { ChecksumAddress, objectEquals, PorterClient } from '@nucypher/shared';
export type CohortJSON = {
ursulaAddresses: ChecksumAddress[];
diff --git a/packages/pre/src/index.ts b/packages/pre/src/index.ts
index 9646913c5..4f676b1ca 100644
--- a/packages/pre/src/index.ts
+++ b/packages/pre/src/index.ts
@@ -1,24 +1,9 @@
-// TODO: Create a pre module and export it here
-// Similarly to how taco works
-// export {pre} from './pre';
-// What goes into the pre module? Should we re-export the basic building blocks and/or remake the helper methods?
export {
- Alice,
- BlockchainPolicyParameters,
- Bob,
- Cohort,
- DeployedPreStrategy,
- EnactedPolicy,
- Enrico,
- Keyring,
- PolicyMessageKit,
PorterClient,
- PreDecrypter,
- PreEnactedPolicy,
- PreStrategy,
- RemoteBob,
- conditions,
+ fromHexString,
getPorterUri,
+ toBytes,
+ toHexString,
} from '@nucypher/shared';
export {
@@ -30,4 +15,9 @@ export {
SecretKey,
Signer,
TreasureMap,
+ initialize,
} from '@nucypher/nucypher-core';
+
+export { Alice, Bob, Enrico } from './characters';
+export { Cohort } from './cohort';
+export { EnactedPolicy } from './policy';
diff --git a/packages/shared/src/keyring.ts b/packages/pre/src/keyring.ts
similarity index 97%
rename from packages/shared/src/keyring.ts
rename to packages/pre/src/keyring.ts
index 813247501..53b02b446 100644
--- a/packages/shared/src/keyring.ts
+++ b/packages/pre/src/keyring.ts
@@ -7,9 +7,9 @@ import {
Signer,
VerifiedKeyFrag,
} from '@nucypher/nucypher-core';
+import { toBytes } from '@nucypher/shared';
import { PolicyMessageKit } from './kits';
-import { toBytes } from './utils';
export class Keyring {
constructor(public readonly secretKey: SecretKey) {}
diff --git a/packages/shared/src/kits/index.ts b/packages/pre/src/kits/index.ts
similarity index 100%
rename from packages/shared/src/kits/index.ts
rename to packages/pre/src/kits/index.ts
diff --git a/packages/shared/src/kits/message.ts b/packages/pre/src/kits/message.ts
similarity index 97%
rename from packages/shared/src/kits/message.ts
rename to packages/pre/src/kits/message.ts
index 8ae9ab7b6..bcb9bd36a 100644
--- a/packages/shared/src/kits/message.ts
+++ b/packages/pre/src/kits/message.ts
@@ -5,8 +5,7 @@ import {
RetrievalKit,
SecretKey,
} from '@nucypher/nucypher-core';
-
-import { ChecksumAddress } from '../types';
+import { ChecksumAddress } from '@nucypher/shared';
import { RetrievalResult } from './retrieval';
diff --git a/packages/shared/src/kits/retrieval.ts b/packages/pre/src/kits/retrieval.ts
similarity index 92%
rename from packages/shared/src/kits/retrieval.ts
rename to packages/pre/src/kits/retrieval.ts
index 4fb1216de..ad5f333e2 100644
--- a/packages/shared/src/kits/retrieval.ts
+++ b/packages/pre/src/kits/retrieval.ts
@@ -1,6 +1,5 @@
import { VerifiedCapsuleFrag } from '@nucypher/nucypher-core';
-
-import { ChecksumAddress } from '../types';
+import { ChecksumAddress } from '@nucypher/shared';
export class RetrievalResult {
constructor(
diff --git a/packages/shared/src/policy.ts b/packages/pre/src/policy.ts
similarity index 92%
rename from packages/shared/src/policy.ts
rename to packages/pre/src/policy.ts
index 9b4595ef3..9ce220154 100644
--- a/packages/shared/src/policy.ts
+++ b/packages/pre/src/policy.ts
@@ -6,14 +6,17 @@ import {
TreasureMap,
VerifiedKeyFrag,
} from '@nucypher/nucypher-core';
+import {
+ PreSubscriptionManagerAgent,
+ toBytes,
+ toCanonicalAddress,
+ toEpoch,
+ Ursula,
+ zip,
+} from '@nucypher/shared';
import { ethers } from 'ethers';
-import { Alice } from './characters/alice';
-import { RemoteBob } from './characters/bob';
-import { PreSubscriptionManagerAgent } from './contracts/agents/subscription-manager';
-import { Ursula } from './porter';
-import { toBytes, toEpoch, zip } from './utils';
-import { toCanonicalAddress } from './web3';
+import { Alice, RemoteBob } from './characters';
export type EnactedPolicy = {
readonly id: HRAC;
@@ -121,7 +124,7 @@ export class BlockchainPolicy {
public async generatePreEnactedPolicy(
ursulas: readonly Ursula[],
): Promise {
- if (ursulas.length != this.verifiedKFrags.length) {
+ if (ursulas.length !== this.verifiedKFrags.length) {
throw new Error(
`Number of ursulas must match number of verified kFrags: ${this.verifiedKFrags.length}`,
);
diff --git a/packages/shared/test/acceptance/alice-grants.test.ts b/packages/pre/test/acceptance/alice-grants.test.ts
similarity index 87%
rename from packages/shared/test/acceptance/alice-grants.test.ts
rename to packages/pre/test/acceptance/alice-grants.test.ts
index 324d6fc03..69230c2f8 100644
--- a/packages/shared/test/acceptance/alice-grants.test.ts
+++ b/packages/pre/test/acceptance/alice-grants.test.ts
@@ -5,35 +5,32 @@ import {
PublicKey,
VerifiedKeyFrag,
} from '@nucypher/nucypher-core';
+import { ChecksumAddress, initialize, Ursula } from '@nucypher/shared';
import {
bytesEqual,
- fakeAlice,
- fakeBob,
fakePorterUri,
fakeProvider,
- fakeRemoteBob,
fakeSigner,
+ fakeUrsulas,
fromBytes,
+ mockGetUrsulas,
+ mockRetrieveCFragsRequest,
+} from '@nucypher/test-utils';
+import { beforeEach, describe, expect, it } from 'vitest';
+
+import { EnactedPolicy, Enrico, toBytes } from '../../src';
+import {
+ fakeAlice,
+ fakeBob,
+ fakeRemoteBob,
mockEncryptTreasureMap,
mockGenerateKFrags,
- mockGetUrsulas,
mockMakeTreasureMap,
mockPublishToBlockchain,
- mockRetrieveCFragsRequest,
reencryptKFrags,
-} from '@nucypher/test-utils';
-import { beforeAll, expect, test } from 'vitest';
+} from '../utils';
-import {
- ChecksumAddress,
- EnactedPolicy,
- Enrico,
- initialize,
- toBytes,
- Ursula,
-} from '../../src';
-
-test('story: alice shares message with bob through policy', () => {
+describe('story: alice shares message with bob through policy', () => {
const message = 'secret-message-from-alice';
const threshold = 2;
const shares = 3;
@@ -52,12 +49,12 @@ test('story: alice shares message with bob through policy', () => {
let aliceVerifyingKey: PublicKey;
let policyEncryptingKey: PublicKey;
- beforeAll(async () => {
+ beforeEach(async () => {
await initialize();
});
- test('alice grants a new policy to bob', async () => {
- const getUrsulasSpy = mockGetUrsulas();
+ it('alice grants a new policy to bob', async () => {
+ const getUrsulasSpy = mockGetUrsulas(fakeUrsulas().slice(0, shares));
const generateKFragsSpy = mockGenerateKFrags();
const publishToBlockchainSpy = mockPublishToBlockchain();
const makeTreasureMapSpy = mockMakeTreasureMap();
@@ -105,14 +102,13 @@ test('story: alice shares message with bob through policy', () => {
verifiedKFrags = makeTreasureMapSpy.mock.calls[0][1] as VerifiedKeyFrag[];
});
- test('enrico encrypts the message', () => {
+ it('enrico encrypts the message', () => {
const enrico = new Enrico(policyEncryptingKey);
- encryptedMessage = enrico.encryptMessagePre(toBytes(message));
+ encryptedMessage = enrico.encryptMessage(toBytes(message));
});
- test('bob retrieves and decrypts the message', async () => {
+ it('bob retrieves and decrypts the message', async () => {
const bob = fakeBob();
- const getUrsulasSpy = mockGetUrsulas();
const retrieveCFragsSpy = mockRetrieveCFragsRequest(
ursulaAddresses,
verifiedKFrags,
@@ -128,7 +124,6 @@ test('story: alice shares message with bob through policy', () => {
);
const bobPlaintext = fromBytes(retrievedMessage[0]);
- expect(getUrsulasSpy).toHaveBeenCalled();
expect(retrieveCFragsSpy).toHaveBeenCalled();
expect(bobPlaintext).toEqual(message);
diff --git a/packages/shared/test/acceptance/delay-enact.test.ts b/packages/pre/test/acceptance/delay-enact.test.ts
similarity index 82%
rename from packages/shared/test/acceptance/delay-enact.test.ts
rename to packages/pre/test/acceptance/delay-enact.test.ts
index 7c2ef6428..16076eb06 100644
--- a/packages/shared/test/acceptance/delay-enact.test.ts
+++ b/packages/pre/test/acceptance/delay-enact.test.ts
@@ -1,34 +1,37 @@
import {
bytesEqual,
- fakeAlice,
fakePorterUri,
fakeProvider,
- fakeRemoteBob,
fakeSigner,
- mockEncryptTreasureMap,
- mockGenerateKFrags,
+ fakeUrsulas,
mockGetUrsulas,
- mockPublishToBlockchain,
} from '@nucypher/test-utils';
-import { beforeAll, expect, test } from 'vitest';
+import { beforeAll, describe, expect, it } from 'vitest';
import { initialize } from '../../src';
+import {
+ fakeAlice,
+ fakeRemoteBob,
+ mockEncryptTreasureMap,
+ mockGenerateKFrags,
+ mockPublishToBlockchain,
+} from '../utils';
-test('story: alice creates a policy but someone else enacts it', () => {
+describe('story: alice creates a policy but someone else enacts it', () => {
const threshold = 2;
const shares = 3;
const startDate = new Date();
const endDate = new Date(Date.now() + 60 * 1000); // 60s later
const label = 'fake-data-label';
- test('verifies capsule frags', async () => {
+ describe('verifies capsule frags', async () => {
beforeAll(async () => {
await initialize();
});
- test('alice generates a new policy', async () => {
+ it('alice generates a new policy', async () => {
const provider = fakeProvider();
- const getUrsulasSpy = mockGetUrsulas();
+ const getUrsulasSpy = mockGetUrsulas(fakeUrsulas(shares));
const generateKFragsSpy = mockGenerateKFrags();
const publishToBlockchainSpy = mockPublishToBlockchain();
const encryptTreasureMapSpy = mockEncryptTreasureMap();
diff --git a/packages/shared/test/unit/cohort.test.ts b/packages/pre/test/cohort.test.ts
similarity index 64%
rename from packages/shared/test/unit/cohort.test.ts
rename to packages/pre/test/cohort.test.ts
index 31372a7a3..1baf6189c 100644
--- a/packages/shared/test/unit/cohort.test.ts
+++ b/packages/pre/test/cohort.test.ts
@@ -1,21 +1,24 @@
-import { fakeUrsulas, makeCohort } from '@nucypher/test-utils';
-import { beforeAll, expect, test } from 'vitest';
+import { initialize } from '@nucypher/shared';
+import { fakeUrsulas } from '@nucypher/test-utils';
+import { beforeAll, describe, expect, it } from 'vitest';
-import { Cohort, initialize } from '../../src';
+import { Cohort } from '../src';
-test('Cohort', () => {
+import { makeCohort } from './utils';
+
+describe('Cohort', () => {
beforeAll(async () => {
await initialize();
});
- test('creates a Cohort', async () => {
+ it('creates a Cohort', async () => {
const ursulas = fakeUrsulas();
const cohort = await makeCohort(ursulas);
const expectedUrsulas = ursulas.map((u) => u.checksumAddress);
expect(cohort.ursulaAddresses).toEqual(expectedUrsulas);
});
- test('serializes to a plain object', async () => {
+ it('serializes to a plain object', async () => {
const ursulas = fakeUrsulas();
const cohort = await makeCohort(ursulas);
const asObj = cohort.toObj();
@@ -23,7 +26,7 @@ test('Cohort', () => {
expect(fromObj).toEqual(cohort);
});
- test('serializes to JSON', async () => {
+ it('serializes to JSON', async () => {
const ursulas = fakeUrsulas();
const cohort = await makeCohort(ursulas);
const asJson = cohort.toJSON();
diff --git a/packages/pre/test/enrico.test.ts b/packages/pre/test/enrico.test.ts
new file mode 100644
index 000000000..7b3c0739e
--- /dev/null
+++ b/packages/pre/test/enrico.test.ts
@@ -0,0 +1,90 @@
+// Disabling because we want to access Alice.keyring which is a private property
+/* eslint-disable @typescript-eslint/no-explicit-any */
+import { bytesEqual, fromBytes } from '@nucypher/test-utils';
+import { beforeAll, describe, expect, it } from 'vitest';
+
+import { Enrico, initialize, toBytes } from '../src';
+import { PolicyMessageKit, RetrievalResult } from '../src/kits';
+
+import { fakeAlice, fakeBob, reencryptKFrags } from './utils';
+
+describe('enrico', () => {
+ beforeAll(async () => {
+ await initialize();
+ });
+
+ it('alice decrypts message encrypted by enrico', async () => {
+ const label = 'fake-label';
+ const message = 'fake-message';
+ const alice = fakeAlice();
+
+ const policyKey = alice.getPolicyEncryptingKeyFromLabel(label);
+ const enrico = new Enrico(policyKey);
+ const encrypted = enrico.encryptMessage(toBytes(message));
+
+ const aliceKeyring = (alice as any).keyring;
+ const aliceSk = await aliceKeyring.getSecretKeyFromLabel(label);
+ const alicePlaintext = encrypted.decrypt(aliceSk);
+ expect(alicePlaintext).toEqual(alicePlaintext);
+ });
+
+ it('bob decrypts reencrypted message', async () => {
+ const label = 'fake-label';
+ const alice = fakeAlice();
+ const bob = fakeBob();
+
+ const policyEncryptingKey = alice.getPolicyEncryptingKeyFromLabel(label);
+ const enrico = new Enrico(policyEncryptingKey);
+
+ const plaintext = 'Plaintext message';
+ const plaintextBytes = toBytes(plaintext);
+ const encrypted = enrico.encryptMessage(plaintextBytes);
+
+ // Alice can decrypt capsule she created
+ const aliceSk = await (alice as any).keyring.getSecretKeyFromLabel(label);
+ const plaintextAlice = encrypted.decrypt(aliceSk);
+ expect(fromBytes(plaintextAlice).endsWith(plaintext)).toBeTruthy();
+
+ const threshold = 2;
+ const shares = 3;
+ const { verifiedKFrags, delegatingKey } = alice.generateKFrags(
+ bob,
+ label,
+ threshold,
+ shares,
+ );
+ expect(delegatingKey.toCompressedBytes()).toEqual(
+ policyEncryptingKey.toCompressedBytes(),
+ );
+
+ // Bob can decrypt re-encrypted ciphertext
+ const { verifiedCFrags } = reencryptKFrags(
+ verifiedKFrags,
+ encrypted.capsule,
+ );
+ const bobSk = (bob as any).keyring.secretKey;
+
+ const plaintextBob = encrypted.decryptReencrypted(
+ bobSk,
+ policyEncryptingKey,
+ verifiedCFrags,
+ );
+ expect(fromBytes(plaintextBob).endsWith(plaintext)).toBeTruthy();
+
+ // Bob can decrypt ciphertext and verify origin of the message
+ const cFragsWithUrsulas = verifiedCFrags.map((cFrag, index) => [
+ `0x${index}`,
+ cFrag,
+ ]);
+ const result = new RetrievalResult(Object.fromEntries(cFragsWithUrsulas));
+ const pk = PolicyMessageKit.fromMessageKit(
+ encrypted,
+ policyEncryptingKey,
+ threshold,
+ ).withResult(result);
+ expect(pk.isDecryptableByReceiver()).toBeTruthy();
+
+ const decrypted = bob.decrypt(pk);
+ expect(bytesEqual(decrypted, plaintextBytes)).toBeTruthy();
+ });
+});
diff --git a/packages/pre/test/message-kit.test.ts b/packages/pre/test/message-kit.test.ts
new file mode 100644
index 000000000..93affd342
--- /dev/null
+++ b/packages/pre/test/message-kit.test.ts
@@ -0,0 +1,19 @@
+import { beforeAll, describe, expect, it } from 'vitest';
+
+import { initialize, MessageKit, toBytes } from '../src';
+
+import { fakeBob } from './utils';
+
+describe('message kit', () => {
+ beforeAll(async () => {
+ await initialize();
+ });
+
+ it('bob decrypts', () => {
+ const bob = fakeBob();
+ const plaintext = toBytes('fake-message');
+ const messageKit = new MessageKit(bob.decryptingKey, plaintext, null);
+ const decrypted = bob['keyring'].decrypt(messageKit);
+ expect(decrypted).toBeTruthy();
+ });
+});
diff --git a/packages/pre/test/pre.test.ts b/packages/pre/test/pre.test.ts
index 9fd4423ca..ce6ce5533 100644
--- a/packages/pre/test/pre.test.ts
+++ b/packages/pre/test/pre.test.ts
@@ -1,5 +1,113 @@
-import { expect, test } from 'vitest';
+import { CapsuleFrag, initialize, reencrypt } from '@nucypher/nucypher-core';
+import { zip } from '@nucypher/shared';
+import { fakeUrsulas } from '@nucypher/test-utils';
+import { beforeAll, describe, expect, it } from 'vitest';
-test('pre', () => {
- expect('pre').toBe('pre');
+import { Alice, Bob, Enrico, MessageKit, toBytes } from '../src';
+import { PolicyMessageKit, RetrievalResult } from '../src/kits';
+
+import { fakeAlice, fakeBob, reencryptKFrags } from './utils';
+
+describe('proxy reencryption', () => {
+ let alice: Alice;
+ let bob: Bob;
+ const plaintext = toBytes('plaintext-message');
+ const threshold = 2;
+ const shares = 3;
+ const label = 'fake-data-label';
+
+ beforeAll(async () => {
+ await initialize();
+ bob = fakeBob();
+ alice = fakeAlice();
+ });
+
+ it('verifies capsule frags', async () => {
+ const { capsule } = new MessageKit(bob.decryptingKey, plaintext, null);
+ const { delegatingKey, verifiedKFrags } = alice.generateKFrags(
+ bob,
+ label,
+ threshold,
+ shares,
+ );
+
+ const { verifiedCFrags } = reencryptKFrags(verifiedKFrags, capsule);
+ const cFrags = verifiedCFrags.map((verifiedCFrag) =>
+ CapsuleFrag.fromBytes(verifiedCFrag.toBytes()),
+ );
+ const areVerified = cFrags.every((cFrag) =>
+ cFrag.verify(
+ capsule,
+ alice.verifyingKey,
+ delegatingKey,
+ bob.decryptingKey,
+ ),
+ );
+ expect(areVerified).toBeTruthy();
+ });
+
+ it('encrypts and decrypts reencrypted message', async () => {
+ const { verifiedKFrags } = alice.generateKFrags(
+ bob,
+ label,
+ threshold,
+ shares,
+ );
+
+ const policyEncryptingKey = alice.getPolicyEncryptingKeyFromLabel(label);
+ const enrico = new Enrico(policyEncryptingKey);
+ const encryptedMessage = enrico.encryptMessage(plaintext);
+
+ const ursulaAddresses = fakeUrsulas(3).map(
+ (ursula) => ursula.checksumAddress,
+ );
+ const reencrypted = verifiedKFrags.map((kFrag) =>
+ reencrypt(encryptedMessage.capsule, kFrag),
+ );
+ const results = new RetrievalResult(
+ Object.fromEntries(zip(ursulaAddresses, reencrypted)),
+ );
+ const policyMessageKit = PolicyMessageKit.fromMessageKit(
+ encryptedMessage,
+ policyEncryptingKey,
+ threshold,
+ ).withResult(results);
+ expect(policyMessageKit.isDecryptableByReceiver()).toBeTruthy();
+
+ const bobPlaintext = bob.decrypt(policyMessageKit);
+ expect(bobPlaintext).toEqual(plaintext);
+ });
+
+ it('encrypts and decrypts reencrypted message with conditions', async () => {
+ const { verifiedKFrags } = alice.generateKFrags(
+ bob,
+ label,
+ threshold,
+ shares,
+ );
+
+ const policyEncryptingKey = alice.getPolicyEncryptingKeyFromLabel(label);
+
+ const enrico = new Enrico(policyEncryptingKey);
+ const encryptedMessage = enrico.encryptMessage(plaintext);
+
+ const ursulaAddresses = fakeUrsulas(shares).map(
+ (ursula) => ursula.checksumAddress,
+ );
+ const reencrypted = verifiedKFrags.map((kFrag) =>
+ reencrypt(encryptedMessage.capsule, kFrag),
+ );
+ const results = new RetrievalResult(
+ Object.fromEntries(zip(ursulaAddresses, reencrypted)),
+ );
+ const policyMessageKit = PolicyMessageKit.fromMessageKit(
+ encryptedMessage,
+ policyEncryptingKey,
+ threshold,
+ ).withResult(results);
+ expect(policyMessageKit.isDecryptableByReceiver()).toBeTruthy();
+
+ const bobPlaintext = bob.decrypt(policyMessageKit);
+ expect(bobPlaintext).toEqual(plaintext);
+ });
});
diff --git a/packages/pre/test/utils.ts b/packages/pre/test/utils.ts
new file mode 100644
index 000000000..b9090456d
--- /dev/null
+++ b/packages/pre/test/utils.ts
@@ -0,0 +1,92 @@
+// Disabling some of the eslint rules for convenience.
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
+import {
+ Capsule,
+ EncryptedTreasureMap,
+ PublicKey,
+ reencrypt,
+ SecretKey,
+ VerifiedCapsuleFrag,
+ VerifiedKeyFrag,
+} from '@nucypher/nucypher-core';
+import { Ursula } from '@nucypher/shared';
+import { fakeUrsulas, mockGetUrsulas } from '@nucypher/test-utils';
+import { expect, SpyInstance, vi } from 'vitest';
+
+import { Alice, Bob, Cohort, toBytes } from '../src';
+import { RemoteBob } from '../src/characters';
+import { BlockchainPolicy, PreEnactedPolicy } from '../src/policy';
+
+export const fakeBob = (): Bob => {
+ const secretKey = SecretKey.fromBEBytes(
+ toBytes('fake-secret-key-32-bytes-bob-xxx'),
+ );
+ return Bob.fromSecretKey(secretKey);
+};
+
+export const fakeRemoteBob = (): RemoteBob => {
+ const { decryptingKey, verifyingKey } = fakeBob();
+ return RemoteBob.fromKeys(decryptingKey, verifyingKey);
+};
+
+export const fakeAlice = (aliceKey = 'fake-secret-key-32-bytes-alice-x') => {
+ const secretKey = SecretKey.fromBEBytes(toBytes(aliceKey));
+ return Alice.fromSecretKey(secretKey);
+};
+
+export const mockPublishToBlockchain = (): SpyInstance => {
+ const txHash = '0x1234567890123456789012345678901234567890';
+ return vi
+ .spyOn(PreEnactedPolicy.prototype as any, 'publish')
+ .mockImplementation(async () => Promise.resolve(txHash));
+};
+
+export const mockGenerateKFrags = (withValue?: {
+ delegatingKey: PublicKey;
+ verifiedKFrags: VerifiedKeyFrag[];
+}): SpyInstance => {
+ const spy = vi.spyOn(Alice.prototype as any, 'generateKFrags');
+ if (withValue) {
+ return spy.mockImplementation(() => withValue);
+ }
+ return spy;
+};
+
+export const mockEncryptTreasureMap = (
+ withValue?: EncryptedTreasureMap,
+): SpyInstance => {
+ const spy = vi.spyOn(BlockchainPolicy.prototype as any, 'encryptTreasureMap');
+ if (withValue) {
+ return spy.mockImplementation(() => withValue);
+ }
+ return spy;
+};
+
+export const reencryptKFrags = (
+ kFrags: readonly VerifiedKeyFrag[],
+ capsule: Capsule,
+): {
+ verifiedCFrags: VerifiedCapsuleFrag[];
+} => {
+ if (!kFrags) {
+ throw new Error('Pass at least one kFrag.');
+ }
+ const verifiedCFrags = kFrags.map((kFrag) => reencrypt(capsule, kFrag));
+ return { verifiedCFrags };
+};
+
+export const mockMakeTreasureMap = (): SpyInstance => {
+ return vi.spyOn(BlockchainPolicy.prototype as any, 'makeTreasureMap');
+};
+
+export const makeCohort = async (ursulas: Ursula[] = fakeUrsulas()) => {
+ const getUrsulasSpy = mockGetUrsulas(ursulas);
+ const porterUri = 'https://_this.should.crash';
+ const numUrsulas = ursulas.length;
+ const cohort = await Cohort.create(porterUri, numUrsulas);
+ expect(getUrsulasSpy).toHaveBeenCalled();
+ return cohort;
+};
diff --git a/packages/pre/tsconfig.cjs.json b/packages/pre/tsconfig.cjs.json
new file mode 100644
index 000000000..035a2ab62
--- /dev/null
+++ b/packages/pre/tsconfig.cjs.json
@@ -0,0 +1,7 @@
+{
+ "extends": "./tsconfig.es.json",
+ "compilerOptions": {
+ "outDir": "dist/cjs",
+ "module": "CommonJS",
+ }
+}
diff --git a/packages/pre/tsconfig.es.json b/packages/pre/tsconfig.es.json
new file mode 100644
index 000000000..2ffa9192c
--- /dev/null
+++ b/packages/pre/tsconfig.es.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "outDir": "dist/es",
+ "rootDir": "src",
+ "module": "ES2022",
+ "target": "ES2022"
+ }
+}
diff --git a/packages/pre/tsconfig.json b/packages/pre/tsconfig.json
index 8d2d7c3d7..935974c35 100644
--- a/packages/pre/tsconfig.json
+++ b/packages/pre/tsconfig.json
@@ -3,6 +3,11 @@
"include": ["src", "test"],
"compilerOptions": {
"esModuleInterop": true,
- "skipLibCheck": true,
- }
+ "skipLibCheck": true
+ },
+ "references": [
+ {
+ "path": "../test-utils/tsconfig.es.json"
+ }
+ ]
}
diff --git a/packages/shared/abis/Coordinator.json b/packages/shared/abis/Coordinator.json
index a9f0143da..2217b4085 100644
--- a/packages/shared/abis/Coordinator.json
+++ b/packages/shared/abis/Coordinator.json
@@ -1,1375 +1,1423 @@
[
{
+ "type": "constructor",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "contract IAccessControlApplication",
- "name": "_stakes",
- "type": "address"
+ "name": "_application",
+ "type": "address",
+ "internalType": "contract ITACoChildApplication"
},
{
- "internalType": "uint32",
"name": "_timeout",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "uint16",
"name": "_maxDkgSize",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
},
{
- "internalType": "address",
"name": "_admin",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "contract IERC20",
"name": "_currency",
- "type": "address"
+ "type": "address",
+ "internalType": "contract IERC20"
},
{
- "internalType": "uint256",
"name": "_feeRatePerSecond",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
- ],
- "stateMutability": "nonpayable",
- "type": "constructor"
+ ]
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "AggregationPosted",
"inputs": [
{
- "indexed": true,
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "node",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
- "indexed": false,
- "internalType": "bytes32",
"name": "aggregatedTranscriptDigest",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": false
}
],
- "name": "AggregationPosted",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
- "inputs": [],
+ "type": "event",
"name": "DefaultAdminDelayChangeCanceled",
- "type": "event"
+ "inputs": [],
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "DefaultAdminDelayChangeScheduled",
"inputs": [
{
- "indexed": false,
- "internalType": "uint48",
"name": "newDelay",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48",
+ "indexed": false
},
{
- "indexed": false,
- "internalType": "uint48",
"name": "effectSchedule",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48",
+ "indexed": false
}
],
- "name": "DefaultAdminDelayChangeScheduled",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
- "inputs": [],
+ "type": "event",
"name": "DefaultAdminTransferCanceled",
- "type": "event"
+ "inputs": [],
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "DefaultAdminTransferScheduled",
"inputs": [
{
- "indexed": true,
- "internalType": "address",
"name": "newAdmin",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
- "indexed": false,
- "internalType": "uint48",
"name": "acceptSchedule",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48",
+ "indexed": false
}
],
- "name": "DefaultAdminTransferScheduled",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "EndRitual",
"inputs": [
{
- "indexed": true,
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": true
},
{
- "indexed": false,
- "internalType": "bool",
"name": "successful",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool",
+ "indexed": false
}
],
- "name": "EndRitual",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "MaxDkgSizeChanged",
"inputs": [
{
- "indexed": false,
- "internalType": "uint16",
"name": "oldSize",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16",
+ "indexed": false
},
{
- "indexed": false,
- "internalType": "uint16",
"name": "newSize",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16",
+ "indexed": false
}
],
- "name": "MaxDkgSizeChanged",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "ParticipantPublicKeySet",
"inputs": [
{
- "indexed": true,
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "participant",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
+ "name": "publicKey",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes32",
"name": "word1",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes32",
"name": "word2",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
],
- "indexed": false,
"internalType": "struct BLS12381.G2Point",
- "name": "publicKey",
- "type": "tuple"
+ "indexed": false
}
],
- "name": "ParticipantPublicKeySet",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "RoleAdminChanged",
"inputs": [
{
- "indexed": true,
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "bytes32",
"name": "previousAdminRole",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "bytes32",
"name": "newAdminRole",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": true
}
],
- "name": "RoleAdminChanged",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "RoleGranted",
"inputs": [
{
- "indexed": true,
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "account",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "sender",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
}
],
- "name": "RoleGranted",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "RoleRevoked",
"inputs": [
{
- "indexed": true,
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "account",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "sender",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
}
],
- "name": "RoleRevoked",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "StartAggregationRound",
"inputs": [
{
- "indexed": true,
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": true
}
],
- "name": "StartAggregationRound",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "StartRitual",
"inputs": [
{
- "indexed": true,
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "authority",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
- "indexed": false,
- "internalType": "address[]",
"name": "participants",
- "type": "address[]"
+ "type": "address[]",
+ "internalType": "address[]",
+ "indexed": false
}
],
- "name": "StartRitual",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "TimeoutChanged",
"inputs": [
{
- "indexed": false,
- "internalType": "uint32",
"name": "oldTimeout",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": false
},
{
- "indexed": false,
- "internalType": "uint32",
"name": "newTimeout",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": false
}
],
- "name": "TimeoutChanged",
- "type": "event"
+ "anonymous": false
},
{
- "anonymous": false,
+ "type": "event",
+ "name": "TranscriptPosted",
"inputs": [
{
- "indexed": true,
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32",
+ "indexed": true
},
{
- "indexed": true,
- "internalType": "address",
"name": "node",
- "type": "address"
+ "type": "address",
+ "internalType": "address",
+ "indexed": true
},
{
- "indexed": false,
- "internalType": "bytes32",
"name": "transcriptDigest",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32",
+ "indexed": false
}
],
- "name": "TranscriptPosted",
- "type": "event"
+ "anonymous": false
},
{
- "inputs": [],
+ "type": "function",
"name": "DEFAULT_ADMIN_ROLE",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "bytes32",
"name": "",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "INITIATOR_ROLE",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "bytes32",
"name": "",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "TREASURY_ROLE",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "bytes32",
"name": "",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "acceptDefaultAdminTransfer",
- "outputs": [],
"stateMutability": "nonpayable",
- "type": "function"
+ "inputs": [],
+ "outputs": []
},
{
- "inputs": [],
+ "type": "function",
"name": "application",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "contract IAccessControlApplication",
"name": "",
- "type": "address"
+ "type": "address",
+ "internalType": "contract ITACoChildApplication"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "beginDefaultAdminTransfer",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "address",
"name": "newAdmin",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "beginDefaultAdminTransfer",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
- "inputs": [],
+ "type": "function",
"name": "cancelDefaultAdminTransfer",
- "outputs": [],
"stateMutability": "nonpayable",
- "type": "function"
+ "inputs": [],
+ "outputs": []
},
{
+ "type": "function",
+ "name": "changeDefaultAdminDelay",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint48",
"name": "newDelay",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48"
}
],
- "name": "changeDefaultAdminDelay",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "cohortFingerprint",
+ "stateMutability": "pure",
"inputs": [
{
- "internalType": "address[]",
"name": "nodes",
- "type": "address[]"
+ "type": "address[]",
+ "internalType": "address[]"
}
],
- "name": "cohortFingerprint",
"outputs": [
{
- "internalType": "bytes32",
"name": "",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
- ],
- "stateMutability": "pure",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "currency",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "contract IERC20",
"name": "",
- "type": "address"
+ "type": "address",
+ "internalType": "contract IERC20"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "defaultAdmin",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "address",
"name": "",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "defaultAdminDelay",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint48",
"name": "",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "defaultAdminDelayIncreaseWait",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint48",
"name": "",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "feeRatePerSecond",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getAuthority",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "getAuthority",
"outputs": [
{
- "internalType": "address",
"name": "",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getParticipantFromProvider",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "address",
"name": "provider",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "getParticipantFromProvider",
"outputs": [
{
+ "name": "",
+ "type": "tuple",
"components": [
{
- "internalType": "address",
"name": "provider",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "bool",
"name": "aggregated",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
},
{
- "internalType": "bytes",
"name": "transcript",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
},
{
- "internalType": "bytes",
"name": "decryptionRequestStaticKey",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
}
],
- "internalType": "struct Coordinator.Participant",
- "name": "",
- "type": "tuple"
+ "internalType": "struct Coordinator.Participant"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getParticipants",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "getParticipants",
"outputs": [
{
+ "name": "",
+ "type": "tuple[]",
"components": [
{
- "internalType": "address",
"name": "provider",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "bool",
"name": "aggregated",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
},
{
- "internalType": "bytes",
"name": "transcript",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
},
{
- "internalType": "bytes",
"name": "decryptionRequestStaticKey",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
}
],
- "internalType": "struct Coordinator.Participant[]",
- "name": "",
- "type": "tuple[]"
+ "internalType": "struct Coordinator.Participant[]"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getProviderPublicKey",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "address",
"name": "_provider",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "uint256",
"name": "_ritualId",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
],
- "name": "getProviderPublicKey",
"outputs": [
{
+ "name": "",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes32",
"name": "word1",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes32",
"name": "word2",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
],
- "internalType": "struct BLS12381.G2Point",
- "name": "",
- "type": "tuple"
+ "internalType": "struct BLS12381.G2Point"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getPublicKeyFromRitualId",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "getPublicKeyFromRitualId",
"outputs": [
{
+ "name": "dkgPublicKey",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes16",
"name": "word1",
- "type": "bytes16"
+ "type": "bytes16",
+ "internalType": "bytes16"
}
],
- "internalType": "struct BLS12381.G1Point",
- "name": "dkgPublicKey",
- "type": "tuple"
+ "internalType": "struct BLS12381.G1Point"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getRitualIdFromPublicKey",
+ "stateMutability": "view",
"inputs": [
{
+ "name": "dkgPublicKey",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes16",
"name": "word1",
- "type": "bytes16"
+ "type": "bytes16",
+ "internalType": "bytes16"
}
],
- "internalType": "struct BLS12381.G1Point",
- "name": "dkgPublicKey",
- "type": "tuple"
+ "internalType": "struct BLS12381.G1Point"
}
],
- "name": "getRitualIdFromPublicKey",
"outputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getRitualInitiationCost",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "address[]",
"name": "providers",
- "type": "address[]"
+ "type": "address[]",
+ "internalType": "address[]"
},
{
- "internalType": "uint32",
"name": "duration",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "getRitualInitiationCost",
"outputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getRitualState",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "getRitualState",
"outputs": [
{
- "internalType": "enum Coordinator.RitualState",
"name": "",
- "type": "uint8"
+ "type": "uint8",
+ "internalType": "enum Coordinator.RitualState"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getRoleAdmin",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
],
- "name": "getRoleAdmin",
"outputs": [
{
- "internalType": "bytes32",
"name": "",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "getThresholdForRitualSize",
+ "stateMutability": "pure",
"inputs": [
{
- "internalType": "uint16",
"name": "size",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
}
],
- "name": "getThresholdForRitualSize",
"outputs": [
{
- "internalType": "uint16",
"name": "",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
}
- ],
- "stateMutability": "pure",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "grantRole",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "address",
"name": "account",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "grantRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "hasRole",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "address",
"name": "account",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "hasRole",
"outputs": [
{
- "internalType": "bool",
"name": "",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "initiateRitual",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "address[]",
"name": "providers",
- "type": "address[]"
+ "type": "address[]",
+ "internalType": "address[]"
},
{
- "internalType": "address",
"name": "authority",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "uint32",
"name": "duration",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "contract IEncryptionAuthorizer",
"name": "accessController",
- "type": "address"
+ "type": "address",
+ "internalType": "contract IEncryptionAuthorizer"
}
],
- "name": "initiateRitual",
"outputs": [
{
- "internalType": "uint32",
"name": "",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
+ }
+ ]
+ },
+ {
+ "type": "function",
+ "name": "isEncryptionAuthorized",
+ "stateMutability": "view",
+ "inputs": [
+ {
+ "name": "ritualId",
+ "type": "uint32",
+ "internalType": "uint32"
+ },
+ {
+ "name": "evidence",
+ "type": "bytes",
+ "internalType": "bytes"
+ },
+ {
+ "name": "ciphertextHeader",
+ "type": "bytes",
+ "internalType": "bytes"
}
],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "isInitiationPublic",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "bool",
"name": "",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
}
- ],
+ ]
+ },
+ {
+ "type": "function",
+ "name": "isProviderPublicKeySet",
"stateMutability": "view",
- "type": "function"
+ "inputs": [
+ {
+ "name": "_provider",
+ "type": "address",
+ "internalType": "address"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "",
+ "type": "bool",
+ "internalType": "bool"
+ }
+ ]
},
{
+ "type": "function",
+ "name": "isRitualFinalized",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "isRitualFinalized",
"outputs": [
{
- "internalType": "bool",
"name": "",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "makeInitiationPublic",
- "outputs": [],
"stateMutability": "nonpayable",
- "type": "function"
+ "inputs": [],
+ "outputs": []
},
{
- "inputs": [],
+ "type": "function",
"name": "maxDkgSize",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint16",
"name": "",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "numberOfRituals",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "owner",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "address",
"name": "",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "pendingDefaultAdmin",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "address",
"name": "newAdmin",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "uint48",
"name": "schedule",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "pendingDefaultAdminDelay",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint48",
"name": "newDelay",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48"
},
{
- "internalType": "uint48",
"name": "schedule",
- "type": "uint48"
+ "type": "uint48",
+ "internalType": "uint48"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "pendingFees",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
],
- "name": "pendingFees",
"outputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "postAggregation",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "bytes",
"name": "aggregatedTranscript",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
},
{
+ "name": "dkgPublicKey",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes16",
"name": "word1",
- "type": "bytes16"
+ "type": "bytes16",
+ "internalType": "bytes16"
}
],
- "internalType": "struct BLS12381.G1Point",
- "name": "dkgPublicKey",
- "type": "tuple"
+ "internalType": "struct BLS12381.G1Point"
},
{
- "internalType": "bytes",
"name": "decryptionRequestStaticKey",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
}
],
- "name": "postAggregation",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "postTranscript",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "bytes",
"name": "transcript",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
}
],
- "name": "postTranscript",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "processPendingFee",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "processPendingFee",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "renounceRole",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "address",
"name": "account",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "renounceRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "revokeRole",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "bytes32",
"name": "role",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "address",
"name": "account",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "revokeRole",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "rituals",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
],
- "name": "rituals",
"outputs": [
{
- "internalType": "address",
"name": "initiator",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "uint32",
"name": "initTimestamp",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "uint32",
"name": "endTimestamp",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "uint16",
"name": "totalTranscripts",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
},
{
- "internalType": "uint16",
"name": "totalAggregations",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
},
{
- "internalType": "address",
"name": "authority",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
},
{
- "internalType": "uint16",
"name": "dkgSize",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
},
{
- "internalType": "uint16",
"name": "threshold",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
},
{
- "internalType": "bool",
"name": "aggregationMismatch",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
},
{
- "internalType": "contract IEncryptionAuthorizer",
"name": "accessController",
- "type": "address"
+ "type": "address",
+ "internalType": "contract IEncryptionAuthorizer"
},
{
+ "name": "publicKey",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes16",
"name": "word1",
- "type": "bytes16"
+ "type": "bytes16",
+ "internalType": "bytes16"
}
],
- "internalType": "struct BLS12381.G1Point",
- "name": "publicKey",
- "type": "tuple"
+ "internalType": "struct BLS12381.G1Point"
},
{
- "internalType": "bytes",
"name": "aggregatedTranscript",
- "type": "bytes"
+ "type": "bytes",
+ "internalType": "bytes"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "rollbackDefaultAdminDelay",
- "outputs": [],
"stateMutability": "nonpayable",
- "type": "function"
+ "inputs": [],
+ "outputs": []
},
{
+ "type": "function",
+ "name": "setMaxDkgSize",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint16",
"name": "newSize",
- "type": "uint16"
+ "type": "uint16",
+ "internalType": "uint16"
}
],
- "name": "setMaxDkgSize",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "setProviderPublicKey",
+ "stateMutability": "nonpayable",
"inputs": [
{
+ "name": "_publicKey",
+ "type": "tuple",
"components": [
{
- "internalType": "bytes32",
"name": "word0",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes32",
"name": "word1",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
},
{
- "internalType": "bytes32",
"name": "word2",
- "type": "bytes32"
+ "type": "bytes32",
+ "internalType": "bytes32"
}
],
- "internalType": "struct BLS12381.G2Point",
- "name": "_publicKey",
- "type": "tuple"
+ "internalType": "struct BLS12381.G2Point"
}
],
- "name": "setProviderPublicKey",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "setReimbursementPool",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "contract IReimbursementPool",
"name": "pool",
- "type": "address"
+ "type": "address",
+ "internalType": "contract IReimbursementPool"
}
],
- "name": "setReimbursementPool",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "setRitualAuthority",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint32",
"name": "ritualId",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
},
{
- "internalType": "address",
"name": "authority",
- "type": "address"
+ "type": "address",
+ "internalType": "address"
}
],
- "name": "setRitualAuthority",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "setTimeout",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "uint32",
"name": "newTimeout",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
],
- "name": "setTimeout",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
},
{
+ "type": "function",
+ "name": "supportsInterface",
+ "stateMutability": "view",
"inputs": [
{
- "internalType": "bytes4",
"name": "interfaceId",
- "type": "bytes4"
+ "type": "bytes4",
+ "internalType": "bytes4"
}
],
- "name": "supportsInterface",
"outputs": [
{
- "internalType": "bool",
"name": "",
- "type": "bool"
+ "type": "bool",
+ "internalType": "bool"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "timeout",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint32",
"name": "",
- "type": "uint32"
+ "type": "uint32",
+ "internalType": "uint32"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
- "inputs": [],
+ "type": "function",
"name": "totalPendingFees",
+ "stateMutability": "view",
+ "inputs": [],
"outputs": [
{
- "internalType": "uint256",
"name": "",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
- ],
- "stateMutability": "view",
- "type": "function"
+ ]
},
{
+ "type": "function",
+ "name": "withdrawTokens",
+ "stateMutability": "nonpayable",
"inputs": [
{
- "internalType": "contract IERC20",
"name": "token",
- "type": "address"
+ "type": "address",
+ "internalType": "contract IERC20"
},
{
- "internalType": "uint256",
"name": "amount",
- "type": "uint256"
+ "type": "uint256",
+ "internalType": "uint256"
}
],
- "name": "withdrawTokens",
- "outputs": [],
- "stateMutability": "nonpayable",
- "type": "function"
+ "outputs": []
}
]
diff --git a/packages/shared/package.json b/packages/shared/package.json
index 4e2beab12..bc61c6cac 100644
--- a/packages/shared/package.json
+++ b/packages/shared/package.json
@@ -33,37 +33,31 @@
"clean": "rm -rf dist",
"exports:lint": "ts-unused-exports tsconfig.json --ignoreFiles src/index.ts",
"postinstall": "pnpm typechain",
- "lint": "eslint --ext .ts src test",
+ "lint": "eslint --ext .ts src",
"lint:fix": "pnpm lint --fix",
"package-check": "package-check",
- "test": "vitest run",
"typechain": "typechain --out-dir=./src/contracts/ethers-typechain --target=ethers-v5 \"abis/**/*.json\"",
"typedoc": "typedoc"
},
"dependencies": {
"@ethersproject/abi": "^5.7.0",
- "@ethersproject/abstract-signer": "^5.7.0",
"@ethersproject/providers": "^5.7.2",
- "@nucypher/nucypher-core": "0.13.0-alpha.0",
+ "@nucypher/nucypher-core": "0.13.0-alpha.1",
"axios": "^1.5.0",
"deep-equal": "^2.2.1",
"ethers": "^5.7.2",
- "qs": "^6.10.1",
- "semver": "^7.5.2",
- "zod": "^3.22.1"
+ "qs": "^6.10.1"
},
"devDependencies": {
- "@nucypher/test-utils": "workspace:*",
"@typechain/ethers-v5": "^11.1.1",
"@types/deep-equal": "^1.0.1",
"@types/qs": "^6.9.7",
- "@types/semver": "^7.5.0",
"cz-conventional-changelog": "^3.0.1",
"standard-version": "^9.0.0",
"typechain": "^8.3.1"
},
"engines": {
- "node": ">=16",
+ "node": ">=18",
"pnpm": ">=8.0.0"
}
}
diff --git a/packages/shared/src/characters/cbd-recipient.ts b/packages/shared/src/characters/cbd-recipient.ts
deleted file mode 100644
index c9a035523..000000000
--- a/packages/shared/src/characters/cbd-recipient.ts
+++ /dev/null
@@ -1,205 +0,0 @@
-import {
- combineDecryptionSharesSimple,
- Context,
- DecryptionShareSimple,
- EncryptedThresholdDecryptionRequest,
- EncryptedThresholdDecryptionResponse,
- FerveoVariant,
- SessionSharedSecret,
- SessionStaticSecret,
- ThresholdDecryptionRequest,
- ThresholdMessageKit,
-} from '@nucypher/nucypher-core';
-import { ethers } from 'ethers';
-
-import { ConditionContext } from '../conditions';
-import {
- DkgCoordinatorAgent,
- DkgParticipant,
-} from '../contracts/agents/coordinator';
-import { PorterClient } from '../porter';
-import { fromJSON, objectEquals, toJSON } from '../utils';
-
-export type ThresholdDecrypterJSON = {
- porterUri: string;
- ritualId: number;
- threshold: number;
-};
-
-export class ThresholdDecrypter {
- private constructor(
- private readonly porter: PorterClient,
- private readonly ritualId: number,
- private readonly threshold: number,
- ) {}
-
- public static create(porterUri: string, ritualId: number, threshold: number) {
- return new ThresholdDecrypter(
- new PorterClient(porterUri),
- ritualId,
- threshold,
- );
- }
-
- // Retrieve and decrypt ciphertext using provider and condition expression
- public async retrieveAndDecrypt(
- web3Provider: ethers.providers.Provider,
- thresholdMessageKit: ThresholdMessageKit,
- signer?: ethers.Signer,
- ): Promise {
- const decryptionShares = await this.retrieve(
- web3Provider,
- thresholdMessageKit,
- signer,
- );
- const sharedSecret = combineDecryptionSharesSimple(decryptionShares);
- return thresholdMessageKit.decryptWithSharedSecret(sharedSecret);
- }
-
- // Retrieve decryption shares
- public async retrieve(
- provider: ethers.providers.Provider,
- thresholdMessageKit: ThresholdMessageKit,
- signer?: ethers.Signer,
- ): Promise {
- const dkgParticipants = await DkgCoordinatorAgent.getParticipants(
- provider,
- this.ritualId,
- );
- const wasmContext = await ConditionContext.fromConditions(
- provider,
- thresholdMessageKit.acp.conditions!,
- signer,
- ).toWASMContext();
- const { sharedSecrets, encryptedRequests } =
- await this.makeDecryptionRequests(
- this.ritualId,
- wasmContext,
- dkgParticipants,
- thresholdMessageKit,
- );
-
- const { encryptedResponses, errors } = await this.porter.cbdDecrypt(
- encryptedRequests,
- this.threshold,
- );
- if (Object.keys(encryptedResponses).length < this.threshold) {
- throw new Error(
- `Threshold of responses not met; CBD decryption failed with errors: ${JSON.stringify(
- errors,
- )}`,
- );
- }
-
- return this.makeDecryptionShares(
- encryptedResponses,
- sharedSecrets,
- this.ritualId,
- );
- }
-
- private makeDecryptionShares(
- encryptedResponses: Record,
- sessionSharedSecret: Record,
- expectedRitualId: number,
- ) {
- const decryptedResponses = Object.entries(encryptedResponses).map(
- ([ursula, response]) => response.decrypt(sessionSharedSecret[ursula]),
- );
-
- const ritualIds = decryptedResponses.map(({ ritualId }) => ritualId);
- if (ritualIds.some((ritualId) => ritualId !== expectedRitualId)) {
- throw new Error(
- `Ritual id mismatch. Expected ${expectedRitualId}, got ${ritualIds}`,
- );
- }
-
- return decryptedResponses.map(({ decryptionShare }) =>
- DecryptionShareSimple.fromBytes(decryptionShare),
- );
- }
-
- private async makeDecryptionRequests(
- ritualId: number,
- wasmContext: Context,
- dkgParticipants: Array,
- thresholdMessageKit: ThresholdMessageKit,
- ): Promise<{
- sharedSecrets: Record;
- encryptedRequests: Record;
- }> {
- const decryptionRequest = new ThresholdDecryptionRequest(
- ritualId,
- FerveoVariant.simple,
- thresholdMessageKit.ciphertextHeader,
- thresholdMessageKit.acp,
- wasmContext,
- );
-
- const ephemeralSessionKey = this.makeSessionKey();
-
- // Compute shared secrets for each participant
- const sharedSecrets: Record =
- Object.fromEntries(
- dkgParticipants.map(({ provider, decryptionRequestStaticKey }) => {
- const sharedSecret = ephemeralSessionKey.deriveSharedSecret(
- decryptionRequestStaticKey,
- );
- return [provider, sharedSecret];
- }),
- );
-
- // Create encrypted requests for each participant
- const encryptedRequests: Record<
- string,
- EncryptedThresholdDecryptionRequest
- > = Object.fromEntries(
- Object.entries(sharedSecrets).map(([provider, sessionSharedSecret]) => {
- const encryptedRequest = decryptionRequest.encrypt(
- sessionSharedSecret,
- ephemeralSessionKey.publicKey(),
- );
- return [provider, encryptedRequest];
- }),
- );
-
- return { sharedSecrets, encryptedRequests };
- }
-
- private makeSessionKey() {
- // Moving to a separate function to make it easier to mock
- return SessionStaticSecret.random();
- }
-
- public toObj(): ThresholdDecrypterJSON {
- return {
- porterUri: this.porter.porterUrl.toString(),
- ritualId: this.ritualId,
- threshold: this.threshold,
- };
- }
-
- public toJSON(): string {
- return toJSON(this.toObj());
- }
-
- public static fromObj({
- porterUri,
- ritualId,
- threshold,
- }: ThresholdDecrypterJSON) {
- return new ThresholdDecrypter(
- new PorterClient(porterUri),
- ritualId,
- threshold,
- );
- }
-
- public static fromJSON(json: string) {
- return ThresholdDecrypter.fromObj(fromJSON(json));
- }
-
- public equals(other: ThresholdDecrypter): boolean {
- return objectEquals(this.toObj(), other.toObj());
- }
-}
diff --git a/packages/shared/src/characters/enrico.ts b/packages/shared/src/characters/enrico.ts
deleted file mode 100644
index 470e296f8..000000000
--- a/packages/shared/src/characters/enrico.ts
+++ /dev/null
@@ -1,85 +0,0 @@
-import {
- AccessControlPolicy,
- DkgPublicKey,
- encryptForDkg,
- MessageKit,
- PublicKey,
- SecretKey,
- ThresholdMessageKit,
-} from '@nucypher/nucypher-core';
-import { arrayify, keccak256 } from 'ethers/lib/utils';
-
-import { ConditionExpression } from '../conditions';
-import { Keyring } from '../keyring';
-import { toBytes } from '../utils';
-
-export class Enrico {
- public readonly encryptingKey: PublicKey | DkgPublicKey;
- private readonly keyring: Keyring;
- public conditions?: ConditionExpression | undefined;
-
- constructor(
- encryptingKey: PublicKey | DkgPublicKey,
- verifyingKey?: SecretKey,
- conditions?: ConditionExpression,
- ) {
- this.encryptingKey = encryptingKey;
- this.keyring = new Keyring(verifyingKey ?? SecretKey.random());
- this.conditions = conditions;
- }
-
- public get verifyingKey(): PublicKey {
- return this.keyring.publicKey;
- }
-
- public encryptMessagePre(
- plaintext: Uint8Array | string,
- withConditions?: ConditionExpression,
- ): MessageKit {
- if (!withConditions) {
- withConditions = this.conditions;
- }
-
- if (!(this.encryptingKey instanceof PublicKey)) {
- throw new Error('Wrong key type. Use encryptMessageCbd instead.');
- }
-
- return new MessageKit(
- this.encryptingKey,
- plaintext instanceof Uint8Array ? plaintext : toBytes(plaintext),
- withConditions ? withConditions.toWASMConditions() : null,
- );
- }
-
- public encryptMessageCbd(
- plaintext: Uint8Array | string,
- conditions?: ConditionExpression,
- ): ThresholdMessageKit {
- if (!conditions) {
- conditions = this.conditions;
- }
-
- if (!conditions) {
- throw new Error('Conditions are required for CBD encryption.');
- }
-
- if (!(this.encryptingKey instanceof DkgPublicKey)) {
- throw new Error('Wrong key type. Use encryptMessagePre instead.');
- }
-
- const [ciphertext, authenticatedData] = encryptForDkg(
- plaintext instanceof Uint8Array ? plaintext : toBytes(plaintext),
- this.encryptingKey,
- conditions.toWASMConditions(),
- );
-
- const headerHash = keccak256(ciphertext.header.toBytes());
- const authorization = this.keyring.signer.sign(arrayify(headerHash));
- const acp = new AccessControlPolicy(
- authenticatedData,
- authorization.toBEBytes(),
- );
-
- return new ThresholdMessageKit(ciphertext, acp);
- }
-}
diff --git a/packages/shared/src/characters/pre-recipient.ts b/packages/shared/src/characters/pre-recipient.ts
deleted file mode 100644
index 0c6ecce9d..000000000
--- a/packages/shared/src/characters/pre-recipient.ts
+++ /dev/null
@@ -1,206 +0,0 @@
-import {
- Conditions,
- EncryptedTreasureMap,
- MessageKit,
- PublicKey,
- SecretKey,
- Signer,
-} from '@nucypher/nucypher-core';
-import { ethers } from 'ethers';
-
-import { ConditionContext, ConditionExpression } from '../conditions';
-import { Keyring } from '../keyring';
-import { PolicyMessageKit } from '../kits/message';
-import { RetrievalResult } from '../kits/retrieval';
-import { PorterClient } from '../porter';
-import { base64ToU8Receiver, toJSON, zip } from '../utils';
-
-export type PreDecrypterJSON = {
- porterUri: string;
- policyEncryptingKeyBytes: Uint8Array;
- encryptedTreasureMapBytes: Uint8Array;
- publisherVerifyingKeyBytes: Uint8Array;
- bobSecretKeyBytes: Uint8Array;
-};
-
-export class PreDecrypter {
- // private readonly verifyingKey: Keyring;
-
- constructor(
- private readonly porter: PorterClient,
- private readonly keyring: Keyring,
- private readonly policyEncryptingKey: PublicKey,
- private readonly publisherVerifyingKey: PublicKey,
- private readonly encryptedTreasureMap: EncryptedTreasureMap,
- ) {}
-
- public static create(
- porterUri: string,
- secretKey: SecretKey,
- policyEncryptingKey: PublicKey,
- publisherVerifyingKey: PublicKey,
- encryptedTreasureMap: EncryptedTreasureMap,
- ): PreDecrypter {
- return new PreDecrypter(
- new PorterClient(porterUri),
- new Keyring(secretKey),
- policyEncryptingKey,
- publisherVerifyingKey,
- encryptedTreasureMap,
- );
- }
-
- public get decryptingKey(): PublicKey {
- return this.keyring.publicKey;
- }
-
- public get signer(): Signer {
- return this.keyring.signer;
- }
-
- public decrypt(messageKit: MessageKit | PolicyMessageKit): Uint8Array {
- return this.keyring.decrypt(messageKit);
- }
-
- public async retrieveAndDecrypt(
- provider: ethers.providers.Provider,
- signer: ethers.Signer,
- messageKits: readonly MessageKit[],
- ): Promise {
- const policyMessageKits = await this.retrieve(
- provider,
- signer,
- messageKits,
- );
-
- policyMessageKits.forEach((mk: PolicyMessageKit) => {
- if (!mk.isDecryptableByReceiver()) {
- const errorMsg = `Not enough cFrags retrieved to open capsule ${mk.capsule}.`;
- if (Object.values(mk.errors).length > 0) {
- const ursulasWithErrors = Object.entries(mk.errors).map(
- ([address, error]) => `${address} - ${error}`,
- );
- throw Error(
- `${errorMsg} Some Ursulas have failed with errors:\n${ursulasWithErrors.join(
- '\n',
- )}`,
- );
- } else {
- throw Error(errorMsg);
- }
- }
- });
-
- return policyMessageKits.map((mk) => this.keyring.decrypt(mk));
- }
-
- public async retrieve(
- provider: ethers.providers.Provider,
- signer: ethers.Signer,
- messageKits: readonly MessageKit[],
- ): Promise {
- const treasureMap = this.encryptedTreasureMap.decrypt(
- this.keyring.secretKey,
- this.publisherVerifyingKey,
- );
-
- // concat into single array of conditions
- const conditions = messageKits
- .map((mk) => mk.conditions)
- .filter((condition): condition is Conditions => !!condition)
- .map((condition) => ConditionExpression.fromJSON(condition.toString()))
- .reduce((acc: ConditionExpression[], val) => acc.concat(val), [])
- .map((condExpr: ConditionExpression) => condExpr.condition);
-
- const conditionContext = new ConditionContext(
- provider,
- conditions,
- {},
- signer,
- );
-
- const policyMessageKits = messageKits.map((mk) =>
- PolicyMessageKit.fromMessageKit(
- mk,
- this.policyEncryptingKey,
- treasureMap.threshold,
- ),
- );
-
- const retrievalKits = policyMessageKits.map((pk) => pk.asRetrievalKit());
- const conditionContextJSON = conditionContext
- ? await conditionContext.toJson()
- : undefined;
- const retrieveCFragsResponses = await this.porter.retrieveCFrags(
- treasureMap,
- retrievalKits,
- this.publisherVerifyingKey,
- this.decryptingKey,
- this.keyring.publicKey,
- conditionContextJSON,
- );
-
- return zip(policyMessageKits, retrieveCFragsResponses).map((pair) => {
- const [messageKit, { cFrags, errors }] = pair;
- const vcFrags = Object.keys(cFrags).map((address) => {
- const verified = cFrags[address].verify(
- messageKit.capsule,
- this.publisherVerifyingKey,
- this.policyEncryptingKey,
- this.decryptingKey,
- );
- return [address, verified];
- });
- const retrievalResult = new RetrievalResult(
- Object.fromEntries(vcFrags),
- errors,
- );
- return messageKit.withResult(retrievalResult);
- });
- }
-
- public toObj(): PreDecrypterJSON {
- return {
- porterUri: this.porter.porterUrl.toString(),
- policyEncryptingKeyBytes: this.policyEncryptingKey.toCompressedBytes(),
- encryptedTreasureMapBytes: this.encryptedTreasureMap.toBytes(),
- publisherVerifyingKeyBytes:
- this.publisherVerifyingKey.toCompressedBytes(),
- bobSecretKeyBytes: this.keyring.secretKey.toBEBytes(),
- };
- }
-
- public toJSON(): string {
- return toJSON(this.toObj());
- }
-
- public static fromObj({
- porterUri,
- policyEncryptingKeyBytes,
- encryptedTreasureMapBytes,
- publisherVerifyingKeyBytes,
- bobSecretKeyBytes,
- }: PreDecrypterJSON) {
- return new PreDecrypter(
- new PorterClient(porterUri),
- new Keyring(SecretKey.fromBEBytes(bobSecretKeyBytes)),
- PublicKey.fromCompressedBytes(policyEncryptingKeyBytes),
- PublicKey.fromCompressedBytes(publisherVerifyingKeyBytes),
- EncryptedTreasureMap.fromBytes(encryptedTreasureMapBytes),
- );
- }
-
- public static fromJSON(json: string) {
- const config = JSON.parse(json, base64ToU8Receiver);
- return PreDecrypter.fromObj(config);
- }
-
- public equals(other: PreDecrypter): boolean {
- return [
- this.porter.porterUrl.toString() === other.porter.porterUrl.toString(),
- this.policyEncryptingKey.equals(other.policyEncryptingKey),
- this.encryptedTreasureMap.equals(other.encryptedTreasureMap),
- this.publisherVerifyingKey.equals(other.publisherVerifyingKey),
- ].every(Boolean);
- }
-}
diff --git a/packages/shared/src/conditions/index.ts b/packages/shared/src/conditions/index.ts
deleted file mode 100644
index c5e5cc257..000000000
--- a/packages/shared/src/conditions/index.ts
+++ /dev/null
@@ -1,19 +0,0 @@
-// TODO: Do we want structured exports in @nucypher/shared?
-import * as base from './base';
-import * as predefined from './predefined';
-
-// TODO: Or do we want to export everything from the base and predefined modules?
-export * from './base';
-export * from './predefined';
-
-export {
- CompoundConditionType,
- type CompoundConditionProps,
-} from './compound-condition';
-export { Condition, type ConditionProps } from './condition';
-export {
- ConditionExpression,
- type ConditionExpressionJSON,
-} from './condition-expr';
-export { ConditionContext, type CustomContextParam } from './context';
-export { base, predefined };
diff --git a/packages/shared/src/contracts/agents/coordinator.ts b/packages/shared/src/contracts/agents/coordinator.ts
index 77487650b..f1d613178 100644
--- a/packages/shared/src/contracts/agents/coordinator.ts
+++ b/packages/shared/src/contracts/agents/coordinator.ts
@@ -1,4 +1,8 @@
-import { DkgPublicKey, SessionStaticKey } from '@nucypher/nucypher-core';
+import {
+ DkgPublicKey,
+ SessionStaticKey,
+ ThresholdMessageKit,
+} from '@nucypher/nucypher-core';
import { BigNumberish, ethers } from 'ethers';
import { ChecksumAddress } from '../../types';
@@ -42,8 +46,8 @@ export class DkgCoordinatorAgent {
provider: ethers.providers.Provider,
ritualId: number,
): Promise {
- const Coordinator = await this.connectReadOnly(provider);
- const participants = await Coordinator.getParticipants(ritualId);
+ const coordinator = await this.connectReadOnly(provider);
+ const participants = await coordinator.getParticipants(ritualId);
return participants.map((participant) => {
return {
@@ -64,8 +68,8 @@ export class DkgCoordinatorAgent {
duration: BigNumberish,
accessController: string,
): Promise {
- const Coordinator = await this.connectReadWrite(provider, signer);
- const tx = await Coordinator.initiateRitual(
+ const coordinator = await this.connectReadWrite(provider, signer);
+ const tx = await coordinator.initiateRitual(
providers,
authority,
duration,
@@ -83,16 +87,16 @@ export class DkgCoordinatorAgent {
provider: ethers.providers.Provider,
ritualId: number,
): Promise {
- const Coordinator = await this.connectReadOnly(provider);
- return Coordinator.rituals(ritualId);
+ const coordinator = await this.connectReadOnly(provider);
+ return coordinator.rituals(ritualId);
}
public static async getRitualState(
provider: ethers.providers.Provider,
ritualId: number,
): Promise {
- const Coordinator = await this.connectReadOnly(provider);
- return await Coordinator.getRitualState(ritualId);
+ const coordinator = await this.connectReadOnly(provider);
+ return await coordinator.getRitualState(ritualId);
}
public static async onRitualEndEvent(
@@ -100,11 +104,11 @@ export class DkgCoordinatorAgent {
ritualId: number,
callback: (successful: boolean) => void,
): Promise {
- const Coordinator = await this.connectReadOnly(provider);
+ const coordinator = await this.connectReadOnly(provider);
// We leave `initiator` undefined because we don't care who the initiator is
// We leave `successful` undefined because we don't care if the ritual was successful
- const eventFilter = Coordinator.filters.EndRitual(ritualId, undefined);
- Coordinator.once(eventFilter, (_ritualId, successful) => {
+ const eventFilter = coordinator.filters.EndRitual(ritualId, undefined);
+ coordinator.once(eventFilter, (_ritualId, successful) => {
callback(successful);
});
}
@@ -113,13 +117,26 @@ export class DkgCoordinatorAgent {
provider: ethers.providers.Provider,
dkgPublicKey: DkgPublicKey,
): Promise {
- const Coordinator = await this.connectReadOnly(provider);
+ const coordinator = await this.connectReadOnly(provider);
const dkgPublicKeyBytes = dkgPublicKey.toBytes();
const pointStruct: BLS12381.G1PointStruct = {
word0: dkgPublicKeyBytes.slice(0, 32),
word1: dkgPublicKeyBytes.slice(32, 48),
};
- return await Coordinator.getRitualIdFromPublicKey(pointStruct);
+ return await coordinator.getRitualIdFromPublicKey(pointStruct);
+ }
+
+ public static async isEncryptionAuthorized(
+ provider: ethers.providers.Provider,
+ ritualId: number,
+ thresholdMessageKit: ThresholdMessageKit,
+ ): Promise {
+ const coordinator = await this.connectReadOnly(provider);
+ return await coordinator.isEncryptionAuthorized(
+ ritualId,
+ thresholdMessageKit.acp.authorization,
+ thresholdMessageKit.ciphertextHeader.toBytes(),
+ );
}
private static async connectReadOnly(provider: ethers.providers.Provider) {
diff --git a/packages/shared/src/contracts/agents/subscription-manager.ts b/packages/shared/src/contracts/agents/subscription-manager.ts
index f249d56e8..88113f355 100644
--- a/packages/shared/src/contracts/agents/subscription-manager.ts
+++ b/packages/shared/src/contracts/agents/subscription-manager.ts
@@ -23,11 +23,11 @@ export class PreSubscriptionManagerAgent {
endTimestamp: number,
ownerAddress: ChecksumAddress,
): Promise {
- const SubscriptionManager = await this.connectReadWrite(provider, signer);
+ const subscriptionManager = await this.connectReadWrite(provider, signer);
const overrides = {
value: valueInWei.toString(),
};
- const estimatedGas = await SubscriptionManager.estimateGas.createPolicy(
+ const estimatedGas = await subscriptionManager.estimateGas.createPolicy(
ethersUtils.hexlify(policyId),
ownerAddress,
size,
@@ -35,7 +35,7 @@ export class PreSubscriptionManagerAgent {
endTimestamp,
overrides,
);
- const tx = await SubscriptionManager.createPolicy(
+ const tx = await subscriptionManager.createPolicy(
ethersUtils.hexlify(policyId),
ownerAddress,
size,
@@ -53,8 +53,8 @@ export class PreSubscriptionManagerAgent {
startTimestamp: number,
endTimestamp: number,
): Promise {
- const SubscriptionManager = await this.connectReadOnly(provider);
- return await SubscriptionManager.getPolicyCost(
+ const subscriptionManager = await this.connectReadOnly(provider);
+ return await subscriptionManager.getPolicyCost(
size,
startTimestamp,
endTimestamp,
diff --git a/packages/shared/src/contracts/ethers-typechain/Coordinator.ts b/packages/shared/src/contracts/ethers-typechain/Coordinator.ts
index c8aa87597..4f6744b86 100644
--- a/packages/shared/src/contracts/ethers-typechain/Coordinator.ts
+++ b/packages/shared/src/contracts/ethers-typechain/Coordinator.ts
@@ -92,7 +92,9 @@ export interface CoordinatorInterface extends utils.Interface {
"grantRole(bytes32,address)": FunctionFragment;
"hasRole(bytes32,address)": FunctionFragment;
"initiateRitual(address[],address,uint32,address)": FunctionFragment;
+ "isEncryptionAuthorized(uint32,bytes,bytes)": FunctionFragment;
"isInitiationPublic()": FunctionFragment;
+ "isProviderPublicKeySet(address)": FunctionFragment;
"isRitualFinalized(uint32)": FunctionFragment;
"makeInitiationPublic()": FunctionFragment;
"maxDkgSize()": FunctionFragment;
@@ -148,7 +150,9 @@ export interface CoordinatorInterface extends utils.Interface {
| "grantRole"
| "hasRole"
| "initiateRitual"
+ | "isEncryptionAuthorized"
| "isInitiationPublic"
+ | "isProviderPublicKeySet"
| "isRitualFinalized"
| "makeInitiationPublic"
| "maxDkgSize"
@@ -280,10 +284,18 @@ export interface CoordinatorInterface extends utils.Interface {
functionFragment: "initiateRitual",
values: [string[], string, BigNumberish, string]
): string;
+ encodeFunctionData(
+ functionFragment: "isEncryptionAuthorized",
+ values: [BigNumberish, BytesLike, BytesLike]
+ ): string;
encodeFunctionData(
functionFragment: "isInitiationPublic",
values?: undefined
): string;
+ encodeFunctionData(
+ functionFragment: "isProviderPublicKeySet",
+ values: [string]
+ ): string;
encodeFunctionData(
functionFragment: "isRitualFinalized",
values: [BigNumberish]
@@ -474,10 +486,18 @@ export interface CoordinatorInterface extends utils.Interface {
functionFragment: "initiateRitual",
data: BytesLike
): Result;
+ decodeFunctionResult(
+ functionFragment: "isEncryptionAuthorized",
+ data: BytesLike
+ ): Result;
decodeFunctionResult(
functionFragment: "isInitiationPublic",
data: BytesLike
): Result;
+ decodeFunctionResult(
+ functionFragment: "isProviderPublicKeySet",
+ data: BytesLike
+ ): Result;
decodeFunctionResult(
functionFragment: "isRitualFinalized",
data: BytesLike
@@ -917,8 +937,20 @@ export interface Coordinator extends BaseContract {
overrides?: Overrides & { from?: string }
): Promise;
+ isEncryptionAuthorized(
+ ritualId: BigNumberish,
+ evidence: BytesLike,
+ ciphertextHeader: BytesLike,
+ overrides?: CallOverrides
+ ): Promise<[boolean]>;
+
isInitiationPublic(overrides?: CallOverrides): Promise<[boolean]>;
+ isProviderPublicKeySet(
+ _provider: string,
+ overrides?: CallOverrides
+ ): Promise<[boolean]>;
+
isRitualFinalized(
ritualId: BigNumberish,
overrides?: CallOverrides
@@ -1168,8 +1200,20 @@ export interface Coordinator extends BaseContract {
overrides?: Overrides & { from?: string }
): Promise;
+ isEncryptionAuthorized(
+ ritualId: BigNumberish,
+ evidence: BytesLike,
+ ciphertextHeader: BytesLike,
+ overrides?: CallOverrides
+ ): Promise;
+
isInitiationPublic(overrides?: CallOverrides): Promise;
+ isProviderPublicKeySet(
+ _provider: string,
+ overrides?: CallOverrides
+ ): Promise;
+
isRitualFinalized(
ritualId: BigNumberish,
overrides?: CallOverrides
@@ -1415,8 +1459,20 @@ export interface Coordinator extends BaseContract {
overrides?: CallOverrides
): Promise;
+ isEncryptionAuthorized(
+ ritualId: BigNumberish,
+ evidence: BytesLike,
+ ciphertextHeader: BytesLike,
+ overrides?: CallOverrides
+ ): Promise;
+
isInitiationPublic(overrides?: CallOverrides): Promise;
+ isProviderPublicKeySet(
+ _provider: string,
+ overrides?: CallOverrides
+ ): Promise;
+
isRitualFinalized(
ritualId: BigNumberish,
overrides?: CallOverrides
@@ -1805,8 +1861,20 @@ export interface Coordinator extends BaseContract {
overrides?: Overrides & { from?: string }
): Promise;
+ isEncryptionAuthorized(
+ ritualId: BigNumberish,
+ evidence: BytesLike,
+ ciphertextHeader: BytesLike,
+ overrides?: CallOverrides
+ ): Promise;
+
isInitiationPublic(overrides?: CallOverrides): Promise;
+ isProviderPublicKeySet(
+ _provider: string,
+ overrides?: CallOverrides
+ ): Promise;
+
isRitualFinalized(
ritualId: BigNumberish,
overrides?: CallOverrides
@@ -2029,10 +2097,22 @@ export interface Coordinator extends BaseContract {
overrides?: Overrides & { from?: string }
): Promise;
+ isEncryptionAuthorized(
+ ritualId: BigNumberish,
+ evidence: BytesLike,
+ ciphertextHeader: BytesLike,
+ overrides?: CallOverrides
+ ): Promise;
+
isInitiationPublic(
overrides?: CallOverrides
): Promise;
+ isProviderPublicKeySet(
+ _provider: string,
+ overrides?: CallOverrides
+ ): Promise;
+
isRitualFinalized(
ritualId: BigNumberish,
overrides?: CallOverrides
diff --git a/packages/shared/src/contracts/ethers-typechain/factories/Coordinator__factory.ts b/packages/shared/src/contracts/ethers-typechain/factories/Coordinator__factory.ts
index 61b0e22fd..2418b17dc 100644
--- a/packages/shared/src/contracts/ethers-typechain/factories/Coordinator__factory.ts
+++ b/packages/shared/src/contracts/ethers-typechain/factories/Coordinator__factory.ts
@@ -8,1377 +8,1425 @@ import type { Coordinator, CoordinatorInterface } from "../Coordinator";
const _abi = [
{
+ type: "constructor",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "contract IAccessControlApplication",
- name: "_stakes",
+ name: "_application",
type: "address",
+ internalType: "contract ITACoChildApplication",
},
{
- internalType: "uint32",
name: "_timeout",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "uint16",
name: "_maxDkgSize",
type: "uint16",
+ internalType: "uint16",
},
{
- internalType: "address",
name: "_admin",
type: "address",
+ internalType: "address",
},
{
- internalType: "contract IERC20",
name: "_currency",
type: "address",
+ internalType: "contract IERC20",
},
{
- internalType: "uint256",
name: "_feeRatePerSecond",
type: "uint256",
+ internalType: "uint256",
},
],
- stateMutability: "nonpayable",
- type: "constructor",
},
{
- anonymous: false,
+ type: "event",
+ name: "AggregationPosted",
inputs: [
{
- indexed: true,
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "node",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
- indexed: false,
- internalType: "bytes32",
name: "aggregatedTranscriptDigest",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: false,
},
],
- name: "AggregationPosted",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
- inputs: [],
- name: "DefaultAdminDelayChangeCanceled",
type: "event",
+ name: "DefaultAdminDelayChangeCanceled",
+ inputs: [],
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "DefaultAdminDelayChangeScheduled",
inputs: [
{
- indexed: false,
- internalType: "uint48",
name: "newDelay",
type: "uint48",
+ internalType: "uint48",
+ indexed: false,
},
{
- indexed: false,
- internalType: "uint48",
name: "effectSchedule",
type: "uint48",
+ internalType: "uint48",
+ indexed: false,
},
],
- name: "DefaultAdminDelayChangeScheduled",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
- inputs: [],
- name: "DefaultAdminTransferCanceled",
type: "event",
+ name: "DefaultAdminTransferCanceled",
+ inputs: [],
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "DefaultAdminTransferScheduled",
inputs: [
{
- indexed: true,
- internalType: "address",
name: "newAdmin",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
- indexed: false,
- internalType: "uint48",
name: "acceptSchedule",
type: "uint48",
+ internalType: "uint48",
+ indexed: false,
},
],
- name: "DefaultAdminTransferScheduled",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "EndRitual",
inputs: [
{
- indexed: true,
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
+ indexed: true,
},
{
- indexed: false,
- internalType: "bool",
name: "successful",
type: "bool",
+ internalType: "bool",
+ indexed: false,
},
],
- name: "EndRitual",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "MaxDkgSizeChanged",
inputs: [
{
- indexed: false,
- internalType: "uint16",
name: "oldSize",
type: "uint16",
+ internalType: "uint16",
+ indexed: false,
},
{
- indexed: false,
- internalType: "uint16",
name: "newSize",
type: "uint16",
+ internalType: "uint16",
+ indexed: false,
},
],
- name: "MaxDkgSizeChanged",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "ParticipantPublicKeySet",
inputs: [
{
- indexed: true,
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "participant",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
+ name: "publicKey",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes32",
name: "word1",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes32",
name: "word2",
type: "bytes32",
+ internalType: "bytes32",
},
],
- indexed: false,
internalType: "struct BLS12381.G2Point",
- name: "publicKey",
- type: "tuple",
+ indexed: false,
},
],
- name: "ParticipantPublicKeySet",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "RoleAdminChanged",
inputs: [
{
- indexed: true,
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "bytes32",
name: "previousAdminRole",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "bytes32",
name: "newAdminRole",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: true,
},
],
- name: "RoleAdminChanged",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "RoleGranted",
inputs: [
{
- indexed: true,
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "account",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "sender",
type: "address",
+ internalType: "address",
+ indexed: true,
},
],
- name: "RoleGranted",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "RoleRevoked",
inputs: [
{
- indexed: true,
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "account",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "sender",
type: "address",
+ internalType: "address",
+ indexed: true,
},
],
- name: "RoleRevoked",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "StartAggregationRound",
inputs: [
{
- indexed: true,
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
+ indexed: true,
},
],
- name: "StartAggregationRound",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "StartRitual",
inputs: [
{
- indexed: true,
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "authority",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
- indexed: false,
- internalType: "address[]",
name: "participants",
type: "address[]",
+ internalType: "address[]",
+ indexed: false,
},
],
- name: "StartRitual",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "TimeoutChanged",
inputs: [
{
- indexed: false,
- internalType: "uint32",
name: "oldTimeout",
type: "uint32",
+ internalType: "uint32",
+ indexed: false,
},
{
- indexed: false,
- internalType: "uint32",
name: "newTimeout",
type: "uint32",
+ internalType: "uint32",
+ indexed: false,
},
],
- name: "TimeoutChanged",
- type: "event",
+ anonymous: false,
},
{
- anonymous: false,
+ type: "event",
+ name: "TranscriptPosted",
inputs: [
{
- indexed: true,
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
+ indexed: true,
},
{
- indexed: true,
- internalType: "address",
name: "node",
type: "address",
+ internalType: "address",
+ indexed: true,
},
{
- indexed: false,
- internalType: "bytes32",
name: "transcriptDigest",
type: "bytes32",
+ internalType: "bytes32",
+ indexed: false,
},
],
- name: "TranscriptPosted",
- type: "event",
+ anonymous: false,
},
{
- inputs: [],
+ type: "function",
name: "DEFAULT_ADMIN_ROLE",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "bytes32",
name: "",
type: "bytes32",
+ internalType: "bytes32",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "INITIATOR_ROLE",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "bytes32",
name: "",
type: "bytes32",
+ internalType: "bytes32",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "TREASURY_ROLE",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "bytes32",
name: "",
type: "bytes32",
+ internalType: "bytes32",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "acceptDefaultAdminTransfer",
- outputs: [],
stateMutability: "nonpayable",
- type: "function",
+ inputs: [],
+ outputs: [],
},
{
- inputs: [],
+ type: "function",
name: "application",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "contract IAccessControlApplication",
name: "",
type: "address",
+ internalType: "contract ITACoChildApplication",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "beginDefaultAdminTransfer",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "address",
name: "newAdmin",
type: "address",
+ internalType: "address",
},
],
- name: "beginDefaultAdminTransfer",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "cancelDefaultAdminTransfer",
- outputs: [],
stateMutability: "nonpayable",
- type: "function",
+ inputs: [],
+ outputs: [],
},
{
+ type: "function",
+ name: "changeDefaultAdminDelay",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint48",
name: "newDelay",
type: "uint48",
+ internalType: "uint48",
},
],
- name: "changeDefaultAdminDelay",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "cohortFingerprint",
+ stateMutability: "pure",
inputs: [
{
- internalType: "address[]",
name: "nodes",
type: "address[]",
+ internalType: "address[]",
},
],
- name: "cohortFingerprint",
outputs: [
{
- internalType: "bytes32",
name: "",
type: "bytes32",
+ internalType: "bytes32",
},
],
- stateMutability: "pure",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "currency",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "contract IERC20",
name: "",
type: "address",
+ internalType: "contract IERC20",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "defaultAdmin",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "address",
name: "",
type: "address",
+ internalType: "address",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "defaultAdminDelay",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint48",
name: "",
type: "uint48",
+ internalType: "uint48",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "defaultAdminDelayIncreaseWait",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint48",
name: "",
type: "uint48",
+ internalType: "uint48",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "feeRatePerSecond",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getAuthority",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "getAuthority",
outputs: [
{
- internalType: "address",
name: "",
type: "address",
+ internalType: "address",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getParticipantFromProvider",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "address",
name: "provider",
type: "address",
+ internalType: "address",
},
],
- name: "getParticipantFromProvider",
outputs: [
{
+ name: "",
+ type: "tuple",
components: [
{
- internalType: "address",
name: "provider",
type: "address",
+ internalType: "address",
},
{
- internalType: "bool",
name: "aggregated",
type: "bool",
+ internalType: "bool",
},
{
- internalType: "bytes",
name: "transcript",
type: "bytes",
+ internalType: "bytes",
},
{
- internalType: "bytes",
name: "decryptionRequestStaticKey",
type: "bytes",
+ internalType: "bytes",
},
],
internalType: "struct Coordinator.Participant",
- name: "",
- type: "tuple",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getParticipants",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "getParticipants",
outputs: [
{
+ name: "",
+ type: "tuple[]",
components: [
{
- internalType: "address",
name: "provider",
type: "address",
+ internalType: "address",
},
{
- internalType: "bool",
name: "aggregated",
type: "bool",
+ internalType: "bool",
},
{
- internalType: "bytes",
name: "transcript",
type: "bytes",
+ internalType: "bytes",
},
{
- internalType: "bytes",
name: "decryptionRequestStaticKey",
type: "bytes",
+ internalType: "bytes",
},
],
internalType: "struct Coordinator.Participant[]",
- name: "",
- type: "tuple[]",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getProviderPublicKey",
+ stateMutability: "view",
inputs: [
{
- internalType: "address",
name: "_provider",
type: "address",
+ internalType: "address",
},
{
- internalType: "uint256",
name: "_ritualId",
type: "uint256",
+ internalType: "uint256",
},
],
- name: "getProviderPublicKey",
outputs: [
{
+ name: "",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes32",
name: "word1",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes32",
name: "word2",
type: "bytes32",
+ internalType: "bytes32",
},
],
internalType: "struct BLS12381.G2Point",
- name: "",
- type: "tuple",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getPublicKeyFromRitualId",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "getPublicKeyFromRitualId",
outputs: [
{
+ name: "dkgPublicKey",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes16",
name: "word1",
type: "bytes16",
+ internalType: "bytes16",
},
],
internalType: "struct BLS12381.G1Point",
- name: "dkgPublicKey",
- type: "tuple",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getRitualIdFromPublicKey",
+ stateMutability: "view",
inputs: [
{
+ name: "dkgPublicKey",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes16",
name: "word1",
type: "bytes16",
+ internalType: "bytes16",
},
],
internalType: "struct BLS12381.G1Point",
- name: "dkgPublicKey",
- type: "tuple",
},
],
- name: "getRitualIdFromPublicKey",
outputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getRitualInitiationCost",
+ stateMutability: "view",
inputs: [
{
- internalType: "address[]",
name: "providers",
type: "address[]",
+ internalType: "address[]",
},
{
- internalType: "uint32",
name: "duration",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "getRitualInitiationCost",
outputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getRitualState",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "getRitualState",
outputs: [
{
- internalType: "enum Coordinator.RitualState",
name: "",
type: "uint8",
+ internalType: "enum Coordinator.RitualState",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getRoleAdmin",
+ stateMutability: "view",
inputs: [
{
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
},
],
- name: "getRoleAdmin",
outputs: [
{
- internalType: "bytes32",
name: "",
type: "bytes32",
+ internalType: "bytes32",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "getThresholdForRitualSize",
+ stateMutability: "pure",
inputs: [
{
- internalType: "uint16",
name: "size",
type: "uint16",
+ internalType: "uint16",
},
],
- name: "getThresholdForRitualSize",
outputs: [
{
- internalType: "uint16",
name: "",
type: "uint16",
+ internalType: "uint16",
},
],
- stateMutability: "pure",
- type: "function",
},
{
+ type: "function",
+ name: "grantRole",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "address",
name: "account",
type: "address",
+ internalType: "address",
},
],
- name: "grantRole",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "hasRole",
+ stateMutability: "view",
inputs: [
{
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "address",
name: "account",
type: "address",
+ internalType: "address",
},
],
- name: "hasRole",
outputs: [
{
- internalType: "bool",
name: "",
type: "bool",
+ internalType: "bool",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "initiateRitual",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "address[]",
name: "providers",
type: "address[]",
+ internalType: "address[]",
},
{
- internalType: "address",
name: "authority",
type: "address",
+ internalType: "address",
},
{
- internalType: "uint32",
name: "duration",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "contract IEncryptionAuthorizer",
name: "accessController",
type: "address",
+ internalType: "contract IEncryptionAuthorizer",
},
],
- name: "initiateRitual",
outputs: [
{
- internalType: "uint32",
name: "",
type: "uint32",
+ internalType: "uint32",
},
],
- stateMutability: "nonpayable",
+ },
+ {
type: "function",
+ name: "isEncryptionAuthorized",
+ stateMutability: "view",
+ inputs: [
+ {
+ name: "ritualId",
+ type: "uint32",
+ internalType: "uint32",
+ },
+ {
+ name: "evidence",
+ type: "bytes",
+ internalType: "bytes",
+ },
+ {
+ name: "ciphertextHeader",
+ type: "bytes",
+ internalType: "bytes",
+ },
+ ],
+ outputs: [
+ {
+ name: "",
+ type: "bool",
+ internalType: "bool",
+ },
+ ],
},
{
- inputs: [],
+ type: "function",
name: "isInitiationPublic",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "bool",
name: "",
type: "bool",
+ internalType: "bool",
},
],
- stateMutability: "view",
+ },
+ {
type: "function",
+ name: "isProviderPublicKeySet",
+ stateMutability: "view",
+ inputs: [
+ {
+ name: "_provider",
+ type: "address",
+ internalType: "address",
+ },
+ ],
+ outputs: [
+ {
+ name: "",
+ type: "bool",
+ internalType: "bool",
+ },
+ ],
},
{
+ type: "function",
+ name: "isRitualFinalized",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "isRitualFinalized",
outputs: [
{
- internalType: "bool",
name: "",
type: "bool",
+ internalType: "bool",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "makeInitiationPublic",
- outputs: [],
stateMutability: "nonpayable",
- type: "function",
+ inputs: [],
+ outputs: [],
},
{
- inputs: [],
+ type: "function",
name: "maxDkgSize",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint16",
name: "",
type: "uint16",
+ internalType: "uint16",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "numberOfRituals",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "owner",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "address",
name: "",
type: "address",
+ internalType: "address",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "pendingDefaultAdmin",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "address",
name: "newAdmin",
type: "address",
+ internalType: "address",
},
{
- internalType: "uint48",
name: "schedule",
type: "uint48",
+ internalType: "uint48",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "pendingDefaultAdminDelay",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint48",
name: "newDelay",
type: "uint48",
+ internalType: "uint48",
},
{
- internalType: "uint48",
name: "schedule",
type: "uint48",
+ internalType: "uint48",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "pendingFees",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- name: "pendingFees",
outputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "postAggregation",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "bytes",
name: "aggregatedTranscript",
type: "bytes",
+ internalType: "bytes",
},
{
+ name: "dkgPublicKey",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes16",
name: "word1",
type: "bytes16",
+ internalType: "bytes16",
},
],
internalType: "struct BLS12381.G1Point",
- name: "dkgPublicKey",
- type: "tuple",
},
{
- internalType: "bytes",
name: "decryptionRequestStaticKey",
type: "bytes",
+ internalType: "bytes",
},
],
- name: "postAggregation",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "postTranscript",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "bytes",
name: "transcript",
type: "bytes",
+ internalType: "bytes",
},
],
- name: "postTranscript",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "processPendingFee",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "processPendingFee",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "renounceRole",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "address",
name: "account",
type: "address",
+ internalType: "address",
},
],
- name: "renounceRole",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "revokeRole",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "bytes32",
name: "role",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "address",
name: "account",
type: "address",
+ internalType: "address",
},
],
- name: "revokeRole",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "rituals",
+ stateMutability: "view",
inputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- name: "rituals",
outputs: [
{
- internalType: "address",
name: "initiator",
type: "address",
+ internalType: "address",
},
{
- internalType: "uint32",
name: "initTimestamp",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "uint32",
name: "endTimestamp",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "uint16",
name: "totalTranscripts",
type: "uint16",
+ internalType: "uint16",
},
{
- internalType: "uint16",
name: "totalAggregations",
type: "uint16",
+ internalType: "uint16",
},
{
- internalType: "address",
name: "authority",
type: "address",
+ internalType: "address",
},
{
- internalType: "uint16",
name: "dkgSize",
type: "uint16",
+ internalType: "uint16",
},
{
- internalType: "uint16",
name: "threshold",
type: "uint16",
+ internalType: "uint16",
},
{
- internalType: "bool",
name: "aggregationMismatch",
type: "bool",
+ internalType: "bool",
},
{
- internalType: "contract IEncryptionAuthorizer",
name: "accessController",
type: "address",
+ internalType: "contract IEncryptionAuthorizer",
},
{
+ name: "publicKey",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes16",
name: "word1",
type: "bytes16",
+ internalType: "bytes16",
},
],
internalType: "struct BLS12381.G1Point",
- name: "publicKey",
- type: "tuple",
},
{
- internalType: "bytes",
name: "aggregatedTranscript",
type: "bytes",
+ internalType: "bytes",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "rollbackDefaultAdminDelay",
- outputs: [],
stateMutability: "nonpayable",
- type: "function",
+ inputs: [],
+ outputs: [],
},
{
+ type: "function",
+ name: "setMaxDkgSize",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint16",
name: "newSize",
type: "uint16",
+ internalType: "uint16",
},
],
- name: "setMaxDkgSize",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "setProviderPublicKey",
+ stateMutability: "nonpayable",
inputs: [
{
+ name: "_publicKey",
+ type: "tuple",
components: [
{
- internalType: "bytes32",
name: "word0",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes32",
name: "word1",
type: "bytes32",
+ internalType: "bytes32",
},
{
- internalType: "bytes32",
name: "word2",
type: "bytes32",
+ internalType: "bytes32",
},
],
internalType: "struct BLS12381.G2Point",
- name: "_publicKey",
- type: "tuple",
},
],
- name: "setProviderPublicKey",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "setReimbursementPool",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "contract IReimbursementPool",
name: "pool",
type: "address",
+ internalType: "contract IReimbursementPool",
},
],
- name: "setReimbursementPool",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "setRitualAuthority",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint32",
name: "ritualId",
type: "uint32",
+ internalType: "uint32",
},
{
- internalType: "address",
name: "authority",
type: "address",
+ internalType: "address",
},
],
- name: "setRitualAuthority",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "setTimeout",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "uint32",
name: "newTimeout",
type: "uint32",
+ internalType: "uint32",
},
],
- name: "setTimeout",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
{
+ type: "function",
+ name: "supportsInterface",
+ stateMutability: "view",
inputs: [
{
- internalType: "bytes4",
name: "interfaceId",
type: "bytes4",
+ internalType: "bytes4",
},
],
- name: "supportsInterface",
outputs: [
{
- internalType: "bool",
name: "",
type: "bool",
+ internalType: "bool",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "timeout",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint32",
name: "",
type: "uint32",
+ internalType: "uint32",
},
],
- stateMutability: "view",
- type: "function",
},
{
- inputs: [],
+ type: "function",
name: "totalPendingFees",
+ stateMutability: "view",
+ inputs: [],
outputs: [
{
- internalType: "uint256",
name: "",
type: "uint256",
+ internalType: "uint256",
},
],
- stateMutability: "view",
- type: "function",
},
{
+ type: "function",
+ name: "withdrawTokens",
+ stateMutability: "nonpayable",
inputs: [
{
- internalType: "contract IERC20",
name: "token",
type: "address",
+ internalType: "contract IERC20",
},
{
- internalType: "uint256",
name: "amount",
type: "uint256",
+ internalType: "uint256",
},
],
- name: "withdrawTokens",
outputs: [],
- stateMutability: "nonpayable",
- type: "function",
},
] as const;
diff --git a/packages/shared/src/contracts/registry.ts b/packages/shared/src/contracts/registry.ts
index ef3706d2f..d15ffc23e 100644
--- a/packages/shared/src/contracts/registry.ts
+++ b/packages/shared/src/contracts/registry.ts
@@ -13,7 +13,7 @@ const POLYGON: Contracts = {
const MUMBAI: Contracts = {
SUBSCRIPTION_MANAGER: '0xb9015d7b35ce7c81dde38ef7136baa3b1044f313',
- COORDINATOR: '0x0f019Ade1D34399D946CF2f161386362655Dd1A4',
+ COORDINATOR: '0x8E49989F9D3aD89c8ab0de21FbA2E00C67ca872F',
};
const GOERLI: Contracts = {
diff --git a/packages/shared/src/index.ts b/packages/shared/src/index.ts
index 6013ef5c8..800d2ac5e 100644
--- a/packages/shared/src/index.ts
+++ b/packages/shared/src/index.ts
@@ -1,23 +1,9 @@
-export * from './characters';
-export * from './cohort';
-export * from './conditions';
export * from './contracts';
-export * from './dkg';
-export * from './keyring';
-export * from './kits';
-export * from './policy';
export * from './porter';
-export * from './strategy';
export * from './types';
export * from './utils';
export * from './web3';
-// Forming modules for convenience
-// TODO: Should we structure shared exports like this?
-import * as conditions from './conditions';
-
-export { conditions };
-
// Re-exports
export {
Ciphertext,
diff --git a/packages/shared/src/strategy/cbd-strategy.ts b/packages/shared/src/strategy/cbd-strategy.ts
deleted file mode 100644
index a13bb85d8..000000000
--- a/packages/shared/src/strategy/cbd-strategy.ts
+++ /dev/null
@@ -1,132 +0,0 @@
-import { DkgPublicKey } from '@nucypher/nucypher-core';
-import { ethers } from 'ethers';
-
-import {
- ThresholdDecrypter,
- ThresholdDecrypterJSON,
-} from '../characters/cbd-recipient';
-import { Enrico } from '../characters/enrico';
-import { Cohort, CohortJSON } from '../cohort';
-import { ConditionExpression, ConditionExpressionJSON } from '../conditions';
-import { DkgClient, DkgRitual } from '../dkg';
-import { fromJSON, toJSON } from '../utils';
-
-export type CbdStrategyJSON = {
- cohort: CohortJSON;
- conditionExpr?: ConditionExpressionJSON | undefined;
-};
-
-export type DeployedStrategyJSON = {
- decrypter: ThresholdDecrypterJSON;
- dkgPublicKey: Uint8Array;
-};
-
-export class CbdStrategy {
- private constructor(public readonly cohort: Cohort) {}
-
- public static create(cohort: Cohort) {
- return new CbdStrategy(cohort);
- }
-
- public async deploy(
- provider: ethers.providers.Provider,
- ritualId: number,
- ): Promise {
- // TODO(#264): Enable ritual initialization
- // if (ritualId === undefined) {
- // ritualId = await DkgClient.initializeRitual(
- // provider,
- // this.cohort.ursulaAddresses,
- // true
- // );
- // }
- // if (ritualId === undefined) {
- // // Given that we just initialized the ritual, this should never happen
- // throw new Error('Ritual ID is undefined');
- // }
- const dkgRitual = await DkgClient.getRitual(provider, ritualId);
- return DeployedCbdStrategy.create(dkgRitual, this.cohort.porterUri);
- }
-
- public static fromJSON(json: string) {
- return CbdStrategy.fromObj(fromJSON(json));
- }
-
- public toJSON() {
- return toJSON(this.toObj());
- }
-
- public static fromObj({ cohort }: CbdStrategyJSON) {
- return new CbdStrategy(Cohort.fromObj(cohort));
- }
-
- public toObj(): CbdStrategyJSON {
- return {
- cohort: this.cohort.toObj(),
- };
- }
-
- public equals(other: CbdStrategy) {
- return this.cohort.equals(other.cohort);
- }
-}
-
-export class DeployedCbdStrategy {
- private constructor(
- public readonly decrypter: ThresholdDecrypter,
- public readonly dkgPublicKey: DkgPublicKey,
- ) {}
-
- public static create(dkgRitual: DkgRitual, porterUri: string) {
- const decrypter = ThresholdDecrypter.create(
- porterUri,
- dkgRitual.id,
- dkgRitual.threshold,
- );
- return new DeployedCbdStrategy(decrypter, dkgRitual.dkgPublicKey);
- }
-
- // TODO: This is analogous to create() above, is it useful?
- public static async fromRitualId(
- provider: ethers.providers.Provider,
- porterUri: string,
- ritualId: number,
- ): Promise {
- const dkgRitual = await DkgClient.getRitual(provider, ritualId);
- return DeployedCbdStrategy.create(dkgRitual, porterUri);
- }
-
- public makeEncrypter(conditionExpr: ConditionExpression): Enrico {
- return new Enrico(this.dkgPublicKey, undefined, conditionExpr);
- }
-
- public static fromJSON(json: string) {
- const config = fromJSON(json);
- return DeployedCbdStrategy.fromObj(config);
- }
-
- public toJSON() {
- return toJSON(this.toObj());
- }
-
- private static fromObj({ decrypter, dkgPublicKey }: DeployedStrategyJSON) {
- return new DeployedCbdStrategy(
- ThresholdDecrypter.fromObj(decrypter),
- DkgPublicKey.fromBytes(dkgPublicKey),
- );
- }
-
- public toObj(): DeployedStrategyJSON {
- return {
- decrypter: this.decrypter.toObj(),
- dkgPublicKey: this.dkgPublicKey.toBytes(),
- };
- }
-
- public equals(other: DeployedCbdStrategy) {
- return [
- this.decrypter.equals(other.decrypter),
- this.dkgPublicKey.equals(other.dkgPublicKey),
- ].every(Boolean);
- }
-}
diff --git a/packages/shared/src/strategy/index.ts b/packages/shared/src/strategy/index.ts
deleted file mode 100644
index 7f2257e4e..000000000
--- a/packages/shared/src/strategy/index.ts
+++ /dev/null
@@ -1,2 +0,0 @@
-export * from './cbd-strategy';
-export * from './pre-strategy';
diff --git a/packages/shared/src/strategy/pre-strategy.ts b/packages/shared/src/strategy/pre-strategy.ts
deleted file mode 100644
index e0a2f9953..000000000
--- a/packages/shared/src/strategy/pre-strategy.ts
+++ /dev/null
@@ -1,210 +0,0 @@
-import { PublicKey, SecretKey } from '@nucypher/nucypher-core';
-import { ethers } from 'ethers';
-
-import {
- Alice,
- Bob,
- Enrico,
- PreDecrypter,
- PreDecrypterJSON,
-} from '../characters';
-import { Cohort, CohortJSON } from '../cohort';
-import { ConditionExpression } from '../conditions';
-import { EnactedPolicy } from '../policy';
-import { base64ToU8Receiver, toJSON } from '../utils';
-
-export type PreStrategyJSON = {
- cohort: CohortJSON;
- aliceSecretKeyBytes: Uint8Array;
- bobSecretKeyBytes: Uint8Array;
- startDate: Date;
- endDate: Date;
-};
-
-export type DeployedPreStrategyJSON = {
- cohortConfig: CohortJSON;
- decrypterJSON: PreDecrypterJSON;
- policyKeyBytes: Uint8Array;
-};
-
-export class PreStrategy {
- private constructor(
- public readonly cohort: Cohort,
- private readonly aliceSecretKey: SecretKey,
- private readonly bobSecretKey: SecretKey,
- private readonly startDate: Date,
- private readonly endDate: Date,
- ) {}
-
- public static create(
- cohort: Cohort,
- aliceSecretKey?: SecretKey,
- bobSecretKey?: SecretKey,
- startDate?: Date,
- endDate?: Date,
- ) {
- if (!aliceSecretKey) {
- aliceSecretKey = SecretKey.random();
- }
- if (!bobSecretKey) {
- bobSecretKey = SecretKey.random();
- }
- if (!startDate) {
- startDate = new Date(Date.now());
- }
- if (!endDate) {
- endDate = new Date(Date.now() + 1000 * 60 * 60 * 24 * 30);
- }
- return new PreStrategy(
- cohort,
- aliceSecretKey,
- bobSecretKey,
- startDate,
- endDate,
- );
- }
-
- public async deploy(
- provider: ethers.providers.Provider,
- signer: ethers.Signer,
- label: string,
- threshold = Math.floor(this.cohort.numUrsulas / 2) + 1,
- shares = this.cohort.numUrsulas,
- ): Promise {
- if (shares > this.cohort.numUrsulas) {
- throw new Error(
- `Threshold ${threshold} cannot be greater than the number of Ursulas in the cohort ${this.cohort.numUrsulas}`,
- );
- }
-
- const porterUri = this.cohort.porterUri;
- const alice = Alice.fromSecretKey(this.aliceSecretKey);
- const bob = new Bob(this.bobSecretKey);
- const policyParams = {
- bob,
- label,
- threshold,
- shares,
- startDate: this.startDate,
- endDate: this.endDate,
- };
- const policy = await alice.grant(
- provider,
- signer,
- porterUri,
- policyParams,
- this.cohort.ursulaAddresses,
- );
- return DeployedPreStrategy.create(this.cohort, policy, this.bobSecretKey);
- }
-
- public static fromJSON(json: string) {
- const config = JSON.parse(json, base64ToU8Receiver);
- config.startDate = new Date(config.startDate);
- config.endDate = new Date(config.endDate);
- return PreStrategy.fromObj(config);
- }
-
- public toJSON() {
- return toJSON(this.toObj());
- }
-
- public static fromObj({
- cohort,
- aliceSecretKeyBytes,
- bobSecretKeyBytes,
- startDate,
- endDate,
- }: PreStrategyJSON) {
- return new PreStrategy(
- Cohort.fromObj(cohort),
- SecretKey.fromBEBytes(aliceSecretKeyBytes),
- SecretKey.fromBEBytes(bobSecretKeyBytes),
- new Date(startDate),
- new Date(endDate),
- );
- }
-
- public toObj(): PreStrategyJSON {
- return {
- cohort: this.cohort.toObj(),
- aliceSecretKeyBytes: this.aliceSecretKey.toBEBytes(),
- bobSecretKeyBytes: this.bobSecretKey.toBEBytes(),
- startDate: this.startDate,
- endDate: this.endDate,
- };
- }
-
- public equals(other: PreStrategy) {
- return [
- this.cohort.equals(other.cohort),
- this.aliceSecretKey.equals(other.aliceSecretKey),
- this.bobSecretKey.equals(other.bobSecretKey),
- this.startDate.toString() === other.startDate.toString(),
- this.endDate.toString() === other.endDate.toString(),
- ].every(Boolean);
- }
-}
-
-export class DeployedPreStrategy {
- private constructor(
- public readonly cohort: Cohort,
- public readonly decrypter: PreDecrypter,
- public readonly policyKey: PublicKey,
- ) {}
-
- public static create(
- cohort: Cohort,
- policy: EnactedPolicy,
- bobSecretKey: SecretKey,
- ) {
- const decrypter = PreDecrypter.create(
- cohort.porterUri,
- bobSecretKey,
- policy.policyKey,
- policy.aliceVerifyingKey,
- policy.encryptedTreasureMap,
- );
- return new DeployedPreStrategy(cohort, decrypter, policy.policyKey);
- }
-
- public makeEncrypter(conditionExpr: ConditionExpression): Enrico {
- return new Enrico(this.policyKey, undefined, conditionExpr);
- }
-
- public static fromJSON(json: string) {
- const config = JSON.parse(json, base64ToU8Receiver);
- return DeployedPreStrategy.fromObj(config);
- }
-
- public toJSON() {
- return toJSON(this.toObj());
- }
-
- public static fromObj({
- cohortConfig,
- decrypterJSON,
- policyKeyBytes,
- }: DeployedPreStrategyJSON) {
- const cohort = Cohort.fromObj(cohortConfig);
- const decrypter = PreDecrypter.fromObj(decrypterJSON);
- const policyKey = PublicKey.fromCompressedBytes(policyKeyBytes);
- return new DeployedPreStrategy(cohort, decrypter, policyKey);
- }
-
- public toObj(): DeployedPreStrategyJSON {
- return {
- cohortConfig: this.cohort.toObj(),
- decrypterJSON: this.decrypter.toObj(),
- policyKeyBytes: this.policyKey.toCompressedBytes(),
- };
- }
-
- public equals(other: DeployedPreStrategy) {
- return [
- this.cohort.equals(other.cohort),
- this.decrypter.equals(other.decrypter),
- this.policyKey.equals(other.policyKey),
- ].every(Boolean);
- }
-}
diff --git a/packages/shared/src/utils.ts b/packages/shared/src/utils.ts
index 01dcd7ef6..918fc11e0 100644
--- a/packages/shared/src/utils.ts
+++ b/packages/shared/src/utils.ts
@@ -4,6 +4,9 @@ import deepEqual from 'deep-equal';
export const toBytes = (str: string): Uint8Array =>
new TextEncoder().encode(str);
+export const fromBytes = (bytes: Uint8Array): string =>
+ new TextDecoder().decode(bytes);
+
export const fromHexString = (hexString: string): Uint8Array => {
if (hexString.startsWith('0x')) {
hexString = hexString.slice(2);
@@ -16,10 +19,10 @@ export const toHexString = (bytes: Uint8Array): string =>
bytes.reduce((str, byte) => str + byte.toString(16).padStart(2, '0'), '');
export const toBase64 = (bytes: Uint8Array): string =>
- Buffer.from(bytes).toString('base64');
+ btoa(String.fromCharCode(...bytes));
export const fromBase64 = (str: string): Uint8Array =>
- Buffer.from(str, 'base64');
+ Uint8Array.from(atob(str), (c) => c.charCodeAt(0));
export const base64ToU8Receiver = (_key: string, value: unknown) => {
if (typeof value === 'string' && value.startsWith('base64:')) {
diff --git a/packages/shared/src/web3.ts b/packages/shared/src/web3.ts
index a55508f8f..c4bdcee12 100644
--- a/packages/shared/src/web3.ts
+++ b/packages/shared/src/web3.ts
@@ -8,35 +8,9 @@ export enum ChainId {
}
export const toCanonicalAddress = (address: string): Uint8Array => {
- const ETH_ADDRESS_STRING_PREFIX = '0x';
- const nonPrefixed = address.startsWith(ETH_ADDRESS_STRING_PREFIX)
- ? address.substring(ETH_ADDRESS_STRING_PREFIX.length)
+ const ethAddressStringPrefix = '0x';
+ const nonPrefixed = address.startsWith(ethAddressStringPrefix)
+ ? address.substring(ethAddressStringPrefix.length)
: address;
return fromHexString(nonPrefixed);
};
-
-export interface Eip712TypedData {
- types: {
- Wallet: { name: string; type: string }[];
- };
- domain: {
- salt: string;
- chainId: number;
- name: string;
- version: string;
- };
- message: {
- blockHash: string;
- address: string;
- blockNumber: number;
- signatureText: string;
- };
-}
-
-export interface FormattedTypedData extends Eip712TypedData {
- primaryType: 'Wallet';
- types: {
- EIP712Domain: { name: string; type: string }[];
- Wallet: { name: string; type: string }[];
- };
-}
diff --git a/packages/shared/test/docs/cbd.test.ts b/packages/shared/test/docs/cbd.test.ts
deleted file mode 100644
index 6e7a078e2..000000000
--- a/packages/shared/test/docs/cbd.test.ts
+++ /dev/null
@@ -1,149 +0,0 @@
-import {
- fakeProvider,
- fakeUrsulas,
- mockDetectEthereumProvider,
- mockEncryptTreasureMap,
- mockGenerateKFrags,
- mockGetUrsulas,
- mockMakeTreasureMap,
- mockPublishToBlockchain,
- mockRetrieveCFragsRequest,
-} from '@nucypher/test-utils';
-import { providers } from 'ethers';
-import { expect, SpyInstance, test, vi } from 'vitest';
-
-import {
- Cohort,
- ConditionExpression,
- ContractCondition,
- ContractConditionProps,
- ERC721Ownership,
- getPorterUri,
- initialize,
- MessageKit,
- PreStrategy,
- SecretKey,
- toBytes,
- Ursula,
- VerifiedKeyFrag
-} from '../../src';
-
-// TODO: move to packages/taco
-
-test('Get Started (CBD PoC)', () => {
- function mockRetrieveAndDecrypt(
- makeTreasureMapSpy: SpyInstance,
- encryptedMessageKit: MessageKit,
- ) {
- // Setup mocks for `retrieveAndDecrypt`
- const ursulaAddresses = (
- makeTreasureMapSpy.mock.calls[0][0] as readonly Ursula[]
- ).map((u) => u.checksumAddress);
- const verifiedKFrags = makeTreasureMapSpy.mock
- .calls[0][1] as readonly VerifiedKeyFrag[];
- return mockRetrieveCFragsRequest(
- ursulaAddresses,
- verifiedKFrags,
- encryptedMessageKit.capsule,
- );
- }
-
- test('can run the get started example', async () => {
- const detectEthereumProvider = mockDetectEthereumProvider();
- const mockedUrsulas = fakeUrsulas();
- const getUrsulasSpy = mockGetUrsulas(mockedUrsulas);
- const generateKFragsSpy = mockGenerateKFrags();
- const publishToBlockchainSpy = mockPublishToBlockchain();
- const makeTreasureMapSpy = mockMakeTreasureMap();
- const encryptTreasureMapSpy = mockEncryptTreasureMap();
-
- vi.spyOn(providers, 'Web3Provider').mockImplementation(() =>
- fakeProvider(SecretKey.random().toBEBytes()),
- );
-
- await initialize();
-
- //
- // Start of the code example
- //
-
- // 2. Build a Cohort
- const porterUri = getPorterUri('tapir');
- const numUrsulas = 5;
- const newCohort = await Cohort.create(porterUri, numUrsulas);
-
- // 3. Specify default conditions
- const NFTOwnership = new ERC721Ownership({
- contractAddress: '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D',
- chain: 5, // Tapir network uses Görli testnet
- parameters: [5954],
- });
-
- const conditions = new ConditionExpression(
- NFTOwnership,
- // Other conditions can be added here
- );
-
- // 4. Build a Strategy
- const newStrategy = PreStrategy.create(newCohort);
-
- const MMprovider = await detectEthereumProvider();
- const mumbai = providers.getNetwork(80001);
-
- const provider = new providers.Web3Provider(MMprovider, mumbai);
- const signer = provider.getSigner();
- const newDeployed = await newStrategy.deploy(provider, signer, 'test');
-
- // 5. Encrypt the plaintext & update conditions
- const NFTBalanceConfig: ContractConditionProps = {
- conditionType: 'contract',
- contractAddress: '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D',
- standardContractType: 'ERC721',
- chain: 5,
- method: 'balanceOf',
- parameters: [':userAddress'],
- returnValueTest: {
- comparator: '>=',
- value: 3,
- },
- };
- const NFTBalance = new ContractCondition(NFTBalanceConfig);
- const newConditions = new ConditionExpression(NFTBalance);
- const plaintext = 'this is a secret';
- const encrypter = newDeployed.makeEncrypter(newConditions);
- const encryptedMessageKit = encrypter.encryptMessagePre(plaintext);
-
- // Mocking - Not a part of any code example
- const retrieveCFragsSpy = mockRetrieveAndDecrypt(
- makeTreasureMapSpy,
- encryptedMessageKit,
- );
-
- // 6. Request decryption rights
- const decryptedMessage = await newDeployed.decrypter.retrieveAndDecrypt(
- provider,
- signer,
- [encryptedMessageKit],
- );
-
- //
- // End of the code example
- //
-
- const expectedAddresses = fakeUrsulas().map((u) => u.checksumAddress);
- const condObj = conditions.condition.toObj();
- expect(newCohort.ursulaAddresses).toEqual(expectedAddresses);
- expect(condObj.parameters).toEqual([5954]);
- expect(condObj.chain).toEqual(5);
- expect(condObj.contractAddress).toEqual(
- '0xBC4CA0EdA7647A8aB7C2061c2E118A18a936f13D',
- );
- expect(publishToBlockchainSpy).toHaveBeenCalled();
- expect(getUrsulasSpy).toHaveBeenCalledTimes(2);
- expect(generateKFragsSpy).toHaveBeenCalled();
- expect(encryptTreasureMapSpy).toHaveBeenCalled();
- expect(makeTreasureMapSpy).toHaveBeenCalled();
- expect(retrieveCFragsSpy).toHaveBeenCalled();
- expect(decryptedMessage[0]).toEqual(toBytes(plaintext));
- });
-});
diff --git a/packages/shared/test/integration/dkg-client.test.ts b/packages/shared/test/integration/dkg-client.test.ts
deleted file mode 100644
index bc86815bd..000000000
--- a/packages/shared/test/integration/dkg-client.test.ts
+++ /dev/null
@@ -1,54 +0,0 @@
-import {
- fakeProvider,
- mockCoordinatorRitual,
- mockDkgParticipants,
- mockGetParticipants,
- mockRitualId,
-} from '@nucypher/test-utils';
-import { afterEach, expect, test, vi } from 'vitest';
-
-import { DkgCoordinatorAgent, SecretKey } from '../../src';
-
-vi.mock('../../src/contracts/agents/coordinator', () => ({
- DkgCoordinatorAgent: {
- getRitual: () => Promise.resolve(mockCoordinatorRitual(mockRitualId)),
- getParticipants: () => Promise.resolve(mockDkgParticipants(mockRitualId)),
- },
-}));
-
-test('DkgCoordinatorAgent', () => {
- afterEach(() => {
- vi.restoreAllMocks();
- });
-
- test('fetches transcripts from the coordinator', async () => {
- const provider = fakeProvider(SecretKey.random().toBEBytes());
- const ritual = await DkgCoordinatorAgent.getRitual(provider, mockRitualId);
- expect(ritual).toBeDefined();
- });
-
- test('fetches participants from the coordinator', async () => {
- const provider = fakeProvider(SecretKey.random().toBEBytes());
- const fakeParticipants = await mockDkgParticipants(mockRitualId);
- const getParticipantsSpy = mockGetParticipants(
- fakeParticipants.participants,
- );
- const participants = await DkgCoordinatorAgent.getParticipants(
- provider,
- mockRitualId,
- );
- expect(getParticipantsSpy).toHaveBeenCalled();
- expect(participants.length).toBeGreaterThan(0);
- });
-});
-
-// TODO: Fix this test after the DkgClient.verifyRitual() method is implemented
-// test('DkgClient', () => {
-// test('verifies the dkg ritual', async () => {
-// const provider = fakeWeb3Provider(SecretKey.random().toBEBytes());
-//
-// const dkgClient = new DkgClient(provider);
-// const isValid = await dkgClient.verifyRitual(fakeRitualId);
-// expect(isValid).toBeTruthy();
-// });
-// });
diff --git a/packages/shared/test/integration/enrico.test.ts b/packages/shared/test/integration/enrico.test.ts
deleted file mode 100644
index 96487cb2e..000000000
--- a/packages/shared/test/integration/enrico.test.ts
+++ /dev/null
@@ -1,154 +0,0 @@
-// Disabling because we want to access Alice.keyring which is a private property
-/* eslint-disable @typescript-eslint/no-explicit-any */
-import {
- bytesEqual,
- fakeAlice,
- fakeBob,
- fromBytes,
- reencryptKFrags,
-} from '@nucypher/test-utils';
-import { expect, test } from 'vitest';
-
-import {
- ConditionExpression,
- Enrico,
- ERC721Ownership,
- PolicyMessageKit,
- RetrievalResult,
- toBytes,
-} from '../../src';
-
-test('enrico', () => {
- test('alice decrypts message encrypted by enrico', async () => {
- const label = 'fake-label';
- const message = 'fake-message';
- const alice = fakeAlice();
-
- const policyKey = alice.getPolicyEncryptingKeyFromLabel(label);
- const enrico = new Enrico(policyKey);
- const encrypted = enrico.encryptMessagePre(toBytes(message));
-
- const aliceKeyring = (alice as any).keyring;
- const aliceSk = await aliceKeyring.getSecretKeyFromLabel(label);
- const alicePlaintext = encrypted.decrypt(aliceSk);
- expect(alicePlaintext).toEqual(alicePlaintext);
- });
-
- test('bob decrypts reencrypted message', async () => {
- const label = 'fake-label';
- const alice = fakeAlice();
- const bob = fakeBob();
-
- const policyEncryptingKey = alice.getPolicyEncryptingKeyFromLabel(label);
- const enrico = new Enrico(policyEncryptingKey);
-
- const plaintext = 'Plaintext message';
- const plaintextBytes = toBytes(plaintext);
- const encrypted = enrico.encryptMessagePre(plaintextBytes);
-
- // Alice can decrypt capsule she created
- const aliceSk = await (alice as any).keyring.getSecretKeyFromLabel(label);
- const plaintextAlice = encrypted.decrypt(aliceSk);
- expect(fromBytes(plaintextAlice).endsWith(plaintext)).toBeTruthy();
-
- const threshold = 2;
- const shares = 3;
- const { verifiedKFrags, delegatingKey } = alice.generateKFrags(
- bob,
- label,
- threshold,
- shares,
- );
- expect(delegatingKey.toCompressedBytes()).toEqual(
- policyEncryptingKey.toCompressedBytes(),
- );
-
- // Bob can decrypt re-encrypted ciphertext
- const { verifiedCFrags } = reencryptKFrags(
- verifiedKFrags,
- encrypted.capsule,
- );
- const bobSk = (bob as any).keyring.secretKey;
-
- const plaintextBob = encrypted.decryptReencrypted(
- bobSk,
- policyEncryptingKey,
- verifiedCFrags,
- );
- expect(fromBytes(plaintextBob).endsWith(plaintext)).toBeTruthy();
-
- // Bob can decrypt ciphertext and verify origin of the message
- const cFragsWithUrsulas = verifiedCFrags.map((cFrag, index) => [
- `0x${index}`,
- cFrag,
- ]);
- const result = new RetrievalResult(Object.fromEntries(cFragsWithUrsulas));
- const pk = PolicyMessageKit.fromMessageKit(
- encrypted,
- policyEncryptingKey,
- threshold,
- ).withResult(result);
- expect(pk.isDecryptableByReceiver()).toBeTruthy();
-
- const decrypted = bob.decrypt(pk);
- expect(bytesEqual(decrypted, plaintextBytes)).toBeTruthy();
- });
-
- test('enrico generates a message kit with conditions', async () => {
- const label = 'fake-label';
- const message = 'fake-message';
- const alice = fakeAlice();
-
- const policyKey = alice.getPolicyEncryptingKeyFromLabel(label);
-
- const ownsBufficornNFT = new ERC721Ownership({
- contractAddress: '0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77',
- parameters: [3591],
- chain: 5,
- });
-
- const conditions = new ConditionExpression(ownsBufficornNFT);
-
- const enrico = new Enrico(policyKey, undefined, conditions);
- const encrypted = enrico.encryptMessagePre(toBytes(message));
-
- const aliceKeyring = (alice as any).keyring;
- const aliceSk = await aliceKeyring.getSecretKeyFromLabel(label);
- const alicePlaintext = encrypted.decrypt(aliceSk);
- expect(alicePlaintext).toEqual(alicePlaintext);
- });
-
- test('can overwrite conditions at encryption time', async () => {
- const label = 'fake-label';
- const message = 'fake-message';
- const alice = fakeAlice();
-
- const policyKey = alice.getPolicyEncryptingKeyFromLabel(label);
-
- const ownsBufficornNFT = new ERC721Ownership({
- contractAddress: '0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77',
- chain: 5,
- parameters: [3591],
- });
-
- const ownsNonsenseNFT = new ERC721Ownership({
- contractAddress: '0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77',
- chain: 5,
- parameters: [6969],
- });
-
- const conditions = new ConditionExpression(ownsBufficornNFT);
- const updatedConditions = new ConditionExpression(ownsNonsenseNFT);
-
- const enrico = new Enrico(policyKey, undefined, conditions);
- const encrypted = enrico.encryptMessagePre(
- toBytes(message),
- updatedConditions,
- );
-
- const aliceKeyring = (alice as any).keyring;
- const aliceSk = await aliceKeyring.getSecretKeyFromLabel(label);
- const alicePlaintext = encrypted.decrypt(aliceSk);
- expect(alicePlaintext).toEqual(alicePlaintext);
- });
-});
diff --git a/packages/shared/test/integration/message-kit.test.ts b/packages/shared/test/integration/message-kit.test.ts
deleted file mode 100644
index e6445f233..000000000
--- a/packages/shared/test/integration/message-kit.test.ts
+++ /dev/null
@@ -1,14 +0,0 @@
-import { fakeBob } from '@nucypher/test-utils';
-import { expect, test } from 'vitest';
-
-import { MessageKit, toBytes } from '../../src';
-
-test('message kit', () => {
- test('bob decrypts', () => {
- const bob = fakeBob();
- const plaintext = toBytes('fake-message');
- const messageKit = new MessageKit(bob.decryptingKey, plaintext, null);
- const decrypted = bob['keyring'].decrypt(messageKit);
- expect(decrypted).toBeTruthy();
- });
-});
diff --git a/packages/shared/test/integration/pre.test.ts b/packages/shared/test/integration/pre.test.ts
deleted file mode 100644
index c64dddbec..000000000
--- a/packages/shared/test/integration/pre.test.ts
+++ /dev/null
@@ -1,144 +0,0 @@
-import { CapsuleFrag, reencrypt } from '@nucypher/nucypher-core';
-import {
- fakeAlice,
- fakeBob,
- fakeUrsulas,
- reencryptKFrags,
-} from '@nucypher/test-utils';
-import { beforeAll, expect, test } from 'vitest';
-
-import {
- Alice,
- Bob,
- CompoundCondition,
- ConditionExpression,
- Enrico,
- ERC721Ownership,
- initialize,
- MessageKit,
- PolicyMessageKit,
- RetrievalResult,
- toBytes,
- zip,
-} from '../../src';
-
-test('proxy reencryption', () => {
- let alice: Alice;
- let bob: Bob;
- const plaintext = toBytes('plaintext-message');
- const threshold = 2;
- const shares = 3;
- const label = 'fake-data-label';
-
- test('verifies capsule frags', async () => {
- beforeAll(async () => {
- await initialize();
- bob = fakeBob();
- alice = fakeAlice();
- });
-
- const { capsule } = new MessageKit(bob.decryptingKey, plaintext, null);
- const { delegatingKey, verifiedKFrags } = alice.generateKFrags(
- bob,
- label,
- threshold,
- shares,
- );
-
- const { verifiedCFrags } = reencryptKFrags(verifiedKFrags, capsule);
- const cFrags = verifiedCFrags.map((verifiedCFrag) =>
- CapsuleFrag.fromBytes(verifiedCFrag.toBytes()),
- );
- const areVerified = cFrags.every((cFrag) =>
- cFrag.verify(
- capsule,
- alice.verifyingKey,
- delegatingKey,
- bob.decryptingKey,
- ),
- );
- expect(areVerified).toBeTruthy();
- });
-
- test('encrypts and decrypts reencrypted message', async () => {
- const { verifiedKFrags } = alice.generateKFrags(
- bob,
- label,
- threshold,
- shares,
- );
-
- const policyEncryptingKey = alice.getPolicyEncryptingKeyFromLabel(label);
- const enrico = new Enrico(policyEncryptingKey);
- const encryptedMessage = enrico.encryptMessagePre(plaintext);
-
- const ursulaAddresses = fakeUrsulas().map(
- (ursula) => ursula.checksumAddress,
- );
- const reencrypted = verifiedKFrags.map((kFrag) =>
- reencrypt(encryptedMessage.capsule, kFrag),
- );
- const results = new RetrievalResult(
- Object.fromEntries(zip(ursulaAddresses, reencrypted)),
- );
- const policyMessageKit = PolicyMessageKit.fromMessageKit(
- encryptedMessage,
- policyEncryptingKey,
- threshold,
- ).withResult(results);
- expect(policyMessageKit.isDecryptableByReceiver()).toBeTruthy();
-
- const bobPlaintext = bob.decrypt(policyMessageKit);
- expect(bobPlaintext).toEqual(plaintext);
- });
-
- test('encrypts and decrypts reencrypted message with conditions', async () => {
- const { verifiedKFrags } = alice.generateKFrags(
- bob,
- label,
- threshold,
- shares,
- );
-
- const policyEncryptingKey = alice.getPolicyEncryptingKeyFromLabel(label);
-
- const genuineUndead = new ERC721Ownership({
- contractAddress: '0x209e639a0EC166Ac7a1A4bA41968fa967dB30221',
- chain: 1,
- parameters: [1],
- });
- const gnomePals = new ERC721Ownership({
- contractAddress: '0x5dB11d7356aa4C0E85Aa5b255eC2B5F81De6d4dA',
- chain: 1,
- parameters: [1],
- });
- const conditionsSet = new ConditionExpression(
- new CompoundCondition({
- operator: 'or',
- operands: [genuineUndead.toObj(), gnomePals.toObj()],
- }),
- );
-
- const enrico = new Enrico(policyEncryptingKey, undefined, conditionsSet);
- const encryptedMessage = enrico.encryptMessagePre(plaintext);
-
- const ursulaAddresses = fakeUrsulas().map(
- (ursula) => ursula.checksumAddress,
- );
- const reencrypted = verifiedKFrags.map((kFrag) =>
- reencrypt(encryptedMessage.capsule, kFrag),
- );
- const results = new RetrievalResult(
- Object.fromEntries(zip(ursulaAddresses, reencrypted)),
- );
- const policyMessageKit = PolicyMessageKit.fromMessageKit(
- encryptedMessage,
- policyEncryptingKey,
- threshold,
- ).withResult(results);
- expect(policyMessageKit.isDecryptableByReceiver()).toBeTruthy();
-
- const bobPlaintext = bob.decrypt(policyMessageKit);
- expect(bobPlaintext).toEqual(plaintext);
- });
-});
diff --git a/packages/shared/test/unit/cbd-strategy.test.ts b/packages/shared/test/unit/cbd-strategy.test.ts
deleted file mode 100644
index 951ae91a9..000000000
--- a/packages/shared/test/unit/cbd-strategy.test.ts
+++ /dev/null
@@ -1,190 +0,0 @@
-import {
- FerveoVariant,
- SecretKey,
- SessionStaticSecret,
-} from '@nucypher/nucypher-core';
-import {
- aliceSecretKeyBytes,
- fakeDkgFlow,
- fakeDkgRitual,
- fakeProvider,
- fakeSigner,
- fakeTDecFlow,
- fakeUrsulas,
- makeCohort,
- mockCbdDecrypt,
- mockDkgParticipants,
- mockGetParticipants,
- mockGetRitual,
- mockGetUrsulas,
- mockRandomSessionStaticSecret,
-} from '@nucypher/test-utils';
-import { ethers } from 'ethers';
-import { afterEach, beforeAll, expect, test, vi } from 'vitest';
-
-import {
- CbdStrategy,
- ConditionExpression,
- DeployedCbdStrategy,
- ERC721Ownership,
- initialize,
- ThresholdDecrypter,
- toBytes,
-} from '../../src';
-
-// Shared test variables
-const ownsNFT = new ERC721Ownership({
- contractAddress: '0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77',
- parameters: [3591],
- chain: 5,
-});
-const conditionExpr = new ConditionExpression(ownsNFT);
-const ritualId = 0;
-
-const makeCbdStrategy = async () => {
- const ursulas = fakeUrsulas();
- const cohort = await makeCohort(ursulas);
- const strategy = CbdStrategy.create(cohort);
- expect(strategy.cohort).toEqual(cohort);
- return strategy;
-};
-
-async function makeDeployedCbdStrategy() {
- const ursulas = fakeUrsulas();
- const provider = fakeProvider();
- const strategy = await makeCbdStrategy();
- const mockedDkg = fakeDkgFlow(FerveoVariant.precomputed, 0, 4, 4);
- const mockedDkgRitual = fakeDkgRitual(mockedDkg);
- const getUrsulasSpy = mockGetUrsulas(ursulas);
- const getExistingRitualSpy = mockGetRitual(mockedDkgRitual);
-
- const deployedStrategy = await strategy.deploy(provider, ritualId);
-
- expect(getUrsulasSpy).toHaveBeenCalled();
- expect(getExistingRitualSpy).toHaveBeenCalled();
-
- return { mockedDkg, deployedStrategy };
-}
-
-test('cbd strategy', () => {
- let secretKey;
- let provider: ethers.providers.Provider;
- let signer: ethers.Signer;
-
- beforeAll(async () => {
- await initialize();
- secretKey = SecretKey.fromBEBytes(aliceSecretKeyBytes);
- provider = fakeProvider(secretKey.toBEBytes());
- signer = fakeSigner(secretKey.toBEBytes());
- });
-
- test('CbdStrategy', () => {
- afterEach(() => {
- vi.restoreAllMocks();
- });
-
- test('creates a strategy', async () => {
- await makeCbdStrategy();
- });
-
- test('can deploy and return a CbdDeployedStrategy', async () => {
- await makeDeployedCbdStrategy();
- });
-
- test('serialization', () => {
- test('serializes to a plain object', async () => {
- const strategy = await makeCbdStrategy();
- const asObj = strategy.toObj();
- const fromObj = CbdStrategy.fromObj(asObj);
- expect(fromObj.equals(strategy)).toBeTruthy();
- });
-
- test('serializes to a JSON', async () => {
- const strategy = await makeCbdStrategy();
- const asJson = strategy.toJSON();
- const fromJson = CbdStrategy.fromJSON(asJson);
- expect(fromJson.equals(strategy)).toBeTruthy();
- });
- });
- });
-
- test('CbdDeployedStrategy', () => {
- afterEach(() => {
- vi.restoreAllMocks();
- });
-
- test('can encrypt and decrypt', async () => {
- const { mockedDkg, deployedStrategy } = await makeDeployedCbdStrategy();
-
- const message = 'this is a secret';
- const thresholdMessageKit = deployedStrategy
- .makeEncrypter(conditionExpr)
- .encryptMessageCbd(message);
-
- // Setup mocks for `retrieveAndDecrypt`
- const { decryptionShares } = fakeTDecFlow({
- ...mockedDkg,
- message: toBytes(message),
- dkgPublicKey: mockedDkg.dkg.publicKey(),
- thresholdMessageKit,
- });
- const { participantSecrets, participants } = mockDkgParticipants(
- mockedDkg.ritualId,
- );
- const requesterSessionKey = SessionStaticSecret.random();
- const decryptSpy = mockCbdDecrypt(
- mockedDkg.ritualId,
- decryptionShares,
- participantSecrets,
- requesterSessionKey.publicKey(),
- );
- const getParticipantsSpy = mockGetParticipants(participants);
- const getUrsulasSpy = mockGetUrsulas();
- const sessionKeySpy = mockRandomSessionStaticSecret(requesterSessionKey);
-
- const decryptedMessage =
- await deployedStrategy.decrypter.retrieveAndDecrypt(
- provider,
- thresholdMessageKit,
- signer,
- );
- expect(getUrsulasSpy).toHaveBeenCalled();
- expect(getParticipantsSpy).toHaveBeenCalled();
- expect(sessionKeySpy).toHaveBeenCalled();
- expect(decryptSpy).toHaveBeenCalled();
- expect(decryptedMessage).toEqual(toBytes(message));
- });
-
- test('serialization', () => {
- test('serializes to a plaintext object', async () => {
- const { deployedStrategy } = await makeDeployedCbdStrategy();
- const asJson = deployedStrategy.toJSON();
- const fromJson = DeployedCbdStrategy.fromJSON(asJson);
- expect(fromJson.equals(deployedStrategy)).toBeTruthy();
- });
-
- test('serializes to a JSON', async () => {
- const { deployedStrategy } = await makeDeployedCbdStrategy();
- const asJson = deployedStrategy.toJSON();
- const fromJson = DeployedCbdStrategy.fromJSON(asJson);
- expect(fromJson.equals(deployedStrategy)).toBeTruthy();
- });
- });
- });
-
- test('ThresholdDecrypter', () => {
- test('serializes to a plain object', async () => {
- const { deployedStrategy } = await makeDeployedCbdStrategy();
- const configObj = deployedStrategy.decrypter.toObj();
- const fromObj = ThresholdDecrypter.fromObj(configObj);
- expect(fromObj.equals(deployedStrategy.decrypter)).toBeTruthy();
- });
-
- test('serializes to a JSON', async () => {
- const { deployedStrategy } = await makeDeployedCbdStrategy();
- const configJSON = deployedStrategy.decrypter.toJSON();
- const fromJSON = ThresholdDecrypter.fromJSON(configJSON);
- expect(fromJSON.equals(deployedStrategy.decrypter)).toBeTruthy();
- });
- });
-});
diff --git a/packages/shared/test/unit/conditions/base/rpc.test.ts b/packages/shared/test/unit/conditions/base/rpc.test.ts
deleted file mode 100644
index 55b1256f9..000000000
--- a/packages/shared/test/unit/conditions/base/rpc.test.ts
+++ /dev/null
@@ -1,37 +0,0 @@
-import { testRpcConditionObj } from '@nucypher/test-utils';
-import { expect, test } from 'vitest';
-
-import { RpcCondition } from '../../../../src/conditions/base';
-import { rpcConditionSchema } from '../../../../src/conditions/base/rpc';
-
-test('validation', () => {
- test('accepts on a valid schema', () => {
- const result = RpcCondition.validate(
- rpcConditionSchema,
- testRpcConditionObj,
- );
-
- expect(result.error).toBeUndefined();
- expect(result.data).toEqual(testRpcConditionObj);
- });
-
- test('rejects an invalid schema', () => {
- const badRpcObj = {
- ...testRpcConditionObj,
- // Intentionally replacing `method` with an invalid method
- method: 'fake_invalid_method',
- } as unknown as typeof testRpcConditionObj;
-
- const result = RpcCondition.validate(rpcConditionSchema, badRpcObj);
-
- expect(result.error).toBeDefined();
- expect(result.data).toBeUndefined();
- expect(result.error?.format()).toMatchObject({
- method: {
- _errors: [
- "Invalid enum value. Expected 'eth_getBalance' | 'balanceOf', received 'fake_invalid_method'",
- ],
- },
- });
- });
-});
diff --git a/packages/shared/test/unit/pre-strategy.test.ts b/packages/shared/test/unit/pre-strategy.test.ts
deleted file mode 100644
index 0fb5b6003..000000000
--- a/packages/shared/test/unit/pre-strategy.test.ts
+++ /dev/null
@@ -1,182 +0,0 @@
-import { SecretKey, VerifiedKeyFrag } from '@nucypher/nucypher-core';
-import {
- aliceSecretKeyBytes,
- bobSecretKeyBytes,
- fakeProvider,
- fakeSigner,
- fakeUrsulas,
- makeCohort,
- mockEncryptTreasureMap,
- mockGenerateKFrags,
- mockGetUrsulas,
- mockMakeTreasureMap,
- mockPublishToBlockchain,
- mockRetrieveCFragsRequest,
-} from '@nucypher/test-utils';
-import { afterEach, beforeAll, expect, test, vi } from 'vitest';
-
-import {
- ConditionExpression,
- DeployedPreStrategy,
- ERC721Ownership,
- initialize,
- PreDecrypter,
- PreStrategy,
- toBytes,
- Ursula,
-} from '../../src';
-
-// Shared test variables
-const ownsNFT = new ERC721Ownership({
- contractAddress: '0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77',
- parameters: [3591],
- chain: 5,
-});
-const conditionExpr = new ConditionExpression(ownsNFT);
-
-const makePreStrategy = async () => {
- const aliceSecretKey = SecretKey.fromBEBytes(aliceSecretKeyBytes);
- const bobSecretKey = SecretKey.fromBEBytes(bobSecretKeyBytes);
- const cohort = await makeCohort(fakeUrsulas());
- const strategy = PreStrategy.create(cohort, aliceSecretKey, bobSecretKey);
- expect(strategy.cohort).toEqual(cohort);
- return strategy;
-};
-
-const makeDeployedPreStrategy = async () => {
- const aliceSecretKey = SecretKey.fromBEBytes(aliceSecretKeyBytes);
- const aliceSigner = fakeSigner(aliceSecretKey.toBEBytes());
- const aliceProvider = fakeProvider(aliceSecretKey.toBEBytes());
-
- const strategy = await makePreStrategy();
- const generateKFragsSpy = mockGenerateKFrags();
- const publishToBlockchainSpy = mockPublishToBlockchain();
- const makeTreasureMapSpy = mockMakeTreasureMap();
- const encryptTreasureMapSpy = mockEncryptTreasureMap();
-
- const deployedStrategy = await strategy.deploy(
- aliceProvider,
- aliceSigner,
- 'test',
- );
-
- expect(generateKFragsSpy).toHaveBeenCalled();
- expect(publishToBlockchainSpy).toHaveBeenCalled();
- expect(makeTreasureMapSpy).toHaveBeenCalled();
- expect(encryptTreasureMapSpy).toHaveBeenCalled();
-
- expect(deployedStrategy.cohort).toEqual(strategy.cohort);
-
- const ursulaAddresses = (
- makeTreasureMapSpy.mock.calls[0][0] as readonly Ursula[]
- ).map((u) => u.checksumAddress);
- const verifiedKFrags = makeTreasureMapSpy.mock
- .calls[0][1] as readonly VerifiedKeyFrag[];
-
- return { deployedStrategy, ursulaAddresses, verifiedKFrags };
-};
-
-test('pre strategy', () => {
- beforeAll(async () => {
- await initialize();
- });
-
- test('PreStrategy', () => {
- afterEach(() => {
- vi.restoreAllMocks();
- });
-
- test('creates a strategy', async () => {
- await makePreStrategy();
- });
-
- test('deploys a strategy', async () => {
- await makeDeployedPreStrategy();
- });
-
- test('serialization', () => {
- test('serializes to plain object', async () => {
- const strategy = await makePreStrategy();
- const asObject = strategy.toObj();
- const fromObject = PreStrategy.fromObj(asObject);
- expect(fromObject.equals(strategy)).toBeTruthy();
- });
-
- test('serializes to JSON', async () => {
- const strategy = await makePreStrategy();
- const asJson = strategy.toJSON();
- const fromJSON = PreStrategy.fromJSON(asJson);
- expect(fromJSON.equals(strategy)).toBeTruthy();
- });
- });
- });
-
- test('PreDeployedStrategy', () => {
- afterEach(() => {
- vi.restoreAllMocks();
- });
-
- test('encrypts and decrypts', async () => {
- const bobSecretKey = SecretKey.fromBEBytes(bobSecretKeyBytes);
- const bobSigner = fakeSigner(bobSecretKey.toBEBytes());
- const bobProvider = fakeProvider(bobSecretKey.toBEBytes());
- const { deployedStrategy, ursulaAddresses, verifiedKFrags } =
- await makeDeployedPreStrategy();
-
- const plaintext = 'this is a secret';
- const encryptedMessageKit = deployedStrategy
- .makeEncrypter(conditionExpr)
- .encryptMessagePre(plaintext);
-
- // Setup mocks for `retrieveAndDecrypt`
- const getUrsulasSpy = mockGetUrsulas();
- const retrieveCFragsSpy = mockRetrieveCFragsRequest(
- ursulaAddresses,
- verifiedKFrags,
- encryptedMessageKit.capsule,
- );
-
- const decryptedMessage =
- await deployedStrategy.decrypter.retrieveAndDecrypt(
- bobProvider,
- bobSigner,
- [encryptedMessageKit],
- );
- expect(getUrsulasSpy).toHaveBeenCalled();
- expect(retrieveCFragsSpy).toHaveBeenCalled();
- expect(decryptedMessage[0]).toEqual(toBytes(plaintext));
- });
-
- test('serialization', () => {
- test('serializes to a plain object', async () => {
- const { deployedStrategy } = await makeDeployedPreStrategy();
- const asObj = deployedStrategy.toObj();
- const fromJson = DeployedPreStrategy.fromObj(asObj);
- expect(fromJson.equals(deployedStrategy)).toBeTruthy();
- });
-
- test('serializes to a JSON', async () => {
- const { deployedStrategy } = await makeDeployedPreStrategy();
- const asJson = deployedStrategy.toJSON();
- const fromJson = DeployedPreStrategy.fromJSON(asJson);
- expect(fromJson.equals(deployedStrategy)).toBeTruthy();
- });
- });
- });
-
- test('PreDecrypter', () => {
- test('serializes to a plain object', async () => {
- const { deployedStrategy } = await makeDeployedPreStrategy();
- const asObj = deployedStrategy.decrypter.toObj();
- const fromJson = PreDecrypter.fromObj(asObj);
- expect(fromJson.equals(deployedStrategy.decrypter)).toBeTruthy();
- });
-
- test('serializes to JSON', async () => {
- const { deployedStrategy } = await makeDeployedPreStrategy();
- const asJson = deployedStrategy.decrypter.toJSON();
- const fromJson = PreDecrypter.fromJSON(asJson);
- expect(fromJson.equals(deployedStrategy.decrypter)).toBeTruthy();
- });
- });
-});
diff --git a/packages/taco/tsconfig.build.json b/packages/shared/tsconfig.build.json
similarity index 62%
rename from packages/taco/tsconfig.build.json
rename to packages/shared/tsconfig.build.json
index dedc2a266..2275c6c5e 100644
--- a/packages/taco/tsconfig.build.json
+++ b/packages/shared/tsconfig.build.json
@@ -5,9 +5,4 @@
"outDir": "dist",
"rootDir": "src"
},
- "references": [
- {
- "path": "../shared/tsconfig.es.json"
- }
- ]
}
diff --git a/packages/shared/typedoc.json b/packages/shared/typedoc.json
index 46511121a..4e898ec73 100644
--- a/packages/shared/typedoc.json
+++ b/packages/shared/typedoc.json
@@ -1,6 +1,6 @@
{
"extends": ["../../typedoc.base.json"],
"entryPoints": ["src/index.ts"],
- "tsconfig": "tsconfig.build.json",
+ "tsconfig": "tsconfig.es.json",
"name": "@nucypher/shared"
}
diff --git a/packages/taco/package.json b/packages/taco/package.json
index 102b1e95f..c5ee587ae 100644
--- a/packages/taco/package.json
+++ b/packages/taco/package.json
@@ -14,18 +14,22 @@
"author": "Piotr Roslaniec ",
"exports": {
".": {
- "import": "./dist/index.js",
- "require": "./dist/index.js"
+ "import": "./dist/es/index.js",
+ "require": "./dist/cjs/index.js"
}
},
- "main": "./dist/index.js",
- "module": "./dist/index.js",
- "types": "./dist/index.d.ts",
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/es/index.js",
+ "types": "./dist/cjs/index.d.ts",
"files": [
- "dist/**/*"
+ "dist"
],
"scripts": {
- "build": "tsc --build ./tsconfig.build.json --verbose",
+ "prebuild": "pnpm clean",
+ "build": "pnpm build:module && pnpm build:cjs",
+ "build:cjs": "tsc --build ./tsconfig.cjs.json --verbose",
+ "build:module": "tsc --build ./tsconfig.es.json --verbose",
+ "clean": "rm -rf dist",
"exports:lint": "ts-unused-exports tsconfig.json --ignoreFiles src/index.ts",
"lint": "eslint --ext .ts src test",
"lint:fix": "pnpm lint --fix",
@@ -34,17 +38,21 @@
"typedoc": "typedoc"
},
"dependencies": {
- "@nucypher/nucypher-core": "0.13.0-alpha.0",
- "@nucypher/shared": "workspace:*"
+ "@ethersproject/abstract-signer": "^5.7.0",
+ "@nucypher/nucypher-core": "0.13.0-alpha.1",
+ "@nucypher/shared": "workspace:*",
+ "semver": "^7.5.2",
+ "zod": "^3.22.1"
},
"devDependencies": {
- "@nucypher/test-utils": "workspace:*"
+ "@nucypher/test-utils": "workspace:*",
+ "@types/semver": "^7.5.0"
},
"peerDependencies": {
"ethers": "^5.7.2"
},
"engines": {
- "node": ">=16",
+ "node": ">=18",
"pnpm": ">=8.0.0"
}
}
diff --git a/packages/shared/src/conditions/base/contract.ts b/packages/taco/src/conditions/base/contract.ts
similarity index 100%
rename from packages/shared/src/conditions/base/contract.ts
rename to packages/taco/src/conditions/base/contract.ts
diff --git a/packages/shared/src/conditions/base/index.ts b/packages/taco/src/conditions/base/index.ts
similarity index 100%
rename from packages/shared/src/conditions/base/index.ts
rename to packages/taco/src/conditions/base/index.ts
diff --git a/packages/shared/src/conditions/base/rpc.ts b/packages/taco/src/conditions/base/rpc.ts
similarity index 72%
rename from packages/shared/src/conditions/base/rpc.ts
rename to packages/taco/src/conditions/base/rpc.ts
index da06cbeb0..8850e1a06 100644
--- a/packages/shared/src/conditions/base/rpc.ts
+++ b/packages/taco/src/conditions/base/rpc.ts
@@ -11,7 +11,11 @@ export const rpcConditionSchema = z.object({
conditionType: z.literal(RpcConditionType).default(RpcConditionType),
chain: createUnionSchema(SUPPORTED_CHAIN_IDS),
method: z.enum(['eth_getBalance', 'balanceOf']),
- parameters: z.array(EthAddressOrUserAddressSchema),
+ parameters: z.union([
+ z.array(EthAddressOrUserAddressSchema).length(1),
+ // Using tuple here because ordering matters
+ z.tuple([EthAddressOrUserAddressSchema, z.union([z.string(), z.number()])]),
+ ]),
returnValueTest: returnValueTestSchema,
});
diff --git a/packages/shared/src/conditions/base/shared.ts b/packages/taco/src/conditions/base/shared.ts
similarity index 100%
rename from packages/shared/src/conditions/base/shared.ts
rename to packages/taco/src/conditions/base/shared.ts
diff --git a/packages/shared/src/conditions/base/time.ts b/packages/taco/src/conditions/base/time.ts
similarity index 100%
rename from packages/shared/src/conditions/base/time.ts
rename to packages/taco/src/conditions/base/time.ts
diff --git a/packages/shared/src/conditions/compound-condition.ts b/packages/taco/src/conditions/compound-condition.ts
similarity index 100%
rename from packages/shared/src/conditions/compound-condition.ts
rename to packages/taco/src/conditions/compound-condition.ts
diff --git a/packages/shared/src/conditions/condition-expr.ts b/packages/taco/src/conditions/condition-expr.ts
similarity index 89%
rename from packages/shared/src/conditions/condition-expr.ts
rename to packages/taco/src/conditions/condition-expr.ts
index efd6def77..f343d6799 100644
--- a/packages/shared/src/conditions/condition-expr.ts
+++ b/packages/taco/src/conditions/condition-expr.ts
@@ -1,9 +1,8 @@
import { Conditions as WASMConditions } from '@nucypher/nucypher-core';
+import { toJSON } from '@nucypher/shared';
import { ethers } from 'ethers';
import { SemVer } from 'semver';
-import { toJSON } from '../utils';
-
import { Condition } from './condition';
import { ConditionContext, CustomContextParam } from './context';
@@ -13,11 +12,11 @@ export type ConditionExpressionJSON = {
};
export class ConditionExpression {
- public static VERSION = '1.0.0';
+ public static version = '1.0.0';
constructor(
public readonly condition: Condition,
- public readonly version: string = ConditionExpression.VERSION,
+ public readonly version: string = ConditionExpression.version,
) {}
public toObj(): ConditionExpressionJSON {
@@ -30,10 +29,10 @@ export class ConditionExpression {
public static fromObj(obj: ConditionExpressionJSON): ConditionExpression {
const receivedVersion = new SemVer(obj.version);
- const currentVersion = new SemVer(ConditionExpression.VERSION);
+ const currentVersion = new SemVer(ConditionExpression.version);
if (receivedVersion.major > currentVersion.major) {
throw new Error(
- `Version provided, ${obj.version}, is incompatible with current version, ${ConditionExpression.VERSION}`,
+ `Version provided, ${obj.version}, is incompatible with current version, ${ConditionExpression.version}`,
);
}
diff --git a/packages/shared/src/conditions/condition.ts b/packages/taco/src/conditions/condition.ts
similarity index 97%
rename from packages/shared/src/conditions/condition.ts
rename to packages/taco/src/conditions/condition.ts
index e5c5cc865..4d79e42c6 100644
--- a/packages/shared/src/conditions/condition.ts
+++ b/packages/taco/src/conditions/condition.ts
@@ -1,7 +1,6 @@
+import { objectEquals } from '@nucypher/shared';
import { z } from 'zod';
-import { objectEquals } from '../utils';
-
import {
CompoundCondition,
ContractCondition,
diff --git a/packages/shared/src/conditions/const.ts b/packages/taco/src/conditions/const.ts
similarity index 84%
rename from packages/shared/src/conditions/const.ts
rename to packages/taco/src/conditions/const.ts
index 9854c6a13..a7d8dc12c 100644
--- a/packages/shared/src/conditions/const.ts
+++ b/packages/taco/src/conditions/const.ts
@@ -1,4 +1,4 @@
-import { ChainId } from '../web3';
+import { ChainId } from '@nucypher/shared';
export const USER_ADDRESS_PARAM = ':userAddress';
diff --git a/packages/shared/src/conditions/context/context.ts b/packages/taco/src/conditions/context/context.ts
similarity index 92%
rename from packages/shared/src/conditions/context/context.ts
rename to packages/taco/src/conditions/context/context.ts
index a32bd0428..158ccf076 100644
--- a/packages/shared/src/conditions/context/context.ts
+++ b/packages/taco/src/conditions/context/context.ts
@@ -1,7 +1,7 @@
import { Context, Conditions as WASMConditions } from '@nucypher/nucypher-core';
+import { fromJSON, toJSON } from '@nucypher/shared';
import { ethers } from 'ethers';
-import { fromJSON, toJSON } from '../../utils';
import { Condition } from '../condition';
import { ConditionExpression } from '../condition-expr';
import { USER_ADDRESS_PARAM } from '../const';
@@ -59,32 +59,24 @@ export class ConditionContext {
}
public toObj = async (): Promise> => {
- // First, we want to find all the parameters we need to add
- const requestedParameters = new Set();
+ const requestedParameters = this.findRequestedParameters();
+ const parameters = await this.fillContextParameters(requestedParameters);
- // Search conditions for parameters
- const conditions = this.conditions.map((cnd) => cnd.toObj());
- const conditionsToCheck = fromJSON(
- new WASMConditions(toJSON(conditions)).toString(),
+ // Ok, so at this point we should have all the parameters we need
+ // If we don't, we have a problem and we should throw
+ const missingParameters = Array.from(requestedParameters).filter(
+ (key) => !parameters[key],
);
- for (const cond of conditionsToCheck) {
- // Check return value test
- const rvt = cond.returnValueTest.value;
- if (typeof rvt === 'string' && rvt.startsWith(CONTEXT_PARAM_PREFIX)) {
- requestedParameters.add(rvt);
- }
-
- // Check condition parameters
- for (const param of cond.parameters ?? []) {
- if (
- typeof param === 'string' &&
- param.startsWith(CONTEXT_PARAM_PREFIX)
- ) {
- requestedParameters.add(param);
- }
- }
+ if (missingParameters.length > 0) {
+ throw new Error(
+ `Missing custom context parameter(s): ${missingParameters.join(', ')}`,
+ );
}
+ return parameters;
+ };
+
+ private async fillContextParameters(requestedParameters: Set) {
// Now, we can safely add all the parameters
const parameters: Record = {};
@@ -105,20 +97,37 @@ export class ConditionContext {
for (const key in this.customParameters) {
parameters[key] = this.customParameters[key];
}
+ return parameters;
+ }
- // Ok, so at this point we should have all the parameters we need
- // If we don't, we have a problem and we should throw
- const missingParameters = Array.from(requestedParameters).filter(
- (key) => !parameters[key],
+ private findRequestedParameters() {
+ // First, we want to find all the parameters we need to add
+ const requestedParameters = new Set();
+
+ // Search conditions for parameters
+ const conditions = this.conditions.map((cnd) => cnd.toObj());
+ const conditionsToCheck = fromJSON(
+ new WASMConditions(toJSON(conditions)).toString(),
);
- if (missingParameters.length > 0) {
- throw new Error(
- `Missing custom context parameter(s): ${missingParameters.join(', ')}`,
- );
- }
+ for (const cond of conditionsToCheck) {
+ // Check return value test
+ const rvt = cond.returnValueTest.value;
+ if (typeof rvt === 'string' && rvt.startsWith(CONTEXT_PARAM_PREFIX)) {
+ requestedParameters.add(rvt);
+ }
- return parameters;
- };
+ // Check condition parameters
+ for (const param of cond.parameters ?? []) {
+ if (
+ typeof param === 'string' &&
+ param.startsWith(CONTEXT_PARAM_PREFIX)
+ ) {
+ requestedParameters.add(param);
+ }
+ }
+ }
+ return requestedParameters;
+ }
public async toJson(): Promise {
const parameters = await this.toObj();
diff --git a/packages/shared/src/conditions/context/index.ts b/packages/taco/src/conditions/context/index.ts
similarity index 100%
rename from packages/shared/src/conditions/context/index.ts
rename to packages/taco/src/conditions/context/index.ts
diff --git a/packages/shared/src/conditions/context/providers.ts b/packages/taco/src/conditions/context/providers.ts
similarity index 100%
rename from packages/shared/src/conditions/context/providers.ts
rename to packages/taco/src/conditions/context/providers.ts
diff --git a/packages/taco/src/conditions/index.ts b/packages/taco/src/conditions/index.ts
new file mode 100644
index 000000000..fad3849b1
--- /dev/null
+++ b/packages/taco/src/conditions/index.ts
@@ -0,0 +1,14 @@
+import * as base from './base';
+import * as predefined from './predefined';
+
+export * from './base';
+export * from './predefined';
+
+export {
+ CompoundConditionProps,
+ CompoundConditionType,
+} from './compound-condition';
+export { Condition, ConditionProps } from './condition';
+export { ConditionExpression, ConditionExpressionJSON } from './condition-expr';
+export { ConditionContext, CustomContextParam } from './context';
+export { base, predefined };
diff --git a/packages/shared/src/conditions/predefined/erc721.ts b/packages/taco/src/conditions/predefined/erc721.ts
similarity index 90%
rename from packages/shared/src/conditions/predefined/erc721.ts
rename to packages/taco/src/conditions/predefined/erc721.ts
index 1a81b8456..b85cc7833 100644
--- a/packages/shared/src/conditions/predefined/erc721.ts
+++ b/packages/taco/src/conditions/predefined/erc721.ts
@@ -1,5 +1,8 @@
-import { ContractCondition, ContractConditionProps } from '../base';
-import { ContractConditionType } from '../base/contract';
+import {
+ ContractCondition,
+ ContractConditionProps,
+ ContractConditionType,
+} from '../base';
import { USER_ADDRESS_PARAM } from '../const';
// TODO: Rewrite these using Zod schemas?
diff --git a/packages/shared/src/conditions/predefined/index.ts b/packages/taco/src/conditions/predefined/index.ts
similarity index 100%
rename from packages/shared/src/conditions/predefined/index.ts
rename to packages/taco/src/conditions/predefined/index.ts
diff --git a/packages/shared/src/conditions/zod.ts b/packages/taco/src/conditions/zod.ts
similarity index 100%
rename from packages/shared/src/conditions/zod.ts
rename to packages/taco/src/conditions/zod.ts
diff --git a/packages/shared/src/dkg.ts b/packages/taco/src/dkg.ts
similarity index 97%
rename from packages/shared/src/dkg.ts
rename to packages/taco/src/dkg.ts
index ae4f6970e..6ee67d216 100644
--- a/packages/shared/src/dkg.ts
+++ b/packages/taco/src/dkg.ts
@@ -1,12 +1,11 @@
import { DkgPublicKey } from '@nucypher/nucypher-core';
-import { BigNumberish, ethers } from 'ethers';
-
import {
+ ChecksumAddress,
DkgCoordinatorAgent,
DkgRitualState,
-} from './contracts/agents/coordinator';
-import { ChecksumAddress } from './types';
-import { fromHexString } from './utils';
+ fromHexString,
+} from '@nucypher/shared';
+import { BigNumberish, ethers } from 'ethers';
export interface DkgRitualJSON {
id: number;
diff --git a/packages/taco/src/index.ts b/packages/taco/src/index.ts
index b3dec3e3b..b1c36b574 100644
--- a/packages/taco/src/index.ts
+++ b/packages/taco/src/index.ts
@@ -1,23 +1,7 @@
-import {
- Ciphertext,
- EncryptedTreasureMap,
- HRAC,
- MessageKit,
- PublicKey,
- SecretKey,
- Signer,
- TreasureMap,
-} from '@nucypher/nucypher-core';
+export { DkgPublicKey, ThresholdMessageKit } from '@nucypher/nucypher-core';
-export const core = {
- PublicKey,
- SecretKey,
- EncryptedTreasureMap,
- HRAC,
- Signer,
- TreasureMap,
- MessageKit,
- Ciphertext,
-};
+export { fromBytes, getPorterUri, initialize, toBytes } from '@nucypher/shared';
-export { taco } from './taco';
+export * as conditions from './conditions';
+
+export { decrypt, encrypt } from './taco';
diff --git a/packages/taco/src/taco.ts b/packages/taco/src/taco.ts
index 7a80f83df..3a23bd132 100644
--- a/packages/taco/src/taco.ts
+++ b/packages/taco/src/taco.ts
@@ -1,34 +1,77 @@
-import { DkgPublicKey, ThresholdMessageKit } from '@nucypher/nucypher-core';
import {
- Condition,
- ConditionExpression,
- DkgClient,
+ AccessControlPolicy,
+ DkgPublicKey,
+ encryptForDkg,
+ ThresholdMessageKit,
+} from '@nucypher/nucypher-core';
+import {
DkgCoordinatorAgent,
- Enrico,
+ fromHexString,
getPorterUri,
- ThresholdDecrypter,
toBytes,
} from '@nucypher/shared';
import { ethers } from 'ethers';
+import { keccak256 } from 'ethers/lib/utils';
+
+import { Condition, ConditionExpression } from './conditions';
+import { DkgClient } from './dkg';
+import { retrieveAndDecrypt } from './tdec';
export const encrypt = async (
provider: ethers.providers.Provider,
- message: string,
+ message: Uint8Array | string,
condition: Condition,
ritualId: number,
+ authSigner: ethers.Signer,
): Promise => {
+ // TODO(#264): Enable ritual initialization
+ // if (ritualId === undefined) {
+ // ritualId = await DkgClient.initializeRitual(
+ // provider,
+ // this.cohort.ursulaAddresses,
+ // true
+ // );
+ // }
+ // if (ritualId === undefined) {
+ // // Given that we just initialized the ritual, this should never happen
+ // throw new Error('Ritual ID is undefined');
+ // }
const dkgRitual = await DkgClient.getFinalizedRitual(provider, ritualId);
- return await encryptLight(message, condition, dkgRitual.dkgPublicKey);
+
+ return await encryptWithPublicKey(
+ message,
+ condition,
+ dkgRitual.dkgPublicKey,
+ authSigner,
+ );
};
-export const encryptLight = async (
- message: string,
+export const encryptWithPublicKey = async (
+ message: Uint8Array | string,
condition: Condition,
dkgPublicKey: DkgPublicKey,
+ authSigner: ethers.Signer,
): Promise => {
- const encrypter = new Enrico(dkgPublicKey);
+ if (typeof message === 'string') {
+ message = toBytes(message);
+ }
+
const conditionExpr = new ConditionExpression(condition);
- return encrypter.encryptMessageCbd(toBytes(message), conditionExpr);
+
+ const [ciphertext, authenticatedData] = encryptForDkg(
+ message,
+ dkgPublicKey,
+ conditionExpr.toWASMConditions(),
+ );
+
+ const headerHash = keccak256(ciphertext.header.toBytes());
+ const authorization = await authSigner.signMessage(fromHexString(headerHash));
+ const acp = new AccessControlPolicy(
+ authenticatedData,
+ fromHexString(authorization),
+ );
+
+ return new ThresholdMessageKit(ciphertext, acp);
};
export const decrypt = async (
@@ -42,16 +85,18 @@ export const decrypt = async (
messageKit.acp.publicKey,
);
const ritual = await DkgClient.getFinalizedRitual(provider, ritualId);
- const decrypter = ThresholdDecrypter.create(
+ return retrieveAndDecrypt(
+ provider,
porterUri,
+ messageKit,
ritualId,
ritual.threshold,
+ signer,
);
- return decrypter.retrieveAndDecrypt(provider, messageKit, signer);
};
-export const taco = {
- encrypt,
- encryptLight,
- decrypt,
-};
+export const isAuthorized = async (
+ provider: ethers.providers.Provider,
+ messageKit: ThresholdMessageKit,
+ ritualId: number,
+) => DkgCoordinatorAgent.isEncryptionAuthorized(provider, ritualId, messageKit);
diff --git a/packages/taco/src/tdec.ts b/packages/taco/src/tdec.ts
new file mode 100644
index 000000000..1c9c9dfe1
--- /dev/null
+++ b/packages/taco/src/tdec.ts
@@ -0,0 +1,178 @@
+import {
+ AccessControlPolicy,
+ combineDecryptionSharesSimple,
+ Context,
+ DecryptionShareSimple,
+ DkgPublicKey,
+ EncryptedThresholdDecryptionRequest,
+ EncryptedThresholdDecryptionResponse,
+ encryptForDkg,
+ FerveoVariant,
+ SessionSharedSecret,
+ SessionStaticSecret,
+ ThresholdDecryptionRequest,
+ ThresholdMessageKit,
+} from '@nucypher/nucypher-core';
+import {
+ DkgCoordinatorAgent,
+ DkgParticipant,
+ PorterClient,
+ toBytes,
+} from '@nucypher/shared';
+import { ethers } from 'ethers';
+import { arrayify, keccak256 } from 'ethers/lib/utils';
+
+import { ConditionContext, ConditionExpression } from './conditions';
+
+export const encryptMessage = async (
+ plaintext: Uint8Array | string,
+ encryptingKey: DkgPublicKey,
+ conditions: ConditionExpression,
+ authSigner: ethers.Signer,
+): Promise => {
+ const [ciphertext, authenticatedData] = encryptForDkg(
+ plaintext instanceof Uint8Array ? plaintext : toBytes(plaintext),
+ encryptingKey,
+ conditions.toWASMConditions(),
+ );
+
+ const headerHash = keccak256(ciphertext.header.toBytes());
+ const authorization = await authSigner.signMessage(arrayify(headerHash));
+ const acp = new AccessControlPolicy(
+ authenticatedData,
+ toBytes(authorization),
+ );
+
+ return new ThresholdMessageKit(ciphertext, acp);
+};
+
+// Retrieve and decrypt ciphertext using provider and condition expression
+export const retrieveAndDecrypt = async (
+ provider: ethers.providers.Provider,
+ porterUri: string,
+ thresholdMessageKit: ThresholdMessageKit,
+ ritualId: number,
+ threshold: number,
+ signer?: ethers.Signer,
+): Promise => {
+ const decryptionShares = await retrieve(
+ provider,
+ porterUri,
+ thresholdMessageKit,
+ ritualId,
+ threshold,
+ signer,
+ );
+ const sharedSecret = combineDecryptionSharesSimple(decryptionShares);
+ return thresholdMessageKit.decryptWithSharedSecret(sharedSecret);
+};
+
+// Retrieve decryption shares
+const retrieve = async (
+ provider: ethers.providers.Provider,
+ porterUri: string,
+ thresholdMessageKit: ThresholdMessageKit,
+ ritualId: number,
+ threshold: number,
+ signer?: ethers.Signer,
+): Promise => {
+ const dkgParticipants = await DkgCoordinatorAgent.getParticipants(
+ provider,
+ ritualId,
+ );
+ const wasmContext = await ConditionContext.fromConditions(
+ provider,
+ thresholdMessageKit.acp.conditions,
+ signer,
+ ).toWASMContext();
+ const { sharedSecrets, encryptedRequests } = await makeDecryptionRequests(
+ ritualId,
+ wasmContext,
+ dkgParticipants,
+ thresholdMessageKit,
+ );
+
+ const porter = new PorterClient(porterUri);
+ const { encryptedResponses, errors } = await porter.cbdDecrypt(
+ encryptedRequests,
+ threshold,
+ );
+ if (Object.keys(encryptedResponses).length < threshold) {
+ throw new Error(
+ `Threshold of responses not met; CBD decryption failed with errors: ${JSON.stringify(
+ errors,
+ )}`,
+ );
+ }
+
+ return makeDecryptionShares(encryptedResponses, sharedSecrets, ritualId);
+};
+
+const makeDecryptionShares = (
+ encryptedResponses: Record,
+ sessionSharedSecret: Record,
+ expectedRitualId: number,
+) => {
+ const decryptedResponses = Object.entries(encryptedResponses).map(
+ ([ursula, response]) => response.decrypt(sessionSharedSecret[ursula]),
+ );
+
+ const ritualIds = decryptedResponses.map(({ ritualId }) => ritualId);
+ if (ritualIds.some((ritualId) => ritualId !== expectedRitualId)) {
+ throw new Error(
+ `Ritual id mismatch. Expected ${expectedRitualId}, got ${ritualIds}`,
+ );
+ }
+
+ return decryptedResponses.map(({ decryptionShare }) =>
+ DecryptionShareSimple.fromBytes(decryptionShare),
+ );
+};
+
+const makeDecryptionRequests = async (
+ ritualId: number,
+ wasmContext: Context,
+ dkgParticipants: Array,
+ thresholdMessageKit: ThresholdMessageKit,
+): Promise<{
+ sharedSecrets: Record;
+ encryptedRequests: Record;
+}> => {
+ const decryptionRequest = new ThresholdDecryptionRequest(
+ ritualId,
+ FerveoVariant.simple,
+ thresholdMessageKit.ciphertextHeader,
+ thresholdMessageKit.acp,
+ wasmContext,
+ );
+
+ const ephemeralSessionKey = makeSessionKey();
+
+ // Compute shared secrets for each participant
+ const sharedSecrets: Record = Object.fromEntries(
+ dkgParticipants.map(({ provider, decryptionRequestStaticKey }) => {
+ const sharedSecret = ephemeralSessionKey.deriveSharedSecret(
+ decryptionRequestStaticKey,
+ );
+ return [provider, sharedSecret];
+ }),
+ );
+
+ // Create encrypted requests for each participant
+ const encryptedRequests: Record =
+ Object.fromEntries(
+ Object.entries(sharedSecrets).map(([provider, sessionSharedSecret]) => {
+ const encryptedRequest = decryptionRequest.encrypt(
+ sessionSharedSecret,
+ ephemeralSessionKey.publicKey(),
+ );
+ return [provider, encryptedRequest];
+ }),
+ );
+
+ return { sharedSecrets, encryptedRequests };
+};
+
+// Moving to a separate function to make it easier to mock
+// TODO: Reconsider this
+const makeSessionKey = () => SessionStaticSecret.random();
diff --git a/packages/taco/src/web3.ts b/packages/taco/src/web3.ts
new file mode 100644
index 000000000..f8923626b
--- /dev/null
+++ b/packages/taco/src/web3.ts
@@ -0,0 +1,25 @@
+export interface Eip712TypedData {
+ types: {
+ Wallet: { name: string; type: string }[];
+ };
+ domain: {
+ salt: string;
+ chainId: number;
+ name: string;
+ version: string;
+ };
+ message: {
+ blockHash: string;
+ address: string;
+ blockNumber: number;
+ signatureText: string;
+ };
+}
+
+export interface FormattedTypedData extends Eip712TypedData {
+ primaryType: 'Wallet';
+ types: {
+ EIP712Domain: { name: string; type: string }[];
+ Wallet: { name: string; type: string }[];
+ };
+}
diff --git a/packages/shared/test/unit/conditions/base/condition.test.ts b/packages/taco/test/conditions/base/condition.test.ts
similarity index 56%
rename from packages/shared/test/unit/conditions/base/condition.test.ts
rename to packages/taco/test/conditions/base/condition.test.ts
index 4d4c03a51..9ff10c618 100644
--- a/packages/shared/test/unit/conditions/base/condition.test.ts
+++ b/packages/taco/test/conditions/base/condition.test.ts
@@ -1,39 +1,36 @@
-import {
- TEST_CHAIN_ID,
- TEST_CONTRACT_ADDR,
- testContractConditionObj,
-} from '@nucypher/test-utils';
-import { expect, test } from 'vitest';
+import { TEST_CHAIN_ID, TEST_CONTRACT_ADDR } from '@nucypher/test-utils';
+import { describe, expect, it } from 'vitest';
-import { Condition } from '../../../../src';
-import { ContractCondition } from '../../../../src/conditions/base';
import {
+ Condition,
+ ContractCondition,
ERC721Balance,
ERC721Ownership,
-} from '../../../../src/conditions/predefined';
+} from '../../../src/conditions';
+import { testContractConditionObj } from '../../test-utils';
-test('validation', () => {
+describe('validation', () => {
const condition = new ERC721Balance({
contractAddress: TEST_CONTRACT_ADDR,
chain: TEST_CHAIN_ID,
});
- test('accepts a correct schema', async () => {
+ it('accepts a correct schema', async () => {
const result = Condition.validate(condition.schema, condition.value);
expect(result.error).toBeUndefined();
expect(result.data.contractAddress).toEqual(TEST_CONTRACT_ADDR);
});
});
-test('serialization', () => {
- test('serializes to a plain object', () => {
+describe('serialization', () => {
+ it('serializes to a plain object', () => {
const contract = new ContractCondition(testContractConditionObj);
expect(contract.toObj()).toEqual({
...testContractConditionObj,
});
});
- test('serializes predefined conditions', () => {
+ it('serializes predefined conditions', () => {
const contract = new ERC721Ownership(testContractConditionObj);
expect(contract.toObj()).toEqual({
...testContractConditionObj,
diff --git a/packages/shared/test/unit/conditions/base/contract.test.ts b/packages/taco/test/conditions/base/contract.test.ts
similarity index 89%
rename from packages/shared/test/unit/conditions/base/contract.test.ts
rename to packages/taco/test/conditions/base/contract.test.ts
index ce9449d4c..c4e875c7b 100644
--- a/packages/shared/test/unit/conditions/base/contract.test.ts
+++ b/packages/taco/test/conditions/base/contract.test.ts
@@ -1,26 +1,20 @@
-import {
- fakeProvider,
- fakeSigner,
- testContractConditionObj,
- testFunctionAbi,
-} from '@nucypher/test-utils';
-import { beforeAll, expect, test } from 'vitest';
+import { initialize } from '@nucypher/nucypher-core';
+import { fakeProvider, fakeSigner } from '@nucypher/test-utils';
+import { beforeAll, describe, expect, it } from 'vitest';
import {
ConditionExpression,
ContractCondition,
ContractConditionProps,
CustomContextParam,
- initialize,
-} from '../../../../src';
-import {
- contractConditionSchema,
FunctionAbiProps,
-} from '../../../../src/conditions/base/contract';
-import { USER_ADDRESS_PARAM } from '../../../../src/conditions/const';
+} from '../../../src/conditions';
+import { contractConditionSchema } from '../../../src/conditions/base/contract';
+import { USER_ADDRESS_PARAM } from '../../../src/conditions/const';
+import { testContractConditionObj, testFunctionAbi } from '../../test-utils';
-test('validation', () => {
- test('accepts on a valid schema', () => {
+describe('validation', () => {
+ it('accepts on a valid schema', () => {
const result = ContractCondition.validate(
contractConditionSchema,
testContractConditionObj,
@@ -30,7 +24,7 @@ test('validation', () => {
expect(result.data).toEqual(testContractConditionObj);
});
- test('rejects an invalid schema', () => {
+ it('rejects an invalid schema', () => {
const badContractCondition = {
...testContractConditionObj,
// Intentionally removing `contractAddress`
@@ -51,7 +45,7 @@ test('validation', () => {
});
});
-test('accepts either standardContractType or functionAbi but not both or none', () => {
+describe('accepts either standardContractType or functionAbi but not both or none', () => {
const standardContractType = 'ERC20';
const functionAbi = {
inputs: [
@@ -73,7 +67,7 @@ test('accepts either standardContractType or functionAbi but not both or none',
type: 'function',
};
- test('accepts standardContractType', () => {
+ it('accepts standardContractType', () => {
const conditionObj = {
...testContractConditionObj,
standardContractType,
@@ -88,7 +82,7 @@ test('accepts either standardContractType or functionAbi but not both or none',
expect(result.data).toEqual(conditionObj);
});
- test('accepts functionAbi', () => {
+ it('accepts functionAbi', () => {
const conditionObj = {
...testContractConditionObj,
functionAbi,
@@ -103,7 +97,7 @@ test('accepts either standardContractType or functionAbi but not both or none',
expect(result.data).toEqual(conditionObj);
});
- test('rejects both', () => {
+ it('rejects both', () => {
const conditionObj = {
...testContractConditionObj,
standardContractType,
@@ -123,7 +117,7 @@ test('accepts either standardContractType or functionAbi but not both or none',
});
});
- test('rejects none', () => {
+ it('rejects none', () => {
const conditionObj = {
...testContractConditionObj,
standardContractType: undefined,
@@ -144,7 +138,7 @@ test('accepts either standardContractType or functionAbi but not both or none',
});
});
-test('supports custom function abi', () => {
+describe('supports custom function abi', () => {
const contractConditionObj: ContractConditionProps = {
...testContractConditionObj,
standardContractType: undefined,
@@ -167,7 +161,7 @@ test('supports custom function abi', () => {
await initialize();
});
- test('accepts custom function abi with a custom parameter', async () => {
+ it('accepts custom function abi with a custom parameter', async () => {
const asJson = await conditionExpr
.buildContext(fakeProvider(), {}, fakeSigner())
.withCustomParams(customParams)
@@ -178,7 +172,7 @@ test('supports custom function abi', () => {
expect(asJson).toContain(myCustomParam);
});
- test.each([
+ it.each([
{
method: 'balanceOf',
functionAbi: {
@@ -217,7 +211,7 @@ test('supports custom function abi', () => {
expect(result.data?.functionAbi).toEqual(functionAbi);
});
- test.each([
+ it.each([
{
method: '1234',
badField: 'name',
diff --git a/packages/taco/test/conditions/base/rpc.test.ts b/packages/taco/test/conditions/base/rpc.test.ts
new file mode 100644
index 000000000..952cada5b
--- /dev/null
+++ b/packages/taco/test/conditions/base/rpc.test.ts
@@ -0,0 +1,86 @@
+import { TEST_CONTRACT_ADDR } from '@nucypher/test-utils';
+import { describe, expect, it } from 'vitest';
+
+import { RpcCondition } from '../../../src/conditions';
+import { rpcConditionSchema } from '../../../src/conditions/base/rpc';
+import { testRpcConditionObj } from '../../test-utils';
+
+describe('validation', () => {
+ it('accepts on a valid schema', () => {
+ const result = RpcCondition.validate(
+ rpcConditionSchema,
+ testRpcConditionObj,
+ );
+
+ expect(result.error).toBeUndefined();
+ expect(result.data).toEqual(testRpcConditionObj);
+ });
+
+ it('rejects an invalid schema', () => {
+ const badRpcObj = {
+ ...testRpcConditionObj,
+ // Intentionally replacing `method` with an invalid method
+ method: 'fake_invalid_method',
+ } as unknown as typeof testRpcConditionObj;
+
+ const result = RpcCondition.validate(rpcConditionSchema, badRpcObj);
+
+ expect(result.error).toBeDefined();
+ expect(result.data).toBeUndefined();
+ expect(result.error?.format()).toMatchObject({
+ method: {
+ _errors: [
+ "Invalid enum value. Expected 'eth_getBalance' | 'balanceOf', received 'fake_invalid_method'",
+ ],
+ },
+ });
+ });
+
+ describe('parameters', () => {
+ it('accepts a single address', () => {
+ const result = RpcCondition.validate(rpcConditionSchema, {
+ ...testRpcConditionObj,
+ parameters: [TEST_CONTRACT_ADDR],
+ });
+
+ expect(result.error).toBeUndefined();
+ expect(result.data).toEqual({
+ ...testRpcConditionObj,
+ parameters: [TEST_CONTRACT_ADDR],
+ });
+ });
+
+ it('accepts a single address and a block number', () => {
+ const result = RpcCondition.validate(rpcConditionSchema, {
+ ...testRpcConditionObj,
+ parameters: [TEST_CONTRACT_ADDR, 'latest'],
+ });
+
+ expect(result.error).toBeUndefined();
+ expect(result.data).toEqual({
+ ...testRpcConditionObj,
+ parameters: [TEST_CONTRACT_ADDR, 'latest'],
+ });
+ });
+
+ it('rejects on an extra parameter', () => {
+ const result = RpcCondition.validate(rpcConditionSchema, {
+ ...testRpcConditionObj,
+ parameters: [
+ TEST_CONTRACT_ADDR,
+ 'latest',
+ // Intentionally adding a third, invalid parameter
+ '0x1234',
+ ],
+ });
+
+ expect(result.error).toBeDefined();
+ expect(result.data).toBeUndefined();
+ expect(result.error?.format()).toMatchObject({
+ parameters: {
+ _errors: ['Array must contain exactly 1 element(s)'],
+ },
+ });
+ });
+ });
+});
diff --git a/packages/shared/test/unit/conditions/base/time.test.ts b/packages/taco/test/conditions/base/time.test.ts
similarity index 78%
rename from packages/shared/test/unit/conditions/base/time.test.ts
rename to packages/taco/test/conditions/base/time.test.ts
index 2b08a9c34..330b11730 100644
--- a/packages/shared/test/unit/conditions/base/time.test.ts
+++ b/packages/taco/test/conditions/base/time.test.ts
@@ -1,24 +1,22 @@
-import { expect, test } from 'vitest';
+import { describe, expect, it } from 'vitest';
import {
+ ReturnValueTestProps,
TimeCondition,
- TimeConditionProps,
-} from '../../../../src/conditions/base';
-import { ReturnValueTestProps } from '../../../../src/conditions/base/shared';
-import {
TimeConditionMethod,
- timeConditionSchema,
+ TimeConditionProps,
TimeConditionType,
-} from '../../../../src/conditions/base/time';
+} from '../../../src/conditions';
+import { timeConditionSchema } from '../../../src/conditions/base/time';
-test('validation', () => {
+describe('validation', () => {
const returnValueTest: ReturnValueTestProps = {
index: 0,
comparator: '>',
value: '100',
};
- test('accepts a valid schema', () => {
+ it('accepts a valid schema', () => {
const conditionObj: TimeConditionProps = {
conditionType: TimeConditionType,
returnValueTest,
@@ -31,7 +29,7 @@ test('validation', () => {
expect(result.data).toEqual(conditionObj);
});
- test('rejects an invalid schema', () => {
+ it('rejects an invalid schema', () => {
const badObj = {
conditionType: TimeConditionType,
// Intentionally replacing `returnValueTest` with an invalid test
diff --git a/packages/shared/test/unit/conditions/compound-condition.test.ts b/packages/taco/test/conditions/compound-condition.test.ts
similarity index 64%
rename from packages/shared/test/unit/conditions/compound-condition.test.ts
rename to packages/taco/test/conditions/compound-condition.test.ts
index b2313591d..b988b994a 100644
--- a/packages/shared/test/unit/conditions/compound-condition.test.ts
+++ b/packages/taco/test/conditions/compound-condition.test.ts
@@ -1,19 +1,18 @@
-import {
- testContractConditionObj,
- testRpcConditionObj,
- testTimeConditionObj,
-} from '@nucypher/test-utils';
-import { expect, test } from 'vitest';
+import { describe, expect, it } from 'vitest';
-import { Condition } from '../../../src';
-import { CompoundCondition } from '../../../src/conditions/base';
+import { CompoundCondition, Condition } from '../../src/conditions';
import {
compoundConditionSchema,
CompoundConditionType,
-} from '../../../src/conditions/compound-condition';
+} from '../../src/conditions/compound-condition';
+import {
+ testContractConditionObj,
+ testRpcConditionObj,
+ testTimeConditionObj,
+} from '../test-utils';
-test('validation', () => {
- test('accepts or operator', () => {
+describe('validation', () => {
+ it('accepts or operator', () => {
const conditionObj = {
operator: 'or',
operands: [testContractConditionObj, testTimeConditionObj],
@@ -27,8 +26,9 @@ test('validation', () => {
});
});
- test('accepts and operator', () => {
+ it('accepts and operator', () => {
const conditionObj = {
+ conditionType: CompoundConditionType,
operator: 'and',
operands: [testContractConditionObj, testTimeConditionObj],
};
@@ -44,8 +44,9 @@ test('validation', () => {
});
});
- test('rejects an invalid operator', () => {
+ it('rejects an invalid operator', () => {
const result = CompoundCondition.validate(compoundConditionSchema, {
+ conditionType: CompoundConditionType,
operator: 'not-an-operator',
operands: [testRpcConditionObj, testTimeConditionObj],
});
@@ -61,7 +62,7 @@ test('validation', () => {
});
});
- test('rejects invalid number of operands = 0', () => {
+ it('rejects invalid number of operands = 0', () => {
const result = CompoundCondition.validate(compoundConditionSchema, {
operator: 'or',
operands: [],
@@ -76,7 +77,7 @@ test('validation', () => {
});
});
- test('rejects invalid number of operands = 1', () => {
+ it('rejects invalid number of operands = 1', () => {
const result = CompoundCondition.validate(compoundConditionSchema, {
operator: 'or',
operands: [testRpcConditionObj],
@@ -90,8 +91,9 @@ test('validation', () => {
});
});
- test('accepts recursive compound conditions', () => {
+ it('accepts recursive compound conditions', () => {
const conditionObj = {
+ conditionType: CompoundConditionType,
operator: 'and',
operands: [
testContractConditionObj,
@@ -123,4 +125,45 @@ test('validation', () => {
],
});
});
+
+ const multichainCondition = {
+ conditionType: CompoundConditionType,
+ operator: 'and',
+ operands: [1, 137, 5, 80001].map((chain) => ({
+ ...testRpcConditionObj,
+ chain,
+ })),
+ };
+
+ it('accepts on a valid multichain condition schema', () => {
+ const result = CompoundCondition.validate(
+ compoundConditionSchema,
+ multichainCondition,
+ );
+
+ expect(result.error).toBeUndefined();
+ expect(result.data).toEqual(multichainCondition);
+ });
+
+ it('rejects an invalid multichain condition schema', () => {
+ const badMultichainCondition = {
+ ...multichainCondition,
+ operands: [
+ ...multichainCondition.operands,
+ {
+ // Bad condition
+ ...testRpcConditionObj,
+ chain: -1,
+ },
+ ],
+ };
+
+ const result = CompoundCondition.validate(
+ compoundConditionSchema,
+ badMultichainCondition,
+ );
+
+ expect(result.error).toBeDefined();
+ expect(result.data).toBeUndefined();
+ });
});
diff --git a/packages/shared/test/unit/conditions/condition-expr.test.ts b/packages/taco/test/conditions/condition-expr.test.ts
similarity index 85%
rename from packages/shared/test/unit/conditions/condition-expr.test.ts
rename to packages/taco/test/conditions/condition-expr.test.ts
index fba45abbf..4a24fc77c 100644
--- a/packages/shared/test/unit/conditions/condition-expr.test.ts
+++ b/packages/taco/test/conditions/condition-expr.test.ts
@@ -1,30 +1,31 @@
-import {
- TEST_CHAIN_ID,
- TEST_CONTRACT_ADDR,
- testContractConditionObj,
- testFunctionAbi,
- testReturnValueTest,
- testRpcConditionObj,
- testTimeConditionObj,
-} from '@nucypher/test-utils';
+import { initialize } from '@nucypher/nucypher-core';
+import { objectEquals, toJSON } from '@nucypher/shared';
+import { TEST_CHAIN_ID, TEST_CONTRACT_ADDR } from '@nucypher/test-utils';
import { SemVer } from 'semver';
-import { expect, test } from 'vitest';
+import { beforeAll, describe, expect, it } from 'vitest';
-import { ConditionExpression, objectEquals, toJSON } from '../../../src';
import {
CompoundCondition,
+ ConditionExpression,
ContractCondition,
ContractConditionProps,
+ ERC721Balance,
RpcCondition,
RpcConditionType,
TimeCondition,
TimeConditionProps,
-} from '../../../src/conditions/base';
-import { USER_ADDRESS_PARAM } from '../../../src/conditions/const';
-import { ERC721Balance } from '../../../src/conditions/predefined';
+} from '../../src/conditions';
+import { USER_ADDRESS_PARAM } from '../../src/conditions/const';
+import {
+ testContractConditionObj,
+ testFunctionAbi,
+ testReturnValueTest,
+ testRpcConditionObj,
+ testTimeConditionObj,
+} from '../test-utils';
-test('condition set', () => {
- const erc721BalanceCondition = new ERC721Balance({
+describe('condition set', () => {
+ const erc721Balance = new ERC721Balance({
chain: TEST_CHAIN_ID,
contractAddress: TEST_CONTRACT_ADDR,
});
@@ -63,20 +64,24 @@ test('condition set', () => {
],
});
- test('equality', () => {
+ beforeAll(async () => {
+ await initialize();
+ });
+
+ describe('equality', () => {
const conditionExprCurrentVersion = new ConditionExpression(rpcCondition);
- test('same version and condition', () => {
+ it('same version and condition', () => {
const conditionExprSameCurrentVersion = new ConditionExpression(
rpcCondition,
- ConditionExpression.VERSION,
+ ConditionExpression.version,
);
expect(
conditionExprCurrentVersion.equals(conditionExprSameCurrentVersion),
).toBeTruthy();
});
- test('different minor/patch version but same condition', () => {
+ it('different minor/patch version but same condition', () => {
const conditionExprOlderMinorVersion = new ConditionExpression(
rpcCondition,
'0.1.0',
@@ -96,7 +101,7 @@ test('condition set', () => {
).not.toBeTruthy();
});
- test('minor/patch number greater than major; still older', () => {
+ it('minor/patch number greater than major; still older', () => {
const conditionExprOlderMinorVersion = new ConditionExpression(
rpcCondition,
'0.9.0',
@@ -133,8 +138,8 @@ test('condition set', () => {
).not.toBeTruthy();
});
- test.each([
- erc721BalanceCondition,
+ it.each([
+ erc721Balance,
contractConditionNoAbi,
contractConditionWithAbi,
timeCondition,
@@ -149,27 +154,22 @@ test('condition set', () => {
).not.toBeTruthy();
});
- test('same contract condition although using erc721 helper', () => {
- const erc721ConditionExpr = new ConditionExpression(
- erc721BalanceCondition,
- );
- const erc721ConditionData = erc721BalanceCondition.toObj();
+ it('same contract condition although using erc721 helper', () => {
+ const conditionExpr = new ConditionExpression(erc721Balance);
+ const erc721ConditionData = erc721Balance.toObj();
const sameContractCondition = new ContractCondition(erc721ConditionData);
const contractConditionExpr = new ConditionExpression(
sameContractCondition,
);
expect(
- objectEquals(
- erc721ConditionExpr.toObj(),
- contractConditionExpr.toObj(),
- ),
+ objectEquals(conditionExpr.toObj(), contractConditionExpr.toObj()),
).toBeTruthy();
});
});
- test('serialization / deserialization', () => {
- test.each([
- erc721BalanceCondition,
+ describe('serialization / deserialization', () => {
+ it.each([
+ erc721Balance,
contractConditionNoAbi,
contractConditionWithAbi,
rpcCondition,
@@ -180,7 +180,7 @@ test('condition set', () => {
const conditionExprJson = conditionExpr.toJson();
expect(conditionExprJson).toBeDefined();
expect(conditionExprJson).toContain('version');
- expect(conditionExprJson).toContain(ConditionExpression.VERSION);
+ expect(conditionExprJson).toContain(ConditionExpression.version);
expect(conditionExprJson).toContain('condition');
expect(conditionExprJson).toContain(toJSON(condition.toObj()));
@@ -196,15 +196,15 @@ test('condition set', () => {
expect(fromWasmConditions.equals(conditionExprFromJson)).toBeTruthy();
});
- test('serializes to and from WASM conditions', () => {
- const conditionExpr = new ConditionExpression(erc721BalanceCondition);
+ it('serializes to and from WASM conditions', () => {
+ const conditionExpr = new ConditionExpression(erc721Balance);
const wasmConditions = conditionExpr.toWASMConditions();
const fromWasm = ConditionExpression.fromWASMConditions(wasmConditions);
expect(conditionExpr.equals(fromWasm)).toBeTruthy();
});
- test('incompatible version', () => {
- const currentVersion = new SemVer(ConditionExpression.VERSION);
+ it('incompatible version', () => {
+ const currentVersion = new SemVer(ConditionExpression.version);
const invalidVersion = currentVersion.inc('major');
expect(() => {
ConditionExpression.fromObj({
@@ -212,11 +212,11 @@ test('condition set', () => {
condition: testTimeConditionObj,
});
}).toThrow(
- `Version provided, ${invalidVersion}, is incompatible with current version, ${ConditionExpression.VERSION}`,
+ `Version provided, ${invalidVersion}, is incompatible with current version, ${ConditionExpression.version}`,
);
});
- test.each(['version', 'x.y', 'x.y.z', '-1,0.0', '1.0.0.0.0.0.0'])(
+ it.each(['version', 'x.y', 'x.y.z', '-1,0.0', '1.0.0.0.0.0.0'])(
'invalid versions',
(invalidVersion) => {
expect(() => {
@@ -228,7 +228,7 @@ test('condition set', () => {
},
);
- test.each(['_invalid_condition_type_', undefined as unknown as string])(
+ it.each(['_invalid_condition_type_', undefined as unknown as string])(
'rejects an invalid condition type',
(invalidConditionType) => {
const conditionObj = {
@@ -237,42 +237,40 @@ test('condition set', () => {
} as unknown as TimeConditionProps;
expect(() => {
ConditionExpression.fromObj({
- version: ConditionExpression.VERSION,
+ version: ConditionExpression.version,
condition: conditionObj,
});
}).toThrow(`Invalid conditionType: ${invalidConditionType}`);
},
);
- test('rejects a mismatched condition type', () => {
+ it('rejects a mismatched condition type', () => {
const conditionObj = {
...testTimeConditionObj,
conditionType: RpcConditionType,
} as unknown as TimeConditionProps;
expect(() => {
ConditionExpression.fromObj({
- version: ConditionExpression.VERSION,
+ version: ConditionExpression.version,
condition: conditionObj,
});
}).toThrow(/^Invalid condition/);
});
- test('erc721 condition serialization', () => {
- const conditionExpr = new ConditionExpression(erc721BalanceCondition);
+ it('erc721 condition serialization', () => {
+ const conditionExpr = new ConditionExpression(erc721Balance);
- const erc721BalanceConditionObj = erc721BalanceCondition.toObj();
+ const asObj = erc721Balance.toObj();
const conditionExprJson = conditionExpr.toJson();
expect(conditionExprJson).toBeDefined();
expect(conditionExprJson).toContain('chain');
expect(conditionExprJson).toContain(TEST_CHAIN_ID.toString());
expect(conditionExprJson).toContain('contractAddress');
- expect(conditionExprJson).toContain(
- erc721BalanceConditionObj.contractAddress,
- );
+ expect(conditionExprJson).toContain(asObj.contractAddress);
expect(conditionExprJson).toContain('standardContractType');
expect(conditionExprJson).toContain('ERC721');
expect(conditionExprJson).toContain('method');
- expect(conditionExprJson).toContain(erc721BalanceConditionObj.method);
+ expect(conditionExprJson).toContain(asObj.method);
expect(conditionExprJson).toContain('returnValueTest');
expect(conditionExprJson).not.toContain('functionAbi');
@@ -285,7 +283,7 @@ test('condition set', () => {
expect(conditionExprFromJson.condition).toBeInstanceOf(ContractCondition);
});
- test('contract condition no abi serialization', () => {
+ it('contract condition no abi serialization', () => {
const conditionExpr = new ConditionExpression(contractConditionNoAbi);
const conditionExprJson = conditionExpr.toJson();
@@ -317,7 +315,7 @@ test('condition set', () => {
expect(conditionExprFromJson.condition).toBeInstanceOf(ContractCondition);
});
- test('contract condition with abi serialization', () => {
+ it('contract condition with abi serialization', () => {
const conditionExpr = new ConditionExpression(contractConditionWithAbi);
const conditionExprJson = conditionExpr.toJson();
@@ -350,7 +348,7 @@ test('condition set', () => {
expect(conditionExprFromJson.condition).toBeInstanceOf(ContractCondition);
});
- test('time condition serialization', () => {
+ it('time condition serialization', () => {
const conditionExpr = new ConditionExpression(timeCondition);
const conditionExprJson = conditionExpr.toJson();
@@ -373,7 +371,7 @@ test('condition set', () => {
expect(conditionExprFromJson.condition).toBeInstanceOf(TimeCondition);
});
- test('rpc condition serialization', () => {
+ it('rpc condition serialization', () => {
const conditionExpr = new ConditionExpression(rpcCondition);
const conditionExprJson = conditionExpr.toJson();
@@ -397,7 +395,7 @@ test('condition set', () => {
expect(conditionExprFromJson.condition).toBeInstanceOf(RpcCondition);
});
- test('compound condition serialization', () => {
+ it('compound condition serialization', () => {
const conditionExpr = new ConditionExpression(compoundCondition);
const compoundConditionObj = compoundCondition.toObj();
diff --git a/packages/shared/test/unit/conditions/context.test.ts b/packages/taco/test/conditions/context.test.ts
similarity index 83%
rename from packages/shared/test/unit/conditions/context.test.ts
rename to packages/taco/test/conditions/context.test.ts
index 8ff23e591..de035f61f 100644
--- a/packages/shared/test/unit/conditions/context.test.ts
+++ b/packages/taco/test/conditions/context.test.ts
@@ -1,25 +1,24 @@
-import {
- fakeProvider,
- fakeSigner,
- testContractConditionObj,
- testFunctionAbi,
- testReturnValueTest,
- testRpcConditionObj,
-} from '@nucypher/test-utils';
+import { initialize } from '@nucypher/nucypher-core';
+import { fakeProvider, fakeSigner } from '@nucypher/test-utils';
import { ethers } from 'ethers';
-import { beforeAll, expect, test } from 'vitest';
+import { beforeAll, describe, expect, it } from 'vitest';
import {
ConditionExpression,
ContractCondition,
CustomContextParam,
- initialize,
RpcCondition,
-} from '../../../src';
-import { USER_ADDRESS_PARAM } from '../../../src/conditions/const';
-import { RESERVED_CONTEXT_PARAMS } from '../../../src/conditions/context/context';
+} from '../../src/conditions';
+import { USER_ADDRESS_PARAM } from '../../src/conditions/const';
+import { RESERVED_CONTEXT_PARAMS } from '../../src/conditions/context/context';
+import {
+ testContractConditionObj,
+ testFunctionAbi,
+ testReturnValueTest,
+ testRpcConditionObj,
+} from '../test-utils';
-test('context', () => {
+describe('context', () => {
let provider: ethers.providers.Provider;
let signer: ethers.Signer;
@@ -29,8 +28,8 @@ test('context', () => {
signer = fakeSigner();
});
- test('serialization', () => {
- test('serializes to json', async () => {
+ describe('serialization', () => {
+ it('serializes to json', async () => {
const rpcCondition = new RpcCondition({
...testRpcConditionObj,
parameters: [USER_ADDRESS_PARAM],
@@ -44,12 +43,13 @@ test('context', () => {
rpcCondition,
).buildContext(provider, {}, signer);
const asJson = await conditionContext.toJson();
+
expect(asJson).toBeDefined();
expect(asJson).toContain(USER_ADDRESS_PARAM);
});
});
- test('context parameters', () => {
+ describe('context parameters', () => {
const customParamKey = ':customParam';
const customParams: Record = {};
customParams[customParamKey] = 1234;
@@ -65,8 +65,8 @@ test('context', () => {
const conditionExpr = new ConditionExpression(contractCondition);
const conditionContext = conditionExpr.buildContext(provider, {}, signer);
- test('return value test', () => {
- test('accepts on a custom context parameters', async () => {
+ describe('return value test', () => {
+ it('accepts on a custom context parameters', async () => {
const asObj = await conditionContext
.withCustomParams(customParams)
.toObj();
@@ -74,14 +74,14 @@ test('context', () => {
expect(asObj[customParamKey]).toEqual(1234);
});
- test('rejects on a missing custom context parameter', async () => {
+ it('rejects on a missing custom context parameter', async () => {
await expect(conditionContext.toObj()).rejects.toThrow(
`Missing custom context parameter(s): ${customParamKey}`,
);
});
});
- test('rejects on using reserved context parameter', () => {
+ it('rejects on using reserved context parameter', () => {
const badCustomParams: Record = {};
RESERVED_CONTEXT_PARAMS.forEach((reservedParam) => {
badCustomParams[reservedParam] = 'this-will-throw';
@@ -93,7 +93,7 @@ test('context', () => {
});
});
- test('detects if a signer is required', () => {
+ it('detects if a signer is required', () => {
const conditionObj = {
...testContractConditionObj,
returnValueTest: {
@@ -110,7 +110,7 @@ test('context', () => {
);
});
- test('detects if a signer is not required', () => {
+ it('detects if a signer is not required', () => {
const condition = new RpcCondition(testRpcConditionObj);
const conditionExpr = new ConditionExpression(condition);
expect(
@@ -121,7 +121,7 @@ test('context', () => {
expect(conditionExpr.buildContext(provider, {})).toBeDefined();
});
- test('rejects on a missing signer', () => {
+ it('rejects on a missing signer', () => {
const conditionObj = {
...testContractConditionObj,
returnValueTest: {
@@ -137,7 +137,7 @@ test('context', () => {
);
});
- test('rejects on a missing signer', () => {
+ it('rejects on a missing signer', () => {
const conditionObj = {
...testContractConditionObj,
returnValueTest: {
@@ -153,7 +153,7 @@ test('context', () => {
);
});
- test('custom method parameters', () => {
+ describe('custom method parameters', () => {
const contractConditionObj = {
...testContractConditionObj,
standardContractType: undefined, // We're going to use a custom function ABI
@@ -165,7 +165,7 @@ test('context', () => {
},
};
- test('rejects on a missing parameter ', async () => {
+ it('rejects on a missing parameter ', async () => {
const customContractCondition = new ContractCondition({
...contractConditionObj,
parameters: [USER_ADDRESS_PARAM, customParamKey],
@@ -179,7 +179,7 @@ test('context', () => {
);
});
- test('accepts on a hard-coded parameter', async () => {
+ it('accepts on a hard-coded parameter', async () => {
const customContractCondition = new ContractCondition({
...contractConditionObj,
parameters: [USER_ADDRESS_PARAM, 100],
diff --git a/packages/taco/test/dkg-client.test.ts b/packages/taco/test/dkg-client.test.ts
new file mode 100644
index 000000000..ca1ac544b
--- /dev/null
+++ b/packages/taco/test/dkg-client.test.ts
@@ -0,0 +1,50 @@
+import { DkgCoordinatorAgent } from '@nucypher/shared';
+import { fakeProvider } from '@nucypher/test-utils';
+import { beforeAll, describe, expect, it } from 'vitest';
+
+import { initialize } from '../src';
+
+import {
+ fakeRitualId,
+ mockDkgParticipants,
+ mockGetParticipants,
+ mockGetRitual,
+} from './test-utils';
+
+describe('DkgCoordinatorAgent', () => {
+ beforeAll(async () => {
+ await initialize();
+ });
+
+ it('fetches transcripts from the coordinator', async () => {
+ const provider = fakeProvider();
+ const getRitualSpy = mockGetRitual();
+ const ritual = await DkgCoordinatorAgent.getRitual(provider, fakeRitualId);
+ expect(ritual).toBeDefined();
+ expect(getRitualSpy).toHaveBeenCalled();
+ });
+
+ it('fetches participants from the coordinator', async () => {
+ const provider = fakeProvider();
+ const getParticipantsSpy = mockGetParticipants(
+ (await mockDkgParticipants(fakeRitualId)).participants,
+ );
+ const participants = await DkgCoordinatorAgent.getParticipants(
+ provider,
+ fakeRitualId,
+ );
+ expect(getParticipantsSpy).toHaveBeenCalled();
+ expect(participants.length).toBeGreaterThan(0);
+ });
+});
+
+// TODO: Fix this test after the DkgClient.verifyRitual() method is implemented
+// describe('DkgClient', () => {
+// it('verifies the dkg ritual', async () => {
+// const provider = fakeWeb3Provider(SecretKey.random().toBEBytes());
+//
+// const dkgClient = new DkgClient(provider);
+// const isValid = await dkgClient.verifyRitual(fakeRitualId);
+// expect(isValid).toBeTruthy();
+// });
+// });
diff --git a/packages/shared/test/unit/ritual.test.ts b/packages/taco/test/ritual.test.ts
similarity index 67%
rename from packages/shared/test/unit/ritual.test.ts
rename to packages/taco/test/ritual.test.ts
index d4645920a..32308b270 100644
--- a/packages/shared/test/unit/ritual.test.ts
+++ b/packages/taco/test/ritual.test.ts
@@ -1,10 +1,13 @@
import { DkgPublicKey } from '@nucypher/nucypher-core';
-import { expect, test } from 'vitest';
+import { fromHexString, initialize } from '@nucypher/shared';
+import { beforeAll, describe, expect, it } from 'vitest';
-import { fromHexString } from '../../src';
+describe('Ritual', () => {
+ beforeAll(async () => {
+ await initialize();
+ });
-test('Ritual', () => {
- test('deserializes pre-made dkg ritual', async () => {
+ it('deserializes pre-made dkg ritual', async () => {
const pkWord1 = fromHexString(
'9045795411ed251bf2eecc9415552c41863502a207104ef7ab482bc2364729d9',
);
diff --git a/packages/taco/test/taco.test.ts b/packages/taco/test/taco.test.ts
index 1309d6c10..6a62e1fdd 100644
--- a/packages/taco/test/taco.test.ts
+++ b/packages/taco/test/taco.test.ts
@@ -1,58 +1,57 @@
import {
FerveoVariant,
initialize,
- SecretKey,
SessionStaticSecret,
} from '@nucypher/nucypher-core';
-import { predefined, toBytes } from '@nucypher/shared';
import {
aliceSecretKeyBytes,
fakeDkgFlow,
- fakeDkgRitual,
fakePorterUri,
fakeProvider,
fakeSigner,
fakeTDecFlow,
mockCbdDecrypt,
- mockDkgParticipants,
- mockGetFinalizedRitualSpy,
- mockGetParticipants,
mockGetRitualIdFromPublicKey,
- mockRandomSessionStaticSecret,
} from '@nucypher/test-utils';
-import { beforeAll, expect, test } from 'vitest';
+import { beforeAll, describe, expect, it } from 'vitest';
import * as taco from '../src';
+import { conditions, toBytes } from '../src';
+
+import {
+ fakeDkgRitual,
+ mockDkgParticipants,
+ mockGetFinalizedRitual,
+ mockGetParticipants,
+ mockMakeSessionKey,
+} from './test-utils';
// Shared test variables
-let aliceSecretKey: SecretKey;
-let variant: FerveoVariant;
const message = 'this is a secret';
-const ownsNFT = new predefined.ERC721Ownership({
+const ownsNFT = new conditions.ERC721Ownership({
contractAddress: '0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77',
parameters: [3591],
chain: 5,
});
-test('taco', () => {
+describe('taco', () => {
beforeAll(async () => {
await initialize();
- aliceSecretKey = SecretKey.fromBEBytes(aliceSecretKeyBytes);
- variant = FerveoVariant.precomputed;
});
- test('encrypts and decrypts', async () => {
- const mockedDkg = fakeDkgFlow(variant, 0, 4, 4);
+ it('encrypts and decrypts', async () => {
+ const mockedDkg = fakeDkgFlow(FerveoVariant.precomputed, 0, 4, 4);
const mockedDkgRitual = fakeDkgRitual(mockedDkg);
- const provider = fakeProvider(aliceSecretKey.toBEBytes());
- const signer = fakeSigner(aliceSecretKey.toBEBytes());
- const getFinalizedRitualSpy = mockGetFinalizedRitualSpy(mockedDkgRitual);
+ const provider = fakeProvider(aliceSecretKeyBytes);
+ const signer = fakeSigner(aliceSecretKeyBytes);
+ const getFinalizedRitualSpy = mockGetFinalizedRitual(mockedDkgRitual);
const messageKit = await taco.encrypt(
provider,
message,
ownsNFT,
mockedDkg.ritualId,
+ signer,
);
expect(getFinalizedRitualSpy).toHaveBeenCalled();
@@ -62,7 +61,7 @@ test('taco', () => {
dkgPublicKey: mockedDkg.dkg.publicKey(),
thresholdMessageKit: messageKit,
});
- const { participantSecrets, participants } = mockDkgParticipants(
+ const { participantSecrets, participants } = await mockDkgParticipants(
mockedDkg.ritualId,
);
const requesterSessionKey = SessionStaticSecret.random();
@@ -73,11 +72,11 @@ test('taco', () => {
requesterSessionKey.publicKey(),
);
const getParticipantsSpy = mockGetParticipants(participants);
- const sessionKeySpy = mockRandomSessionStaticSecret(requesterSessionKey);
+ const sessionKeySpy = mockMakeSessionKey(requesterSessionKey);
const getRitualIdFromPublicKey = mockGetRitualIdFromPublicKey(
mockedDkg.ritualId,
);
- const getRitualSpy = mockGetFinalizedRitualSpy(mockedDkgRitual);
+ const getRitualSpy = mockGetFinalizedRitual(mockedDkgRitual);
const decryptedMessage = await taco.decrypt(
provider,
diff --git a/packages/taco/test/test-utils.ts b/packages/taco/test/test-utils.ts
new file mode 100644
index 000000000..3ae882033
--- /dev/null
+++ b/packages/taco/test/test-utils.ts
@@ -0,0 +1,285 @@
+// Disabling some of the eslint rules for convenience.
+/* eslint-disable @typescript-eslint/no-non-null-assertion */
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+
+import {
+ AggregatedTranscript,
+ DecryptionShareSimple,
+ Dkg,
+ FerveoVariant,
+ Keypair,
+ SessionSecretFactory,
+ SessionStaticSecret,
+ ThresholdMessageKit,
+ Transcript,
+ Validator,
+ ValidatorMessage,
+} from '@nucypher/nucypher-core';
+import {
+ CoordinatorRitual,
+ DkgCoordinatorAgent,
+ DkgParticipant,
+ DkgRitualState,
+ toBytes,
+ toHexString,
+ zip,
+} from '@nucypher/shared';
+import {
+ fakeDkgFlow,
+ fakeSigner,
+ fakeTDecFlow,
+ TEST_CHAIN_ID,
+ TEST_CONTRACT_ADDR,
+} from '@nucypher/test-utils';
+import { ethers } from 'ethers';
+import { keccak256 } from 'ethers/lib/utils';
+import { SpyInstance, vi } from 'vitest';
+
+import {
+ ConditionExpression,
+ ContractConditionProps,
+ ContractConditionType,
+ ERC721Balance,
+ FunctionAbiProps,
+ ReturnValueTestProps,
+ RpcConditionProps,
+ RpcConditionType,
+ TimeConditionMethod,
+ TimeConditionProps,
+ TimeConditionType,
+} from '../src/conditions';
+import { DkgClient, DkgRitual } from '../src/dkg';
+import { encryptMessage } from '../src/tdec';
+
+export const fakeDkgTDecFlowE2E: (
+ ritualId?: number,
+ variant?: FerveoVariant,
+ conditionExpr?: ConditionExpression,
+ message?: Uint8Array,
+ sharesNum?: number,
+ threshold?: number,
+) => Promise<{
+ dkg: Dkg;
+ serverAggregate: AggregatedTranscript;
+ sharesNum: number;
+ transcripts: Transcript[];
+ validatorKeypairs: Keypair[];
+ validators: Validator[];
+ ritualId: number;
+ threshold: number;
+ receivedMessages: ValidatorMessage[];
+ message: Uint8Array;
+ thresholdMessageKit: ThresholdMessageKit;
+ decryptionShares: DecryptionShareSimple[];
+}> = async (
+ ritualId = 0,
+ variant: FerveoVariant = FerveoVariant.precomputed,
+ conditionExpr: ConditionExpression = fakeConditionExpr(),
+ message = toBytes('fake-message'),
+ sharesNum = 4,
+ threshold = 4,
+) => {
+ const ritual = fakeDkgFlow(variant, ritualId, sharesNum, threshold);
+ const dkgPublicKey = ritual.dkg.publicKey();
+ const thresholdMessageKit = await encryptMessage(
+ message,
+ dkgPublicKey,
+ conditionExpr,
+ fakeSigner(),
+ );
+
+ const { decryptionShares } = fakeTDecFlow({
+ ...ritual,
+ message,
+ dkgPublicKey,
+ thresholdMessageKit,
+ });
+
+ return {
+ ...ritual,
+ message,
+ decryptionShares,
+ thresholdMessageKit,
+ };
+};
+
+export const fakeCoordinatorRitual = async (
+ ritualId: number,
+): Promise => {
+ const ritual = await fakeDkgTDecFlowE2E();
+ const dkgPkBytes = ritual.dkg.publicKey().toBytes();
+ return {
+ id: ritualId,
+ initiator: ritual.validators[0].address.toString(),
+ dkgSize: ritual.sharesNum,
+ initTimestamp: 0,
+ totalTranscripts: ritual.receivedMessages.length,
+ totalAggregations: ritual.sharesNum, // Assuming the ritual is finished
+ aggregatedTranscriptHash: keccak256(ritual.serverAggregate.toBytes()),
+ aggregationMismatch: false, // Assuming the ritual is correct
+ aggregatedTranscript: toHexString(ritual.serverAggregate.toBytes()),
+ publicKey: {
+ word0: toHexString(dkgPkBytes.slice(0, 32)),
+ word1: toHexString(dkgPkBytes.slice(32, 48)),
+ },
+ publicKeyHash: keccak256(ritual.dkg.publicKey().toBytes()),
+ };
+};
+
+export const mockDkgParticipants = async (
+ ritualId: number,
+): Promise<{
+ participants: DkgParticipant[];
+ participantSecrets: Record;
+}> => {
+ const ritual = await fakeDkgTDecFlowE2E(ritualId);
+ const label = toBytes(`${ritualId}`);
+
+ const participantSecrets: Record =
+ Object.fromEntries(
+ ritual.validators.map(({ address }) => {
+ const participantSecret = SessionSecretFactory.random().makeKey(label);
+ return [address.toString(), participantSecret];
+ }),
+ );
+
+ const participants: DkgParticipant[] = zip(
+ Object.entries(participantSecrets),
+ ritual.transcripts,
+ ).map(([[address, secret], transcript]) => {
+ return {
+ provider: address,
+ aggregated: true, // Assuming all validators already contributed to the aggregate
+ transcript,
+ decryptionRequestStaticKey: secret.publicKey(),
+ } as DkgParticipant;
+ });
+ return { participantSecrets, participants };
+};
+
+export const fakeRitualId = 0;
+
+export const fakeDkgRitual = (ritual: {
+ dkg: Dkg;
+ sharesNum: number;
+ threshold: number;
+}) => {
+ return new DkgRitual(
+ fakeRitualId,
+ ritual.dkg.publicKey(),
+ ritual.sharesNum,
+ ritual.threshold,
+ DkgRitualState.FINALIZED,
+ );
+};
+
+export const mockGetRitual = (): SpyInstance => {
+ return vi
+ .spyOn(DkgCoordinatorAgent, 'getRitual')
+ .mockImplementation(
+ (_provider: ethers.providers.Provider, _ritualId: number) => {
+ return Promise.resolve(fakeCoordinatorRitual(fakeRitualId));
+ },
+ );
+};
+
+export const mockGetFinalizedRitual = (dkgRitual: DkgRitual): SpyInstance => {
+ return vi.spyOn(DkgClient, 'getFinalizedRitual').mockImplementation(() => {
+ return Promise.resolve(dkgRitual);
+ });
+};
+
+export const mockIsEncryptionAuthorized = (
+ isAuthorized = true,
+): SpyInstance => {
+ return vi
+ .spyOn(DkgCoordinatorAgent, 'isEncryptionAuthorized')
+ .mockImplementation(async () => {
+ return Promise.resolve(isAuthorized);
+ });
+};
+
+export const mockMakeSessionKey = (secret: SessionStaticSecret) => {
+ return vi
+ .spyOn(SessionStaticSecret, 'random')
+ .mockImplementation(() => secret);
+};
+
+export const testReturnValueTest: ReturnValueTestProps = {
+ index: 0,
+ comparator: '>',
+ value: '100',
+};
+
+export const testTimeConditionObj: TimeConditionProps = {
+ conditionType: TimeConditionType,
+ returnValueTest: {
+ index: 0,
+ comparator: '>',
+ value: '100',
+ },
+ method: TimeConditionMethod,
+ chain: 5,
+};
+
+export const testRpcConditionObj: RpcConditionProps = {
+ conditionType: RpcConditionType,
+ chain: TEST_CHAIN_ID,
+ method: 'eth_getBalance',
+ parameters: ['0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77', 'latest'],
+ returnValueTest: testReturnValueTest,
+};
+
+export const testContractConditionObj: ContractConditionProps = {
+ conditionType: ContractConditionType,
+ contractAddress: '0x0000000000000000000000000000000000000000',
+ chain: 5,
+ standardContractType: 'ERC20',
+ method: 'balanceOf',
+ parameters: ['0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77'],
+ returnValueTest: testReturnValueTest,
+};
+
+export const testFunctionAbi: FunctionAbiProps = {
+ name: 'myFunction',
+ type: 'function',
+ stateMutability: 'view',
+ inputs: [
+ {
+ internalType: 'address',
+ name: 'account',
+ type: 'address',
+ },
+ {
+ internalType: 'uint256',
+ name: 'myCustomParam',
+ type: 'uint256',
+ },
+ ],
+ outputs: [
+ {
+ internalType: 'uint256',
+ name: 'someValue',
+ type: 'uint256',
+ },
+ ],
+};
+
+export const fakeConditionExpr = () => {
+ const condition = new ERC721Balance({
+ chain: TEST_CHAIN_ID,
+ contractAddress: TEST_CONTRACT_ADDR,
+ });
+ return new ConditionExpression(condition);
+};
+
+export const mockGetParticipants = (
+ participants: DkgParticipant[],
+): SpyInstance => {
+ return vi
+ .spyOn(DkgCoordinatorAgent, 'getParticipants')
+ .mockImplementation(() => {
+ return Promise.resolve(participants);
+ });
+};
diff --git a/packages/taco/tsconfig.cjs.json b/packages/taco/tsconfig.cjs.json
new file mode 100644
index 000000000..035a2ab62
--- /dev/null
+++ b/packages/taco/tsconfig.cjs.json
@@ -0,0 +1,7 @@
+{
+ "extends": "./tsconfig.es.json",
+ "compilerOptions": {
+ "outDir": "dist/cjs",
+ "module": "CommonJS",
+ }
+}
diff --git a/packages/taco/tsconfig.es.json b/packages/taco/tsconfig.es.json
new file mode 100644
index 000000000..2ffa9192c
--- /dev/null
+++ b/packages/taco/tsconfig.es.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "outDir": "dist/es",
+ "rootDir": "src",
+ "module": "ES2022",
+ "target": "ES2022"
+ }
+}
diff --git a/packages/taco/tsconfig.json b/packages/taco/tsconfig.json
index 4448fdf2c..aacfbec2c 100644
--- a/packages/taco/tsconfig.json
+++ b/packages/taco/tsconfig.json
@@ -5,4 +5,9 @@
"esModuleInterop": true,
"skipLibCheck": true,
},
+ "references": [
+ {
+ "path": "../shared/tsconfig.es.json"
+ }
+ ]
}
diff --git a/packages/taco/typedoc.json b/packages/taco/typedoc.json
index 5ec0fcc63..f031a066d 100644
--- a/packages/taco/typedoc.json
+++ b/packages/taco/typedoc.json
@@ -1,6 +1,6 @@
{
"extends": ["../../typedoc.base.json"],
"entryPoints": ["src/index.ts"],
- "tsconfig": "tsconfig.build.json",
+ "tsconfig": "tsconfig.es.json",
"name": "@nucypher/taco"
}
diff --git a/packages/test-utils/package.json b/packages/test-utils/package.json
index c2ed6f69f..b4e16a5b1 100644
--- a/packages/test-utils/package.json
+++ b/packages/test-utils/package.json
@@ -10,39 +10,33 @@
"author": "Piotr Roslaniec ",
"exports": {
".": {
- "import": "./dist/index.js",
- "require": "./dist/index.js"
+ "import": "./dist/es/index.js",
+ "require": "./dist/cjs/index.js"
}
},
- "main": "./dist/index.js",
- "module": "./dist/index.js",
- "types": "./dist/index.d.ts",
+ "main": "./dist/cjs/index.js",
+ "module": "./dist/es/index.js",
+ "types": "./dist/cjs/index.d.ts",
"files": [
- "dist/**/*"
+ "dist"
],
"scripts": {
- "build": "tsc --build ./tsconfig.build.json --verbose",
+ "build": "pnpm build:module && pnpm build:cjs",
+ "build:cjs": "tsc --build ./tsconfig.cjs.json --verbose",
+ "build:module": "tsc --build ./tsconfig.es.json --verbose",
"exports:lint": "ts-unused-exports tsconfig.json --ignoreFiles src/index.ts",
"lint": "eslint --ext .ts src",
"lint:fix": "pnpm lint --fix"
},
"dependencies": {
- "@nucypher/nucypher-core": "0.13.0-alpha.0",
+ "@nucypher/nucypher-core": "0.13.0-alpha.1",
"@nucypher/shared": "workspace:*",
"axios": "^1.5.0",
- "ethers": "^5.7.2"
- },
- "devDependencies": {
- "@typechain/ethers-v5": "^11.1.1",
- "@types/deep-equal": "^1.0.1",
- "@types/qs": "^6.9.7",
- "@types/semver": "^7.5.0",
- "cz-conventional-changelog": "^3.0.1",
- "standard-version": "^9.0.0",
- "typechain": "^8.3.1"
+ "ethers": "^5.7.2",
+ "vitest": "^0.34.4"
},
"engines": {
- "node": ">=16",
+ "node": ">=18",
"pnpm": ">=8.0.0"
}
}
diff --git a/packages/test-utils/src/utils.ts b/packages/test-utils/src/utils.ts
index 7c23c0178..91c3df776 100644
--- a/packages/test-utils/src/utils.ts
+++ b/packages/test-utils/src/utils.ts
@@ -2,6 +2,7 @@
/* eslint-disable @typescript-eslint/no-non-null-assertion */
/* eslint-disable @typescript-eslint/no-explicit-any */
/* eslint-disable @typescript-eslint/no-unused-vars */
+
import {
AggregatedTranscript,
Capsule,
@@ -12,14 +13,12 @@ import {
Dkg,
DkgPublicKey,
EncryptedThresholdDecryptionResponse,
- EncryptedTreasureMap,
EthereumAddress,
FerveoVariant,
Keypair,
- PublicKey,
+ MessageKit,
reencrypt,
SecretKey,
- SessionSecretFactory,
SessionStaticKey,
SessionStaticSecret,
ThresholdDecryptionResponse,
@@ -27,42 +26,23 @@ import {
Transcript,
Validator,
ValidatorMessage,
- VerifiedCapsuleFrag,
VerifiedKeyFrag,
} from '@nucypher/nucypher-core';
import {
- Alice,
- BlockchainPolicy,
- Bob,
CbdDecryptResult,
ChecksumAddress,
- Cohort,
- ConditionExpression,
- DkgClient,
DkgCoordinatorAgent,
- DkgParticipant,
- DkgRitual,
- DkgRitualState,
- Enrico,
- ERC721Balance,
GetUrsulasResult,
PorterClient,
- PreEnactedPolicy,
- RemoteBob,
RetrieveCFragsResult,
- ThresholdDecrypter,
- toBytes,
toHexString,
Ursula,
zip,
} from '@nucypher/shared';
import axios from 'axios';
import { ethers, providers, Wallet } from 'ethers';
-import { keccak256 } from 'ethers/lib/utils';
import { expect, SpyInstance, vi } from 'vitest';
-import { TEST_CHAIN_ID, TEST_CONTRACT_ADDR } from './variables';
-
export const bytesEqual = (first: Uint8Array, second: Uint8Array): boolean =>
first.length === second.length &&
first.every((value, index) => value === second[index]);
@@ -72,23 +52,6 @@ export const fromBytes = (bytes: Uint8Array): string =>
export const fakePorterUri = 'https://_this_should_crash.com/';
-export const fakeBob = (): Bob => {
- const secretKey = SecretKey.fromBEBytes(
- toBytes('fake-secret-key-32-bytes-bob-xxx'),
- );
- return Bob.fromSecretKey(secretKey);
-};
-
-export const fakeRemoteBob = (): RemoteBob => {
- const { decryptingKey, verifyingKey } = fakeBob();
- return RemoteBob.fromKeys(decryptingKey, verifyingKey);
-};
-
-export const fakeAlice = (aliceKey = 'fake-secret-key-32-bytes-alice-x') => {
- const secretKey = SecretKey.fromBEBytes(toBytes(aliceKey));
- return Alice.fromSecretKey(secretKey);
-};
-
const makeFakeProvider = (timestamp: number, blockNumber: number) => {
const block = { timestamp };
return {
@@ -134,8 +97,10 @@ export const fakeProvider = (
const genChecksumAddress = (i: number) =>
'0x' + '0'.repeat(40 - i.toString(16).length) + i.toString(16);
+
const genEthAddr = (i: number) =>
EthereumAddress.fromString(genChecksumAddress(i));
+
export const fakeUrsulas = (n = 4): Ursula[] =>
// 0...n-1
Array.from(Array(n).keys()).map((i: number) => ({
@@ -144,9 +109,7 @@ export const fakeUrsulas = (n = 4): Ursula[] =>
uri: `https://example.${i}.com:9151`,
}));
-export const mockGetUrsulas = (
- ursulas: Ursula[] = fakeUrsulas(),
-): SpyInstance => {
+export const mockGetUrsulas = (ursulas: Ursula[] = fakeUrsulas()) => {
const fakePorterUrsulas = (
mockUrsulas: readonly Ursula[],
): GetUrsulasResult => {
@@ -166,12 +129,6 @@ export const mockGetUrsulas = (
return Promise.resolve({ data: fakePorterUrsulas(ursulas) });
});
};
-export const mockPublishToBlockchain = (): SpyInstance => {
- const txHash = '0x1234567890123456789012345678901234567890';
- return vi
- .spyOn(PreEnactedPolicy.prototype as any, 'publish')
- .mockImplementation(async () => Promise.resolve(txHash));
-};
const fakeCFragResponse = (
ursulas: readonly ChecksumAddress[],
@@ -197,43 +154,6 @@ export const mockRetrieveCFragsRequest = (
return Promise.resolve(results);
});
};
-export const mockGenerateKFrags = (withValue?: {
- delegatingKey: PublicKey;
- verifiedKFrags: VerifiedKeyFrag[];
-}): SpyInstance => {
- const spy = vi.spyOn(Alice.prototype as any, 'generateKFrags');
- if (withValue) {
- return spy.mockImplementation(() => withValue);
- }
- return spy;
-};
-
-export const mockEncryptTreasureMap = (
- withValue?: EncryptedTreasureMap,
-): SpyInstance => {
- const spy = vi.spyOn(BlockchainPolicy.prototype as any, 'encryptTreasureMap');
- if (withValue) {
- return spy.mockImplementation(() => withValue);
- }
- return spy;
-};
-
-export const reencryptKFrags = (
- kFrags: readonly VerifiedKeyFrag[],
- capsule: Capsule,
-): {
- verifiedCFrags: VerifiedCapsuleFrag[];
-} => {
- if (!kFrags) {
- throw new Error('Pass at least one kFrag.');
- }
- const verifiedCFrags = kFrags.map((kFrag) => reencrypt(capsule, kFrag));
- return { verifiedCFrags };
-};
-
-export const mockMakeTreasureMap = (): SpyInstance => {
- return vi.spyOn(BlockchainPolicy.prototype as any, 'makeTreasureMap');
-};
export const mockDetectEthereumProvider =
(): (() => providers.ExternalProvider) => {
@@ -361,140 +281,6 @@ export const fakeTDecFlow = ({
};
};
-const fakeConditionExpr = () => {
- const erc721Balance = new ERC721Balance({
- chain: TEST_CHAIN_ID,
- contractAddress: TEST_CONTRACT_ADDR,
- });
- return new ConditionExpression(erc721Balance);
-};
-
-export const fakeDkgTDecFlowE2E: (
- ritualId?: number,
- variant?: FerveoVariant,
- conditionExpr?: ConditionExpression,
- message?: Uint8Array,
- sharesNum?: number,
- threshold?: number,
-) => {
- dkg: Dkg;
- serverAggregate: AggregatedTranscript;
- sharesNum: number;
- transcripts: Transcript[];
- validatorKeypairs: Keypair[];
- validators: Validator[];
- ritualId: number;
- threshold: number;
- receivedMessages: ValidatorMessage[];
- message: Uint8Array;
- thresholdMessageKit: ThresholdMessageKit;
- decryptionShares: DecryptionShareSimple[];
-} = (
- ritualId = 0,
- variant: FerveoVariant = FerveoVariant.precomputed,
- conditionExpr: ConditionExpression = fakeConditionExpr(),
- message = toBytes('fake-message'),
- sharesNum = 4,
- threshold = 4,
-) => {
- const ritual = fakeDkgFlow(variant, ritualId, sharesNum, threshold);
- const dkgPublicKey = ritual.dkg.publicKey();
- const thresholdMessageKit = new Enrico(dkgPublicKey).encryptMessageCbd(
- message,
- conditionExpr,
- );
-
- const { decryptionShares } = fakeTDecFlow({
- ...ritual,
- message,
- dkgPublicKey,
- thresholdMessageKit,
- });
-
- return {
- ...ritual,
- message,
- decryptionShares,
- thresholdMessageKit,
- };
-};
-
-export const mockCoordinatorRitual = async (
- ritualId: number,
-): Promise<{
- aggregationMismatch: boolean;
- initTimestamp: number;
- aggregatedTranscriptHash: string;
- initiator: string;
- dkgSize: number;
- id: number;
- publicKey: { word1: string; word0: string };
- totalTranscripts: number;
- aggregatedTranscript: string;
- publicKeyHash: string;
- totalAggregations: number;
-}> => {
- const ritual = await fakeDkgTDecFlowE2E();
- const dkgPkBytes = ritual.dkg.publicKey().toBytes();
- return {
- id: ritualId,
- initiator: ritual.validators[0].address.toString(),
- dkgSize: ritual.sharesNum,
- initTimestamp: 0,
- totalTranscripts: ritual.receivedMessages.length,
- totalAggregations: ritual.sharesNum, // Assuming the ritual is finished
- aggregatedTranscriptHash: keccak256(ritual.serverAggregate.toBytes()),
- aggregationMismatch: false, // Assuming the ritual is correct
- aggregatedTranscript: toHexString(ritual.serverAggregate.toBytes()),
- publicKey: {
- word0: toHexString(dkgPkBytes.slice(0, 32)),
- word1: toHexString(dkgPkBytes.slice(32, 48)),
- },
- publicKeyHash: keccak256(ritual.dkg.publicKey().toBytes()),
- };
-};
-
-export const mockDkgParticipants = (
- ritualId: number,
-): {
- participants: DkgParticipant[];
- participantSecrets: Record;
-} => {
- const ritual = fakeDkgTDecFlowE2E(ritualId);
- const label = toBytes(`${ritualId}`);
-
- const participantSecrets: Record =
- Object.fromEntries(
- ritual.validators.map(({ address }) => {
- const participantSecret = SessionSecretFactory.random().makeKey(label);
- return [address.toString(), participantSecret];
- }),
- );
-
- const participants: DkgParticipant[] = zip(
- Object.entries(participantSecrets),
- ritual.transcripts,
- ).map(([[address, secret], transcript]) => {
- return {
- provider: address,
- aggregated: true, // Assuming all validators already contributed to the aggregate
- transcript,
- decryptionRequestStaticKey: secret.publicKey(),
- } as DkgParticipant;
- });
- return { participantSecrets, participants };
-};
-
-export const mockGetParticipants = (
- participants: DkgParticipant[],
-): SpyInstance => {
- return vi
- .spyOn(DkgCoordinatorAgent, 'getParticipants')
- .mockImplementation(() => {
- return Promise.resolve(participants);
- });
-};
-
export const mockCbdDecrypt = (
ritualId: number,
decryptionShares: (DecryptionSharePrecomputed | DecryptionShareSimple)[],
@@ -527,44 +313,6 @@ export const mockCbdDecrypt = (
});
};
-export const mockRandomSessionStaticSecret = (
- secret: SessionStaticSecret,
-): SpyInstance => {
- return vi
- .spyOn(ThresholdDecrypter.prototype as any, 'makeSessionKey')
- .mockImplementation(() => secret);
-};
-
-export const mockRitualId = 0;
-
-export const fakeDkgRitual = (ritual: {
- dkg: Dkg;
- sharesNum: number;
- threshold: number;
-}) => {
- return new DkgRitual(
- mockRitualId,
- ritual.dkg.publicKey(),
- ritual.sharesNum,
- ritual.threshold,
- DkgRitualState.FINALIZED,
- );
-};
-
-export const mockGetRitual = (dkgRitual: DkgRitual): SpyInstance => {
- return vi.spyOn(DkgClient, 'getRitual').mockImplementation(() => {
- return Promise.resolve(dkgRitual);
- });
-};
-
-export const mockGetFinalizedRitualSpy = (
- dkgRitual: DkgRitual,
-): SpyInstance => {
- return vi.spyOn(DkgClient, 'getFinalizedRitual').mockImplementation(() => {
- return Promise.resolve(dkgRitual);
- });
-};
-
export const mockGetRitualIdFromPublicKey = (ritualId: number): SpyInstance => {
return vi
.spyOn(DkgCoordinatorAgent, 'getRitualIdFromPublicKey')
@@ -573,11 +321,19 @@ export const mockGetRitualIdFromPublicKey = (ritualId: number): SpyInstance => {
});
};
-export const makeCohort = async (ursulas: Ursula[] = fakeUrsulas()) => {
- const getUrsulasSpy = mockGetUrsulas(ursulas);
- const porterUri = 'https://_this.should.crash';
- const numUrsulas = ursulas.length;
- const cohort = await Cohort.create(porterUri, numUrsulas);
- expect(getUrsulasSpy).toHaveBeenCalled();
- return cohort;
+export const mockRetrieveAndDecrypt = (
+ makeTreasureMapSpy: SpyInstance,
+ encryptedMessageKit: MessageKit,
+) => {
+ // Setup mocks for `retrieveAndDecrypt`
+ const ursulaAddresses = (
+ makeTreasureMapSpy.mock.calls[0][0] as readonly Ursula[]
+ ).map((u) => u.checksumAddress);
+ const verifiedKFrags = makeTreasureMapSpy.mock
+ .calls[0][1] as readonly VerifiedKeyFrag[];
+ return mockRetrieveCFragsRequest(
+ ursulaAddresses,
+ verifiedKFrags,
+ encryptedMessageKit.capsule,
+ );
};
diff --git a/packages/test-utils/src/variables.ts b/packages/test-utils/src/variables.ts
index 2c0c9984f..3019c09bc 100644
--- a/packages/test-utils/src/variables.ts
+++ b/packages/test-utils/src/variables.ts
@@ -1,15 +1,3 @@
-import {
- ContractConditionProps,
- ContractConditionType,
- FunctionAbiProps,
- ReturnValueTestProps,
- RpcConditionProps,
- RpcConditionType,
- TimeConditionMethod,
- TimeConditionProps,
- TimeConditionType,
-} from '@nucypher/shared';
-
export const aliceSecretKeyBytes = new Uint8Array([
55, 82, 190, 189, 203, 164, 60, 148, 36, 86, 46, 123, 63, 152, 215, 113, 174,
86, 244, 44, 23, 227, 197, 68, 5, 85, 116, 31, 208, 152, 88, 53,
@@ -24,63 +12,3 @@ export const TEST_CONTRACT_ADDR = '0x0000000000000000000000000000000000000001';
export const TEST_CONTRACT_ADDR_2 =
'0x0000000000000000000000000000000000000002';
export const TEST_CHAIN_ID = 5;
-
-export const testReturnValueTest: ReturnValueTestProps = {
- index: 0,
- comparator: '>',
- value: '100',
-};
-
-export const testTimeConditionObj: TimeConditionProps = {
- conditionType: TimeConditionType,
- returnValueTest: {
- index: 0,
- comparator: '>',
- value: '100',
- },
- method: TimeConditionMethod,
- chain: 5,
-};
-
-export const testRpcConditionObj: RpcConditionProps = {
- conditionType: RpcConditionType,
- chain: TEST_CHAIN_ID,
- method: 'eth_getBalance',
- parameters: ['0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77'],
- returnValueTest: testReturnValueTest,
-};
-
-export const testContractConditionObj: ContractConditionProps = {
- conditionType: ContractConditionType,
- contractAddress: '0x0000000000000000000000000000000000000000',
- chain: 5,
- standardContractType: 'ERC20',
- method: 'balanceOf',
- parameters: ['0x1e988ba4692e52Bc50b375bcC8585b95c48AaD77'],
- returnValueTest: testReturnValueTest,
-};
-
-export const testFunctionAbi: FunctionAbiProps = {
- name: 'myFunction',
- type: 'function',
- stateMutability: 'view',
- inputs: [
- {
- internalType: 'address',
- name: 'account',
- type: 'address',
- },
- {
- internalType: 'uint256',
- name: 'myCustomParam',
- type: 'uint256',
- },
- ],
- outputs: [
- {
- internalType: 'uint256',
- name: 'someValue',
- type: 'uint256',
- },
- ],
-};
diff --git a/packages/test-utils/tsconfig.build.json b/packages/test-utils/tsconfig.build.json
deleted file mode 100644
index dedc2a266..000000000
--- a/packages/test-utils/tsconfig.build.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
- "extends": "./tsconfig.json",
- "include": ["src"],
- "compilerOptions": {
- "outDir": "dist",
- "rootDir": "src"
- },
- "references": [
- {
- "path": "../shared/tsconfig.es.json"
- }
- ]
-}
diff --git a/packages/test-utils/tsconfig.cjs.json b/packages/test-utils/tsconfig.cjs.json
new file mode 100644
index 000000000..035a2ab62
--- /dev/null
+++ b/packages/test-utils/tsconfig.cjs.json
@@ -0,0 +1,7 @@
+{
+ "extends": "./tsconfig.es.json",
+ "compilerOptions": {
+ "outDir": "dist/cjs",
+ "module": "CommonJS",
+ }
+}
diff --git a/packages/test-utils/tsconfig.es.json b/packages/test-utils/tsconfig.es.json
new file mode 100644
index 000000000..2ffa9192c
--- /dev/null
+++ b/packages/test-utils/tsconfig.es.json
@@ -0,0 +1,10 @@
+{
+ "extends": "./tsconfig.json",
+ "include": ["src"],
+ "compilerOptions": {
+ "outDir": "dist/es",
+ "rootDir": "src",
+ "module": "ES2022",
+ "target": "ES2022"
+ }
+}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 3e967d04a..2e2c27101 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -13,6 +13,10 @@ overrides:
importers:
.:
+ dependencies:
+ '@nucypher/nucypher-core':
+ specifier: 0.13.0-alpha.1
+ version: 0.13.0-alpha.1
devDependencies:
'@skypack/package-check':
specifier: ^0.2.2
@@ -46,7 +50,7 @@ importers:
version: 3.2.0(eslint@8.49.0)
eslint-plugin-import:
specifier: ^2.28.1
- version: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
+ version: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0)
eslint-plugin-no-only-tests:
specifier: ^3.1.0
version: 3.1.0
@@ -96,11 +100,157 @@ importers:
specifier: ^0.34.4
version: 0.34.4
- examples/nextjs:
+ demos/taco-demo:
dependencies:
- '@nucypher/shared':
+ '@nucypher/taco':
+ specifier: workspace:*
+ version: link:../../packages/taco
+ '@usedapp/core':
+ specifier: ^1.2.13
+ version: 1.2.13(ethers@5.7.2)(react@18.2.0)
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ ethers:
+ specifier: ^5.7.1
+ version: 5.7.2
+ file-loader:
+ specifier: ^6.2.0
+ version: 6.2.0(webpack@5.88.2)
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-copy-to-clipboard:
+ specifier: ^5.1.0
+ version: 5.1.0(react@18.2.0)
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ react-spinners:
+ specifier: ^0.13.6
+ version: 0.13.8(react-dom@18.2.0)(react@18.2.0)
+ devDependencies:
+ '@pmmmwh/react-refresh-webpack-plugin':
+ specifier: ^0.5.7
+ version: 0.5.11(react-refresh@0.14.0)(webpack-dev-server@4.15.1)(webpack@5.88.2)
+ '@types/react':
+ specifier: ^18.0.20
+ version: 18.2.22
+ '@types/react-copy-to-clipboard':
+ specifier: ^5.0.4
+ version: 5.0.5
+ '@types/react-dom':
+ specifier: ^18.0.6
+ version: 18.2.7
+ copy-webpack-plugin:
+ specifier: ^11.0.0
+ version: 11.0.0(webpack@5.88.2)
+ esbuild-loader:
+ specifier: ^2.20.0
+ version: 2.21.0(webpack@5.88.2)
+ html-webpack-plugin:
+ specifier: ^5.5.0
+ version: 5.5.3(webpack@5.88.2)
+ react-refresh:
+ specifier: ^0.14.0
+ version: 0.14.0
+ rimraf:
+ specifier: ^3.0.2
+ version: 3.0.2
+ stream-browserify:
+ specifier: ^3.0.0
+ version: 3.0.0
+ typescript:
+ specifier: ^4.8.3
+ version: 4.9.5
+ webpack:
+ specifier: ^5.74.0
+ version: 5.88.2(webpack-cli@4.10.0)
+ webpack-cli:
+ specifier: ^4.10.0
+ version: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
+ webpack-dev-server:
+ specifier: ^4.11.1
+ version: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
+
+ demos/taco-nft-demo:
+ dependencies:
+ '@nucypher/taco':
+ specifier: workspace:*
+ version: link:../../packages/taco
+ '@usedapp/core':
+ specifier: ^1.2.13
+ version: 1.2.13(ethers@5.7.2)(react@18.2.0)
+ buffer:
+ specifier: ^6.0.3
+ version: 6.0.3
+ ethers:
+ specifier: ^5.7.1
+ version: 5.7.2
+ file-loader:
+ specifier: ^6.2.0
+ version: 6.2.0(webpack@5.88.2)
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-copy-to-clipboard:
+ specifier: ^5.1.0
+ version: 5.1.0(react@18.2.0)
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ react-spinners:
+ specifier: ^0.13.6
+ version: 0.13.8(react-dom@18.2.0)(react@18.2.0)
+ devDependencies:
+ '@pmmmwh/react-refresh-webpack-plugin':
+ specifier: ^0.5.7
+ version: 0.5.11(react-refresh@0.14.0)(webpack-dev-server@4.15.1)(webpack@5.88.2)
+ '@types/react':
+ specifier: ^18.0.20
+ version: 18.2.22
+ '@types/react-copy-to-clipboard':
+ specifier: ^5.0.4
+ version: 5.0.5
+ '@types/react-dom':
+ specifier: ^18.0.6
+ version: 18.2.7
+ copy-webpack-plugin:
+ specifier: ^11.0.0
+ version: 11.0.0(webpack@5.88.2)
+ esbuild-loader:
+ specifier: ^2.20.0
+ version: 2.21.0(webpack@5.88.2)
+ html-webpack-plugin:
+ specifier: ^5.5.0
+ version: 5.5.3(webpack@5.88.2)
+ react-refresh:
+ specifier: ^0.14.0
+ version: 0.14.0
+ rimraf:
+ specifier: ^3.0.2
+ version: 3.0.2
+ stream-browserify:
+ specifier: ^3.0.0
+ version: 3.0.0
+ typescript:
+ specifier: ^4.8.3
+ version: 4.9.5
+ webpack:
+ specifier: ^5.74.0
+ version: 5.88.2(webpack-cli@4.10.0)
+ webpack-cli:
+ specifier: ^4.10.0
+ version: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
+ webpack-dev-server:
+ specifier: ^4.11.1
+ version: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
+
+ examples/pre/nextjs:
+ dependencies:
+ '@nucypher/pre':
specifier: workspace:*
- version: link:../../packages/shared
+ version: link:../../../packages/pre
'@types/node':
specifier: 20.6.3
version: 20.6.3
@@ -132,20 +282,23 @@ importers:
specifier: 5.2.2
version: 5.2.2
- examples/nodejs:
+ examples/pre/nodejs:
dependencies:
- '@nucypher/shared':
+ '@nucypher/pre':
specifier: workspace:*
- version: link:../../packages/shared
+ version: link:../../../packages/pre
+ dotenv:
+ specifier: ^16.3.1
+ version: 16.3.1
ethers:
specifier: ^5.7.2
version: 5.7.2
- examples/react:
+ examples/pre/react:
dependencies:
- '@nucypher/shared':
+ '@nucypher/pre':
specifier: workspace:*
- version: link:../../packages/shared
+ version: link:../../../packages/pre
ethers:
specifier: ^5.7.2
version: 5.7.2
@@ -158,10 +311,10 @@ importers:
devDependencies:
'@types/node':
specifier: ^16.18.50
- version: 16.18.50
+ version: 16.18.54
'@types/react':
specifier: ^18.2.21
- version: 18.2.21
+ version: 18.2.22
'@types/react-dom':
specifier: ^18.2.7
version: 18.2.7
@@ -169,11 +322,112 @@ importers:
specifier: ^5.0.1
version: 5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.49.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2)
- examples/webpack-5:
+ examples/pre/webpack-5:
dependencies:
- '@nucypher/shared':
+ '@nucypher/pre':
specifier: workspace:*
- version: link:../../packages/shared
+ version: link:../../../packages/pre
+ ethers:
+ specifier: ^5.7.2
+ version: 5.7.2
+ devDependencies:
+ copy-webpack-plugin:
+ specifier: ^10.2.4
+ version: 10.2.4(webpack@5.88.2)
+ esbuild-loader:
+ specifier: ^2.11.0
+ version: 2.21.0(webpack@5.88.2)
+ webpack:
+ specifier: ^5.4.0
+ version: 5.88.2(webpack-cli@4.10.0)
+ webpack-cli:
+ specifier: ^4.9.2
+ version: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
+ webpack-dev-server:
+ specifier: ^4.7.4
+ version: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
+
+ examples/taco/nextjs:
+ dependencies:
+ '@nucypher/taco':
+ specifier: workspace:*
+ version: link:../../../packages/taco
+ '@types/node':
+ specifier: 20.6.3
+ version: 20.6.3
+ '@types/react':
+ specifier: 18.2.22
+ version: 18.2.22
+ '@types/react-dom':
+ specifier: 18.2.7
+ version: 18.2.7
+ eslint:
+ specifier: 8.49.0
+ version: 8.49.0
+ eslint-config-next:
+ specifier: 13.5.2
+ version: 13.5.2(eslint@8.49.0)(typescript@5.2.2)
+ ethers:
+ specifier: ^5.7.2
+ version: 5.7.2
+ next:
+ specifier: 13.5.2
+ version: 13.5.2(react-dom@18.2.0)(react@18.2.0)
+ react:
+ specifier: 18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: 18.2.0
+ version: 18.2.0(react@18.2.0)
+ typescript:
+ specifier: 5.2.2
+ version: 5.2.2
+
+ examples/taco/nodejs:
+ dependencies:
+ '@nucypher/taco':
+ specifier: workspace:*
+ version: link:../../../packages/taco
+ dotenv:
+ specifier: ^16.3.1
+ version: 16.3.1
+ ethers:
+ specifier: ^5.7.2
+ version: 5.7.2
+
+ examples/taco/react:
+ dependencies:
+ '@nucypher/taco':
+ specifier: workspace:*
+ version: link:../../../packages/taco
+ ethers:
+ specifier: ^5.7.2
+ version: 5.7.2
+ react:
+ specifier: ^18.2.0
+ version: 18.2.0
+ react-dom:
+ specifier: ^18.2.0
+ version: 18.2.0(react@18.2.0)
+ devDependencies:
+ '@types/node':
+ specifier: ^16.18.50
+ version: 16.18.54
+ '@types/react':
+ specifier: ^18.2.21
+ version: 18.2.22
+ '@types/react-dom':
+ specifier: ^18.2.7
+ version: 18.2.7
+ react-scripts:
+ specifier: ^5.0.1
+ version: 5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.49.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2)
+
+ examples/taco/webpack-5:
+ dependencies:
+ '@nucypher/taco':
+ specifier: workspace:*
+ version: link:../../../packages/taco
ethers:
specifier: ^5.7.2
version: 5.7.2
@@ -197,8 +451,8 @@ importers:
packages/pre:
dependencies:
'@nucypher/nucypher-core':
- specifier: 0.13.0-alpha.0
- version: 0.13.0-alpha.0
+ specifier: 0.13.0-alpha.1
+ version: 0.13.0-alpha.1
'@nucypher/shared':
specifier: workspace:*
version: link:../shared
@@ -215,15 +469,12 @@ importers:
'@ethersproject/abi':
specifier: ^5.7.0
version: 5.7.0
- '@ethersproject/abstract-signer':
- specifier: ^5.7.0
- version: 5.7.0
'@ethersproject/providers':
specifier: ^5.7.2
version: 5.7.2
'@nucypher/nucypher-core':
- specifier: 0.13.0-alpha.0
- version: 0.13.0-alpha.0
+ specifier: 0.13.0-alpha.1
+ version: 0.13.0-alpha.1
axios:
specifier: ^1.5.0
version: 1.5.0
@@ -236,16 +487,7 @@ importers:
qs:
specifier: ^6.10.1
version: 6.11.2
- semver:
- specifier: ^7.5.2
- version: 7.5.4
- zod:
- specifier: ^3.22.1
- version: 3.22.2
devDependencies:
- '@nucypher/test-utils':
- specifier: workspace:*
- version: link:../test-utils
'@typechain/ethers-v5':
specifier: ^11.1.1
version: 11.1.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.1)(typescript@5.2.2)
@@ -255,9 +497,6 @@ importers:
'@types/qs':
specifier: ^6.9.7
version: 6.9.8
- '@types/semver':
- specifier: ^7.5.0
- version: 7.5.1
cz-conventional-changelog:
specifier: ^3.0.1
version: 3.3.0
@@ -270,25 +509,37 @@ importers:
packages/taco:
dependencies:
+ '@ethersproject/abstract-signer':
+ specifier: ^5.7.0
+ version: 5.7.0
'@nucypher/nucypher-core':
- specifier: 0.13.0-alpha.0
- version: 0.13.0-alpha.0
+ specifier: 0.13.0-alpha.1
+ version: 0.13.0-alpha.1
'@nucypher/shared':
specifier: workspace:*
version: link:../shared
ethers:
specifier: ^5.7.2
version: 5.7.2
+ semver:
+ specifier: ^7.5.2
+ version: 7.5.4
+ zod:
+ specifier: ^3.22.1
+ version: 3.22.2
devDependencies:
'@nucypher/test-utils':
specifier: workspace:*
version: link:../test-utils
+ '@types/semver':
+ specifier: ^7.5.0
+ version: 7.5.2
packages/test-utils:
dependencies:
'@nucypher/nucypher-core':
- specifier: 0.13.0-alpha.0
- version: 0.13.0-alpha.0
+ specifier: 0.13.0-alpha.1
+ version: 0.13.0-alpha.1
'@nucypher/shared':
specifier: workspace:*
version: link:../shared
@@ -298,28 +549,9 @@ importers:
ethers:
specifier: ^5.7.2
version: 5.7.2
- devDependencies:
- '@typechain/ethers-v5':
- specifier: ^11.1.1
- version: 11.1.1(@ethersproject/abi@5.7.0)(@ethersproject/providers@5.7.2)(ethers@5.7.2)(typechain@8.3.1)(typescript@5.2.2)
- '@types/deep-equal':
- specifier: ^1.0.1
- version: 1.0.1
- '@types/qs':
- specifier: ^6.9.7
- version: 6.9.8
- '@types/semver':
- specifier: ^7.5.0
- version: 7.5.1
- cz-conventional-changelog:
- specifier: ^3.0.1
- version: 3.3.0
- standard-version:
- specifier: ^9.0.0
- version: 9.5.0
- typechain:
- specifier: ^8.3.1
- version: 8.3.1(typescript@5.2.2)
+ vitest:
+ specifier: ^0.34.4
+ version: 0.34.4
packages:
@@ -338,7 +570,6 @@ packages:
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.19
- dev: true
/@apideck/better-ajv-errors@0.3.6(ajv@8.12.0):
resolution: {integrity: sha512-P+ZygBLZtkp0qqOAJJVX4oX/sFo5JR3eBWwwuqHHhK0GIgQOKWrAfiAaWX0aArHkRWHMuggFEgAZNxVPwPZYaA==}
@@ -358,121 +589,116 @@ packages:
dependencies:
'@babel/highlight': 7.22.13
chalk: 2.4.2
- dev: true
- /@babel/compat-data@7.22.9:
- resolution: {integrity: sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==}
+ /@babel/compat-data@7.22.20:
+ resolution: {integrity: sha512-BQYjKbpXjoXwFW5jGqiizJQQT/aC7pFm9Ok1OWssonuguICi264lbgMzRp2ZMmRSlfkX6DsWDDcsrctK8Rwfiw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/core@7.22.17:
- resolution: {integrity: sha512-2EENLmhpwplDux5PSsZnSbnSkB3tZ6QTksgO25xwEL7pIDcNOMhF5v/s6RzwjMZzZzw9Ofc30gHv5ChCC8pifQ==}
+ /@babel/core@7.23.0:
+ resolution: {integrity: sha512-97z/ju/Jy1rZmDxybphrBuI+jtJjFVoz7Mr9yUQVVVi+DNZE333uFQeMOqcCIy1x3WYBIbWftUSLmbNXNT7qFQ==}
engines: {node: '>=6.9.0'}
dependencies:
'@ampproject/remapping': 2.2.1
'@babel/code-frame': 7.22.13
- '@babel/generator': 7.22.15
+ '@babel/generator': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
- '@babel/helpers': 7.22.15
- '@babel/parser': 7.22.16
+ '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0)
+ '@babel/helpers': 7.23.1
+ '@babel/parser': 7.23.0
'@babel/template': 7.22.15
- '@babel/traverse': 7.22.17
- '@babel/types': 7.22.17
- convert-source-map: 1.9.0
+ '@babel/traverse': 7.23.0
+ '@babel/types': 7.23.0
+ convert-source-map: 2.0.0
debug: 4.3.4
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 6.3.1
transitivePeerDependencies:
- supports-color
- dev: true
- /@babel/eslint-parser@7.22.15(@babel/core@7.22.17)(eslint@8.49.0):
+ /@babel/eslint-parser@7.22.15(@babel/core@7.23.0)(eslint@8.49.0):
resolution: {integrity: sha512-yc8OOBIQk1EcRrpizuARSQS0TWAcOMpEJ1aafhNznaeYkeL+OhqnDObGFylB8ka8VFF/sZc+S4RzHyO+3LjQxg==}
engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0}
peerDependencies:
'@babel/core': ^7.11.0
eslint: ^7.5.0 || ^8.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1
eslint: 8.49.0
eslint-visitor-keys: 2.1.0
semver: 6.3.1
dev: true
- /@babel/generator@7.22.15:
- resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==}
+ /@babel/generator@7.23.0:
+ resolution: {integrity: sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.19
jsesc: 2.5.2
- dev: true
/@babel/helper-annotate-as-pure@7.22.5:
resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
/@babel/helper-builder-binary-assignment-operator-visitor@7.22.15:
resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
/@babel/helper-compilation-targets@7.22.15:
resolution: {integrity: sha512-y6EEzULok0Qvz8yyLkCvVX+02ic+By2UdOhylwUOvOn9dvYc9mKICJuuU1n1XBI02YWsNsnrY1kc6DVbjcXbtw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/compat-data': 7.22.9
+ '@babel/compat-data': 7.22.20
'@babel/helper-validator-option': 7.22.15
- browserslist: 4.21.10
+ browserslist: 4.21.11
lru-cache: 5.1.1
semver: 6.3.1
- dev: true
- /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.22.17):
+ /@babel/helper-create-class-features-plugin@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-jKkwA59IXcvSaiK2UN45kKwSC9o+KuoXsBDvHvU/7BecYIp8GQ2UwrVvFgJASUT+hBnwJx6MhvMCuMzwZZ7jlg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-function-name': 7.22.5
- '@babel/helper-member-expression-to-functions': 7.22.15
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
+ '@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
- '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0)
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
semver: 6.3.1
dev: true
- /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.22.17):
+ /@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
regexpu-core: 5.3.2
semver: 6.3.1
dev: true
- /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.22.17):
+ /@babel/helper-define-polyfill-provider@0.4.2(@babel/core@7.23.0):
resolution: {integrity: sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
debug: 4.3.4
@@ -482,59 +708,54 @@ packages:
- supports-color
dev: true
- /@babel/helper-environment-visitor@7.22.5:
- resolution: {integrity: sha512-XGmhECfVA/5sAt+H+xpSg0mfrHq6FzNr9Oxh7PSEBBRUb/mL7Kz3NICXb194rCqAEdxkhPT1a88teizAFyvk8Q==}
+ /@babel/helper-environment-visitor@7.22.20:
+ resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-function-name@7.22.5:
- resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
+ /@babel/helper-function-name@7.23.0:
+ resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
- '@babel/types': 7.22.17
- dev: true
+ '@babel/types': 7.23.0
/@babel/helper-hoist-variables@7.22.5:
resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
- dev: true
+ '@babel/types': 7.23.0
- /@babel/helper-member-expression-to-functions@7.22.15:
- resolution: {integrity: sha512-qLNsZbgrNh0fDQBCPocSL8guki1hcPvltGDv/NxvUoABwFq7GkKSu1nRXeJkVZc+wJvne2E0RKQz+2SQrz6eAA==}
+ /@babel/helper-member-expression-to-functions@7.23.0:
+ resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
/@babel/helper-module-imports@7.22.15:
resolution: {integrity: sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
- dev: true
+ '@babel/types': 7.23.0
- /@babel/helper-module-transforms@7.22.17(@babel/core@7.22.17):
- resolution: {integrity: sha512-XouDDhQESrLHTpnBtCKExJdyY4gJCdrvH2Pyv8r8kovX2U8G0dRUOT45T9XlbLtuu9CLXP15eusnkprhoPV5iQ==}
+ /@babel/helper-module-transforms@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-WhDWw1tdrlT0gMgUJSlX0IQvoO1eN279zrAUbVB+KpV2c3Tylz8+GnKOLllCS6Z/iZQEyVYxhZVUdPTqs2YYPw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-environment-visitor': 7.22.5
+ '@babel/core': 7.23.0
+ '@babel/helper-environment-visitor': 7.22.20
'@babel/helper-module-imports': 7.22.15
'@babel/helper-simple-access': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/helper-validator-identifier': 7.22.15
- dev: true
+ '@babel/helper-validator-identifier': 7.22.20
/@babel/helper-optimise-call-expression@7.22.5:
resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
/@babel/helper-plugin-utils@7.22.5:
@@ -542,27 +763,27 @@ packages:
engines: {node: '>=6.9.0'}
dev: true
- /@babel/helper-remap-async-to-generator@7.22.17(@babel/core@7.22.17):
- resolution: {integrity: sha512-bxH77R5gjH3Nkde6/LuncQoLaP16THYPscurp1S8z7S9ZgezCyV3G8Hc+TZiCmY8pz4fp8CvKSgtJMW0FkLAxA==}
+ /@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.23.0):
+ resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-wrap-function': 7.22.17
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-wrap-function': 7.22.20
dev: true
- /@babel/helper-replace-supers@7.22.9(@babel/core@7.22.17):
- resolution: {integrity: sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==}
+ /@babel/helper-replace-supers@7.22.20(@babel/core@7.23.0):
+ resolution: {integrity: sha512-qsW0In3dbwQUbK8kejJ4R7IHVGwHJlV6lpG6UA7a9hSa2YEiAib+N1T2kr6PEeUT+Fl7najmSOS6SmAwCHK6Tw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-member-expression-to-functions': 7.22.15
+ '@babel/core': 7.23.0
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-member-expression-to-functions': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
dev: true
@@ -570,1170 +791,1162 @@ packages:
resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
- dev: true
+ '@babel/types': 7.23.0
/@babel/helper-skip-transparent-expression-wrappers@7.22.5:
resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
/@babel/helper-split-export-declaration@7.22.6:
resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/types': 7.22.17
- dev: true
+ '@babel/types': 7.23.0
/@babel/helper-string-parser@7.22.5:
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-validator-identifier@7.22.15:
- resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==}
+ /@babel/helper-validator-identifier@7.22.20:
+ resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
engines: {node: '>=6.9.0'}
- dev: true
/@babel/helper-validator-option@7.22.15:
resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==}
engines: {node: '>=6.9.0'}
- dev: true
- /@babel/helper-wrap-function@7.22.17:
- resolution: {integrity: sha512-nAhoheCMlrqU41tAojw9GpVEKDlTS8r3lzFmF0lP52LwblCPbuFSO7nGIZoIcoU5NIm1ABrna0cJExE4Ay6l2Q==}
+ /@babel/helper-wrap-function@7.22.20:
+ resolution: {integrity: sha512-pms/UwkOpnQe/PDAEdV/d7dVCoBbB+R4FvYoHGZz+4VPcg7RtYy2KP7S2lbuWM6FCSgob5wshfGESbC/hzNXZw==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-function-name': 7.22.5
+ '@babel/helper-function-name': 7.23.0
'@babel/template': 7.22.15
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
- /@babel/helpers@7.22.15:
- resolution: {integrity: sha512-7pAjK0aSdxOwR+CcYAqgWOGy5dcfvzsTIfFTb2odQqW47MDfv14UaJDY6eng8ylM2EaeKXdxaSWESbkmaQHTmw==}
+ /@babel/helpers@7.23.1:
+ resolution: {integrity: sha512-chNpneuK18yW5Oxsr+t553UZzzAs3aZnFm4bxhebsNTeshrC95yA7l5yl7GBAG+JG1rF0F7zzD2EixK9mWSDoA==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/template': 7.22.15
- '@babel/traverse': 7.22.17
- '@babel/types': 7.22.17
+ '@babel/traverse': 7.23.0
+ '@babel/types': 7.23.0
transitivePeerDependencies:
- supports-color
- dev: true
/@babel/highlight@7.22.13:
resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==}
engines: {node: '>=6.9.0'}
dependencies:
- '@babel/helper-validator-identifier': 7.22.15
+ '@babel/helper-validator-identifier': 7.22.20
chalk: 2.4.2
js-tokens: 4.0.0
- dev: true
- /@babel/parser@7.22.16:
- resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==}
+ /@babel/parser@7.23.0:
+ resolution: {integrity: sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==}
engines: {node: '>=6.0.0'}
hasBin: true
dependencies:
- '@babel/types': 7.22.17
- dev: true
+ '@babel/types': 7.23.0
- /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-FB9iYlz7rURmRJyXRKEnalYPPdn87H5no108cyuQQyMwlpJ2SJtpIUBI27kdTin956pz+LPypkPVPUTlxOmrsg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-Hyph9LseGvAeeXzikV88bczhsrLrIZqDPxO+sSmAunMPaGrBGhfMWzCPYTtiW9t+HzSE2wtV8e5cc5P6r1xMDQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.13.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.22.17)
+ '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.0)
dev: true
- /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.22.17):
+ /@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.23.0):
resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-proposal-decorators@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-kc0VvbbUyKelvzcKOSyQUSVVXS5pT3UhRB0e3c9An86MvLqs+gx0dN4asllrDluqSa3m9YyooXKGOFVomnyFkg==}
+ /@babel/plugin-proposal-decorators@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-kYsT+f5ARWF6AdFmqoEEp+hpqxEB8vGmRWfw2aj78M2vTwS2uHW91EF58iFm1Z9U8Y/RrLu2XKJn46P9ca1b0w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0)
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.22.17)
+ '@babel/plugin-syntax-decorators': 7.22.10(@babel/core@7.23.0)
dev: true
- /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.22.17):
+ /@babel/plugin-proposal-nullish-coalescing-operator@7.18.6(@babel/core@7.23.0):
resolution: {integrity: sha512-wQxQzxYeJqHcfppzBDnm1yAY0jSRkUXR2z8RePZYrKwMKgMlE8+Z6LUno+bd6LvbGh8Gltvy74+9pIYkr+XkKA==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-nullish-coalescing-operator instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.22.17):
+ /@babel/plugin-proposal-numeric-separator@7.18.6(@babel/core@7.23.0):
resolution: {integrity: sha512-ozlZFogPqoLm8WBr5Z8UckIoE4YQ5KESVcNudyXOR8uqIkliTEgJ3RoketfG6pmzLdeZF0H/wjE9/cCEitBl7Q==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-numeric-separator instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0)
dev: true
- /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.22.17):
+ /@babel/plugin-proposal-optional-chaining@7.21.0(@babel/core@7.23.0):
resolution: {integrity: sha512-p4zeefM72gpmEe2fkUr/OnOXpWEf8nAgk7ZYVqqfFiyIG7oFfVZcCrU64hWn5xp4tQ9LkV4bTIa5rD0KANpKNA==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-optional-chaining instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.22.17):
+ /@babel/plugin-proposal-private-methods@7.18.6(@babel/core@7.23.0):
resolution: {integrity: sha512-nutsvktDItsNn4rpGItSNV2sz1XwS+nfU0Rg8aCx3W3NOKVzdMjJRu0O5OkgDp3ZGICSTbgRpxZoWsxoKRvbeA==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-methods instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.17):
+ /@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.0):
resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
dev: true
- /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.22.17):
+ /@babel/plugin-proposal-private-property-in-object@7.21.11(@babel/core@7.23.0):
resolution: {integrity: sha512-0QZ8qP/3RLDVBwBFoWAwCtgcDZJVwA5LUJRZU8x2YFfKNuFq161wK3cuGrALu5yiPu+vzwTAg/sMWVNeWeNyaw==}
engines: {node: '>=6.9.0'}
deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-private-property-in-object instead.
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.17)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0)
dev: true
- /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.22.17):
+ /@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.23.0):
resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.22.17):
+ /@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.23.0):
resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.23.0):
resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.22.17):
+ /@babel/plugin-syntax-decorators@7.22.10(@babel/core@7.23.0):
resolution: {integrity: sha512-z1KTVemBjnz+kSEilAsI4lbkPOl5TvJH7YDSY1CTIzvLWJ+KHXp+mRe8VPmfnyvqOPqar1V2gid2PleKzRUstQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-flow@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-9RdCl0i+q0QExayk2nOS7853w08yLucnnPML6EN9S8fgMPVtdLDCdx/cOQ/i44Lb9UeQX9A35yaqBBOMMZxPxQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-import-assertions@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-import-attributes@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.22.17):
+ /@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.23.0):
resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-jsx@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-gvyP4hZrgrs/wWMaocvxZ44Hw0b3W8Pe+cMxc8V1ULQ07oh8VNbIRaoD1LRZVTvD+0nieDKjfgKg89sD7rrKrg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.22.17):
+ /@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.23.0):
resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.22.17):
+ /@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.23.0):
resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.22.17):
+ /@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.23.0):
resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.23.0):
resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.23.0):
resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-syntax-typescript@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-1mS2o03i7t1c6VzH6fdQ3OA8tcEIxwG18zIPRp+UY1Ihv6W+XZzBCVxExF9upussPXJ0xE9XRHwMoNs1ep/nRQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.22.17):
+ /@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.23.0):
resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-arrow-functions@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-async-generator-functions@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-jBm1Es25Y+tVoTi5rfd5t1KLmL8ogLKpXszboWOTTtGFGz2RKnQe2yn7HbZ+kb/B8N0FVSGQo874NSlOU1T4+w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-environment-visitor': 7.22.5
+ '@babel/core': 7.23.0
+ '@babel/helper-environment-visitor': 7.22.20
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-remap-async-to-generator': 7.22.17(@babel/core@7.22.17)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17)
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-async-to-generator@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-remap-async-to-generator': 7.22.17(@babel/core@7.22.17)
+ '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-block-scoped-functions@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-block-scoping@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-G1czpdJBZCtngoK1sJgloLiOHUnkb/bLZwqVZD8kXmq0ZnVfTTWUcs9OWtp0mBtYJ+4LQY1fllqBkOIPhXmFmw==}
+ /@babel/plugin-transform-block-scoping@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-cOsrbmIOXmf+5YbL99/S49Y3j46k/T16b9ml8bm9lP6N9US5iQ2yBK7gpui1pg0V/WMcXdkfKbTb7HXq9u+v4g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-class-properties@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-class-static-block@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-GMM8gGmqI7guS/llMFk1bJDkKfn3v3C4KHK9Yg1ey5qcHcOlKb0QvcMrgzvxo+T03/4szNh5lghY+fEC98Kq9g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.12.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.17)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-classes@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-classes@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-VbbC3PGjBdE0wAWDdHM9G8Gm977pnYI0XpqMd6LrKISj8/DJXEsWqgRuTYaNE9Bv0JGhTZUzHDlMk18IpOuoqw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-function-name': 7.22.5
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
'@babel/helper-optimise-call-expression': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0)
'@babel/helper-split-export-declaration': 7.22.6
globals: 11.12.0
dev: true
- /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-computed-properties@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/template': 7.22.15
dev: true
- /@babel/plugin-transform-destructuring@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-HzG8sFl1ZVGTme74Nw+X01XsUTqERVQ6/RLHo3XjGRzm7XD6QTtfS3NJotVgCGy8BzkDqRjRBD8dAyJn5TuvSQ==}
+ /@babel/plugin-transform-destructuring@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-vaMdgNXFkYrB+8lbgniSYWHsgqK5gjaMNcc84bMIOMRLH0L9AqYq3hwMdvnyqj1OPqea8UtjPEuS/DCenah1wg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-dotall-regex@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-duplicate-keys@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-dynamic-import@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-g/21plo58sfteWjaO0ZNVb+uEOkJNjAaHhbejrnBmu011l/eNDScmkbjCC3l4FKb10ViaGU4aOkFznSu2zRHgA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-exponentiation-operator@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-export-namespace-from@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-xa7aad7q7OiT8oNZ1mU7NrISjlSkVdMbNxn9IuLZyL9AJEhs1Apba3I+u5riX1dIkdptP5EKDG5XDPByWxtehw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-flow-strip-types@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-tujNbZdxdG0/54g/oua8ISToaXTFBf8EnSb5PgQSciIXWOWKX3S4+JR7ZE9ol8FZwf9kxitzkGQ+QWeov/mCiA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.17)
+ '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-for-of@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-me6VGeHsx30+xh9fbDLLPi0J1HzmeIIyenoOQHuw2D4m2SAU3NrspX5XxJLBpqn5yrLzrlw2Iy3RA//Bx27iOA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-function-name@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
- '@babel/helper-function-name': 7.22.5
+ '@babel/helper-function-name': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-json-strings@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-CxT5tCqpA9/jXFlme9xIBCc5RPtdDq3JpkkhgHQqtDdiTnTI0jtZ0QzXhr5DILeYifDPp2wvY2ad+7+hLMW5Pw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-literals@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-literals@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-logical-assignment-operators@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-qQwRTP4+6xFCDV5k7gZBF3C31K34ut0tbEcTKxlX/0KXxm9GLcO14p570aWxFvVzx6QAfPgq7gaeIHXJC8LswQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-member-expression-literals@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-modules-amd@7.22.5(@babel/core@7.22.17):
- resolution: {integrity: sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==}
+ /@babel/plugin-transform-modules-amd@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-xWT5gefv2HGSm4QHtgc1sYPbseOyf+FFDo2JbpE25GWl5BqTGO9IMwTYJRoIdjsF85GE+VegHxSCUt5EvoYTAw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-modules-commonjs@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-jWL4eh90w0HQOTKP2MoXXUpVxilxsB2Vl4ji69rSjS3EcZ/v4sBmn+A3NpepuJzBhOaEBbR7udonlHHn5DWidg==}
+ /@babel/plugin-transform-modules-commonjs@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-32Xzss14/UVc7k9g775yMIvkVK8xwKE0DPdP5JTapr3+Z9w4tzeOuLNY6BXDQR6BdnzIlXnCGAzsk/ICHBLVWQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-simple-access': 7.22.5
dev: true
- /@babel/plugin-transform-modules-systemjs@7.22.11(@babel/core@7.22.17):
- resolution: {integrity: sha512-rIqHmHoMEOhI3VkVf5jQ15l539KrwhzqcBO6wdCNWPWc/JWt9ILNYNUssbRpeq0qWns8svuw8LnMNCvWBIJ8wA==}
+ /@babel/plugin-transform-modules-systemjs@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-qBej6ctXZD2f+DhlOC9yO47yEYgUh5CZNz/aBoH4j/3NOlRfJXJbY7xDQCqQVf9KbrqGzIWER1f23doHGrIHFg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
- '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+ '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-validator-identifier': 7.22.15
+ '@babel/helper-validator-identifier': 7.22.20
dev: true
- /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-modules-umd@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-module-transforms': 7.22.17(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-module-transforms': 7.23.0(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-new-target@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-nullish-coalescing-operator@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-YZWOw4HxXrotb5xsjMJUDlLgcDXSfO9eCmdl1bgW4+/lAGdkjaEvOnQ4p5WKKdUgSzO39dgPl0pTnfxm0OAXcg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-numeric-separator@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-3dzU4QGPsILdJbASKhF/V2TVP+gJya1PsueQCxIPCEcerqF21oEcrob4mzjsp2Py/1nLfF5m+xYNMDpmA8vffg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-object-rest-spread@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-fEB+I1+gAmfAyxZcX1+ZUwLeAuuf8VIg67CTznZE0MqVFumWkh8xWtn58I4dxdVf080wn7gzWoF8vndOViJe9Q==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/compat-data': 7.22.9
- '@babel/core': 7.22.17
+ '@babel/compat-data': 7.22.20
+ '@babel/core': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.17)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-object-super@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/helper-replace-supers': 7.22.9(@babel/core@7.22.17)
+ '@babel/helper-replace-supers': 7.22.20(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-optional-catch-binding@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-rli0WxesXUeCJnMYhzAglEjLWVDF6ahb45HuprcmQuLidBJFWjNnOzssk2kuc6e33FlLaiZhG/kUIzUMWdBKaQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-optional-chaining@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-ngQ2tBhq5vvSJw2Q2Z9i7ealNkpDMU0rGWnHPKqRZO0tzZ5tlaoz4hDvhXioOoaE0X2vfNss1djwg0DXlfu30A==}
+ /@babel/plugin-transform-optional-chaining@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-sBBGXbLJjxTzLBF5rFWaikMnOGOk/BmK6vVByIdEggZ7Vn6CvWXZyRkkLFK6WE0IF8jSliyOkUN6SScFgzCM0g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-parameters@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-hjk7qKIqhyzhhUvRT683TYQOFa/4cQKwQy7ALvTpODswN40MljzNDa0YldevS6tGbxwaEKVn502JmY0dP7qEtQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-private-methods@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.22.17):
+ /@babel/plugin-transform-private-property-in-object@7.22.11(@babel/core@7.23.0):
resolution: {integrity: sha512-sSCbqZDBKHetvjSwpyWzhuHkmW5RummxJBVbYLkGkaiTOWGxml7SXt0iWa03bzxFIx7wOj3g/ILRd0RcJKBeSQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.17)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-property-literals@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-react-constant-elements@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-react-constant-elements@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-BF5SXoO+nX3h5OhlN78XbbDrBOffv+AxPP2ENaJOVqjWCgBDeOY3WcaUcddutGSfoap+5NEQ/q/4I3WZIvgkXA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-react-display-name@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-PVk3WPYudRF5z4GKMEYUrLjPl38fJSKNaEOkFuoprioowGuWN6w2RKznuFNSlJx7pzzXXStPUnNSOEO0jL5EVw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-react-jsx@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-oKckg2eZFa8771O/5vi7XeTvmM6+O9cxZu+kanTU7tD4sin5nO/G8jGJhq8Hvt2Z0kUoEDRayuZLaUlYl8QuGA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17)
- '@babel/types': 7.22.17
+ '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0)
+ '@babel/types': 7.23.0
dev: true
- /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-react-pure-annotations@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-gP4k85wx09q+brArVinTXhWiyzLl9UpmGva0+mWyKxk6JZequ05x3eUcIUE+FyttPKJFRRVtAvQaJ6YF9h1ZpA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.22.17):
+ /@babel/plugin-transform-regenerator@7.22.10(@babel/core@7.23.0):
resolution: {integrity: sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
regenerator-transform: 0.15.2
dev: true
- /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-reserved-words@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-runtime@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-runtime@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-tEVLhk8NRZSmwQ0DJtxxhTrCht1HVo8VaMzYT4w6lwyKBuHsgoioAUA7/6eT2fRfc5/23fuGdlwIxXhRVgWr4g==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-module-imports': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
- babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.17)
- babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.17)
- babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.17)
+ babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.0)
+ babel-plugin-polyfill-corejs3: 0.8.4(@babel/core@7.23.0)
+ babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-shorthand-properties@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-spread@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-spread@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-skip-transparent-expression-wrappers': 7.22.5
dev: true
- /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-sticky-regex@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-template-literals@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-typeof-symbol@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.22.17):
+ /@babel/plugin-transform-typescript@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-1uirS0TnijxvQLnlv5wQBwOX3E1wCFX7ITv+9pBV2wKEk4K+M5tqDaoNXnTH8tjEIYHLO98MwiTWO04Ggz4XuA==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-annotate-as-pure': 7.22.5
- '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/helper-create-class-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
- '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17)
+ '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0)
dev: true
- /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.22.17):
+ /@babel/plugin-transform-unicode-escapes@7.22.10(@babel/core@7.23.0):
resolution: {integrity: sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-unicode-property-regex@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-unicode-regex@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.22.17):
+ /@babel/plugin-transform-unicode-sets-regex@7.22.5(@babel/core@7.23.0):
resolution: {integrity: sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.23.0)
'@babel/helper-plugin-utils': 7.22.5
dev: true
- /@babel/preset-env@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-tZFHr54GBkHk6hQuVA8w4Fmq+MSPsfvMG0vPnOYyTnJpyfMqybL8/MbNCPRT9zc2KBO2pe4tq15g6Uno4Jpoag==}
+ /@babel/preset-env@7.22.20(@babel/core@7.23.0):
+ resolution: {integrity: sha512-11MY04gGC4kSzlPHRfvVkNAZhUxOvm7DCJ37hPDnUENwe06npjIRAfInEMTGSb4LZK5ZgDFkv5hw0lGebHeTyg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/compat-data': 7.22.9
- '@babel/core': 7.22.17
+ '@babel/compat-data': 7.22.20
+ '@babel/core': 7.23.0
'@babel/helper-compilation-targets': 7.22.15
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-validator-option': 7.22.15
- '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.22.17)
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.17)
- '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.22.17)
- '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.22.17)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.17)
- '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.22.17)
- '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-block-scoping': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-destructuring': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-modules-amd': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-modules-systemjs': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-optional-chaining': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.22.17)
- '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.22.17)
- '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.22.17)
- '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.22.17)
- '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.22.17)
- '@babel/types': 7.22.17
- babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.22.17)
- babel-plugin-polyfill-corejs3: 0.8.3(@babel/core@7.22.17)
- babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.22.17)
+ '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.23.0)
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0)
+ '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.0)
+ '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-import-assertions': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-syntax-import-attributes': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.0)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0)
+ '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.23.0)
+ '@babel/plugin-transform-arrow-functions': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-async-generator-functions': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-transform-async-to-generator': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-block-scoped-functions': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-block-scoping': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-class-properties': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-class-static-block': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-classes': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-transform-computed-properties': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-destructuring': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-dotall-regex': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-duplicate-keys': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-dynamic-import': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-exponentiation-operator': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-export-namespace-from': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-for-of': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-transform-function-name': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-json-strings': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-literals': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-logical-assignment-operators': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-member-expression-literals': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-modules-amd': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-modules-systemjs': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-modules-umd': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-new-target': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-nullish-coalescing-operator': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-numeric-separator': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-object-rest-spread': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-transform-object-super': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-optional-catch-binding': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-optional-chaining': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-parameters': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-transform-private-methods': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-private-property-in-object': 7.22.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-property-literals': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-regenerator': 7.22.10(@babel/core@7.23.0)
+ '@babel/plugin-transform-reserved-words': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-shorthand-properties': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-spread': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-sticky-regex': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-template-literals': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-typeof-symbol': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-unicode-escapes': 7.22.10(@babel/core@7.23.0)
+ '@babel/plugin-transform-unicode-property-regex': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-unicode-regex': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-unicode-sets-regex': 7.22.5(@babel/core@7.23.0)
+ '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.23.0)
+ '@babel/types': 7.23.0
+ babel-plugin-polyfill-corejs2: 0.4.5(@babel/core@7.23.0)
+ babel-plugin-polyfill-corejs3: 0.8.4(@babel/core@7.23.0)
+ babel-plugin-polyfill-regenerator: 0.5.2(@babel/core@7.23.0)
core-js-compat: 3.32.2
semver: 6.3.1
transitivePeerDependencies:
- supports-color
dev: true
- /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.22.17):
+ /@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.23.0):
resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==}
peerDependencies:
'@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
esutils: 2.0.3
dev: true
- /@babel/preset-react@7.22.15(@babel/core@7.22.17):
+ /@babel/preset-react@7.22.15(@babel/core@7.23.0):
resolution: {integrity: sha512-Csy1IJ2uEh/PecCBXXoZGAZBeCATTuePzCSB7dLYWS0vOEj6CNpjxIhW4duWwZodBNueH7QO14WbGn8YyeuN9w==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-validator-option': 7.22.15
- '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.22.17)
+ '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.0)
+ '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-react-pure-annotations': 7.22.5(@babel/core@7.23.0)
dev: true
- /@babel/preset-typescript@7.22.15(@babel/core@7.22.17):
- resolution: {integrity: sha512-HblhNmh6yM+cU4VwbBRpxFhxsTdfS1zsvH9W+gEjD0ARV9+8B4sNfpI6GuhePti84nuvhiwKS539jKPFHskA9A==}
+ /@babel/preset-typescript@7.23.0(@babel/core@7.23.0):
+ resolution: {integrity: sha512-6P6VVa/NM/VlAYj5s2Aq/gdVg8FSENCg3wlZ6Qau9AcPaoF5LbN1nyGlR9DTRIw9PpxI94e+ReydsJHcjwAweg==}
engines: {node: '>=6.9.0'}
peerDependencies:
'@babel/core': ^7.0.0-0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-plugin-utils': 7.22.5
'@babel/helper-validator-option': 7.22.15
- '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-modules-commonjs': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.22.17)
+ '@babel/plugin-syntax-jsx': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-modules-commonjs': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-transform-typescript': 7.22.15(@babel/core@7.23.0)
dev: true
/@babel/regjsgen@0.8.0:
@@ -1751,36 +1964,33 @@ packages:
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.22.13
- '@babel/parser': 7.22.16
- '@babel/types': 7.22.17
- dev: true
+ '@babel/parser': 7.23.0
+ '@babel/types': 7.23.0
- /@babel/traverse@7.22.17:
- resolution: {integrity: sha512-xK4Uwm0JnAMvxYZxOVecss85WxTEIbTa7bnGyf/+EgCL5Zt3U7htUpEOWv9detPlamGKuRzCqw74xVglDWpPdg==}
+ /@babel/traverse@7.23.0:
+ resolution: {integrity: sha512-t/QaEvyIoIkwzpiZ7aoSKK8kObQYeF7T2v+dazAYCb8SXtp58zEVkWW7zAnju8FNKNdr4ScAOEDmMItbyOmEYw==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/code-frame': 7.22.13
- '@babel/generator': 7.22.15
- '@babel/helper-environment-visitor': 7.22.5
- '@babel/helper-function-name': 7.22.5
+ '@babel/generator': 7.23.0
+ '@babel/helper-environment-visitor': 7.22.20
+ '@babel/helper-function-name': 7.23.0
'@babel/helper-hoist-variables': 7.22.5
'@babel/helper-split-export-declaration': 7.22.6
- '@babel/parser': 7.22.16
- '@babel/types': 7.22.17
+ '@babel/parser': 7.23.0
+ '@babel/types': 7.23.0
debug: 4.3.4
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- dev: true
- /@babel/types@7.22.17:
- resolution: {integrity: sha512-YSQPHLFtQNE5xN9tHuZnzu8vPr61wVTBZdfv1meex1NBosa4iT05k/Jw06ddJugi4bk7The/oSwQGFcksmEJQg==}
+ /@babel/types@7.23.0:
+ resolution: {integrity: sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==}
engines: {node: '>=6.9.0'}
dependencies:
'@babel/helper-string-parser': 7.22.5
- '@babel/helper-validator-identifier': 7.22.15
+ '@babel/helper-validator-identifier': 7.22.20
to-fast-properties: 2.0.0
- dev: true
/@bcoe/v8-coverage@0.2.3:
resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
@@ -2018,7 +2228,6 @@ packages:
/@discoveryjs/json-ext@0.5.7:
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
engines: {node: '>=10.0.0'}
- dev: true
/@esbuild/android-arm64@0.16.17:
resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==}
@@ -2035,7 +2244,6 @@ packages:
cpu: [arm64]
os: [android]
requiresBuild: true
- dev: true
optional: true
/@esbuild/android-arm@0.16.17:
@@ -2053,7 +2261,6 @@ packages:
cpu: [arm]
os: [android]
requiresBuild: true
- dev: true
optional: true
/@esbuild/android-x64@0.16.17:
@@ -2071,7 +2278,6 @@ packages:
cpu: [x64]
os: [android]
requiresBuild: true
- dev: true
optional: true
/@esbuild/darwin-arm64@0.16.17:
@@ -2089,7 +2295,6 @@ packages:
cpu: [arm64]
os: [darwin]
requiresBuild: true
- dev: true
optional: true
/@esbuild/darwin-x64@0.16.17:
@@ -2107,7 +2312,6 @@ packages:
cpu: [x64]
os: [darwin]
requiresBuild: true
- dev: true
optional: true
/@esbuild/freebsd-arm64@0.16.17:
@@ -2125,7 +2329,6 @@ packages:
cpu: [arm64]
os: [freebsd]
requiresBuild: true
- dev: true
optional: true
/@esbuild/freebsd-x64@0.16.17:
@@ -2143,7 +2346,6 @@ packages:
cpu: [x64]
os: [freebsd]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-arm64@0.16.17:
@@ -2161,7 +2363,6 @@ packages:
cpu: [arm64]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-arm@0.16.17:
@@ -2179,7 +2380,6 @@ packages:
cpu: [arm]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-ia32@0.16.17:
@@ -2197,7 +2397,6 @@ packages:
cpu: [ia32]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-loong64@0.16.17:
@@ -2215,7 +2414,6 @@ packages:
cpu: [loong64]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-mips64el@0.16.17:
@@ -2233,7 +2431,6 @@ packages:
cpu: [mips64el]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-ppc64@0.16.17:
@@ -2251,7 +2448,6 @@ packages:
cpu: [ppc64]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-riscv64@0.16.17:
@@ -2269,7 +2465,6 @@ packages:
cpu: [riscv64]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-s390x@0.16.17:
@@ -2287,7 +2482,6 @@ packages:
cpu: [s390x]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/linux-x64@0.16.17:
@@ -2305,7 +2499,6 @@ packages:
cpu: [x64]
os: [linux]
requiresBuild: true
- dev: true
optional: true
/@esbuild/netbsd-x64@0.16.17:
@@ -2323,7 +2516,6 @@ packages:
cpu: [x64]
os: [netbsd]
requiresBuild: true
- dev: true
optional: true
/@esbuild/openbsd-x64@0.16.17:
@@ -2341,7 +2533,6 @@ packages:
cpu: [x64]
os: [openbsd]
requiresBuild: true
- dev: true
optional: true
/@esbuild/sunos-x64@0.16.17:
@@ -2359,7 +2550,6 @@ packages:
cpu: [x64]
os: [sunos]
requiresBuild: true
- dev: true
optional: true
/@esbuild/win32-arm64@0.16.17:
@@ -2377,7 +2567,6 @@ packages:
cpu: [arm64]
os: [win32]
requiresBuild: true
- dev: true
optional: true
/@esbuild/win32-ia32@0.16.17:
@@ -2395,7 +2584,6 @@ packages:
cpu: [ia32]
os: [win32]
requiresBuild: true
- dev: true
optional: true
/@esbuild/win32-x64@0.16.17:
@@ -2413,7 +2601,6 @@ packages:
cpu: [x64]
os: [win32]
requiresBuild: true
- dev: true
optional: true
/@eslint-community/eslint-utils@4.4.0(eslint@8.49.0):
@@ -2922,7 +3109,6 @@ packages:
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
dependencies:
'@sinclair/typebox': 0.27.8
- dev: true
/@jest/source-map@27.5.1:
resolution: {integrity: sha512-y9NIHUYF3PJRlHk98NdC/N1gl88BL08aQQgu4k4ZopQkCw9t9cV8mtl3TV8b/YCB8XaVTFrmUTAJvjsntDireg==}
@@ -2969,7 +3155,7 @@ packages:
resolution: {integrity: sha512-ipON6WtYgl/1329g5AIJVbUuEh0wZVbdpGwC99Jw4LwuoBNS95MVphU6zOeD9pDkon+LLbFL7lOQRapbB8SCHw==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@jest/types': 27.5.1
babel-plugin-istanbul: 6.1.1
chalk: 4.1.2
@@ -2995,7 +3181,7 @@ packages:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 20.6.3
- '@types/yargs': 16.0.5
+ '@types/yargs': 16.0.6
chalk: 4.1.2
dev: true
@@ -3007,7 +3193,7 @@ packages:
'@types/istanbul-lib-coverage': 2.0.4
'@types/istanbul-reports': 3.0.1
'@types/node': 20.6.3
- '@types/yargs': 17.0.24
+ '@types/yargs': 17.0.25
chalk: 4.1.2
dev: true
@@ -3018,35 +3204,29 @@ packages:
'@jridgewell/set-array': 1.1.2
'@jridgewell/sourcemap-codec': 1.4.15
'@jridgewell/trace-mapping': 0.3.19
- dev: true
/@jridgewell/resolve-uri@3.1.1:
resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/set-array@1.1.2:
resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
engines: {node: '>=6.0.0'}
- dev: true
/@jridgewell/source-map@0.3.5:
resolution: {integrity: sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ==}
dependencies:
'@jridgewell/gen-mapping': 0.3.3
'@jridgewell/trace-mapping': 0.3.19
- dev: true
/@jridgewell/sourcemap-codec@1.4.15:
resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
- dev: true
/@jridgewell/trace-mapping@0.3.19:
resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
dependencies:
'@jridgewell/resolve-uri': 3.1.1
'@jridgewell/sourcemap-codec': 1.4.15
- dev: true
/@jridgewell/trace-mapping@0.3.9:
resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
@@ -3057,7 +3237,11 @@ packages:
/@leichtgewicht/ip-codec@2.0.4:
resolution: {integrity: sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==}
- dev: true
+
+ /@metamask/detect-provider@2.0.0:
+ resolution: {integrity: sha512-sFpN+TX13E9fdBDh9lvQeZdJn4qYoRb/6QF2oZZK/Pn559IhCFacPMU1rMuqyXoFQF3JSJfii2l98B87QDPeCQ==}
+ engines: {node: '>=14.0.0'}
+ dev: false
/@next/env@13.5.2:
resolution: {integrity: sha512-dUseBIQVax+XtdJPzhwww4GetTjlkRSsXeQnisIJWBaHsnxYcN2RGzsPHi58D6qnkATjnhuAtQTJmR1hKYQQPg==}
@@ -3174,8 +3358,8 @@ packages:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.15.0
- /@nucypher/nucypher-core@0.13.0-alpha.0:
- resolution: {integrity: sha512-Nk+BE1iUY4m/ZHtbKRLJkAidXLLpwFmIbXBgS9qJMT1601dYFee/VvP0W6QoiSP9CirtZ730qtltuYb+MIzOfg==}
+ /@nucypher/nucypher-core@0.13.0-alpha.1:
+ resolution: {integrity: sha512-uKu/YLTZ6mqkQ2kaQMJs/USUiw9EYFtaZU6FaD8zAN8XKLpHYuYD13BDfU7idR1nZIKjL/E5xIoVJFV3Dx0x2w==}
dev: false
/@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.88.2):
@@ -3218,7 +3402,47 @@ packages:
webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
dev: true
- /@rollup/plugin-babel@5.3.1(@babel/core@7.22.17)(rollup@2.79.1):
+ /@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.14.0)(webpack-dev-server@4.15.1)(webpack@5.88.2):
+ resolution: {integrity: sha512-7j/6vdTym0+qZ6u4XbSAxrWBGYSdCfTzySkj7WAFgDLmSyWlOrWvpyzxlFh5jtw9dn0oL/jtW+06XfFiisN3JQ==}
+ engines: {node: '>= 10.13'}
+ peerDependencies:
+ '@types/webpack': 4.x || 5.x
+ react-refresh: '>=0.10.0 <1.0.0'
+ sockjs-client: ^1.4.0
+ type-fest: '>=0.17.0 <5.0.0'
+ webpack: '>=4.43.0 <6.0.0'
+ webpack-dev-server: 3.x || 4.x
+ webpack-hot-middleware: 2.x
+ webpack-plugin-serve: 0.x || 1.x
+ peerDependenciesMeta:
+ '@types/webpack':
+ optional: true
+ sockjs-client:
+ optional: true
+ type-fest:
+ optional: true
+ webpack-dev-server:
+ optional: true
+ webpack-hot-middleware:
+ optional: true
+ webpack-plugin-serve:
+ optional: true
+ dependencies:
+ ansi-html-community: 0.0.8
+ common-path-prefix: 3.0.0
+ core-js-pure: 3.32.2
+ error-stack-parser: 2.1.4
+ find-up: 5.0.0
+ html-entities: 2.4.0
+ loader-utils: 2.0.4
+ react-refresh: 0.14.0
+ schema-utils: 3.3.0
+ source-map: 0.7.4
+ webpack: 5.88.2(webpack-cli@4.10.0)
+ webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
+ dev: true
+
+ /@rollup/plugin-babel@5.3.1(@babel/core@7.23.0)(rollup@2.79.1):
resolution: {integrity: sha512-WFfdLWU/xVWKeRQnKmIAQULUI7Il0gZnBIH/ZFO069wYIfPu+8zrfp/KMW0atmELoRDq8FbiP3VCss9MhCut7Q==}
engines: {node: '>= 10.0.0'}
peerDependencies:
@@ -3229,7 +3453,7 @@ packages:
'@types/babel__core':
optional: true
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@babel/helper-module-imports': 7.22.15
'@rollup/pluginutils': 3.1.0(rollup@2.79.1)
rollup: 2.79.1
@@ -3272,8 +3496,8 @@ packages:
rollup: 2.79.1
dev: true
- /@rushstack/eslint-patch@1.3.3:
- resolution: {integrity: sha512-0xd7qez0AQ+MbHatZTlI1gu5vkG8r7MYRUJAHPAHJBmGLs16zpkrpAVLvjQKQOqaXPDUBwOiJzNc00znHSCVBw==}
+ /@rushstack/eslint-patch@1.4.0:
+ resolution: {integrity: sha512-cEjvTPU32OM9lUFegJagO0mRnIn+rbqrG89vV8/xLnLFX0DoR0r1oy5IlTga71Q7uT3Qus7qm7wgeiMT/+Irlg==}
/@sinclair/typebox@0.24.51:
resolution: {integrity: sha512-1P1OROm/rdubP5aFDSZQILU0vrLCJ4fvHt6EoqHEM+2D/G5MK3bIaymUKLit8Js9gbns5UyJnkP/TZROLw4tUA==}
@@ -3281,7 +3505,6 @@ packages:
/@sinclair/typebox@0.27.8:
resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
- dev: true
/@sinonjs/commons@1.8.6:
resolution: {integrity: sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==}
@@ -3309,7 +3532,7 @@ packages:
ejs: 3.1.9
json5: 2.2.3
magic-string: 0.25.9
- string.prototype.matchall: 4.0.9
+ string.prototype.matchall: 4.0.10
dev: true
/@svgr/babel-plugin-add-jsx-attribute@5.4.0:
@@ -3381,14 +3604,14 @@ packages:
resolution: {integrity: sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ==}
engines: {node: '>=10'}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
/@svgr/plugin-jsx@5.5.0:
resolution: {integrity: sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA==}
engines: {node: '>=10'}
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@svgr/babel-preset': 5.5.0
'@svgr/hast-util-to-babel-ast': 5.5.0
svg-parser: 2.0.4
@@ -3409,10 +3632,10 @@ packages:
resolution: {integrity: sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g==}
engines: {node: '>=10'}
dependencies:
- '@babel/core': 7.22.17
- '@babel/plugin-transform-react-constant-elements': 7.22.5(@babel/core@7.22.17)
- '@babel/preset-env': 7.22.15(@babel/core@7.22.17)
- '@babel/preset-react': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/plugin-transform-react-constant-elements': 7.22.5(@babel/core@7.23.0)
+ '@babel/preset-env': 7.22.20(@babel/core@7.23.0)
+ '@babel/preset-react': 7.22.15(@babel/core@7.23.0)
'@svgr/core': 5.5.0
'@svgr/plugin-jsx': 5.5.0
'@svgr/plugin-svgo': 5.5.0
@@ -3474,117 +3697,106 @@ packages:
typescript: 5.2.2
dev: true
- /@types/babel__core@7.20.1:
- resolution: {integrity: sha512-aACu/U/omhdk15O4Nfb+fHgH/z3QsfQzpnvRZhYhThms83ZnAOZz7zZAWO7mn2yyNQaA4xTO8GLK3uqFU4bYYw==}
+ /@types/babel__core@7.20.2:
+ resolution: {integrity: sha512-pNpr1T1xLUc2l3xJKuPtsEky3ybxN3m4fJkknfIpTCTfIZCDW57oAg+EfCgIIp2rvCe0Wn++/FfodDS4YXxBwA==}
dependencies:
- '@babel/parser': 7.22.16
- '@babel/types': 7.22.17
- '@types/babel__generator': 7.6.4
- '@types/babel__template': 7.4.1
- '@types/babel__traverse': 7.20.1
+ '@babel/parser': 7.23.0
+ '@babel/types': 7.23.0
+ '@types/babel__generator': 7.6.5
+ '@types/babel__template': 7.4.2
+ '@types/babel__traverse': 7.20.2
dev: true
- /@types/babel__generator@7.6.4:
- resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==}
+ /@types/babel__generator@7.6.5:
+ resolution: {integrity: sha512-h9yIuWbJKdOPLJTbmSpPzkF67e659PbQDba7ifWm5BJ8xTv+sDmS7rFmywkWOvXedGTivCdeGSIIX8WLcRTz8w==}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
- /@types/babel__template@7.4.1:
- resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==}
+ /@types/babel__template@7.4.2:
+ resolution: {integrity: sha512-/AVzPICMhMOMYoSx9MoKpGDKdBRsIXMNByh1PXSZoa+v6ZoLa8xxtsT/uLQ/NJm0XVAWl/BvId4MlDeXJaeIZQ==}
dependencies:
- '@babel/parser': 7.22.16
- '@babel/types': 7.22.17
+ '@babel/parser': 7.23.0
+ '@babel/types': 7.23.0
dev: true
- /@types/babel__traverse@7.20.1:
- resolution: {integrity: sha512-MitHFXnhtgwsGZWtT68URpOvLN4EREih1u3QtQiN4VdAxWKRVvGCSvw/Qth0M0Qq3pJpnGOu5JaM/ydK7OGbqg==}
+ /@types/babel__traverse@7.20.2:
+ resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==}
dependencies:
- '@babel/types': 7.22.17
+ '@babel/types': 7.23.0
dev: true
- /@types/body-parser@1.19.2:
- resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==}
+ /@types/body-parser@1.19.3:
+ resolution: {integrity: sha512-oyl4jvAfTGX9Bt6Or4H9ni1Z447/tQuxnZsytsCaExKlmJiU8sFgnIBRzJUpKwB5eWn9HuBYlUlVA74q/yN0eQ==}
dependencies:
'@types/connect': 3.4.36
'@types/node': 20.6.3
- dev: true
- /@types/bonjour@3.5.10:
- resolution: {integrity: sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==}
+ /@types/bonjour@3.5.11:
+ resolution: {integrity: sha512-isGhjmBtLIxdHBDl2xGwUzEM8AOyOvWsADWq7rqirdi/ZQoHnLWErHvsThcEzTX8juDRiZtzp2Qkv5bgNh6mAg==}
dependencies:
'@types/node': 20.6.3
- dev: true
/@types/chai-subset@1.3.3:
resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
dependencies:
'@types/chai': 4.3.6
- dev: true
/@types/chai@4.3.6:
resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==}
- dev: true
/@types/connect-history-api-fallback@1.5.1:
resolution: {integrity: sha512-iaQslNbARe8fctL5Lk+DsmgWOM83lM+7FzP0eQUJs1jd3kBE8NWqBTIT2S8SqQOJjxvt2eyIjpOuYeRXq2AdMw==}
dependencies:
- '@types/express-serve-static-core': 4.17.36
+ '@types/express-serve-static-core': 4.17.37
'@types/node': 20.6.3
- dev: true
/@types/connect@3.4.36:
resolution: {integrity: sha512-P63Zd/JUGq+PdrM1lv0Wv5SBYeA2+CORvbrXbngriYY0jzLUWfQMQQxOhjONEz/wlHOAxOdY7CY65rgQdTjq2w==}
dependencies:
'@types/node': 20.6.3
- dev: true
/@types/deep-equal@1.0.1:
resolution: {integrity: sha512-mMUu4nWHLBlHtxXY17Fg6+ucS/MnndyOWyOe7MmwkoMYxvfQU2ajtRaEvqSUv+aVkMqH/C0NCI8UoVfRNQ10yg==}
dev: true
- /@types/eslint-scope@3.7.4:
- resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==}
+ /@types/eslint-scope@3.7.5:
+ resolution: {integrity: sha512-JNvhIEyxVW6EoMIFIvj93ZOywYFatlpu9deeH6eSx6PE3WHYvHaQtmHmQeNw7aA81bYGBPPQqdtBm6b1SsQMmA==}
dependencies:
- '@types/eslint': 8.44.2
- '@types/estree': 1.0.1
- dev: true
+ '@types/eslint': 8.44.3
+ '@types/estree': 1.0.2
- /@types/eslint@8.44.2:
- resolution: {integrity: sha512-sdPRb9K6iL5XZOmBubg8yiFp5yS/JdUDQsq5e6h95km91MCYMuvp7mh1fjPEYUhvHepKpZOjnEaMBR4PxjWDzg==}
+ /@types/eslint@8.44.3:
+ resolution: {integrity: sha512-iM/WfkwAhwmPff3wZuPLYiHX18HI24jU8k1ZSH7P8FHwxTjZ2P6CoX2wnF43oprR+YXJM6UUxATkNvyv/JHd+g==}
dependencies:
- '@types/estree': 1.0.1
+ '@types/estree': 1.0.2
'@types/json-schema': 7.0.12
- dev: true
/@types/estree@0.0.39:
resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==}
dev: true
- /@types/estree@1.0.1:
- resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
- dev: true
+ /@types/estree@1.0.2:
+ resolution: {integrity: sha512-VeiPZ9MMwXjO32/Xu7+OwflfmeoRwkE/qzndw42gGtgJwZopBnzy2gD//NN1+go1mADzkDcqf/KnFRSjTJ8xJA==}
- /@types/express-serve-static-core@4.17.36:
- resolution: {integrity: sha512-zbivROJ0ZqLAtMzgzIUC4oNqDG9iF0lSsAqpOD9kbs5xcIM3dTiyuHvBc7R8MtWBp3AAWGaovJa+wzWPjLYW7Q==}
+ /@types/express-serve-static-core@4.17.37:
+ resolution: {integrity: sha512-ZohaCYTgGFcOP7u6aJOhY9uIZQgZ2vxC2yWoArY+FeDXlqeH66ZVBjgvg+RLVAS/DWNq4Ap9ZXu1+SUQiiWYMg==}
dependencies:
'@types/node': 20.6.3
'@types/qs': 6.9.8
'@types/range-parser': 1.2.4
'@types/send': 0.17.1
- dev: true
- /@types/express@4.17.17:
- resolution: {integrity: sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==}
+ /@types/express@4.17.18:
+ resolution: {integrity: sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==}
dependencies:
- '@types/body-parser': 1.19.2
- '@types/express-serve-static-core': 4.17.36
+ '@types/body-parser': 1.19.3
+ '@types/express-serve-static-core': 4.17.37
'@types/qs': 6.9.8
'@types/serve-static': 1.15.2
- dev: true
- /@types/graceful-fs@4.1.6:
- resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==}
+ /@types/graceful-fs@4.1.7:
+ resolution: {integrity: sha512-MhzcwU8aUygZroVwL2jeYk6JisJrPl/oov/gsgGCue9mkgl9wjGbzReYQClxiUgFDnib9FuHqTndccKeZKxTRw==}
dependencies:
'@types/node': 20.6.3
dev: true
@@ -3593,15 +3805,13 @@ packages:
resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==}
dev: true
- /@types/http-errors@2.0.1:
- resolution: {integrity: sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==}
- dev: true
+ /@types/http-errors@2.0.2:
+ resolution: {integrity: sha512-lPG6KlZs88gef6aD85z3HNkztpj7w2R7HmR3gygjfXCQmsLloWNARFkMuzKiiY8FGdh1XDpgBdrSf4aKDiA7Kg==}
- /@types/http-proxy@1.17.11:
- resolution: {integrity: sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==}
+ /@types/http-proxy@1.17.12:
+ resolution: {integrity: sha512-kQtujO08dVtQ2wXAuSFfk9ASy3sug4+ogFR8Kd8UgP8PEuc1/G/8yjYRmp//PcDNJEUKOza/MrQu15bouEUCiw==}
dependencies:
'@types/node': 20.6.3
- dev: true
/@types/istanbul-lib-coverage@2.0.4:
resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==}
@@ -3621,7 +3831,6 @@ packages:
/@types/json-schema@7.0.12:
resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
- dev: true
/@types/json5@0.0.29:
resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
@@ -3632,18 +3841,16 @@ packages:
/@types/mime@1.3.2:
resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==}
- dev: true
/@types/mime@3.0.1:
resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==}
- dev: true
/@types/minimist@1.2.2:
resolution: {integrity: sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==}
dev: true
- /@types/node@16.18.50:
- resolution: {integrity: sha512-OiDU5xRgYTJ203v4cprTs0RwOCd5c5Zjv+K5P8KSqfiCsB1W3LcamTUMcnQarpq5kOYbhHfSOgIEJvdPyb5xyw==}
+ /@types/node@16.18.54:
+ resolution: {integrity: sha512-oTmGy68gxZZ21FhTJVVvZBYpQHEBZxHKTsGshobMqm9qWpbqdZsA5jvsuPZcHu0KwpmLrOHWPdEfg7XDpNT9UA==}
dev: true
/@types/node@20.4.7:
@@ -3671,8 +3878,8 @@ packages:
resolution: {integrity: sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA==}
dev: true
- /@types/prop-types@15.7.5:
- resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==}
+ /@types/prop-types@15.7.7:
+ resolution: {integrity: sha512-FbtmBWCcSa2J4zL781Zf1p5YUBXQomPEcep9QZCfRfQgTxz3pJWiDFLebohZ9fFntX5ibzOkSsrJ0TEew8cAog==}
/@types/q@1.5.6:
resolution: {integrity: sha512-IKjZ8RjTSwD4/YG+2gtj7BPFRB/lNbWKTiSj3M7U/TD2B7HfYCxvp2Zz6xA2WIY7pAuL1QOUPw8gQRbUrrq4fQ==}
@@ -3680,10 +3887,14 @@ packages:
/@types/qs@6.9.8:
resolution: {integrity: sha512-u95svzDlTysU5xecFNTgfFG5RUWu1A9P0VzgpcIiGZA9iraHOdSzcxMxQ55DyeRaGCSxQi7LxXDI4rzq/MYfdg==}
- dev: true
/@types/range-parser@1.2.4:
resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==}
+
+ /@types/react-copy-to-clipboard@5.0.5:
+ resolution: {integrity: sha512-en3JGqPA4RX4aUlo6q6uUbnqLp31Dhm2E/thiMvFTIvU+dUDG249jBG2MJ0rPMXE/MbKVrpmi/1r1G4QLhIHKQ==}
+ dependencies:
+ '@types/react': 18.2.22
dev: true
/@types/react-dom@18.2.7:
@@ -3691,18 +3902,10 @@ packages:
dependencies:
'@types/react': 18.2.22
- /@types/react@18.2.21:
- resolution: {integrity: sha512-neFKG/sBAwGxHgXiIxnbm3/AAVQ/cMRS93hvBpg8xYRbeQSPVABp9U2bRnPf0iI4+Ucdv3plSxKK+3CW2ENJxA==}
- dependencies:
- '@types/prop-types': 15.7.5
- '@types/scheduler': 0.16.3
- csstype: 3.1.2
- dev: true
-
/@types/react@18.2.22:
resolution: {integrity: sha512-60fLTOLqzarLED2O3UQImc/lsNRgG0jE/a1mPW9KjMemY0LMITWEsbS4VvZ4p6rorEHd5YKxxmMKSDK505GHpA==}
dependencies:
- '@types/prop-types': 15.7.5
+ '@types/prop-types': 15.7.7
'@types/scheduler': 0.16.3
csstype: 3.1.2
@@ -3714,15 +3917,10 @@ packages:
/@types/retry@0.12.0:
resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==}
- dev: true
/@types/scheduler@0.16.3:
resolution: {integrity: sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ==}
- /@types/semver@7.5.1:
- resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==}
- dev: true
-
/@types/semver@7.5.2:
resolution: {integrity: sha512-7aqorHYgdNO4DM36stTiGO3DvKoex9TQRwsJU6vMaFGyqpBA1MNZkz+PG3gaNUPpTAOYhT1WR7M1JyA3fbS9Cw==}
dev: true
@@ -3732,27 +3930,23 @@ packages:
dependencies:
'@types/mime': 1.3.2
'@types/node': 20.6.3
- dev: true
/@types/serve-index@1.9.1:
resolution: {integrity: sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==}
dependencies:
- '@types/express': 4.17.17
- dev: true
+ '@types/express': 4.17.18
/@types/serve-static@1.15.2:
resolution: {integrity: sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==}
dependencies:
- '@types/http-errors': 2.0.1
+ '@types/http-errors': 2.0.2
'@types/mime': 3.0.1
'@types/node': 20.6.3
- dev: true
/@types/sockjs@0.3.33:
resolution: {integrity: sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==}
dependencies:
'@types/node': 20.6.3
- dev: true
/@types/stack-utils@2.0.1:
resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==}
@@ -3766,22 +3960,21 @@ packages:
resolution: {integrity: sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==}
dependencies:
'@types/node': 20.6.3
- dev: true
- /@types/yargs-parser@21.0.0:
- resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==}
+ /@types/yargs-parser@21.0.1:
+ resolution: {integrity: sha512-axdPBuLuEJt0c4yI5OZssC19K2Mq1uKdrfZBzuxLvaztgqUtFYZUNw7lETExPYJR9jdEoIg4mb7RQKRQzOkeGQ==}
dev: true
- /@types/yargs@16.0.5:
- resolution: {integrity: sha512-AxO/ADJOBFJScHbWhq2xAhlWP24rY4aCEG/NFaMvbT3X2MgRsLjhjQwsn0Zi5zn0LG9jUhCCZMeX9Dkuw6k+vQ==}
+ /@types/yargs@16.0.6:
+ resolution: {integrity: sha512-oTP7/Q13GSPrgcwEwdlnkoZSQ1Hg9THe644qq8PG6hhJzjZ3qj1JjEFPIwWV/IXVs5XGIVqtkNOS9kh63WIJ+A==}
dependencies:
- '@types/yargs-parser': 21.0.0
+ '@types/yargs-parser': 21.0.1
dev: true
- /@types/yargs@17.0.24:
- resolution: {integrity: sha512-6i0aC7jV6QzQB8ne1joVZ0eSFIstHsCrobmOtghM11yGlH0j43FKL2UhWdELkyps0zuf7qVTUVCCR+tgSlyLLw==}
+ /@types/yargs@17.0.25:
+ resolution: {integrity: sha512-gy7iPgwnzNvxgAEi2bXOHWCVOG6f7xsprVJH4MjlAWeBmJ7vh/Y1kwMtUrs64ztf24zVIRCpr3n/z6gm9QIkgg==}
dependencies:
- '@types/yargs-parser': 21.0.0
+ '@types/yargs-parser': 21.0.1
dev: true
/@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.49.0)(typescript@5.2.2):
@@ -4053,6 +4246,31 @@ packages:
'@typescript-eslint/types': 6.7.0
eslint-visitor-keys: 3.4.3
+ /@uniswap/token-lists@1.0.0-beta.33:
+ resolution: {integrity: sha512-JQkXcpRI3jFG8y3/CGC4TS8NkDgcxXaOQuYW8Qdvd6DcDiIyg2vVYCG9igFEzF0G6UvxgHkBKC7cWCgzZNYvQg==}
+ engines: {node: '>=10'}
+ dev: false
+
+ /@usedapp/core@1.2.13(ethers@5.7.2)(react@18.2.0):
+ resolution: {integrity: sha512-mlWIIXvWdu+f3J0DCNNiPd9blTzuknQvTNy0yX61x/XDoZNqoPfs+0ALMndvmPKN8VMNbo0fwTjoR3R8rNfx9g==}
+ hasBin: true
+ peerDependencies:
+ ethers: ^5
+ react: '*'
+ dependencies:
+ '@metamask/detect-provider': 2.0.0
+ '@uniswap/token-lists': 1.0.0-beta.33
+ ethers: 5.7.2
+ fetch-mock: 9.11.0
+ lodash.merge: 4.6.2
+ lodash.pickby: 4.6.0
+ nanoid: 3.3.4
+ react: 18.2.0
+ transitivePeerDependencies:
+ - node-fetch
+ - supports-color
+ dev: false
+
/@vitest/coverage-v8@0.34.4(vitest@0.34.4):
resolution: {integrity: sha512-TZ5ghzhmg3COQqfBShL+zRQEInHmV9TSwghTdfkHpCTyTOr+rxo6x41vCNcVfWysWULtqtBVpY6YFNovxnESfA==}
peerDependencies:
@@ -4080,7 +4298,6 @@ packages:
'@vitest/spy': 0.34.4
'@vitest/utils': 0.34.4
chai: 4.3.8
- dev: true
/@vitest/runner@0.34.4:
resolution: {integrity: sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==}
@@ -4088,7 +4305,6 @@ packages:
'@vitest/utils': 0.34.4
p-limit: 4.0.0
pathe: 1.1.1
- dev: true
/@vitest/snapshot@0.34.4:
resolution: {integrity: sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==}
@@ -4096,13 +4312,11 @@ packages:
magic-string: 0.30.3
pathe: 1.1.1
pretty-format: 29.7.0
- dev: true
/@vitest/spy@0.34.4:
resolution: {integrity: sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==}
dependencies:
tinyspy: 2.1.1
- dev: true
/@vitest/utils@0.34.4:
resolution: {integrity: sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==}
@@ -4110,26 +4324,21 @@ packages:
diff-sequences: 29.6.3
loupe: 2.3.6
pretty-format: 29.7.0
- dev: true
/@webassemblyjs/ast@1.11.6:
resolution: {integrity: sha512-IN1xI7PwOvLPgjcf180gC1bqn3q/QaOCwYUahIOhbYUu8KA/3tw2RT/T0Gidi1l7Hhj5D/INhJxiICObqpMu4Q==}
dependencies:
'@webassemblyjs/helper-numbers': 1.11.6
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
- dev: true
/@webassemblyjs/floating-point-hex-parser@1.11.6:
resolution: {integrity: sha512-ejAj9hfRJ2XMsNHk/v6Fu2dGS+i4UaXBXGemOfQ/JfQ6mdQg/WXtwleQRLLS4OvfDhv8rYnVwH27YJLMyYsxhw==}
- dev: true
/@webassemblyjs/helper-api-error@1.11.6:
resolution: {integrity: sha512-o0YkoP4pVu4rN8aTJgAyj9hC2Sv5UlkzCHhxqWj8butaLvnpdc2jOwh4ewE6CX0txSfLn/UYaV/pheS2Txg//Q==}
- dev: true
/@webassemblyjs/helper-buffer@1.11.6:
resolution: {integrity: sha512-z3nFzdcp1mb8nEOFFk8DrYLpHvhKC3grJD2ardfKOzmbmJvEf/tPIqCY+sNcwZIY8ZD7IkB2l7/pqhUhqm7hLA==}
- dev: true
/@webassemblyjs/helper-numbers@1.11.6:
resolution: {integrity: sha512-vUIhZ8LZoIWHBohiEObxVm6hwP034jwmc9kuq5GdHZH0wiLVLIPcMCdpJzG4C11cHoQ25TFIQj9kaVADVX7N3g==}
@@ -4137,11 +4346,9 @@ packages:
'@webassemblyjs/floating-point-hex-parser': 1.11.6
'@webassemblyjs/helper-api-error': 1.11.6
'@xtuc/long': 4.2.2
- dev: true
/@webassemblyjs/helper-wasm-bytecode@1.11.6:
resolution: {integrity: sha512-sFFHKwcmBprO9e7Icf0+gddyWYDViL8bpPjJJl0WHxCdETktXdmtWLGVzoHbqUcY4Be1LkNfwTmXOJUFZYSJdA==}
- dev: true
/@webassemblyjs/helper-wasm-section@1.11.6:
resolution: {integrity: sha512-LPpZbSOwTpEC2cgn4hTydySy1Ke+XEu+ETXuoyvuyezHO3Kjdu90KK95Sh9xTbmjrCsUwvWwCOQQNta37VrS9g==}
@@ -4150,23 +4357,19 @@ packages:
'@webassemblyjs/helper-buffer': 1.11.6
'@webassemblyjs/helper-wasm-bytecode': 1.11.6
'@webassemblyjs/wasm-gen': 1.11.6
- dev: true
/@webassemblyjs/ieee754@1.11.6:
resolution: {integrity: sha512-LM4p2csPNvbij6U1f19v6WR56QZ8JcHg3QIJTlSwzFcmx6WSORicYj6I63f9yU1kEUtrpG+kjkiIAkevHpDXrg==}
dependencies:
'@xtuc/ieee754': 1.2.0
- dev: true
/@webassemblyjs/leb128@1.11.6:
resolution: {integrity: sha512-m7a0FhE67DQXgouf1tbN5XQcdWoNgaAuoULHIfGFIEVKA6tu/edls6XnIlkmS6FrXAquJRPni3ZZKjw6FSPjPQ==}
dependencies:
'@xtuc/long': 4.2.2
- dev: true
/@webassemblyjs/utf8@1.11.6:
resolution: {integrity: sha512-vtXf2wTQ3+up9Zsg8sa2yWiQpzSsMyXj0qViVP6xKGCUT8p8YJ6HqI7l5eCnWx1T/FYdsv07HQs2wTFbbof/RA==}
- dev: true
/@webassemblyjs/wasm-edit@1.11.6:
resolution: {integrity: sha512-Ybn2I6fnfIGuCR+Faaz7YcvtBKxvoLV3Lebn1tM4o/IAJzmi9AWYIPWpyBfU8cC+JxAO57bk4+zdsTjJR+VTOw==}
@@ -4179,7 +4382,6 @@ packages:
'@webassemblyjs/wasm-opt': 1.11.6
'@webassemblyjs/wasm-parser': 1.11.6
'@webassemblyjs/wast-printer': 1.11.6
- dev: true
/@webassemblyjs/wasm-gen@1.11.6:
resolution: {integrity: sha512-3XOqkZP/y6B4F0PBAXvI1/bky7GryoogUtfwExeP/v7Nzwo1QLcq5oQmpKlftZLbT+ERUOAZVQjuNVak6UXjPA==}
@@ -4189,7 +4391,6 @@ packages:
'@webassemblyjs/ieee754': 1.11.6
'@webassemblyjs/leb128': 1.11.6
'@webassemblyjs/utf8': 1.11.6
- dev: true
/@webassemblyjs/wasm-opt@1.11.6:
resolution: {integrity: sha512-cOrKuLRE7PCe6AsOVl7WasYf3wbSo4CeOk6PkrjS7g57MFfVUF9u6ysQBBODX0LdgSvQqRiGz3CXvIDKcPNy4g==}
@@ -4198,7 +4399,6 @@ packages:
'@webassemblyjs/helper-buffer': 1.11.6
'@webassemblyjs/wasm-gen': 1.11.6
'@webassemblyjs/wasm-parser': 1.11.6
- dev: true
/@webassemblyjs/wasm-parser@1.11.6:
resolution: {integrity: sha512-6ZwPeGzMJM3Dqp3hCsLgESxBGtT/OeCvCZ4TA1JUPYgmhAx38tTPR9JaKy0S5H3evQpO/h2uWs2j6Yc/fjkpTQ==}
@@ -4209,14 +4409,12 @@ packages:
'@webassemblyjs/ieee754': 1.11.6
'@webassemblyjs/leb128': 1.11.6
'@webassemblyjs/utf8': 1.11.6
- dev: true
/@webassemblyjs/wast-printer@1.11.6:
resolution: {integrity: sha512-JM7AhRcE+yW2GWYaKeHL5vt4xqee5N2WcezptmgyhNS+ScggqcT1OtXykhAb13Sn5Yas0j2uv9tHgrjwvzAP4A==}
dependencies:
'@webassemblyjs/ast': 1.11.6
'@xtuc/long': 4.2.2
- dev: true
/@webpack-cli/configtest@1.2.0(webpack-cli@4.10.0)(webpack@5.88.2):
resolution: {integrity: sha512-4FB8Tj6xyVkyqjj1OaTqCjXYULB9FMkqQ8yGrZjRDrYh0nOE+7Lhs45WioWQQMV+ceFlE368Ukhe6xdvJM9Egg==}
@@ -4226,7 +4424,6 @@ packages:
dependencies:
webpack: 5.88.2(webpack-cli@4.10.0)
webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
- dev: true
/@webpack-cli/info@1.5.0(webpack-cli@4.10.0):
resolution: {integrity: sha512-e8tSXZpw2hPl2uMJY6fsMswaok5FdlGNRTktvFk2sD8RjH0hE2+XistawJx1vmKteh4NmGmNUrp+Tb2w+udPcQ==}
@@ -4235,7 +4432,6 @@ packages:
dependencies:
envinfo: 7.10.0
webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
- dev: true
/@webpack-cli/serve@1.7.0(webpack-cli@4.10.0)(webpack-dev-server@4.15.1):
resolution: {integrity: sha512-oxnCNGj88fL+xzV+dacXs44HcDwf1ovs3AuEzvP7mqXw7fQntqIhQ1BRmynh4qEKQSSSRSWVyXRjmTbZIX9V2Q==}
@@ -4248,15 +4444,12 @@ packages:
dependencies:
webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
- dev: true
/@xtuc/ieee754@1.2.0:
resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==}
- dev: true
/@xtuc/long@4.2.2:
resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==}
- dev: true
/JSONStream@1.3.5:
resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==}
@@ -4276,7 +4469,6 @@ packages:
dependencies:
mime-types: 2.1.35
negotiator: 0.6.3
- dev: true
/acorn-globals@6.0.0:
resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==}
@@ -4291,7 +4483,6 @@ packages:
acorn: ^8
dependencies:
acorn: 8.10.0
- dev: true
/acorn-jsx@5.3.2(acorn@8.10.0):
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
@@ -4308,7 +4499,6 @@ packages:
/acorn-walk@8.2.0:
resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
engines: {node: '>=0.4.0'}
- dev: true
/acorn@7.4.1:
resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==}
@@ -4359,7 +4549,6 @@ packages:
optional: true
dependencies:
ajv: 8.12.0
- dev: true
/ajv-keywords@3.5.2(ajv@6.12.6):
resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==}
@@ -4367,7 +4556,6 @@ packages:
ajv: ^6.9.1
dependencies:
ajv: 6.12.6
- dev: true
/ajv-keywords@5.1.0(ajv@8.12.0):
resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==}
@@ -4376,7 +4564,6 @@ packages:
dependencies:
ajv: 8.12.0
fast-deep-equal: 3.1.3
- dev: true
/ajv@6.12.6:
resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
@@ -4388,12 +4575,12 @@ packages:
/ajv@8.12.0:
resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==}
+ requiresBuild: true
dependencies:
fast-deep-equal: 3.1.3
json-schema-traverse: 1.0.0
require-from-string: 2.0.2
uri-js: 4.4.1
- dev: true
/ansi-escapes@4.3.2:
resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
@@ -4406,7 +4593,6 @@ packages:
resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==}
engines: {'0': node >= 0.8.0}
hasBin: true
- dev: true
/ansi-regex@5.0.1:
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
@@ -4426,7 +4612,6 @@ packages:
engines: {node: '>=4'}
dependencies:
color-convert: 1.9.3
- dev: true
/ansi-styles@4.3.0:
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
@@ -4437,7 +4622,6 @@ packages:
/ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- dev: true
/any-promise@1.3.0:
resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==}
@@ -4449,7 +4633,6 @@ packages:
dependencies:
normalize-path: 3.0.0
picomatch: 2.3.1
- dev: true
/arg@4.1.3:
resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==}
@@ -4491,11 +4674,9 @@ packages:
/array-flatten@1.1.1:
resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==}
- dev: true
/array-flatten@2.1.2:
resolution: {integrity: sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==}
- dev: true
/array-ify@1.0.0:
resolution: {integrity: sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==}
@@ -4603,7 +4784,6 @@ packages:
/assertion-error@1.1.0:
resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
- dev: true
/ast-types-flow@0.0.7:
resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
@@ -4625,15 +4805,15 @@ packages:
engines: {node: '>= 4.0.0'}
dev: true
- /autoprefixer@10.4.15(postcss@8.4.29):
- resolution: {integrity: sha512-KCuPB8ZCIqFdA4HwKXsvz7j6gvSDNhDP7WnUjBleRkKjPdvCmHFuQ77ocavI8FT6NdvlBnE2UFr2H4Mycn8Vew==}
+ /autoprefixer@10.4.16(postcss@8.4.29):
+ resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==}
engines: {node: ^10 || ^12 || >=14}
hasBin: true
peerDependencies:
postcss: ^8.1.0
dependencies:
- browserslist: 4.21.10
- caniuse-lite: 1.0.30001533
+ browserslist: 4.21.11
+ caniuse-lite: 1.0.30001539
fraction.js: 4.3.6
normalize-range: 0.1.2
picocolors: 1.0.0
@@ -4645,8 +4825,8 @@ packages:
resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
engines: {node: '>= 0.4'}
- /axe-core@4.8.1:
- resolution: {integrity: sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==}
+ /axe-core@4.8.2:
+ resolution: {integrity: sha512-/dlp0fxyM3R8YW7MFzaHWXrf4zzbr0vaYb23VBFCl83R7nWNPg/yaQw2Dc8jzCMmDVLhSdzH8MjrsuIUuvX+6g==}
engines: {node: '>=4'}
/axios-retry@3.7.0:
@@ -4670,18 +4850,18 @@ packages:
dependencies:
dequal: 2.0.3
- /babel-jest@27.5.1(@babel/core@7.22.17):
+ /babel-jest@27.5.1(@babel/core@7.23.0):
resolution: {integrity: sha512-cdQ5dXjGRd0IBRATiQ4mZGlGlRE8kJpjPOixdNRdT+m3UcNqmYWN6rK6nvtXYfY3D76cb8s/O1Ss8ea24PIwcg==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
peerDependencies:
'@babel/core': ^7.8.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/babel__core': 7.20.1
+ '@types/babel__core': 7.20.2
babel-plugin-istanbul: 6.1.1
- babel-preset-jest: 27.5.1(@babel/core@7.22.17)
+ babel-preset-jest: 27.5.1(@babel/core@7.23.0)
chalk: 4.1.2
graceful-fs: 4.2.11
slash: 3.0.0
@@ -4689,14 +4869,14 @@ packages:
- supports-color
dev: true
- /babel-loader@8.3.0(@babel/core@7.22.17)(webpack@5.88.2):
+ /babel-loader@8.3.0(@babel/core@7.23.0)(webpack@5.88.2):
resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==}
engines: {node: '>= 8.9'}
peerDependencies:
'@babel/core': ^7.0.0
webpack: '>=2'
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
find-cache-dir: 3.3.2
loader-utils: 2.0.4
make-dir: 3.1.0
@@ -4722,9 +4902,9 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@babel/template': 7.22.15
- '@babel/types': 7.22.17
- '@types/babel__core': 7.20.1
- '@types/babel__traverse': 7.20.1
+ '@babel/types': 7.23.0
+ '@types/babel__core': 7.20.2
+ '@types/babel__traverse': 7.20.2
dev: true
/babel-plugin-macros@3.1.0:
@@ -4736,46 +4916,46 @@ packages:
resolve: 1.22.4
dev: true
- /babel-plugin-named-asset-import@0.3.8(@babel/core@7.22.17):
+ /babel-plugin-named-asset-import@0.3.8(@babel/core@7.23.0):
resolution: {integrity: sha512-WXiAc++qo7XcJ1ZnTYGtLxmBCVbddAml3CEXgWaBzNzLNoxtQ8AiGEFDMOhot9XjTCQbvP5E77Fj9Gk924f00Q==}
peerDependencies:
'@babel/core': ^7.1.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
dev: true
- /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.22.17):
+ /babel-plugin-polyfill-corejs2@0.4.5(@babel/core@7.23.0):
resolution: {integrity: sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
dependencies:
- '@babel/compat-data': 7.22.9
- '@babel/core': 7.22.17
- '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.17)
+ '@babel/compat-data': 7.22.20
+ '@babel/core': 7.23.0
+ '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0)
semver: 6.3.1
transitivePeerDependencies:
- supports-color
dev: true
- /babel-plugin-polyfill-corejs3@0.8.3(@babel/core@7.22.17):
- resolution: {integrity: sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==}
+ /babel-plugin-polyfill-corejs3@0.8.4(@babel/core@7.23.0):
+ resolution: {integrity: sha512-9l//BZZsPR+5XjyJMPtZSK4jv0BsTO1zDac2GC6ygx9WLGlcsnRd1Co0B2zT5fF5Ic6BZy+9m3HNZ3QcOeDKfg==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0)
core-js-compat: 3.32.2
transitivePeerDependencies:
- supports-color
dev: true
- /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.22.17):
+ /babel-plugin-polyfill-regenerator@0.5.2(@babel/core@7.23.0):
resolution: {integrity: sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==}
peerDependencies:
'@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/helper-define-polyfill-provider': 0.4.2(@babel/core@7.23.0)
transitivePeerDependencies:
- supports-color
dev: true
@@ -4784,54 +4964,54 @@ packages:
resolution: {integrity: sha512-eqj0hVcJUR57/Ug2zE1Yswsw4LhuqqHhD+8v120T1cl3kjg76QwtyBrdIk4WVwK+lAhBJVYCd/v+4nc4y+8JsA==}
dev: true
- /babel-preset-current-node-syntax@1.0.1(@babel/core@7.22.17):
+ /babel-preset-current-node-syntax@1.0.1(@babel/core@7.23.0):
resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
- '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.22.17)
- '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.22.17)
- '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.22.17)
- '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.22.17)
- dev: true
-
- /babel-preset-jest@27.5.1(@babel/core@7.22.17):
+ '@babel/core': 7.23.0
+ '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.23.0)
+ '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.23.0)
+ '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.23.0)
+ '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.23.0)
+ dev: true
+
+ /babel-preset-jest@27.5.1(@babel/core@7.23.0):
resolution: {integrity: sha512-Nptf2FzlPCWYuJg41HBqXVT8ym6bXOevuCTbhxlUpjwtysGaIWFvDEjp4y+G7fl13FgOdjs7P/DmErqH7da0Ag==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
peerDependencies:
'@babel/core': ^7.0.0
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
babel-plugin-jest-hoist: 27.5.1
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.17)
+ babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0)
dev: true
/babel-preset-react-app@10.0.1:
resolution: {integrity: sha512-b0D9IZ1WhhCWkrTXyFuIIgqGzSkRIH5D5AmB0bXbzYAB1OBAwHcUeyWW2LorutLWF5btNo/N7r/cIdmvvKJlYg==}
dependencies:
- '@babel/core': 7.22.17
- '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.22.17)
- '@babel/plugin-proposal-decorators': 7.22.15(@babel/core@7.22.17)
- '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.22.17)
- '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.22.17)
- '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.22.17)
- '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.22.17)
- '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.22.17)
- '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-runtime': 7.22.15(@babel/core@7.22.17)
- '@babel/preset-env': 7.22.15(@babel/core@7.22.17)
- '@babel/preset-react': 7.22.15(@babel/core@7.22.17)
- '@babel/preset-typescript': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/plugin-proposal-class-properties': 7.18.6(@babel/core@7.23.0)
+ '@babel/plugin-proposal-decorators': 7.23.0(@babel/core@7.23.0)
+ '@babel/plugin-proposal-nullish-coalescing-operator': 7.18.6(@babel/core@7.23.0)
+ '@babel/plugin-proposal-numeric-separator': 7.18.6(@babel/core@7.23.0)
+ '@babel/plugin-proposal-optional-chaining': 7.21.0(@babel/core@7.23.0)
+ '@babel/plugin-proposal-private-methods': 7.18.6(@babel/core@7.23.0)
+ '@babel/plugin-proposal-private-property-in-object': 7.21.11(@babel/core@7.23.0)
+ '@babel/plugin-transform-flow-strip-types': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-react-display-name': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-runtime': 7.22.15(@babel/core@7.23.0)
+ '@babel/preset-env': 7.22.20(@babel/core@7.23.0)
+ '@babel/preset-react': 7.22.15(@babel/core@7.23.0)
+ '@babel/preset-typescript': 7.23.0(@babel/core@7.23.0)
'@babel/runtime': 7.22.15
babel-plugin-macros: 3.1.0
babel-plugin-transform-react-remove-prop-types: 0.4.24
@@ -4844,11 +5024,9 @@ packages:
/base64-js@1.5.1:
resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==}
- dev: true
/batch@0.6.1:
resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==}
- dev: true
/bech32@1.1.4:
resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==}
@@ -4866,12 +5044,10 @@ packages:
/big.js@5.2.2:
resolution: {integrity: sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==}
- dev: true
/binary-extensions@2.2.0:
resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
engines: {node: '>=8'}
- dev: true
/bl@4.1.0:
resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==}
@@ -4909,7 +5085,6 @@ packages:
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
- dev: true
/bonjour-service@1.1.1:
resolution: {integrity: sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==}
@@ -4918,7 +5093,6 @@ packages:
dns-equal: 1.0.0
fast-deep-equal: 3.1.3
multicast-dns: 7.2.5
- dev: true
/boolbase@1.0.0:
resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==}
@@ -4956,16 +5130,15 @@ packages:
resolution: {integrity: sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==}
dev: true
- /browserslist@4.21.10:
- resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==}
+ /browserslist@4.21.11:
+ resolution: {integrity: sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==}
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
hasBin: true
dependencies:
- caniuse-lite: 1.0.30001533
- electron-to-chromium: 1.4.516
+ caniuse-lite: 1.0.30001539
+ electron-to-chromium: 1.4.528
node-releases: 2.0.13
- update-browserslist-db: 1.0.11(browserslist@4.21.10)
- dev: true
+ update-browserslist-db: 1.0.13(browserslist@4.21.11)
/bser@2.1.1:
resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==}
@@ -4975,7 +5148,6 @@ packages:
/buffer-from@1.1.2:
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
- dev: true
/buffer@5.7.1:
resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==}
@@ -4984,6 +5156,13 @@ packages:
ieee754: 1.2.1
dev: true
+ /buffer@6.0.3:
+ resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==}
+ dependencies:
+ base64-js: 1.5.1
+ ieee754: 1.2.1
+ dev: false
+
/builtin-modules@3.3.0:
resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
engines: {node: '>=6'}
@@ -5026,17 +5205,14 @@ packages:
/bytes@3.0.0:
resolution: {integrity: sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==}
engines: {node: '>= 0.8'}
- dev: true
/bytes@3.1.2:
resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==}
engines: {node: '>= 0.8'}
- dev: true
/cac@6.7.14:
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
engines: {node: '>=8'}
- dev: true
/cachedir@2.3.0:
resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
@@ -5087,14 +5263,14 @@ packages:
/caniuse-api@3.0.0:
resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==}
dependencies:
- browserslist: 4.21.10
- caniuse-lite: 1.0.30001533
+ browserslist: 4.21.11
+ caniuse-lite: 1.0.30001539
lodash.memoize: 4.1.2
lodash.uniq: 4.5.0
dev: true
- /caniuse-lite@1.0.30001533:
- resolution: {integrity: sha512-9aY/b05NKU4Yl2sbcJhn4A7MsGwR1EPfW/nrqsnqVA0Oq50wpmPaGI+R1Z0UKlUl96oxUkGEOILWtOHck0eCWw==}
+ /caniuse-lite@1.0.30001539:
+ resolution: {integrity: sha512-hfS5tE8bnNiNvEOEkm8HElUHroYwlqMMENEzELymy77+tJ6m+gA2krtHl5hxJaj71OlpC2cHZbdSMX1/YEqEkA==}
/case-sensitive-paths-webpack-plugin@2.4.0:
resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==}
@@ -5112,7 +5288,6 @@ packages:
loupe: 2.3.6
pathval: 1.1.1
type-detect: 4.0.8
- dev: true
/chalk@2.4.2:
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
@@ -5121,7 +5296,6 @@ packages:
ansi-styles: 3.2.1
escape-string-regexp: 1.0.5
supports-color: 5.5.0
- dev: true
/chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -5146,7 +5320,6 @@ packages:
/check-error@1.0.2:
resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
- dev: true
/check-types@11.2.3:
resolution: {integrity: sha512-+67P1GkJRaxQD6PKK0Et9DhwQB+vGg3PM5+aavopCpZT1lj9jeqfvpgTLAWErNj8qApkkmXlu/Ug74kmhagkXg==}
@@ -5165,12 +5338,10 @@ packages:
readdirp: 3.6.0
optionalDependencies:
fsevents: 2.3.3
- dev: true
/chrome-trace-event@1.0.3:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
engines: {node: '>=6.0'}
- dev: true
/ci-info@3.8.0:
resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
@@ -5224,7 +5395,6 @@ packages:
is-plain-object: 2.0.4
kind-of: 6.0.3
shallow-clone: 3.0.1
- dev: true
/clone@1.0.4:
resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==}
@@ -5253,7 +5423,6 @@ packages:
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
dependencies:
color-name: 1.1.3
- dev: true
/color-convert@2.0.1:
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
@@ -5263,7 +5432,6 @@ packages:
/color-name@1.1.3:
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
- dev: true
/color-name@1.1.4:
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
@@ -5274,7 +5442,6 @@ packages:
/colorette@2.0.20:
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
- dev: true
/combined-stream@1.0.8:
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
@@ -5309,7 +5476,6 @@ packages:
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
- dev: true
/commander@4.1.1:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
@@ -5319,7 +5485,6 @@ packages:
/commander@7.2.0:
resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==}
engines: {node: '>= 10'}
- dev: true
/commander@8.3.0:
resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
@@ -5380,7 +5545,6 @@ packages:
engines: {node: '>= 0.6'}
dependencies:
mime-db: 1.52.0
- dev: true
/compression@1.7.4:
resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==}
@@ -5395,7 +5559,6 @@ packages:
vary: 1.1.2
transitivePeerDependencies:
- supports-color
- dev: true
/concat-map@0.0.1:
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
@@ -5417,19 +5580,16 @@ packages:
/connect-history-api-fallback@2.0.0:
resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==}
engines: {node: '>=0.8'}
- dev: true
/content-disposition@0.5.4:
resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==}
engines: {node: '>= 0.6'}
dependencies:
safe-buffer: 5.2.1
- dev: true
/content-type@1.0.5:
resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==}
engines: {node: '>= 0.6'}
- dev: true
/conventional-changelog-angular@5.0.13:
resolution: {integrity: sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==}
@@ -5604,14 +5764,21 @@ packages:
resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==}
dev: true
+ /convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
/cookie-signature@1.0.6:
resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==}
- dev: true
/cookie@0.5.0:
resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==}
engines: {node: '>= 0.6'}
- dev: true
+
+ /copy-to-clipboard@3.3.3:
+ resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==}
+ dependencies:
+ toggle-selection: 1.0.6
+ dev: false
/copy-webpack-plugin@10.2.4(webpack@5.88.2):
resolution: {integrity: sha512-xFVltahqlsRcyyJqQbDY6EYTtyQZF9rf+JPjwHObLdPFMEISqkFkr7mFoVOC6BfYS/dNThyoQKvziugm+OnwBg==}
@@ -5628,10 +5795,25 @@ packages:
webpack: 5.88.2(webpack-cli@4.10.0)
dev: true
+ /copy-webpack-plugin@11.0.0(webpack@5.88.2):
+ resolution: {integrity: sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==}
+ engines: {node: '>= 14.15.0'}
+ peerDependencies:
+ webpack: ^5.1.0
+ dependencies:
+ fast-glob: 3.3.1
+ glob-parent: 6.0.2
+ globby: 13.2.2
+ normalize-path: 3.0.0
+ schema-utils: 4.2.0
+ serialize-javascript: 6.0.1
+ webpack: 5.88.2(webpack-cli@4.10.0)
+ dev: true
+
/core-js-compat@3.32.2:
resolution: {integrity: sha512-+GjlguTDINOijtVRUxrQOv3kfu9rl+qPNdX2LTbJ/ZyVTuxK+ksVSAGX1nHstu4hrv1En/uPTtWgq2gI5wt4AQ==}
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
dev: true
/core-js-pure@3.32.2:
@@ -5642,11 +5824,9 @@ packages:
/core-js@3.32.2:
resolution: {integrity: sha512-pxXSw1mYZPDGvTQqEc5vgIb83jGQKFGYWY76z4a7weZXUolw3G+OvpZqSRcfYOoOVUQJYEPsWeQK8pKEnUtWxQ==}
requiresBuild: true
- dev: true
/core-util-is@1.0.3:
resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
- dev: true
/cosmiconfig-typescript-loader@4.4.0(@types/node@20.4.7)(cosmiconfig@8.3.6)(ts-node@10.9.1)(typescript@5.2.2):
resolution: {integrity: sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==}
@@ -6014,7 +6194,6 @@ packages:
optional: true
dependencies:
ms: 2.0.0
- dev: true
/debug@3.2.7:
resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
@@ -6063,7 +6242,6 @@ packages:
engines: {node: '>=6'}
dependencies:
type-detect: 4.0.8
- dev: true
/deep-equal@2.2.2:
resolution: {integrity: sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA==}
@@ -6106,7 +6284,6 @@ packages:
engines: {node: '>= 10'}
dependencies:
execa: 5.1.1
- dev: true
/defaults@1.0.4:
resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==}
@@ -6125,7 +6302,6 @@ packages:
/define-lazy-prop@2.0.0:
resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
engines: {node: '>=8'}
- dev: true
/define-properties@1.2.1:
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
@@ -6142,12 +6318,10 @@ packages:
/depd@1.1.2:
resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==}
engines: {node: '>= 0.6'}
- dev: true
/depd@2.0.0:
resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==}
engines: {node: '>= 0.8'}
- dev: true
/dequal@2.0.3:
resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
@@ -6156,7 +6330,6 @@ packages:
/destroy@1.2.0:
resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==}
engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16}
- dev: true
/detect-file@1.0.0:
resolution: {integrity: sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==}
@@ -6185,7 +6358,6 @@ packages:
/detect-node@2.1.0:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
- dev: true
/detect-port-alt@1.1.6:
resolution: {integrity: sha512-5tQykt+LqfJFBEYaDITx7S7cR7mJ/zQmLXZ2qt5w04ainYZw6tBf9dBunMjVeVOdYVRUzUOE4HkY5J7+uttb5Q==}
@@ -6210,7 +6382,6 @@ packages:
/diff-sequences@29.6.3:
resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- dev: true
/diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
@@ -6229,14 +6400,12 @@ packages:
/dns-equal@1.0.0:
resolution: {integrity: sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==}
- dev: true
/dns-packet@5.6.1:
resolution: {integrity: sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==}
engines: {node: '>=6'}
dependencies:
'@leichtgewicht/ip-codec': 2.0.4
- dev: true
/doctrine@2.1.0:
resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
@@ -6331,6 +6500,11 @@ packages:
engines: {node: '>=10'}
dev: true
+ /dotenv@16.3.1:
+ resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==}
+ engines: {node: '>=12'}
+ dev: false
+
/dotgitignore@2.1.0:
resolution: {integrity: sha512-sCm11ak2oY6DglEPpCB8TixLjWAxd3kJTs6UIcSasNYxXdFPV+YKlye92c8H4kKFqV5qYMIh7d+cYecEg0dIkA==}
engines: {node: '>=6'}
@@ -6349,7 +6523,6 @@ packages:
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
- dev: true
/ejs@3.1.9:
resolution: {integrity: sha512-rC+QVNMJWv+MtPgkt0y+0rVEIdbtxVADApW9JXrUVlzHetgcyczP/E7DJmWJ4fJCZF2cPcBk0laWO9ZHMG3DmQ==}
@@ -6359,9 +6532,8 @@ packages:
jake: 10.8.7
dev: true
- /electron-to-chromium@1.4.516:
- resolution: {integrity: sha512-A8xs6nie7jw/9GFRrCPrrE+maux1M3gSnFe1HVstK6ubH+7v5hMDFq3qoNxTRssYyz6jdzk/1wLebT+9tisLKA==}
- dev: true
+ /electron-to-chromium@1.4.528:
+ resolution: {integrity: sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==}
/elliptic@6.5.4:
resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
@@ -6398,12 +6570,10 @@ packages:
/emojis-list@3.0.0:
resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==}
engines: {node: '>= 4'}
- dev: true
/encodeurl@1.0.2:
resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==}
engines: {node: '>= 0.8'}
- dev: true
/enhanced-resolve@5.15.0:
resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
@@ -6420,7 +6590,6 @@ packages:
resolution: {integrity: sha512-ZtUjZO6l5mwTHvc1L9+1q5p/R3wTopcfqMW8r5t8SJSKqeVI/LtajORwRFEKpEFuekjD0VBjwu1HMxL4UalIRw==}
engines: {node: '>=4'}
hasBin: true
- dev: true
/error-ex@1.3.2:
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
@@ -6496,8 +6665,8 @@ packages:
stop-iteration-iterator: 1.0.0
dev: false
- /es-iterator-helpers@1.0.14:
- resolution: {integrity: sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==}
+ /es-iterator-helpers@1.0.15:
+ resolution: {integrity: sha512-GhoY8uYqd6iwUl2kgjTm4CZAf6oo5mHK7BPqx3rKgx893YSsy0LGHV6gfqqQvZt/8xM8xeOnfXBCfqclMKkJ5g==}
dependencies:
asynciterator.prototype: 1.0.0
call-bind: 1.0.2
@@ -6511,12 +6680,11 @@ packages:
has-proto: 1.0.1
has-symbols: 1.0.3
internal-slot: 1.0.5
- iterator.prototype: 1.1.1
+ iterator.prototype: 1.1.2
safe-array-concat: 1.0.1
/es-module-lexer@1.3.1:
resolution: {integrity: sha512-JUFAyicQV9mXc3YRxPnDlrfBKpqt6hUYzz9/boprUJHs4e4KVr3XwOF70doO6gwXUor6EWZJAyWAfKki84t20Q==}
- dev: true
/es-set-tostringtag@2.0.1:
resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
@@ -6611,21 +6779,17 @@ packages:
'@esbuild/win32-arm64': 0.18.20
'@esbuild/win32-ia32': 0.18.20
'@esbuild/win32-x64': 0.18.20
- dev: true
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
- dev: true
/escape-html@1.0.3:
resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==}
- dev: true
/escape-string-regexp@1.0.5:
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
engines: {node: '>=0.8.0'}
- dev: true
/escape-string-regexp@2.0.0:
resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==}
@@ -6671,12 +6835,12 @@ packages:
optional: true
dependencies:
'@next/eslint-plugin-next': 13.5.2
- '@rushstack/eslint-patch': 1.3.3
+ '@rushstack/eslint-patch': 1.4.0
'@typescript-eslint/parser': 6.7.0(eslint@8.49.0)(typescript@5.2.2)
eslint: 8.49.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.49.0)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.49.0)
+ eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0)
eslint-plugin-jsx-a11y: 6.7.1(eslint@8.49.0)
eslint-plugin-react: 7.33.2(eslint@8.49.0)
eslint-plugin-react-hooks: 4.6.0(eslint@8.49.0)
@@ -6705,9 +6869,9 @@ packages:
typescript:
optional: true
dependencies:
- '@babel/core': 7.22.17
- '@babel/eslint-parser': 7.22.15(@babel/core@7.22.17)(eslint@8.49.0)
- '@rushstack/eslint-patch': 1.3.3
+ '@babel/core': 7.23.0
+ '@babel/eslint-parser': 7.22.15(@babel/core@7.23.0)(eslint@8.49.0)
+ '@rushstack/eslint-patch': 1.4.0
'@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0)(eslint@8.49.0)(typescript@5.2.2)
'@typescript-eslint/parser': 5.62.0(eslint@8.49.0)(typescript@5.2.2)
babel-preset-react-app: 10.0.1
@@ -6749,8 +6913,8 @@ packages:
transitivePeerDependencies:
- supports-color
- /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.49.0):
- resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==}
+ /eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.49.0):
+ resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
eslint: '*'
@@ -6759,10 +6923,10 @@ packages:
debug: 4.3.4
enhanced-resolve: 5.15.0
eslint: 8.49.0
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
- eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0)
+ eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0)
fast-glob: 3.3.1
- get-tsconfig: 4.7.1
+ get-tsconfig: 4.7.2
is-core-module: 2.13.0
is-glob: 4.0.3
transitivePeerDependencies:
@@ -6800,7 +6964,7 @@ packages:
- supports-color
dev: true
- /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0):
+ /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0):
resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
engines: {node: '>=4'}
peerDependencies:
@@ -6825,7 +6989,7 @@ packages:
debug: 3.2.7
eslint: 8.49.0
eslint-import-resolver-node: 0.3.9
- eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.49.0)
+ eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-plugin-import@2.28.1)(eslint@8.49.0)
transitivePeerDependencies:
- supports-color
@@ -6848,8 +7012,8 @@ packages:
'@babel/plugin-transform-react-jsx': ^7.14.9
eslint: ^8.1.0
dependencies:
- '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.22.17)
- '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.22.17)
+ '@babel/plugin-syntax-flow': 7.22.5(@babel/core@7.23.0)
+ '@babel/plugin-transform-react-jsx': 7.22.15(@babel/core@7.23.0)
eslint: 8.49.0
lodash: 4.17.21
string-natural-compare: 3.0.1
@@ -6890,7 +7054,7 @@ packages:
- supports-color
dev: true
- /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0):
+ /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0):
resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
engines: {node: '>=4'}
peerDependencies:
@@ -6909,7 +7073,7 @@ packages:
doctrine: 2.1.0
eslint: 8.49.0
eslint-import-resolver-node: 0.3.9
- eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
+ eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.7.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1)(eslint@8.49.0)
has: 1.0.3
is-core-module: 2.13.0
is-glob: 4.0.3
@@ -6957,7 +7121,7 @@ packages:
array-includes: 3.1.7
array.prototype.flatmap: 1.3.2
ast-types-flow: 0.0.7
- axe-core: 4.8.1
+ axe-core: 4.8.2
axobject-query: 3.2.1
damerau-levenshtein: 1.0.8
emoji-regex: 9.2.2
@@ -6993,7 +7157,7 @@ packages:
array.prototype.flatmap: 1.3.2
array.prototype.tosorted: 1.1.2
doctrine: 2.1.0
- es-iterator-helpers: 1.0.14
+ es-iterator-helpers: 1.0.15
eslint: 8.49.0
estraverse: 5.3.0
jsx-ast-utils: 3.3.5
@@ -7005,7 +7169,7 @@ packages:
prop-types: 15.8.1
resolve: 2.0.0-next.4
semver: 6.3.1
- string.prototype.matchall: 4.0.9
+ string.prototype.matchall: 4.0.10
/eslint-plugin-simple-import-sort@10.0.0(eslint@8.49.0):
resolution: {integrity: sha512-AeTvO9UCMSNzIHRkg8S6c3RPy5YEwKWSQPx3DYghLedo2ZQxowPFLGDN1AZ2evfg6r6mjBSZSLxLFsWSu3acsw==}
@@ -7063,7 +7227,6 @@ packages:
dependencies:
esrecurse: 4.3.0
estraverse: 4.3.0
- dev: true
/eslint-scope@7.2.2:
resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
@@ -7088,7 +7251,7 @@ packages:
eslint: ^7.0.0 || ^8.0.0
webpack: ^5.0.0
dependencies:
- '@types/eslint': 8.44.2
+ '@types/eslint': 8.44.3
eslint: 8.49.0
jest-worker: 28.1.3
micromatch: 4.0.5
@@ -7177,7 +7340,6 @@ packages:
/estraverse@4.3.0:
resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==}
engines: {node: '>=4.0'}
- dev: true
/estraverse@5.3.0:
resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
@@ -7194,7 +7356,6 @@ packages:
/etag@1.8.1:
resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==}
engines: {node: '>= 0.6'}
- dev: true
/ethers@5.7.2:
resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==}
@@ -7235,12 +7396,10 @@ packages:
/eventemitter3@4.0.7:
resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==}
- dev: true
/events@3.3.0:
resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==}
engines: {node: '>=0.8.x'}
- dev: true
/execa@5.1.1:
resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
@@ -7255,7 +7414,6 @@ packages:
onetime: 5.1.2
signal-exit: 3.0.7
strip-final-newline: 2.0.0
- dev: true
/exit@0.1.2:
resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==}
@@ -7316,7 +7474,6 @@ packages:
vary: 1.1.2
transitivePeerDependencies:
- supports-color
- dev: true
/external-editor@3.1.0:
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
@@ -7349,7 +7506,6 @@ packages:
/fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
engines: {node: '>= 4.9.1'}
- dev: true
/fastq@1.15.0:
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
@@ -7361,7 +7517,6 @@ packages:
engines: {node: '>=0.8.0'}
dependencies:
websocket-driver: 0.7.4
- dev: true
/fb-watchman@2.0.2:
resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==}
@@ -7369,6 +7524,29 @@ packages:
bser: 2.1.1
dev: true
+ /fetch-mock@9.11.0:
+ resolution: {integrity: sha512-PG1XUv+x7iag5p/iNHD4/jdpxL9FtVSqRMUQhPab4hVDt80T1MH5ehzVrL2IdXO9Q2iBggArFvPqjUbHFuI58Q==}
+ engines: {node: '>=4.0.0'}
+ peerDependencies:
+ node-fetch: '*'
+ peerDependenciesMeta:
+ node-fetch:
+ optional: true
+ dependencies:
+ '@babel/core': 7.23.0
+ '@babel/runtime': 7.22.15
+ core-js: 3.32.2
+ debug: 4.3.4
+ glob-to-regexp: 0.4.1
+ is-subset: 0.1.1
+ lodash.isequal: 4.5.0
+ path-to-regexp: 2.4.0
+ querystring: 0.2.1
+ whatwg-url: 6.5.0
+ transitivePeerDependencies:
+ - supports-color
+ dev: false
+
/figures@3.2.0:
resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==}
engines: {node: '>=8'}
@@ -7391,7 +7569,6 @@ packages:
loader-utils: 2.0.4
schema-utils: 3.3.0
webpack: 5.88.2(webpack-cli@4.10.0)
- dev: true
/filelist@1.0.4:
resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==}
@@ -7437,7 +7614,6 @@ packages:
unpipe: 1.0.0
transitivePeerDependencies:
- supports-color
- dev: true
/find-cache-dir@3.3.2:
resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==}
@@ -7486,7 +7662,6 @@ packages:
dependencies:
locate-path: 5.0.0
path-exists: 4.0.0
- dev: true
/find-up@5.0.0:
resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
@@ -7584,7 +7759,6 @@ packages:
/forwarded@0.2.0:
resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==}
engines: {node: '>= 0.6'}
- dev: true
/fraction.js@4.3.6:
resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==}
@@ -7593,7 +7767,6 @@ packages:
/fresh@0.5.2:
resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==}
engines: {node: '>= 0.6'}
- dev: true
/fs-extra@10.1.0:
resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==}
@@ -7634,7 +7807,6 @@ packages:
/fs-monkey@1.0.4:
resolution: {integrity: sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==}
- dev: true
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
@@ -7644,7 +7816,6 @@ packages:
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
- dev: true
optional: true
/function-bind@1.1.1:
@@ -7665,7 +7836,6 @@ packages:
/gensync@1.0.0-beta.2:
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
engines: {node: '>=6.9.0'}
- dev: true
/get-caller-file@2.0.5:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
@@ -7674,7 +7844,6 @@ packages:
/get-func-name@2.0.0:
resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
- dev: true
/get-intrinsic@1.2.1:
resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
@@ -7712,7 +7881,6 @@ packages:
/get-stream@6.0.1:
resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
engines: {node: '>=10'}
- dev: true
/get-symbol-description@1.0.0:
resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
@@ -7721,8 +7889,8 @@ packages:
call-bind: 1.0.2
get-intrinsic: 1.2.1
- /get-tsconfig@4.7.1:
- resolution: {integrity: sha512-sLtd6Bcwbi9IrAow/raCOTE9pmhvo5ksQo5v2lApUGJMzja64MUYhBp0G6X1S+f7IrBPn1HP+XkS2w2meoGcjg==}
+ /get-tsconfig@4.7.2:
+ resolution: {integrity: sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==}
dependencies:
resolve-pkg-maps: 1.0.0
@@ -7873,7 +8041,6 @@ packages:
/globals@11.12.0:
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
engines: {node: '>=4'}
- dev: true
/globals@13.21.0:
resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
@@ -7952,7 +8119,6 @@ packages:
/handle-thing@2.0.1:
resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==}
- dev: true
/handlebars@4.7.8:
resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==}
@@ -7982,7 +8148,6 @@ packages:
/has-flag@3.0.0:
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
engines: {node: '>=4'}
- dev: true
/has-flag@4.0.0:
resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
@@ -8061,7 +8226,6 @@ packages:
obuf: 1.1.2
readable-stream: 2.3.8
wbuf: 1.7.3
- dev: true
/html-encoding-sniffer@2.0.1:
resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==}
@@ -8072,7 +8236,6 @@ packages:
/html-entities@2.4.0:
resolution: {integrity: sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==}
- dev: true
/html-escaper@2.0.2:
resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==}
@@ -8089,7 +8252,7 @@ packages:
he: 1.2.0
param-case: 3.0.4
relateurl: 0.2.7
- terser: 5.19.4
+ terser: 5.20.0
dev: true
/html-webpack-plugin@5.5.3(webpack@5.88.2):
@@ -8117,7 +8280,6 @@ packages:
/http-deceiver@1.2.7:
resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==}
- dev: true
/http-errors@1.6.3:
resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==}
@@ -8127,7 +8289,6 @@ packages:
inherits: 2.0.3
setprototypeof: 1.1.0
statuses: 1.5.0
- dev: true
/http-errors@2.0.0:
resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==}
@@ -8138,11 +8299,9 @@ packages:
setprototypeof: 1.2.0
statuses: 2.0.1
toidentifier: 1.0.1
- dev: true
/http-parser-js@0.5.8:
resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==}
- dev: true
/http-proxy-agent@4.0.1:
resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==}
@@ -8155,7 +8314,7 @@ packages:
- supports-color
dev: true
- /http-proxy-middleware@2.0.6(@types/express@4.17.17):
+ /http-proxy-middleware@2.0.6(@types/express@4.17.18):
resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==}
engines: {node: '>=12.0.0'}
peerDependencies:
@@ -8164,15 +8323,14 @@ packages:
'@types/express':
optional: true
dependencies:
- '@types/express': 4.17.17
- '@types/http-proxy': 1.17.11
+ '@types/express': 4.17.18
+ '@types/http-proxy': 1.17.12
http-proxy: 1.18.1
is-glob: 4.0.3
is-plain-obj: 3.0.0
micromatch: 4.0.5
transitivePeerDependencies:
- debug
- dev: true
/http-proxy@1.18.1:
resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==}
@@ -8183,7 +8341,6 @@ packages:
requires-port: 1.0.0
transitivePeerDependencies:
- debug
- dev: true
/https-proxy-agent@5.0.1:
resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==}
@@ -8198,14 +8355,12 @@ packages:
/human-signals@2.1.0:
resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
engines: {node: '>=10.17.0'}
- dev: true
/iconv-lite@0.4.24:
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
engines: {node: '>=0.10.0'}
dependencies:
safer-buffer: 2.1.2
- dev: true
/iconv-lite@0.6.3:
resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==}
@@ -8236,7 +8391,6 @@ packages:
/ieee754@1.2.1:
resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==}
- dev: true
/ignore@5.2.4:
resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
@@ -8260,7 +8414,6 @@ packages:
dependencies:
pkg-dir: 4.2.0
resolve-cwd: 3.0.0
- dev: true
/imurmurhash@0.1.4:
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
@@ -8279,7 +8432,6 @@ packages:
/inherits@2.0.3:
resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==}
- dev: true
/inherits@2.0.4:
resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
@@ -8320,17 +8472,14 @@ packages:
/interpret@2.2.0:
resolution: {integrity: sha512-Ju0Bz/cEia55xDwUWEa8+olFpCiQoypjnQySseKtmjNrnps3P+xfpUmGr90T7yjlVJmOtybRvPXhKMbHr+fWnw==}
engines: {node: '>= 0.10'}
- dev: true
/ipaddr.js@1.9.1:
resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==}
engines: {node: '>= 0.10'}
- dev: true
/ipaddr.js@2.1.0:
resolution: {integrity: sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==}
engines: {node: '>= 10'}
- dev: true
/is-arguments@1.1.1:
resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==}
@@ -8367,7 +8516,6 @@ packages:
engines: {node: '>=8'}
dependencies:
binary-extensions: 2.2.0
- dev: true
/is-boolean-object@1.1.2:
resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
@@ -8395,7 +8543,6 @@ packages:
resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
engines: {node: '>=8'}
hasBin: true
- dev: true
/is-extglob@2.1.1:
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
@@ -8476,7 +8623,6 @@ packages:
/is-plain-obj@3.0.0:
resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==}
engines: {node: '>=10'}
- dev: true
/is-plain-obj@4.1.0:
resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
@@ -8488,7 +8634,6 @@ packages:
engines: {node: '>=0.10.0'}
dependencies:
isobject: 3.0.1
- dev: true
/is-potential-custom-element-name@1.0.1:
resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==}
@@ -8527,7 +8672,6 @@ packages:
/is-stream@2.0.1:
resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
engines: {node: '>=8'}
- dev: true
/is-string@1.0.7:
resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
@@ -8535,6 +8679,10 @@ packages:
dependencies:
has-tostringtag: 1.0.0
+ /is-subset@0.1.1:
+ resolution: {integrity: sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==}
+ dev: false
+
/is-symbol@1.0.4:
resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
engines: {node: '>= 0.4'}
@@ -8591,11 +8739,9 @@ packages:
engines: {node: '>=8'}
dependencies:
is-docker: 2.2.1
- dev: true
/isarray@1.0.0:
resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==}
- dev: true
/isarray@2.0.5:
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
@@ -8606,7 +8752,6 @@ packages:
/isobject@3.0.1:
resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==}
engines: {node: '>=0.10.0'}
- dev: true
/istanbul-lib-coverage@3.2.0:
resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==}
@@ -8617,8 +8762,8 @@ packages:
resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==}
engines: {node: '>=8'}
dependencies:
- '@babel/core': 7.22.17
- '@babel/parser': 7.22.16
+ '@babel/core': 7.23.0
+ '@babel/parser': 7.23.0
'@istanbuljs/schema': 0.1.3
istanbul-lib-coverage: 3.2.0
semver: 6.3.1
@@ -8654,13 +8799,14 @@ packages:
istanbul-lib-report: 3.0.1
dev: true
- /iterator.prototype@1.1.1:
- resolution: {integrity: sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==}
+ /iterator.prototype@1.1.2:
+ resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==}
dependencies:
define-properties: 1.2.1
get-intrinsic: 1.2.1
has-symbols: 1.0.3
reflect.getprototypeof: 1.0.4
+ set-function-name: 2.0.1
/jake@10.8.7:
resolution: {integrity: sha512-ZDi3aP+fG/LchyBzUM804VjddnwfSfsdeYkwt8NcbKRvo4rFkjhs456iLFn3k2ZUWvNe4i48WACDbza8fhq2+w==}
@@ -8748,10 +8894,10 @@ packages:
ts-node:
optional: true
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@jest/test-sequencer': 27.5.1
'@jest/types': 27.5.1
- babel-jest: 27.5.1(@babel/core@7.22.17)
+ babel-jest: 27.5.1(@babel/core@7.23.0)
chalk: 4.1.2
ci-info: 3.8.0
deepmerge: 4.3.1
@@ -8848,7 +8994,7 @@ packages:
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
'@jest/types': 27.5.1
- '@types/graceful-fs': 4.1.6
+ '@types/graceful-fs': 4.1.7
'@types/node': 20.6.3
anymatch: 3.1.3
fb-watchman: 2.0.2
@@ -9067,16 +9213,16 @@ packages:
resolution: {integrity: sha512-yYykXI5a0I31xX67mgeLw1DZ0bJB+gpq5IpSuCAoyDi0+BhgU/RIrL+RTzDmkNTchvDFWKP8lp+w/42Z3us5sA==}
engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0}
dependencies:
- '@babel/core': 7.22.17
- '@babel/generator': 7.22.15
- '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.22.17)
- '@babel/traverse': 7.22.17
- '@babel/types': 7.22.17
+ '@babel/core': 7.23.0
+ '@babel/generator': 7.23.0
+ '@babel/plugin-syntax-typescript': 7.22.5(@babel/core@7.23.0)
+ '@babel/traverse': 7.23.0
+ '@babel/types': 7.23.0
'@jest/transform': 27.5.1
'@jest/types': 27.5.1
- '@types/babel__traverse': 7.20.1
+ '@types/babel__traverse': 7.20.2
'@types/prettier': 2.7.3
- babel-preset-current-node-syntax: 1.0.1(@babel/core@7.22.17)
+ babel-preset-current-node-syntax: 1.0.1(@babel/core@7.23.0)
chalk: 4.1.2
expect: 27.5.1
graceful-fs: 4.2.11
@@ -9188,7 +9334,6 @@ packages:
'@types/node': 20.6.3
merge-stream: 2.0.0
supports-color: 8.1.1
- dev: true
/jest-worker@28.1.3:
resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==}
@@ -9284,7 +9429,7 @@ packages:
whatwg-encoding: 1.0.5
whatwg-mimetype: 2.3.0
whatwg-url: 8.7.0
- ws: 7.5.9
+ ws: 7.4.6
xml-name-validator: 3.0.0
transitivePeerDependencies:
- bufferutil
@@ -9301,7 +9446,6 @@ packages:
resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
engines: {node: '>=4'}
hasBin: true
- dev: true
/json-buffer@3.0.1:
resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
@@ -9312,14 +9456,13 @@ packages:
/json-parse-even-better-errors@2.3.1:
resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
- dev: true
/json-schema-traverse@0.4.1:
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
/json-schema-traverse@1.0.0:
resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==}
- dev: true
+ requiresBuild: true
/json-schema@0.4.0:
resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==}
@@ -9342,11 +9485,9 @@ packages:
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
engines: {node: '>=6'}
hasBin: true
- dev: true
/jsonc-parser@3.2.0:
resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
- dev: true
/jsonfile@4.0.0:
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
@@ -9397,7 +9538,6 @@ packages:
/kind-of@6.0.3:
resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==}
engines: {node: '>=0.10.0'}
- dev: true
/kleur@3.0.3:
resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==}
@@ -9427,7 +9567,6 @@ packages:
dependencies:
picocolors: 1.0.0
shell-quote: 1.8.1
- dev: true
/leven@3.1.0:
resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==}
@@ -9471,7 +9610,6 @@ packages:
/loader-runner@4.3.0:
resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==}
engines: {node: '>=6.11.5'}
- dev: true
/loader-utils@2.0.4:
resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==}
@@ -9480,7 +9618,6 @@ packages:
big.js: 5.2.2
emojis-list: 3.0.0
json5: 2.2.3
- dev: true
/loader-utils@3.2.1:
resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==}
@@ -9490,7 +9627,6 @@ packages:
/local-pkg@0.4.3:
resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
engines: {node: '>=14'}
- dev: true
/locate-path@2.0.0:
resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==}
@@ -9513,7 +9649,6 @@ packages:
engines: {node: '>=8'}
dependencies:
p-locate: 4.1.0
- dev: true
/locate-path@6.0.0:
resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
@@ -9533,6 +9668,10 @@ packages:
resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==}
dev: true
+ /lodash.isequal@4.5.0:
+ resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
+ dev: false
+
/lodash.ismatch@4.4.0:
resolution: {integrity: sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==}
dev: true
@@ -9560,12 +9699,16 @@ packages:
dev: true
optional: true
+ /lodash.pickby@4.6.0:
+ resolution: {integrity: sha512-AZV+GsS/6ckvPOVQPXSiFFacKvKB4kOQu6ynt9wz0F3LO4R9Ij4K1ddYsIytDpSgLz88JHd9P+oaLeej5/Sl7Q==}
+ dev: false
+
/lodash.sortby@4.7.0:
resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==}
- dev: true
/lodash.uniq@4.5.0:
resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==}
+ requiresBuild: true
dev: true
/lodash@4.17.21:
@@ -9595,7 +9738,6 @@ packages:
resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
dependencies:
get-func-name: 2.0.0
- dev: true
/lower-case@2.0.2:
resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==}
@@ -9607,7 +9749,6 @@ packages:
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
dependencies:
yallist: 3.1.1
- dev: true
/lru-cache@6.0.0:
resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
@@ -9630,7 +9771,6 @@ packages:
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
- dev: true
/make-dir@3.1.0:
resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==}
@@ -9683,14 +9823,12 @@ packages:
/media-typer@0.3.0:
resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==}
engines: {node: '>= 0.6'}
- dev: true
/memfs@3.5.3:
resolution: {integrity: sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==}
engines: {node: '>= 4.0.0'}
dependencies:
fs-monkey: 1.0.4
- dev: true
/memorystream@0.3.1:
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
@@ -9716,11 +9854,9 @@ packages:
/merge-descriptors@1.0.1:
resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==}
- dev: true
/merge-stream@2.0.0:
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
- dev: true
/merge2@1.4.1:
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
@@ -9733,7 +9869,6 @@ packages:
/methods@1.1.2:
resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==}
engines: {node: '>= 0.6'}
- dev: true
/micromatch@4.0.5:
resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
@@ -9756,12 +9891,10 @@ packages:
resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==}
engines: {node: '>=4'}
hasBin: true
- dev: true
/mimic-fn@2.1.0:
resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
engines: {node: '>=6'}
- dev: true
/min-indent@1.0.1:
resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
@@ -9839,7 +9972,6 @@ packages:
pathe: 1.1.1
pkg-types: 1.0.3
ufo: 1.3.0
- dev: true
/modify-values@1.0.1:
resolution: {integrity: sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==}
@@ -9848,7 +9980,6 @@ packages:
/ms@2.0.0:
resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==}
- dev: true
/ms@2.1.2:
resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
@@ -9862,7 +9993,6 @@ packages:
dependencies:
dns-packet: 5.6.1
thunky: 1.1.0
- dev: true
/mute-stream@0.0.8:
resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==}
@@ -9880,6 +10010,12 @@ packages:
resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==}
dev: true
+ /nanoid@3.3.4:
+ resolution: {integrity: sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+ dev: false
+
/nanoid@3.3.6:
resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
@@ -9895,11 +10031,9 @@ packages:
/negotiator@0.6.3:
resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==}
engines: {node: '>= 0.6'}
- dev: true
/neo-async@2.6.2:
resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==}
- dev: true
/next@13.5.2(react-dom@18.2.0)(react@18.2.0):
resolution: {integrity: sha512-vog4UhUaMYAzeqfiAAmgB/QWLW7p01/sg+2vn6bqc/CxHFYizMzLv6gjxKzl31EVFkfl/F+GbxlKizlkTE9RdA==}
@@ -9919,7 +10053,7 @@ packages:
'@next/env': 13.5.2
'@swc/helpers': 0.5.2
busboy: 1.6.0
- caniuse-lite: 1.0.30001533
+ caniuse-lite: 1.0.30001539
postcss: 8.4.14
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -9955,7 +10089,6 @@ packages:
/node-forge@1.3.1:
resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==}
engines: {node: '>= 6.13.0'}
- dev: true
/node-int64@0.4.0:
resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==}
@@ -9963,7 +10096,6 @@ packages:
/node-releases@2.0.13:
resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==}
- dev: true
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
@@ -9987,7 +10119,6 @@ packages:
/normalize-path@3.0.0:
resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==}
engines: {node: '>=0.10.0'}
- dev: true
/normalize-range@0.1.2:
resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==}
@@ -10020,7 +10151,6 @@ packages:
engines: {node: '>=8'}
dependencies:
path-key: 3.1.1
- dev: true
/nth-check@2.1.1:
resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==}
@@ -10116,19 +10246,16 @@ packages:
/obuf@1.1.2:
resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==}
- dev: true
/on-finished@2.4.1:
resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==}
engines: {node: '>= 0.8'}
dependencies:
ee-first: 1.1.1
- dev: true
/on-headers@1.0.2:
resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==}
engines: {node: '>= 0.8'}
- dev: true
/once@1.4.0:
resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
@@ -10140,7 +10267,6 @@ packages:
engines: {node: '>=6'}
dependencies:
mimic-fn: 2.1.0
- dev: true
/open@8.4.2:
resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
@@ -10149,7 +10275,6 @@ packages:
define-lazy-prop: 2.0.0
is-docker: 2.2.1
is-wsl: 2.2.0
- dev: true
/optionator@0.8.3:
resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==}
@@ -10206,7 +10331,6 @@ packages:
engines: {node: '>=6'}
dependencies:
p-try: 2.2.0
- dev: true
/p-limit@3.1.0:
resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
@@ -10219,7 +10343,6 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
yocto-queue: 1.0.0
- dev: true
/p-locate@2.0.0:
resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==}
@@ -10240,7 +10363,6 @@ packages:
engines: {node: '>=8'}
dependencies:
p-limit: 2.3.0
- dev: true
/p-locate@5.0.0:
resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
@@ -10254,7 +10376,6 @@ packages:
dependencies:
'@types/retry': 0.12.0
retry: 0.13.1
- dev: true
/p-try@1.0.0:
resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==}
@@ -10264,7 +10385,6 @@ packages:
/p-try@2.2.0:
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
engines: {node: '>=6'}
- dev: true
/param-case@3.0.4:
resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==}
@@ -10309,7 +10429,6 @@ packages:
/parseurl@1.3.3:
resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==}
engines: {node: '>= 0.8'}
- dev: true
/pascal-case@3.1.2:
resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==}
@@ -10345,7 +10464,10 @@ packages:
/path-to-regexp@0.1.7:
resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==}
- dev: true
+
+ /path-to-regexp@2.4.0:
+ resolution: {integrity: sha512-G6zHoVqC6GGTQkZwF4lkuEyMbVOjoBKAEybQUypI1WTkqinCOrq2x6U2+phkJ1XsEMTy4LjtwPI7HW+NVrRR2w==}
+ dev: false
/path-type@3.0.0:
resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
@@ -10360,11 +10482,9 @@ packages:
/pathe@1.1.1:
resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
- dev: true
/pathval@1.1.1:
resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
- dev: true
/performance-now@2.1.0:
resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==}
@@ -10419,7 +10539,6 @@ packages:
engines: {node: '>=8'}
dependencies:
find-up: 4.1.0
- dev: true
/pkg-types@1.0.3:
resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
@@ -10427,7 +10546,6 @@ packages:
jsonc-parser: 3.2.0
mlly: 1.4.2
pathe: 1.1.1
- dev: true
/pkg-up@3.1.0:
resolution: {integrity: sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA==}
@@ -10446,14 +10564,14 @@ packages:
postcss-selector-parser: 6.0.13
dev: true
- /postcss-browser-comments@4.0.0(browserslist@4.21.10)(postcss@8.4.29):
+ /postcss-browser-comments@4.0.0(browserslist@4.21.11)(postcss@8.4.29):
resolution: {integrity: sha512-X9X9/WN3KIvY9+hNERUqX9gncsgBA25XaeR+jshHz2j8+sYyHktHw1JdKuMjeLpGktXidqDhA7b/qm1mrBDmgg==}
engines: {node: '>=8'}
peerDependencies:
browserslist: '>=4'
postcss: '>=8'
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
postcss: 8.4.29
dev: true
@@ -10513,7 +10631,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
caniuse-api: 3.0.0
colord: 2.9.3
postcss: 8.4.29
@@ -10526,7 +10644,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
@@ -10791,7 +10909,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
caniuse-api: 3.0.0
cssnano-utils: 3.1.0(postcss@8.4.29)
postcss: 8.4.29
@@ -10826,7 +10944,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
cssnano-utils: 3.1.0(postcss@8.4.29)
postcss: 8.4.29
postcss-value-parser: 4.2.0
@@ -10969,7 +11087,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
postcss: 8.4.29
postcss-value-parser: 4.2.0
dev: true
@@ -10995,7 +11113,7 @@ packages:
postcss-value-parser: 4.2.0
dev: true
- /postcss-normalize@10.0.1(browserslist@4.21.10)(postcss@8.4.29):
+ /postcss-normalize@10.0.1(browserslist@4.21.11)(postcss@8.4.29):
resolution: {integrity: sha512-+5w18/rDev5mqERcG3W5GZNMJa1eoYYNGo8gB7tEwaos0ajk3ZXAI4mHGcNT47NE+ZnZD1pEpUOFLvltIwmeJA==}
engines: {node: '>= 12'}
peerDependencies:
@@ -11003,9 +11121,9 @@ packages:
postcss: '>= 8'
dependencies:
'@csstools/normalize.css': 12.0.0
- browserslist: 4.21.10
+ browserslist: 4.21.11
postcss: 8.4.29
- postcss-browser-comments: 4.0.0(browserslist@4.21.10)(postcss@8.4.29)
+ postcss-browser-comments: 4.0.0(browserslist@4.21.11)(postcss@8.4.29)
sanitize.css: 13.0.0
dev: true
@@ -11077,8 +11195,8 @@ packages:
'@csstools/postcss-text-decoration-shorthand': 1.0.0(postcss@8.4.29)
'@csstools/postcss-trigonometric-functions': 1.0.2(postcss@8.4.29)
'@csstools/postcss-unset-value': 1.0.2(postcss@8.4.29)
- autoprefixer: 10.4.15(postcss@8.4.29)
- browserslist: 4.21.10
+ autoprefixer: 10.4.16(postcss@8.4.29)
+ browserslist: 4.21.11
css-blank-pseudo: 3.0.3(postcss@8.4.29)
css-has-pseudo: 3.0.4(postcss@8.4.29)
css-prefers-color-scheme: 6.0.3(postcss@8.4.29)
@@ -11131,7 +11249,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
caniuse-api: 3.0.0
postcss: 8.4.29
dev: true
@@ -11221,7 +11339,6 @@ packages:
nanoid: 3.3.6
picocolors: 1.0.0
source-map-js: 1.0.2
- dev: true
/prelude-ls@1.1.2:
resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==}
@@ -11301,11 +11418,9 @@ packages:
'@jest/schemas': 29.6.3
ansi-styles: 5.2.0
react-is: 18.2.0
- dev: true
/process-nextick-args@2.0.1:
resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==}
- dev: true
/promise@8.3.0:
resolution: {integrity: sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==}
@@ -11338,7 +11453,6 @@ packages:
dependencies:
forwarded: 0.2.0
ipaddr.js: 1.9.1
- dev: true
/proxy-from-env@1.1.0:
resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==}
@@ -11361,7 +11475,6 @@ packages:
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
- dev: true
/qs@6.11.2:
resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
@@ -11370,6 +11483,12 @@ packages:
side-channel: 1.0.4
dev: false
+ /querystring@0.2.1:
+ resolution: {integrity: sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg==}
+ engines: {node: '>=0.4.x'}
+ deprecated: The querystring API is considered Legacy. new code should use the URLSearchParams API instead.
+ dev: false
+
/querystringify@2.2.0:
resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
dev: true
@@ -11392,12 +11511,10 @@ packages:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
dependencies:
safe-buffer: 5.2.1
- dev: true
/range-parser@1.2.1:
resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==}
engines: {node: '>= 0.6'}
- dev: true
/raw-body@2.5.1:
resolution: {integrity: sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==}
@@ -11407,7 +11524,6 @@ packages:
http-errors: 2.0.0
iconv-lite: 0.4.24
unpipe: 1.0.0
- dev: true
/react-app-polyfill@3.0.0:
resolution: {integrity: sha512-sZ41cxiU5llIB003yxxQBYrARBqe0repqPTTYBTmMqTz9szeBbE37BehCE891NZsmdZqqP+xWKdT3eo3vOzN8w==}
@@ -11421,6 +11537,16 @@ packages:
whatwg-fetch: 3.6.19
dev: true
+ /react-copy-to-clipboard@5.1.0(react@18.2.0):
+ resolution: {integrity: sha512-k61RsNgAayIJNoy9yDsYzDe/yAZAzEbEgcz3DZMhF686LEyukcE1hzurxe85JandPUG+yTfGVFzuEw3xt8WP/A==}
+ peerDependencies:
+ react: ^15.3.0 || 16 || 17 || 18
+ dependencies:
+ copy-to-clipboard: 3.3.3
+ prop-types: 15.8.1
+ react: 18.2.0
+ dev: false
+
/react-dev-utils@12.0.1(eslint@8.49.0)(typescript@5.2.2)(webpack@5.88.2):
resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==}
engines: {node: '>=14'}
@@ -11433,7 +11559,7 @@ packages:
dependencies:
'@babel/code-frame': 7.22.13
address: 1.2.2
- browserslist: 4.21.10
+ browserslist: 4.21.11
chalk: 4.1.2
cross-spawn: 7.0.3
detect-port-alt: 1.1.6
@@ -11486,13 +11612,17 @@ packages:
/react-is@18.2.0:
resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
- dev: true
/react-refresh@0.11.0:
resolution: {integrity: sha512-F27qZr8uUqwhWZboondsPx8tnC3Ct3SxZA3V5WyEvujRyyNv0VYPhoBg1gZ8/MV5tubQp76Trw8lTv9hzRBa+A==}
engines: {node: '>=0.10.0'}
dev: true
+ /react-refresh@0.14.0:
+ resolution: {integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==}
+ engines: {node: '>=0.10.0'}
+ dev: true
+
/react-scripts@5.0.1(@babel/plugin-syntax-flow@7.22.5)(@babel/plugin-transform-react-jsx@7.22.15)(eslint@8.49.0)(react@18.2.0)(ts-node@10.9.1)(typescript@5.2.2):
resolution: {integrity: sha512-8VAmEm/ZAwQzJ+GOMLbBsTdDKOpuZh7RPs0UymvBR2vRk4iZWCskjbFnxqjrzoIvlNNRZ3QJFx6/qDSi6zSnaQ==}
engines: {node: '>=14.0.0'}
@@ -11505,15 +11635,15 @@ packages:
typescript:
optional: true
dependencies:
- '@babel/core': 7.22.17
+ '@babel/core': 7.23.0
'@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(webpack-dev-server@4.15.1)(webpack@5.88.2)
'@svgr/webpack': 5.5.0
- babel-jest: 27.5.1(@babel/core@7.22.17)
- babel-loader: 8.3.0(@babel/core@7.22.17)(webpack@5.88.2)
- babel-plugin-named-asset-import: 0.3.8(@babel/core@7.22.17)
+ babel-jest: 27.5.1(@babel/core@7.23.0)
+ babel-loader: 8.3.0(@babel/core@7.23.0)(webpack@5.88.2)
+ babel-plugin-named-asset-import: 0.3.8(@babel/core@7.23.0)
babel-preset-react-app: 10.0.1
bfj: 7.1.0
- browserslist: 4.21.10
+ browserslist: 4.21.11
camelcase: 6.3.0
case-sensitive-paths-webpack-plugin: 2.4.0
css-loader: 6.8.1(webpack@5.88.2)
@@ -11534,7 +11664,7 @@ packages:
postcss: 8.4.29
postcss-flexbugs-fixes: 5.0.2(postcss@8.4.29)
postcss-loader: 6.2.1(postcss@8.4.29)(webpack@5.88.2)
- postcss-normalize: 10.0.1(browserslist@4.21.10)(postcss@8.4.29)
+ postcss-normalize: 10.0.1(browserslist@4.21.11)(postcss@8.4.29)
postcss-preset-env: 7.8.3(postcss@8.4.29)
prompts: 2.4.2
react: 18.2.0
@@ -11590,6 +11720,16 @@ packages:
- webpack-plugin-serve
dev: true
+ /react-spinners@0.13.8(react-dom@18.2.0)(react@18.2.0):
+ resolution: {integrity: sha512-3e+k56lUkPj0vb5NDXPVFAOkPC//XyhKPJjvcGjyMNPWsBKpplfeyialP74G7H7+It7KzhtET+MvGqbKgAqpZA==}
+ peerDependencies:
+ react: ^16.0.0 || ^17.0.0 || ^18.0.0
+ react-dom: ^16.0.0 || ^17.0.0 || ^18.0.0
+ dependencies:
+ react: 18.2.0
+ react-dom: 18.2.0(react@18.2.0)
+ dev: false
+
/react@18.2.0:
resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==}
engines: {node: '>=0.10.0'}
@@ -11648,7 +11788,6 @@ packages:
safe-buffer: 5.1.2
string_decoder: 1.1.1
util-deprecate: 1.0.2
- dev: true
/readable-stream@3.6.2:
resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==}
@@ -11657,21 +11796,18 @@ packages:
inherits: 2.0.4
string_decoder: 1.3.0
util-deprecate: 1.0.2
- dev: true
/readdirp@3.6.0:
resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==}
engines: {node: '>=8.10.0'}
dependencies:
picomatch: 2.3.1
- dev: true
/rechoir@0.7.1:
resolution: {integrity: sha512-/njmZ8s1wVeR6pjTZ+0nCnv8SpZNRMT2D1RLOJQESlYFDBvwpTA4KWJpZ+sBJ4+vhjILRcK7JIFdGCdxEAAitg==}
engines: {node: '>= 0.10'}
dependencies:
resolve: 1.22.4
- dev: true
/recursive-readdir@2.2.3:
resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==}
@@ -11704,8 +11840,8 @@ packages:
globalthis: 1.0.3
which-builtin-type: 1.1.3
- /regenerate-unicode-properties@10.1.0:
- resolution: {integrity: sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==}
+ /regenerate-unicode-properties@10.1.1:
+ resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==}
engines: {node: '>=4'}
dependencies:
regenerate: 1.4.2
@@ -11755,7 +11891,7 @@ packages:
dependencies:
'@babel/regjsgen': 0.8.0
regenerate: 1.4.2
- regenerate-unicode-properties: 10.1.0
+ regenerate-unicode-properties: 10.1.1
regjsparser: 0.9.1
unicode-match-property-ecmascript: 2.0.0
unicode-match-property-value-ecmascript: 2.1.0
@@ -11791,18 +11927,16 @@ packages:
/require-from-string@2.0.2:
resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==}
engines: {node: '>=0.10.0'}
- dev: true
+ requiresBuild: true
/requires-port@1.0.0:
resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==}
- dev: true
/resolve-cwd@3.0.0:
resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==}
engines: {node: '>=8'}
dependencies:
resolve-from: 5.0.0
- dev: true
/resolve-dir@1.0.1:
resolution: {integrity: sha512-R7uiTjECzvOsWSfdM0QKFNBVFcK27aHOUwdvK53BcW8zqnGdYp0Fbj82cy54+2A4P2tFM22J5kRfe1R+lM/1yg==}
@@ -11819,7 +11953,7 @@ packages:
/resolve-from@5.0.0:
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
engines: {node: '>=8'}
- dev: true
+ requiresBuild: true
/resolve-global@1.0.0:
resolution: {integrity: sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==}
@@ -11884,7 +12018,6 @@ packages:
/retry@0.13.1:
resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==}
engines: {node: '>= 4'}
- dev: true
/reusify@1.0.4:
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
@@ -11906,7 +12039,7 @@ packages:
jest-worker: 26.6.2
rollup: 2.79.1
serialize-javascript: 4.0.0
- terser: 5.19.4
+ terser: 5.20.0
dev: true
/rollup@2.79.1:
@@ -11923,7 +12056,6 @@ packages:
hasBin: true
optionalDependencies:
fsevents: 2.3.3
- dev: true
/run-async@2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
@@ -11952,11 +12084,9 @@ packages:
/safe-buffer@5.1.2:
resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==}
- dev: true
/safe-buffer@5.2.1:
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
- dev: true
/safe-regex-test@1.0.0:
resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
@@ -11967,7 +12097,6 @@ packages:
/safer-buffer@2.1.2:
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
- dev: true
/sanitize.css@13.0.0:
resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==}
@@ -12039,7 +12168,6 @@ packages:
'@types/json-schema': 7.0.12
ajv: 6.12.6
ajv-keywords: 3.5.2(ajv@6.12.6)
- dev: true
/schema-utils@4.2.0:
resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==}
@@ -12049,21 +12177,18 @@ packages:
ajv: 8.12.0
ajv-formats: 2.1.1(ajv@8.12.0)
ajv-keywords: 5.1.0(ajv@8.12.0)
- dev: true
/scrypt-js@3.0.1:
resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==}
/select-hose@2.0.0:
resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==}
- dev: true
/selfsigned@2.1.1:
resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==}
engines: {node: '>=10'}
dependencies:
node-forge: 1.3.1
- dev: true
/semver@5.7.2:
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
@@ -12100,7 +12225,6 @@ packages:
statuses: 2.0.1
transitivePeerDependencies:
- supports-color
- dev: true
/serialize-javascript@4.0.0:
resolution: {integrity: sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==}
@@ -12112,7 +12236,6 @@ packages:
resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==}
dependencies:
randombytes: 2.1.0
- dev: true
/serve-index@1.9.1:
resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==}
@@ -12127,7 +12250,6 @@ packages:
parseurl: 1.3.3
transitivePeerDependencies:
- supports-color
- dev: true
/serve-static@1.15.0:
resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==}
@@ -12139,7 +12261,6 @@ packages:
send: 0.18.0
transitivePeerDependencies:
- supports-color
- dev: true
/set-function-name@2.0.1:
resolution: {integrity: sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==}
@@ -12151,18 +12272,15 @@ packages:
/setprototypeof@1.1.0:
resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==}
- dev: true
/setprototypeof@1.2.0:
resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==}
- dev: true
/shallow-clone@3.0.1:
resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==}
engines: {node: '>=8'}
dependencies:
kind-of: 6.0.3
- dev: true
/shebang-command@1.2.0:
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
@@ -12188,7 +12306,6 @@ packages:
/shell-quote@1.8.1:
resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==}
- dev: true
/shiki@0.14.4:
resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==}
@@ -12208,11 +12325,9 @@ packages:
/siginfo@2.0.0:
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
- dev: true
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
- dev: true
/sisteransi@1.0.5:
resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==}
@@ -12233,7 +12348,6 @@ packages:
faye-websocket: 0.11.4
uuid: 8.3.2
websocket-driver: 0.7.4
- dev: true
/sort-object-keys@1.1.3:
resolution: {integrity: sha512-855pvK+VkU7PaKYPc+Jjnmt4EzejQHyhhF33q31qG8x7maDzkeFhAAThdCYay11CISO+qAMwjOBP+fPZe0IPyg==}
@@ -12277,12 +12391,10 @@ packages:
dependencies:
buffer-from: 1.1.2
source-map: 0.6.1
- dev: true
/source-map@0.6.1:
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
engines: {node: '>=0.10.0'}
- dev: true
/source-map@0.7.4:
resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==}
@@ -12334,7 +12446,6 @@ packages:
wbuf: 1.7.3
transitivePeerDependencies:
- supports-color
- dev: true
/spdy@4.0.2:
resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==}
@@ -12347,7 +12458,6 @@ packages:
spdy-transport: 3.0.0
transitivePeerDependencies:
- supports-color
- dev: true
/split2@3.2.2:
resolution: {integrity: sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==}
@@ -12379,7 +12489,6 @@ packages:
/stackback@0.0.2:
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
- dev: true
/stackframe@1.3.4:
resolution: {integrity: sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==}
@@ -12415,16 +12524,13 @@ packages:
/statuses@1.5.0:
resolution: {integrity: sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==}
engines: {node: '>= 0.6'}
- dev: true
/statuses@2.0.1:
resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==}
engines: {node: '>= 0.8'}
- dev: true
/std-env@3.4.3:
resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==}
- dev: true
/stop-iteration-iterator@1.0.0:
resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==}
@@ -12433,6 +12539,13 @@ packages:
internal-slot: 1.0.5
dev: false
+ /stream-browserify@3.0.0:
+ resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==}
+ dependencies:
+ inherits: 2.0.4
+ readable-stream: 3.6.2
+ dev: true
+
/streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
@@ -12471,8 +12584,8 @@ packages:
strip-ansi: 6.0.1
dev: true
- /string.prototype.matchall@4.0.9:
- resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==}
+ /string.prototype.matchall@4.0.10:
+ resolution: {integrity: sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ==}
dependencies:
call-bind: 1.0.2
define-properties: 1.2.1
@@ -12481,6 +12594,7 @@ packages:
has-symbols: 1.0.3
internal-slot: 1.0.5
regexp.prototype.flags: 1.5.1
+ set-function-name: 2.0.1
side-channel: 1.0.4
/string.prototype.padend@3.1.5:
@@ -12518,13 +12632,11 @@ packages:
resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==}
dependencies:
safe-buffer: 5.1.2
- dev: true
/string_decoder@1.3.0:
resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==}
dependencies:
safe-buffer: 5.2.1
- dev: true
/stringify-object@3.3.0:
resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
@@ -12570,7 +12682,6 @@ packages:
/strip-final-newline@2.0.0:
resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
engines: {node: '>=6'}
- dev: true
/strip-indent@3.0.0:
resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
@@ -12587,7 +12698,6 @@ packages:
resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
dependencies:
acorn: 8.10.0
- dev: true
/strip-outer@1.0.1:
resolution: {integrity: sha512-k55yxKHwaXnpYGsOzg4Vl8+tDrWylxDEpknGjhTiZB8dFRU5rTo9CAzeycivxV3s+zlTKwrs6WxMxR95n26kwg==}
@@ -12628,7 +12738,7 @@ packages:
peerDependencies:
postcss: ^8.2.15
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
postcss: 8.4.29
postcss-selector-parser: 6.0.13
dev: true
@@ -12652,7 +12762,6 @@ packages:
engines: {node: '>=4'}
dependencies:
has-flag: 3.0.0
- dev: true
/supports-color@7.2.0:
resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
@@ -12665,7 +12774,6 @@ packages:
engines: {node: '>=10'}
dependencies:
has-flag: 4.0.0
- dev: true
/supports-hyperlinks@2.3.0:
resolution: {integrity: sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==}
@@ -12815,12 +12923,11 @@ packages:
jest-worker: 27.5.1
schema-utils: 3.3.0
serialize-javascript: 6.0.1
- terser: 5.19.4
+ terser: 5.20.0
webpack: 5.88.2(webpack-cli@4.10.0)
- dev: true
- /terser@5.19.4:
- resolution: {integrity: sha512-6p1DjHeuluwxDXcuT9VR8p64klWJKo1ILiy19s6C9+0Bh2+NWTX6nD9EPppiER4ICkHDVB1RkVpin/YW2nQn/g==}
+ /terser@5.20.0:
+ resolution: {integrity: sha512-e56ETryaQDyebBwJIWYB2TT6f2EZ0fL0sW/JRXNMN26zZdKi2u/E/5my5lG6jNxym6qsrVXfFRmOdV42zlAgLQ==}
engines: {node: '>=10'}
hasBin: true
dependencies:
@@ -12828,7 +12935,6 @@ packages:
acorn: 8.10.0
commander: 2.20.3
source-map-support: 0.5.21
- dev: true
/test-exclude@6.0.0:
resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==}
@@ -12883,21 +12989,17 @@ packages:
/thunky@1.1.0:
resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==}
- dev: true
/tinybench@2.5.1:
resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
- dev: true
/tinypool@0.7.0:
resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==}
engines: {node: '>=14.0.0'}
- dev: true
/tinyspy@2.1.1:
resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==}
engines: {node: '>=14.0.0'}
- dev: true
/tmp@0.0.33:
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
@@ -12913,7 +13015,6 @@ packages:
/to-fast-properties@2.0.0:
resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
engines: {node: '>=4'}
- dev: true
/to-regex-range@5.0.1:
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
@@ -12921,10 +13022,13 @@ packages:
dependencies:
is-number: 7.0.0
+ /toggle-selection@1.0.6:
+ resolution: {integrity: sha512-BiZS+C1OS8g/q2RRbJmy59xpyghNBqrr6k5L/uKBGRsTfxmu3ffiRnd8mlGPUVayg8pvfi5urfnu8TU7DVOkLQ==}
+ dev: false
+
/toidentifier@1.0.1:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'}
- dev: true
/toposort@2.0.2:
resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==}
@@ -12944,7 +13048,6 @@ packages:
resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==}
dependencies:
punycode: 2.3.0
- dev: true
/tr46@2.1.0:
resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==}
@@ -13098,7 +13201,6 @@ packages:
/type-detect@4.0.8:
resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
engines: {node: '>=4'}
- dev: true
/type-fest@0.16.0:
resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
@@ -13135,7 +13237,6 @@ packages:
dependencies:
media-typer: 0.3.0
mime-types: 2.1.35
- dev: true
/typechain@8.3.1(typescript@5.2.2):
resolution: {integrity: sha512-fA7clol2IP/56yq6vkMTR+4URF1nGjV82Wx6Rf09EsqD4tkzMAvEaqYxVFCavJm/1xaRga/oD55K+4FtuXwQOQ==}
@@ -13247,6 +13348,12 @@ packages:
typescript: 5.2.2
dev: true
+ /typescript@4.9.5:
+ resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==}
+ engines: {node: '>=4.2.0'}
+ hasBin: true
+ dev: true
+
/typescript@5.2.2:
resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
engines: {node: '>=14.17'}
@@ -13264,7 +13371,6 @@ packages:
/ufo@1.3.0:
resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==}
- dev: true
/uglify-js@3.17.4:
resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==}
@@ -13334,7 +13440,6 @@ packages:
/unpipe@1.0.0:
resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==}
engines: {node: '>= 0.8'}
- dev: true
/unquote@1.1.1:
resolution: {integrity: sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==}
@@ -13345,16 +13450,15 @@ packages:
engines: {node: '>=4'}
dev: true
- /update-browserslist-db@1.0.11(browserslist@4.21.10):
- resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==}
+ /update-browserslist-db@1.0.13(browserslist@4.21.11):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
hasBin: true
peerDependencies:
browserslist: '>= 4.21.0'
dependencies:
- browserslist: 4.21.10
+ browserslist: 4.21.11
escalade: 3.1.1
picocolors: 1.0.0
- dev: true
/uri-js@4.4.1:
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
@@ -13370,7 +13474,6 @@ packages:
/util-deprecate@1.0.2:
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
- dev: true
/util.promisify@1.0.1:
resolution: {integrity: sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==}
@@ -13388,12 +13491,10 @@ packages:
/utils-merge@1.0.1:
resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==}
engines: {node: '>= 0.4.0'}
- dev: true
/uuid@8.3.2:
resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==}
hasBin: true
- dev: true
/v8-compile-cache-lib@3.0.1:
resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==}
@@ -13427,7 +13528,6 @@ packages:
/vary@1.1.2:
resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==}
engines: {node: '>= 0.8'}
- dev: true
/vite-node@0.34.4(@types/node@20.6.3):
resolution: {integrity: sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==}
@@ -13449,7 +13549,6 @@ packages:
- sugarss
- supports-color
- terser
- dev: true
/vite@4.4.9(@types/node@20.6.3):
resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
@@ -13485,7 +13584,6 @@ packages:
rollup: 3.29.1
optionalDependencies:
fsevents: 2.3.3
- dev: true
/vitest@0.34.4:
resolution: {integrity: sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==}
@@ -13550,7 +13648,6 @@ packages:
- sugarss
- supports-color
- terser
- dev: true
/vscode-oniguruma@1.7.0:
resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==}
@@ -13591,7 +13688,6 @@ packages:
resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==}
dependencies:
minimalistic-assert: 1.0.1
- dev: true
/wcwidth@1.0.1:
resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==}
@@ -13601,7 +13697,6 @@ packages:
/webidl-conversions@4.0.2:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
- dev: true
/webidl-conversions@5.0.0:
resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==}
@@ -13647,7 +13742,6 @@ packages:
webpack: 5.88.2(webpack-cli@4.10.0)
webpack-dev-server: 4.15.1(webpack-cli@4.10.0)(webpack@5.88.2)
webpack-merge: 5.9.0
- dev: true
/webpack-dev-middleware@5.3.3(webpack@5.88.2):
resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==}
@@ -13661,7 +13755,6 @@ packages:
range-parser: 1.2.1
schema-utils: 4.2.0
webpack: 5.88.2(webpack-cli@4.10.0)
- dev: true
/webpack-dev-server@4.15.1(webpack-cli@4.10.0)(webpack@5.88.2):
resolution: {integrity: sha512-5hbAst3h3C3L8w6W4P96L5vaV0PxSmJhxZvWKYIdgxOQm8pNZ5dEOmmSLBVpP85ReeyRt6AS1QJNyo/oFFPeVA==}
@@ -13676,9 +13769,9 @@ packages:
webpack-cli:
optional: true
dependencies:
- '@types/bonjour': 3.5.10
+ '@types/bonjour': 3.5.11
'@types/connect-history-api-fallback': 1.5.1
- '@types/express': 4.17.17
+ '@types/express': 4.17.18
'@types/serve-index': 1.9.1
'@types/serve-static': 1.15.2
'@types/sockjs': 0.3.33
@@ -13693,7 +13786,7 @@ packages:
express: 4.18.2
graceful-fs: 4.2.11
html-entities: 2.4.0
- http-proxy-middleware: 2.0.6(@types/express@4.17.17)
+ http-proxy-middleware: 2.0.6(@types/express@4.17.18)
ipaddr.js: 2.1.0
launch-editor: 2.6.0
open: 8.4.2
@@ -13707,13 +13800,12 @@ packages:
webpack: 5.88.2(webpack-cli@4.10.0)
webpack-cli: 4.10.0(webpack-dev-server@4.15.1)(webpack@5.88.2)
webpack-dev-middleware: 5.3.3(webpack@5.88.2)
- ws: 8.14.1
+ ws: 8.14.2
transitivePeerDependencies:
- bufferutil
- debug
- supports-color
- utf-8-validate
- dev: true
/webpack-manifest-plugin@4.1.1(webpack@5.88.2):
resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==}
@@ -13732,7 +13824,6 @@ packages:
dependencies:
clone-deep: 4.0.1
wildcard: 2.0.1
- dev: true
/webpack-sources@1.4.3:
resolution: {integrity: sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==}
@@ -13752,7 +13843,6 @@ packages:
/webpack-sources@3.2.3:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
engines: {node: '>=10.13.0'}
- dev: true
/webpack@5.88.2(webpack-cli@4.10.0):
resolution: {integrity: sha512-JmcgNZ1iKj+aiR0OvTYtWQqJwq37Pf683dY9bVORwVbUrDhLhdn/PlO2sHsFHPkj7sHNQF3JwaAkp49V+Sq1tQ==}
@@ -13764,14 +13854,14 @@ packages:
webpack-cli:
optional: true
dependencies:
- '@types/eslint-scope': 3.7.4
- '@types/estree': 1.0.1
+ '@types/eslint-scope': 3.7.5
+ '@types/estree': 1.0.2
'@webassemblyjs/ast': 1.11.6
'@webassemblyjs/wasm-edit': 1.11.6
'@webassemblyjs/wasm-parser': 1.11.6
acorn: 8.10.0
acorn-import-assertions: 1.9.0(acorn@8.10.0)
- browserslist: 4.21.10
+ browserslist: 4.21.11
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
es-module-lexer: 1.3.1
@@ -13793,7 +13883,6 @@ packages:
- '@swc/core'
- esbuild
- uglify-js
- dev: true
/websocket-driver@0.7.4:
resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==}
@@ -13802,12 +13891,10 @@ packages:
http-parser-js: 0.5.8
safe-buffer: 5.2.1
websocket-extensions: 0.1.4
- dev: true
/websocket-extensions@0.1.4:
resolution: {integrity: sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==}
engines: {node: '>=0.8.0'}
- dev: true
/whatwg-encoding@1.0.5:
resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==}
@@ -13823,6 +13910,14 @@ packages:
resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==}
dev: true
+ /whatwg-url@6.5.0:
+ resolution: {integrity: sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==}
+ dependencies:
+ lodash.sortby: 4.7.0
+ tr46: 1.0.1
+ webidl-conversions: 4.0.2
+ dev: false
+
/whatwg-url@7.1.0:
resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==}
dependencies:
@@ -13905,11 +14000,9 @@ packages:
dependencies:
siginfo: 2.0.0
stackback: 0.0.2
- dev: true
/wildcard@2.0.1:
resolution: {integrity: sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==}
- dev: true
/word-wrap@1.2.5:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
@@ -13946,10 +14039,10 @@ packages:
engines: {node: '>=10.0.0'}
dependencies:
'@apideck/better-ajv-errors': 0.3.6(ajv@8.12.0)
- '@babel/core': 7.22.17
- '@babel/preset-env': 7.22.15(@babel/core@7.22.17)
+ '@babel/core': 7.23.0
+ '@babel/preset-env': 7.22.20(@babel/core@7.23.0)
'@babel/runtime': 7.22.15
- '@rollup/plugin-babel': 5.3.1(@babel/core@7.22.17)(rollup@2.79.1)
+ '@rollup/plugin-babel': 5.3.1(@babel/core@7.23.0)(rollup@2.79.1)
'@rollup/plugin-node-resolve': 11.2.1(rollup@2.79.1)
'@rollup/plugin-replace': 2.4.2(rollup@2.79.1)
'@surma/rollup-plugin-off-main-thread': 2.2.3
@@ -14125,21 +14218,8 @@ packages:
utf-8-validate:
optional: true
- /ws@7.5.9:
- resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==}
- engines: {node: '>=8.3.0'}
- peerDependencies:
- bufferutil: ^4.0.1
- utf-8-validate: ^5.0.2
- peerDependenciesMeta:
- bufferutil:
- optional: true
- utf-8-validate:
- optional: true
- dev: true
-
- /ws@8.14.1:
- resolution: {integrity: sha512-4OOseMUq8AzRBI/7SLMUwO+FEDnguetSk7KMb1sHwvF2w2Wv5Hoj0nlifx8vtGsftE/jWHojPy8sMMzYLJ2G/A==}
+ /ws@8.14.2:
+ resolution: {integrity: sha512-wEBG1ftX4jcglPxgFCMJmZ2PLtSbJ2Peg6TmpJFTbe9GZYOQCDPdMYu/Tm0/bGZkw8paZnJY45J4K2PZrLYq8g==}
engines: {node: '>=10.0.0'}
peerDependencies:
bufferutil: ^4.0.1
@@ -14149,7 +14229,6 @@ packages:
optional: true
utf-8-validate:
optional: true
- dev: true
/xml-name-validator@3.0.0:
resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==}
@@ -14171,7 +14250,6 @@ packages:
/yallist@3.1.1:
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
- dev: true
/yallist@4.0.0:
resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
@@ -14216,7 +14294,6 @@ packages:
/yocto-queue@1.0.0:
resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
engines: {node: '>=12.20'}
- dev: true
/yup@0.32.11:
resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 052c35491..f4b55b628 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,4 +1,5 @@
prefer-workspace-packages: true
packages:
- - "examples/*"
- - "packages/*"
+ - "demos/**/*"
+ - "examples/**/*"
+ - "packages/**/*"
diff --git a/tsconfig.json b/tsconfig.json
index 3ec23cb83..bf242524e 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,7 +1,10 @@
{
"compilerOptions": {
"declaration": true,
- "lib": ["ES2018", "dom"],
+ "lib": [
+ "ES2018",
+ "dom"
+ ],
"module": "CommonJS",
"moduleResolution": "node",
"strict": true,
@@ -10,8 +13,15 @@
"composite": true,
"incremental": true,
"exactOptionalPropertyTypes": true,
- "noImplicitOverride": true,
+ "noImplicitOverride": true
},
- "include": ["**/*.ts", "**/*.js", "**/.*.js", "scripts/.common.ts"],
- "exclude": ["**/node_modules"]
+ "include": [
+ "**/*.ts",
+ "**/*.js",
+ "**/.*.js",
+ "scripts/.common.ts"
+ ],
+ "exclude": [
+ "**/node_modules"
+ ]
}
diff --git a/tsconfig.prod.json b/tsconfig.prod.json
index 118e66014..c54331bde 100644
--- a/tsconfig.prod.json
+++ b/tsconfig.prod.json
@@ -14,7 +14,10 @@
"files": [],
"references": [
{
- "path": "./packages/pre/tsconfig.build.json"
+ "path": "./packages/pre/tsconfig.es.json"
+ },
+ {
+ "path": "./packages/pre/tsconfig.cjs.json"
},
{
"path": "./packages/shared/tsconfig.es.json"
@@ -23,10 +26,16 @@
"path": "./packages/shared/tsconfig.cjs.json"
},
{
- "path": "./packages/taco/tsconfig.build.json"
+ "path": "./packages/taco/tsconfig.es.json"
+ },
+ {
+ "path": "./packages/taco/tsconfig.cjs.json"
+ },
+ {
+ "path": "./packages/test-utils/tsconfig.es.json"
},
{
- "path": "./packages/test-utils/tsconfig.build.json"
+ "path": "./packages/test-utils/tsconfig.cjs.json"
}
]
}
diff --git a/vitest.config.ts b/vitest.config.ts
index 99356159d..2b146dac4 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -3,7 +3,7 @@ import { defineConfig } from 'vitest/config';
export default defineConfig({
test: {
root: __dirname,
- environment: 'node',
+ environment: 'jsdom',
coverage: {
enabled: true,
reporter: ['text', 'html', 'lcov', 'clover'],
diff --git a/yarn.lock b/yarn.lock
deleted file mode 100644
index e69de29bb..000000000