diff --git a/README.md b/README.md index 1f433a5..be4712b 100644 --- a/README.md +++ b/README.md @@ -8,12 +8,16 @@ This repository contains wallet adapters and components for Tron DApps. With out - [TronLink App](https://www.tronlink.org/): All versions - [TronLink Extension](https://www.tronlink.org/): All versions +- [BitKeep App](https://bitkeep.com/): All versions +- [BitKeep Extension](https://bitkeep.com/): All versions +- [OkxWallet App](https://okx.com/): Android all versions +- [OkxWallet Extension](https://okx.com/): All versions +- [TokenPocket App](https://www.tokenpocket.pro/): All versions - [Ledger](https://www.ledger.com/): All versions - [WalletConnect](https://walletconnect.org): `v2.0` ### Coming Soon -- [TokenPocket](https://www.tokenpocket.pro/) - [imToken](https://token.im/) ## Introduction @@ -122,6 +126,9 @@ tronwallet-adapter | | ├─tronlink # adapter for tronlink | | ├─ledger # adapter for ledger | | ├─walletconnect # adapter for walletconnect +| | ├─tokenpocket # adapter for TokenPocket +| | ├─bitkeep # adapter for BitKeep +| | ├─okxwallet # adapter for Okx Wallet | ├─react | | ├─react-hooks # react hooks to manage wallet state | | ├─react-ui # react ui components to select/connect wallets @@ -141,9 +148,12 @@ You can use the `@tronweb3/tronwallet-adapters` package, or add the individual w | package | description | npm | | ------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | | adapters | Includes all the wallets (with tree shaking) | [`@tronweb3/tronwallet-adapters`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapters) | -| [tronlink](https://www.tronlink.org/) | Adapter for tronlink extention and tronlink app(IOS and Android) | [`@tronweb3/tronwallet-adapter-tronlink`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-tronlink) | -| [ledger](https://www.ledger.com/) | Adapter for ledger | [`@tronweb3/tronwallet-adapter-ledger`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-ledger) | -| [walletconnect](https://walletconnect.com/) | Adapter for walletconnect | [`@tronweb3/tronwallet-adapter-walletconnect`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-walletconnect) | +| [tronlink](https://www.tronlink.org/) | Adapter for TronLink extention and TronLink app(IOS and Android) | [`@tronweb3/tronwallet-adapter-tronlink`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-tronlink) | +| [ledger](https://www.ledger.com/) | Adapter for Ledger | [`@tronweb3/tronwallet-adapter-ledger`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-ledger) | +| [walletconnect](https://walletconnect.com/) | Adapter for Walletconnect | [`@tronweb3/tronwallet-adapter-walletconnect`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-walletconnect) | +| [tokenpocket](https://tokenpocket.pro/) | Adapter for TokenPocket App(IOS and Android) | [`@tronweb3/tronwallet-adapter-tokenpocket`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-tokenpocket) | +| [bitkeep](https://bitkeep.com/) | Adapter for BitKeep extension and BitKeep App(IOS and Android) | [`@tronweb3/tronwallet-adapter-bitkeep`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-bitkeep) | +| [okxwallet](https://www.okx.com/) | Adapter for Okx Wallet extension and App(Android) | [`@tronweb3/tronwallet-adapter-okxwallet`](https://www.npmjs.com/package/@tronweb3/tronwallet-adapter-okxwallet) | ### React Components @@ -163,6 +173,9 @@ This package contains all wallet adapters for Tron including: - [TronLink](https://www.tronlink.org/). - [Ledger](https://www.ledger.com/). - [WalletConnect](https://walletconnect.org). +- [TokenPocket](https://tokenpocket.pro/). +- [BitKeep](https://bitkeep.com). +- [Okx Wallet](https://okx.com). Code example: diff --git a/demos/dev-demo/package.json b/demos/dev-demo/package.json index 777bcc8..99d1fb9 100644 --- a/demos/dev-demo/package.json +++ b/demos/dev-demo/package.json @@ -13,14 +13,17 @@ "@emotion/styled": "^11.10.4", "@mui/material": "^5.10.10", "@tronweb3/tronwallet-abstract-adapter": "^1.1.0", + "@tronweb3/tronwallet-adapter-bitkeep": "^1.0.0", "@tronweb3/tronwallet-adapter-ledger": "^1.1.2", + "@tronweb3/tronwallet-adapter-okxwallet": "^1.0.0", "@tronweb3/tronwallet-adapter-react-hooks": "^1.0.0", "@tronweb3/tronwallet-adapter-react-ui": "^1.1.0", + "@tronweb3/tronwallet-adapter-tokenpocket": "^1.0.0", "@tronweb3/tronwallet-adapters": "^1.1.2", "events": "^3.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", - "tronweb": "^4.4.0", + "tronweb": "5.1", "vconsole": "^3.15.0" }, "devDependencies": { diff --git a/demos/dev-demo/src/App.tsx b/demos/dev-demo/src/App.tsx index 5462e7b..25c8c0b 100644 --- a/demos/dev-demo/src/App.tsx +++ b/demos/dev-demo/src/App.tsx @@ -5,6 +5,9 @@ import { CustomConnectWithSelectAccount } from './LedgerDemo/CustomConnectWithSe import { CustomConnectWithGetAccounts } from './LedgerDemo/CustomConnectWithGetAccounts.js'; import { TronLinkAdapterDemo } from './TronLinkAdapterDemo.js'; import { ReactHooksDemo } from './ReactHooksDemo.js'; +import { TokenPocketAdapterDemo } from './TokenPocketAdapterDemo.js'; +import { BitKeepAdapterDemo } from './BitKeepAdapterDemo.js'; +import { OkxWalletAdapterDemo } from './OkxWalletAdapterDemo.js'; interface TabPanelProps { children?: React.ReactNode; index: number; @@ -39,6 +42,9 @@ function App() { + + + @@ -56,6 +62,15 @@ function App() { + + + + + + + + + ); diff --git a/demos/dev-demo/src/BitKeepAdapterDemo.tsx b/demos/dev-demo/src/BitKeepAdapterDemo.tsx new file mode 100644 index 0000000..a916652 --- /dev/null +++ b/demos/dev-demo/src/BitKeepAdapterDemo.tsx @@ -0,0 +1,246 @@ +import type { ReactNode } from 'react'; +import { useEffect, useMemo, useState, useCallback } from 'react'; +// import './App.css'; +import type { Adapter } from '@tronweb3/tronwallet-abstract-adapter'; +import { AdapterState } from '@tronweb3/tronwallet-abstract-adapter'; +import { BitKeepAdapter } from '@tronweb3/tronwallet-adapter-bitkeep'; +import { Box, Button, Typography, Tooltip, Select, MenuItem, Alert, FormControl, TextField } from '@mui/material'; +import { tronWeb } from './tronweb.js'; +const receiver = 'TMDKznuDWaZwfZHcM61FVFstyYNmK6Njk1'; + +export function BitKeepAdapterDemo() { + const [connectState, setConnectState] = useState(AdapterState.NotFound); + const [account, setAccount] = useState(''); + const [readyState, setReadyState] = useState(''); + const [chainId, setChainId] = useState(''); + const [selectedChainId, setSelectedChainId] = useState('0xcd8690dc'); + const [open, setOpen] = useState(false); + const [signMessage, setSignMessage] = useState('Hello, Adapter'); + const [signedMessage, setSignedMessage] = useState(''); + const adapter = useMemo(() => new BitKeepAdapter({ + openUrlWhenWalletNotFound: false, + checkTimeout: 3000 + }), []); + + useEffect(() => { + setConnectState(adapter.state); + setAccount(adapter.address || ''); + setReadyState(adapter.readyState); + adapter.network().then(async (res) => { + console.log(res); + setChainId(res.chainId); + const balance = await tronWeb.trx.getBalance(adapter.address) + }).catch(e => { + console.log(e) + }) + + adapter.on('readyStateChanged', async () => { + console.log('readyState: ', adapter.readyState) + setReadyState(adapter.readyState) + setConnectState(adapter.state) + }) + adapter.on('connect', () => { + console.log('connect: ', adapter.address); + setAccount(adapter.address || ''); + setConnectState(AdapterState.Connected) + adapter.network().then((res) => { + console.log(res); + setChainId(res.chainId) + }).catch(e => { + console.log(e) + }) + }); + adapter.on('accountsChanged', (data, preaddr) => { + console.log('accountsChanged: current', data,' pre: ', preaddr); + setAccount(data as string); + }); + + adapter.on('chainChanged', (data) => { + console.log('chainChanged: ', data); + setChainId((data as any).chainId); + }); + + adapter.on('disconnect', () => { + console.log('disconnect'); + setConnectState(AdapterState.Disconnect) + setAccount(adapter.address || ''); + }); + + return () => { + adapter.removeAllListeners(); + }; + }, [adapter]); + + // function onSwitchChain() { + // adapter.switchChain(selectedChainId); + // } + + async function onSignTransaction() { + const tronWeb = (window as any).tronWeb as any; + console.log(adapter.address) + const transaction = await tronWeb.transactionBuilder.sendTrx(receiver, tronWeb.toSun(0.001), adapter.address); + console.log('before signtransaction') + const signedTransaction = await adapter.signTransaction(transaction); + // const signedTransaction = await tronWeb.trx.sign(transaction); + console.log('after signtransaction') + const res = await tronWeb.trx.sendRawTransaction(signedTransaction); + setOpen(true); + } + + const onSignMessage = useCallback( + async function () { + const res = await adapter.signMessage(signMessage); + setSignedMessage(res); + }, + [adapter, signMessage, setSignedMessage] + ); + + const onVerifyMessage = useCallback( + async function () { + const address = await tronWeb.trx.verifyMessage(tronWeb.toHex(signMessage), signedMessage); + alert(address === adapter.address ? 'success verify' : 'failed verify'); + }, + [signMessage, signedMessage, adapter] + ); + + async function handleConnect() { + try { + await adapter?.connect() + } catch(e: any) { + console.log(e.error?.message || e.message); + } + } + return ( + +

BitKeep Demo

+ + Your account address: + + {account} + + + Current network you choose: {chainId} + + + + ReadyState: {readyState} + + + Current connection status:   + {connectState} + + + setSignMessage(e.target.value)}> + + + +      + +      + + + + +      + + + {open && ( + setOpen(false)} severity="success" sx={{ width: '100%', marginTop: 1 }}> + Success! You can confirm your transfer on{' '} + + Tron Scan + + + )} + {/* + + */} + {/* */} +
+ ); +} + +export function Detail(props: { children: ReactNode }) { + return
{props.children}
; +} + +function MultiSignDemo(props: { address: string; adapter: Adapter }) { + const [address1, setAddress1] = useState(''); + const [open, setOpen] = useState(false); + + const [transferTransaction, setTransferTransaction] = useState(null); + const [canSend, setCanSend] = useState(false); + + const multiSignWithAddress1 = useCallback( + async function () { + const tronWeb = (window as any).tronWeb1 as any; + const transaction = await tronWeb.transactionBuilder.sendTrx(receiver, tronWeb.toSun(0.1), props.address, { permissionId: 2 }); + // debugger; + console.log('before multiSign', transaction) + const signedTransaction = await props.adapter.multiSign(transaction, null, 2); + console.log('after multiSign', signedTransaction) + setTransferTransaction(signedTransaction); + }, + [props.adapter, setTransferTransaction, props.address] + ); + async function broadcast() { + const res = await tronWeb.trx.broadcast(transferTransaction); + setOpen(true); + } + return ( + <> +

MultiSign Demo

+ {/*

You can input two address and click approve button to give them permission.

+
+ setAddress1(e.target.value)}> + +
*/} + +

You can click following buttons to multiSign and send the Transaction

+
+ + {/* */} + +
+ {open && ( + setOpen(false)} severity="success" sx={{ width: '100%', marginTop: 1 }}> + Success! You can confirm your transfer on{' '} + + Tron Scan + + + )} + + ); +} diff --git a/demos/dev-demo/src/OkxWalletAdapterDemo.tsx b/demos/dev-demo/src/OkxWalletAdapterDemo.tsx new file mode 100644 index 0000000..a382849 --- /dev/null +++ b/demos/dev-demo/src/OkxWalletAdapterDemo.tsx @@ -0,0 +1,274 @@ +import type { ReactNode } from 'react'; +import { useEffect, useMemo, useState, useCallback } from 'react'; +// import './App.css'; +import { OkxWalletAdapter } from '@tronweb3/tronwallet-adapters'; +import type { Adapter } from '@tronweb3/tronwallet-abstract-adapter'; +import { AdapterState } from '@tronweb3/tronwallet-abstract-adapter'; +import { Box, Button, Typography, Tooltip, Select, MenuItem, Alert, FormControl, TextField } from '@mui/material'; +import { tronWeb } from './tronweb.js'; +const receiver = 'TMDKznuDWaZwfZHcM61FVFstyYNmK6Njk1'; +const getTronWeb = () => window.okxwallet?.tronLink?.tronWeb as any || null; +// const getTronWeb = () => tronWeb; + +export function OkxWalletAdapterDemo() { + const [connectState, setConnectState] = useState(AdapterState.NotFound); + const [account, setAccount] = useState(''); + const [readyState, setReadyState] = useState(''); + const [chainId, setChainId] = useState(''); + const [selectedChainId, setSelectedChainId] = useState('0xcd8690dc'); + const [open, setOpen] = useState(false); + const [signMessage, setSignMessage] = useState('Hello, Adapter'); + const [signedMessage, setSignedMessage] = useState(''); + const adapter = useMemo(() => new OkxWalletAdapter(), []); + + useEffect(() => { + setConnectState(adapter.state); + setAccount(adapter.address || ''); + setReadyState(adapter.readyState); + if (adapter.connected) { + adapter.network().then((res) => { + console.log(res); + setChainId(res.chainId) + }).catch(e => { + console.log(e) + }) + } + + adapter.on('readyStateChanged', () => { + console.log('readyState: ', adapter.readyState) + setReadyState(adapter.readyState) + }) + adapter.on('connect', () => { + console.log('connect: ', adapter.address); + setAccount(adapter.address || ''); + adapter.network().then((res) => { + console.log(res); + setChainId(res.chainId) + }).catch(e => { + console.log(e) + }) + }); + adapter.on('stateChanged', (state) => { + console.log('stateChanged: ', state); + setConnectState(state); + }); + adapter.on('accountsChanged', (data, preaddr) => { + console.log('accountsChanged: current', data,' pre: ', preaddr); + setAccount(data as string); + }); + + adapter.on('chainChanged', (data) => { + console.log('chainChanged: ', data); + setChainId((data as any).chainId); + }); + + adapter.on('disconnect', () => { + console.log('disconnect'); + }); + + return () => { + adapter.removeAllListeners(); + }; + }, [adapter]); + + function onSwitchChain() { + adapter.switchChain(selectedChainId); + } + + async function onSignTransaction() { + const tronWeb = getTronWeb(); + const transaction = await tronWeb.transactionBuilder.sendTrx(receiver, tronWeb.toSun(0.001), adapter.address); + const signedTransaction = await adapter.signTransaction(transaction); + console.log('signedTx', signedTransaction) + + // const signedTransaction = await tronWeb.trx.sign(transaction); + const res = await tronWeb.trx.sendRawTransaction(signedTransaction); + setOpen(true); + } + + const onSignMessage = useCallback( + async function () { + const res = await adapter.signMessage(signMessage); + setSignedMessage(res); + }, + [adapter, signMessage, setSignedMessage] + ); + + const onVerifyMessage = useCallback( + async function () { + const tronWeb = getTronWeb(); + const address = await tronWeb.trx.verifyMessageV2(signMessage, signedMessage); + alert(address === adapter.address ? 'success verify' : 'failed verify'); + }, + [signMessage, signedMessage, adapter] + ); + + async function handleConnect() { + try { + await adapter?.connect() + } catch(e: any) { + console.log(e.error?.message || e.message); + } + } + return ( + +

OkxWallet Demo

+ + Your account address: + + {account} + + + Current network you choose: {chainId} + + + + ReadyState: {readyState} + + + Current connection status:   + {connectState} + + + setSignMessage(e.target.value)}> + + + +      + +      + + + + +      + + + {open && ( + setOpen(false)} severity="success" sx={{ width: '100%', marginTop: 1 }}> + Success! You can confirm your transfer on{' '} + + Tron Scan + + + )} + +
+ ); +} + +export function Detail(props: { children: ReactNode }) { + return
{props.children}
; +} + +function MultiSignDemo(props: { address: string; adapter: Adapter }) { + const [address1, setAddress1] = useState(''); + const [open, setOpen] = useState(false); + + async function onApprove() { + const tronWeb = getTronWeb(); + const ownerAddress = tronWeb.address.toHex(props.address); + const ownerPermission = { + type: 0, + permission_name: 'owner', + threshold: 1, + keys: [ + { + address: ownerAddress, + weight: 1, + }, + ], + }; + const activePermission = { + type: 2, + permission_name: 'ActivePermission', + threshold: 2, + keys: [], + operations: '7fff1fc0037e0000000000000000000000000000000000000000000000000000', + } as any; + + activePermission.keys.push({ address: ownerAddress, weight: 1 }); + activePermission.keys.push({ address: tronWeb.address.toHex(address1), weight: 1 }); + + const updateTransaction = await tronWeb.transactionBuilder.updateAccountPermissions(ownerAddress, ownerPermission, null, [activePermission]); + const signed = await props.adapter.signTransaction(updateTransaction); + const res = await tronWeb.trx.sendRawTransaction(signed); + alert('update successfully.'); + } + + const [transferTransaction, setTransferTransaction] = useState(null); + const [canSend, setCanSend] = useState(false); + + const multiSignWithAddress1 = useCallback( + async function () { + const tronWeb = getTronWeb(); + const transaction = await tronWeb.transactionBuilder.sendTrx(receiver, tronWeb.toSun(0.1), props.address, { permissionId: 2 }); + const signedTransaction = await props.adapter.multiSign(transaction, null, 2); + setTransferTransaction(signedTransaction); + }, + [props.adapter, setTransferTransaction, props.address] + ); + const multiSignWithAddress2 = useCallback( + async function () { + console.log('first multi signed tx:', transferTransaction); + const signedTransaction = await props.adapter.multiSign(transferTransaction as any, null, 2); + console.log('second multi signed tx:', signedTransaction); + setTransferTransaction(signedTransaction); + const tronWeb = getTronWeb(); + const signWeight = await tronWeb.trx.getSignWeight(signedTransaction, 2); + console.log('signWeight: ', signWeight); + if (signWeight.current_weight >= 2) { + setCanSend(true); + } + }, + [transferTransaction, setTransferTransaction, setCanSend, props.adapter] + ); + async function broadcast() { + const tronWeb = getTronWeb(); + const res = await tronWeb.trx.broadcast(transferTransaction); + setOpen(true); + } + return ( + <> +

MultiSign Demo

+ {/*

You can input two address and click approve button to give them permission.

+
+ setAddress1(e.target.value)}> + +
*/} + +

You can click following buttons to multiSign and send the Transaction

+
+ + + +
+ {open && ( + setOpen(false)} severity="success" sx={{ width: '100%', marginTop: 1 }}> + Success! You can confirm your transfer on{' '} + + Tron Scan + + + )} + + ); +} diff --git a/demos/dev-demo/src/TokenPocketAdapterDemo.tsx b/demos/dev-demo/src/TokenPocketAdapterDemo.tsx new file mode 100644 index 0000000..f66eee2 --- /dev/null +++ b/demos/dev-demo/src/TokenPocketAdapterDemo.tsx @@ -0,0 +1,245 @@ +import type { ReactNode } from 'react'; +import { useEffect, useMemo, useState, useCallback } from 'react'; +// import './App.css'; +import type { Adapter } from '@tronweb3/tronwallet-abstract-adapter'; +import { AdapterState } from '@tronweb3/tronwallet-abstract-adapter'; +import { TokenPocketAdapter } from '@tronweb3/tronwallet-adapter-tokenpocket'; +import { Box, Button, Typography, Tooltip, Select, MenuItem, Alert, FormControl, TextField } from '@mui/material'; +import { tronWeb } from './tronweb.js'; +const receiver = 'TMDKznuDWaZwfZHcM61FVFstyYNmK6Njk1'; + +export function TokenPocketAdapterDemo() { + const [connectState, setConnectState] = useState(AdapterState.NotFound); + const [account, setAccount] = useState(''); + const [readyState, setReadyState] = useState(''); + const [chainId, setChainId] = useState(''); + const [selectedChainId, setSelectedChainId] = useState('0xcd8690dc'); + const [open, setOpen] = useState(false); + const [signMessage, setSignMessage] = useState('Hello, Adapter'); + const [signedMessage, setSignedMessage] = useState(''); + const adapter = useMemo(() => new TokenPocketAdapter({ + openAppWithDeeplink: true, + openUrlWhenWalletNotFound: false, + checkTimeout: 3000 + }), []); + + useEffect(() => { + setConnectState(adapter.state); + setAccount(adapter.address || ''); + setReadyState(adapter.readyState); + adapter.network().then(async (res) => { + console.log(res); + setChainId(res.chainId); + const balance = await tronWeb.trx.getBalance(adapter.address) + }).catch(e => { + console.log(e) + }) + + adapter.on('readyStateChanged', async () => { + console.log('readyState: ', adapter.readyState) + setReadyState(adapter.readyState) + }) + adapter.on('connect', () => { + console.log('connect: ', adapter.address); + setAccount(adapter.address || ''); + setConnectState(AdapterState.Connected) + adapter.network().then((res) => { + console.log(res); + setChainId(res.chainId) + }).catch(e => { + console.log(e) + }) + }); + adapter.on('accountsChanged', (data, preaddr) => { + console.log('accountsChanged: current', data,' pre: ', preaddr); + setAccount(data as string); + }); + + adapter.on('chainChanged', (data) => { + console.log('chainChanged: ', data); + setChainId((data as any).chainId); + }); + + adapter.on('disconnect', () => { + console.log('disconnect'); + setConnectState(AdapterState.Disconnect) + }); + + return () => { + adapter.removeAllListeners(); + }; + }, [adapter]); + + // function onSwitchChain() { + // adapter.switchChain(selectedChainId); + // } + + async function onSignTransaction() { + const tronWeb = (window as any).tronWeb1 as any; + console.log(adapter.address) + const transaction = await tronWeb.transactionBuilder.sendTrx(receiver, tronWeb.toSun(0.1), adapter.address); + console.log('before signtransaction') + const signedTransaction = await adapter.signTransaction(transaction); + // const signedTransaction = await tronWeb.trx.sign(transaction); + console.log('after signtransaction') + const res = await tronWeb.trx.sendRawTransaction(signedTransaction); + setOpen(true); + } + + const onSignMessage = useCallback( + async function () { + const res = await adapter.signMessage(signMessage); + setSignedMessage(res); + }, + [adapter, signMessage, setSignedMessage] + ); + + const onVerifyMessage = useCallback( + async function () { + const address = await tronWeb.trx.verifyMessage(tronWeb.toHex(signMessage), signedMessage); + alert(address === adapter.address ? 'success verify' : 'failed verify'); + }, + [signMessage, signedMessage, adapter] + ); + + async function handleConnect() { + try { + await adapter?.connect() + } catch(e: any) { + console.log(e.error?.message || e.message); + } + } + return ( + +

TokenPocket Demo

+ + Your account address: + + {account} + + + Current network you choose: {chainId} + + + + ReadyState: {readyState} + + + Current connection status:   + {connectState} + + + setSignMessage(e.target.value)}> + + + +      + +      + + + + +      + + + {open && ( + setOpen(false)} severity="success" sx={{ width: '100%', marginTop: 1 }}> + Success! You can confirm your transfer on{' '} + + Tron Scan + + + )} + {/* + + */} + {/* */} +
+ ); +} + +export function Detail(props: { children: ReactNode }) { + return
{props.children}
; +} + +function MultiSignDemo(props: { address: string; adapter: Adapter }) { + const [address1, setAddress1] = useState(''); + const [open, setOpen] = useState(false); + + const [transferTransaction, setTransferTransaction] = useState(null); + const [canSend, setCanSend] = useState(false); + + const multiSignWithAddress1 = useCallback( + async function () { + const tronWeb = (window as any).tronWeb1 as any; + const transaction = await tronWeb.transactionBuilder.sendTrx(receiver, tronWeb.toSun(0.1), props.address, { permissionId: 2 }); + // debugger; + console.log('before multiSign', transaction) + const signedTransaction = await props.adapter.multiSign(transaction, null, 2); + console.log('after multiSign', signedTransaction) + setTransferTransaction(signedTransaction); + }, + [props.adapter, setTransferTransaction, props.address] + ); + async function broadcast() { + const res = await tronWeb.trx.broadcast(transferTransaction); + setOpen(true); + } + return ( + <> +

MultiSign Demo

+ {/*

You can input two address and click approve button to give them permission.

+
+ setAddress1(e.target.value)}> + +
*/} + +

You can click following buttons to multiSign and send the Transaction

+
+ + {/* */} + +
+ {open && ( + setOpen(false)} severity="success" sx={{ width: '100%', marginTop: 1 }}> + Success! You can confirm your transfer on{' '} + + Tron Scan + + + )} + + ); +} diff --git a/demos/dev-demo/src/TronLinkAdapterDemo.tsx b/demos/dev-demo/src/TronLinkAdapterDemo.tsx index 43ba1c4..668baf2 100644 --- a/demos/dev-demo/src/TronLinkAdapterDemo.tsx +++ b/demos/dev-demo/src/TronLinkAdapterDemo.tsx @@ -27,12 +27,14 @@ export function TronLinkAdapterDemo() { setConnectState(adapter.state); setAccount(adapter.address || ''); setReadyState(adapter.readyState); - adapter.network().then((res) => { - console.log(res); - setChainId(res.chainId) - }).catch(e => { - console.log(e) - }) + if (adapter.connected) { + adapter.network().then((res) => { + console.log(res); + setChainId(res.chainId) + }).catch(e => { + console.log(e) + }) + } adapter.on('readyStateChanged', () => { console.log('readyState: ', adapter.readyState) @@ -64,6 +66,7 @@ export function TronLinkAdapterDemo() { adapter.on('disconnect', () => { console.log('disconnect'); + setAccount(adapter.address || '') }); return () => { diff --git a/demos/dev-demo/src/main.tsx b/demos/dev-demo/src/main.tsx index 2efce84..be5e831 100644 --- a/demos/dev-demo/src/main.tsx +++ b/demos/dev-demo/src/main.tsx @@ -10,6 +10,7 @@ import VConsole from 'vconsole'; import './index.css'; import { AppWraper } from './AppWraper.js'; const vConsole = new VConsole(); +// console.log('load', window.tronWeb?.defaultAddress, window.okxwallet?.tronLink.tronWeb.defaultAddress); ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( diff --git a/demos/dev-demo/src/tronweb.ts b/demos/dev-demo/src/tronweb.ts index 9447019..5d2d428 100644 --- a/demos/dev-demo/src/tronweb.ts +++ b/demos/dev-demo/src/tronweb.ts @@ -3,5 +3,6 @@ import TronWeb from 'tronweb'; export const tronWeb: any = new TronWeb({ fullHost: 'https://api.nileex.io', + // fullHost: 'https://api.trongrid.io' }); (window as any).tronWeb1 = tronWeb; diff --git a/demos/dev-demo/vite.config.ts b/demos/dev-demo/vite.config.ts index 36e00b7..349f423 100644 --- a/demos/dev-demo/vite.config.ts +++ b/demos/dev-demo/vite.config.ts @@ -18,6 +18,7 @@ export default defineConfig({ server: { host: '0.0.0.0', port: 3003, + https: false }, build: { minify: false, diff --git a/demos/react-ui/create-react-app/package.json b/demos/react-ui/create-react-app/package.json index 44f7a42..75f0233 100644 --- a/demos/react-ui/create-react-app/package.json +++ b/demos/react-ui/create-react-app/package.json @@ -33,8 +33,8 @@ "stream-http": "^3.2.0", "tronweb": "^4.4.0", "typescript": "^4.8.4", - "web-vitals": "^2.1.4", - "webpack": "^5.75.0" + "vconsole": "^3.15.0", + "web-vitals": "^2.1.4" }, "scripts": { "start": "GENERATE_SOURCEMAP=false react-app-rewired start", @@ -59,5 +59,8 @@ "last 1 firefox version", "last 1 safari version" ] + }, + "devDependencies": { + "webpack": "^5.78.0" } } diff --git a/demos/react-ui/create-react-app/src/App.tsx b/demos/react-ui/create-react-app/src/App.tsx index 8711bc9..2f8706b 100644 --- a/demos/react-ui/create-react-app/src/App.tsx +++ b/demos/react-ui/create-react-app/src/App.tsx @@ -11,7 +11,7 @@ import { } from '@tronweb3/tronwallet-adapter-react-ui'; import toast from 'react-hot-toast'; import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Alert } from '@mui/material'; -import { TronLinkAdapter } from '@tronweb3/tronwallet-adapters'; +import { BitKeepAdapter, OkxWalletAdapter, TokenPocketAdapter, TronLinkAdapter } from '@tronweb3/tronwallet-adapters'; import { WalletConnectAdapter } from '@tronweb3/tronwallet-adapter-walletconnect'; import { tronWeb } from './tronweb'; import { LedgerAdapter } from '@tronweb3/tronwallet-adapter-ledger'; @@ -38,8 +38,8 @@ export function App() { } else toast.error(e.message); } const adapters = useMemo(function () { - const tronLink1 = new TronLinkAdapter(); - const walletConnect1 = new WalletConnectAdapter({ + const tronLinkAdapter = new TronLinkAdapter(); + const walletConnectAdapter = new WalletConnectAdapter({ network: 'Nile', options: { relayUrl: 'wss://relay.walletconnect.com', @@ -56,7 +56,10 @@ export function App() { const ledger = new LedgerAdapter({ accountNumber: 2, }); - return [tronLink1, walletConnect1, ledger]; + const bitKeepAdapter = new BitKeepAdapter(); + const tokenPocketAdapter = new TokenPocketAdapter(); + const okxwalletAdapter = new OkxWalletAdapter(); + return [tronLinkAdapter, bitKeepAdapter, tokenPocketAdapter, okxwalletAdapter, walletConnectAdapter, ledger]; }, []); return ( diff --git a/demos/react-ui/create-react-app/src/index.tsx b/demos/react-ui/create-react-app/src/index.tsx index 0ed992d..a8052dc 100644 --- a/demos/react-ui/create-react-app/src/index.tsx +++ b/demos/react-ui/create-react-app/src/index.tsx @@ -7,7 +7,9 @@ import reportWebVitals from './reportWebVitals'; import { Toaster } from 'react-hot-toast'; import { ThemeProvider } from '@mui/material/styles'; import theme from './theme'; +import vConsole from 'vconsole' const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement); +new vConsole(); root.render( diff --git a/demos/react-ui/next-app/package.json b/demos/react-ui/next-app/package.json index e774eea..3e66982 100644 --- a/demos/react-ui/next-app/package.json +++ b/demos/react-ui/next-app/package.json @@ -13,9 +13,11 @@ "@emotion/styled": "^11.10.4", "@mui/material": "^5.10.10", "@tronweb3/tronwallet-abstract-adapter": "^1.1.0", + "@tronweb3/tronwallet-adapter-bitkeep": "^1.0.0", "@tronweb3/tronwallet-adapter-ledger": "^1.1.1", "@tronweb3/tronwallet-adapter-react-hooks": "^1.0.0", "@tronweb3/tronwallet-adapter-react-ui": "^1.1.0", + "@tronweb3/tronwallet-adapter-tokenpocket": "^1.0.0", "@tronweb3/tronwallet-adapters": "^1.1.1", "@types/node": "18.11.9", "@types/react": "18.0.26", @@ -27,6 +29,7 @@ "react-dom": "^18.2.0", "react-hot-toast": "^2.4.0", "tronweb": "^4.4.0", + "tslib": "^2.5.0", "typescript": "4.9.3" }, "devDependencies": { diff --git a/demos/react-ui/next-app/pages/_app.tsx b/demos/react-ui/next-app/pages/_app.tsx index 43228bc..e80a9fa 100644 --- a/demos/react-ui/next-app/pages/_app.tsx +++ b/demos/react-ui/next-app/pages/_app.tsx @@ -4,12 +4,13 @@ import type { WalletError } from '@tronweb3/tronwallet-abstract-adapter'; import { WalletDisconnectedError, WalletNotFoundError } from '@tronweb3/tronwallet-abstract-adapter'; // @ts-ignore import { toast } from 'react-hot-toast'; -import { TronLinkAdapter, WalletConnectAdapter } from '@tronweb3/tronwallet-adapters'; +import { BitKeepAdapter, OkxWalletAdapter, TokenPocketAdapter, TronLinkAdapter, WalletConnectAdapter } from '@tronweb3/tronwallet-adapters'; import { useMemo } from 'react'; import { WalletProvider } from '@tronweb3/tronwallet-adapter-react-hooks'; import { WalletModalProvider } from '@tronweb3/tronwallet-adapter-react-ui'; import '@tronweb3/tronwallet-adapter-react-ui/style.css'; import { LedgerAdapter } from '@tronweb3/tronwallet-adapter-ledger'; + export default function App({ Component, pageProps }: AppProps) { function onError(e: WalletError) { if (e instanceof WalletNotFoundError) { @@ -19,11 +20,11 @@ export default function App({ Component, pageProps }: AppProps) { } else toast.error(e.message); } const adapters = useMemo(function () { - const tronLink1 = new TronLinkAdapter(); + const tronLinkAdapter = new TronLinkAdapter(); const ledger = new LedgerAdapter({ accountNumber: 2, }); - const walletConnect1 = new WalletConnectAdapter({ + const walletConnectAdapter = new WalletConnectAdapter({ network: 'Nile', options: { relayUrl: 'wss://relay.walletconnect.com', @@ -37,7 +38,10 @@ export default function App({ Component, pageProps }: AppProps) { }, }, }); - return [tronLink1, walletConnect1, ledger]; + const bitKeepAdapter = new BitKeepAdapter(); + const tokenPocketAdapter = new TokenPocketAdapter(); + const okxwalletAdapter = new OkxWalletAdapter(); + return [tronLinkAdapter, bitKeepAdapter, tokenPocketAdapter, okxwalletAdapter, walletConnectAdapter, ledger]; }, []); /** diff --git a/demos/react-ui/vite-app/index.html b/demos/react-ui/vite-app/index.html index 81aefab..25063d3 100644 --- a/demos/react-ui/vite-app/index.html +++ b/demos/react-ui/vite-app/index.html @@ -5,9 +5,24 @@ Vite + React + TS +
+ diff --git a/demos/react-ui/vite-app/package.json b/demos/react-ui/vite-app/package.json index d59b1d7..ab7cc8c 100644 --- a/demos/react-ui/vite-app/package.json +++ b/demos/react-ui/vite-app/package.json @@ -20,10 +20,12 @@ "@tronweb3/tronwallet-adapter-walletconnect": "^1.0.0", "@tronweb3/tronwallet-adapters": "^1.1.1", "buffer": "^6.0.3", + "events": "^3.3.0", "react": "^18.2.0", "react-dom": "^18.2.0", "react-hot-toast": "^2.4.0", - "tronweb": "^4.4.0" + "tronweb": "^4.4.0", + "vconsole": "^3.15.0" }, "devDependencies": { "@types/react": "^18.0.26", diff --git a/demos/react-ui/vite-app/src/App.tsx b/demos/react-ui/vite-app/src/App.tsx index 3fb7c2d..28a0774 100644 --- a/demos/react-ui/vite-app/src/App.tsx +++ b/demos/react-ui/vite-app/src/App.tsx @@ -11,7 +11,7 @@ import { } from '@tronweb3/tronwallet-adapter-react-ui'; import toast from 'react-hot-toast'; import { Table, TableBody, TableCell, TableContainer, TableHead, TableRow, TextField, Alert } from '@mui/material'; -import { TronLinkAdapter } from '@tronweb3/tronwallet-adapters'; +import { TronLinkAdapter, TokenPocketAdapter, BitKeepAdapter, OkxWalletAdapter } from '@tronweb3/tronwallet-adapters'; import { WalletConnectAdapter } from '@tronweb3/tronwallet-adapter-walletconnect'; import { LedgerAdapter } from '@tronweb3/tronwallet-adapter-ledger'; import { tronWeb } from './tronweb'; @@ -57,7 +57,10 @@ export function App() { const ledger = new LedgerAdapter({ accountNumber: 2, }); - return [tronLink1, walletConnect1, ledger]; + const tokenPocket = new TokenPocketAdapter(); + const bitKeep = new BitKeepAdapter(); + const okxWalletAdapter = new OkxWalletAdapter(); + return [tronLink1, walletConnect1, ledger, tokenPocket, bitKeep, okxWalletAdapter]; }, []); return ( @@ -77,14 +80,14 @@ function UIComponent() { - + Component React UI {rows.map((row) => ( - + {row.name} diff --git a/demos/react-ui/vite-app/src/index.css b/demos/react-ui/vite-app/src/index.css index 8b45537..c7f256d 100644 --- a/demos/react-ui/vite-app/src/index.css +++ b/demos/react-ui/vite-app/src/index.css @@ -32,7 +32,7 @@ a:hover { } body { - padding: 30px; + padding: 10px; margin: 0; display: flex; min-width: 320px; @@ -88,4 +88,7 @@ button { display: flex; flex-direction: column; } + .adapter-react-button { + font-size: 14px; + } } diff --git a/demos/react-ui/vite-app/src/main.tsx b/demos/react-ui/vite-app/src/main.tsx index 6a21bcc..c2f4011 100644 --- a/demos/react-ui/vite-app/src/main.tsx +++ b/demos/react-ui/vite-app/src/main.tsx @@ -7,6 +7,8 @@ import { Toaster } from 'react-hot-toast'; import { App } from './App'; import { ThemeProvider } from '@mui/material/styles'; import theme from './theme'; +// import vConsole from 'vconsole' +// new vConsole(); ReactDOM.createRoot(document.getElementById('root') as HTMLElement).render( diff --git a/docs/wallet-adapters.md b/docs/wallet-adapters.md index ce7a415..1ce4fd8 100644 --- a/docs/wallet-adapters.md +++ b/docs/wallet-adapters.md @@ -6,10 +6,15 @@ As `@tronweb3/tronwallet-adapters` exports adapter of each wallet , you can use this package, or use the individual wallet adapter you want. -- [`@tronweb3/tronwallet-adapters`](https://npmjs.com/package/@tronweb3/tronwallet-adapters): Includes all the wallet adapters. -- [`@tronweb3/tronwallet-adapter-tronlink`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-tronlink): adapter for [TronLink](https://www.tronlink.org/). -- [`@tronweb3/tronwallet-adapter-walletconnect`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-walletconnect): adapter for [WalletConnect](https://docs.walletconnect.com/2.0/). -- [`@tronweb3/tronwallet-adapter-ledger`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-ledger): adapter for [Ledger](https://www.ledger.com/). +| NPM package | Description | Source Code | +| -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| [`@tronweb3/tronwallet-adapters`](https://npmjs.com/package/@tronweb3/tronwallet-adapters) | Includes all the wallet adapters | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) | +| [`@tronweb3/tronwallet-adapter-tronlink`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-tronlink) | adapter for [TronLink](https://www.tronlink.org/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/tronlink) | +| [`@tronweb3/tronwallet-adapter-walletconnect`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-walletconnect) | adapter for adapter for [WalletConnect](https://docs.walletconnect.com/2.0/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/walletconnect) | +| [`@tronweb3/tronwallet-adapter-tokenpocket`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-tokenpocket) | adapter for [TokenPocket](https://tokenpocket.pro/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/tokenpocket) | +| [`@tronweb3/tronwallet-adapter-bitkeep`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-bitkeep) | adapter for [BitKeep](https://bitkeep.com/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/bitkeep) | +| [`@tronweb3/tronwallet-adapter-okxwallet`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-okxwallet) | adapter for [Okx Wallet](https://okx.com/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/okxwallet) | +| [`@tronweb3/tronwallet-adapter-ledger`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-ledger) | adapter for [Ledger](https://www.ledger.com/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/ledger) | ## Usage @@ -261,7 +266,7 @@ try { /** * When use custom node */ - Unknown = 'Unknown' + Unknown = 'Unknown', } export type Network = { @@ -273,124 +278,14 @@ try { }; ``` -- **Don't support `disconnect` by DApp**. As TronLinkAdapter doesn't support disconnect by DApp website, call `adapter.disconnect()` won't disconnect from TronLink extension really. +- **TronLink Doesn't support `disconnect` by DApp**. As TronLinkAdapter doesn't support disconnect by DApp website, call `adapter.disconnect()` won't disconnect from TronLink extension really. - **Auto open TronLink app in mobile browser**. If developers call `connect()` method in mobile browser, it will open DApp in TronLink app to get tronlink wallet. -### WalletConnectAdapter +### Others adapters +Others adapters `Constructor` config api can be found in their source code `README`. -- `Constructor(config: WalletConnectAdapterConfig)` - ```typescript - interface WalletConnectAdapterConfig { - /** - * Network to use, one of Mainnet, Shasta, Nile - * Default: Nile - */ - network: 'Mainnet' | 'Shasta' | 'Nile'; - /** - * Options passed to WalletConnect client - */ - options: { - projectId: ''; - // optional parameters - relayUrl: ''; - metadata: { - name: 'Wallet name'; - description: 'A short description for your wallet'; - url: ""; - icons: [""]; - }; - }; - } - ``` - More detail about WalletConnect client options please refer to the [WalletConnect document](https://docs.walletconnect.com/2.0/javascript/sign/dapp-usage). -- `multiSign()` and `switchChain(chainId: string)` are not supported. - -### LedgerAdapter - -- `Constructor(config: LedgerAdapterConfig)` - - ```typescript - interface LedgerAdapterConfig { - /** - * Set if open Wallet's website url when wallet is not installed. - * Default is true. - */ - openUrlWhenWalletNotFound?: boolean; - /** - * Initial total accounts to get once connection is created, default is 1 - */ - accountNumber?: number; - - /** - * Hook function to call before connecting to ledger and geting accounts. - * By default, a modal will popup to reminder user to prepare the ledger and enter Tron app. - * You can specify a function to disable this modal. - */ - beforeConnect?: () => Promise | unknown; - - /** - * Hook function to call after connecting to ledger and geting initial accounts. - * The function should return the selected account including the index of account. - * Following operations such as `signMessage` will use the selected account. - */ - selectAccount?: (params: { accounts: Account[]; ledgerUtils: LedgerUtils }) => Promise; - - /** - * Function to get derivate BIP44 path by index. - * Default is `44'/195'/${index}'/0/0` - */ - getDerivationPath?: (index: number) => string; - } - interface Account { - /** - * The index to get BIP44 path. - */ - index: number; - /** - * The BIP44 path to derivate address. - */ - path: string; - /** - * The derivated address. - */ - address: string; - } - interface LedgerUtils { - /** - * Get accounts from ledger by index. `from` is included and `to` is excluded. - * User can use the function to load more accounts. - */ - getAccounts: (from: number, to: number) => Promise; - /** - * Request to get an address with specified index using getDerivationPath(index) to get BIP44 path. - * If `display` is true, will request user to approve on ledger. - * The promise will resove if user approve and reject if user cancel the operation. - */ - getAddress: (index: number, display: boolean) => Promise<{ publicKey: string; address: string }>; - } - ``` - -- Property: `ledgerUtils` - `ledgerUtils` on LedgerAdapter is used to get useful functions to interact with Ledger directly. `ledgerUtils` is defined as last section. - - - `getAccounts(from: number, to: number)` is a wrapped function to get multiple accounts by index range from ledger. - For example: - - ```typescript - const adapter = new LedgerAdapter(); - // get 5 accounts from ledger - const accounts = await adapter.ledgerUtils.getAcccounts(0, 5); - // [{ address: string, index: 0, path: "44'/195'/0'/0/0" }, ...] - ``` - - - `getAddress: (index: number, display: boolean)` is a raw function to request an address from ledger. - If `display` is true, will request user to approve on ledger. - For example, following code will request user approve on Ledger to confirm to connect their ledger. - - ```typescript - const adapter = new LedgerAdapter(); - const result = await adapter.ledgerUtils.getAddress(0, true); - // { address: 'some address', publicKey: 'publicKey for address' } - ``` - -- `multiSign()` and `switchChain(chainId: string)` are not supported. +- [TokenPocketAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/tokenpocket) +- [BitKeepAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/bitkeep) +- [OkxWalletAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/okxwallet) +- [WalletConnectAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/walletconnect) +- [LedgerAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/ledger) diff --git a/package.json b/package.json index 979f323..1653ade 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "tronwallet-adapter", "description": "wallet adapters for TRON blockchain", - "version": "1.1.5", + "version": "1.1.6", "main": "index.js", "sideEffects": false, "private": true, @@ -24,6 +24,7 @@ "build:ts": "tsc --build --verbose tsconfig.all.json", "build:other": "pnpm --recursive --filter \"@tronweb3/*\" run build", "build:clean": "pnpm run clean && pnpm run build && pnpm run package", + "build-dev-demo": "pnpm build && pnpm run --filter {demos/dev-demo} build", "package": "pnpm --recursive run package", "release": "pnpm prerelease && pnpm build:clean && pnpm test && changeset publish", "watch": "pnpm run watch:ts", diff --git a/packages/adapters/abstract-adapter/package.json b/packages/adapters/abstract-adapter/package.json index 0bba6f2..b49b03e 100644 --- a/packages/adapters/abstract-adapter/package.json +++ b/packages/adapters/abstract-adapter/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-abstract-adapter", - "version": "1.1.4", + "version": "1.1.5", "description": "Abstract interface definition of Tron Wallet Adapters.", "author": "tronprotocol", "repository": { diff --git a/packages/adapters/abstract-adapter/src/errors.ts b/packages/adapters/abstract-adapter/src/errors.ts index ce0c92d..680b56f 100644 --- a/packages/adapters/abstract-adapter/src/errors.ts +++ b/packages/adapters/abstract-adapter/src/errors.ts @@ -80,3 +80,9 @@ export class WalletWindowClosedError extends WalletError { export class WalletSwitchChainError extends WalletError { name = 'WalletSwitchChainError'; } +/** + * Occurs when get network infomation. + */ +export class WalletGetNetworkError extends WalletError { + name = 'WalletGetNetworkError'; +} diff --git a/packages/adapters/abstract-adapter/src/utils.ts b/packages/adapters/abstract-adapter/src/utils.ts index 29a242f..fe4a245 100644 --- a/packages/adapters/abstract-adapter/src/utils.ts +++ b/packages/adapters/abstract-adapter/src/utils.ts @@ -48,5 +48,8 @@ export function checkAdapterState(check: () => boolean): void { * Simplily detect mobile device */ export function isInMobileBrowser() { - return navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i); + return ( + typeof navigator !== 'undefined' && + navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i) + ); } diff --git a/packages/adapters/adapters/README.md b/packages/adapters/adapters/README.md index 68b35ef..8edf058 100644 --- a/packages/adapters/adapters/README.md +++ b/packages/adapters/adapters/README.md @@ -6,10 +6,15 @@ As `@tronweb3/tronwallet-adapters` exports adapter of each wallet , you can use this package, or use the individual wallet adapter you want. -- [`@tronweb3/tronwallet-adapters`](https://npmjs.com/package/@tronweb3/tronwallet-adapters): Includes all the wallet adapters. -- [`@tronweb3/tronwallet-adapter-tronlink`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-tronlink): adapter for [TronLink](https://www.tronlink.org/). -- [`@tronweb3/tronwallet-adapter-walletconnect`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-walletconnect): adapter for [WalletConnect](https://docs.walletconnect.com/2.0/). -- [`@tronweb3/tronwallet-adapter-ledger`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-ledger): adapter for [Ledger](https://www.ledger.com/). +| NPM package | Description | Source Code | +| -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- | +| [`@tronweb3/tronwallet-adapters`](https://npmjs.com/package/@tronweb3/tronwallet-adapters) | Includes all the wallet adapters | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) | +| [`@tronweb3/tronwallet-adapter-tronlink`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-tronlink) | adapter for [TronLink](https://www.tronlink.org/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/tronlink) | +| [`@tronweb3/tronwallet-adapter-walletconnect`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-walletconnect) | adapter for adapter for [WalletConnect](https://docs.walletconnect.com/2.0/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/walletconnect) | +| [`@tronweb3/tronwallet-adapter-tokenpocket`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-tokenpocket) | adapter for [TokenPocket](https://tokenpocket.pro/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/tokenpocket) | +| [`@tronweb3/tronwallet-adapter-bitkeep`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-bitkeep) | adapter for [BitKeep](https://bitkeep.com/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/bitkeep) | +| [`@tronweb3/tronwallet-adapter-okxwallet`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-okxwallet) | adapter for [Okx Wallet](https://okx.com/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/okxwallet) | +| [`@tronweb3/tronwallet-adapter-ledger`](https://npmjs.com/package/@tronweb3/tronwallet-adapter-ledger) | adapter for [Ledger](https://www.ledger.com/) | [View](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/ledger) | ## Usage @@ -28,7 +33,7 @@ function App() { const adapter = useMemo(() => new TronLinkAdapter(), []); useEffect(() => { - setReadyState(adapter.state); + setReadyState(adapter.readyState); setAccount(adapter.address!); adapter.on('connect', () => { @@ -273,124 +278,15 @@ try { }; ``` -- **Don't support `disconnect` by DApp**. As TronLinkAdapter doesn't support disconnect by DApp website, call `adapter.disconnect()` won't disconnect from TronLink extension really. +- **TronLink Doesn't support `disconnect` by DApp**. As TronLinkAdapter doesn't support disconnect by DApp website, call `adapter.disconnect()` won't disconnect from TronLink extension really. - **Auto open TronLink app in mobile browser**. If developers call `connect()` method in mobile browser, it will open DApp in TronLink app to get tronlink wallet. -### WalletConnectAdapter +### Others adapters -- `Constructor(config: WalletConnectAdapterConfig)` - ```typescript - interface WalletConnectAdapterConfig { - /** - * Network to use, one of Mainnet, Shasta, Nile - * Default: Nile - */ - network: 'Mainnet' | 'Shasta' | 'Nile'; - /** - * Options passed to WalletConnect client - */ - options: { - projectId: ''; - // optional parameters - relayUrl: ''; - metadata: { - name: 'Wallet name'; - description: 'A short description for your wallet'; - url: ""; - icons: [""]; - }; - }; - } - ``` - More detail about WalletConnect client options please refer to the [WalletConnect document](https://docs.walletconnect.com/2.0/javascript/sign/dapp-usage). -- `multiSign()` and `switchChain(chainId: string)` are not supported. - -### LedgerAdapter - -- `Constructor(config: LedgerAdapterConfig)` - - ```typescript - interface LedgerAdapterConfig { - /** - * Set if open Wallet's website url when wallet is not installed. - * Default is true. - */ - openUrlWhenWalletNotFound?: boolean; - /** - * Initial total accounts to get once connection is created, default is 1 - */ - accountNumber?: number; - - /** - * Hook function to call before connecting to ledger and geting accounts. - * By default, a modal will popup to reminder user to prepare the ledger and enter Tron app. - * You can specify a function to disable this modal. - */ - beforeConnect?: () => Promise | unknown; - - /** - * Hook function to call after connecting to ledger and geting initial accounts. - * The function should return the selected account including the index of account. - * Following operations such as `signMessage` will use the selected account. - */ - selectAccount?: (params: { accounts: Account[]; ledgerUtils: LedgerUtils }) => Promise; - - /** - * Function to get derivate BIP44 path by index. - * Default is `44'/195'/${index}'/0/0` - */ - getDerivationPath?: (index: number) => string; - } - interface Account { - /** - * The index to get BIP44 path. - */ - index: number; - /** - * The BIP44 path to derivate address. - */ - path: string; - /** - * The derivated address. - */ - address: string; - } - interface LedgerUtils { - /** - * Get accounts from ledger by index. `from` is included and `to` is excluded. - * User can use the function to load more accounts. - */ - getAccounts: (from: number, to: number) => Promise; - /** - * Request to get an address with specified index using getDerivationPath(index) to get BIP44 path. - * If `display` is true, will request user to approve on ledger. - * The promise will resove if user approve and reject if user cancel the operation. - */ - getAddress: (index: number, display: boolean) => Promise<{ publicKey: string; address: string }>; - } - ``` - -- Property: `ledgerUtils` - `ledgerUtils` on LedgerAdapter is used to get useful functions to interact with Ledger directly. `ledgerUtils` is defined as last section. - - - `getAccounts(from: number, to: number)` is a wrapped function to get multiple accounts by index range from ledger. - For example: - - ```typescript - const adapter = new LedgerAdapter(); - // get 5 accounts from ledger - const accounts = await adapter.ledgerUtils.getAcccounts(0, 5); - // [{ address: string, index: 0, path: "44'/195'/0'/0/0" }, ...] - ``` - - - `getAddress: (index: number, display: boolean)` is a raw function to request an address from ledger. - If `display` is true, will request user to approve on ledger. - For example, following code will request user approve on Ledger to confirm to connect their ledger. - - ```typescript - const adapter = new LedgerAdapter(); - const result = await adapter.ledgerUtils.getAddress(0, true); - // { address: 'some address', publicKey: 'publicKey for address' } - ``` +Others adapters `Constructor` config api can be found in their source code `README`. -- `multiSign()` and `switchChain(chainId: string)` are not supported. +- [TokenPocketAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/tokenpocket) +- [BitKeepAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/bitkeep) +- [OkxWalletAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/okxwallet) +- [WalletConnectAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/walletconnect) +- [LedgerAdapter](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/ledger) diff --git a/packages/adapters/adapters/package.json b/packages/adapters/adapters/package.json index de8301d..eea4fc9 100644 --- a/packages/adapters/adapters/package.json +++ b/packages/adapters/adapters/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-adapters", - "version": "1.1.4", + "version": "1.1.5", "description": "Wallet adapters to help developers interact with Tron wallets using consistent API.", "keywords": [ "TRON", @@ -40,9 +40,12 @@ "package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json" }, "dependencies": { - "@tronweb3/tronwallet-adapter-ledger": "^1.1.5", - "@tronweb3/tronwallet-adapter-tronlink": "^1.1.4", - "@tronweb3/tronwallet-adapter-walletconnect": "^1.0.2" + "@tronweb3/tronwallet-adapter-bitkeep": "^1.0.0", + "@tronweb3/tronwallet-adapter-ledger": "^1.1.6", + "@tronweb3/tronwallet-adapter-okxwallet": "^1.0.0", + "@tronweb3/tronwallet-adapter-tokenpocket": "^1.0.0", + "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5", + "@tronweb3/tronwallet-adapter-walletconnect": "^1.0.3" }, "devDependencies": { "shx": "^0.3.4" diff --git a/packages/adapters/adapters/src/index.ts b/packages/adapters/adapters/src/index.ts index 683e09e..4aa3481 100644 --- a/packages/adapters/adapters/src/index.ts +++ b/packages/adapters/adapters/src/index.ts @@ -1,3 +1,6 @@ export * from '@tronweb3/tronwallet-adapter-tronlink'; export * from '@tronweb3/tronwallet-adapter-walletconnect'; export * from '@tronweb3/tronwallet-adapter-ledger'; +export * from '@tronweb3/tronwallet-adapter-tokenpocket'; +export * from '@tronweb3/tronwallet-adapter-bitkeep'; +export * from '@tronweb3/tronwallet-adapter-okxwallet'; diff --git a/packages/adapters/adapters/tsconfig.all.json b/packages/adapters/adapters/tsconfig.all.json index 90e8e7c..ad00a8f 100644 --- a/packages/adapters/adapters/tsconfig.all.json +++ b/packages/adapters/adapters/tsconfig.all.json @@ -10,6 +10,15 @@ { "path": "../ledger/tsconfig.all.json" }, + { + "path": "../tokenpocket/tsconfig.all.json" + }, + { + "path": "../bitkeep/tsconfig.all.json" + }, + { + "path": "../okxwallet/tsconfig.all.json" + }, { "path": "./tsconfig.cjs.json" }, diff --git a/packages/adapters/bitkeep/LICENSE b/packages/adapters/bitkeep/LICENSE new file mode 100644 index 0000000..f8c1348 --- /dev/null +++ b/packages/adapters/bitkeep/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2022-Present, tronprotocol + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/adapters/bitkeep/README.md b/packages/adapters/bitkeep/README.md new file mode 100644 index 0000000..ddbfebb --- /dev/null +++ b/packages/adapters/bitkeep/README.md @@ -0,0 +1,76 @@ +# `@tronweb3/tronwallet-adapter-bitkeep` + +This package provides an adapter to enable TRON DApps to connect to the [BitKeep Wallet extension and App](https://bitkeep.com/). + +## Demo + +```typescript +import { BitKeepAdapter } from '@tronweb3/tronwallet-adapter-bitkeep'; +import TronWeb from 'tronweb'; +const tronWeb = new TronWeb({ + fullHost: 'https://api.trongrid.io', + headers: { 'TRON-PRO-API-KEY': 'your api key' }, +}); + +const adapter = new BitKeepAdapter(); +// connect +await adapter.connect(); + +// then you can get address +console.log(adapter.address); + +// create a send TRX transaction +const unSignedTransaction = await tronWeb.transactionBuilder.sendTrx(targetAddress, 100, adapter.address); +// using adapter to sign the transaction +const signedTransaction = await adapter.signTransaction(unSignedTransaction); +// broadcast the transaction +await tronWeb.trx.sendRawTransaction(signedTransaction); +``` + +## Documentation + +- `Constructor(config: BitKeepConfig)` + + ```typescript + interface BitKeepConfig { + /** + * Set if open Wallet's website when wallet is not installed. + * Default is true. + */ + openUrlWhenWalletNotFound?: boolean; + /** + * Timeout in millisecond for checking if BitKeep wallet is supported. + * Default is 2 * 1000ms + */ + checkTimeout?: number; + } + ``` + +- `network()` method is supported to get current network information. The type of returned value is `Network` as follows: + + ```typescript + export enum NetworkType { + Mainnet = 'Mainnet', + Shasta = 'Shasta', + Nile = 'Nile', + /** + * When use custom node + */ + Unknown = 'Unknown', + } + + export type Network = { + networkType: NetworkType; + chainId: string; + fullNode: string; + solidityNode: string; + eventServer: string; + }; + ``` + +### Caveats + +- BitKeep App and Extension doesn't implement `signMessage()`, `multiSign()` and `switchChain()`. +- BitKeep App and Extension will reload current page so there is no need to listen `accountsChanged` event. + +For more information about tronwallet adapters, please refer to [`@tronweb3/tronwallet-adapters`](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) diff --git a/packages/adapters/bitkeep/jest.config.js b/packages/adapters/bitkeep/jest.config.js new file mode 100644 index 0000000..2a76755 --- /dev/null +++ b/packages/adapters/bitkeep/jest.config.js @@ -0,0 +1,17 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + preset: 'ts-jest', + testEnvironment: 'jsdom', + transform: { + '\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, + moduleNameMapper: { + '(.+)\\.js': '$1', + }, + extensionsToTreatAsEsm: ['.ts'], +}; diff --git a/packages/adapters/bitkeep/package.json b/packages/adapters/bitkeep/package.json new file mode 100644 index 0000000..e49b7f1 --- /dev/null +++ b/packages/adapters/bitkeep/package.json @@ -0,0 +1,52 @@ +{ + "name": "@tronweb3/tronwallet-adapter-bitkeep", + "version": "1.0.0", + "description": "Wallet adapter for BitKeep Wallet extension and app.", + "keywords": [ + "TRON", + "TronWeb", + "BitKeep" + ], + "author": "tronprotocol", + "repository": { + "type": "git", + "url": "https://github.com/tronprotocol/tronwallet-adapter" + }, + "license": "MIT", + "type": "module", + "sideEffects": false, + "engines": { + "node": ">=16", + "pnpm": ">=7" + }, + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/types/index.d.ts", + "exports": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js", + "types": "./lib/types/index.d.ts" + }, + "files": [ + "lib", + "src", + "LICENSE" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "clean": "shx mkdir -p lib && shx rm -rf lib", + "package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json", + "test": "jest" + }, + "dependencies": { + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", + "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5" + }, + "devDependencies": { + "@testing-library/dom": "^8.20.0", + "jest-environment-jsdom": "^29.3.1", + "shx": "^0.3.4" + } +} diff --git a/packages/adapters/bitkeep/src/adapter.ts b/packages/adapters/bitkeep/src/adapter.ts new file mode 100644 index 0000000..069f443 --- /dev/null +++ b/packages/adapters/bitkeep/src/adapter.ts @@ -0,0 +1,306 @@ +import { + Adapter, + AdapterState, + isInBrowser, + WalletReadyState, + WalletSignMessageError, + WalletNotFoundError, + WalletDisconnectedError, + WalletSignTransactionError, + WalletConnectionError, + WalletGetNetworkError, + isInMobileBrowser, +} from '@tronweb3/tronwallet-abstract-adapter'; +import { getNetworkInfoByTronWeb } from '@tronweb3/tronwallet-adapter-tronlink'; +import type { TronLinkWallet } from '@tronweb3/tronwallet-adapter-tronlink'; +import type { + Transaction, + SignedTransaction, + AdapterName, + BaseAdapterConfig, + Network, +} from '@tronweb3/tronwallet-abstract-adapter'; +import { supportBitKeep } from './utils.js'; + +export interface BitKeepAdapterConfig extends BaseAdapterConfig { + /** + * Timeout in millisecond for checking if BitKeep is supported. + * Default is 2 * 1000ms + */ + checkTimeout?: number; +} + +export const BitKeepAdapterName = 'BitKeep' as AdapterName<'BitKeep'>; + +export class BitKeepAdapter extends Adapter { + name = BitKeepAdapterName; + url = 'https://bitkeep.com'; + icon = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iNjQiIGZpbGw9IiM3NTI0RjkiLz4KPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBjbGlwLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMDIgNDUuNjAyN1Y0OS44MjA0QzEwMi4wMDEgNTAuMjI4MyAxMDEuODkzIDUwLjYyOTIgMTAxLjY4NyA1MC45ODI3QzEwMS40ODEgNTEuMzM2MSAxMDEuMTg1IDUxLjYyOTYgMTAwLjgyOCA1MS44MzM1TDg3LjA5MDggNTkuNjgwMUw5OS4zNjMzIDY2LjY3MUMxMDAuMTY1IDY3LjEyOTUgMTAwLjgzMSA2Ny43ODkyIDEwMS4yOTQgNjguNTgzNkMxMDEuNzU3IDY5LjM3OCAxMDIuMDAxIDcwLjI3OTEgMTAyIDcxLjE5NjJWODIuNDQyNEMxMDIuMDAxIDgzLjM2IDEwMS43NTggODQuMjYxNyAxMDEuMjk1IDg1LjA1NjdDMTAwLjgzMiA4NS44NTE2IDEwMC4xNjYgODYuNTExNyA5OS4zNjMzIDg2Ljk3MDVMNjcuMDg2OSAxMDUuM0M2Ni4yODUzIDEwNS43NTkgNjUuMzc1OSAxMDYgNjQuNDUwMiAxMDZDNjMuNTI0NSAxMDYgNjIuNjE1MSAxMDUuNzU5IDYxLjgxMzUgMTA1LjNMNTEuMjUyIDk5LjI2MTFDNTEuMDczNyA5OS4xNTkzIDUwLjkyNTYgOTkuMDEyOCA1MC44MjI3IDk4LjgzNjNDNTAuNzE5OCA5OC42NTk5IDUwLjY2NTYgOTguNDU5NyA1MC42NjU2IDk4LjI1NkM1MC42NjU2IDk4LjA1MjIgNTAuNzE5OCA5Ny44NTIgNTAuODIyNyA5Ny42NzU2QzUwLjkyNTYgOTcuNDk5MSA1MS4wNzM3IDk3LjM1MjcgNTEuMjUyIDk3LjI1MDhMODYuMTE1MiA3Ny4zODM1Qzg2LjIwNCA3Ny4zMzI1IDg2LjI3NzcgNzcuMjU5MyA4Ni4zMjkgNzcuMTcxMkM4Ni4zODAyIDc3LjA4MzIgODYuNDA3MiA3Ni45ODMzIDg2LjQwNzIgNzYuODgxN0M4Ni40MDcyIDc2Ljc4IDg2LjM4MDIgNzYuNjgwMiA4Ni4zMjkgNzYuNTkyMUM4Ni4yNzc3IDc2LjUwNCA4Ni4yMDQgNzYuNDMwOCA4Ni4xMTUyIDc2LjM3OThMNzMuMTcxOSA2OC45NzcxQzcyLjgxNTYgNjguNzczNCA3Mi40MTE0IDY4LjY2NjIgNzIgNjguNjY2MkM3MS41ODg2IDY4LjY2NjIgNzEuMTg0NCA2OC43NzM0IDcwLjgyODEgNjguOTc3MUwzNS40MTcgODkuMTcyMkMzNS4xNDk4IDg5LjMyNSAzNC44NDY3IDg5LjQwNTQgMzQuNTM4MSA4OS40MDU0QzM0LjIyOTUgODkuNDA1NCAzMy45MjY0IDg5LjMyNSAzMy42NTkyIDg5LjE3MjJMMjkuNjQ4NCA4Ni45MDA5QzI4Ljg0MjQgODYuNDQyOCAyOC4xNzI5IDg1Ljc4MiAyNy43MDc4IDg0Ljk4NTNDMjcuMjQyNyA4NC4xODg2IDI2Ljk5ODUgODMuMjg0MyAyNyA4Mi4zNjQxVjc3Ljc2NjRDMjYuOTk5OCA3Ny40NjA3IDI3LjA4MDkgNzcuMTYwMyAyNy4yMzUyIDc2Ljg5NTVDMjcuMzg5NSA3Ni42MzA3IDI3LjYxMTUgNzYuNDEwOSAyNy44Nzg5IDc2LjI1OEw3OC42NTA0IDQ3LjM2OTNDNzguNzM5MiA0Ny4zMTgzIDc4LjgxMjkgNDcuMjQ1MSA3OC44NjQxIDQ3LjE1N0M3OC45MTU0IDQ3LjA2ODkgNzguOTQyMyA0Ni45NjkxIDc4Ljk0MjMgNDYuODY3NEM3OC45NDIzIDQ2Ljc2NTggNzguOTE1NCA0Ni42NjU5IDc4Ljg2NDEgNDYuNTc3OUM3OC44MTI5IDQ2LjQ4OTggNzguNzM5MiA0Ni40MTY2IDc4LjY1MDQgNDYuMzY1Nkw2NS42ODY1IDM4LjkzNjdDNjUuMzMwMiAzOC43MzMxIDY0LjkyNjEgMzguNjI1OCA2NC41MTQ2IDM4LjYyNThDNjQuMTAzMiAzOC42MjU4IDYzLjY5OTEgMzguNzMzMSA2My4zNDI4IDM4LjkzNjdMMjguNzU3OCA1OC42M0MyOC41Nzk4IDU4LjczMTggMjguMzc3OCA1OC43ODU0IDI4LjE3MjIgNTguNzg1NUMyNy45NjY2IDU4Ljc4NTUgMjcuNzY0NiA1OC43MzIgMjcuNTg2NSA1OC42MzAzQzI3LjQwODQgNTguNTI4NiAyNy4yNjA0IDU4LjM4MjMgMjcuMTU3NSA1OC4yMDYxQzI3LjA1NDUgNTguMDI5OSAyNy4wMDAyIDU3LjgzIDI3IDU3LjYyNjRWNDUuNTQ3NkMyNi45OTg5IDQ0LjYzIDI3LjI0MiA0My43MjgzIDI3LjcwNDkgNDIuOTMzNEMyOC4xNjc4IDQyLjEzODQgMjguODM0MSA0MS40NzgzIDI5LjYzNjcgNDEuMDE5NUw2MS45MDcyIDIyLjY5NTRDNjIuNzA3MSAyMi4yMzk4IDYzLjYxMzggMjIgNjQuNTM2NiAyMkM2NS40NTk0IDIyIDY2LjM2NjEgMjIuMjM5OCA2Ny4xNjYgMjIuNjk1NEw5OS4zNjMzIDQxLjA4MzNDMTAwLjE2NSA0MS41NDE0IDEwMC44MyA0Mi4yMDAxIDEwMS4yOTMgNDIuOTkzNEMxMDEuNzU2IDQzLjc4NjcgMTAyIDQ0LjY4NjYgMTAyIDQ1LjYwMjdaIiBmaWxsPSJ3aGl0ZSIvPgo8L3N2Zz4K'; + + config: Required; + private _readyState: WalletReadyState = WalletReadyState.Loading; + private _state: AdapterState = AdapterState.Loading; + private _connecting: boolean; + private _wallet: TronLinkWallet | null; + private _address: string | null; + + constructor(config: BitKeepAdapterConfig = {}) { + super(); + const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true } = config; + if (typeof checkTimeout !== 'number') { + throw new Error('[BitKeepAdapter] config.checkTimeout should be a number'); + } + this.config = { + checkTimeout, + openUrlWhenWalletNotFound, + }; + this._connecting = false; + this._wallet = null; + this._address = null; + + if (!isInBrowser()) { + this._readyState = WalletReadyState.NotFound; + this.setState(AdapterState.NotFound); + return; + } + if (supportBitKeep()) { + this._readyState = WalletReadyState.Found; + this._updateWallet(); + } else { + this._checkWallet().then(() => { + if (this.connected) { + this.emit('connect', this.address || ''); + } + }); + } + } + + get address() { + return this._address; + } + + get state() { + return this._state; + } + get readyState() { + return this._readyState; + } + + get connecting() { + return this._connecting; + } + + /** + * Get network information. + * @returns {Network} Current network information. + */ + async network(): Promise { + try { + await this._checkWallet(); + if (this.state !== AdapterState.Connected) throw new WalletDisconnectedError(); + const wallet = this._wallet; + if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); + try { + return await getNetworkInfoByTronWeb(wallet.tronWeb); + } catch (e: any) { + throw new WalletGetNetworkError(e?.message, e); + } + } catch (e: any) { + this.emit('error', e); + throw e; + } + } + + async connect(): Promise { + try { + if (this.connected || this.connecting) return; + await this._checkWallet(); + if (this.readyState === WalletReadyState.NotFound) { + if (this.config.openUrlWhenWalletNotFound !== false && isInBrowser()) { + window.open(this.url, '_blank'); + } + throw new WalletNotFoundError(); + } + const wallet = this._wallet as TronLinkWallet; + if (!isInMobileBrowser()) { + if (!wallet) return; + this._connecting = true; + try { + await wallet.request({ method: 'tron_requestAccounts' }); + } catch (e: any) { + throw new WalletConnectionError(e.message); + } + } + const address = wallet.tronWeb.defaultAddress?.base58 || ''; + this.setAddress(address); + this.setState(AdapterState.Connected); + this.emit('connect', this.address || ''); + } catch (error: any) { + this.emit('error', error); + throw error; + } finally { + this._connecting = false; + } + } + + async disconnect(): Promise { + if (this.state !== AdapterState.Connected) { + return; + } + this.setAddress(null); + this.setState(AdapterState.Disconnect); + this.emit('disconnect'); + } + + async signTransaction(transaction: Transaction, privateKey?: string): Promise { + try { + const wallet = await this.checkAndGetWallet(); + + try { + return await wallet.tronWeb.trx.sign(transaction, privateKey); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignTransactionError(error.message, error); + } else { + throw new WalletSignTransactionError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + async multiSign(...args: any[]): Promise { + try { + const wallet = await this.checkAndGetWallet(); + try { + return await wallet.tronWeb.trx.multiSign(...args); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignTransactionError(error.message, error); + } else { + throw new WalletSignTransactionError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + async signMessage(message: string, privateKey?: string): Promise { + try { + const wallet = await this.checkAndGetWallet(); + try { + return await wallet.tronWeb.trx.signMessageV2(message, privateKey); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignMessageError(error.message, error); + } else { + throw new WalletSignMessageError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + private async checkAndGetWallet() { + await this._checkWallet(); + if (!this.connected) throw new WalletDisconnectedError(); + const wallet = this._wallet; + if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); + return wallet as TronLinkWallet; + } + + private checkReadyInterval: ReturnType | null = null; + private checkForWalletReady() { + if (this.checkReadyInterval) { + return; + } + let times = 0; + const maxTimes = Math.floor(this.config.checkTimeout / 200); + const check = () => { + if (window?.tronWeb?.ready) { + this.checkReadyInterval && clearInterval(this.checkReadyInterval); + this.checkReadyInterval = null; + this._updateWallet(); + this.emit('connect', this.address || ''); + } else if (times > maxTimes) { + this.checkReadyInterval && clearInterval(this.checkReadyInterval); + this.checkReadyInterval = null; + } else { + times++; + } + }; + this.checkReadyInterval = setInterval(check, 200); + } + + private _checkPromise: Promise | null = null; + /** + * check if wallet exists by interval, the promise only resolve when wallet detected or timeout + * @returns if wallet exists + */ + private _checkWallet(): Promise { + if (this.readyState === WalletReadyState.Found) { + return Promise.resolve(true); + } + if (this._checkPromise) { + return this._checkPromise; + } + const interval = 100; + const maxTimes = Math.floor(this.config.checkTimeout / interval); + let times = 0, + timer: ReturnType; + this._checkPromise = new Promise((resolve) => { + const check = () => { + times++; + const isSupport = supportBitKeep(); + if (isSupport || times > maxTimes) { + timer && clearInterval(timer); + this._readyState = isSupport ? WalletReadyState.Found : WalletReadyState.NotFound; + this._updateWallet(); + this.emit('readyStateChanged', this.readyState); + resolve(isSupport); + } + }; + timer = setInterval(check, interval); + check(); + }); + return this._checkPromise; + } + + private _updateWallet = () => { + let state = this.state; + let address = this.address; + if (supportBitKeep()) { + this._wallet = window.tronLink as TronLinkWallet; + address = this._wallet.tronWeb.defaultAddress?.base58 || null; + state = window.tronWeb?.ready ? AdapterState.Connected : AdapterState.Disconnect; + if (!window.tronWeb?.ready) { + this.checkForWalletReady(); + } + } else { + this._wallet = null; + address = null; + state = AdapterState.NotFound; + } + this.setAddress(address); + this.setState(state); + }; + + private setAddress(address: string | null) { + this._address = address; + } + + private setState(state: AdapterState) { + const preState = this.state; + if (state !== preState) { + this._state = state; + this.emit('stateChanged', state); + } + } +} diff --git a/packages/adapters/bitkeep/src/index.ts b/packages/adapters/bitkeep/src/index.ts new file mode 100644 index 0000000..c4929c4 --- /dev/null +++ b/packages/adapters/bitkeep/src/index.ts @@ -0,0 +1,2 @@ +export * from './adapter.js'; +export * from './utils.js'; diff --git a/packages/adapters/bitkeep/src/utils.ts b/packages/adapters/bitkeep/src/utils.ts new file mode 100644 index 0000000..6b475cd --- /dev/null +++ b/packages/adapters/bitkeep/src/utils.ts @@ -0,0 +1,3 @@ +export function supportBitKeep() { + return !!window.tronLink && (window as any).isBitKeep; +} diff --git a/packages/adapters/bitkeep/tests/units/adapter.test.ts b/packages/adapters/bitkeep/tests/units/adapter.test.ts new file mode 100644 index 0000000..27aa981 --- /dev/null +++ b/packages/adapters/bitkeep/tests/units/adapter.test.ts @@ -0,0 +1,11 @@ +import { BitKeepAdapter } from '../../src/adapter.js'; + +describe('BitKeepAdapter', () => { + test('should be defined', () => { + expect(BitKeepAdapter).not.toBeNull(); + }); + test('#constructor() should work fine', () => { + const adapter = new BitKeepAdapter(); + expect(adapter.name).toEqual('BitKeep'); + }); +}); diff --git a/packages/adapters/bitkeep/tsconfig.all.json b/packages/adapters/bitkeep/tsconfig.all.json new file mode 100644 index 0000000..a1ded9c --- /dev/null +++ b/packages/adapters/bitkeep/tsconfig.all.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tsconfig.root.json", + "references": [ + { + "path": "../abstract-adapter/tsconfig.all.json" + }, + { + "path": "../tronlink/tsconfig.all.json" + }, + { + "path": "./tsconfig.cjs.json" + }, + { + "path": "./tsconfig.esm.json" + } + ] +} diff --git a/packages/adapters/bitkeep/tsconfig.cjs.json b/packages/adapters/bitkeep/tsconfig.cjs.json new file mode 100644 index 0000000..099b9aa --- /dev/null +++ b/packages/adapters/bitkeep/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.cjs.json", + "include": ["src"], + "compilerOptions": { + "outDir": "lib/cjs" + } +} diff --git a/packages/adapters/bitkeep/tsconfig.esm.json b/packages/adapters/bitkeep/tsconfig.esm.json new file mode 100644 index 0000000..4900d2f --- /dev/null +++ b/packages/adapters/bitkeep/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.esm.json", + "include": ["src"], + "compilerOptions": { + "outDir": "lib/esm", + "declarationDir": "lib/types" + } +} diff --git a/packages/adapters/ledger/README.md b/packages/adapters/ledger/README.md index 6c1ca3d..4a230c3 100644 --- a/packages/adapters/ledger/README.md +++ b/packages/adapters/ledger/README.md @@ -2,26 +2,130 @@ This package provides an adapter for the Ledger Wallet. -## Usage +## Demo ```typescript import { LedgerAdapter } from '@tronweb3/tronwallet-adapter-ledger'; +import TronWeb from 'tronweb'; +const tronWeb = new TronWeb({ + fullHost: 'https://api.trongrid.io', + headers: { 'TRON-PRO-API-KEY': 'your api key' }, +}); -const App = () => { - const adapters = useMemo( - () => [ - new LedgerAdapter({ - // Initial total accounts to get once connection is created - accountNumber: 5, - // Custom derivate path for address - getDerivationPath(index) { - return `44'/195'/0'/0/${index}`; - }, - }), - ], - [] - ); -}; +const adapter = new LedgerAdapter({ + // Initial total accounts to get once connection is created + accountNumber: 5, + // Custom derivate path for address + getDerivationPath(index) { + return `44'/195'/0'/0/${index}`; + }, +}); +// connect +await adapter.connect(); + +// then you can get address +console.log(adapter.address); + +// create a send TRX transaction +const unSignedTransaction = await tronWeb.transactionBuilder.sendTrx(targetAddress, 100, adapter.address); +// using adapter to sign the transaction +const signedTransaction = await adapter.signTransaction(unSignedTransaction); +// broadcast the transaction +await tronWeb.trx.sendRawTransaction(signedTransaction); ``` +## Documentation + +### API + +- `Constructor(config: LedgerAdapterConfig)` + + ```typescript + interface LedgerAdapterConfig { + /** + * Set if open Wallet's website when wallet is not installed. + * Default is true. + */ + openUrlWhenWalletNotFound?: boolean; + /** + * Initial total accounts to get once connection is created, default is 1 + */ + accountNumber?: number; + + /** + * Hook function to call before connecting to ledger and geting accounts. + * By default, a modal will popup to reminder user to prepare the ledger and enter Tron app. + * You can specify a function to disable this modal. + */ + beforeConnect?: () => Promise | unknown; + + /** + * Hook function to call after connecting to ledger and geting initial accounts. + * The function should return the selected account including the index of account. + * Following operations such as `signMessage` will use the selected account. + */ + selectAccount?: (params: { accounts: Account[]; ledgerUtils: LedgerUtils }) => Promise; + + /** + * Function to get derivate BIP44 path by index. + * Default is `44'/195'/${index}'/0/0` + */ + getDerivationPath?: (index: number) => string; + } + interface Account { + /** + * The index to get BIP44 path. + */ + index: number; + /** + * The BIP44 path to derivate address. + */ + path: string; + /** + * The derivated address. + */ + address: string; + } + interface LedgerUtils { + /** + * Get accounts from ledger by index. `from` is included and `to` is excluded. + * User can use the function to load more accounts. + */ + getAccounts: (from: number, to: number) => Promise; + /** + * Request to get an address with specified index using getDerivationPath(index) to get BIP44 path. + * If `display` is true, will request user to approve on ledger. + * The promise will resove if user approve and reject if user cancel the operation. + */ + getAddress: (index: number, display: boolean) => Promise<{ publicKey: string; address: string }>; + } + ``` + +- Property: `ledgerUtils` + `ledgerUtils` on LedgerAdapter is used to get useful functions to interact with Ledger directly. `ledgerUtils` is defined as last section. + + - `getAccounts(from: number, to: number)` is a wrapped function to get multiple accounts by index range from ledger. + For example: + + ```typescript + const adapter = new LedgerAdapter(); + // get 5 accounts from ledger + const accounts = await adapter.ledgerUtils.getAcccounts(0, 5); + // [{ address: string, index: 0, path: "44'/195'/0'/0/0" }, ...] + ``` + + - `getAddress: (index: number, display: boolean)` is a raw function to request an address from ledger. + If `display` is true, will request user to approve on ledger. + For example, following code will request user approve on Ledger to confirm to connect their ledger. + + ```typescript + const adapter = new LedgerAdapter(); + const result = await adapter.ledgerUtils.getAddress(0, true); + // { address: 'some address', publicKey: 'publicKey for address' } + ``` + +### Caveats + +- `multiSign()` and `switchChain(chainId: string)` are not supported. + For more information about tronwallet adapters, please refer to [`@tronweb3/tronwallet-adapters`](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) diff --git a/packages/adapters/ledger/package.json b/packages/adapters/ledger/package.json index 15f0f63..f21ffae 100644 --- a/packages/adapters/ledger/package.json +++ b/packages/adapters/ledger/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-adapter-ledger", - "version": "1.1.5", + "version": "1.1.6", "description": "Wallet adapter for the Ledger wallet.", "keywords": [ "TRON", @@ -44,13 +44,14 @@ "@ledgerhq/hw-app-trx": "^6.27.8", "@ledgerhq/hw-transport": "6.27.1", "@ledgerhq/hw-transport-webhid": "6.27.1", - "@tronweb3/tronwallet-abstract-adapter": "^1.1.4", + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", "buffer": "^6.0.3", "eventemitter3": "^4.0.0", "preact": "^10.11.3" }, "devDependencies": { "@testing-library/dom": "^8.20.0", + "jest-environment-jsdom": "^29.3.1", "shx": "^0.3.4" } } diff --git a/packages/adapters/okxwallet/LICENSE b/packages/adapters/okxwallet/LICENSE new file mode 100644 index 0000000..f8c1348 --- /dev/null +++ b/packages/adapters/okxwallet/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2022-Present, tronprotocol + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/adapters/okxwallet/README.md b/packages/adapters/okxwallet/README.md new file mode 100644 index 0000000..6d28941 --- /dev/null +++ b/packages/adapters/okxwallet/README.md @@ -0,0 +1,84 @@ +# `@tronweb3/tronwallet-adapter-okxwallet` + +This package provides an adapter to enable TRON DApps to connect to the [Okx Wallet extension](https://www.okx.com/download) and [Okx Wallet App](https://www.okx.com/download). + +## Demo + +```typescript +import { OkxWalletAdapter } from '@tronweb3/tronwallet-adapter-okxwallet'; + +const adapter = new OkxWalletAdapter(); +// connect to TokenPocket +await adapter.connect(); + +// then you can get address +console.log(adapter.address); + +// create a send TRX transaction +const unSignedTransaction = await window.okxwallet.tronLink.tronWeb.transactionBuilder.sendTrx( + targetAddress, + 100, + adapter.address +); +// using adapter to sign the transaction +const signedTransaction = await adapter.signTransaction(unSignedTransaction); +// broadcast the transaction +await window.okxwallet.tronLink.tronWeb.trx.sendRawTransaction(signedTransaction); +``` + +## Documentation + +### API + +- `Constructor(config: OkxWalletAdapterConfig)` + +```typescript +interface OkxWalletAdapterConfig { + /** + * Set if open Wallet's website when wallet is not installed. + * Default is true. + */ + openUrlWhenWalletNotFound?: boolean; + /** + * Timeout in millisecond for checking if TokenPocket wallet is supported. + * Default is 2 * 1000ms + */ + checkTimeout?: number; + /** + * Set if open TokenPocket app using DeepLink on mobile device. + * Default is true. + */ + openAppWithDeeplink?: boolean; +} +``` + +- `network()` method is supported to get current network information. The type of returned value is `Network` as follows: + + ```typescript + export enum NetworkType { + Mainnet = 'Mainnet', + Shasta = 'Shasta', + Nile = 'Nile', + /** + * When use custom node + */ + Unknown = 'Unknown', + } + + export type Network = { + networkType: NetworkType; + chainId: string; + fullNode: string; + solidityNode: string; + eventServer: string; + }; + ``` + +### Caveats + +- OkxWallet App and Extension doesn't implement `signMessage()`, `multiSign()` and `switchChain()`. +- OkxWallet Extension only support these: `accountsChanged`,`connect`,`disconnect`. +- OkxWallet App does not support any events. +- Deeplink only works for OKX App **version 6.1.38 or later** on Android. **OKX App on IOS currently doesn't work fine**. + +For more information about tronwallet adapters, please refer to [`@tronweb3/tronwallet-adapters`](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) diff --git a/packages/adapters/okxwallet/jest.config.js b/packages/adapters/okxwallet/jest.config.js new file mode 100644 index 0000000..2a76755 --- /dev/null +++ b/packages/adapters/okxwallet/jest.config.js @@ -0,0 +1,17 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + preset: 'ts-jest', + testEnvironment: 'jsdom', + transform: { + '\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, + moduleNameMapper: { + '(.+)\\.js': '$1', + }, + extensionsToTreatAsEsm: ['.ts'], +}; diff --git a/packages/adapters/okxwallet/package.json b/packages/adapters/okxwallet/package.json new file mode 100644 index 0000000..ae9e7ed --- /dev/null +++ b/packages/adapters/okxwallet/package.json @@ -0,0 +1,53 @@ +{ + "name": "@tronweb3/tronwallet-adapter-okxwallet", + "version": "1.0.0", + "description": "Wallet adapter for Okx Wallet extension and Okx Wallet app.", + "keywords": [ + "TRON", + "TronWeb", + "Okx Wallet" + ], + "author": "tronprotocol", + "repository": { + "type": "git", + "url": "https://github.com/tronprotocol/tronwallet-adapter" + }, + "license": "MIT", + "type": "module", + "sideEffects": false, + "engines": { + "node": ">=16", + "pnpm": ">=7" + }, + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/types/index.d.ts", + "exports": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js", + "types": "./lib/types/index.d.ts" + }, + "files": [ + "lib", + "src", + "LICENSE" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "clean": "shx mkdir -p lib && shx rm -rf lib", + "package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json", + "test": "jest", + "test:coverage": "jest --coverage" + }, + "dependencies": { + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", + "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5" + }, + "devDependencies": { + "@testing-library/dom": "^8.20.0", + "jest-environment-jsdom": "^29.3.1", + "shx": "^0.3.4" + } +} diff --git a/packages/adapters/okxwallet/src/adapter.ts b/packages/adapters/okxwallet/src/adapter.ts new file mode 100644 index 0000000..49db3c6 --- /dev/null +++ b/packages/adapters/okxwallet/src/adapter.ts @@ -0,0 +1,375 @@ +import { + Adapter, + AdapterState, + isInBrowser, + WalletReadyState, + WalletSignMessageError, + WalletNotFoundError, + WalletDisconnectedError, + WalletConnectionError, + WalletSignTransactionError, + WalletGetNetworkError, +} from '@tronweb3/tronwallet-abstract-adapter'; +import type { + Transaction, + SignedTransaction, + AdapterName, + BaseAdapterConfig, + Network, +} from '@tronweb3/tronwallet-abstract-adapter'; +import type { + AccountsChangedEventData, + TronLinkMessageEvent, + TronLinkWallet, +} from '@tronweb3/tronwallet-adapter-tronlink'; +import { getNetworkInfoByTronWeb } from '@tronweb3/tronwallet-adapter-tronlink'; +import { openOkxWallet, supportOkxWallet } from './utils.js'; + +declare global { + interface Window { + okxwallet?: { + tronLink: TronLinkWallet; + }; + } +} +export interface OkxWalletAdapterConfig extends BaseAdapterConfig { + /** + * Timeout in millisecond for checking if OkxWallet wallet exists. + * Default is 2 * 1000ms + */ + checkTimeout?: number; + /** + * Set if open OkxWallet app using DeepLink. + * Default is true. + */ + openAppWithDeeplink?: boolean; +} + +export const OkxWalletAdapterName = 'OKX Wallet' as AdapterName<'OKX Wallet'>; + +export class OkxWalletAdapter extends Adapter { + name = OkxWalletAdapterName; + url = 'https://okx.com'; + icon = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDAiIGhlaWdodD0iNDAiIHZpZXdCb3g9IjAgMCA0MCA0MCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iOCIgZmlsbD0iYmxhY2siLz4KPHBhdGggZD0iTTIzLjU1ODMgMTUuODk2NUgxNi40NDc0QzE2LjE0NTMgMTUuODk2NSAxNS45MDA0IDE2LjE0MTQgMTUuOTAwNCAxNi40NDM1VjIzLjU1NDRDMTUuOTAwNCAyMy44NTY1IDE2LjE0NTMgMjQuMTAxNCAxNi40NDc0IDI0LjEwMTRIMjMuNTU4M0MyMy44NjA0IDI0LjEwMTQgMjQuMTA1MyAyMy44NTY1IDI0LjEwNTMgMjMuNTU0NFYxNi40NDM1QzI0LjEwNTMgMTYuMTQxNCAyMy44NjA0IDE1Ljg5NjUgMjMuNTU4MyAxNS44OTY1WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTE2LjQ0NzQgMTYuMzk2NUgyMy41NTgzQzIzLjU4NDIgMTYuMzk2NSAyMy42MDUzIDE2LjQxNzUgMjMuNjA1MyAxNi40NDM1VjIzLjU1NDRDMjMuNjA1MyAyMy41ODAzIDIzLjU4NDIgMjMuNjAxNCAyMy41NTgzIDIzLjYwMTRIMTYuNDQ3NEMxNi40MjE0IDIzLjYwMTQgMTYuNDAwNCAyMy41ODAzIDE2LjQwMDQgMjMuNTU0NFYxNi40NDM1QzE2LjQwMDQgMTYuNDE3NSAxNi40MjE0IDE2LjM5NjUgMTYuNDQ3NCAxNi4zOTY1WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTUiLz4KPHBhdGggZD0iTTE1LjM1MDMgNy42OTE0MUg4LjIzOTM3QzcuOTM3MjggNy42OTE0MSA3LjY5MjM4IDcuOTM2MyA3LjY5MjM4IDguMjM4NFYxNS4zNDkzQzcuNjkyMzggMTUuNjUxNCA3LjkzNzI4IDE1Ljg5NjMgOC4yMzkzNyAxNS44OTYzSDE1LjM1MDNDMTUuNjUyMyAxNS44OTYzIDE1Ljg5NzIgMTUuNjUxNCAxNS44OTcyIDE1LjM0OTNWOC4yMzg0QzE1Ljg5NzIgNy45MzYzIDE1LjY1MjMgNy42OTE0MSAxNS4zNTAzIDcuNjkxNDFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNOC4yMzkzNyA4LjE5MTQxSDE1LjM1MDNDMTUuMzc2MiA4LjE5MTQxIDE1LjM5NzIgOC4yMTI0NSAxNS4zOTcyIDguMjM4NFYxNS4zNDkzQzE1LjM5NzIgMTUuMzc1MiAxNS4zNzYyIDE1LjM5NjMgMTUuMzUwMyAxNS4zOTYzSDguMjM5MzdDOC4yMTM0MiAxNS4zOTYzIDguMTkyMzggMTUuMzc1MiA4LjE5MjM4IDE1LjM0OTNWOC4yMzg0QzguMTkyMzggOC4yMTI0NCA4LjIxMzQyIDguMTkxNDEgOC4yMzkzNyA4LjE5MTQxWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTUiLz4KPHBhdGggZD0iTTMxLjc2MDQgNy42OTE0MUgyNC42NDk1QzI0LjM0NzQgNy42OTE0MSAyNC4xMDI1IDcuOTM2MyAyNC4xMDI1IDguMjM4NFYxNS4zNDkzQzI0LjEwMjUgMTUuNjUxNCAyNC4zNDc0IDE1Ljg5NjMgMjQuNjQ5NSAxNS44OTYzSDMxLjc2MDRDMzIuMDYyNSAxNS44OTYzIDMyLjMwNzQgMTUuNjUxNCAzMi4zMDc0IDE1LjM0OTNWOC4yMzg0QzMyLjMwNzQgNy45MzYzIDMyLjA2MjUgNy42OTE0MSAzMS43NjA0IDcuNjkxNDFaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNMjQuNjQ5NSA4LjE5MTQxSDMxLjc2MDRDMzEuNzg2NCA4LjE5MTQxIDMxLjgwNzQgOC4yMTI0NSAzMS44MDc0IDguMjM4NFYxNS4zNDkzQzMxLjgwNzQgMTUuMzc1MiAzMS43ODY0IDE1LjM5NjMgMzEuNzYwNCAxNS4zOTYzSDI0LjY0OTVDMjQuNjIzNiAxNS4zOTYzIDI0LjYwMjUgMTUuMzc1MiAyNC42MDI1IDE1LjM0OTNWOC4yMzg0QzI0LjYwMjUgOC4yMTI0NCAyNC42MjM2IDguMTkxNDEgMjQuNjQ5NSA4LjE5MTQxWiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTUiLz4KPHBhdGggZD0iTTE1LjM1MDMgMjQuMDk5Nkg4LjIzOTM3QzcuOTM3MjggMjQuMDk5NiA3LjY5MjM4IDI0LjM0NDUgNy42OTIzOCAyNC42NDY2VjMxLjc1NzVDNy42OTIzOCAzMi4wNTk2IDcuOTM3MjggMzIuMzA0NSA4LjIzOTM3IDMyLjMwNDVIMTUuMzUwM0MxNS42NTI0IDMyLjMwNDUgMTUuODk3MyAzMi4wNTk2IDE1Ljg5NzMgMzEuNzU3NVYyNC42NDY2QzE1Ljg5NzMgMjQuMzQ0NSAxNS42NTI0IDI0LjA5OTYgMTUuMzUwMyAyNC4wOTk2WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTguMjM5MzcgMjQuNTk5NkgxNS4zNTAzQzE1LjM3NjIgMjQuNTk5NiAxNS4zOTczIDI0LjYyMDYgMTUuMzk3MyAyNC42NDY2VjMxLjc1NzVDMTUuMzk3MyAzMS43ODM0IDE1LjM3NjIgMzEuODA0NSAxNS4zNTAzIDMxLjgwNDVIOC4yMzkzN0M4LjIxMzQyIDMxLjgwNDUgOC4xOTIzOCAzMS43ODM0IDguMTkyMzggMzEuNzU3NVYyNC42NDY2QzguMTkyMzggMjQuNjIwNiA4LjIxMzQyIDI0LjU5OTYgOC4yMzkzNyAyNC41OTk2WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTUiLz4KPHBhdGggZD0iTTMxLjc2MDQgMjQuMDk5NkgyNC42NDk1QzI0LjM0NzQgMjQuMDk5NiAyNC4xMDI1IDI0LjM0NDUgMjQuMTAyNSAyNC42NDY2VjMxLjc1NzVDMjQuMTAyNSAzMi4wNTk2IDI0LjM0NzQgMzIuMzA0NSAyNC42NDk1IDMyLjMwNDVIMzEuNzYwNEMzMi4wNjI1IDMyLjMwNDUgMzIuMzA3NCAzMi4wNTk2IDMyLjMwNzQgMzEuNzU3NVYyNC42NDY2QzMyLjMwNzQgMjQuMzQ0NSAzMi4wNjI1IDI0LjA5OTYgMzEuNzYwNCAyNC4wOTk2WiIgZmlsbD0id2hpdGUiLz4KPHBhdGggZD0iTTI0LjY0OTUgMjQuNTk5NkgzMS43NjA0QzMxLjc4NjQgMjQuNTk5NiAzMS44MDc0IDI0LjYyMDYgMzEuODA3NCAyNC42NDY2VjMxLjc1NzVDMzEuODA3NCAzMS43ODM0IDMxLjc4NjQgMzEuODA0NSAzMS43NjA0IDMxLjgwNDVIMjQuNjQ5NUMyNC42MjM2IDMxLjgwNDUgMjQuNjAyNSAzMS43ODM0IDI0LjYwMjUgMzEuNzU3NVYyNC42NDY2QzI0LjYwMjUgMjQuNjIwNiAyNC42MjM2IDI0LjU5OTYgMjQuNjQ5NSAyNC41OTk2WiIgc3Ryb2tlPSJ3aGl0ZSIgc3Ryb2tlLW9wYWNpdHk9IjAuMTUiLz4KPC9zdmc+Cg=='; + + config: Required; + private _readyState: WalletReadyState = isInBrowser() ? WalletReadyState.Loading : WalletReadyState.NotFound; + private _state: AdapterState = AdapterState.Loading; + private _connecting: boolean; + private _wallet: TronLinkWallet | null; + private _address: string | null; + + constructor(config: OkxWalletAdapterConfig = {}) { + super(); + const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true, openAppWithDeeplink = true } = config; + if (typeof checkTimeout !== 'number') { + throw new Error('[OkxWalletAdapter] config.checkTimeout should be a number'); + } + this.config = { + checkTimeout, + openAppWithDeeplink, + openUrlWhenWalletNotFound, + }; + this._connecting = false; + this._wallet = null; + this._address = null; + + if (!isInBrowser()) { + this._readyState = WalletReadyState.NotFound; + this.setState(AdapterState.NotFound); + return; + } + if (supportOkxWallet()) { + this._readyState = WalletReadyState.Found; + this._updateWallet(); + } else { + this._checkWallet().then(() => { + if (this.connected) { + this.emit('connect', this.address || ''); + } + }); + } + } + + get address() { + return this._address; + } + + get state() { + return this._state; + } + get readyState() { + return this._readyState; + } + + get connecting() { + return this._connecting; + } + + /** + * Get network information used by OkxWallet. + * @returns {Network} Current network information. + */ + async network(): Promise { + try { + await this._checkWallet(); + if (this.state !== AdapterState.Connected) throw new WalletDisconnectedError(); + const wallet = this._wallet; + if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); + try { + return await getNetworkInfoByTronWeb(wallet.tronWeb); + } catch (e: any) { + throw new WalletGetNetworkError(e?.message, e); + } + } catch (e: any) { + this.emit('error', e); + throw e; + } + } + + async connect(): Promise { + try { + this.checkIfOpenOkxWallet(); + if (this.connected || this.connecting) return; + await this._checkWallet(); + if (this.state === AdapterState.NotFound) { + if (this.config.openUrlWhenWalletNotFound !== false && isInBrowser()) { + window.open(this.url, '_blank'); + } + throw new WalletNotFoundError(); + } + if (!this._wallet) return; + this._connecting = true; + const wallet = this._wallet as TronLinkWallet; + try { + const res = await wallet.request({ method: 'tron_requestAccounts' }); + if (!res) { + throw new WalletConnectionError('Request connect error.'); + } + if (res.code === 4000) { + throw new WalletConnectionError( + 'The same DApp has already initiated a request to connect to OkxWallet, and the pop-up window has not been closed.' + ); + } + if (res.code === 4001) { + throw new WalletConnectionError('The user rejected connection.'); + } + } catch (error: any) { + throw new WalletConnectionError(error?.message, error); + } + + const address = wallet.tronWeb.defaultAddress?.base58 || ''; + this.setAddress(address); + this.setState(AdapterState.Connected); + this._listenEvent(); + this.connected && this.emit('connect', this.address || ''); + } catch (error: any) { + this.emit('error', error); + throw error; + } finally { + this._connecting = false; + } + } + + async disconnect(): Promise { + this._stopListenEvent(); + if (this.state !== AdapterState.Connected) { + return; + } + this.setAddress(null); + this.setState(AdapterState.Disconnect); + this.emit('disconnect'); + } + + async signTransaction(transaction: Transaction, privateKey?: string): Promise { + try { + const wallet = await this.checkAndGetWallet(); + + try { + return await wallet.tronWeb.trx.sign(transaction, privateKey); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignTransactionError(error.message, error); + } else { + throw new WalletSignTransactionError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + async multiSign(...args: any[]): Promise { + try { + const wallet = await this.checkAndGetWallet(); + + try { + return await wallet.tronWeb.trx.multiSign(...args); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignTransactionError(error.message, error); + } else { + throw new WalletSignTransactionError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + async signMessage(message: string, privateKey?: string): Promise { + try { + const wallet = await this.checkAndGetWallet(); + try { + return await wallet.tronWeb.trx.signMessageV2(message, privateKey); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignMessageError(error.message, error); + } else { + throw new WalletSignMessageError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + private async checkAndGetWallet() { + this.checkIfOpenOkxWallet(); + await this._checkWallet(); + if (this.state !== AdapterState.Connected) throw new WalletDisconnectedError(); + const wallet = this._wallet; + if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); + return wallet as TronLinkWallet; + } + + private _listenEvent() { + this._stopListenEvent(); + window.addEventListener('message', this.messageHandler); + } + + private _stopListenEvent() { + window.removeEventListener('message', this.messageHandler); + } + + private messageHandler = (e: TronLinkMessageEvent) => { + const message = e.data?.message; + if (!message) { + return; + } + if (message.action === 'accountsChanged') { + setTimeout(() => { + const preAddr = this.address || ''; + if ((this._wallet as TronLinkWallet)?.ready) { + const address = (message.data as AccountsChangedEventData).address; + this.setAddress(address); + this.setState(AdapterState.Connected); + } else { + this.setAddress(null); + this.setState(AdapterState.Disconnect); + } + const address = this.address || ''; + if (address !== preAddr) { + this.emit('accountsChanged', this.address || '', preAddr); + } + if (!preAddr && this.address) { + this.emit('connect', this.address); + } else if (preAddr && !this.address) { + this.emit('disconnect'); + } + }, 200); + } else if (message.action === 'connect') { + const isCurConnected = this.connected; + const preAddress = this.address || ''; + const address = (this._wallet as TronLinkWallet).tronWeb?.defaultAddress?.base58 || ''; + this.setAddress(address); + this.setState(AdapterState.Connected); + if (!isCurConnected) { + this.emit('connect', address); + } else if (address !== preAddress) { + this.emit('accountsChanged', this.address || '', preAddress); + } + } else if (message.action === 'disconnect') { + this.setAddress(null); + this.setState(AdapterState.Disconnect); + this.emit('disconnect'); + } + }; + + private checkIfOpenOkxWallet() { + if (this.config.openAppWithDeeplink === false) { + return; + } + if (openOkxWallet()) { + throw new WalletNotFoundError(); + } + } + + private _checkPromise: Promise | null = null; + /** + * check if wallet exists by interval, the promise only resolve when wallet detected or timeout + * @returns if OkxWallet exists + */ + private _checkWallet(): Promise { + if (this.readyState === WalletReadyState.Found) { + return Promise.resolve(true); + } + if (this._checkPromise) { + return this._checkPromise; + } + const interval = 100; + const maxTimes = Math.floor(this.config.checkTimeout / interval); + let times = 0, + timer: ReturnType; + this._checkPromise = new Promise((resolve) => { + const check = () => { + times++; + const isSupport = supportOkxWallet(); + if (isSupport || times > maxTimes) { + timer && clearInterval(timer); + this._readyState = isSupport ? WalletReadyState.Found : WalletReadyState.NotFound; + this._updateWallet(); + this.emit('readyStateChanged', this.readyState); + resolve(isSupport); + } + }; + timer = setInterval(check, interval); + check(); + }); + return this._checkPromise; + } + + private _updateWallet = () => { + let state = this.state; + let address = this.address; + if (supportOkxWallet()) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + this._wallet = window.okxwallet!.tronLink; + this._listenEvent(); + address = this._wallet.tronWeb?.defaultAddress?.base58 || null; + state = this._wallet.ready ? AdapterState.Connected : AdapterState.Disconnect; + } else { + this._wallet = null; + address = null; + state = AdapterState.NotFound; + } + this.setAddress(address); + this.setState(state); + }; + + private setAddress(address: string | null) { + this._address = address; + } + + private setState(state: AdapterState) { + const preState = this.state; + if (state !== preState) { + this._state = state; + this.emit('stateChanged', state); + } + } +} diff --git a/packages/adapters/okxwallet/src/index.ts b/packages/adapters/okxwallet/src/index.ts new file mode 100644 index 0000000..c4929c4 --- /dev/null +++ b/packages/adapters/okxwallet/src/index.ts @@ -0,0 +1,2 @@ +export * from './adapter.js'; +export * from './utils.js'; diff --git a/packages/adapters/okxwallet/src/utils.ts b/packages/adapters/okxwallet/src/utils.ts new file mode 100644 index 0000000..6df7074 --- /dev/null +++ b/packages/adapters/okxwallet/src/utils.ts @@ -0,0 +1,13 @@ +import { isInMobileBrowser } from '@tronweb3/tronwallet-abstract-adapter'; + +export function supportOkxWallet() { + return !!(window.okxwallet && window.okxwallet.tronLink); +} + +export function openOkxWallet() { + if (!supportOkxWallet() && isInMobileBrowser()) { + window.location.href = `okx://wallet/dapp/details?dappUrl=${window.location.href}`; + return true; + } + return false; +} diff --git a/packages/adapters/okxwallet/tests/units/adapter.test.ts b/packages/adapters/okxwallet/tests/units/adapter.test.ts new file mode 100644 index 0000000..fe04399 --- /dev/null +++ b/packages/adapters/okxwallet/tests/units/adapter.test.ts @@ -0,0 +1,32 @@ +import { OkxWalletAdapter } from '../../src/index.js'; + +window.open = jest.fn(); +beforeEach(function () { + jest.useFakeTimers(); + global.document = window.document; + global.navigator = window.navigator; + window.tronLink = undefined; + window.tron = undefined; +}); +describe('OkxWalletAdapter', function () { + describe('#adapter()', function () { + test('constructor', () => { + const adapter = new OkxWalletAdapter(); + expect(adapter.name).toEqual('OKX Wallet'); + expect(adapter).toHaveProperty('icon'); + expect(adapter).toHaveProperty('url'); + expect(adapter).toHaveProperty('readyState'); + expect(adapter).toHaveProperty('address'); + expect(adapter).toHaveProperty('connecting'); + expect(adapter).toHaveProperty('connected'); + + expect(adapter).toHaveProperty('connect'); + expect(adapter).toHaveProperty('disconnect'); + expect(adapter).toHaveProperty('signMessage'); + expect(adapter).toHaveProperty('signTransaction'); + + expect(adapter).toHaveProperty('on'); + expect(adapter).toHaveProperty('off'); + }); + }); +}); diff --git a/packages/adapters/okxwallet/tsconfig.all.json b/packages/adapters/okxwallet/tsconfig.all.json new file mode 100644 index 0000000..a1ded9c --- /dev/null +++ b/packages/adapters/okxwallet/tsconfig.all.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tsconfig.root.json", + "references": [ + { + "path": "../abstract-adapter/tsconfig.all.json" + }, + { + "path": "../tronlink/tsconfig.all.json" + }, + { + "path": "./tsconfig.cjs.json" + }, + { + "path": "./tsconfig.esm.json" + } + ] +} diff --git a/packages/adapters/okxwallet/tsconfig.cjs.json b/packages/adapters/okxwallet/tsconfig.cjs.json new file mode 100644 index 0000000..099b9aa --- /dev/null +++ b/packages/adapters/okxwallet/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.cjs.json", + "include": ["src"], + "compilerOptions": { + "outDir": "lib/cjs" + } +} diff --git a/packages/adapters/okxwallet/tsconfig.esm.json b/packages/adapters/okxwallet/tsconfig.esm.json new file mode 100644 index 0000000..4900d2f --- /dev/null +++ b/packages/adapters/okxwallet/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.esm.json", + "include": ["src"], + "compilerOptions": { + "outDir": "lib/esm", + "declarationDir": "lib/types" + } +} diff --git a/packages/adapters/tokenpocket/LICENSE b/packages/adapters/tokenpocket/LICENSE new file mode 100644 index 0000000..f8c1348 --- /dev/null +++ b/packages/adapters/tokenpocket/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) +Copyright (c) 2022-Present, tronprotocol + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/adapters/tokenpocket/README.md b/packages/adapters/tokenpocket/README.md new file mode 100644 index 0000000..6af3cbc --- /dev/null +++ b/packages/adapters/tokenpocket/README.md @@ -0,0 +1,84 @@ +# `@tronweb3/tronwallet-adapter-tokenpocket` + +This package provides an adapter to enable TRON DApps to connect to the [TokenPocket Wallet App](https://tokenpocket.pro/). + +## Demo + +```typescript +import { TokenPocketAdapter } from '@tronweb3/tronwallet-adapter-tokenpocket'; +import TronWeb from 'tronweb'; + +const tronWeb = new TronWeb({ + fullHost: 'https://api.trongrid.io', + headers: { 'TRON-PRO-API-KEY': 'your api key' }, +}); + +const adapter = new TokenPocketAdapter(); +// connect +await adapter.connect(); + +// then you can get address +console.log(adapter.address); + +// create a send TRX transaction +const unSignedTransaction = await tronWeb.transactionBuilder.sendTrx(targetAddress, 100, adapter.address); +// using adapter to sign the transaction +const signedTransaction = await adapter.signTransaction(unSignedTransaction); +// broadcast the transaction +await tronWeb.trx.sendRawTransaction(signedTransaction); +``` + +## Documentation + +### API + +- `Constructor(config: TokenPocketConfig)` + +```typescript +interface TokenPocketConfig { + /** + * Set if open Wallet's website when wallet is not installed. + * Default is true. + */ + openUrlWhenWalletNotFound?: boolean; + /** + * Timeout in millisecond for checking if TokenPocket wallet is supported. + * Default is 2 * 1000ms + */ + checkTimeout?: number; + /** + * Set if open TokenPocket app using DeepLink on mobile device. + * Default is true. + */ + openAppWithDeeplink?: boolean; +} +``` + +- `network()` method is supported to get current network information. The type of returned value is `Network` as follows: + + ```typescript + export enum NetworkType { + Mainnet = 'Mainnet', + Shasta = 'Shasta', + Nile = 'Nile', + /** + * When use custom node + */ + Unknown = 'Unknown', + } + + export type Network = { + networkType: NetworkType; + chainId: string; + fullNode: string; + solidityNode: string; + eventServer: string; + }; + ``` + +### Caveats + +- TokenPocket App doesn't implement `signMessage()`, `multiSign()` and `switchChain()`. +- TokenPocket App will be connected automatically and when user change accounts, the page will reload. So there is no need to to listen to `accountsChanged` event. + +For more information about tronwallet adapters, please refer to [`@tronweb3/tronwallet-adapters`](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) diff --git a/packages/adapters/tokenpocket/jest.config.js b/packages/adapters/tokenpocket/jest.config.js new file mode 100644 index 0000000..2a76755 --- /dev/null +++ b/packages/adapters/tokenpocket/jest.config.js @@ -0,0 +1,17 @@ +/** @type {import('ts-jest').JestConfigWithTsJest} */ +export default { + preset: 'ts-jest', + testEnvironment: 'jsdom', + transform: { + '\\.tsx?$': [ + 'ts-jest', + { + useESM: true, + }, + ], + }, + moduleNameMapper: { + '(.+)\\.js': '$1', + }, + extensionsToTreatAsEsm: ['.ts'], +}; diff --git a/packages/adapters/tokenpocket/package.json b/packages/adapters/tokenpocket/package.json new file mode 100644 index 0000000..1f3ec18 --- /dev/null +++ b/packages/adapters/tokenpocket/package.json @@ -0,0 +1,52 @@ +{ + "name": "@tronweb3/tronwallet-adapter-tokenpocket", + "version": "1.0.0", + "description": "Wallet adapter for TokenPocket Wallet app.", + "keywords": [ + "TRON", + "TronWeb", + "TokenPocket" + ], + "author": "tronprotocol", + "repository": { + "type": "git", + "url": "https://github.com/tronprotocol/tronwallet-adapter" + }, + "license": "MIT", + "type": "module", + "sideEffects": false, + "engines": { + "node": ">=16", + "pnpm": ">=7" + }, + "main": "./lib/cjs/index.js", + "module": "./lib/esm/index.js", + "types": "./lib/types/index.d.ts", + "exports": { + "require": "./lib/cjs/index.js", + "import": "./lib/esm/index.js", + "types": "./lib/types/index.d.ts" + }, + "files": [ + "lib", + "src", + "LICENSE" + ], + "publishConfig": { + "access": "public" + }, + "scripts": { + "clean": "shx mkdir -p lib && shx rm -rf lib", + "package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json", + "test": "jest" + }, + "dependencies": { + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", + "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5" + }, + "devDependencies": { + "@testing-library/dom": "^8.20.0", + "jest-environment-jsdom": "^29.3.1", + "shx": "^0.3.4" + } +} diff --git a/packages/adapters/tokenpocket/src/adapter.ts b/packages/adapters/tokenpocket/src/adapter.ts new file mode 100644 index 0000000..a3e8450 --- /dev/null +++ b/packages/adapters/tokenpocket/src/adapter.ts @@ -0,0 +1,321 @@ +import { + Adapter, + AdapterState, + isInBrowser, + WalletReadyState, + WalletSignMessageError, + WalletNotFoundError, + WalletDisconnectedError, + WalletSignTransactionError, + isInMobileBrowser, + WalletGetNetworkError, +} from '@tronweb3/tronwallet-abstract-adapter'; +import type { + Transaction, + SignedTransaction, + AdapterName, + BaseAdapterConfig, + Network, +} from '@tronweb3/tronwallet-abstract-adapter'; +import { getNetworkInfoByTronWeb } from '@tronweb3/tronwallet-adapter-tronlink'; +import type { TronLinkWallet } from '@tronweb3/tronwallet-adapter-tronlink'; +import { openTokenPocket, supportTokenPocket } from './utils.js'; + +export interface TokenPocketAdapterConfig extends BaseAdapterConfig { + /** + * Timeout in millisecond for checking if is in TokenPocket App. + * Default is 2 * 1000ms + */ + checkTimeout?: number; + /** + * Set if open TokenPocket app using DeepLink. + * Default is true. + */ + openAppWithDeeplink?: boolean; +} + +export const TokenPocketAdapterName = 'TokenPocket' as AdapterName<'TokenPocket'>; + +export class TokenPocketAdapter extends Adapter { + name = TokenPocketAdapterName; + url = 'https://tokenpocket.pro/'; + icon = + 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTIwIiBoZWlnaHQ9IjEyMCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGc+CjxwYXRoIGQ9Ik0xMDQxLjUyIDBILTI3VjEwMjRIMTA0MS41MlYwWiIgZmlsbD0iIzI5ODBGRSIvPgo8ZyBjbGlwLXBhdGg9InVybCgjY2xpcDBfNDA4XzIyNSkiPgo8cGF0aCBkPSJNNDA2Ljc5NiA0MzguNjQzSDQwNi45MjdDNDA2Ljc5NiA0MzcuODU3IDQwNi43OTYgNDM2Ljk0IDQwNi43OTYgNDM2LjE1NFY0MzguNjQzWiIgZmlsbD0iIzI5QUVGRiIvPgo8cGF0aCBkPSJNNjY3LjYwMiA0NjMuNTMzSDUyMy4yNDlWNzI0LjA3NkM1MjMuMjQ5IDczNi4zODkgNTMzLjIwNCA3NDYuMzQ1IDU0NS41MTcgNzQ2LjM0NUg2NDUuMzMzQzY1Ny42NDcgNzQ2LjM0NSA2NjcuNjAyIDczNi4zODkgNjY3LjYwMiA3MjQuMDc2VjQ2My41MzNaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNDUzLjU2MyAyNzdINDQ4LjcxNkgxOTAuMjY5QzE3Ny45NTUgMjc3IDE2OCAyODYuOTU1IDE2OCAyOTkuMjY5VjM4OS42NTNDMTY4IDQwMS45NjcgMTc3Ljk1NSA0MTEuOTIyIDE5MC4yNjkgNDExLjkyMkgyNTAuOTE4SDI3NS4wMjFWNDM4LjY0NFY3MjQuNzMxQzI3NS4wMjEgNzM3LjA0NSAyODQuOTc2IDc0NyAyOTcuMjg5IDc0N0gzOTIuMTI4QzQwNC40NDEgNzQ3IDQxNC4zOTYgNzM3LjA0NSA0MTQuMzk2IDcyNC43MzFWNDM4LjY0NFY0MzYuMTU2VjQxMS45MjJINDM4LjQ5OUg0NDguMzIzSDQ1My4xN0M0OTAuMzcyIDQxMS45MjIgNTIwLjYzMSAzODEuNjYzIDUyMC42MzEgMzQ0LjQ2MUM1MjEuMDI0IDMwNy4yNTkgNDkwLjc2NSAyNzcgNDUzLjU2MyAyNzdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNjY3LjczNSA0NjMuNTMzVjY0NS4zNUM2NzIuNzEzIDY0Ni41MjkgNjc3LjgyMSA2NDcuNDQ2IDY4My4wNjEgNjQ4LjIzMkM2OTAuMzk3IDY0OS4yOCA2OTcuOTk0IDY0OS45MzUgNzA1LjU5MiA2NTAuMDY2QzcwNS45ODUgNjUwLjA2NiA3MDYuMzc4IDY1MC4wNjYgNzA2LjkwMiA2NTAuMDY2VjUwNS40NUM2ODUuMDI2IDUwNC4wMDkgNjY3LjczNSA0ODUuODAxIDY2Ny43MzUgNDYzLjUzM1oiIGZpbGw9InVybCgjcGFpbnQwX2xpbmVhcl80MDhfMjI1KSIvPgo8cGF0aCBkPSJNNzA5Ljc4MSAyNzdDNjA2LjgyMiAyNzcgNTIzLjI0OSAzNjAuNTczIDUyMy4yNDkgNDYzLjUzM0M1MjMuMjQ5IDU1Mi4wODQgNTg0Ljk0NiA2MjYuMjI1IDY2Ny43MzMgNjQ1LjM1VjQ2My41MzNDNjY3LjczMyA0NDAuMzQ3IDY4Ni41OTYgNDIxLjQ4NCA3MDkuNzgxIDQyMS40ODRDNzMyLjk2NyA0MjEuNDg0IDc1MS44MyA0NDAuMzQ3IDc1MS44MyA0NjMuNTMzQzc1MS44MyA0ODMuMDUxIDczOC42IDQ5OS40MjUgNzIwLjUyMyA1MDQuMTRDNzE3LjExNyA1MDUuMDU3IDcxMy40NDkgNTA1LjU4MSA3MDkuNzgxIDUwNS41ODFWNjUwLjA2NkM3MTMuNDQ5IDY1MC4wNjYgNzE2Ljk4NiA2NDkuOTM1IDcyMC41MjMgNjQ5LjgwNEM4MTguNTA1IDY0NC4xNzEgODk2LjMxNCA1NjIuOTU2IDg5Ni4zMTQgNDYzLjUzM0M4OTYuNDQ1IDM2MC41NzMgODEyLjg3MiAyNzcgNzA5Ljc4MSAyNzdaIiBmaWxsPSJ3aGl0ZSIvPgo8cGF0aCBkPSJNNzA5Ljc4IDY1MC4wNjZWNTA1LjU4MUM3MDguNzMzIDUwNS41ODEgNzA3LjgxNiA1MDUuNTgxIDcwNi43NjggNTA1LjQ1VjY1MC4wNjZDNzA3LjgxNiA2NTAuMDY2IDcwOC44NjQgNjUwLjA2NiA3MDkuNzggNjUwLjA2NloiIGZpbGw9IndoaXRlIi8+CjwvZz4KPC9nPgo8ZGVmcz4KPGxpbmVhckdyYWRpZW50IGlkPSJwYWludDBfbGluZWFyXzQwOF8yMjUiIHgxPSI3MDkuODQ0IiB5MT0iNTU2LjgyNyIgeDI9IjY2Ny43NTMiIHkyPSI1NTYuODI3IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+CjxzdG9wIHN0b3AtY29sb3I9IndoaXRlIi8+CjxzdG9wIG9mZnNldD0iMC45NjY3IiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjMyMzMiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSJ3aGl0ZSIgc3RvcC1vcGFjaXR5PSIwLjMiLz4KPC9saW5lYXJHcmFkaWVudD4KPGNsaXBQYXRoIGlkPSJjbGlwMF80MDhfMjI1Ij4KPHJlY3Qgd2lkdGg9IjcyOC40NDgiIGhlaWdodD0iNDcwIiBmaWxsPSJ3aGl0ZSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTY4IDI3NykiLz4KPC9jbGlwUGF0aD4KPC9kZWZzPgo8L3N2Zz4K'; + + config: Required; + private _readyState: WalletReadyState = isInBrowser() ? WalletReadyState.Loading : WalletReadyState.NotFound; + private _state: AdapterState = AdapterState.Loading; + private _connecting: boolean; + private _wallet: TronLinkWallet | null; + private _address: string | null; + + constructor(config: TokenPocketAdapterConfig = {}) { + super(); + const { checkTimeout = 2 * 1000, openUrlWhenWalletNotFound = true, openAppWithDeeplink = true } = config; + if (typeof checkTimeout !== 'number') { + throw new Error('[TokenPocketAdapter] config.checkTimeout should be a number'); + } + this.config = { + checkTimeout, + openAppWithDeeplink, + openUrlWhenWalletNotFound, + }; + this._connecting = false; + this._wallet = null; + this._address = null; + + if (!isInMobileBrowser()) { + // Currently TokenPocket extension does not support Tron. + this._readyState = WalletReadyState.NotFound; + this._state = AdapterState.NotFound; + return; + } + if (supportTokenPocket()) { + this._readyState = WalletReadyState.Found; + this._updateWallet(); + } else { + this._checkWallet().then(() => { + if (this.connected) { + this.emit('connect', this.address || ''); + } + }); + } + } + + get address() { + return this._address; + } + + get state() { + return this._state; + } + get readyState() { + return this._readyState; + } + + get connecting() { + return this._connecting; + } + + /** + * Get network information. + * @returns {Network} Current network information. + */ + async network(): Promise { + try { + await this._checkWallet(); + if (this.state !== AdapterState.Connected) throw new WalletDisconnectedError(); + const wallet = this._wallet; + if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); + try { + return await getNetworkInfoByTronWeb(wallet.tronWeb); + } catch (e: any) { + throw new WalletGetNetworkError(e?.message, e); + } + } catch (e: any) { + this.emit('error', e); + throw e; + } + } + + async connect(): Promise { + try { + this.checkIfOpenApp(); + if (this.connected || this.connecting) return; + await this._checkWallet(); + if (this.readyState === WalletReadyState.NotFound) { + if (this.config.openUrlWhenWalletNotFound !== false && isInBrowser()) { + window.open(this.url, '_blank'); + } + throw new WalletNotFoundError(); + } + if (!this._wallet) return; + this._connecting = true; + const wallet = this._wallet as TronLinkWallet; + const address = wallet.tronWeb.defaultAddress?.base58 || ''; + this.setAddress(address); + this.setState(AdapterState.Connected); + this.emit('connect', this.address || ''); + } catch (error: any) { + this.emit('error', error); + throw error; + } finally { + this._connecting = false; + } + } + + async disconnect(): Promise { + if (this.state !== AdapterState.Connected) { + return; + } + this.setAddress(null); + this.setState(AdapterState.Disconnect); + this.emit('disconnect'); + } + + async signTransaction(transaction: Transaction, privateKey?: string): Promise { + try { + const wallet = await this.checkAndGetWallet(); + try { + return await wallet.tronWeb.trx.sign(transaction, privateKey); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignTransactionError(error.message, error); + } else { + throw new WalletSignTransactionError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + async multiSign(...args: any[]): Promise { + try { + const wallet = await this.checkAndGetWallet(); + try { + return await wallet.tronWeb.trx.multiSign(...args); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignTransactionError(error.message, error); + } else { + throw new WalletSignTransactionError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + async signMessage(message: string, privateKey?: string): Promise { + try { + const wallet = await this.checkAndGetWallet(); + try { + return await wallet.tronWeb.trx.signMessageV2(message, privateKey); + } catch (error: any) { + if (error instanceof Error) { + throw new WalletSignMessageError(error.message, error); + } else { + throw new WalletSignMessageError(error, new Error(error)); + } + } + } catch (error: any) { + this.emit('error', error); + throw error; + } + } + + private async checkAndGetWallet() { + this.checkIfOpenApp(); + await this._checkWallet(); + if (!this.connected) throw new WalletDisconnectedError(); + const wallet = this._wallet; + if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); + return wallet as TronLinkWallet; + } + + private checkIfOpenApp() { + if (this.config.openAppWithDeeplink === false) { + return; + } + if (openTokenPocket()) { + throw new WalletNotFoundError(); + } + } + + private checkReadyInterval: ReturnType | null = null; + private checkForWalletReady() { + if (this.checkReadyInterval) { + return; + } + let times = 0; + const maxTimes = Math.floor(this.config.checkTimeout / 200); + const check = () => { + if (window?.tronWeb?.ready) { + this.checkReadyInterval && clearInterval(this.checkReadyInterval); + this.checkReadyInterval = null; + this._updateWallet(); + this.emit('connect', this.address || ''); + } else if (times > maxTimes) { + this.checkReadyInterval && clearInterval(this.checkReadyInterval); + this.checkReadyInterval = null; + } else { + times++; + } + }; + this.checkReadyInterval = setInterval(check, 200); + } + + private _checkPromise: Promise | null = null; + /** + * check if wallet exists by interval, the promise only resolve when wallet detected or timeout + * @returns if wallet exists + */ + private _checkWallet(): Promise { + if (this.readyState === WalletReadyState.Found) { + return Promise.resolve(true); + } + if (this._checkPromise) { + return this._checkPromise; + } + const interval = 100; + const maxTimes = Math.floor(this.config.checkTimeout / interval); + let times = 0, + timer: ReturnType; + this._checkPromise = new Promise((resolve) => { + const check = () => { + times++; + const isSupport = supportTokenPocket(); + if (isSupport || times > maxTimes) { + timer && clearInterval(timer); + this._readyState = isSupport ? WalletReadyState.Found : WalletReadyState.NotFound; + this._updateWallet(); + this.emit('readyStateChanged', this.readyState); + resolve(isSupport); + } + }; + timer = setInterval(check, interval); + check(); + }); + return this._checkPromise; + } + + private _updateWallet = () => { + let state = this.state; + let address = this.address; + if (supportTokenPocket()) { + // fake tronLink + this._wallet = { + ready: window.tronWeb?.ready, + tronWeb: window.tronWeb, + request: () => Promise.resolve(true) as any, + } as TronLinkWallet; + address = this._wallet.tronWeb.defaultAddress?.base58 || null; + state = window.tronWeb?.ready ? AdapterState.Connected : AdapterState.Disconnect; + if (!window.tronWeb?.ready) { + this.checkForWalletReady(); + } + } else { + // no tronlink support + this._wallet = null; + address = null; + state = AdapterState.NotFound; + } + this.setAddress(address); + this.setState(state); + }; + + private setAddress(address: string | null) { + this._address = address; + } + + private setState(state: AdapterState) { + const preState = this.state; + if (state !== preState) { + this._state = state; + this.emit('stateChanged', state); + } + } +} diff --git a/packages/adapters/tokenpocket/src/index.ts b/packages/adapters/tokenpocket/src/index.ts new file mode 100644 index 0000000..c4929c4 --- /dev/null +++ b/packages/adapters/tokenpocket/src/index.ts @@ -0,0 +1,2 @@ +export * from './adapter.js'; +export * from './utils.js'; diff --git a/packages/adapters/tokenpocket/src/utils.ts b/packages/adapters/tokenpocket/src/utils.ts new file mode 100644 index 0000000..a63db0b --- /dev/null +++ b/packages/adapters/tokenpocket/src/utils.ts @@ -0,0 +1,33 @@ +import { isInBrowser, isInMobileBrowser } from '@tronweb3/tronwallet-abstract-adapter'; + +export function supportTokenPocket() { + return !!window.tronWeb && typeof (window as any).tokenpocket !== 'undefined'; +} + +/** + * Detect if in TokenPocketApp + * There will be a `tokenpocket` object on window + */ +export function isInTokenPocket() { + return isInBrowser() && typeof (window as any).tokenpocket !== 'undefined'; +} + +export function openTokenPocket() { + if (!supportTokenPocket() && isInMobileBrowser() && !isInTokenPocket()) { + const { origin, pathname, search, hash } = window.location; + const url = origin + pathname + search + hash; + const params = { + action: 'open', + actionId: Date.now() + '', + callbackUrl: 'http://someurl.com', // no need callback + blockchain: 'Tron', + chain: 'Tron', + url, + protocol: 'TokenPocket', + version: '1.0', + }; + window.location.href = `tpdapp://open?params=${encodeURIComponent(JSON.stringify(params))}`; + return true; + } + return false; +} diff --git a/packages/adapters/tokenpocket/tests/units/adapter.test.ts b/packages/adapters/tokenpocket/tests/units/adapter.test.ts new file mode 100644 index 0000000..e1a9ebd --- /dev/null +++ b/packages/adapters/tokenpocket/tests/units/adapter.test.ts @@ -0,0 +1,11 @@ +import { TokenPocketAdapter } from '../../src/adapter.js'; + +describe('TokenPocketAdapter', () => { + test('should be defined', () => { + expect(TokenPocketAdapter).not.toBeNull(); + }); + test('#constructor() should work fine', () => { + const adapter = new TokenPocketAdapter(); + expect(adapter.name).toEqual('TokenPocket'); + }); +}); diff --git a/packages/adapters/tokenpocket/tsconfig.all.json b/packages/adapters/tokenpocket/tsconfig.all.json new file mode 100644 index 0000000..a1ded9c --- /dev/null +++ b/packages/adapters/tokenpocket/tsconfig.all.json @@ -0,0 +1,17 @@ +{ + "extends": "../../../tsconfig.root.json", + "references": [ + { + "path": "../abstract-adapter/tsconfig.all.json" + }, + { + "path": "../tronlink/tsconfig.all.json" + }, + { + "path": "./tsconfig.cjs.json" + }, + { + "path": "./tsconfig.esm.json" + } + ] +} diff --git a/packages/adapters/tokenpocket/tsconfig.cjs.json b/packages/adapters/tokenpocket/tsconfig.cjs.json new file mode 100644 index 0000000..099b9aa --- /dev/null +++ b/packages/adapters/tokenpocket/tsconfig.cjs.json @@ -0,0 +1,7 @@ +{ + "extends": "../../../tsconfig.cjs.json", + "include": ["src"], + "compilerOptions": { + "outDir": "lib/cjs" + } +} diff --git a/packages/adapters/tokenpocket/tsconfig.esm.json b/packages/adapters/tokenpocket/tsconfig.esm.json new file mode 100644 index 0000000..4900d2f --- /dev/null +++ b/packages/adapters/tokenpocket/tsconfig.esm.json @@ -0,0 +1,8 @@ +{ + "extends": "../../../tsconfig.esm.json", + "include": ["src"], + "compilerOptions": { + "outDir": "lib/esm", + "declarationDir": "lib/types" + } +} diff --git a/packages/adapters/tronlink/README.md b/packages/adapters/tronlink/README.md index 3cc8ee5..189deaf 100644 --- a/packages/adapters/tronlink/README.md +++ b/packages/adapters/tronlink/README.md @@ -2,4 +2,90 @@ This package provides an adapter to enable TRON DApps to connect to the [TronLink Wallet extension](https://chrome.google.com/webstore/detail/tronlink/ibnejdfjmmkpcnlpebklmnkoeoihofec) and [TronLink Wallet App](https://www.tronlink.org/). +## Demo + +```typescript +import { TronLinkAdapter } from '@tronweb3/tronwallet-adapter-tronlink'; +import TronWeb from 'tronweb'; + +const tronWeb = new TronWeb({ + fullHost: 'https://api.trongrid.io', + headers: { 'TRON-PRO-API-KEY': 'your api key' }, +}); + +const adapter = new TronLinkAdapter(); +// connect +await adapter.connect(); + +// then you can get address +console.log(adapter.address); + +// create a send TRX transaction +const unSignedTransaction = await tronWeb.transactionBuilder.sendTrx(targetAddress, 100, adapter.address); +// using adapter to sign the transaction +const signedTransaction = await adapter.signTransaction(unSignedTransaction); +// broadcast the transaction +await tronWeb.trx.sendRawTransaction(signedTransaction); +``` + +## Documentation + +### API + +- `Constructor(config: TronLinkAdapterConfig)` + ```typescript + interface TronLinkAdapterConfig { + /** + * Set if open Wallet's website url when wallet is not installed. + * Default is true. + */ + openUrlWhenWalletNotFound?: boolean; + /** + * Timeout in millisecond for checking if TronLink wallet exists. + * Default is 30 * 1000ms + */ + checkTimeout?: number; + /** + * Set if open TronLink app using DeepLink on mobile device. + * Default is true. + */ + openTronLinkAppOnMobile?: boolean; + /** + * The icon of your dapp. Used when open TronLink app in mobile device browsers. + * Default is current website icon. + */ + dappIcon?: string; + /** + * The name of your dapp. Used when open TronLink app in mobile device browsers. + * Default is `document.title`. + */ + dappName?: string; + } + ``` +- `network()` method is supported to get current network information. The type of returned value is `Network` as follows: + + ```typescript + export enum NetworkType { + Mainnet = 'Mainnet', + Shasta = 'Shasta', + Nile = 'Nile', + /** + * When use custom node + */ + Unknown = 'Unknown', + } + + export type Network = { + networkType: NetworkType; + chainId: string; + fullNode: string; + solidityNode: string; + eventServer: string; + }; + ``` + +### Caveats + +- **TronLink Doesn't support `disconnect` by DApp**. As TronLinkAdapter doesn't support disconnect by DApp website, call `adapter.disconnect()` won't disconnect from TronLink extension really. + For more information about tronwallet adapters, please refer to [`@tronweb3/tronwallet-adapters`](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters) diff --git a/packages/adapters/tronlink/package.json b/packages/adapters/tronlink/package.json index ba38fea..b09f526 100644 --- a/packages/adapters/tronlink/package.json +++ b/packages/adapters/tronlink/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-adapter-tronlink", - "version": "1.1.4", + "version": "1.1.5", "description": "Wallet adapter for TronLink Wallet extension and TronLink app.", "keywords": [ "TRON", @@ -42,7 +42,7 @@ "test:coverage": "jest --coverage" }, "dependencies": { - "@tronweb3/tronwallet-abstract-adapter": "^1.1.4" + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5" }, "devDependencies": { "@testing-library/dom": "^8.20.0", diff --git a/packages/adapters/tronlink/src/adapter.ts b/packages/adapters/tronlink/src/adapter.ts index 3c203ef..c19ecc4 100644 --- a/packages/adapters/tronlink/src/adapter.ts +++ b/packages/adapters/tronlink/src/adapter.ts @@ -9,6 +9,7 @@ import { WalletConnectionError, WalletSignTransactionError, WalletSwitchChainError, + WalletGetNetworkError, isInMobileBrowser, NetworkType, } from '@tronweb3/tronwallet-abstract-adapter'; @@ -30,17 +31,28 @@ import type { TronWeb, } from './types.js'; import { openTronLink, supportTron, supportTronLink } from './utils.js'; -import { WalletGetNetworkError } from './error.js'; export interface TronLinkWallet { ready: boolean; tronWeb: TronWeb; request(config: Record): Promise; } -const chainIdNetworkMap: Record = { +export const chainIdNetworkMap: Record = { '0x2b6653dc': NetworkType.Mainnet, '0x94a9059e': NetworkType.Shasta, '0xcd8690dc': NetworkType.Nile, }; + +export async function getNetworkInfoByTronWeb(tronWeb: TronWeb) { + const { blockID = '' } = await tronWeb.trx.getBlockByNumber(0); + const chainId = `0x${blockID.slice(-8)}`; + return { + networkType: chainIdNetworkMap[chainId] || NetworkType.Unknown, + chainId, + fullNode: tronWeb.fullNode?.host || '', + solidityNode: tronWeb.solidityNode?.host || '', + eventServer: tronWeb.eventServer?.host || '', + }; +} declare global { interface Window { tronLink?: TronLinkWallet; @@ -84,7 +96,6 @@ export class TronLinkAdapter extends Adapter { private _connecting: boolean; private _wallet: TronLinkWallet | Tron | null; private _address: string | null; - private _supportTronLink = false; // https://github.com/tronprotocol/tips/blob/master/tip-1193.md private _supportNewTronProtocol = false; // record if first connect event has emitted or not @@ -113,6 +124,8 @@ export class TronLinkAdapter extends Adapter { this._address = null; if (!isInBrowser()) { + this._readyState = WalletReadyState.NotFound; + this.setState(AdapterState.NotFound); return; } if (supportTron() || (isInMobileBrowser() && (window.tronLink || window.tronWeb))) { @@ -153,15 +166,7 @@ export class TronLinkAdapter extends Adapter { const wallet = this._wallet; if (!wallet || !wallet.tronWeb) throw new WalletDisconnectedError(); try { - const { blockID = '' } = await wallet.tronWeb.trx.getBlockByNumber(0); - const chainId = `0x${blockID.slice(-8)}`; - return { - networkType: chainIdNetworkMap[chainId] || NetworkType.Unknown, - chainId, - fullNode: wallet.tronWeb.fullNode?.host || '', - solidityNode: wallet.tronWeb.solidityNode?.host || '', - eventServer: wallet.tronWeb.eventServer?.host || '', - }; + return await getNetworkInfoByTronWeb(wallet.tronWeb); } catch (e: any) { throw new WalletGetNetworkError(e?.message, e); } @@ -183,7 +188,7 @@ export class TronLinkAdapter extends Adapter { throw new WalletNotFoundError(); } // lower version only support window.tronWeb, no window.tronLink - if (!this._wallet || !this._supportTronLink) return; + if (!this._wallet) return; this._connecting = true; if (this._supportNewTronProtocol) { const wallet = this._wallet as Tron; @@ -204,7 +209,7 @@ export class TronLinkAdapter extends Adapter { } throw new WalletConnectionError(message, error); } - } else { + } else if (window.tronLink) { const wallet = this._wallet as TronLinkWallet; try { const res = await wallet.request({ method: 'tron_requestAccounts' }); @@ -229,6 +234,13 @@ export class TronLinkAdapter extends Adapter { this.setAddress(address); this.setState(AdapterState.Connected); this._listenTronLinkEvent(); + } else if (window.tronWeb) { + const wallet = this._wallet as TronLinkWallet; + const address = wallet.tronWeb.defaultAddress?.base58 || ''; + this.setAddress(address); + this.setState(AdapterState.Connected); + } else { + throw new WalletConnectionError('Cannot connect wallet.'); } this.connected && this.emit('connect', this.address || ''); } catch (error: any) { @@ -451,14 +463,17 @@ export class TronLinkAdapter extends Adapter { private _checkPromise: Promise | null = null; /** * check if wallet exists by interval, the promise only resolve when wallet detected or timeout - * @returns if TronLink exists + * @returns if wallet exists */ private _checkWallet(): Promise { + if (this.readyState === WalletReadyState.Found) { + return Promise.resolve(true); + } if (this._checkPromise) { return this._checkPromise; } const interval = 100; - const checkTronTimes = Math.floor(3000 / interval); + const checkTronTimes = Math.floor(2000 / interval); const maxTimes = Math.floor(this.config.checkTimeout / interval); let times = 0, timer: ReturnType; @@ -483,15 +498,21 @@ export class TronLinkAdapter extends Adapter { private _updateWallet = () => { let state = this.state; let address = this.address; - if (window.tron && window.tron.isTronLink) { + if (isInMobileBrowser()) { + this._wallet = { + ready: !!window.tronWeb?.defaultAddress, + tronWeb: window.tronWeb, + request: () => Promise.resolve(true) as any, + } as TronLinkWallet; + address = this._wallet.tronWeb.defaultAddress?.base58 || null; + state = window.tronWeb?.defaultAddress ? AdapterState.Connected : AdapterState.Disconnect; + } else if (window.tron && window.tron.isTronLink) { this._supportNewTronProtocol = true; - this._supportTronLink = true; this._wallet = window.tron; this._listenTronEvent(); - address = (this._wallet.tronWeb && this._wallet.tronWeb.defaultAddress?.base58) || null; + address = (this._wallet.tronWeb && this._wallet.tronWeb?.defaultAddress?.base58) || null; state = address ? AdapterState.Connected : AdapterState.Disconnect; } else if (window.tronLink) { - this._supportTronLink = true; this._wallet = window.tronLink; this._listenTronLinkEvent(); address = this._wallet.tronWeb?.defaultAddress?.base58 || null; @@ -504,17 +525,43 @@ export class TronLinkAdapter extends Adapter { request: () => Promise.resolve(true) as any, } as TronLinkWallet; address = this._wallet.tronWeb.defaultAddress?.base58 || null; - state = window.tronWeb.ready ? AdapterState.Connected : AdapterState.Disconnect; + state = this._wallet.ready ? AdapterState.Connected : AdapterState.Disconnect; } else { // no tronlink support this._wallet = null; address = null; state = AdapterState.NotFound; } + // In TronLink App, account should be connected + if (isInMobileBrowser() && state === AdapterState.Disconnect) { + this.checkForWalletReady(); + } this.setAddress(address); this.setState(state); }; + private checkReadyInterval: ReturnType | null = null; + private checkForWalletReady() { + if (this.checkReadyInterval) { + return; + } + let times = 0; + const maxTimes = Math.floor(this.config.checkTimeout / 200); + const check = () => { + if (window.tronWeb?.defaultAddress) { + this.checkReadyInterval && clearInterval(this.checkReadyInterval); + this.checkReadyInterval = null; + this._updateWallet(); + this.emit('connect', this.address || ''); + } else if (times > maxTimes) { + this.checkReadyInterval && clearInterval(this.checkReadyInterval); + this.checkReadyInterval = null; + } else { + times++; + } + }; + this.checkReadyInterval = setInterval(check, 200); + } private setAddress(address: string | null) { this._address = address; } diff --git a/packages/adapters/walletconnect/README.md b/packages/adapters/walletconnect/README.md index a20970a..26f4aa2 100644 --- a/packages/adapters/walletconnect/README.md +++ b/packages/adapters/walletconnect/README.md @@ -2,32 +2,77 @@ This package provides an adapter to enable TRON DApps to connect to [WalletConnect](https://walletconnect.com/). -## Usage +## Demo ```typescript import { WalletConnectAdapter } from '@tronweb3/tronwallet-adapter-walletconnect'; +import TronWeb from 'tronweb'; -const App = () => { - const adapters = useMemo( - () => [ - new WalletConnectAdapter({ - network: 'Nile', - options: { - relayUrl: 'wss://relay.walletconnect.com', - // example walletconnect app project ID - projectId: 'e899c82be21d4acca2c8aec45e893598', - metadata: { - name: 'Example App', - description: 'Example App', - url: 'https://yourdapp-url.com', - icons: ['https://yourdapp-url.com/icon.png'], - }, - }, - }), - ], - [] - ); -}; +const tronWeb = new TronWeb({ + fullHost: 'https://api.trongrid.io', + headers: { 'TRON-PRO-API-KEY': 'your api key' }, +}); + +const adapter = new WalletConnectAdapter({ + network: 'Nile', + options: { + relayUrl: 'wss://relay.walletconnect.com', + // example walletconnect app project ID + projectId: 'e899c82be21d4acca2c8aec45e893598', + metadata: { + name: 'Example App', + description: 'Example App', + url: 'https://yourdapp-url.com', + icons: ['https://yourdapp-url.com/icon.png'], + }, + }, +}); +// connect +await adapter.connect(); + +// then you can get address +console.log(adapter.address); + +// create a send TRX transaction +const unSignedTransaction = await tronWeb.transactionBuilder.sendTrx(targetAddress, 100, adapter.address); +// using adapter to sign the transaction +const signedTransaction = await adapter.signTransaction(unSignedTransaction); +// broadcast the transaction +await tronWeb.trx.sendRawTransaction(signedTransaction); ``` +## Documentation + +### API + +- `Constructor(config: WalletConnectAdapterConfig)` + ```typescript + interface WalletConnectAdapterConfig { + /** + * Network to use, one of Mainnet, Shasta, Nile + * Default: Nile + */ + network: 'Mainnet' | 'Shasta' | 'Nile'; + /** + * Options passed to WalletConnect client + */ + options: { + projectId: ''; + // optional parameters + relayUrl: ''; + metadata: { + name: 'Wallet name'; + description: 'A short description for your wallet'; + url: ""; + icons: [""]; + }; + }; + } + ``` + More detail about WalletConnect client options please refer to the [WalletConnect document](https://docs.walletconnect.com/2.0/javascript/sign/dapp-usage). + +### Caveates + +- `multiSign()` and `switchChain(chainId: string)` are not supported. + For more information about wallet adapter, please refer to [`@tronweb3/tronwallet-adapters`](https://github.com/tronprotocol/tronwallet-adapter/tree/main/packages/adapters/adapters). diff --git a/packages/adapters/walletconnect/package.json b/packages/adapters/walletconnect/package.json index 6f5c021..e28bdf8 100644 --- a/packages/adapters/walletconnect/package.json +++ b/packages/adapters/walletconnect/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-adapter-walletconnect", - "version": "1.0.2", + "version": "1.0.3", "description": "Wallet adapter for WalletConnect wallet.", "keywords": [ "TRON", @@ -40,7 +40,7 @@ "package": "shx echo '{ \"type\": \"commonjs\" }' > lib/cjs/package.json" }, "dependencies": { - "@tronweb3/tronwallet-abstract-adapter": "^1.1.4", + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", "@tronweb3/walletconnect-tron": "^1.0.0", "@walletconnect/sign-client": "^2.1.4", "@walletconnect/types": "^2.1.4" diff --git a/packages/react/react-hooks/package.json b/packages/react/react-hooks/package.json index 6aa8bc0..36b7ee0 100644 --- a/packages/react/react-hooks/package.json +++ b/packages/react/react-hooks/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-adapter-react-hooks", - "version": "1.1.2", + "version": "1.1.3", "description": "A `useWallet()` hook to make it easy to interact with Tron wallets.", "keywords": [ "TRON", @@ -45,8 +45,8 @@ "react-dom": "*" }, "dependencies": { - "@tronweb3/tronwallet-abstract-adapter": "^1.1.4", - "@tronweb3/tronwallet-adapter-tronlink": "^1.1.4" + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", + "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5" }, "devDependencies": { "@types/react": "^18.0.26", diff --git a/packages/react/react-ui/package.json b/packages/react/react-ui/package.json index 90b58c7..930beb3 100644 --- a/packages/react/react-ui/package.json +++ b/packages/react/react-ui/package.json @@ -1,6 +1,6 @@ { "name": "@tronweb3/tronwallet-adapter-react-ui", - "version": "1.1.3", + "version": "1.1.4", "description": "A set of out-of-the-box components to make it easy to interact with Tron wallets.", "keywords": [ "TRON", @@ -49,14 +49,14 @@ "react-dom": "*" }, "dependencies": { - "@tronweb3/tronwallet-abstract-adapter": "^1.1.4", - "@tronweb3/tronwallet-adapter-react-hooks": "^1.1.2" + "@tronweb3/tronwallet-abstract-adapter": "^1.1.5", + "@tronweb3/tronwallet-adapter-react-hooks": "^1.1.3" }, "devDependencies": { "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^13.5.0", - "@tronweb3/tronwallet-adapter-tronlink": "^1.1.4", + "@tronweb3/tronwallet-adapter-tronlink": "^1.1.5", "@types/jest": "^27.5.2", "@types/react": "^18.0.26", "@types/react-dom": "^18.0.0", diff --git a/packages/react/react-ui/style.css b/packages/react/react-ui/style.css index 142172e..db92b67 100644 --- a/packages/react/react-ui/style.css +++ b/packages/react/react-ui/style.css @@ -17,6 +17,7 @@ line-height: 48px; user-select: none; -webkit-tap-highlight-color: transparent; + white-space: pre; } .adapter-react-button:focus { outline: none; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 21d4177..6fb5238 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -69,9 +69,12 @@ importers: '@emotion/styled': ^11.10.4 '@mui/material': ^5.10.10 '@tronweb3/tronwallet-abstract-adapter': ^1.1.0 + '@tronweb3/tronwallet-adapter-bitkeep': ^1.0.0 '@tronweb3/tronwallet-adapter-ledger': ^1.1.2 + '@tronweb3/tronwallet-adapter-okxwallet': ^1.0.0 '@tronweb3/tronwallet-adapter-react-hooks': ^1.0.0 '@tronweb3/tronwallet-adapter-react-ui': ^1.1.0 + '@tronweb3/tronwallet-adapter-tokenpocket': ^1.0.0 '@tronweb3/tronwallet-adapters': ^1.1.2 '@types/react': ^18.0.26 '@types/react-dom': ^18.0.8 @@ -80,7 +83,7 @@ importers: events: ^3.3.0 react: ^18.2.0 react-dom: ^18.2.0 - tronweb: ^4.4.0 + tronweb: '5.1' typescript: ^4.6.4 vconsole: ^3.15.0 vite: 3.2.3 @@ -89,14 +92,17 @@ importers: '@emotion/styled': 11.10.5_jrh5enlbqfbnumycmktdqgd6se '@mui/material': 5.11.8_rqh7qj4464ntrqrt6banhaqg4q '@tronweb3/tronwallet-abstract-adapter': link:../../packages/adapters/abstract-adapter + '@tronweb3/tronwallet-adapter-bitkeep': link:../../packages/adapters/bitkeep '@tronweb3/tronwallet-adapter-ledger': link:../../packages/adapters/ledger + '@tronweb3/tronwallet-adapter-okxwallet': link:../../packages/adapters/okxwallet '@tronweb3/tronwallet-adapter-react-hooks': link:../../packages/react/react-hooks '@tronweb3/tronwallet-adapter-react-ui': link:../../packages/react/react-ui + '@tronweb3/tronwallet-adapter-tokenpocket': link:../../packages/adapters/tokenpocket '@tronweb3/tronwallet-adapters': link:../../packages/adapters/adapters events: 3.3.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 - tronweb: 4.4.0 + tronweb: registry.npmjs.org/tronweb/5.1.0 vconsole: 3.15.0 devDependencies: '@types/react': 18.0.27 @@ -138,8 +144,9 @@ importers: stream-http: ^3.2.0 tronweb: ^4.4.0 typescript: ^4.8.4 + vconsole: ^3.15.0 web-vitals: ^2.1.4 - webpack: ^5.75.0 + webpack: ^5.78.0 dependencies: '@mui/material': 5.11.8_5ndqzdd6t4rivxsukjv3i3ak2q '@testing-library/jest-dom': 5.16.5 @@ -171,8 +178,10 @@ importers: stream-http: 3.2.0 tronweb: 4.4.0 typescript: 4.9.5 + vconsole: 3.15.0 web-vitals: 2.1.4 - webpack: 5.75.0 + devDependencies: + webpack: 5.78.0 demos/react-ui/next-app: specifiers: @@ -180,9 +189,11 @@ importers: '@emotion/styled': ^11.10.4 '@mui/material': ^5.10.10 '@tronweb3/tronwallet-abstract-adapter': ^1.1.0 + '@tronweb3/tronwallet-adapter-bitkeep': ^1.0.0 '@tronweb3/tronwallet-adapter-ledger': ^1.1.1 '@tronweb3/tronwallet-adapter-react-hooks': ^1.0.0 '@tronweb3/tronwallet-adapter-react-ui': ^1.1.0 + '@tronweb3/tronwallet-adapter-tokenpocket': ^1.0.0 '@tronweb3/tronwallet-adapters': ^1.1.1 '@types/node': 18.11.9 '@types/react': 18.0.26 @@ -194,15 +205,18 @@ importers: react-dom: ^18.2.0 react-hot-toast: ^2.4.0 tronweb: ^4.4.0 + tslib: ^2.5.0 typescript: 4.9.3 dependencies: '@emotion/react': 11.10.5_kzbn2opkn2327fwg5yzwzya5o4 '@emotion/styled': 11.10.5_qvatmowesywn4ye42qoh247szu '@mui/material': 5.11.8_lskpmcsdi7ipu6qpuapyu56ihm '@tronweb3/tronwallet-abstract-adapter': link:../../../packages/adapters/abstract-adapter + '@tronweb3/tronwallet-adapter-bitkeep': link:../../../packages/adapters/bitkeep '@tronweb3/tronwallet-adapter-ledger': link:../../../packages/adapters/ledger '@tronweb3/tronwallet-adapter-react-hooks': link:../../../packages/react/react-hooks '@tronweb3/tronwallet-adapter-react-ui': link:../../../packages/react/react-ui + '@tronweb3/tronwallet-adapter-tokenpocket': link:../../../packages/adapters/tokenpocket '@tronweb3/tronwallet-adapters': link:../../../packages/adapters/adapters '@types/node': 18.11.9 '@types/react': 18.0.26 @@ -214,6 +228,7 @@ importers: react-dom: 18.2.0_react@18.2.0 react-hot-toast: 2.4.0_biqbaboplfbrettd7655fr4n2y tronweb: 4.4.0 + tslib: registry.npmjs.org/tslib/2.5.0 typescript: 4.9.3 demos/react-ui/vite-app: @@ -232,12 +247,14 @@ importers: '@vitejs/plugin-legacy': ^2.3.0 '@vitejs/plugin-react': ^2.1.0 buffer: ^6.0.3 + events: ^3.3.0 react: ^18.2.0 react-dom: ^18.2.0 react-hot-toast: ^2.4.0 rollup-plugin-polyfill-node: ^0.11.0 tronweb: ^4.4.0 typescript: ^4.6.4 + vconsole: ^3.15.0 vite: 3.1.0 dependencies: '@emotion/react': 11.10.5_3stiutgnnbnfnf3uowm5cip22i @@ -250,10 +267,12 @@ importers: '@tronweb3/tronwallet-adapter-walletconnect': link:../../../packages/adapters/walletconnect '@tronweb3/tronwallet-adapters': link:../../../packages/adapters/adapters buffer: 6.0.3 + events: registry.npmjs.org/events/3.3.0 react: 18.2.0 react-dom: 18.2.0_react@18.2.0 react-hot-toast: 2.4.0_biqbaboplfbrettd7655fr4n2y tronweb: 4.4.0 + vconsole: registry.npmjs.org/vconsole/3.15.0 devDependencies: '@types/react': 18.0.27 '@types/react-dom': 18.0.10 @@ -276,26 +295,48 @@ importers: packages/adapters/adapters: specifiers: - '@tronweb3/tronwallet-adapter-ledger': ^1.1.5 - '@tronweb3/tronwallet-adapter-tronlink': ^1.1.4 - '@tronweb3/tronwallet-adapter-walletconnect': ^1.0.2 + '@tronweb3/tronwallet-adapter-bitkeep': ^1.0.0 + '@tronweb3/tronwallet-adapter-ledger': ^1.1.6 + '@tronweb3/tronwallet-adapter-okxwallet': ^1.0.0 + '@tronweb3/tronwallet-adapter-tokenpocket': ^1.0.0 + '@tronweb3/tronwallet-adapter-tronlink': ^1.1.5 + '@tronweb3/tronwallet-adapter-walletconnect': ^1.0.3 shx: ^0.3.4 dependencies: + '@tronweb3/tronwallet-adapter-bitkeep': link:../bitkeep '@tronweb3/tronwallet-adapter-ledger': link:../ledger + '@tronweb3/tronwallet-adapter-okxwallet': link:../okxwallet + '@tronweb3/tronwallet-adapter-tokenpocket': link:../tokenpocket '@tronweb3/tronwallet-adapter-tronlink': link:../tronlink '@tronweb3/tronwallet-adapter-walletconnect': link:../walletconnect devDependencies: shx: 0.3.4 + packages/adapters/bitkeep: + specifiers: + '@testing-library/dom': ^8.20.0 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 + '@tronweb3/tronwallet-adapter-tronlink': ^1.1.5 + jest-environment-jsdom: ^29.3.1 + shx: ^0.3.4 + dependencies: + '@tronweb3/tronwallet-abstract-adapter': link:../abstract-adapter + '@tronweb3/tronwallet-adapter-tronlink': link:../tronlink + devDependencies: + '@testing-library/dom': registry.npmjs.org/@testing-library/dom/8.20.0 + jest-environment-jsdom: registry.npmjs.org/jest-environment-jsdom/29.4.2 + shx: registry.npmjs.org/shx/0.3.4 + packages/adapters/ledger: specifiers: '@ledgerhq/hw-app-trx': ^6.27.8 '@ledgerhq/hw-transport': 6.27.1 '@ledgerhq/hw-transport-webhid': 6.27.1 '@testing-library/dom': ^8.20.0 - '@tronweb3/tronwallet-abstract-adapter': ^1.1.4 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 buffer: ^6.0.3 eventemitter3: ^4.0.0 + jest-environment-jsdom: ^29.3.1 preact: ^10.11.3 shx: ^0.3.4 dependencies: @@ -308,12 +349,43 @@ importers: preact: 10.12.1 devDependencies: '@testing-library/dom': 8.20.0 + jest-environment-jsdom: 29.4.2 shx: 0.3.4 + packages/adapters/okxwallet: + specifiers: + '@testing-library/dom': ^8.20.0 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 + '@tronweb3/tronwallet-adapter-tronlink': ^1.1.5 + jest-environment-jsdom: ^29.3.1 + shx: ^0.3.4 + dependencies: + '@tronweb3/tronwallet-abstract-adapter': link:../abstract-adapter + '@tronweb3/tronwallet-adapter-tronlink': link:../tronlink + devDependencies: + '@testing-library/dom': registry.npmjs.org/@testing-library/dom/8.20.0 + jest-environment-jsdom: registry.npmjs.org/jest-environment-jsdom/29.4.2 + shx: registry.npmjs.org/shx/0.3.4 + + packages/adapters/tokenpocket: + specifiers: + '@testing-library/dom': ^8.20.0 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 + '@tronweb3/tronwallet-adapter-tronlink': ^1.1.5 + jest-environment-jsdom: ^29.3.1 + shx: ^0.3.4 + dependencies: + '@tronweb3/tronwallet-abstract-adapter': link:../abstract-adapter + '@tronweb3/tronwallet-adapter-tronlink': link:../tronlink + devDependencies: + '@testing-library/dom': registry.npmjs.org/@testing-library/dom/8.20.0 + jest-environment-jsdom: registry.npmjs.org/jest-environment-jsdom/29.4.2 + shx: registry.npmjs.org/shx/0.3.4 + packages/adapters/tronlink: specifiers: '@testing-library/dom': ^8.20.0 - '@tronweb3/tronwallet-abstract-adapter': ^1.1.4 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 jest-environment-jsdom: ^29.3.1 shx: ^0.3.4 dependencies: @@ -325,7 +397,7 @@ importers: packages/adapters/walletconnect: specifiers: - '@tronweb3/tronwallet-abstract-adapter': ^1.1.4 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 '@tronweb3/walletconnect-tron': ^1.0.0 '@walletconnect/sign-client': ^2.1.4 '@walletconnect/types': ^2.1.4 @@ -340,8 +412,8 @@ importers: packages/react/react-hooks: specifiers: - '@tronweb3/tronwallet-abstract-adapter': ^1.1.4 - '@tronweb3/tronwallet-adapter-tronlink': ^1.1.4 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 + '@tronweb3/tronwallet-adapter-tronlink': ^1.1.5 '@types/react': ^18.0.26 '@types/react-dom': ^18.0.6 jest-localstorage-mock: ^2.4.22 @@ -364,9 +436,9 @@ importers: '@testing-library/jest-dom': ^5.16.5 '@testing-library/react': ^13.4.0 '@testing-library/user-event': ^13.5.0 - '@tronweb3/tronwallet-abstract-adapter': ^1.1.4 - '@tronweb3/tronwallet-adapter-react-hooks': ^1.1.2 - '@tronweb3/tronwallet-adapter-tronlink': ^1.1.4 + '@tronweb3/tronwallet-abstract-adapter': ^1.1.5 + '@tronweb3/tronwallet-adapter-react-hooks': ^1.1.3 + '@tronweb3/tronwallet-adapter-tronlink': ^1.1.5 '@types/jest': ^27.5.2 '@types/react': ^18.0.26 '@types/react-dom': ^18.0.0 @@ -2466,24 +2538,6 @@ packages: resolution: {integrity: sha512-AHPmaAx+RYfZz0eYu6Gviiagpmiyw98ySSlQvCUhVGDRtDFe4DBS0x1bSjdF3gqUDYOczB+yYvBTtEylYSdRhg==} dev: false - /@esbuild/android-arm/0.15.18: - resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64/0.15.18: - resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: true - optional: true - /@eslint/eslintrc/1.4.1: resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -2945,7 +2999,7 @@ packages: dependencies: '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.12 + '@types/node': 18.13.0 jest-mock: 27.5.1 dev: false @@ -3277,7 +3331,7 @@ packages: '@jridgewell/trace-mapping': 0.3.17 /@jridgewell/resolve-uri/3.1.0: - resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==, registry: https://registry.yarnpkg.com/} engines: {node: '>=6.0.0'} /@jridgewell/set-array/1.1.2: @@ -3285,17 +3339,16 @@ packages: engines: {node: '>=6.0.0'} /@jridgewell/source-map/0.3.2: - resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} + resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==, registry: https://registry.yarnpkg.com/} dependencies: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 - dev: false /@jridgewell/sourcemap-codec/1.4.14: - resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} + resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==, registry: https://registry.yarnpkg.com/} /@jridgewell/trace-mapping/0.3.17: - resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==, registry: https://registry.yarnpkg.com/} dependencies: '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 @@ -3739,123 +3792,6 @@ packages: glob: 7.1.7 dev: false - /@next/swc-android-arm-eabi/13.0.5: - resolution: {integrity: sha512-YO691dxHlviy6H0eghgwqn+5kU9J3iQnKERHTDSppqjjGDBl6ab4wz9XfI5AhljjkaTg3TknHoIEWFDoZ4Ve8g==} - engines: {node: '>= 10'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@next/swc-android-arm64/13.0.5: - resolution: {integrity: sha512-ugbwffkUmp8cd2afehDC8LtQeFUxElRUBBngfB5UYSWBx18HW4OgzkPFIY8jUBH16zifvGZWXbICXJWDHrOLtw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-arm64/13.0.5: - resolution: {integrity: sha512-mshlh8QOtOalfZbc17uNAftWgqHTKnrv6QUwBe+mpGz04eqsSUzVz1JGZEdIkmuDxOz00cK2NPoc+VHDXh99IQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-darwin-x64/13.0.5: - resolution: {integrity: sha512-SfigOKW4Z2UB3ruUPyvrlDIkcJq1hiw1wvYApWugD+tQsAkYZKEoz+/8emCmeYZ6Gwgi1WHV+z52Oj8u7bEHPg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false - optional: true - - /@next/swc-freebsd-x64/13.0.5: - resolution: {integrity: sha512-0NJg8HZr4yG8ynmMGFXQf+Mahvq4ZgBmUwSlLXXymgxEQgH17erH/LoR69uITtW+KTsALgk9axEt5AAabM4ucg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm-gnueabihf/13.0.5: - resolution: {integrity: sha512-Cye+h3oDT3NDWjACMlRaolL8fokpKie34FlPj9nfoW7bYKmoMBY1d4IO/GgBF+5xEl7HkH0Ny/qex63vQ0pN+A==} - engines: {node: '>= 10'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-gnu/13.0.5: - resolution: {integrity: sha512-5BfDS/VoRDR5QUGG9oedOCEZGmV2zxUVFYLUJVPMSMeIgqkjxWQBiG2BUHZI6/LGk9yvHmjx7BTvtBCLtRg6IQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-arm64-musl/13.0.5: - resolution: {integrity: sha512-xenvqlXz+KxVKAB1YR723gnVNszpsCvKZkiFFaAYqDGJ502YuqU2fwLsaSm/ASRizNcBYeo9HPLTyc3r/9cdMQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-gnu/13.0.5: - resolution: {integrity: sha512-9Ahi1bbdXwhrWQmOyoTod23/hhK05da/FzodiNqd6drrMl1y7+RujoEcU8Dtw3H1mGWB+yuTlWo8B4Iba8hqiQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-linux-x64-musl/13.0.5: - resolution: {integrity: sha512-V+1mnh49qmS9fOZxVRbzjhBEz9IUGJ7AQ80JPWAYQM5LI4TxfdiF4APLPvJ52rOmNeTqnVz1bbKtVOso+7EZ4w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-arm64-msvc/13.0.5: - resolution: {integrity: sha512-wRE9rkp7I+/3Jf2T9PFIJOKq3adMWYEFkPOA7XAkUfYbQHlDJm/U5cVCWUsKByyQq5RThwufI91sgd19MfxRxg==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-ia32-msvc/13.0.5: - resolution: {integrity: sha512-Q1XQSLEhFuFhkKFdJIGt7cYQ4T3u6P5wrtUNreg5M+7P+fjSiC8+X+Vjcw+oebaacsdl0pWZlK+oACGafush1w==} - engines: {node: '>= 10'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false - optional: true - - /@next/swc-win32-x64-msvc/13.0.5: - resolution: {integrity: sha512-t5gRblrwwiNZP6cT7NkxlgxrFgHWtv9ei5vUraCLgBqzvIsa7X+PnarZUeQCXqz6Jg9JSGGT9j8lvzD97UqeJQ==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false - optional: true - /@nicolo-ribaudo/eslint-scope-5-internals/5.1.1-v1: resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} dependencies: @@ -3889,10 +3825,10 @@ packages: open: 8.4.1 picocolors: 1.0.0 tiny-glob: 0.2.9 - tslib: 2.5.0 + tslib: registry.npmjs.org/tslib/2.5.0 dev: false - /@pmmmwh/react-refresh-webpack-plugin/0.5.10_unmakpayn7vcxadrrsbqlrpehy: + /@pmmmwh/react-refresh-webpack-plugin/0.5.10_kwexxzmt7sjpqjleraytwi4jvu: resolution: {integrity: sha512-j0Ya0hCFZPd4x40qLzbhGsh9TMtdb+CJQiso+WxLOPNasohq9cc5SNUcwsZaRH6++Xh91Xkm/xHCkuIiIu0LUA==} engines: {node: '>= 10.13'} peerDependencies: @@ -3928,8 +3864,8 @@ packages: react-refresh: 0.11.0 schema-utils: 3.1.1 source-map: 0.7.4 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 + webpack: 5.78.0 + webpack-dev-server: 4.11.1_webpack@5.78.0 dev: false /@popperjs/core/2.11.6: @@ -4291,7 +4227,7 @@ packages: /@swc/helpers/0.4.14: resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} dependencies: - tslib: 2.5.0 + tslib: registry.npmjs.org/tslib/2.5.0 dev: false /@testing-library/dom/8.20.0: @@ -4355,7 +4291,7 @@ packages: '@babel/runtime': 7.20.13 /@tootallnate/once/1.1.2: - resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 6'} dev: false @@ -4453,30 +4389,26 @@ packages: dev: false /@types/eslint-scope/3.7.4: - resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==} + resolution: {integrity: sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==, registry: https://registry.yarnpkg.com/} dependencies: '@types/eslint': 8.21.0 - '@types/estree': 0.0.51 - dev: false + '@types/estree': 1.0.0 /@types/eslint/8.21.0: - resolution: {integrity: sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==} + resolution: {integrity: sha512-35EhHNOXgxnUgh4XCJsGhE7zdlDhYDN/aMG6UbkByCFFNgQ7b3U+uVoqBpicFydR8JEfgdjCF7SJ7MiJfzuiTA==, registry: https://registry.yarnpkg.com/} dependencies: - '@types/estree': 0.0.51 + '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 - dev: false /@types/estree/0.0.39: - resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} + resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, registry: https://registry.yarnpkg.com/} dev: false /@types/estree/0.0.51: - resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==} - dev: false + resolution: {integrity: sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==, registry: https://registry.yarnpkg.com/} /@types/estree/1.0.0: - resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} - dev: true + resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==, registry: https://registry.yarnpkg.com/} /@types/express-serve-static-core/4.17.33: resolution: {integrity: sha512-TPBqmR/HRYI3eC2E5hmiivIzv+bidAfXofM+sbonAGvyDhySGw9/PQZFt2BLOrjUUR++4eJVpx6KnLQK1Fk9tA==} @@ -4498,7 +4430,7 @@ packages: /@types/graceful-fs/4.1.6: resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} dependencies: - '@types/node': 16.18.12 + '@types/node': 18.13.0 /@types/html-minifier-terser/6.1.0: resolution: {integrity: sha512-oh/6byDPnL1zeNXFrDXFLyZjkr1MsBG667IM792caf1L2UPOOMf65NFzjUH/ltyfwjAGfs1rsX1eftK0jC/KIg==} @@ -4544,7 +4476,7 @@ packages: dev: true /@types/json-schema/7.0.11: - resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==} + resolution: {integrity: sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==, registry: https://registry.yarnpkg.com/} /@types/json5/0.0.29: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -4564,6 +4496,7 @@ packages: /@types/node/16.18.12: resolution: {integrity: sha512-vzLe5NaNMjIE3mcddFVGlAXN1LEWueUsMsOJWaT6wWMJGyljHAWHznqfnKUQWGzu7TLPrGvWdNAsvQYW+C0xtw==} + dev: false /@types/node/18.11.9: resolution: {integrity: sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==} @@ -4571,7 +4504,6 @@ packages: /@types/node/18.13.0: resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==} - dev: true /@types/normalize-package-data/2.4.1: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -5228,63 +5160,53 @@ packages: dev: false /@webassemblyjs/ast/1.11.1: - resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==} + resolution: {integrity: sha512-ukBh14qFLjxTQNTXocdyksN5QdM28S1CxHt2rdskFyL+xFV7VremuBLVbmCePj+URalXBENx/9Lm7lnhihtCSw==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/helper-numbers': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 - dev: false /@webassemblyjs/floating-point-hex-parser/1.11.1: - resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==} - dev: false + resolution: {integrity: sha512-iGRfyc5Bq+NnNuX8b5hwBrRjzf0ocrJPI6GWFodBFzmFnyvrQ83SHKhmilCU/8Jv67i4GJZBMhEzltxzcNagtQ==, registry: https://registry.yarnpkg.com/} /@webassemblyjs/helper-api-error/1.11.1: - resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==} - dev: false + resolution: {integrity: sha512-RlhS8CBCXfRUR/cwo2ho9bkheSXG0+NwooXcc3PAILALf2QLdFyj7KGsKRbVc95hZnhnERon4kW/D3SZpp6Tcg==, registry: https://registry.yarnpkg.com/} /@webassemblyjs/helper-buffer/1.11.1: - resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==} - dev: false + resolution: {integrity: sha512-gwikF65aDNeeXa8JxXa2BAk+REjSyhrNC9ZwdT0f8jc4dQQeDQ7G4m0f2QCLPJiMTTO6wfDmRmj/pW0PsUvIcA==, registry: https://registry.yarnpkg.com/} /@webassemblyjs/helper-numbers/1.11.1: - resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==} + resolution: {integrity: sha512-vDkbxiB8zfnPdNK9Rajcey5C0w+QJugEglN0of+kmO8l7lDb77AnlKYQF7aarZuCrv+l0UvqL+68gSDr3k9LPQ==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/floating-point-hex-parser': 1.11.1 '@webassemblyjs/helper-api-error': 1.11.1 '@xtuc/long': 4.2.2 - dev: false /@webassemblyjs/helper-wasm-bytecode/1.11.1: - resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==} - dev: false + resolution: {integrity: sha512-PvpoOGiJwXeTrSf/qfudJhwlvDQxFgelbMqtq52WWiXC6Xgg1IREdngmPN3bs4RoO83PnL/nFrxucXj1+BX62Q==, registry: https://registry.yarnpkg.com/} /@webassemblyjs/helper-wasm-section/1.11.1: - resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==} + resolution: {integrity: sha512-10P9No29rYX1j7F3EVPX3JvGPQPae+AomuSTPiF9eBQeChHI6iqjMIwR9JmOJXwpnn/oVGDk7I5IlskuMwU/pg==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/helper-buffer': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 '@webassemblyjs/wasm-gen': 1.11.1 - dev: false /@webassemblyjs/ieee754/1.11.1: - resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==} + resolution: {integrity: sha512-hJ87QIPtAMKbFq6CGTkZYJivEwZDbQUgYd3qKSadTNOhVY7p+gfP6Sr0lLRVTaG1JjFj+r3YchoqRYxNH3M0GQ==, registry: https://registry.yarnpkg.com/} dependencies: '@xtuc/ieee754': 1.2.0 - dev: false /@webassemblyjs/leb128/1.11.1: - resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==} + resolution: {integrity: sha512-BJ2P0hNZ0u+Th1YZXJpzW6miwqQUGcIHT1G/sf72gLVD9DZ5AdYTqPNbHZh6K1M5VmKvFXwGSWZADz+qBWxeRw==, registry: https://registry.yarnpkg.com/} dependencies: '@xtuc/long': 4.2.2 - dev: false /@webassemblyjs/utf8/1.11.1: - resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==} - dev: false + resolution: {integrity: sha512-9kqcxAEdMhiwQkHpkNiorZzqpGrodQQ2IGrHHxCy+Ozng0ofyMA0lTqiLkVs1uzTRejX+/O0EOT7KxqVPuXosQ==, registry: https://registry.yarnpkg.com/} /@webassemblyjs/wasm-edit/1.11.1: - resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==} + resolution: {integrity: sha512-g+RsupUC1aTHfR8CDgnsVRVZFJqdkFHpsHMfJuWQzWU3tvnLC07UqHICfP+4XyL2tnr1amvl1Sdp06TnYCmVkA==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/helper-buffer': 1.11.1 @@ -5294,29 +5216,26 @@ packages: '@webassemblyjs/wasm-opt': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 '@webassemblyjs/wast-printer': 1.11.1 - dev: false /@webassemblyjs/wasm-gen/1.11.1: - resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==} + resolution: {integrity: sha512-F7QqKXwwNlMmsulj6+O7r4mmtAlCWfO/0HdgOxSklZfQcDu0TpLiD1mRt/zF25Bk59FIjEuGAIyn5ei4yMfLhA==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/helper-wasm-bytecode': 1.11.1 '@webassemblyjs/ieee754': 1.11.1 '@webassemblyjs/leb128': 1.11.1 '@webassemblyjs/utf8': 1.11.1 - dev: false /@webassemblyjs/wasm-opt/1.11.1: - resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==} + resolution: {integrity: sha512-VqnkNqnZlU5EB64pp1l7hdm3hmQw7Vgqa0KF/KCNO9sIpI6Fk6brDEiX+iCOYrvMuBWDws0NkTOxYEb85XQHHw==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/helper-buffer': 1.11.1 '@webassemblyjs/wasm-gen': 1.11.1 '@webassemblyjs/wasm-parser': 1.11.1 - dev: false /@webassemblyjs/wasm-parser/1.11.1: - resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==} + resolution: {integrity: sha512-rrBujw+dJu32gYB7/Lup6UhdkPx9S9SnobZzRVL7VcBH9Bt9bCBLEuX/YXOOtBsOZ4NQrRykKhffRWHvigQvOA==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/ast': 1.11.1 '@webassemblyjs/helper-api-error': 1.11.1 @@ -5324,22 +5243,18 @@ packages: '@webassemblyjs/ieee754': 1.11.1 '@webassemblyjs/leb128': 1.11.1 '@webassemblyjs/utf8': 1.11.1 - dev: false /@webassemblyjs/wast-printer/1.11.1: - resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==} + resolution: {integrity: sha512-IQboUWM4eKzWW+N/jij2sRatKMh99QEelo3Eb2q0qXkvPRISAj8Qxtmw5itwqK+TTkBuUIE45AxYPToqPtL5gg==, registry: https://registry.yarnpkg.com/} dependencies: '@webassemblyjs/ast': 1.11.1 '@xtuc/long': 4.2.2 - dev: false /@xtuc/ieee754/1.2.0: - resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==} - dev: false + resolution: {integrity: sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==, registry: https://registry.yarnpkg.com/} /@xtuc/long/4.2.2: - resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==} - dev: false + resolution: {integrity: sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==, registry: https://registry.yarnpkg.com/} /JSONStream/1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} @@ -5361,7 +5276,7 @@ packages: dev: false /acorn-globals/6.0.0: - resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==} + resolution: {integrity: sha512-ZQl7LOWaF5ePqqcX4hLuv/bLXYQNfNWw2c0/yX/TsPRKamzHcTGQnlCjHT3TsmkOUVEPS3crCxiPfdzE/Trlhg==, registry: https://registry.yarnpkg.com/} dependencies: acorn: 7.4.1 acorn-walk: 7.2.0 @@ -5375,12 +5290,11 @@ packages: dev: true /acorn-import-assertions/1.8.0_acorn@8.8.2: - resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==} + resolution: {integrity: sha512-m7VZ3jwz4eK6A4Vtt8Ew1/mNbP24u0FhdyfA7fSvnJR6LMdfOYnmuIrrJAgrYfYJ10F/otaHTtrtrtmHdMNzEw==, registry: https://registry.yarnpkg.com/} peerDependencies: acorn: ^8 dependencies: acorn: 8.8.2 - dev: false /acorn-jsx/5.3.2_acorn@8.8.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} @@ -5407,7 +5321,7 @@ packages: engines: {node: '>=0.4.0'} /acorn/7.4.1: - resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==, registry: https://registry.yarnpkg.com/} engines: {node: '>=0.4.0'} hasBin: true dev: false @@ -5459,12 +5373,11 @@ packages: dev: false /ajv-keywords/3.5.2_ajv@6.12.6: - resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==} + resolution: {integrity: sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==, registry: https://registry.yarnpkg.com/} peerDependencies: ajv: ^6.9.1 dependencies: ajv: 6.12.6 - dev: false /ajv-keywords/5.1.0_ajv@8.12.0: resolution: {integrity: sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==} @@ -5476,7 +5389,7 @@ packages: dev: false /ajv/6.12.6: - resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==, registry: https://registry.yarnpkg.com/} dependencies: fast-deep-equal: 3.1.3 fast-json-stable-stringify: 2.1.0 @@ -5779,7 +5692,7 @@ packages: - supports-color dev: true - /babel-loader/8.3.0_la66t7xldg4uecmyawueag5wkm: + /babel-loader/8.3.0_ricsl3eq2klmpdpfimb5xusm5y: resolution: {integrity: sha512-H8SvsMF+m9t15HNLMipppzkC+Y2Yq+v3SonZyU70RBL/h1gxPkH08Ot8pEE9Z4Kd+czyWJClmFS8qzIP9OZ04Q==} engines: {node: '>= 8.9'} peerDependencies: @@ -5791,7 +5704,7 @@ packages: loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /babel-plugin-istanbul/6.1.1: @@ -6124,7 +6037,7 @@ packages: dev: false /browserslist/4.21.5: - resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==} + resolution: {integrity: sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==, registry: https://registry.yarnpkg.com/} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: @@ -6161,7 +6074,7 @@ packages: dev: false /buffer-from/1.1.2: - resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==, registry: https://registry.yarnpkg.com/} /buffer-xor/1.0.3: resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} @@ -6249,7 +6162,7 @@ packages: dev: false /caniuse-lite/1.0.30001451: - resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==} + resolution: {integrity: sha512-XY7UbUpGRatZzoRft//5xOa69/1iGJRBlrieH6QYrkKLIFn3m7OVEJ81dSrKoy2BnKsdbX5cLrOispZNYo9v2w==, registry: https://registry.yarnpkg.com/} /case-sensitive-paths-webpack-plugin/2.4.0: resolution: {integrity: sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==} @@ -6328,9 +6241,8 @@ packages: dev: false /chrome-trace-event/1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==, registry: https://registry.yarnpkg.com/} engines: {node: '>=6.0'} - dev: false /ci-info/3.7.1: resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==} @@ -6475,7 +6387,7 @@ packages: delayed-stream: 1.0.0 /commander/2.20.3: - resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==, registry: https://registry.yarnpkg.com/} /commander/7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} @@ -6779,7 +6691,7 @@ packages: postcss-selector-parser: 6.0.11 dev: false - /css-loader/6.7.3_webpack@5.75.0: + /css-loader/6.7.3_webpack@5.78.0: resolution: {integrity: sha512-qhOH1KlBMnZP8FzRO6YCH9UHXQhVMcEGLyNdb7Hv2cpcmJbW0YrddO+tG1ab5nT41KpHIYGsbeHqxB9xPu1pKQ==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -6793,10 +6705,10 @@ packages: postcss-modules-values: 4.0.0_postcss@8.4.21 postcss-value-parser: 4.2.0 semver: 7.3.8 - webpack: 5.75.0 + webpack: 5.78.0 dev: false - /css-minimizer-webpack-plugin/3.4.1_webpack@5.75.0: + /css-minimizer-webpack-plugin/3.4.1_webpack@5.78.0: resolution: {integrity: sha512-1u6D71zeIfgngN2XNRJefc/hY7Ybsxd74Jm4qngIXyUEk7fss3VUzuHxLAq/R8NAba4QU9OUSaMZlbpRc7bM4Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -6821,7 +6733,7 @@ packages: schema-utils: 4.0.0 serialize-javascript: 6.0.1 source-map: 0.6.1 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /css-prefers-color-scheme/6.0.3_postcss@8.4.21: @@ -6966,7 +6878,7 @@ packages: resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} /cssom/0.4.4: - resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==} + resolution: {integrity: sha512-p3pvU7r1MyyqbTk+WbNJIgJjG2VmTIaB10rI93LzVPrmDJKkzKYMtxxyAvQXR/NS6otuzveI7+7BBq3SjBS2mw==, registry: https://registry.yarnpkg.com/} dev: false /cssom/0.5.0: @@ -7014,7 +6926,7 @@ packages: dev: true /data-urls/2.0.0: - resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} + resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: abab: 2.0.6 @@ -7344,7 +7256,7 @@ packages: dev: false /domexception/2.0.1: - resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} + resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==, registry: https://registry.yarnpkg.com/} engines: {node: '>=8'} dependencies: webidl-conversions: 5.0.0 @@ -7432,7 +7344,7 @@ packages: dev: false /electron-to-chromium/1.4.294: - resolution: {integrity: sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==} + resolution: {integrity: sha512-PuHZB3jEN7D8WPPjLmBQAsqQz8tWHlkkB4n0E2OYw8RwVdmBYV0Wn+rUFH8JqYyIRb4HQhhedgxlZL163wqLrQ==, registry: https://registry.yarnpkg.com/} /elliptic/6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} @@ -7491,12 +7403,11 @@ packages: dev: false /enhanced-resolve/5.12.0: - resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 tapable: 2.2.1 - dev: false /enquirer/2.3.6: resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} @@ -7581,8 +7492,7 @@ packages: stop-iteration-iterator: 1.0.0 /es-module-lexer/0.9.3: - resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==} - dev: false + resolution: {integrity: sha512-1HQ2M2sPtxwnvOvT1ZClHyQDiggdNjURWpY2we6aMKCQiUVxTmVs2UYPLIrD84sS+kMdUwfBSylbJPwNnBrnHQ==, registry: https://registry.yarnpkg.com/} /es-set-tostringtag/2.0.1: resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} @@ -7605,247 +7515,67 @@ packages: is-date-object: 1.0.5 is-symbol: 1.0.4 - /esbuild-android-64/0.15.18: - resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-android-arm64/0.15.18: - resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} + /esbuild/0.15.18: + resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} engines: {node: '>=12'} - cpu: [arm64] - os: [android] + hasBin: true requiresBuild: true + optionalDependencies: + '@esbuild/android-arm': registry.npmjs.org/@esbuild/android-arm/0.15.18 + '@esbuild/linux-loong64': registry.npmjs.org/@esbuild/linux-loong64/0.15.18 + esbuild-android-64: registry.npmjs.org/esbuild-android-64/0.15.18 + esbuild-android-arm64: registry.npmjs.org/esbuild-android-arm64/0.15.18 + esbuild-darwin-64: registry.npmjs.org/esbuild-darwin-64/0.15.18 + esbuild-darwin-arm64: registry.npmjs.org/esbuild-darwin-arm64/0.15.18 + esbuild-freebsd-64: registry.npmjs.org/esbuild-freebsd-64/0.15.18 + esbuild-freebsd-arm64: registry.npmjs.org/esbuild-freebsd-arm64/0.15.18 + esbuild-linux-32: registry.npmjs.org/esbuild-linux-32/0.15.18 + esbuild-linux-64: registry.npmjs.org/esbuild-linux-64/0.15.18 + esbuild-linux-arm: registry.npmjs.org/esbuild-linux-arm/0.15.18 + esbuild-linux-arm64: registry.npmjs.org/esbuild-linux-arm64/0.15.18 + esbuild-linux-mips64le: registry.npmjs.org/esbuild-linux-mips64le/0.15.18 + esbuild-linux-ppc64le: registry.npmjs.org/esbuild-linux-ppc64le/0.15.18 + esbuild-linux-riscv64: registry.npmjs.org/esbuild-linux-riscv64/0.15.18 + esbuild-linux-s390x: registry.npmjs.org/esbuild-linux-s390x/0.15.18 + esbuild-netbsd-64: registry.npmjs.org/esbuild-netbsd-64/0.15.18 + esbuild-openbsd-64: registry.npmjs.org/esbuild-openbsd-64/0.15.18 + esbuild-sunos-64: registry.npmjs.org/esbuild-sunos-64/0.15.18 + esbuild-windows-32: registry.npmjs.org/esbuild-windows-32/0.15.18 + esbuild-windows-64: registry.npmjs.org/esbuild-windows-64/0.15.18 + esbuild-windows-arm64: registry.npmjs.org/esbuild-windows-arm64/0.15.18 dev: true - optional: true - /esbuild-darwin-64/0.15.18: - resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /escalade/3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==, registry: https://registry.yarnpkg.com/} + engines: {node: '>=6'} - /esbuild-darwin-arm64/0.15.18: - resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true + /escape-html/1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + dev: false - /esbuild-freebsd-64/0.15.18: - resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + /escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} - /esbuild-freebsd-arm64/0.15.18: - resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true + /escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} - /esbuild-linux-32/0.15.18: - resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true + /escape-string-regexp/4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} - /esbuild-linux-64/0.15.18: - resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.15.18: - resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.15.18: - resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.15.18: - resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.15.18: - resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.15.18: - resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.15.18: - resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.15.18: - resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.15.18: - resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-sunos-64/0.15.18: - resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.15.18: - resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.15.18: - resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.15.18: - resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild/0.15.18: - resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.15.18 - '@esbuild/linux-loong64': 0.15.18 - esbuild-android-64: 0.15.18 - esbuild-android-arm64: 0.15.18 - esbuild-darwin-64: 0.15.18 - esbuild-darwin-arm64: 0.15.18 - esbuild-freebsd-64: 0.15.18 - esbuild-freebsd-arm64: 0.15.18 - esbuild-linux-32: 0.15.18 - esbuild-linux-64: 0.15.18 - esbuild-linux-arm: 0.15.18 - esbuild-linux-arm64: 0.15.18 - esbuild-linux-mips64le: 0.15.18 - esbuild-linux-ppc64le: 0.15.18 - esbuild-linux-riscv64: 0.15.18 - esbuild-linux-s390x: 0.15.18 - esbuild-netbsd-64: 0.15.18 - esbuild-openbsd-64: 0.15.18 - esbuild-sunos-64: 0.15.18 - esbuild-windows-32: 0.15.18 - esbuild-windows-64: 0.15.18 - esbuild-windows-arm64: 0.15.18 - dev: true - - /escalade/3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} - engines: {node: '>=6'} - - /escape-html/1.0.3: - resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} - dev: false - - /escape-string-regexp/1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - - /escape-string-regexp/2.0.0: - resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} - engines: {node: '>=8'} - - /escape-string-regexp/4.0.0: - resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} - engines: {node: '>=10'} - - /escodegen/2.0.0: - resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} - engines: {node: '>=6.0'} - hasBin: true - dependencies: - esprima: 4.0.1 - estraverse: 5.3.0 - esutils: 2.0.3 - optionator: 0.8.3 - optionalDependencies: - source-map: 0.6.1 + /escodegen/2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 /eslint-config-next/13.0.5_zmyfsul77535b2d7nzuoiqkehy: resolution: {integrity: sha512-lge94W7ME6kNCO96eCykq5GbKbllzmcDNDhh1/llMCRgNPl0+GIQ8dOoM0I7uRQVW56VmTXFybJFXgow11a5pg==} @@ -8202,7 +7932,7 @@ packages: dev: false /eslint-scope/5.1.1: - resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} + resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==, registry: https://registry.yarnpkg.com/} engines: {node: '>=8.0.0'} dependencies: esrecurse: 4.3.0 @@ -8232,7 +7962,7 @@ packages: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint-webpack-plugin/3.2.0_nkwuvqep7k7zzhloz3wxbhr4hq: + /eslint-webpack-plugin/3.2.0_wrarxwq24go2av5kukilgyoyye: resolution: {integrity: sha512-avrKcGncpPbPSUHX6B3stNGzkKFto3eL+DKM4+VyMrVnhPc3vRczVlCq3uhuFOdRvDHTVXuzwk1ZKUrqDQHQ9w==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -8245,7 +7975,7 @@ packages: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /eslint/8.33.0: @@ -8315,13 +8045,13 @@ packages: estraverse: 5.3.0 /esrecurse/4.3.0: - resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==, registry: https://registry.yarnpkg.com/} engines: {node: '>=4.0'} dependencies: estraverse: 5.3.0 /estraverse/4.3.0: - resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==, registry: https://registry.yarnpkg.com/} engines: {node: '>=4.0'} /estraverse/5.3.0: @@ -8390,9 +8120,8 @@ packages: dev: false /events/3.3.0: - resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.yarnpkg.com/events/-/events-3.3.0.tgz} engines: {node: '>=0.8.x'} - dev: false /evp_bytestokey/1.0.3: resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} @@ -8558,7 +8287,7 @@ packages: dependencies: flat-cache: 3.0.4 - /file-loader/6.2.0_webpack@5.75.0: + /file-loader/6.2.0_webpack@5.78.0: resolution: {integrity: sha512-qo3glqyTa61Ytg4u73GultjHGjdRyig3tG6lPtyX/jOEJvHif9uB0/OCI2Kif6ctF3caQTW2G5gym21oAsI4pw==} engines: {node: '>= 10.13.0'} peerDependencies: @@ -8566,7 +8295,7 @@ packages: dependencies: loader-utils: 2.0.4 schema-utils: 3.1.1 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /filelist/1.0.4: @@ -8689,7 +8418,7 @@ packages: dependencies: is-callable: 1.2.7 - /fork-ts-checker-webpack-plugin/6.5.2_5nsnk2aswgmt3bqwilhpeaeih4: + /fork-ts-checker-webpack-plugin/6.5.2_eqv7fpzrdfhyukx4iagl5sxiim: resolution: {integrity: sha512-m5cUmF30xkZ7h4tWUgTAcEaKmUW7tfyUyTqNNOz7OxWJ0v1VWKTcOvH8FWHUwSjlW/356Ijc9vi3XfcPstpQKA==} engines: {node: '>=10', yarn: '>=1.0.0'} peerDependencies: @@ -8718,11 +8447,11 @@ packages: semver: 7.3.8 tapable: 1.1.3 typescript: 4.9.5 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /form-data/3.0.1: - resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==} + resolution: {integrity: sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 6'} dependencies: asynckit: 0.4.0 @@ -8909,8 +8638,7 @@ packages: is-glob: 4.0.3 /glob-to-regexp/0.4.1: - resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==} - dev: false + resolution: {integrity: sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==, registry: https://registry.yarnpkg.com/} /glob/7.1.7: resolution: {integrity: sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==} @@ -9156,7 +8884,7 @@ packages: dev: false /html-encoding-sniffer/2.0.1: - resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==} + resolution: {integrity: sha512-D5JbOMBIR/TVZkubHT+OyT2705QvogUW4IBn6nHd756OwieSF9aDYFj4dv6HHEVGYbHaLETa3WggZYWWMyy3ZQ==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: whatwg-encoding: 1.0.5 @@ -9190,7 +8918,7 @@ packages: terser: 5.16.3 dev: false - /html-webpack-plugin/5.5.0_webpack@5.75.0: + /html-webpack-plugin/5.5.0_webpack@5.78.0: resolution: {integrity: sha512-sy88PC2cRTVxvETRgUHFrL4No3UxvcH8G1NepGhqaTT+GXN2kTamqasot0inS5hXeg1cMbFDt27zzo9p35lZVw==} engines: {node: '>=10.13.0'} peerDependencies: @@ -9201,7 +8929,7 @@ packages: lodash: 4.17.21 pretty-error: 4.0.0 tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /htmlparser2/6.1.0: @@ -9243,7 +8971,7 @@ packages: dev: false /http-proxy-agent/4.0.1: - resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 6'} dependencies: '@tootallnate/once': 1.1.2 @@ -9771,7 +9499,7 @@ packages: '@jest/environment': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.12 + '@types/node': 18.13.0 chalk: 4.1.2 co: 4.6.0 dedent: 0.7.0 @@ -10070,20 +9798,20 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.4.2 - chalk: 4.1.2 + chalk: registry.npmjs.org/chalk/4.1.2 jest-get-type: 29.4.2 jest-util: 29.4.2 - pretty-format: 29.4.2 + pretty-format: registry.npmjs.org/pretty-format/29.4.2 dev: true /jest-environment-jsdom/27.5.1: - resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==} + resolution: {integrity: sha512-TFBvkTC1Hnnnrka/fUb56atfDtJ9VMZ94JkjTbggl1PEpwrYtUBKMezB3inLmWqQsXYLcMwNoDQwoBTAvFfsfw==, registry: https://registry.yarnpkg.com/} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.12 + '@types/node': 18.13.0 jest-mock: 27.5.1 jest-util: 27.5.1 jsdom: 16.7.0 @@ -10124,7 +9852,7 @@ packages: '@jest/environment': 27.5.1 '@jest/fake-timers': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.12 + '@types/node': 18.13.0 jest-mock: 27.5.1 jest-util: 27.5.1 dev: false @@ -10186,7 +9914,7 @@ packages: micromatch: 4.0.5 walker: 1.0.8 optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true /jest-jasmine2/27.5.1: @@ -10197,7 +9925,7 @@ packages: '@jest/source-map': 27.5.1 '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 - '@types/node': 16.18.12 + '@types/node': 18.13.0 chalk: 4.1.2 co: 4.6.0 expect: 27.5.1 @@ -10533,7 +10261,7 @@ packages: resolution: {integrity: sha512-jZCyo6iIxO1aqUxpuBlwTDMkzOAJS4a3eYz3YzgxxVQFwLeSA7Jfq5cbqCY+JLvTDrWirgusI/0KwxKMgrdf7w==} engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} dependencies: - '@types/node': 16.18.12 + '@types/node': 18.13.0 graceful-fs: 4.2.10 dev: false @@ -10726,13 +10454,12 @@ packages: dev: false /jest-worker/27.5.1: - resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} + resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 16.18.12 + '@types/node': 18.13.0 merge-stream: 2.0.0 supports-color: 8.1.1 - dev: false /jest-worker/28.1.3: resolution: {integrity: sha512-CqRA220YV/6jCo8VWvAt1KKx6eek1VIHMPeLEbpcfSfkEeWyBNppynM/o6q+Wmw+sOhos2ml34wZbSX3G13//g==} @@ -10837,7 +10564,7 @@ packages: argparse: 2.0.1 /jsdom/16.7.0: - resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} + resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} peerDependencies: canvas: ^2.5.0 @@ -10930,10 +10657,10 @@ packages: hasBin: true /json-parse-even-better-errors/2.3.1: - resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==, registry: https://registry.yarnpkg.com/} /json-schema-traverse/0.4.1: - resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==, registry: https://registry.yarnpkg.com/} /json-schema-traverse/1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} @@ -10964,7 +10691,7 @@ packages: /jsonfile/4.0.0: resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==} optionalDependencies: - graceful-fs: 4.2.10 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 dev: true /jsonfile/6.1.0: @@ -11101,9 +10828,8 @@ packages: dev: true /loader-runner/4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==, registry: https://registry.yarnpkg.com/} engines: {node: '>=6.11.5'} - dev: false /loader-utils/2.0.4: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} @@ -11374,7 +11100,7 @@ packages: dev: false /merge-stream/2.0.0: - resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==, registry: https://registry.yarnpkg.com/} /merge2/1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} @@ -11429,14 +11155,14 @@ packages: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} - /mini-css-extract-plugin/2.7.2_webpack@5.75.0: + /mini-css-extract-plugin/2.7.2_webpack@5.78.0: resolution: {integrity: sha512-EdlUizq13o0Pd+uCp+WO/JpkLvHRVGt97RqfeGhXqAcorYo1ypJSpkV+WDT0vY/kmh/p7wRdJNJtuyK540PXDw==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /minimalistic-assert/1.0.1: @@ -11458,7 +11184,7 @@ packages: dev: false /minimatch/5.1.6: - resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 @@ -11565,8 +11291,7 @@ packages: dev: false /neo-async/2.6.2: - resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} - dev: false + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==, registry: https://registry.yarnpkg.com/} /next/13.0.5_biqbaboplfbrettd7655fr4n2y: resolution: {integrity: sha512-awpc3DkphyKydwCotcBnuKwh6hMqkT5xdiBK4OatJtOZurDPBYLP62jtM2be/4OunpmwIbsS0Eyv+ZGU97ciEg==} @@ -11594,19 +11319,19 @@ packages: react-dom: 18.2.0_react@18.2.0 styled-jsx: 5.1.0_react@18.2.0 optionalDependencies: - '@next/swc-android-arm-eabi': 13.0.5 - '@next/swc-android-arm64': 13.0.5 - '@next/swc-darwin-arm64': 13.0.5 - '@next/swc-darwin-x64': 13.0.5 - '@next/swc-freebsd-x64': 13.0.5 - '@next/swc-linux-arm-gnueabihf': 13.0.5 - '@next/swc-linux-arm64-gnu': 13.0.5 - '@next/swc-linux-arm64-musl': 13.0.5 - '@next/swc-linux-x64-gnu': 13.0.5 - '@next/swc-linux-x64-musl': 13.0.5 - '@next/swc-win32-arm64-msvc': 13.0.5 - '@next/swc-win32-ia32-msvc': 13.0.5 - '@next/swc-win32-x64-msvc': 13.0.5 + '@next/swc-android-arm-eabi': registry.npmjs.org/@next/swc-android-arm-eabi/13.0.5 + '@next/swc-android-arm64': registry.npmjs.org/@next/swc-android-arm64/13.0.5 + '@next/swc-darwin-arm64': registry.npmjs.org/@next/swc-darwin-arm64/13.0.5 + '@next/swc-darwin-x64': registry.npmjs.org/@next/swc-darwin-x64/13.0.5 + '@next/swc-freebsd-x64': registry.npmjs.org/@next/swc-freebsd-x64/13.0.5 + '@next/swc-linux-arm-gnueabihf': registry.npmjs.org/@next/swc-linux-arm-gnueabihf/13.0.5 + '@next/swc-linux-arm64-gnu': registry.npmjs.org/@next/swc-linux-arm64-gnu/13.0.5 + '@next/swc-linux-arm64-musl': registry.npmjs.org/@next/swc-linux-arm64-musl/13.0.5 + '@next/swc-linux-x64-gnu': registry.npmjs.org/@next/swc-linux-x64-gnu/13.0.5 + '@next/swc-linux-x64-musl': registry.npmjs.org/@next/swc-linux-x64-musl/13.0.5 + '@next/swc-win32-arm64-msvc': registry.npmjs.org/@next/swc-win32-arm64-msvc/13.0.5 + '@next/swc-win32-ia32-msvc': registry.npmjs.org/@next/swc-win32-ia32-msvc/13.0.5 + '@next/swc-win32-x64-msvc': registry.npmjs.org/@next/swc-win32-x64-msvc/13.0.5 transitivePeerDependencies: - '@babel/core' - babel-plugin-macros @@ -11628,7 +11353,7 @@ packages: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} /node-releases/2.0.10: - resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==} + resolution: {integrity: sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==, registry: https://registry.yarnpkg.com/} /normalize-package-data/2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -11940,7 +11665,7 @@ packages: lines-and-columns: 1.2.4 /parse5/6.0.1: - resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==, registry: https://registry.yarnpkg.com/} dev: false /parse5/7.1.2: @@ -12416,7 +12141,7 @@ packages: yaml: 1.10.2 dev: false - /postcss-loader/6.2.1_6jdsrmfenkuhhw3gx4zvjlznce: + /postcss-loader/6.2.1_2izhiogyhzv3k6gmxpzxzwhblu: resolution: {integrity: sha512-WbbYpmAaKcux/P66bZ40bpWsBucjx/TTgVVzRZ9yUO8yQfVBlameJ0ZGVaPfH64hNSBh63a+ICP5nqOpBA0w+Q==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -12427,7 +12152,7 @@ packages: klona: 2.0.6 postcss: 8.4.21 semver: 7.3.8 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /postcss-logical/5.0.4_postcss@8.4.21: @@ -12956,7 +12681,7 @@ packages: react-is: 17.0.2 /pretty-format/28.1.3: - resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==} + resolution: {integrity: sha512-8gFb/To0OmxHR9+ZTb14Df2vNxdGCX8g1xWGUTqUw5TiZvcQf5sHKObd5UcPyLLyowNwDAMTF3XWOG1B6mxl1Q==, registry: https://registry.yarnpkg.com/} engines: {node: ^12.13.0 || ^14.15.0 || ^16.10.0 || >=17.0.0} dependencies: '@jest/schemas': 28.1.3 @@ -13108,7 +12833,6 @@ packages: resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} dependencies: safe-buffer: 5.2.1 - dev: false /randomfill/1.0.4: resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} @@ -13154,7 +12878,7 @@ packages: semver: 5.7.1 dev: false - /react-dev-utils/12.0.1_5nsnk2aswgmt3bqwilhpeaeih4: + /react-dev-utils/12.0.1_eqv7fpzrdfhyukx4iagl5sxiim: resolution: {integrity: sha512-84Ivxmr17KjUupyqzFode6xKhjwuEJDROWKJy/BthkL7Wn6NJ8h4WE6k/exAv6ImS+0oZLRRW5j/aINMHyeGeQ==} engines: {node: '>=14'} peerDependencies: @@ -13173,7 +12897,7 @@ packages: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.2_5nsnk2aswgmt3bqwilhpeaeih4 + fork-ts-checker-webpack-plugin: 6.5.2_eqv7fpzrdfhyukx4iagl5sxiim global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -13189,7 +12913,7 @@ packages: strip-ansi: 6.0.1 text-table: 0.2.0 typescript: 4.9.5 - webpack: 5.75.0 + webpack: 5.78.0 transitivePeerDependencies: - eslint - supports-color @@ -13254,54 +12978,54 @@ packages: optional: true dependencies: '@babel/core': 7.20.12 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_unmakpayn7vcxadrrsbqlrpehy + '@pmmmwh/react-refresh-webpack-plugin': 0.5.10_kwexxzmt7sjpqjleraytwi4jvu '@svgr/webpack': 5.5.0 babel-jest: 27.5.1_@babel+core@7.20.12 - babel-loader: 8.3.0_la66t7xldg4uecmyawueag5wkm + babel-loader: 8.3.0_ricsl3eq2klmpdpfimb5xusm5y babel-plugin-named-asset-import: 0.3.8_@babel+core@7.20.12 babel-preset-react-app: 10.0.1 bfj: 7.0.2 browserslist: 4.21.5 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.7.3_webpack@5.75.0 - css-minimizer-webpack-plugin: 3.4.1_webpack@5.75.0 + css-loader: 6.7.3_webpack@5.78.0 + css-minimizer-webpack-plugin: 3.4.1_webpack@5.78.0 dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.33.0 eslint-config-react-app: 7.0.1_6iwopyuv7xg3y3j23xjlstyxr4 - eslint-webpack-plugin: 3.2.0_nkwuvqep7k7zzhloz3wxbhr4hq - file-loader: 6.2.0_webpack@5.75.0 + eslint-webpack-plugin: 3.2.0_wrarxwq24go2av5kukilgyoyye + file-loader: 6.2.0_webpack@5.78.0 fs-extra: 10.1.0 - html-webpack-plugin: 5.5.0_webpack@5.75.0 + html-webpack-plugin: 5.5.0_webpack@5.78.0 identity-obj-proxy: 3.0.0 jest: 27.5.1 jest-resolve: 27.5.1 jest-watch-typeahead: 1.1.0_jest@27.5.1 - mini-css-extract-plugin: 2.7.2_webpack@5.75.0 + mini-css-extract-plugin: 2.7.2_webpack@5.78.0 postcss: 8.4.21 postcss-flexbugs-fixes: 5.0.2_postcss@8.4.21 - postcss-loader: 6.2.1_6jdsrmfenkuhhw3gx4zvjlznce + postcss-loader: 6.2.1_2izhiogyhzv3k6gmxpzxzwhblu postcss-normalize: 10.0.1_jrpp4geoaqu5dz2gragkckznb4 postcss-preset-env: 7.8.3_postcss@8.4.21 prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1_5nsnk2aswgmt3bqwilhpeaeih4 + react-dev-utils: 12.0.1_eqv7fpzrdfhyukx4iagl5sxiim react-refresh: 0.11.0 resolve: 1.22.1 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0_webpack@5.75.0 + sass-loader: 12.6.0_webpack@5.78.0 semver: 7.3.8 - source-map-loader: 3.0.2_webpack@5.75.0 - style-loader: 3.3.1_webpack@5.75.0 + source-map-loader: 3.0.2_webpack@5.78.0 + style-loader: 3.3.1_webpack@5.78.0 tailwindcss: 3.2.6 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 + terser-webpack-plugin: 5.3.6_webpack@5.78.0 typescript: 4.9.5 - webpack: 5.75.0 - webpack-dev-server: 4.11.1_webpack@5.75.0 - webpack-manifest-plugin: 4.1.1_webpack@5.75.0 - workbox-webpack-plugin: 6.5.4_webpack@5.75.0 + webpack: 5.78.0 + webpack-dev-server: 4.11.1_webpack@5.78.0 + webpack-manifest-plugin: 4.1.1_webpack@5.78.0 + workbox-webpack-plugin: 6.5.4_webpack@5.78.0 optionalDependencies: fsevents: 2.3.2 transitivePeerDependencies: @@ -13656,7 +13380,7 @@ packages: engines: {node: '>=10.0.0'} hasBin: true optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true /rollup/2.79.1: @@ -13714,7 +13438,7 @@ packages: resolution: {integrity: sha512-ZRwKbh/eQ6w9vmTjkuG0Ioi3HBwPFce0O+v//ve+aOq1oeCy7jMV2qzzAlpsNuqpqCBjjriM1lbtZbF/Q8jVyA==} dev: false - /sass-loader/12.6.0_webpack@5.75.0: + /sass-loader/12.6.0_webpack@5.78.0: resolution: {integrity: sha512-oLTaH0YCtX4cfnJZxKSLAyglED0naiYfNG1iXfU5w1LNZ+ukoA5DtyDIN5zmKVZwYNJP4KRc5Y3hkWga+7tYfA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -13735,7 +13459,7 @@ packages: dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /sax/1.2.4: @@ -13743,7 +13467,7 @@ packages: dev: false /saxes/5.0.1: - resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} + resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: xmlchars: 2.2.0 @@ -13762,7 +13486,7 @@ packages: loose-envify: 1.4.0 /schema-utils/2.7.0: - resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==} + resolution: {integrity: sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 8.9.0'} dependencies: '@types/json-schema': 7.0.11 @@ -13780,13 +13504,12 @@ packages: dev: false /schema-utils/3.1.1: - resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==} + resolution: {integrity: sha512-Y5PQxS4ITlC+EahLuXaY86TXfR7Dc5lw294alXOq86JAHCihAIZfqv8nNCWvaEJvaC51uN9hbLGeV0cFBdH+Fw==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 10.13.0'} dependencies: '@types/json-schema': 7.0.11 ajv: 6.12.6 ajv-keywords: 3.5.2_ajv@6.12.6 - dev: false /schema-utils/4.0.0: resolution: {integrity: sha512-1edyXKgh6XnJsJSQ8mKWXnN/BVaIbFMLpouRUrXgVq7WYne5kw3MW7UPhO44uRXQSIpTSXoJbmrR2X0w9kUTyg==} @@ -13861,10 +13584,9 @@ packages: dev: false /serialize-javascript/6.0.1: - resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==} + resolution: {integrity: sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==, registry: https://registry.yarnpkg.com/} dependencies: randombytes: 2.1.0 - dev: false /serve-index/1.9.1: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} @@ -14048,7 +13770,7 @@ packages: resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} engines: {node: '>=0.10.0'} - /source-map-loader/3.0.2_webpack@5.75.0: + /source-map-loader/3.0.2_webpack@5.78.0: resolution: {integrity: sha512-BokxPoLjyl3iOrgkWaakaxqnelAJSS+0V+De0kKIq6lyWrXuiPgYTGp6z3iHmqljKAaLXwZa+ctD8GccRJeVvg==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -14057,7 +13779,7 @@ packages: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.75.0 + webpack: 5.78.0 dev: false /source-map-support/0.5.13: @@ -14068,11 +13790,10 @@ packages: dev: true /source-map-support/0.5.21: - resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==, registry: https://registry.yarnpkg.com/} dependencies: buffer-from: 1.1.2 source-map: 0.6.1 - dev: false /source-map/0.5.7: resolution: {integrity: sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==} @@ -14082,6 +13803,7 @@ packages: /source-map/0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} + requiresBuild: true /source-map/0.7.4: resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} @@ -14389,13 +14111,13 @@ packages: escape-string-regexp: 1.0.5 dev: true - /style-loader/3.3.1_webpack@5.75.0: + /style-loader/3.3.1_webpack@5.78.0: resolution: {integrity: sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 dependencies: - webpack: 5.75.0 + webpack: 5.78.0 dev: false /styled-jsx/5.1.0_react@18.2.0: @@ -14443,7 +14165,7 @@ packages: has-flag: 4.0.0 /supports-color/8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: has-flag: 4.0.0 @@ -14507,7 +14229,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.3.1 - tslib: 2.5.0 + tslib: registry.npmjs.org/tslib/2.5.0 dev: false /systemjs/6.13.0: @@ -14547,14 +14269,13 @@ packages: dev: false /tapable/1.1.3: - resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==} + resolution: {integrity: sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==, registry: https://registry.yarnpkg.com/} engines: {node: '>=6'} dev: false /tapable/2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==, registry: https://registry.yarnpkg.com/} engines: {node: '>=6'} - dev: false /temp-dir/2.0.0: resolution: {integrity: sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==} @@ -14584,8 +14305,8 @@ packages: supports-hyperlinks: 2.3.0 dev: false - /terser-webpack-plugin/5.3.6_webpack@5.75.0: - resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==} + /terser-webpack-plugin/5.3.6_webpack@5.78.0: + resolution: {integrity: sha512-kfLFk+PoLUQIbLmB1+PZDMRSZS99Mp+/MHqDNmMA6tOItzRt+Npe3E+fsMs5mfcM0wCtrrdU387UnV+vnSffXQ==, registry: https://registry.yarnpkg.com/} engines: {node: '>= 10.13.0'} peerDependencies: '@swc/core': '*' @@ -14605,11 +14326,10 @@ packages: schema-utils: 3.1.1 serialize-javascript: 6.0.1 terser: 5.16.3 - webpack: 5.75.0 - dev: false + webpack: 5.78.0 /terser/5.16.3: - resolution: {integrity: sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==} + resolution: {integrity: sha512-v8wWLaS/xt3nE9dgKEWhNUFP6q4kngO5B8eYFUuebsu7Dw/UNAnpUod6UHo04jSSkv8TzKHjZDSd7EXdDQAl8Q==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} hasBin: true dependencies: @@ -14617,7 +14337,6 @@ packages: acorn: 8.8.2 commander: 2.20.3 source-map-support: 0.5.21 - dev: false /test-exclude/6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} @@ -14711,7 +14430,7 @@ packages: dev: false /tr46/2.1.0: - resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==} + resolution: {integrity: sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==, registry: https://registry.yarnpkg.com/} engines: {node: '>=8'} dependencies: punycode: 2.3.0 @@ -15066,7 +14785,7 @@ packages: dev: false /update-browserslist-db/1.0.10_browserslist@4.21.5: - resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==, registry: https://registry.yarnpkg.com/} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -15076,7 +14795,7 @@ packages: picocolors: 1.0.0 /uri-js/4.4.1: - resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==, registry: https://registry.yarnpkg.com/} dependencies: punycode: 2.3.0 @@ -15182,7 +14901,7 @@ packages: resolve: 1.22.1 rollup: 2.78.1 optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true /vite/3.2.3: @@ -15215,7 +14934,7 @@ packages: resolve: 1.22.1 rollup: 2.79.1 optionalDependencies: - fsevents: 2.3.2 + fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true /vscode-oniguruma/1.7.0: @@ -15234,7 +14953,7 @@ packages: dev: false /w3c-xmlserializer/2.0.0: - resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==} + resolution: {integrity: sha512-4tzD0mF8iSiMiNs30BiLO3EpfGLZUT2MSX/G+o7ZywDzliWQ3OPtTZ0PTC3B3ca1UAf4cJMHB+2Bf56EriJuRA==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: xml-name-validator: 3.0.0 @@ -15253,12 +14972,11 @@ packages: makeerror: 1.0.12 /watchpack/2.4.0: - resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} + resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10.13.0'} dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.10 - dev: false /wbuf/1.7.3: resolution: {integrity: sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==} @@ -15281,12 +14999,12 @@ packages: dev: false /webidl-conversions/5.0.0: - resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==} + resolution: {integrity: sha512-VlZwKPCkYKxQgeSbH5EyngOmRp7Ww7I9rQLERETtf5ofd9pGeswWiOtogpEO850jziPRarreGxn5QIiTqpb2wA==, registry: https://registry.yarnpkg.com/} engines: {node: '>=8'} dev: false /webidl-conversions/6.1.0: - resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} + resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10.4'} dev: false @@ -15295,7 +15013,7 @@ packages: engines: {node: '>=12'} dev: true - /webpack-dev-middleware/5.3.3_webpack@5.75.0: + /webpack-dev-middleware/5.3.3_webpack@5.78.0: resolution: {integrity: sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==} engines: {node: '>= 12.13.0'} peerDependencies: @@ -15306,10 +15024,10 @@ packages: mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.0.0 - webpack: 5.75.0 + webpack: 5.78.0 dev: false - /webpack-dev-server/4.11.1_webpack@5.75.0: + /webpack-dev-server/4.11.1_webpack@5.78.0: resolution: {integrity: sha512-lILVz9tAUy1zGFwieuaQtYiadImb5M3d+H+L1zDYalYoDl0cksAB1UNyuE5MMWJrG6zR1tXkCP2fitl7yoUJiw==} engines: {node: '>= 12.13.0'} hasBin: true @@ -15347,8 +15065,8 @@ packages: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack: 5.75.0 - webpack-dev-middleware: 5.3.3_webpack@5.75.0 + webpack: 5.78.0 + webpack-dev-middleware: 5.3.3_webpack@5.78.0 ws: 8.12.0 transitivePeerDependencies: - bufferutil @@ -15357,14 +15075,14 @@ packages: - utf-8-validate dev: false - /webpack-manifest-plugin/4.1.1_webpack@5.75.0: + /webpack-manifest-plugin/4.1.1_webpack@5.78.0: resolution: {integrity: sha512-YXUAwxtfKIJIKkhg03MKuiFAD72PlrqCiwdwO4VEXdRO5V0ORCNwaOwAZawPZalCbmH9kBDmXnNeQOw+BIEiow==} engines: {node: '>=12.22.0'} peerDependencies: webpack: ^4.44.2 || ^5.47.0 dependencies: tapable: 2.2.1 - webpack: 5.75.0 + webpack: 5.78.0 webpack-sources: 2.3.1 dev: false @@ -15384,12 +15102,11 @@ packages: dev: false /webpack-sources/3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10.13.0'} - dev: false - /webpack/5.75.0: - resolution: {integrity: sha512-piaIaoVJlqMsPtX/+3KTTO6jfvrSYgauFVdt8cr9LTHKmcq/AMd4mhzsiP7ZF/PGRNPGA8336jldh9l2Kt2ogQ==} + /webpack/5.78.0: + resolution: {integrity: sha512-gT5DP72KInmE/3azEaQrISjTvLYlSM0j1Ezhht/KLVkrqtv10JoP/RXhwmX/frrutOPuSq3o5Vq0ehR/4Vmd1g==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -15419,14 +15136,13 @@ packages: neo-async: 2.6.2 schema-utils: 3.1.1 tapable: 2.2.1 - terser-webpack-plugin: 5.3.6_webpack@5.75.0 + terser-webpack-plugin: 5.3.6_webpack@5.78.0 watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - dev: false /websocket-driver/0.7.4: resolution: {integrity: sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==} @@ -15443,7 +15159,7 @@ packages: dev: false /whatwg-encoding/1.0.5: - resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==, registry: https://registry.yarnpkg.com/} dependencies: iconv-lite: 0.4.24 dev: false @@ -15460,7 +15176,7 @@ packages: dev: false /whatwg-mimetype/2.3.0: - resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==, registry: https://registry.yarnpkg.com/} dev: false /whatwg-mimetype/3.0.0: @@ -15485,7 +15201,7 @@ packages: dev: false /whatwg-url/8.7.0: - resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==} + resolution: {integrity: sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==, registry: https://registry.yarnpkg.com/} engines: {node: '>=10'} dependencies: lodash: 4.17.21 @@ -15688,7 +15404,7 @@ packages: resolution: {integrity: sha512-vo2RQo7DILVRoH5LjGqw3nphavEjK4Qk+FenXeUsknKn14eCNedHOXWbmnvP4ipKhlE35pvJ4yl4YYf6YsJArA==} dev: false - /workbox-webpack-plugin/6.5.4_webpack@5.75.0: + /workbox-webpack-plugin/6.5.4_webpack@5.78.0: resolution: {integrity: sha512-LmWm/zoaahe0EGmMTrSLUi+BjyR3cdGEfU3fS6PN1zKFYbqAKuQ+Oy/27e4VSXsyIwAw8+QDfk1XHNGtZu9nQg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -15697,7 +15413,7 @@ packages: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.75.0 + webpack: 5.78.0 webpack-sources: 1.4.3 workbox-build: 6.5.4 transitivePeerDependencies: @@ -15775,7 +15491,7 @@ packages: optional: true /ws/7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==, registry: https://registry.yarnpkg.com/} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -15800,7 +15516,7 @@ packages: optional: true /xml-name-validator/3.0.0: - resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==, registry: https://registry.yarnpkg.com/} dev: false /xml-name-validator/4.0.0: @@ -15947,3 +15663,2683 @@ packages: /yocto-queue/0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + + registry.npmjs.org/@babel/code-frame/7.18.6: + resolution: {integrity: sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz} + name: '@babel/code-frame' + version: 7.18.6 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/highlight': registry.npmjs.org/@babel/highlight/7.18.6 + dev: true + + registry.npmjs.org/@babel/helper-validator-identifier/7.19.1: + resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz} + name: '@babel/helper-validator-identifier' + version: 7.19.1 + engines: {node: '>=6.9.0'} + dev: true + + registry.npmjs.org/@babel/highlight/7.18.6: + resolution: {integrity: sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz} + name: '@babel/highlight' + version: 7.18.6 + engines: {node: '>=6.9.0'} + dependencies: + '@babel/helper-validator-identifier': registry.npmjs.org/@babel/helper-validator-identifier/7.19.1 + chalk: registry.npmjs.org/chalk/2.4.2 + js-tokens: registry.npmjs.org/js-tokens/4.0.0 + dev: true + + registry.npmjs.org/@babel/runtime/7.20.13: + resolution: {integrity: sha512-gt3PKXs0DBoL9xCvOIIZ2NEqAGZqHjAnmVbfQtB620V0uReIQutpel14KcneZuer7UioY8ALKZ7iocavvzTNFA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@babel/runtime/-/runtime-7.20.13.tgz} + name: '@babel/runtime' + version: 7.20.13 + engines: {node: '>=6.9.0'} + dependencies: + regenerator-runtime: registry.npmjs.org/regenerator-runtime/0.13.11 + + registry.npmjs.org/@esbuild/android-arm/0.15.18: + resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz} + name: '@esbuild/android-arm' + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@esbuild/linux-loong64/0.15.18: + resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz} + name: '@esbuild/linux-loong64' + version: 0.15.18 + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/@ethersproject/abi/5.7.0: + resolution: {integrity: sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/abi/-/abi-5.7.0.tgz} + name: '@ethersproject/abi' + version: 5.7.0 + dependencies: + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/hash': registry.npmjs.org/@ethersproject/hash/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/abstract-provider/5.7.0: + resolution: {integrity: sha512-R41c9UkchKCpAqStMYUpdunjo3pkEvZC3FAwZn5S5MGbXoMQOHIdHItezTETxAO5bevtMApSyEhn9+CHcDsWBw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/abstract-provider/-/abstract-provider-5.7.0.tgz} + name: '@ethersproject/abstract-provider' + version: 5.7.0 + dependencies: + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/networks': registry.npmjs.org/@ethersproject/networks/5.7.1 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + '@ethersproject/web': registry.npmjs.org/@ethersproject/web/5.7.1 + dev: false + + registry.npmjs.org/@ethersproject/abstract-signer/5.7.0: + resolution: {integrity: sha512-a16V8bq1/Cz+TGCkE2OPMTOUDLS3grCpdjoJCYNnVBbdYEMSgKrU0+B90s8b6H+ByYTBZN7a3g76jdIJi7UfKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/abstract-signer/-/abstract-signer-5.7.0.tgz} + name: '@ethersproject/abstract-signer' + version: 5.7.0 + dependencies: + '@ethersproject/abstract-provider': registry.npmjs.org/@ethersproject/abstract-provider/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/address/5.7.0: + resolution: {integrity: sha512-9wYhYt7aghVGo758POM5nqcOMaE168Q6aRLJZwUmiqSrAungkG74gSSeKEIR7ukixesdRZGPgVqme6vmxs1fkA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/address/-/address-5.7.0.tgz} + name: '@ethersproject/address' + version: 5.7.0 + dependencies: + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/rlp': registry.npmjs.org/@ethersproject/rlp/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/base64/5.7.0: + resolution: {integrity: sha512-Dr8tcHt2mEbsZr/mwTPIQAf3Ai0Bks/7gTw9dSqk1mQvhW3XvRlmDJr/4n+wg1JmCl16NZue17CDh8xb/vZ0sQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/base64/-/base64-5.7.0.tgz} + name: '@ethersproject/base64' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/basex/5.7.0: + resolution: {integrity: sha512-ywlh43GwZLv2Voc2gQVTKBoVQ1mti3d8HK5aMxsfu/nRDnMmNqaSJ3r3n85HBByT8OpoY96SXM1FogC533T4zw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/basex/-/basex-5.7.0.tgz} + name: '@ethersproject/basex' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/bignumber/5.7.0: + resolution: {integrity: sha512-n1CAdIHRWjSucQO3MC1zPSVgV/6dy/fjL9pMrPP9peL+QxEg9wOsVqwD4+818B6LUEtaXzVHQiuivzRoxPxUGw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/bignumber/-/bignumber-5.7.0.tgz} + name: '@ethersproject/bignumber' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + bn.js: registry.npmjs.org/bn.js/5.2.1 + dev: false + + registry.npmjs.org/@ethersproject/bytes/5.7.0: + resolution: {integrity: sha512-nsbxwgFXWh9NyYWo+U8atvmMsSdKJprTcICAkvbBffT75qDocbuggBU0SJiVK2MuTrp0q+xvLkTnGMPK1+uA9A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/bytes/-/bytes-5.7.0.tgz} + name: '@ethersproject/bytes' + version: 5.7.0 + dependencies: + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/constants/5.7.0: + resolution: {integrity: sha512-DHI+y5dBNvkpYUMiRQyxRBYBefZkJfo70VUkUAsRjcPs47muV9evftfZ0PJVCXYbAiCgght0DtcF9srFQmIgWA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/constants/-/constants-5.7.0.tgz} + name: '@ethersproject/constants' + version: 5.7.0 + dependencies: + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/contracts/5.7.0: + resolution: {integrity: sha512-5GJbzEU3X+d33CdfPhcyS+z8MzsTrBGk/sc+G+59+tPa9yFkl6HQ9D6L0QMgNTA9q8dT0XKxxkyp883XsQvbbg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/contracts/-/contracts-5.7.0.tgz} + name: '@ethersproject/contracts' + version: 5.7.0 + dependencies: + '@ethersproject/abi': registry.npmjs.org/@ethersproject/abi/5.7.0 + '@ethersproject/abstract-provider': registry.npmjs.org/@ethersproject/abstract-provider/5.7.0 + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/hash/5.7.0: + resolution: {integrity: sha512-qX5WrQfnah1EFnO5zJv1v46a8HW0+E5xuBBDTwMFZLuVTx0tbU2kkx15NqdjxecrLGatQN9FGQKpb1FKdHCt+g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/hash/-/hash-5.7.0.tgz} + name: '@ethersproject/hash' + version: 5.7.0 + dependencies: + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/base64': registry.npmjs.org/@ethersproject/base64/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/hdnode/5.7.0: + resolution: {integrity: sha512-OmyYo9EENBPPf4ERhR7oj6uAtUAhYGqOnIS+jE5pTXvdKBS99ikzq1E7Iv0ZQZ5V36Lqx1qZLeak0Ra16qpeOg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/hdnode/-/hdnode-5.7.0.tgz} + name: '@ethersproject/hdnode' + version: 5.7.0 + dependencies: + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/basex': registry.npmjs.org/@ethersproject/basex/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/pbkdf2': registry.npmjs.org/@ethersproject/pbkdf2/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/sha2': registry.npmjs.org/@ethersproject/sha2/5.7.0 + '@ethersproject/signing-key': registry.npmjs.org/@ethersproject/signing-key/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + '@ethersproject/wordlists': registry.npmjs.org/@ethersproject/wordlists/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/json-wallets/5.7.0: + resolution: {integrity: sha512-8oee5Xgu6+RKgJTkvEMl2wDgSPSAQ9MB/3JYjFV9jlKvcYHUXZC+cQp0njgmxdHkYWn8s6/IqIZYm0YWCjO/0g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/json-wallets/-/json-wallets-5.7.0.tgz} + name: '@ethersproject/json-wallets' + version: 5.7.0 + dependencies: + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/hdnode': registry.npmjs.org/@ethersproject/hdnode/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/pbkdf2': registry.npmjs.org/@ethersproject/pbkdf2/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/random': registry.npmjs.org/@ethersproject/random/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + aes-js: registry.npmjs.org/aes-js/3.0.0 + scrypt-js: registry.npmjs.org/scrypt-js/3.0.1 + dev: false + + registry.npmjs.org/@ethersproject/keccak256/5.7.0: + resolution: {integrity: sha512-2UcPboeL/iW+pSg6vZ6ydF8tCnv3Iu/8tUmLLzWWGzxWKFFqOBQFLo6uLUv6BDrLgCDfN28RJ/wtByx+jZ4KBg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/keccak256/-/keccak256-5.7.0.tgz} + name: '@ethersproject/keccak256' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + js-sha3: registry.npmjs.org/js-sha3/0.8.0 + dev: false + + registry.npmjs.org/@ethersproject/logger/5.7.0: + resolution: {integrity: sha512-0odtFdXu/XHtjQXJYA3u9G0G8btm0ND5Cu8M7i5vhEcE8/HmF4Lbdqanwyv4uQTr2tx6b7fQRmgLrsnpQlmnig==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/logger/-/logger-5.7.0.tgz} + name: '@ethersproject/logger' + version: 5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/networks/5.7.1: + resolution: {integrity: sha512-n/MufjFYv3yFcUyfhnXotyDlNdFb7onmkSy8aQERi2PjNcnWQ66xXxa3XlS8nCcA8aJKJjIIMNJTC7tu80GwpQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/networks/-/networks-5.7.1.tgz} + name: '@ethersproject/networks' + version: 5.7.1 + dependencies: + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/pbkdf2/5.7.0: + resolution: {integrity: sha512-oR/dBRZR6GTyaofd86DehG72hY6NpAjhabkhxgr3X2FpJtJuodEl2auADWBZfhDHgVCbu3/H/Ocq2uC6dpNjjw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/pbkdf2/-/pbkdf2-5.7.0.tgz} + name: '@ethersproject/pbkdf2' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/sha2': registry.npmjs.org/@ethersproject/sha2/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/properties/5.7.0: + resolution: {integrity: sha512-J87jy8suntrAkIZtecpxEPxY//szqr1mlBaYlQ0r4RCaiD2hjheqF9s1LVE8vVuJCXisjIP+JgtK/Do54ej4Sw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/properties/-/properties-5.7.0.tgz} + name: '@ethersproject/properties' + version: 5.7.0 + dependencies: + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/providers/5.7.2: + resolution: {integrity: sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/providers/-/providers-5.7.2.tgz} + name: '@ethersproject/providers' + version: 5.7.2 + dependencies: + '@ethersproject/abstract-provider': registry.npmjs.org/@ethersproject/abstract-provider/5.7.0 + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/base64': registry.npmjs.org/@ethersproject/base64/5.7.0 + '@ethersproject/basex': registry.npmjs.org/@ethersproject/basex/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/hash': registry.npmjs.org/@ethersproject/hash/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/networks': registry.npmjs.org/@ethersproject/networks/5.7.1 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/random': registry.npmjs.org/@ethersproject/random/5.7.0 + '@ethersproject/rlp': registry.npmjs.org/@ethersproject/rlp/5.7.0 + '@ethersproject/sha2': registry.npmjs.org/@ethersproject/sha2/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + '@ethersproject/web': registry.npmjs.org/@ethersproject/web/5.7.1 + bech32: registry.npmjs.org/bech32/1.1.4 + ws: registry.npmjs.org/ws/7.4.6 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + registry.npmjs.org/@ethersproject/random/5.7.0: + resolution: {integrity: sha512-19WjScqRA8IIeWclFme75VMXSBvi4e6InrUNuaR4s5pTF2qNhcGdCUwdxUVGtDDqC00sDLCO93jPQoDUH4HVmQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/random/-/random-5.7.0.tgz} + name: '@ethersproject/random' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/rlp/5.7.0: + resolution: {integrity: sha512-rBxzX2vK8mVF7b0Tol44t5Tb8gomOHkj5guL+HhzQ1yBh/ydjGnpw6at+X6Iw0Kp3OzzzkcKp8N9r0W4kYSs9w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/rlp/-/rlp-5.7.0.tgz} + name: '@ethersproject/rlp' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/sha2/5.7.0: + resolution: {integrity: sha512-gKlH42riwb3KYp0reLsFTokByAKoJdgFCwI+CCiX/k+Jm2mbNs6oOaCjYQSlI1+XBVejwH2KrmCbMAT/GnRDQw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/sha2/-/sha2-5.7.0.tgz} + name: '@ethersproject/sha2' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + hash.js: registry.npmjs.org/hash.js/1.1.7 + dev: false + + registry.npmjs.org/@ethersproject/signing-key/5.7.0: + resolution: {integrity: sha512-MZdy2nL3wO0u7gkB4nA/pEf8lu1TlFswPNmy8AiYkfKTdO6eXBJyUdmHO/ehm/htHw9K/qF8ujnTyUAD+Ry54Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/signing-key/-/signing-key-5.7.0.tgz} + name: '@ethersproject/signing-key' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + bn.js: registry.npmjs.org/bn.js/5.2.1 + elliptic: registry.npmjs.org/elliptic/6.5.4 + hash.js: registry.npmjs.org/hash.js/1.1.7 + dev: false + + registry.npmjs.org/@ethersproject/solidity/5.7.0: + resolution: {integrity: sha512-HmabMd2Dt/raavyaGukF4XxizWKhKQ24DoLtdNbBmNKUOPqwjsKQSdV9GQtj9CBEea9DlzETlVER1gYeXXBGaA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/solidity/-/solidity-5.7.0.tgz} + name: '@ethersproject/solidity' + version: 5.7.0 + dependencies: + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/sha2': registry.npmjs.org/@ethersproject/sha2/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/strings/5.7.0: + resolution: {integrity: sha512-/9nu+lj0YswRNSH0NXYqrh8775XNyEdUQAuf3f+SmOrnVewcJ5SBNAjF7lpgehKi4abvNNXyf+HX86czCdJ8Mg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/strings/-/strings-5.7.0.tgz} + name: '@ethersproject/strings' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/transactions/5.7.0: + resolution: {integrity: sha512-kmcNicCp1lp8qanMTC3RIikGgoJ80ztTyvtsFvCYpSCfkjhD0jZ2LOrnbcuxuToLIUYYf+4XwD1rP+B/erDIhQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/transactions/-/transactions-5.7.0.tgz} + name: '@ethersproject/transactions' + version: 5.7.0 + dependencies: + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/rlp': registry.npmjs.org/@ethersproject/rlp/5.7.0 + '@ethersproject/signing-key': registry.npmjs.org/@ethersproject/signing-key/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/units/5.7.0: + resolution: {integrity: sha512-pD3xLMy3SJu9kG5xDGI7+xhTEmGXlEqXU4OfNapmfnxLVY4EMSSRp7j1k7eezutBPH7RBN/7QPnwR7hzNlEFeg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/units/-/units-5.7.0.tgz} + name: '@ethersproject/units' + version: 5.7.0 + dependencies: + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/wallet/5.7.0: + resolution: {integrity: sha512-MhmXlJXEJFBFVKrDLB4ZdDzxcBxQ3rLyCkhNqVu3CDYvR97E+8r01UgrI+TI99Le+aYm/in/0vp86guJuM7FCA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/wallet/-/wallet-5.7.0.tgz} + name: '@ethersproject/wallet' + version: 5.7.0 + dependencies: + '@ethersproject/abstract-provider': registry.npmjs.org/@ethersproject/abstract-provider/5.7.0 + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/hash': registry.npmjs.org/@ethersproject/hash/5.7.0 + '@ethersproject/hdnode': registry.npmjs.org/@ethersproject/hdnode/5.7.0 + '@ethersproject/json-wallets': registry.npmjs.org/@ethersproject/json-wallets/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/random': registry.npmjs.org/@ethersproject/random/5.7.0 + '@ethersproject/signing-key': registry.npmjs.org/@ethersproject/signing-key/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + '@ethersproject/wordlists': registry.npmjs.org/@ethersproject/wordlists/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/web/5.7.1: + resolution: {integrity: sha512-Gueu8lSvyjBWL4cYsWsjh6MtMwM0+H4HvqFPZfB6dV8ctbP9zFAO73VG1cMWae0FLPCtz0peKPpZY8/ugJJX2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/web/-/web-5.7.1.tgz} + name: '@ethersproject/web' + version: 5.7.1 + dependencies: + '@ethersproject/base64': registry.npmjs.org/@ethersproject/base64/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + dev: false + + registry.npmjs.org/@ethersproject/wordlists/5.7.0: + resolution: {integrity: sha512-S2TFNJNfHWVHNE6cNDjbVlZ6MgE17MIxMbMg2zv3wn+3XSJGosL1m9ZVv3GXCf/2ymSsQ+hRI5IzoMJTG6aoVA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@ethersproject/wordlists/-/wordlists-5.7.0.tgz} + name: '@ethersproject/wordlists' + version: 5.7.0 + dependencies: + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/hash': registry.npmjs.org/@ethersproject/hash/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + dev: false + + registry.npmjs.org/@jest/environment/29.4.2: + resolution: {integrity: sha512-JKs3VUtse0vQfCaFGJRX1bir9yBdtasxziSyu+pIiEllAQOe4oQhdCYIf3+Lx+nGglFktSKToBnRJfD5QKp+NQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jest/environment/-/environment-29.4.2.tgz} + name: '@jest/environment' + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/fake-timers': registry.npmjs.org/@jest/fake-timers/29.4.2 + '@jest/types': registry.npmjs.org/@jest/types/29.4.2 + '@types/node': registry.npmjs.org/@types/node/18.13.0 + jest-mock: registry.npmjs.org/jest-mock/29.4.2 + dev: true + + registry.npmjs.org/@jest/fake-timers/29.4.2: + resolution: {integrity: sha512-Ny1u0Wg6kCsHFWq7A/rW/tMhIedq2siiyHyLpHCmIhP7WmcAmd2cx95P+0xtTZlj5ZbJxIRQi4OPydZZUoiSQQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.4.2.tgz} + name: '@jest/fake-timers' + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': registry.npmjs.org/@jest/types/29.4.2 + '@sinonjs/fake-timers': registry.npmjs.org/@sinonjs/fake-timers/10.0.2 + '@types/node': registry.npmjs.org/@types/node/18.13.0 + jest-message-util: registry.npmjs.org/jest-message-util/29.4.2 + jest-mock: registry.npmjs.org/jest-mock/29.4.2 + jest-util: registry.npmjs.org/jest-util/29.4.2 + dev: true + + registry.npmjs.org/@jest/schemas/29.4.2: + resolution: {integrity: sha512-ZrGzGfh31NtdVH8tn0mgJw4khQuNHiKqdzJAFbCaERbyCP9tHlxWuL/mnMu8P7e/+k4puWjI1NOzi/sFsjce/g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jest/schemas/-/schemas-29.4.2.tgz} + name: '@jest/schemas' + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@sinclair/typebox': registry.npmjs.org/@sinclair/typebox/0.25.21 + dev: true + + registry.npmjs.org/@jest/types/29.4.2: + resolution: {integrity: sha512-CKlngyGP0fwlgC1BRUtPZSiWLBhyS9dKwKmyGxk8Z6M82LBEGB2aLQSg+U1MyLsU+M7UjnlLllBM2BLWKVm/Uw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@jest/types/-/types-29.4.2.tgz} + name: '@jest/types' + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': registry.npmjs.org/@jest/schemas/29.4.2 + '@types/istanbul-lib-coverage': registry.npmjs.org/@types/istanbul-lib-coverage/2.0.4 + '@types/istanbul-reports': registry.npmjs.org/@types/istanbul-reports/3.0.1 + '@types/node': registry.npmjs.org/@types/node/18.13.0 + '@types/yargs': registry.npmjs.org/@types/yargs/17.0.22 + chalk: registry.npmjs.org/chalk/4.1.2 + dev: true + + registry.npmjs.org/@next/swc-android-arm-eabi/13.0.5: + resolution: {integrity: sha512-YO691dxHlviy6H0eghgwqn+5kU9J3iQnKERHTDSppqjjGDBl6ab4wz9XfI5AhljjkaTg3TknHoIEWFDoZ4Ve8g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-android-arm-eabi/-/swc-android-arm-eabi-13.0.5.tgz} + name: '@next/swc-android-arm-eabi' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm] + os: [android] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-android-arm64/13.0.5: + resolution: {integrity: sha512-ugbwffkUmp8cd2afehDC8LtQeFUxElRUBBngfB5UYSWBx18HW4OgzkPFIY8jUBH16zifvGZWXbICXJWDHrOLtw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-android-arm64/-/swc-android-arm64-13.0.5.tgz} + name: '@next/swc-android-arm64' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-darwin-arm64/13.0.5: + resolution: {integrity: sha512-mshlh8QOtOalfZbc17uNAftWgqHTKnrv6QUwBe+mpGz04eqsSUzVz1JGZEdIkmuDxOz00cK2NPoc+VHDXh99IQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-13.0.5.tgz} + name: '@next/swc-darwin-arm64' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-darwin-x64/13.0.5: + resolution: {integrity: sha512-SfigOKW4Z2UB3ruUPyvrlDIkcJq1hiw1wvYApWugD+tQsAkYZKEoz+/8emCmeYZ6Gwgi1WHV+z52Oj8u7bEHPg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-13.0.5.tgz} + name: '@next/swc-darwin-x64' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-freebsd-x64/13.0.5: + resolution: {integrity: sha512-0NJg8HZr4yG8ynmMGFXQf+Mahvq4ZgBmUwSlLXXymgxEQgH17erH/LoR69uITtW+KTsALgk9axEt5AAabM4ucg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-freebsd-x64/-/swc-freebsd-x64-13.0.5.tgz} + name: '@next/swc-freebsd-x64' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-linux-arm-gnueabihf/13.0.5: + resolution: {integrity: sha512-Cye+h3oDT3NDWjACMlRaolL8fokpKie34FlPj9nfoW7bYKmoMBY1d4IO/GgBF+5xEl7HkH0Ny/qex63vQ0pN+A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-linux-arm-gnueabihf/-/swc-linux-arm-gnueabihf-13.0.5.tgz} + name: '@next/swc-linux-arm-gnueabihf' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-linux-arm64-gnu/13.0.5: + resolution: {integrity: sha512-5BfDS/VoRDR5QUGG9oedOCEZGmV2zxUVFYLUJVPMSMeIgqkjxWQBiG2BUHZI6/LGk9yvHmjx7BTvtBCLtRg6IQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-13.0.5.tgz} + name: '@next/swc-linux-arm64-gnu' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-linux-arm64-musl/13.0.5: + resolution: {integrity: sha512-xenvqlXz+KxVKAB1YR723gnVNszpsCvKZkiFFaAYqDGJ502YuqU2fwLsaSm/ASRizNcBYeo9HPLTyc3r/9cdMQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-13.0.5.tgz} + name: '@next/swc-linux-arm64-musl' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-linux-x64-gnu/13.0.5: + resolution: {integrity: sha512-9Ahi1bbdXwhrWQmOyoTod23/hhK05da/FzodiNqd6drrMl1y7+RujoEcU8Dtw3H1mGWB+yuTlWo8B4Iba8hqiQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-13.0.5.tgz} + name: '@next/swc-linux-x64-gnu' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-linux-x64-musl/13.0.5: + resolution: {integrity: sha512-V+1mnh49qmS9fOZxVRbzjhBEz9IUGJ7AQ80JPWAYQM5LI4TxfdiF4APLPvJ52rOmNeTqnVz1bbKtVOso+7EZ4w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-13.0.5.tgz} + name: '@next/swc-linux-x64-musl' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-win32-arm64-msvc/13.0.5: + resolution: {integrity: sha512-wRE9rkp7I+/3Jf2T9PFIJOKq3adMWYEFkPOA7XAkUfYbQHlDJm/U5cVCWUsKByyQq5RThwufI91sgd19MfxRxg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-13.0.5.tgz} + name: '@next/swc-win32-arm64-msvc' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-win32-ia32-msvc/13.0.5: + resolution: {integrity: sha512-Q1XQSLEhFuFhkKFdJIGt7cYQ4T3u6P5wrtUNreg5M+7P+fjSiC8+X+Vjcw+oebaacsdl0pWZlK+oACGafush1w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-13.0.5.tgz} + name: '@next/swc-win32-ia32-msvc' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@next/swc-win32-x64-msvc/13.0.5: + resolution: {integrity: sha512-t5gRblrwwiNZP6cT7NkxlgxrFgHWtv9ei5vUraCLgBqzvIsa7X+PnarZUeQCXqz6Jg9JSGGT9j8lvzD97UqeJQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-13.0.5.tgz} + name: '@next/swc-win32-x64-msvc' + version: 13.0.5 + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: false + optional: true + + registry.npmjs.org/@sinclair/typebox/0.25.21: + resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.25.21.tgz} + name: '@sinclair/typebox' + version: 0.25.21 + dev: true + + registry.npmjs.org/@sinonjs/commons/2.0.0: + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@sinonjs/commons/-/commons-2.0.0.tgz} + name: '@sinonjs/commons' + version: 2.0.0 + dependencies: + type-detect: registry.npmjs.org/type-detect/4.0.8 + dev: true + + registry.npmjs.org/@sinonjs/fake-timers/10.0.2: + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz} + name: '@sinonjs/fake-timers' + version: 10.0.2 + dependencies: + '@sinonjs/commons': registry.npmjs.org/@sinonjs/commons/2.0.0 + dev: true + + registry.npmjs.org/@testing-library/dom/8.20.0: + resolution: {integrity: sha512-d9ULIT+a4EXLX3UU8FBjauG9NnsZHkHztXoIcTsOKoOw030fyjheN9svkTULjJxtYag9DZz5Jz5qkWZDPxTFwA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@testing-library/dom/-/dom-8.20.0.tgz} + name: '@testing-library/dom' + version: 8.20.0 + engines: {node: '>=12'} + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.20.13 + '@types/aria-query': registry.npmjs.org/@types/aria-query/5.0.1 + aria-query: registry.npmjs.org/aria-query/5.1.3 + chalk: registry.npmjs.org/chalk/4.1.2 + dom-accessibility-api: registry.npmjs.org/dom-accessibility-api/0.5.16 + lz-string: registry.npmjs.org/lz-string/1.4.4 + pretty-format: registry.npmjs.org/pretty-format/27.5.1 + dev: true + + registry.npmjs.org/@tootallnate/once/2.0.0: + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz} + name: '@tootallnate/once' + version: 2.0.0 + engines: {node: '>= 10'} + dev: true + + registry.npmjs.org/@tronweb3/google-protobuf/3.21.2: + resolution: {integrity: sha512-IVcT2GfWX3K6tHUVhs14NP5uzKhQt4KeDya1g9ACxuZsUzsaoGUIGzceK2Ltu7xp1YV94AaHOf4yxLAivlvEkQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@tronweb3/google-protobuf/-/google-protobuf-3.21.2.tgz} + name: '@tronweb3/google-protobuf' + version: 3.21.2 + dev: false + + registry.npmjs.org/@types/aria-query/5.0.1: + resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.1.tgz} + name: '@types/aria-query' + version: 5.0.1 + dev: true + + registry.npmjs.org/@types/istanbul-lib-coverage/2.0.4: + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz} + name: '@types/istanbul-lib-coverage' + version: 2.0.4 + dev: true + + registry.npmjs.org/@types/istanbul-lib-report/3.0.0: + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz} + name: '@types/istanbul-lib-report' + version: 3.0.0 + dependencies: + '@types/istanbul-lib-coverage': registry.npmjs.org/@types/istanbul-lib-coverage/2.0.4 + dev: true + + registry.npmjs.org/@types/istanbul-reports/3.0.1: + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.1.tgz} + name: '@types/istanbul-reports' + version: 3.0.1 + dependencies: + '@types/istanbul-lib-report': registry.npmjs.org/@types/istanbul-lib-report/3.0.0 + dev: true + + registry.npmjs.org/@types/jsdom/20.0.1: + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/jsdom/-/jsdom-20.0.1.tgz} + name: '@types/jsdom' + version: 20.0.1 + dependencies: + '@types/node': registry.npmjs.org/@types/node/18.13.0 + '@types/tough-cookie': registry.npmjs.org/@types/tough-cookie/4.0.2 + parse5: registry.npmjs.org/parse5/7.1.2 + dev: true + + registry.npmjs.org/@types/node/18.13.0: + resolution: {integrity: sha512-gC3TazRzGoOnoKAhUx+Q0t8S9Tzs74z7m0ipwGpSqQrleP14hKxP4/JUeEQcD3W1/aIpnWl8pHowI7WokuZpXg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/node/-/node-18.13.0.tgz} + name: '@types/node' + version: 18.13.0 + dev: true + + registry.npmjs.org/@types/stack-utils/2.0.1: + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.1.tgz} + name: '@types/stack-utils' + version: 2.0.1 + dev: true + + registry.npmjs.org/@types/tough-cookie/4.0.2: + resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.2.tgz} + name: '@types/tough-cookie' + version: 4.0.2 + dev: true + + registry.npmjs.org/@types/yargs-parser/21.0.0: + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.0.tgz} + name: '@types/yargs-parser' + version: 21.0.0 + dev: true + + registry.npmjs.org/@types/yargs/17.0.22: + resolution: {integrity: sha512-pet5WJ9U8yPVRhkwuEIp5ktAeAqRZOq4UdAyWLWzxbtpyXnzbtLdKiXAjJzi/KLmPGS9wk86lUFWZFN6sISo4g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz} + name: '@types/yargs' + version: 17.0.22 + dependencies: + '@types/yargs-parser': registry.npmjs.org/@types/yargs-parser/21.0.0 + dev: true + + registry.npmjs.org/abab/2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/abab/-/abab-2.0.6.tgz} + name: abab + version: 2.0.6 + dev: true + + registry.npmjs.org/acorn-globals/7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz} + name: acorn-globals + version: 7.0.1 + dependencies: + acorn: registry.npmjs.org/acorn/8.8.2 + acorn-walk: registry.npmjs.org/acorn-walk/8.2.0 + dev: true + + registry.npmjs.org/acorn-walk/8.2.0: + resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz} + name: acorn-walk + version: 8.2.0 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmjs.org/acorn/8.8.2: + resolution: {integrity: sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz} + name: acorn + version: 8.8.2 + engines: {node: '>=0.4.0'} + hasBin: true + dev: true + + registry.npmjs.org/aes-js/3.0.0: + resolution: {integrity: sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/aes-js/-/aes-js-3.0.0.tgz} + name: aes-js + version: 3.0.0 + dev: false + + registry.npmjs.org/agent-base/6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz} + name: agent-base + version: 6.0.2 + engines: {node: '>= 6.0.0'} + dependencies: + debug: registry.npmjs.org/debug/4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/ansi-regex/5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz} + name: ansi-regex + version: 5.0.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/ansi-styles/3.2.1: + resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz} + name: ansi-styles + version: 3.2.1 + engines: {node: '>=4'} + dependencies: + color-convert: registry.npmjs.org/color-convert/1.9.3 + dev: true + + registry.npmjs.org/ansi-styles/4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz} + name: ansi-styles + version: 4.3.0 + engines: {node: '>=8'} + dependencies: + color-convert: registry.npmjs.org/color-convert/2.0.1 + dev: true + + registry.npmjs.org/ansi-styles/5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz} + name: ansi-styles + version: 5.2.0 + engines: {node: '>=10'} + dev: true + + registry.npmjs.org/aria-query/5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/aria-query/-/aria-query-5.1.3.tgz} + name: aria-query + version: 5.1.3 + dependencies: + deep-equal: registry.npmjs.org/deep-equal/2.2.0 + dev: true + + registry.npmjs.org/asynckit/0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz} + name: asynckit + version: 0.4.0 + dev: true + + registry.npmjs.org/available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz} + name: available-typed-arrays + version: 1.0.5 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/axios/0.26.1: + resolution: {integrity: sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/axios/-/axios-0.26.1.tgz} + name: axios + version: 0.26.1 + dependencies: + follow-redirects: registry.npmjs.org/follow-redirects/1.15.2 + transitivePeerDependencies: + - debug + dev: false + + registry.npmjs.org/balanced-match/1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz} + name: balanced-match + version: 1.0.2 + dev: true + + registry.npmjs.org/bech32/1.1.4: + resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz} + name: bech32 + version: 1.1.4 + dev: false + + registry.npmjs.org/bignumber.js/9.1.1: + resolution: {integrity: sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz} + name: bignumber.js + version: 9.1.1 + dev: false + + registry.npmjs.org/bn.js/4.12.0: + resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz} + name: bn.js + version: 4.12.0 + dev: false + + registry.npmjs.org/bn.js/5.2.1: + resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz} + name: bn.js + version: 5.2.1 + dev: false + + registry.npmjs.org/brace-expansion/1.1.11: + resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz} + name: brace-expansion + version: 1.1.11 + dependencies: + balanced-match: registry.npmjs.org/balanced-match/1.0.2 + concat-map: registry.npmjs.org/concat-map/0.0.1 + dev: true + + registry.npmjs.org/braces/3.0.2: + resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/braces/-/braces-3.0.2.tgz} + name: braces + version: 3.0.2 + engines: {node: '>=8'} + dependencies: + fill-range: registry.npmjs.org/fill-range/7.0.1 + dev: true + + registry.npmjs.org/brorand/1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz} + name: brorand + version: 1.1.0 + dev: false + + registry.npmjs.org/call-bind/1.0.2: + resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz} + name: call-bind + version: 1.0.2 + dependencies: + function-bind: registry.npmjs.org/function-bind/1.1.1 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + dev: true + + registry.npmjs.org/chalk/2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} + name: chalk + version: 2.4.2 + engines: {node: '>=4'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles/3.2.1 + escape-string-regexp: registry.npmjs.org/escape-string-regexp/1.0.5 + supports-color: registry.npmjs.org/supports-color/5.5.0 + dev: true + + registry.npmjs.org/chalk/4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz} + name: chalk + version: 4.1.2 + engines: {node: '>=10'} + dependencies: + ansi-styles: registry.npmjs.org/ansi-styles/4.3.0 + supports-color: registry.npmjs.org/supports-color/7.2.0 + dev: true + + registry.npmjs.org/ci-info/3.7.1: + resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz} + name: ci-info + version: 3.7.1 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/color-convert/1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz} + name: color-convert + version: 1.9.3 + dependencies: + color-name: registry.npmjs.org/color-name/1.1.3 + dev: true + + registry.npmjs.org/color-convert/2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz} + name: color-convert + version: 2.0.1 + engines: {node: '>=7.0.0'} + dependencies: + color-name: registry.npmjs.org/color-name/1.1.4 + dev: true + + registry.npmjs.org/color-name/1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz} + name: color-name + version: 1.1.3 + dev: true + + registry.npmjs.org/color-name/1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz} + name: color-name + version: 1.1.4 + dev: true + + registry.npmjs.org/combined-stream/1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz} + name: combined-stream + version: 1.0.8 + engines: {node: '>= 0.8'} + dependencies: + delayed-stream: registry.npmjs.org/delayed-stream/1.0.0 + dev: true + + registry.npmjs.org/concat-map/0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz} + name: concat-map + version: 0.0.1 + dev: true + + registry.npmjs.org/copy-text-to-clipboard/3.0.1: + resolution: {integrity: sha512-rvVsHrpFcL4F2P8ihsoLdFHmd404+CMg71S756oRSeQgqk51U3kicGdnvfkrxva0xXH92SjGS62B0XIJsbh+9Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/copy-text-to-clipboard/-/copy-text-to-clipboard-3.0.1.tgz} + name: copy-text-to-clipboard + version: 3.0.1 + engines: {node: '>=12'} + dev: false + + registry.npmjs.org/core-js/3.27.2: + resolution: {integrity: sha512-9ashVQskuh5AZEZ1JdQWp1GqSoC1e1G87MzRqg2gIfVAQ7Qn9K+uFj8EcniUFA4P2NLZfV+TOlX1SzoKfo+s7w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/core-js/-/core-js-3.27.2.tgz} + name: core-js + version: 3.27.2 + requiresBuild: true + dev: false + + registry.npmjs.org/cssom/0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz} + name: cssom + version: 0.3.8 + dev: true + + registry.npmjs.org/cssom/0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz} + name: cssom + version: 0.5.0 + dev: true + + registry.npmjs.org/cssstyle/2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz} + name: cssstyle + version: 2.3.0 + engines: {node: '>=8'} + dependencies: + cssom: registry.npmjs.org/cssom/0.3.8 + dev: true + + registry.npmjs.org/data-urls/3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz} + name: data-urls + version: 3.0.2 + engines: {node: '>=12'} + dependencies: + abab: registry.npmjs.org/abab/2.0.6 + whatwg-mimetype: registry.npmjs.org/whatwg-mimetype/3.0.0 + whatwg-url: registry.npmjs.org/whatwg-url/11.0.0 + dev: true + + registry.npmjs.org/debug/4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/debug/-/debug-4.3.4.tgz} + name: debug + version: 4.3.4 + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: registry.npmjs.org/ms/2.1.2 + dev: true + + registry.npmjs.org/decimal.js/10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz} + name: decimal.js + version: 10.4.3 + dev: true + + registry.npmjs.org/deep-equal/2.2.0: + resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/deep-equal/-/deep-equal-2.2.0.tgz} + name: deep-equal + version: 2.2.0 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + es-get-iterator: registry.npmjs.org/es-get-iterator/1.1.3 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + is-arguments: registry.npmjs.org/is-arguments/1.1.1 + is-array-buffer: registry.npmjs.org/is-array-buffer/3.0.1 + is-date-object: registry.npmjs.org/is-date-object/1.0.5 + is-regex: registry.npmjs.org/is-regex/1.1.4 + is-shared-array-buffer: registry.npmjs.org/is-shared-array-buffer/1.0.2 + isarray: registry.npmjs.org/isarray/2.0.5 + object-is: registry.npmjs.org/object-is/1.1.5 + object-keys: registry.npmjs.org/object-keys/1.1.1 + object.assign: registry.npmjs.org/object.assign/4.1.4 + regexp.prototype.flags: registry.npmjs.org/regexp.prototype.flags/1.4.3 + side-channel: registry.npmjs.org/side-channel/1.0.4 + which-boxed-primitive: registry.npmjs.org/which-boxed-primitive/1.0.2 + which-collection: registry.npmjs.org/which-collection/1.0.1 + which-typed-array: registry.npmjs.org/which-typed-array/1.1.9 + dev: true + + registry.npmjs.org/deep-is/0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} + name: deep-is + version: 0.1.4 + dev: true + + registry.npmjs.org/define-properties/1.1.4: + resolution: {integrity: sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz} + name: define-properties + version: 1.1.4 + engines: {node: '>= 0.4'} + dependencies: + has-property-descriptors: registry.npmjs.org/has-property-descriptors/1.0.0 + object-keys: registry.npmjs.org/object-keys/1.1.1 + dev: true + + registry.npmjs.org/delayed-stream/1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz} + name: delayed-stream + version: 1.0.0 + engines: {node: '>=0.4.0'} + dev: true + + registry.npmjs.org/dom-accessibility-api/0.5.16: + resolution: {integrity: sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz} + name: dom-accessibility-api + version: 0.5.16 + dev: true + + registry.npmjs.org/domexception/4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz} + name: domexception + version: 4.0.0 + engines: {node: '>=12'} + dependencies: + webidl-conversions: registry.npmjs.org/webidl-conversions/7.0.0 + dev: true + + registry.npmjs.org/elliptic/6.5.4: + resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz} + name: elliptic + version: 6.5.4 + dependencies: + bn.js: registry.npmjs.org/bn.js/4.12.0 + brorand: registry.npmjs.org/brorand/1.1.0 + hash.js: registry.npmjs.org/hash.js/1.1.7 + hmac-drbg: registry.npmjs.org/hmac-drbg/1.0.1 + inherits: registry.npmjs.org/inherits/2.0.4 + minimalistic-assert: registry.npmjs.org/minimalistic-assert/1.0.1 + minimalistic-crypto-utils: registry.npmjs.org/minimalistic-crypto-utils/1.0.1 + dev: false + + registry.npmjs.org/entities/4.4.0: + resolution: {integrity: sha512-oYp7156SP8LkeGD0GF85ad1X9Ai79WtRsZ2gxJqtBuzH+98YUV6jkHEKlZkMbcrjJjIVJNIDP/3WL9wQkoPbWA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/entities/-/entities-4.4.0.tgz} + name: entities + version: 4.4.0 + engines: {node: '>=0.12'} + dev: true + + registry.npmjs.org/es-get-iterator/1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.3.tgz} + name: es-get-iterator + version: 1.1.3 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + has-symbols: registry.npmjs.org/has-symbols/1.0.3 + is-arguments: registry.npmjs.org/is-arguments/1.1.1 + is-map: registry.npmjs.org/is-map/2.0.2 + is-set: registry.npmjs.org/is-set/2.0.2 + is-string: registry.npmjs.org/is-string/1.0.7 + isarray: registry.npmjs.org/isarray/2.0.5 + stop-iteration-iterator: registry.npmjs.org/stop-iteration-iterator/1.0.0 + dev: true + + registry.npmjs.org/esbuild-android-64/0.15.18: + resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz} + name: esbuild-android-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-android-arm64/0.15.18: + resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz} + name: esbuild-android-arm64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-darwin-64/0.15.18: + resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz} + name: esbuild-darwin-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-darwin-arm64/0.15.18: + resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz} + name: esbuild-darwin-arm64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-freebsd-64/0.15.18: + resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz} + name: esbuild-freebsd-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-freebsd-arm64/0.15.18: + resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz} + name: esbuild-freebsd-arm64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-32/0.15.18: + resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz} + name: esbuild-linux-32 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-64/0.15.18: + resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz} + name: esbuild-linux-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-arm/0.15.18: + resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz} + name: esbuild-linux-arm + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-arm64/0.15.18: + resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz} + name: esbuild-linux-arm64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-mips64le/0.15.18: + resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz} + name: esbuild-linux-mips64le + version: 0.15.18 + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-ppc64le/0.15.18: + resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz} + name: esbuild-linux-ppc64le + version: 0.15.18 + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-riscv64/0.15.18: + resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz} + name: esbuild-linux-riscv64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-linux-s390x/0.15.18: + resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz} + name: esbuild-linux-s390x + version: 0.15.18 + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-netbsd-64/0.15.18: + resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz} + name: esbuild-netbsd-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-openbsd-64/0.15.18: + resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz} + name: esbuild-openbsd-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-sunos-64/0.15.18: + resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz} + name: esbuild-sunos-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-windows-32/0.15.18: + resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz} + name: esbuild-windows-32 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-windows-64/0.15.18: + resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz} + name: esbuild-windows-64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/esbuild-windows-arm64/0.15.18: + resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz} + name: esbuild-windows-arm64 + version: 0.15.18 + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/escape-string-regexp/1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz} + name: escape-string-regexp + version: 1.0.5 + engines: {node: '>=0.8.0'} + dev: true + + registry.npmjs.org/escape-string-regexp/2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz} + name: escape-string-regexp + version: 2.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/escodegen/2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz} + name: escodegen + version: 2.0.0 + engines: {node: '>=6.0'} + hasBin: true + dependencies: + esprima: registry.npmjs.org/esprima/4.0.1 + estraverse: registry.npmjs.org/estraverse/5.3.0 + esutils: registry.npmjs.org/esutils/2.0.3 + optionator: registry.npmjs.org/optionator/0.8.3 + optionalDependencies: + source-map: registry.npmjs.org/source-map/0.6.1 + dev: true + + registry.npmjs.org/esprima/4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz} + name: esprima + version: 4.0.1 + engines: {node: '>=4'} + hasBin: true + dev: true + + registry.npmjs.org/estraverse/5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz} + name: estraverse + version: 5.3.0 + engines: {node: '>=4.0'} + dev: true + + registry.npmjs.org/esutils/2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz} + name: esutils + version: 2.0.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/ethers/5.7.2: + resolution: {integrity: sha512-wswUsmWo1aOK8rR7DIKiWSw9DbLWe6x98Jrn8wcTflTVvaXhAMaB5zGAXy0GYQEQp9iO1iSHWVyARQm11zUtyg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ethers/-/ethers-5.7.2.tgz} + name: ethers + version: 5.7.2 + dependencies: + '@ethersproject/abi': registry.npmjs.org/@ethersproject/abi/5.7.0 + '@ethersproject/abstract-provider': registry.npmjs.org/@ethersproject/abstract-provider/5.7.0 + '@ethersproject/abstract-signer': registry.npmjs.org/@ethersproject/abstract-signer/5.7.0 + '@ethersproject/address': registry.npmjs.org/@ethersproject/address/5.7.0 + '@ethersproject/base64': registry.npmjs.org/@ethersproject/base64/5.7.0 + '@ethersproject/basex': registry.npmjs.org/@ethersproject/basex/5.7.0 + '@ethersproject/bignumber': registry.npmjs.org/@ethersproject/bignumber/5.7.0 + '@ethersproject/bytes': registry.npmjs.org/@ethersproject/bytes/5.7.0 + '@ethersproject/constants': registry.npmjs.org/@ethersproject/constants/5.7.0 + '@ethersproject/contracts': registry.npmjs.org/@ethersproject/contracts/5.7.0 + '@ethersproject/hash': registry.npmjs.org/@ethersproject/hash/5.7.0 + '@ethersproject/hdnode': registry.npmjs.org/@ethersproject/hdnode/5.7.0 + '@ethersproject/json-wallets': registry.npmjs.org/@ethersproject/json-wallets/5.7.0 + '@ethersproject/keccak256': registry.npmjs.org/@ethersproject/keccak256/5.7.0 + '@ethersproject/logger': registry.npmjs.org/@ethersproject/logger/5.7.0 + '@ethersproject/networks': registry.npmjs.org/@ethersproject/networks/5.7.1 + '@ethersproject/pbkdf2': registry.npmjs.org/@ethersproject/pbkdf2/5.7.0 + '@ethersproject/properties': registry.npmjs.org/@ethersproject/properties/5.7.0 + '@ethersproject/providers': registry.npmjs.org/@ethersproject/providers/5.7.2 + '@ethersproject/random': registry.npmjs.org/@ethersproject/random/5.7.0 + '@ethersproject/rlp': registry.npmjs.org/@ethersproject/rlp/5.7.0 + '@ethersproject/sha2': registry.npmjs.org/@ethersproject/sha2/5.7.0 + '@ethersproject/signing-key': registry.npmjs.org/@ethersproject/signing-key/5.7.0 + '@ethersproject/solidity': registry.npmjs.org/@ethersproject/solidity/5.7.0 + '@ethersproject/strings': registry.npmjs.org/@ethersproject/strings/5.7.0 + '@ethersproject/transactions': registry.npmjs.org/@ethersproject/transactions/5.7.0 + '@ethersproject/units': registry.npmjs.org/@ethersproject/units/5.7.0 + '@ethersproject/wallet': registry.npmjs.org/@ethersproject/wallet/5.7.0 + '@ethersproject/web': registry.npmjs.org/@ethersproject/web/5.7.1 + '@ethersproject/wordlists': registry.npmjs.org/@ethersproject/wordlists/5.7.0 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + dev: false + + registry.npmjs.org/eventemitter3/3.1.2: + resolution: {integrity: sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz} + name: eventemitter3 + version: 3.1.2 + dev: false + + registry.npmjs.org/events/3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/events/-/events-3.3.0.tgz} + name: events + version: 3.3.0 + engines: {node: '>=0.8.x'} + dev: false + + registry.npmjs.org/fast-levenshtein/2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz} + name: fast-levenshtein + version: 2.0.6 + dev: true + + registry.npmjs.org/fill-range/7.0.1: + resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz} + name: fill-range + version: 7.0.1 + engines: {node: '>=8'} + dependencies: + to-regex-range: registry.npmjs.org/to-regex-range/5.0.1 + dev: true + + registry.npmjs.org/follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz} + name: follow-redirects + version: 1.15.2 + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + dev: false + + registry.npmjs.org/for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz} + name: for-each + version: 0.3.3 + dependencies: + is-callable: registry.npmjs.org/is-callable/1.2.7 + dev: true + + registry.npmjs.org/form-data/4.0.0: + resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz} + name: form-data + version: 4.0.0 + engines: {node: '>= 6'} + dependencies: + asynckit: registry.npmjs.org/asynckit/0.4.0 + combined-stream: registry.npmjs.org/combined-stream/1.0.8 + mime-types: registry.npmjs.org/mime-types/2.1.35 + dev: true + + registry.npmjs.org/fs.realpath/1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz} + name: fs.realpath + version: 1.0.0 + dev: true + + registry.npmjs.org/fsevents/2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz} + name: fsevents + version: 2.3.2 + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/function-bind/1.1.1: + resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz} + name: function-bind + version: 1.1.1 + dev: true + + registry.npmjs.org/functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz} + name: functions-have-names + version: 1.2.3 + dev: true + + registry.npmjs.org/get-intrinsic/1.2.0: + resolution: {integrity: sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz} + name: get-intrinsic + version: 1.2.0 + dependencies: + function-bind: registry.npmjs.org/function-bind/1.1.1 + has: registry.npmjs.org/has/1.0.3 + has-symbols: registry.npmjs.org/has-symbols/1.0.3 + dev: true + + registry.npmjs.org/glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/glob/-/glob-7.2.3.tgz} + name: glob + version: 7.2.3 + dependencies: + fs.realpath: registry.npmjs.org/fs.realpath/1.0.0 + inflight: registry.npmjs.org/inflight/1.0.6 + inherits: registry.npmjs.org/inherits/2.0.4 + minimatch: registry.npmjs.org/minimatch/3.1.2 + once: registry.npmjs.org/once/1.4.0 + path-is-absolute: registry.npmjs.org/path-is-absolute/1.0.1 + dev: true + + registry.npmjs.org/gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz} + name: gopd + version: 1.0.1 + dependencies: + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + dev: true + + registry.npmjs.org/graceful-fs/4.2.10: + resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz} + name: graceful-fs + version: 4.2.10 + dev: true + + registry.npmjs.org/has-bigints/1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz} + name: has-bigints + version: 1.0.2 + dev: true + + registry.npmjs.org/has-flag/3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz} + name: has-flag + version: 3.0.0 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/has-flag/4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz} + name: has-flag + version: 4.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/has-property-descriptors/1.0.0: + resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz} + name: has-property-descriptors + version: 1.0.0 + dependencies: + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + dev: true + + registry.npmjs.org/has-symbols/1.0.3: + resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz} + name: has-symbols + version: 1.0.3 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/has-tostringtag/1.0.0: + resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz} + name: has-tostringtag + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + has-symbols: registry.npmjs.org/has-symbols/1.0.3 + dev: true + + registry.npmjs.org/has/1.0.3: + resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/has/-/has-1.0.3.tgz} + name: has + version: 1.0.3 + engines: {node: '>= 0.4.0'} + dependencies: + function-bind: registry.npmjs.org/function-bind/1.1.1 + dev: true + + registry.npmjs.org/hash.js/1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz} + name: hash.js + version: 1.1.7 + dependencies: + inherits: registry.npmjs.org/inherits/2.0.4 + minimalistic-assert: registry.npmjs.org/minimalistic-assert/1.0.1 + dev: false + + registry.npmjs.org/hmac-drbg/1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz} + name: hmac-drbg + version: 1.0.1 + dependencies: + hash.js: registry.npmjs.org/hash.js/1.1.7 + minimalistic-assert: registry.npmjs.org/minimalistic-assert/1.0.1 + minimalistic-crypto-utils: registry.npmjs.org/minimalistic-crypto-utils/1.0.1 + dev: false + + registry.npmjs.org/html-encoding-sniffer/3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz} + name: html-encoding-sniffer + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + whatwg-encoding: registry.npmjs.org/whatwg-encoding/2.0.0 + dev: true + + registry.npmjs.org/http-proxy-agent/5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz} + name: http-proxy-agent + version: 5.0.0 + engines: {node: '>= 6'} + dependencies: + '@tootallnate/once': registry.npmjs.org/@tootallnate/once/2.0.0 + agent-base: registry.npmjs.org/agent-base/6.0.2 + debug: registry.npmjs.org/debug/4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/https-proxy-agent/5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz} + name: https-proxy-agent + version: 5.0.1 + engines: {node: '>= 6'} + dependencies: + agent-base: registry.npmjs.org/agent-base/6.0.2 + debug: registry.npmjs.org/debug/4.3.4 + transitivePeerDependencies: + - supports-color + dev: true + + registry.npmjs.org/iconv-lite/0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz} + name: iconv-lite + version: 0.6.3 + engines: {node: '>=0.10.0'} + dependencies: + safer-buffer: registry.npmjs.org/safer-buffer/2.1.2 + dev: true + + registry.npmjs.org/inflight/1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz} + name: inflight + version: 1.0.6 + dependencies: + once: registry.npmjs.org/once/1.4.0 + wrappy: registry.npmjs.org/wrappy/1.0.2 + dev: true + + registry.npmjs.org/inherits/2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz} + name: inherits + version: 2.0.4 + + registry.npmjs.org/injectpromise/1.0.0: + resolution: {integrity: sha512-qNq5wy4qX4uWHcVFOEU+RqZkoVG65FhvGkyDWbuBxILMjK6A1LFf5A1mgXZkD4nRx5FCorD81X/XvPKp/zVfPA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/injectpromise/-/injectpromise-1.0.0.tgz} + name: injectpromise + version: 1.0.0 + dev: false + + registry.npmjs.org/internal-slot/1.0.5: + resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.5.tgz} + name: internal-slot + version: 1.0.5 + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + has: registry.npmjs.org/has/1.0.3 + side-channel: registry.npmjs.org/side-channel/1.0.4 + dev: true + + registry.npmjs.org/interpret/1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz} + name: interpret + version: 1.4.0 + engines: {node: '>= 0.10'} + dev: true + + registry.npmjs.org/is-arguments/1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz} + name: is-arguments + version: 1.1.1 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz} + name: is-array-buffer + version: 3.0.1 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 + dev: true + + registry.npmjs.org/is-bigint/1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz} + name: is-bigint + version: 1.0.4 + dependencies: + has-bigints: registry.npmjs.org/has-bigints/1.0.2 + dev: true + + registry.npmjs.org/is-boolean-object/1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz} + name: is-boolean-object + version: 1.1.2 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz} + name: is-callable + version: 1.2.7 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz} + name: is-core-module + version: 2.11.0 + dependencies: + has: registry.npmjs.org/has/1.0.3 + dev: true + + registry.npmjs.org/is-date-object/1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz} + name: is-date-object + version: 1.0.5 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-map/2.0.2: + resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-map/-/is-map-2.0.2.tgz} + name: is-map + version: 2.0.2 + dev: true + + registry.npmjs.org/is-number-object/1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz} + name: is-number-object + version: 1.0.7 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-number/7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz} + name: is-number + version: 7.0.0 + engines: {node: '>=0.12.0'} + dev: true + + registry.npmjs.org/is-potential-custom-element-name/1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz} + name: is-potential-custom-element-name + version: 1.0.1 + dev: true + + registry.npmjs.org/is-regex/1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz} + name: is-regex + version: 1.1.4 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-set/2.0.2: + resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-set/-/is-set-2.0.2.tgz} + name: is-set + version: 2.0.2 + dev: true + + registry.npmjs.org/is-shared-array-buffer/1.0.2: + resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz} + name: is-shared-array-buffer + version: 1.0.2 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + dev: true + + registry.npmjs.org/is-string/1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz} + name: is-string + version: 1.0.7 + engines: {node: '>= 0.4'} + dependencies: + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-symbol/1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz} + name: is-symbol + version: 1.0.4 + engines: {node: '>= 0.4'} + dependencies: + has-symbols: registry.npmjs.org/has-symbols/1.0.3 + dev: true + + registry.npmjs.org/is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz} + name: is-typed-array + version: 1.1.10 + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: registry.npmjs.org/available-typed-arrays/1.0.5 + call-bind: registry.npmjs.org/call-bind/1.0.2 + for-each: registry.npmjs.org/for-each/0.3.3 + gopd: registry.npmjs.org/gopd/1.0.1 + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + dev: true + + registry.npmjs.org/is-weakmap/2.0.1: + resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.1.tgz} + name: is-weakmap + version: 2.0.1 + dev: true + + registry.npmjs.org/is-weakset/2.0.2: + resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.2.tgz} + name: is-weakset + version: 2.0.2 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + dev: true + + registry.npmjs.org/isarray/2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz} + name: isarray + version: 2.0.5 + dev: true + + registry.npmjs.org/jest-environment-jsdom/29.4.2: + resolution: {integrity: sha512-v1sH4Q0JGM+LPEGqHNM+m+uTMf3vpXpKiuDYqWUAh+0c9+nc7scGE+qTR5JuE+OOTDnwfzPgcv9sMq6zWAOaVg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jest-environment-jsdom/-/jest-environment-jsdom-29.4.2.tgz} + name: jest-environment-jsdom + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + '@jest/environment': registry.npmjs.org/@jest/environment/29.4.2 + '@jest/fake-timers': registry.npmjs.org/@jest/fake-timers/29.4.2 + '@jest/types': registry.npmjs.org/@jest/types/29.4.2 + '@types/jsdom': registry.npmjs.org/@types/jsdom/20.0.1 + '@types/node': registry.npmjs.org/@types/node/18.13.0 + jest-mock: registry.npmjs.org/jest-mock/29.4.2 + jest-util: registry.npmjs.org/jest-util/29.4.2 + jsdom: registry.npmjs.org/jsdom/20.0.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + registry.npmjs.org/jest-message-util/29.4.2: + resolution: {integrity: sha512-SElcuN4s6PNKpOEtTInjOAA8QvItu0iugkXqhYyguRvQoXapg5gN+9RQxLAkakChZA7Y26j6yUCsFWN+hlKD6g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.4.2.tgz} + name: jest-message-util + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@babel/code-frame': registry.npmjs.org/@babel/code-frame/7.18.6 + '@jest/types': registry.npmjs.org/@jest/types/29.4.2 + '@types/stack-utils': registry.npmjs.org/@types/stack-utils/2.0.1 + chalk: registry.npmjs.org/chalk/4.1.2 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + micromatch: registry.npmjs.org/micromatch/4.0.5 + pretty-format: registry.npmjs.org/pretty-format/29.4.2 + slash: registry.npmjs.org/slash/3.0.0 + stack-utils: registry.npmjs.org/stack-utils/2.0.6 + dev: true + + registry.npmjs.org/jest-mock/29.4.2: + resolution: {integrity: sha512-x1FSd4Gvx2yIahdaIKoBjwji6XpboDunSJ95RpntGrYulI1ByuYQCKN/P7hvk09JB74IonU3IPLdkutEWYt++g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jest-mock/-/jest-mock-29.4.2.tgz} + name: jest-mock + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': registry.npmjs.org/@jest/types/29.4.2 + '@types/node': registry.npmjs.org/@types/node/18.13.0 + jest-util: registry.npmjs.org/jest-util/29.4.2 + dev: true + + registry.npmjs.org/jest-util/29.4.2: + resolution: {integrity: sha512-wKnm6XpJgzMUSRFB7YF48CuwdzuDIHenVuoIb1PLuJ6F+uErZsuDkU+EiExkChf6473XcawBrSfDSnXl+/YG4g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jest-util/-/jest-util-29.4.2.tgz} + name: jest-util + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/types': registry.npmjs.org/@jest/types/29.4.2 + '@types/node': registry.npmjs.org/@types/node/18.13.0 + chalk: registry.npmjs.org/chalk/4.1.2 + ci-info: registry.npmjs.org/ci-info/3.7.1 + graceful-fs: registry.npmjs.org/graceful-fs/4.2.10 + picomatch: registry.npmjs.org/picomatch/2.3.1 + dev: true + + registry.npmjs.org/js-sha3/0.8.0: + resolution: {integrity: sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/js-sha3/-/js-sha3-0.8.0.tgz} + name: js-sha3 + version: 0.8.0 + dev: false + + registry.npmjs.org/js-tokens/4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz} + name: js-tokens + version: 4.0.0 + dev: true + + registry.npmjs.org/jsdom/20.0.3: + resolution: {integrity: sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz} + name: jsdom + version: 20.0.3 + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + dependencies: + abab: registry.npmjs.org/abab/2.0.6 + acorn: registry.npmjs.org/acorn/8.8.2 + acorn-globals: registry.npmjs.org/acorn-globals/7.0.1 + cssom: registry.npmjs.org/cssom/0.5.0 + cssstyle: registry.npmjs.org/cssstyle/2.3.0 + data-urls: registry.npmjs.org/data-urls/3.0.2 + decimal.js: registry.npmjs.org/decimal.js/10.4.3 + domexception: registry.npmjs.org/domexception/4.0.0 + escodegen: registry.npmjs.org/escodegen/2.0.0 + form-data: registry.npmjs.org/form-data/4.0.0 + html-encoding-sniffer: registry.npmjs.org/html-encoding-sniffer/3.0.0 + http-proxy-agent: registry.npmjs.org/http-proxy-agent/5.0.0 + https-proxy-agent: registry.npmjs.org/https-proxy-agent/5.0.1 + is-potential-custom-element-name: registry.npmjs.org/is-potential-custom-element-name/1.0.1 + nwsapi: registry.npmjs.org/nwsapi/2.2.2 + parse5: registry.npmjs.org/parse5/7.1.2 + saxes: registry.npmjs.org/saxes/6.0.0 + symbol-tree: registry.npmjs.org/symbol-tree/3.2.4 + tough-cookie: registry.npmjs.org/tough-cookie/4.1.2 + w3c-xmlserializer: registry.npmjs.org/w3c-xmlserializer/4.0.0 + webidl-conversions: registry.npmjs.org/webidl-conversions/7.0.0 + whatwg-encoding: registry.npmjs.org/whatwg-encoding/2.0.0 + whatwg-mimetype: registry.npmjs.org/whatwg-mimetype/3.0.0 + whatwg-url: registry.npmjs.org/whatwg-url/11.0.0 + ws: registry.npmjs.org/ws/8.12.0 + xml-name-validator: registry.npmjs.org/xml-name-validator/4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + dev: true + + registry.npmjs.org/levn/0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/levn/-/levn-0.3.0.tgz} + name: levn + version: 0.3.0 + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: registry.npmjs.org/prelude-ls/1.1.2 + type-check: registry.npmjs.org/type-check/0.3.2 + dev: true + + registry.npmjs.org/lodash/4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz} + name: lodash + version: 4.17.21 + dev: false + + registry.npmjs.org/lz-string/1.4.4: + resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lz-string/-/lz-string-1.4.4.tgz} + name: lz-string + version: 1.4.4 + hasBin: true + dev: true + + registry.npmjs.org/micromatch/4.0.5: + resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz} + name: micromatch + version: 4.0.5 + engines: {node: '>=8.6'} + dependencies: + braces: registry.npmjs.org/braces/3.0.2 + picomatch: registry.npmjs.org/picomatch/2.3.1 + dev: true + + registry.npmjs.org/mime-db/1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz} + name: mime-db + version: 1.52.0 + engines: {node: '>= 0.6'} + dev: true + + registry.npmjs.org/mime-types/2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz} + name: mime-types + version: 2.1.35 + engines: {node: '>= 0.6'} + dependencies: + mime-db: registry.npmjs.org/mime-db/1.52.0 + dev: true + + registry.npmjs.org/minimalistic-assert/1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz} + name: minimalistic-assert + version: 1.0.1 + dev: false + + registry.npmjs.org/minimalistic-crypto-utils/1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz} + name: minimalistic-crypto-utils + version: 1.0.1 + dev: false + + registry.npmjs.org/minimatch/3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz} + name: minimatch + version: 3.1.2 + dependencies: + brace-expansion: registry.npmjs.org/brace-expansion/1.1.11 + dev: true + + registry.npmjs.org/minimist/1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz} + name: minimist + version: 1.2.8 + dev: true + + registry.npmjs.org/ms/2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ms/-/ms-2.1.2.tgz} + name: ms + version: 2.1.2 + dev: true + + registry.npmjs.org/mutation-observer/1.0.3: + resolution: {integrity: sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mutation-observer/-/mutation-observer-1.0.3.tgz} + name: mutation-observer + version: 1.0.3 + dev: false + + registry.npmjs.org/nwsapi/2.2.2: + resolution: {integrity: sha512-90yv+6538zuvUMnN+zCr8LuV6bPFdq50304114vJYJ8RDyK8D5O9Phpbd6SZWgI7PwzmmfN1upeOJlvybDSgCw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.2.tgz} + name: nwsapi + version: 2.2.2 + dev: true + + registry.npmjs.org/object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz} + name: object-inspect + version: 1.12.3 + dev: true + + registry.npmjs.org/object-is/1.1.5: + resolution: {integrity: sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz} + name: object-is + version: 1.1.5 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + define-properties: registry.npmjs.org/define-properties/1.1.4 + dev: true + + registry.npmjs.org/object-keys/1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz} + name: object-keys + version: 1.1.1 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz} + name: object.assign + version: 4.1.4 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + define-properties: registry.npmjs.org/define-properties/1.1.4 + has-symbols: registry.npmjs.org/has-symbols/1.0.3 + object-keys: registry.npmjs.org/object-keys/1.1.1 + dev: true + + registry.npmjs.org/once/1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/once/-/once-1.4.0.tgz} + name: once + version: 1.4.0 + dependencies: + wrappy: registry.npmjs.org/wrappy/1.0.2 + dev: true + + registry.npmjs.org/optionator/0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz} + name: optionator + version: 0.8.3 + engines: {node: '>= 0.8.0'} + dependencies: + deep-is: registry.npmjs.org/deep-is/0.1.4 + fast-levenshtein: registry.npmjs.org/fast-levenshtein/2.0.6 + levn: registry.npmjs.org/levn/0.3.0 + prelude-ls: registry.npmjs.org/prelude-ls/1.1.2 + type-check: registry.npmjs.org/type-check/0.3.2 + word-wrap: registry.npmjs.org/word-wrap/1.2.3 + dev: true + + registry.npmjs.org/parse5/7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz} + name: parse5 + version: 7.1.2 + dependencies: + entities: registry.npmjs.org/entities/4.4.0 + dev: true + + registry.npmjs.org/path-is-absolute/1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz} + name: path-is-absolute + version: 1.0.1 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/path-parse/1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz} + name: path-parse + version: 1.0.7 + dev: true + + registry.npmjs.org/picomatch/2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz} + name: picomatch + version: 2.3.1 + engines: {node: '>=8.6'} + dev: true + + registry.npmjs.org/prelude-ls/1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz} + name: prelude-ls + version: 1.1.2 + engines: {node: '>= 0.8.0'} + dev: true + + registry.npmjs.org/pretty-format/27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz} + name: pretty-format + version: 27.5.1 + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + dependencies: + ansi-regex: registry.npmjs.org/ansi-regex/5.0.1 + ansi-styles: registry.npmjs.org/ansi-styles/5.2.0 + react-is: registry.npmjs.org/react-is/17.0.2 + dev: true + + registry.npmjs.org/pretty-format/29.4.2: + resolution: {integrity: sha512-qKlHR8yFVCbcEWba0H0TOC8dnLlO4vPlyEjRPw31FZ2Rupy9nLa8ZLbYny8gWEl8CkEhJqAE6IzdNELTBVcBEg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/pretty-format/-/pretty-format-29.4.2.tgz} + name: pretty-format + version: 29.4.2 + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + dependencies: + '@jest/schemas': registry.npmjs.org/@jest/schemas/29.4.2 + ansi-styles: registry.npmjs.org/ansi-styles/5.2.0 + react-is: registry.npmjs.org/react-is/18.2.0 + dev: true + + registry.npmjs.org/psl/1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/psl/-/psl-1.9.0.tgz} + name: psl + version: 1.9.0 + dev: true + + registry.npmjs.org/punycode/2.3.0: + resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz} + name: punycode + version: 2.3.0 + engines: {node: '>=6'} + dev: true + + registry.npmjs.org/querystringify/2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz} + name: querystringify + version: 2.2.0 + dev: true + + registry.npmjs.org/react-is/17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz} + name: react-is + version: 17.0.2 + dev: true + + registry.npmjs.org/react-is/18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz} + name: react-is + version: 18.2.0 + dev: true + + registry.npmjs.org/rechoir/0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz} + name: rechoir + version: 0.6.2 + engines: {node: '>= 0.10'} + dependencies: + resolve: registry.npmjs.org/resolve/1.22.1 + dev: true + + registry.npmjs.org/regenerator-runtime/0.13.11: + resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz} + name: regenerator-runtime + version: 0.13.11 + + registry.npmjs.org/regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz} + name: regexp.prototype.flags + version: 1.4.3 + engines: {node: '>= 0.4'} + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + define-properties: registry.npmjs.org/define-properties/1.1.4 + functions-have-names: registry.npmjs.org/functions-have-names/1.2.3 + dev: true + + registry.npmjs.org/requires-port/1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz} + name: requires-port + version: 1.0.0 + dev: true + + registry.npmjs.org/resolve/1.22.1: + resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz} + name: resolve + version: 1.22.1 + hasBin: true + dependencies: + is-core-module: registry.npmjs.org/is-core-module/2.11.0 + path-parse: registry.npmjs.org/path-parse/1.0.7 + supports-preserve-symlinks-flag: registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0 + dev: true + + registry.npmjs.org/safer-buffer/2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz} + name: safer-buffer + version: 2.1.2 + dev: true + + registry.npmjs.org/saxes/6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz} + name: saxes + version: 6.0.0 + engines: {node: '>=v12.22.7'} + dependencies: + xmlchars: registry.npmjs.org/xmlchars/2.2.0 + dev: true + + registry.npmjs.org/scrypt-js/3.0.1: + resolution: {integrity: sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz} + name: scrypt-js + version: 3.0.1 + dev: false + + registry.npmjs.org/semver/5.7.1: + resolution: {integrity: sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/semver/-/semver-5.7.1.tgz} + name: semver + version: 5.7.1 + hasBin: true + dev: false + + registry.npmjs.org/shelljs/0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/shelljs/-/shelljs-0.8.5.tgz} + name: shelljs + version: 0.8.5 + engines: {node: '>=4'} + hasBin: true + dependencies: + glob: registry.npmjs.org/glob/7.2.3 + interpret: registry.npmjs.org/interpret/1.4.0 + rechoir: registry.npmjs.org/rechoir/0.6.2 + dev: true + + registry.npmjs.org/shx/0.3.4: + resolution: {integrity: sha512-N6A9MLVqjxZYcVn8hLmtneQWIJtp8IKzMP4eMnx+nqkvXoqinUPCbUFLp2UcWTEIUONhlk0ewxr/jaVGlc+J+g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/shx/-/shx-0.3.4.tgz} + name: shx + version: 0.3.4 + engines: {node: '>=6'} + hasBin: true + dependencies: + minimist: registry.npmjs.org/minimist/1.2.8 + shelljs: registry.npmjs.org/shelljs/0.8.5 + dev: true + + registry.npmjs.org/side-channel/1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz} + name: side-channel + version: 1.0.4 + dependencies: + call-bind: registry.npmjs.org/call-bind/1.0.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.2.0 + object-inspect: registry.npmjs.org/object-inspect/1.12.3 + dev: true + + registry.npmjs.org/slash/3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/slash/-/slash-3.0.0.tgz} + name: slash + version: 3.0.0 + engines: {node: '>=8'} + dev: true + + registry.npmjs.org/source-map/0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz} + name: source-map + version: 0.6.1 + engines: {node: '>=0.10.0'} + requiresBuild: true + dev: true + optional: true + + registry.npmjs.org/stack-utils/2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz} + name: stack-utils + version: 2.0.6 + engines: {node: '>=10'} + dependencies: + escape-string-regexp: registry.npmjs.org/escape-string-regexp/2.0.0 + dev: true + + registry.npmjs.org/stop-iteration-iterator/1.0.0: + resolution: {integrity: sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz} + name: stop-iteration-iterator + version: 1.0.0 + engines: {node: '>= 0.4'} + dependencies: + internal-slot: registry.npmjs.org/internal-slot/1.0.5 + dev: true + + registry.npmjs.org/supports-color/5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz} + name: supports-color + version: 5.5.0 + engines: {node: '>=4'} + dependencies: + has-flag: registry.npmjs.org/has-flag/3.0.0 + dev: true + + registry.npmjs.org/supports-color/7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz} + name: supports-color + version: 7.2.0 + engines: {node: '>=8'} + dependencies: + has-flag: registry.npmjs.org/has-flag/4.0.0 + dev: true + + registry.npmjs.org/supports-preserve-symlinks-flag/1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz} + name: supports-preserve-symlinks-flag + version: 1.0.0 + engines: {node: '>= 0.4'} + dev: true + + registry.npmjs.org/symbol-tree/3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz} + name: symbol-tree + version: 3.2.4 + dev: true + + registry.npmjs.org/to-regex-range/5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz} + name: to-regex-range + version: 5.0.1 + engines: {node: '>=8.0'} + dependencies: + is-number: registry.npmjs.org/is-number/7.0.0 + dev: true + + registry.npmjs.org/tough-cookie/4.1.2: + resolution: {integrity: sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz} + name: tough-cookie + version: 4.1.2 + engines: {node: '>=6'} + dependencies: + psl: registry.npmjs.org/psl/1.9.0 + punycode: registry.npmjs.org/punycode/2.3.0 + universalify: registry.npmjs.org/universalify/0.2.0 + url-parse: registry.npmjs.org/url-parse/1.5.10 + dev: true + + registry.npmjs.org/tr46/3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz} + name: tr46 + version: 3.0.0 + engines: {node: '>=12'} + dependencies: + punycode: registry.npmjs.org/punycode/2.3.0 + dev: true + + registry.npmjs.org/tronweb/5.1.0: + resolution: {integrity: sha512-8a+mYKVUzsUWjeTHSAKcxAp82FseFTLlNLoLQ0KIL1rIt6Dy5whcyJwYatxUktbaztl55lnImHbupkKqMdIj1w==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tronweb/-/tronweb-5.1.0.tgz} + name: tronweb + version: 5.1.0 + dependencies: + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.20.13 + '@tronweb3/google-protobuf': registry.npmjs.org/@tronweb3/google-protobuf/3.21.2 + axios: registry.npmjs.org/axios/0.26.1 + bignumber.js: registry.npmjs.org/bignumber.js/9.1.1 + elliptic: registry.npmjs.org/elliptic/6.5.4 + ethers: registry.npmjs.org/ethers/5.7.2 + eventemitter3: registry.npmjs.org/eventemitter3/3.1.2 + injectpromise: registry.npmjs.org/injectpromise/1.0.0 + lodash: registry.npmjs.org/lodash/4.17.21 + semver: registry.npmjs.org/semver/5.7.1 + validator: registry.npmjs.org/validator/13.9.0 + transitivePeerDependencies: + - bufferutil + - debug + - utf-8-validate + dev: false + + registry.npmjs.org/tslib/2.5.0: + resolution: {integrity: sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tslib/-/tslib-2.5.0.tgz} + name: tslib + version: 2.5.0 + dev: false + + registry.npmjs.org/type-check/0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz} + name: type-check + version: 0.3.2 + engines: {node: '>= 0.8.0'} + dependencies: + prelude-ls: registry.npmjs.org/prelude-ls/1.1.2 + dev: true + + registry.npmjs.org/type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz} + name: type-detect + version: 4.0.8 + engines: {node: '>=4'} + dev: true + + registry.npmjs.org/universalify/0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz} + name: universalify + version: 0.2.0 + engines: {node: '>= 4.0.0'} + dev: true + + registry.npmjs.org/url-parse/1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz} + name: url-parse + version: 1.5.10 + dependencies: + querystringify: registry.npmjs.org/querystringify/2.2.0 + requires-port: registry.npmjs.org/requires-port/1.0.0 + dev: true + + registry.npmjs.org/validator/13.9.0: + resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/validator/-/validator-13.9.0.tgz} + name: validator + version: 13.9.0 + engines: {node: '>= 0.10'} + dev: false + + registry.npmjs.org/vconsole/3.15.0: + resolution: {integrity: sha512-8hq7wabPcRucSWQyN7/1tthMawP9JPvM95zgtMHpPknMMMCKj+abpoK7P7oKK4B0qw58C24Mdvo9+raUdpHyVQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/vconsole/-/vconsole-3.15.0.tgz} + name: vconsole + version: 3.15.0 + dependencies: + '@babel/runtime': registry.npmjs.org/@babel/runtime/7.20.13 + copy-text-to-clipboard: registry.npmjs.org/copy-text-to-clipboard/3.0.1 + core-js: registry.npmjs.org/core-js/3.27.2 + mutation-observer: registry.npmjs.org/mutation-observer/1.0.3 + dev: false + + registry.npmjs.org/w3c-xmlserializer/4.0.0: + resolution: {integrity: sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz} + name: w3c-xmlserializer + version: 4.0.0 + engines: {node: '>=14'} + dependencies: + xml-name-validator: registry.npmjs.org/xml-name-validator/4.0.0 + dev: true + + registry.npmjs.org/webidl-conversions/7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz} + name: webidl-conversions + version: 7.0.0 + engines: {node: '>=12'} + dev: true + + registry.npmjs.org/whatwg-encoding/2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz} + name: whatwg-encoding + version: 2.0.0 + engines: {node: '>=12'} + dependencies: + iconv-lite: registry.npmjs.org/iconv-lite/0.6.3 + dev: true + + registry.npmjs.org/whatwg-mimetype/3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz} + name: whatwg-mimetype + version: 3.0.0 + engines: {node: '>=12'} + dev: true + + registry.npmjs.org/whatwg-url/11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz} + name: whatwg-url + version: 11.0.0 + engines: {node: '>=12'} + dependencies: + tr46: registry.npmjs.org/tr46/3.0.0 + webidl-conversions: registry.npmjs.org/webidl-conversions/7.0.0 + dev: true + + registry.npmjs.org/which-boxed-primitive/1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz} + name: which-boxed-primitive + version: 1.0.2 + dependencies: + is-bigint: registry.npmjs.org/is-bigint/1.0.4 + is-boolean-object: registry.npmjs.org/is-boolean-object/1.1.2 + is-number-object: registry.npmjs.org/is-number-object/1.0.7 + is-string: registry.npmjs.org/is-string/1.0.7 + is-symbol: registry.npmjs.org/is-symbol/1.0.4 + dev: true + + registry.npmjs.org/which-collection/1.0.1: + resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/which-collection/-/which-collection-1.0.1.tgz} + name: which-collection + version: 1.0.1 + dependencies: + is-map: registry.npmjs.org/is-map/2.0.2 + is-set: registry.npmjs.org/is-set/2.0.2 + is-weakmap: registry.npmjs.org/is-weakmap/2.0.1 + is-weakset: registry.npmjs.org/is-weakset/2.0.2 + dev: true + + registry.npmjs.org/which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz} + name: which-typed-array + version: 1.1.9 + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: registry.npmjs.org/available-typed-arrays/1.0.5 + call-bind: registry.npmjs.org/call-bind/1.0.2 + for-each: registry.npmjs.org/for-each/0.3.3 + gopd: registry.npmjs.org/gopd/1.0.1 + has-tostringtag: registry.npmjs.org/has-tostringtag/1.0.0 + is-typed-array: registry.npmjs.org/is-typed-array/1.1.10 + dev: true + + registry.npmjs.org/word-wrap/1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz} + name: word-wrap + version: 1.2.3 + engines: {node: '>=0.10.0'} + dev: true + + registry.npmjs.org/wrappy/1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz} + name: wrappy + version: 1.0.2 + dev: true + + registry.npmjs.org/ws/7.4.6: + resolution: {integrity: sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ws/-/ws-7.4.6.tgz} + name: ws + version: 7.4.6 + 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: false + + registry.npmjs.org/ws/8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/ws/-/ws-8.12.0.tgz} + name: ws + version: 8.12.0 + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + dev: true + + registry.npmjs.org/xml-name-validator/4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz} + name: xml-name-validator + version: 4.0.0 + engines: {node: '>=12'} + dev: true + + registry.npmjs.org/xmlchars/2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz} + name: xmlchars + version: 2.2.0 + dev: true diff --git a/tsconfig.all.json b/tsconfig.all.json index e44487d..69dc82c 100644 --- a/tsconfig.all.json +++ b/tsconfig.all.json @@ -16,6 +16,15 @@ { "path": "./packages/adapters/walletconnect/tsconfig.all.json" }, + { + "path": "./packages/adapters/tokenpocket/tsconfig.all.json" + }, + { + "path": "./packages/adapters/bitkeep/tsconfig.all.json" + }, + { + "path": "./packages/adapters/okxwallet/tsconfig.all.json" + }, { "path": "./packages/react/react-hooks/tsconfig.all.json" },